diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm new file mode 100644 index 0000000000..76cb8bb9db --- /dev/null +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm @@ -0,0 +1,1698 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/button/door{ + dir = 4; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = 24; + req_access_txt = "10" + }, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) +"cB" = ( +/obj/machinery/button/door{ + dir = 1; + id = "engsm"; + name = "Radiation Shutters Control"; + req_access_txt = "10" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"cP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"dz" = ( +/turf/open/space/basic, +/area/space/nearstation) +"dN" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"dW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ea" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) +"eA" = ( +/obj/structure/table, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plasteel, +/area/engine/engineering) +"eI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"eJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"eL" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"fh" = ( +/turf/open/floor/plasteel, +/area/engine/engineering) +"fr" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine Southwest"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"fH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"gf" = ( +/obj/item/storage/toolbox/mechanical, +/obj/item/flashlight, +/obj/item/pipe_dispenser, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ht" = ( +/obj/structure/reflector/single/anchored{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"hR" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"ic" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"jx" = ( +/obj/structure/reflector/single/anchored{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"jH" = ( +/obj/structure/sign/warning/radiation/rad_area, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"kh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"kC" = ( +/obj/structure/sign/warning/radiation/rad_area, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"kK" = ( +/turf/closed/wall, +/area/engine/engineering) +"la" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"lJ" = ( +/obj/structure/sign/warning/electricshock, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"lY" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/engine/engineering) +"me" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/closet/radiation, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"mB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"mZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"nR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"nW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qH" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"qP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"rj" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"rm" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"rM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow, +/obj/machinery/power/rad_collector, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"sr" = ( +/obj/machinery/light, +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine South"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"tl" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"to" = ( +/obj/structure/sign/warning/radiation/rad_area, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"tv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/power/emitter, +/turf/open/floor/engine, +/area/engine/engineering) +"tC" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"tE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"tT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + dir = 4; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = 24; + req_access_txt = "10" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"uG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"wt" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"xg" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xJ" = ( +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/rad_collector, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"yo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) +"yq" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/rad_collector, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"yU" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/engine/engineering) +"zW" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel, +/area/engine/engineering) +"zZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + dir = 8; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = -24; + req_access_txt = "10" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Aw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"AF" = ( +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Bb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#c1caff" + }, +/obj/machinery/camera/emp_proof{ + c_tag = "Particle Accelerator"; + network = list("ss13","engine") + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/the_singularitygen, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Bj" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/rad_collector, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"BG" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Ce" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Ch" = ( +/turf/closed/wall/r_wall, +/area/engine/engineering) +"CN" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine East"; + dir = 8; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"DK" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine West"; + dir = 4; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Eu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ER" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ES" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/item/clothing/head/welding, +/obj/item/weldingtool/largetank, +/obj/item/wrench, +/obj/item/stack/cable_coil/red, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"FK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"FM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"FP" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"FY" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/obj/item/geiger_counter, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Hc" = ( +/obj/machinery/light, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"HQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/button/door{ + dir = 8; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = -24; + req_access_txt = "10" + }, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) +"HW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"In" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Js" = ( +/obj/structure/particle_accelerator/end_cap, +/obj/structure/particle_accelerator/fuel_chamber, +/obj/structure/particle_accelerator/particle_emitter/center, +/obj/structure/particle_accelerator/particle_emitter/left, +/obj/structure/particle_accelerator/particle_emitter/right, +/obj/structure/particle_accelerator/power_box, +/obj/machinery/particle_accelerator/control_box, +/obj/structure/closet/crate/engineering{ + name = "Particle Accelerator Crate" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"JC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Kg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Lr" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Ls" = ( +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"LB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"LJ" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine Southeast"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"LO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"LV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Mi" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Mn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"MD" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"MJ" = ( +/turf/open/space/basic, +/area/space) +"Nm" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"No" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Nz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"NS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Og" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"Ox" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Pg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Pt" = ( +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Qk" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine Northeast"; + network = list("ss13","engine") + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Ra" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/engine/engineering) +"Rp" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Rr" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 1 + }, +/turf/open/space/basic, +/area/engine/engineering) +"Si" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"SD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Um" = ( +/turf/template_noop, +/area/template_noop) +"UL" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Singularity Engine Northwest"; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"UV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Wf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ww" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"WQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"WX" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Xk" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Yd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Yl" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Yn" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/engineering) +"YY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Zb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Zx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Zz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ZF" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ZK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ZY" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) + +(1,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(2,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(3,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(4,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(5,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +Yl +dz +dz +MJ +MJ +dz +dz +dz +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(6,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +rm +Yl +dz +dz +dz +dz +Yl +dz +dz +dz +dz +dz +dz +dz +dz +Um +Um +Um +Um +"} +(7,1,1) = {" +Um +Um +Um +Um +kK +kK +Ch +Ch +Ch +Ch +Ch +Ch +Ch +jH +Ch +Ch +Ch +Ch +lJ +Ch +Nm +dz +MJ +MJ +MJ +MJ +"} +(8,1,1) = {" +Um +Um +Lr +la +kK +Ra +Ch +tC +tC +tC +tC +tC +Ch +Ch +Ch +tC +tC +tC +tC +tC +Ch +dz +dz +MJ +MJ +MJ +"} +(9,1,1) = {" +Um +Um +FM +FM +In +ER +yU +Pt +Pt +Pt +Pt +Pt +Pt +DK +Pt +Pt +Pt +Pt +Pt +Pt +Ls +Pt +dz +dz +MJ +MJ +"} +(10,1,1) = {" +Um +Si +fh +ZY +to +Ch +Ch +UL +dz +Yl +dz +dz +FP +dz +FP +dz +dz +Yl +dz +Pt +Ch +Ch +tC +dz +MJ +MJ +"} +(11,1,1) = {" +xJ +gf +fh +dN +YY +MD +Ch +Pt +dz +Yl +dz +dz +FP +dz +FP +dz +dz +Yl +dz +Pt +fr +Ch +tC +dz +MJ +MJ +"} +(12,1,1) = {" +LO +Eu +Pg +cP +JC +tv +rj +Pt +dz +Yl +ht +dz +FP +dz +FP +dz +dz +Yl +dz +Yl +Pt +Ch +tC +dz +dz +MJ +"} +(13,1,1) = {" +NS +xx +fh +zW +dW +ea +rj +Pt +eL +Kg +Kg +rM +Kg +rM +Kg +rM +Kg +Kg +tl +Yl +Hc +Ch +tC +Yl +dz +MJ +"} +(14,1,1) = {" +yo +me +aT +Aw +JC +tv +rj +Og +hR +dz +FP +dz +dz +rm +dz +dz +ht +dz +hR +Yl +Pt +Ch +jH +Yl +dz +MJ +"} +(15,1,1) = {" +jH +FK +Ch +wt +tE +rj +rj +Og +hR +FP +Xk +FP +FP +rm +FP +FP +Xk +FP +hR +dz +Pt +Ch +tC +Yl +dz +MJ +"} +(16,1,1) = {" +Ch +ES +ZK +ZK +zZ +ZK +fH +Og +hR +dz +FP +dz +dz +rm +dz +dz +FP +dz +xQ +dz +Pt +Ch +tC +dz +dz +MJ +"} +(17,1,1) = {" +wt +Zz +Wf +Ox +nR +Zb +lY +Og +hR +dz +FP +dz +dz +rm +dz +dz +FP +dz +hR +Yl +Pt +Ch +tC +dz +MJ +MJ +"} +(18,1,1) = {" +cB +Bb +qP +ZF +SD +Yd +eI +LB +UV +rm +rm +rm +rm +rm +rm +rm +rm +rm +yq +Yl +sr +Ch +tC +dz +MJ +MJ +"} +(19,1,1) = {" +wt +eJ +Zx +nW +Mn +WQ +lY +Og +hR +dz +FP +dz +dz +rm +dz +dz +FP +dz +hR +Yl +Pt +Ch +tC +dz +MJ +MJ +"} +(20,1,1) = {" +Ch +Js +No +No +tT +No +LV +Og +hR +dz +FP +dz +dz +rm +dz +dz +FP +dz +Bj +dz +Pt +Ch +tC +dz +dz +MJ +"} +(21,1,1) = {" +jH +Nz +Ch +wt +tE +rj +rj +Og +hR +FP +Xk +FP +FP +rm +FP +FP +Xk +FP +hR +dz +Pt +Ch +tC +Yl +dz +MJ +"} +(22,1,1) = {" +AF +WX +HQ +Aw +JC +tv +rj +Og +hR +dz +FP +dz +dz +rm +dz +dz +jx +dz +hR +Yl +Pt +Ch +jH +Yl +dz +MJ +"} +(23,1,1) = {" +fh +kh +fh +fh +dW +ea +rj +Pt +ic +Kg +Kg +rM +Kg +rM +Kg +rM +Kg +Kg +Ce +Yl +Hc +Ch +tC +Yl +dz +MJ +"} +(24,1,1) = {" +fh +kh +uG +cP +xg +tv +rj +Pt +dz +Yl +jx +dz +FP +dz +FP +dz +dz +Yl +dz +Yl +Pt +Ch +tC +dz +dz +MJ +"} +(25,1,1) = {" +eA +FY +mB +Rp +HW +Mi +Ch +Pt +dz +Yl +dz +dz +FP +dz +FP +dz +dz +Yl +dz +Pt +LJ +Ch +tC +dz +MJ +MJ +"} +(26,1,1) = {" +fh +kh +mB +ZY +kC +mZ +mZ +Qk +Rr +Yl +dz +dz +FP +dz +FP +dz +dz +Yl +dz +Pt +Ch +Ch +tC +dz +MJ +MJ +"} +(27,1,1) = {" +Um +Um +Um +fh +Ww +qH +yU +Pt +Pt +Pt +Pt +Pt +Pt +CN +Pt +Pt +Pt +Pt +Pt +Pt +Ls +Pt +dz +dz +MJ +MJ +"} +(28,1,1) = {" +Um +Um +Um +fh +Yn +BG +Ch +tC +tC +tC +tC +tC +Ch +Ch +Ch +tC +tC +tC +tC +tC +Ch +Yl +dz +dz +dz +MJ +"} +(29,1,1) = {" +Um +Um +Um +fh +Yn +kK +Ch +Ch +Ch +Ch +Ch +Ch +Ch +jH +Ch +Ch +Ch +Ch +lJ +Ch +Nm +Yl +Yl +Yl +dz +MJ +"} diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm new file mode 100644 index 0000000000..6462cef211 --- /dev/null +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm @@ -0,0 +1,2827 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ac" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"at" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/cartridge/atmos, +/turf/open/floor/engine, +/area/engine/engineering) +"av" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"aw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"aA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"aC" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"aV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/engine/supermatter) +"aX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/space, +/area/space/nearstation) +"aY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"bo" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"bH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "Output to Waste" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"bI" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"bT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"bW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ck" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"cp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"cP" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"cS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/safety_eye_protection, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"cX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Gas to Cooling Loop" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"de" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Port"; + dir = 4; + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/engine/engineering) +"df" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/supermatter) +"dl" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"dw" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) +"dD" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space/nearstation) +"ej" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Cooling Loop Bypass" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ey" = ( +/obj/structure/reflector/single/anchored{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"ez" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"fa" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"fj" = ( +/obj/machinery/status_display, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"fq" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 10 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"fK" = ( +/obj/structure/sign/warning/radiation, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"fW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"gf" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"gj" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"gx" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"gB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"gQ" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"hy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"hJ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"hK" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"ii" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"in" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"iC" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = 6 + }, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = -4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"iD" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"iJ" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"iU" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"jg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"jp" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"js" = ( +/obj/structure/sign/warning/electricshock, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"jB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"jZ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"kA" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"kW" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"ln" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"lw" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"lE" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Gas to Chamber" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/engine/supermatter) +"lG" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/space, +/area/space/nearstation) +"mi" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"mj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/engine/engineering) +"mE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"mH" = ( +/obj/structure/sign/poster/official/safety_eye_protection, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"mU" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"mW" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4 + }, +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"mX" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/engine/engineering) +"na" = ( +/obj/machinery/camera{ + c_tag = "Supermatter Chamber"; + network = list("engine"); + pixel_x = 23 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"nd" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Cooling Loop to Gas" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ni" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"nz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/engine, +/area/engine/engineering) +"nH" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"nR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"nV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"nW" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/tank/internals/plasma, +/turf/open/floor/plating, +/area/engine/supermatter) +"ou" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"oC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"oS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"px" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/supermatter) +"pA" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"pL" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"pP" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/emitter/anchored{ + dir = 4; + state = 2 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"qc" = ( +/obj/structure/table, +/obj/item/pipe_dispenser, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"qe" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Bypass" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qo" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"qr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qA" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Gas to Filter" + }, +/obj/machinery/airalarm/engine{ + dir = 4; + pixel_x = -23 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/engine/supermatter) +"re" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/supermatter) +"rt" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"ry" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"rJ" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/engine/engineering) +"rY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"sm" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space, +/area/space/nearstation) +"sn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"so" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"sq" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"sA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Gas to Mix" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"td" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"te" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"ti" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"tn" = ( +/turf/open/floor/engine, +/area/engine/supermatter) +"tw" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"tE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"un" = ( +/obj/structure/reflector/single/anchored{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"uC" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"uR" = ( +/obj/machinery/power/supermatter_crystal/engine, +/turf/open/floor/engine, +/area/engine/supermatter) +"vD" = ( +/obj/structure/girder, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"vN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"vO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"vX" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"wt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/engineering) +"wz" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"wG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"wS" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"xo" = ( +/obj/structure/reflector/box/anchored{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"xB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"yd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"yf" = ( +/turf/open/space/basic, +/area/space/nearstation) +"yA" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"yD" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"yZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"zf" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Atmos to Loop" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"zh" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/item/flashlight, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/pipe_dispenser, +/turf/open/floor/engine, +/area/engine/engineering) +"zF" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"zS" = ( +/turf/open/space/basic, +/area/space) +"Ab" = ( +/obj/item/crowbar/large, +/obj/structure/rack, +/obj/item/flashlight, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"Ah" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"AH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Bc" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Bk" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"Bl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/geiger_counter, +/obj/item/geiger_counter, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"BD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4; + name = "Output Release" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Cb" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"Cn" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/supermatter) +"CH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10" + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"CT" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"CW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Dj" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Dz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"DA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"DC" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Ef" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ei" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Es" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ex" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"EL" = ( +/turf/closed/wall, +/area/engine/engineering) +"EM" = ( +/obj/item/wrench, +/obj/structure/rack, +/obj/item/weldingtool/hugetank, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"EX" = ( +/obj/item/wrench, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"Fr" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"FG" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Gl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Starboard"; + dir = 8; + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Gz" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"GB" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"GI" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"GK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"GX" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Hj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Hn" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Hw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Aft"; + network = list("ss13","engine"); + pixel_x = 23 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"Hz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ik" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"In" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"IE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"IF" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/emitter/anchored{ + dir = 8; + state = 2 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Jn" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"JH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"JK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"JL" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"JV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Laser Room"; + req_access_txt = "10" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ke" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Kv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"KX" = ( +/obj/machinery/status_display/ai, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"KZ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space, +/area/space/nearstation) +"Le" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"Lg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Lv" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Lw" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"LE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door{ + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_y = -24; + req_access_txt = "10" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"LJ" = ( +/obj/machinery/light, +/turf/open/floor/plating, +/area/engine/engineering) +"LS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Ml" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8; + filter_type = "n2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Mr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ME" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"MI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"MJ" = ( +/turf/open/floor/plating, +/area/engine/engineering) +"MK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"MP" = ( +/turf/closed/wall/r_wall, +/area/engine/engineering) +"Ne" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"Np" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Nw" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/supermatter) +"Nx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ND" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"NK" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"NU" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/supermatter) +"NZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Oj" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"Ok" = ( +/turf/open/floor/plasteel, +/area/engine/engineering) +"OK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Gas" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"OR" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"OU" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Pa" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "External Gas to Loop" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"Ph" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Py" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Qn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/engine/engineering) +"Qu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/engine, +/area/engine/supermatter) +"QD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"QJ" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Rh" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"RA" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/obj/machinery/power/rad_collector/anchored, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"RV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"Sn" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space, +/area/space/nearstation) +"SL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/engine, +/area/engine/engineering) +"SR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"SX" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Tk" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/engine/engineering) +"TB" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"TC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"TO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ub" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"Uq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"Ur" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Uu" = ( +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"UM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"UN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"UP" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"Vg" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"Vn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"VN" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "External Gas to Loop" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"VP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Wf" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"Ws" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"WB" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) +"WI" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"WT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Xy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"XA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"XG" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) +"XK" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/radio/headset/headset_eng, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"XY" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"YB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"YD" = ( +/obj/structure/reflector/double/anchored{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"YF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"YX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Gas to Filter" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"YZ" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space, +/area/space/nearstation) +"Zn" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ZH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"ZO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Fore"; + dir = 1; + network = list("ss13","engine"); + pixel_x = 23 + }, +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ZT" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +ZT +ZT +ZT +ZT +ZT +ZT +ZT +yf +Rh +yf +yf +Rh +yf +yf +Rh +yf +yf +yf +YZ +YZ +YZ +ZT +ZT +ZT +ZT +ZT +"} +(2,1,1) = {" +ZT +ZT +ZT +ZT +ZT +ZT +ZT +pL +aX +pL +yA +Sn +yA +yA +Sn +hK +yf +yf +YZ +Oj +YZ +ZT +ZT +ZT +ZT +ZT +"} +(3,1,1) = {" +ZT +ZT +ZT +ZT +ZT +ZT +ZT +bI +XG +bI +sm +dD +Sn +Sn +dD +lG +Rh +Rh +YZ +Oj +YZ +ZT +ZT +ZT +ZT +ZT +"} +(4,1,1) = {" +ZT +ZT +ZT +ZT +ZT +ZT +ZT +uC +XG +uC +Le +dD +yA +yA +dD +hK +yf +yf +YZ +Oj +YZ +ZT +ZT +ZT +ZT +ZT +"} +(5,1,1) = {" +ZT +ZT +ZT +ZT +ZT +ZT +ZT +bI +XG +bI +sm +dD +Sn +Sn +dD +lG +Rh +Rh +YZ +Oj +YZ +ZT +ZT +ZT +ZT +ZT +"} +(6,1,1) = {" +ZT +ZT +ZT +ZT +ZT +ZT +ZT +wS +XG +uC +Le +dD +yA +yA +dD +hK +yf +yf +YZ +Oj +YZ +ZT +ZT +ZT +ZT +ZT +"} +(7,1,1) = {" +ZT +ZT +ZT +ZT +EL +EL +MP +bI +XG +bI +sm +dD +Sn +Sn +dD +lG +Rh +Rh +YZ +Oj +YZ +yf +yf +yf +yf +zS +"} +(8,1,1) = {" +ZT +ZT +cP +Ke +EL +Tk +MP +wS +XG +uC +Le +dD +yA +yA +dD +hK +yf +yf +YZ +Oj +YZ +yf +yf +Rh +yf +yf +"} +(9,1,1) = {" +ZT +ZT +dl +Ok +ND +Zn +Ei +bI +KZ +lG +sm +dD +Sn +Sn +dD +lG +Rh +Rh +YZ +YZ +YZ +tw +Rh +Rh +Rh +yf +"} +(10,1,1) = {" +ZT +nR +AH +iD +MP +MP +MP +sq +aA +rJ +gf +rJ +rJ +td +yf +yf +yf +yf +Rh +yf +yf +yf +yf +Rh +yf +yf +"} +(11,1,1) = {" +oC +GB +UN +sn +sn +sn +de +GK +wG +TC +mj +fW +at +XA +td +MP +MP +MP +MP +MP +MP +yf +WB +YZ +WB +yf +"} +(12,1,1) = {" +cS +hJ +qe +ry +ry +ry +ry +cX +ry +ry +nd +ry +yD +Ex +ck +iC +Uu +kW +Uu +EM +MP +yf +YZ +Oj +YZ +yf +"} +(13,1,1) = {" +ME +qr +Hz +gj +te +te +ez +Mr +DA +ej +Dz +jZ +gB +SR +SX +Vn +Vn +cp +Uu +Uu +MP +yf +YZ +Oj +YZ +yf +"} +(14,1,1) = {" +Ne +yd +bW +VP +EX +Vg +KX +px +nW +Cn +fj +xB +WI +IE +JV +Bc +JH +Lv +XY +LJ +MP +Rh +YZ +Oj +YZ +Rh +"} +(15,1,1) = {" +MP +zh +QD +Hj +rt +Vg +JL +na +tE +tE +JL +Xy +Ml +Ef +iD +MJ +QJ +pP +pP +MJ +MP +yf +YZ +Oj +YZ +yf +"} +(16,1,1) = {" +MP +aC +bW +TO +fK +JL +UP +ti +ti +Bk +JL +JK +WT +Ef +MP +Lw +Uu +Uu +Uu +Uu +MP +Rh +YZ +Oj +YZ +yf +"} +(17,1,1) = {" +oS +fa +bW +ZO +yZ +qA +iJ +so +so +so +js +CW +YF +Py +iD +YD +Uu +Uu +ey +Uu +MP +yf +YZ +Oj +YZ +yf +"} +(18,1,1) = {" +iD +fa +bW +YX +Qu +aV +jp +tn +uR +tn +NU +Hw +ac +ac +iD +xo +Uu +xo +vD +Uu +MP +yf +YZ +Oj +YZ +yf +"} +(19,1,1) = {" +oS +fa +bW +LE +Gz +lE +CT +UM +UM +UM +OR +jB +Nx +aw +iD +Uu +Uu +Uu +un +Uu +MP +Rh +YZ +Oj +YZ +yf +"} +(20,1,1) = {" +MP +Bl +bW +iU +JL +OR +Wf +mW +mW +RA +JL +JK +WT +Ef +MP +Lw +Uu +Uu +Uu +Uu +MP +Rh +YZ +Oj +YZ +yf +"} +(21,1,1) = {" +MP +nV +mE +Ws +VN +wz +JL +tE +tE +tE +JL +vO +Np +Ef +iD +MJ +Dj +IF +Dj +MJ +MP +yf +YZ +Oj +YZ +yf +"} +(22,1,1) = {" +iD +fa +hy +Ws +Pa +wz +fj +Nw +df +re +KX +ni +lw +bH +JV +Bc +Ph +Ph +nH +LJ +MP +Rh +YZ +Oj +YZ +Rh +"} +(23,1,1) = {" +iD +vX +bo +GX +Ik +Ik +SL +YB +RV +qm +MK +ii +rY +Qn +ab +ZH +ZH +MI +Uu +Uu +MP +Rh +YZ +Oj +YZ +yf +"} +(24,1,1) = {" +mH +bT +Lg +zf +ry +ry +ry +OK +ry +ry +sA +ry +mX +BD +Uq +zF +Uu +GI +Uu +Ab +MP +Rh +YZ +Oj +YZ +yf +"} +(25,1,1) = {" +iD +mU +in +Ur +Es +Kv +Gl +aY +Kv +Kv +Fr +vN +nz +In +Ub +MP +MP +MP +MP +MP +MP +yf +YZ +YZ +YZ +yf +"} +(26,1,1) = {" +wt +av +kA +qo +EL +MP +MP +Cb +Uu +Uu +pA +jg +qc +fq +LS +Hn +dw +yf +Rh +yf +yf +yf +yf +Rh +yf +yf +"} +(27,1,1) = {" +ZT +ZT +ZT +ou +DC +iD +Uu +mi +NK +NK +Ah +Uu +Jn +MP +dw +dw +dw +Rh +Rh +Rh +Rh +tw +Rh +Rh +Rh +Rh +"} +(28,1,1) = {" +ZT +ZT +ZT +OU +Ok +CH +GI +gx +TB +gQ +gQ +ln +XK +MP +yf +yf +Rh +yf +Rh +Oj +YZ +yf +yf +Rh +yf +yf +"} +(29,1,1) = {" +ZT +ZT +ZT +FG +NZ +MP +MP +MP +MP +MP +iD +iD +iD +MP +Rh +Rh +Rh +Rh +Rh +Oj +YZ +yf +yf +Rh +yf +zS +"} diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm new file mode 100644 index 0000000000..7f55d69b17 --- /dev/null +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm @@ -0,0 +1,1855 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/button/door{ + dir = 4; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = 24; + req_access_txt = "10" + }, +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plasteel, +/area/engine/engineering) +"cB" = ( +/obj/machinery/button/door{ + dir = 1; + id = "engsm"; + name = "Radiation Shutters Control"; + req_access_txt = "10" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"cP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"dz" = ( +/turf/open/space/basic, +/area/space/nearstation) +"dN" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"dW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/space/nearstation) +"ea" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/space/nearstation) +"eA" = ( +/obj/structure/table, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plasteel, +/area/engine/engineering) +"eI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"eJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"eL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/space/nearstation) +"fh" = ( +/turf/open/floor/plasteel, +/area/engine/engineering) +"fr" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine Southwest"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"fH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"gf" = ( +/obj/item/storage/toolbox/mechanical, +/obj/item/flashlight, +/obj/item/pipe_dispenser, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ht" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/space/nearstation) +"hR" = ( +/obj/machinery/power/tesla_coil, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"ic" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/space/nearstation) +"js" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine East"; + dir = 8; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"jx" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/space/basic, +/area/space/nearstation) +"jH" = ( +/obj/structure/sign/warning/radiation/rad_area, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"kh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ku" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"kK" = ( +/turf/closed/wall, +/area/engine/engineering) +"la" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"lJ" = ( +/obj/structure/sign/warning/electricshock, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"lY" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/engine/engineering) +"me" = ( +/obj/structure/rack, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plasteel, +/area/engine/engineering) +"mB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"nL" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector{ + dir = 1 + }, +/turf/open/space/basic, +/area/engine/engineering) +"nR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"nW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qH" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"qP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"rj" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"rm" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"rM" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"rT" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"tc" = ( +/obj/machinery/light, +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine South"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"tl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"to" = ( +/obj/structure/sign/warning/radiation/rad_area, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"tv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/power/emitter, +/turf/open/floor/engine, +/area/engine/engineering) +"tC" = ( +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"tE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"tT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + dir = 4; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = 24; + req_access_txt = "10" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"uG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"wt" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"xg" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xJ" = ( +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xQ" = ( +/obj/machinery/power/tesla_coil, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"yj" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine West"; + dir = 4; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"yo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plasteel, +/area/engine/engineering) +"yq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"yU" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/engine/engineering) +"zW" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel, +/area/engine/engineering) +"zZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + dir = 8; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = -24; + req_access_txt = "10" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Aw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"AF" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Bb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#c1caff" + }, +/obj/machinery/camera/emp_proof{ + c_tag = "Particle Accelerator"; + network = list("ss13","engine") + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/the_singularitygen/tesla, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Bh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Bj" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"BG" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Ce" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/space/basic, +/area/space/nearstation) +"Ch" = ( +/turf/closed/wall/r_wall, +/area/engine/engineering) +"DF" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"Eu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ER" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ES" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/item/clothing/head/welding, +/obj/item/weldingtool/largetank, +/obj/item/wrench, +/obj/item/stack/cable_coil/red, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"FK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"FM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"FP" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"FY" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/obj/item/geiger_counter, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Hc" = ( +/obj/machinery/light, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"HQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/button/door{ + dir = 8; + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = -24; + req_access_txt = "10" + }, +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plasteel, +/area/engine/engineering) +"HW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"In" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Js" = ( +/obj/structure/particle_accelerator/end_cap, +/obj/structure/particle_accelerator/fuel_chamber, +/obj/structure/particle_accelerator/particle_emitter/center, +/obj/structure/particle_accelerator/particle_emitter/left, +/obj/structure/particle_accelerator/particle_emitter/right, +/obj/structure/particle_accelerator/power_box, +/obj/machinery/particle_accelerator/control_box, +/obj/structure/closet/crate/engineering{ + name = "Particle Accelerator Crate" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"JC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"JZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/engineering) +"Kg" = ( +/obj/structure/reflector/single/anchored{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Lr" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Ls" = ( +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"LB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"LJ" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine Southeast"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"LO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"LV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Mi" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Mn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"MD" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"MJ" = ( +/turf/open/space/basic, +/area/space) +"Nm" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"No" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"Nz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"NS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Oe" = ( +/obj/structure/reflector/single/anchored{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Og" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) +"Ox" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Pg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Pj" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"Pk" = ( +/obj/machinery/power/tesla_coil, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Pt" = ( +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Qk" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine Northeast"; + network = list("ss13","engine") + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"Ra" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/engine/engineering) +"Rp" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/engine/engineering) +"RE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"RL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/space/nearstation) +"Si" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"SD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Tr" = ( +/obj/structure/sign/warning/radiation/rad_area, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"TE" = ( +/obj/machinery/power/tesla_coil, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"TN" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"Um" = ( +/turf/template_noop, +/area/template_noop) +"UL" = ( +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine Northwest"; + network = list("ss13","engine") + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) +"UV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Vf" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/space/nearstation) +"VR" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/camera/emp_proof{ + c_tag = "Tesla Engine Northeast"; + network = list("ss13","engine") + }, +/turf/open/space/basic, +/area/space/nearstation) +"Wf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Ww" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"WI" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) +"WP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space/basic, +/area/space/nearstation) +"WQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"WX" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Xk" = ( +/obj/machinery/power/grounding_rod, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"Yd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Yl" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"YY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"Zb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Zx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"Zz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ZF" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ZK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"ZS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/space/nearstation) +"ZY" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/engine/engineering) + +(1,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(2,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(3,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(4,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +dz +dz +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(5,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +Yl +dz +dz +MJ +MJ +dz +dz +dz +MJ +MJ +MJ +MJ +MJ +MJ +Um +Um +Um +Um +Um +"} +(6,1,1) = {" +Um +Um +Um +Um +Um +Um +Um +rm +Yl +dz +dz +dz +dz +Yl +dz +dz +dz +dz +dz +dz +dz +dz +Um +Um +Um +Um +"} +(7,1,1) = {" +Um +Um +Um +Um +kK +kK +Ch +Ch +Ch +Ch +Ch +Ch +Ch +jH +Ch +Ch +Ch +Ch +lJ +Ch +Nm +dz +MJ +MJ +MJ +MJ +"} +(8,1,1) = {" +Um +Um +Lr +la +kK +Ra +Ch +tC +tC +tC +tC +tC +Ch +Ch +Ch +tC +tC +tC +tC +tC +Ch +dz +dz +MJ +MJ +MJ +"} +(9,1,1) = {" +Um +Um +FM +FM +In +ER +yU +Pt +Pt +Pt +Pt +Pt +Pt +yj +Pt +Pt +Pt +Pt +Pt +Pt +Ls +Pt +dz +dz +MJ +MJ +"} +(10,1,1) = {" +Um +Si +fh +ZY +to +Ch +Ch +UL +dz +Yl +dz +dz +FP +FP +FP +dz +dz +Yl +dz +Pt +Ch +Ch +tC +dz +MJ +MJ +"} +(11,1,1) = {" +xJ +gf +fh +dN +YY +MD +Ch +Pt +dz +Yl +dz +dz +FP +FP +FP +dz +dz +Yl +dz +Pt +fr +Ch +tC +dz +MJ +MJ +"} +(12,1,1) = {" +LO +Eu +Pg +cP +Bh +tv +rj +Pt +dz +Yl +dz +dz +Kg +FP +FP +FP +dz +Yl +dz +Yl +Pt +Ch +tC +dz +dz +MJ +"} +(13,1,1) = {" +NS +xx +fh +zW +Bh +tv +rj +Pt +rm +rm +rm +rm +rm +rm +Kg +rm +rm +rm +rm +Yl +Hc +Ch +tC +Yl +dz +MJ +"} +(14,1,1) = {" +yo +me +aT +Aw +JC +WI +rj +Og +rm +tl +ht +Bj +ht +WP +ht +Pj +ht +TN +rm +Yl +Pt +Ch +jH +Yl +dz +MJ +"} +(15,1,1) = {" +jH +FK +Ch +wt +tE +rj +rj +Og +rm +ZS +Xk +TE +rm +TE +rm +TE +Xk +ZS +rm +dz +Pt +Ch +tC +Yl +dz +MJ +"} +(16,1,1) = {" +Ch +ES +ZK +ZK +zZ +ZK +fH +Og +rm +ea +hR +FP +FP +FP +FP +FP +xQ +RL +rm +dz +Pt +Ch +tC +dz +dz +MJ +"} +(17,1,1) = {" +wt +Zz +Wf +Ox +nR +Zb +lY +Og +rm +yq +rm +FP +rM +rm +rM +FP +rm +yq +rm +Yl +Pt +Ch +tC +dz +MJ +MJ +"} +(18,1,1) = {" +cB +Bb +qP +ZF +SD +Yd +eI +LB +UV +dW +hR +FP +rm +rm +rm +FP +xQ +ku +rm +Yl +tc +Ch +tC +dz +MJ +MJ +"} +(19,1,1) = {" +wt +eJ +Zx +nW +Mn +WQ +lY +Og +rm +ZS +rm +FP +rM +rm +rM +FP +rm +ZS +rm +Yl +Pt +Ch +tC +dz +MJ +MJ +"} +(20,1,1) = {" +Ch +Js +No +No +tT +No +LV +Og +rm +DF +hR +FP +FP +FP +FP +FP +xQ +RE +rm +dz +Pt +Ch +tC +dz +dz +MJ +"} +(21,1,1) = {" +jH +Nz +Ch +wt +tE +rj +rj +Og +rm +ZS +Xk +Pk +rm +Pk +rm +Pk +Xk +ZS +rm +dz +Pt +Ch +tC +Yl +dz +MJ +"} +(22,1,1) = {" +AF +WX +HQ +Aw +JC +WI +rj +Og +rm +Ce +ht +ic +ht +eL +ht +Vf +ht +jx +rm +Yl +Pt +Ch +jH +Yl +dz +MJ +"} +(23,1,1) = {" +fh +kh +fh +fh +Bh +tv +rj +Pt +rm +rm +rm +rm +rm +rm +Oe +rm +rm +rm +rm +Yl +Hc +Ch +tC +Yl +dz +MJ +"} +(24,1,1) = {" +fh +kh +uG +cP +xg +tv +rj +Pt +dz +Yl +dz +dz +Oe +FP +FP +FP +dz +Yl +dz +Yl +Pt +Ch +tC +dz +dz +MJ +"} +(25,1,1) = {" +eA +FY +mB +Rp +HW +Mi +Ch +Pt +dz +Yl +dz +dz +FP +FP +VR +dz +dz +Yl +dz +Pt +LJ +Ch +tC +dz +MJ +MJ +"} +(26,1,1) = {" +fh +kh +mB +ZY +Tr +rT +rT +Qk +nL +Yl +dz +dz +FP +FP +FP +dz +dz +Yl +dz +Pt +Ch +Ch +tC +dz +MJ +MJ +"} +(27,1,1) = {" +Um +Um +Um +fh +Ww +qH +yU +Pt +Pt +Pt +Pt +Pt +Pt +js +Pt +Pt +Pt +Pt +Pt +Pt +Ls +Pt +dz +dz +MJ +MJ +"} +(28,1,1) = {" +Um +Um +Um +fh +JZ +BG +Ch +tC +tC +tC +tC +tC +Ch +Ch +Ch +tC +tC +tC +tC +tC +Ch +Yl +dz +dz +dz +MJ +"} +(29,1,1) = {" +Um +Um +Um +fh +JZ +kK +Ch +Ch +Ch +Ch +Ch +Ch +Ch +jH +Ch +Ch +Ch +Ch +lJ +Ch +Nm +Yl +Yl +Yl +dz +MJ +"} diff --git a/_maps/RandomZLevels/Cabin.dmm b/_maps/RandomZLevels/Cabin.dmm index f4a18fd87c..4d07c02565 100644 --- a/_maps/RandomZLevels/Cabin.dmm +++ b/_maps/RandomZLevels/Cabin.dmm @@ -967,10 +967,6 @@ }, /turf/open/floor/plating, /area/awaymission/cabin) -"dw" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/closed/indestructible/rock/snow, -/area/space) (1,1,1) = {" aa @@ -1227,7 +1223,7 @@ aa aa aa aa -dw +aa "} (2,1,1) = {" aa diff --git a/_maps/RandomZLevels/VR/snowdin_VR.dmm b/_maps/RandomZLevels/VR/snowdin_VR.dmm index 8f6eda450c..bae0b05e3d 100644 --- a/_maps/RandomZLevels/VR/snowdin_VR.dmm +++ b/_maps/RandomZLevels/VR/snowdin_VR.dmm @@ -4,9 +4,15 @@ /turf/closed/indestructible/rock/snow, /area/awaymission/snowdin/cave/mountain) "ab" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/closed/indestructible/rock/snow, -/area/awaymission/snowdin/cave/mountain) +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/mob/living/simple_animal/hostile/netherworld/migo, +/turf/open/floor/plasteel, +/area/awaymission/snowdin/post/mining_dock) "ac" = ( /turf/closed/indestructible/rock/snow, /area/awaymission/snowdin/cave/mountain) @@ -10267,16 +10273,6 @@ /obj/item/shard, /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_dock) -"xA" = ( -/mob/living/simple_animal/hostile/netherworld/migo, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/awaymission/snowdin/post/mining_dock) "xB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -16013,7 +16009,7 @@ ac ac "} (2,1,1) = {" -ab +ac ac ac ac @@ -66518,7 +66514,7 @@ wD wT xe xs -xA +ab xI xN wL diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index d50480c381..96c1a08b1f 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -2251,10 +2251,6 @@ initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) -"gW" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/closed/indestructible/rock, -/area/space/nearstation) "gX" = ( /obj/effect/baseturf_helper/lava, /turf/closed/mineral/volcanic, @@ -2536,7 +2532,7 @@ aa aa aa aa -gW +aa "} (2,1,1) = {" aa diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index ddc8778ac1..8c33326703 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -7215,10 +7215,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"oV" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/open/space, -/area/space) "vV" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -7512,7 +7508,7 @@ aa aa aa aa -oV +aa "} (2,1,1) = {" aa diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 525c8fcf7b..57e03061dd 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -4,9 +4,15 @@ /turf/closed/indestructible/rock/snow, /area/awaymission/snowdin/cave/mountain) "ab" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/closed/indestructible/rock/snow, -/area/awaymission/snowdin/cave/mountain) +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/mob/living/simple_animal/hostile/netherworld/migo, +/turf/open/floor/plasteel, +/area/awaymission/snowdin/post/mining_dock) "ac" = ( /turf/closed/indestructible/rock/snow, /area/awaymission/snowdin/cave/mountain) @@ -10331,16 +10337,6 @@ /obj/item/shard, /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_dock) -"xA" = ( -/mob/living/simple_animal/hostile/netherworld/migo, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/awaymission/snowdin/post/mining_dock) "xB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -16108,7 +16104,7 @@ ac ac "} (2,1,1) = {" -ab +ac ac ac ac @@ -66613,7 +66609,7 @@ wD wT xe xs -xA +ab xI xN wL diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index 21cd37f78f..66d7f556b4 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -5,6 +5,16 @@ "ab" = ( /turf/open/space, /area/space) +"ac" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/mob/living/simple_animal/hostile/syndicate/melee/sword, +/turf/open/floor/plasteel, +/area/awaymission/spacebattle/cruiser) "ad" = ( /obj/structure/shuttle/engine/propulsion/right{ dir = 1 @@ -2597,16 +2607,6 @@ /obj/effect/spawner/lootdrop/armory_contraband, /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) -"jK" = ( -/mob/living/simple_animal/hostile/syndicate/melee/sword, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/awaymission/spacebattle/cruiser) "jL" = ( /obj/machinery/door/poddoor{ id = "spacebattlearmory"; @@ -2894,10 +2894,6 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion, /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) -"kM" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/closed/mineral/random, -/area/space/nearstation) "vw" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/awaymission/spacebattle/syndicate5) @@ -3175,7 +3171,7 @@ aa aa aa aa -kM +aa "} (2,1,1) = {" aa @@ -35686,10 +35682,10 @@ eC cn fL cp -jK +ac fs fO -jK +ac eM eM eM diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index f6d46ef97d..56018b943a 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -25,6 +25,9 @@ "ag" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/undergroundoutpost45/central) +"ah" = ( +/turf/open/space, +/area/space/nearstation) "aj" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel{ @@ -13945,10 +13948,6 @@ temperature = 363.9 }, /area/awaymission/undergroundoutpost45/caves) -"zi" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/open/space, -/area/space/nearstation) "KE" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -14211,7 +14210,7 @@ aa aa aa aa -zi +ah "} (2,1,1) = {" aa diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 820ffd0be4..92ceb0ac34 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -3,32 +3,38 @@ /turf/open/space/basic, /area/space) "aab" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 8 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ dir = 1 }, -/turf/open/floor/plating, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aac" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plating, -/area/space/nearstation) -"aad" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/camera{ + c_tag = "Bar"; dir = 8 }, /obj/structure/table, -/obj/item/restraints/handcuffs, +/obj/machinery/chem_dispenser/drinks{ + dir = 8 + }, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, /turf/open/floor/plasteel, -/area/security/prison) +/area/crew_quarters/bar) "aae" = ( /obj/effect/landmark/carpspawn, /turf/open/space, @@ -93,23 +99,18 @@ /area/security/prison) "aao" = ( /obj/machinery/hydroponics/soil, -/obj/item/seeds/carrot, -/turf/open/floor/grass, -/area/security/prison) -"aap" = ( -/obj/machinery/hydroponics/soil, /obj/item/plant_analyzer, /obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /turf/open/floor/grass, /area/security/prison) -"aaq" = ( +"aap" = ( /obj/machinery/hydroponics/soil, -/obj/item/seeds/glowshroom, +/obj/item/seeds/carrot, /turf/open/floor/grass, /area/security/prison) -"aar" = ( +"aaq" = ( /obj/machinery/camera{ c_tag = "Prison Common Room"; network = list("ss13","prison") @@ -129,6 +130,11 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"aar" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/glowshroom, +/turf/open/floor/grass, +/area/security/prison) "aas" = ( /obj/structure/sign/warning/electricshock{ pixel_y = 32 @@ -156,54 +162,47 @@ /turf/open/floor/grass, /area/security/prison) "aax" = ( +/mob/living/simple_animal/mouse/brown/Tom, /turf/open/floor/grass, /area/security/prison) "aay" = ( /turf/open/floor/plating, /area/security/prison) -"aaz" = ( -/obj/item/reagent_containers/glass/bucket, -/turf/open/floor/grass, -/area/security/prison) -"aaA" = ( -/obj/machinery/vr_sleeper{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/prison) "aaB" = ( -/mob/living/simple_animal/mouse/brown/Tom, +/obj/structure/window/reinforced, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/potato, /turf/open/floor/grass, /area/security/prison) "aaC" = ( +/obj/machinery/hydroponics/soil, +/obj/structure/window/reinforced, +/obj/item/seeds/tower, +/turf/open/floor/grass, +/area/security/prison) +"aaD" = ( +/obj/structure/window/reinforced, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/grass, +/turf/open/floor/grass, +/area/security/prison) +"aaE" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, /obj/effect/turf_decal/tile/green{ dir = 8 }, /obj/effect/turf_decal/tile/green{ dir = 1 }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /turf/open/floor/plasteel, /area/security/prison) -"aaD" = ( -/obj/structure/window/reinforced, -/obj/machinery/hydroponics/soil, -/obj/item/seeds/potato, -/turf/open/floor/grass, -/area/security/prison) -"aaE" = ( -/obj/structure/window/reinforced, -/obj/machinery/hydroponics/soil, -/obj/item/seeds/grass, -/turf/open/floor/grass, -/area/security/prison) "aaF" = ( -/obj/machinery/hydroponics/soil, /obj/structure/window/reinforced, -/obj/item/seeds/tower, +/obj/machinery/hydroponics/soil, +/obj/item/cultivator, /turf/open/floor/grass, /area/security/prison) "aaG" = ( @@ -226,41 +225,15 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel, /area/security/prison) -"aaL" = ( -/obj/machinery/computer/libraryconsole/bookmanagement, -/obj/structure/table, +"aaN" = ( +/obj/structure/chair/sofa/left, /turf/open/floor/plasteel, /area/security/prison) -"aaM" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/security/prison) -"aaN" = ( -/obj/structure/window/reinforced, -/obj/machinery/hydroponics/soil, -/obj/item/cultivator, -/turf/open/floor/grass, -/area/security/prison) "aaO" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, +/obj/structure/chair/sofa/right, /turf/open/floor/plasteel, /area/security/prison) "aaP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/turf/closed/wall, -/area/security/execution/transfer) -"aaQ" = ( /obj/machinery/computer/cryopod{ dir = 8; pixel_x = 26 @@ -287,18 +260,14 @@ /obj/structure/grille, /turf/open/space, /area/space/nearstation) -"aaU" = ( -/obj/machinery/computer/arcade/minesweeper{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/prison) "aaV" = ( -/obj/structure/chair/sofa/right, +/obj/structure/table/wood, +/obj/item/toy/cards/deck, /turf/open/floor/plasteel, /area/security/prison) "aaW" = ( -/obj/structure/chair/sofa/left, +/obj/structure/table/wood, +/obj/item/storage/pill_bottle/dice, /turf/open/floor/plasteel, /area/security/prison) "aaX" = ( @@ -308,10 +277,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"aaY" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/security/execution/transfer) "aaZ" = ( /turf/closed/wall/r_wall, /area/ai_monitored/security/armory) @@ -346,11 +311,11 @@ /turf/open/floor/plasteel, /area/security/prison) "abg" = ( -/obj/machinery/computer/arcade{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 }, -/turf/open/floor/plasteel, -/area/security/prison) +/turf/closed/wall, +/area/security/execution/transfer) "abh" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -363,13 +328,8 @@ /turf/open/floor/plasteel/freezer, /area/security/prison) "abj" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/washing_machine, +/obj/structure/bedsheetbin/color, +/obj/structure/table, /turf/open/floor/plasteel/freezer, /area/security/prison) "abk" = ( @@ -484,30 +444,15 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "abx" = ( -/obj/structure/bedsheetbin/color, -/obj/structure/table, -/turf/open/floor/plasteel/freezer, +/obj/machinery/computer/arcade{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/security/prison) "aby" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/security/execution/transfer) -"abz" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel, -/area/security/prison) "abA" = ( /obj/machinery/light, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -546,14 +491,6 @@ "abF" = ( /turf/open/floor/plasteel/freezer, /area/security/prison) -"abG" = ( -/obj/machinery/door/window/westleft{ - base_state = "right"; - icon_state = "right"; - name = "Unisex Showers" - }, -/turf/open/floor/plasteel/freezer, -/area/security/prison) "abH" = ( /obj/structure/table, /obj/item/storage/box/chemimp{ @@ -1133,15 +1070,11 @@ /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "acN" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - on = 0; - pixel_x = -7; - pixel_y = 12 +/obj/structure/chair/stool{ + pixel_y = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/bar) "acO" = ( /obj/structure/closet/l3closet/security, /obj/machinery/camera{ @@ -1391,12 +1324,16 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "adq" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/computer/slot_machine{ + balance = 15; + money = 500; + pixel_x = -5 }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/structure/sign/poster/contraband/robust_softdrinks{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "adr" = ( /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 @@ -1759,16 +1696,18 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "aef" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" - }, +/obj/structure/table, +/obj/item/restraints/handcuffs, /turf/open/floor/plasteel, /area/security/prison) "aeg" = ( @@ -1938,9 +1877,18 @@ icon_state = "4-8" }, /obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/rack, +/obj/structure/window/reinforced{ dir = 8 }, +/obj/item/gun/energy/pumpaction/blaster{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/gun/energy/pumpaction/blaster{ + pixel_x = 3; + pixel_y = -3 + }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "aet" = ( @@ -1957,6 +1905,12 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "aev" = ( @@ -2026,31 +1980,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"aeD" = ( -/obj/machinery/door/airlock/security{ - name = "Firing Range"; - req_access_txt = "2" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/security/prison) -"aeE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating, -/area/security/prison) -"aeF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/security/prison) "aeG" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -2126,13 +2055,20 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "aeM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, /area/security/prison) "aeN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -2253,6 +2189,7 @@ pixel_x = 3; pixel_y = -3 }, +/obj/item/storage/toolbox/drone, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "aeX" = ( @@ -2421,10 +2358,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"afn" = ( -/obj/machinery/suit_storage_unit/security, -/turf/open/floor/plasteel/showroomfloor, -/area/security/warden) "afo" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three" @@ -2445,20 +2378,6 @@ }, /turf/open/space/basic, /area/space) -"afq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel, -/area/security/prison) -"afr" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/prison) -"afs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/security/prison) "aft" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 @@ -2515,16 +2434,17 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "afz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/obj/machinery/door/window/westleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Shooting Range" +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/turf/open/floor/plating, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, /area/security/prison) "afA" = ( /turf/closed/wall/r_wall, @@ -2768,16 +2688,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/general/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"age" = ( -/obj/machinery/door/window/southleft{ - name = "Target Storage" - }, -/obj/item/target/clown, -/obj/item/target/clown, -/obj/item/target, -/obj/item/target, -/turf/open/floor/plating, -/area/security/prison) "agf" = ( /obj/structure/table, /obj/item/stack/sheet/metal, @@ -2927,16 +2837,6 @@ /obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"agv" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/security/prison) "agw" = ( /obj/structure/table, /obj/machinery/syndicatebomb/training, @@ -3066,15 +2966,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"agH" = ( -/obj/machinery/door/window/southright{ - name = "Target Storage" - }, -/obj/item/target/alien, -/obj/item/target/alien, -/obj/item/target/syndicate, -/turf/open/floor/plating, -/area/security/prison) "agI" = ( /obj/machinery/airalarm{ pixel_y = 23 @@ -3204,14 +3095,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/warden) -"agX" = ( -/obj/structure/closet/secure_closet/warden, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/item/book/manual/wiki/security_space_law, -/turf/open/floor/plasteel/showroomfloor, -/area/security/warden) "agY" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box, @@ -3452,15 +3335,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"ahw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating, -/area/security/prison) "ahx" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3686,18 +3560,11 @@ /turf/open/floor/plasteel/white, /area/security/brig) "ahQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = -6; - pixel_y = 3 - }, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = 3 +/obj/structure/closet/secure_closet/warden, +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/item/book/manual/wiki/security_space_law, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "ahR" = ( @@ -3780,6 +3647,9 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel, /area/security/brig) "ahZ" = ( @@ -3851,11 +3721,20 @@ /turf/open/floor/plasteel/white, /area/security/brig) "aie" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/item/clothing/shoes/jackboots, -/obj/item/coin/silver, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/security/warden) "aif" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -4469,7 +4348,7 @@ "ajq" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "1-2" }, /turf/open/space, /area/solar/port/fore) @@ -4482,18 +4361,27 @@ /turf/open/floor/plasteel, /area/security/processing) "ajt" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/security/prison) -"aju" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/structure/sign/warning/securearea{ + pixel_x = 32 }, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plating, -/area/security/prison) +/obj/machinery/camera{ + c_tag = "Labor Shuttle Dock North" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/security/processing) +"aju" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/security/processing) "ajv" = ( /obj/machinery/light{ dir = 8 @@ -4587,13 +4475,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /turf/open/floor/plasteel, /area/security/brig) -"ajC" = ( -/obj/item/storage/toolbox/drone, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ai_monitored/security/armory) "ajD" = ( /obj/structure/cable{ icon_state = "4-8" @@ -4802,29 +4683,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/solars/port/fore) -"ajX" = ( -/obj/structure/table, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/recharger, -/obj/item/gun/energy/laser/practice, -/obj/item/gun/energy/laser/practice, -/turf/open/floor/plasteel, -/area/security/prison) -"ajY" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/security/prison) "ajZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external{ @@ -4849,18 +4707,23 @@ /area/security/processing) "akc" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, /turf/open/floor/plasteel, -/area/security/prison) +/area/security/processing) "akd" = ( -/obj/structure/lattice, -/turf/closed/wall, -/area/security/prison) +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/security/processing) "ake" = ( /obj/structure/cable{ icon_state = "4-8" @@ -5034,13 +4897,13 @@ /turf/open/floor/plasteel, /area/security/brig) "aks" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/security/brig) "akt" = ( @@ -5057,23 +4920,19 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aku" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plasteel, -/area/security/brig) -"akv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/security/brig) "akw" = ( @@ -5102,9 +4961,10 @@ /turf/open/floor/plasteel, /area/security/courtroom) "akz" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/vending/snack/random, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, -/area/security/brig) +/area/hallway/primary/fore) "akA" = ( /obj/structure/chair{ dir = 8; @@ -5125,44 +4985,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/fore) -"akC" = ( -/obj/machinery/door/airlock/security{ - name = "Labor Shuttle"; - req_access_txt = "2" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/security/processing) -"akD" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/security/prison) -"akE" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/processing) -"akF" = ( -/obj/structure/sign/warning/securearea{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Labor Shuttle Dock North" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/security/processing) "akG" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -5183,13 +5005,13 @@ /turf/open/floor/plasteel, /area/security/processing) "akJ" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/light_switch{ + pixel_x = 27 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel, /area/security/processing) "akK" = ( @@ -5242,6 +5064,9 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel, /area/security/brig) "akP" = ( @@ -5273,6 +5098,9 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel, /area/security/brig) "akS" = ( @@ -5298,6 +5126,12 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel, /area/security/brig) "akU" = ( @@ -5330,9 +5164,6 @@ name = "Brig"; req_access_txt = "63" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -5340,6 +5171,9 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/security/brig) "akX" = ( @@ -5363,39 +5197,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"akY" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/brig) -"akZ" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/brig) -"ala" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - id = "Cell 4"; - name = "Cell 4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/brig) "alb" = ( /obj/structure/chair{ dir = 4; @@ -5443,19 +5244,6 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) -"alf" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/brig) -"alg" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/space, -/area/solar/starboard/fore) "alh" = ( /obj/structure/cable{ icon_state = "1-2" @@ -5473,42 +5261,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/port/fore) -"alj" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/processing) "alk" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 1 }, /turf/open/floor/plasteel, /area/engine/atmos) -"all" = ( -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/machinery/computer/security/labor, -/turf/open/floor/plasteel, -/area/security/processing) -"alm" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/processing) "aln" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -5520,12 +5278,6 @@ }, /turf/open/floor/plating, /area/security/processing) -"alo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/table, -/obj/item/storage/box/prisoner, -/turf/open/floor/plasteel, -/area/security/processing) "alp" = ( /turf/open/floor/plating, /area/security/processing) @@ -5533,10 +5285,16 @@ /turf/open/floor/plasteel, /area/security/processing) "alr" = ( -/obj/structure/target_stake, -/obj/item/target/syndicate, -/turf/open/floor/plating, -/area/security/prison) +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/processing) "als" = ( /obj/structure/cable{ icon_state = "1-2" @@ -5587,18 +5345,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"alx" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/prison) "aly" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -5622,11 +5368,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/button/flasher{ - id = "brigentry"; - pixel_x = -28; - pixel_y = -8 - }, /turf/open/floor/plasteel/dark, /area/security/brig) "alA" = ( @@ -5668,18 +5409,10 @@ /turf/open/floor/plating, /area/security/courtroom) "alE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/flasher{ - id = "Cell 4"; - pixel_x = 28 - }, -/obj/machinery/light/small{ - dir = 4 - }, +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, -/area/security/brig) +/area/hallway/primary/fore) "alF" = ( /obj/machinery/atmospherics/components/unary/tank/air, /turf/open/floor/plating, @@ -5726,19 +5459,18 @@ /turf/open/floor/plasteel, /area/security/courtroom) "alK" = ( -/obj/machinery/button/door{ - id = "Room Two"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 7; - pixel_y = -24; - specialfunctions = 4 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/chair/comfy/brown{ - dir = 8 +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "alL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ @@ -5753,27 +5485,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"alM" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/security/main"; - dir = 4; - name = "Firing Range APC"; - pixel_x = 24 - }, -/turf/open/floor/plasteel, -/area/security/prison) -"alN" = ( -/turf/open/space/basic, -/area/space/nearstation) "alO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5828,44 +5539,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"alY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Firing Range"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/prison) -"alZ" = ( -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/item/clothing/glasses/sunglasses{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/glasses/sunglasses{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/open/floor/plasteel, -/area/security/prison) "ama" = ( /mob/living/simple_animal/sloth/paperwork, /turf/open/floor/plasteel, @@ -5887,22 +5560,10 @@ /area/security/processing) "amd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/button/door{ - desc = "Bolts the doors to the Private Study."; - id = "PrivateStudy"; - name = "Private Study Lock"; - pixel_x = -5; - pixel_y = 24; - req_access_txt = "28" - }, -/obj/machinery/button/door{ - id = "PrivateStudy1"; - name = "Privacy Shutters"; - pixel_x = 5; - pixel_y = 24 - }, -/turf/open/floor/wood, -/area/library) +/obj/structure/table, +/obj/item/storage/box/prisoner, +/turf/open/floor/plasteel, +/area/security/processing) "ame" = ( /obj/structure/cable{ icon_state = "1-2" @@ -5964,83 +5625,23 @@ /turf/open/floor/plasteel, /area/security/brig) "aml" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/button/door{ - desc = "A remote control switch for the medbay foyer."; - id = "outerbrig"; - name = "Brig Exterior Doors Control"; - normaldoorcontrol = 1; - pixel_x = -26; - pixel_y = -5; - req_access_txt = "63" - }, -/obj/machinery/button/door{ - desc = "A remote control switch for the medbay foyer."; - id = "innerbrig"; - name = "Brig Interior Doors Control"; - normaldoorcontrol = 1; - pixel_x = -26; - pixel_y = 5; - req_access_txt = "63" - }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-4" }, /turf/open/floor/plasteel/dark, /area/security/brig) -"amm" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "briggate"; - name = "security shutters" - }, -/obj/machinery/door/window/eastright{ - name = "Brig Desk"; - req_access_txt = "2" - }, -/obj/item/restraints/handcuffs, -/obj/item/radio/off, -/turf/open/floor/plasteel/dark, -/area/security/brig) "amn" = ( -/obj/structure/chair/office/dark{ - dir = 4 +/obj/structure/chair/office/dark, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plasteel/dark, /area/security/brig) "amo" = ( -/obj/machinery/flasher{ - id = "brigentry"; - pixel_x = 28 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plasteel, -/area/security/brig) -"amp" = ( -/obj/structure/closet/secure_closet/brig{ - id = "Cell 4"; - name = "Cell 4 Locker" - }, -/turf/open/floor/plasteel, -/area/security/brig) -"amq" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/item/radio/intercom{ - desc = "Talk through this. It looks like it has been modified to not broadcast."; - name = "Prison Intercom (General)"; - pixel_x = 25; - pixel_y = -2; - prison_radio = 1 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/security/brig) "amr" = ( @@ -6080,9 +5681,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) -"amx" = ( -/turf/closed/wall, -/area/crew_quarters/abandoned_gambling_den) "amy" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -6105,19 +5703,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/fore) -"amB" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) "amC" = ( /turf/open/floor/plating, /area/maintenance/port/fore) @@ -6164,29 +5749,6 @@ /obj/item/trash/plate, /turf/open/floor/plating, /area/maintenance/port/fore) -"amI" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Air In" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) -"amJ" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) "amK" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -6208,18 +5770,9 @@ /turf/open/floor/plasteel, /area/security/processing) "amN" = ( -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"amO" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) -"amP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/crew_quarters/dorms) +/obj/machinery/suit_storage_unit/security, +/turf/open/floor/plasteel/showroomfloor, +/area/security/warden) "amQ" = ( /obj/structure/cable{ icon_state = "0-4" @@ -6262,12 +5815,6 @@ name = "Brig Desk"; req_access_txt = "1" }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, /turf/open/floor/plasteel/dark, /area/security/brig) "amU" = ( @@ -6293,9 +5840,6 @@ name = "Brig Desk"; req_access_txt = "1" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /turf/open/floor/plasteel/dark, /area/security/brig) "amW" = ( @@ -6365,21 +5909,11 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "anc" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/item/soap, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) -"and" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/fore/secondary) "ane" = ( @@ -6469,13 +6003,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"anq" = ( -/obj/structure/sign/poster/official/twelve_gauge, -/turf/closed/wall/r_wall, -/area/ai_monitored/security/armory) -"anr" = ( -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) "ans" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -6572,28 +6099,20 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"anB" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/sign/warning/securearea{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) "anC" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/security/courtroom) "anD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "anE" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -6639,16 +6158,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) -"anM" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/obj/structure/curtain, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) "anN" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -6847,9 +6356,6 @@ /obj/item/circuitboard/machine/monkey_recycler, /turf/open/floor/plating, /area/maintenance/port/fore) -"aop" = ( -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "aoq" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = -32 @@ -6945,6 +6451,10 @@ /area/hallway/primary/fore) "aoz" = ( /obj/effect/turf_decal/tile/red, +/obj/structure/sign/departments/security{ + pixel_x = 32; + pixel_y = -32 + }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoA" = ( @@ -6954,6 +6464,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/red, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoB" = ( @@ -6962,11 +6475,15 @@ pixel_y = -24 }, /obj/effect/turf_decal/tile/red, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoC" = ( -/obj/machinery/vending/coffee, /obj/effect/turf_decal/tile/red, +/obj/structure, +/obj/item/storage/box/drinkingglasses, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoD" = ( @@ -6979,16 +6496,19 @@ pixel_y = -32 }, /obj/effect/turf_decal/tile/red, +/obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoE" = ( -/obj/machinery/vending/cigarette, /obj/effect/turf_decal/tile/red, +/obj/structure, +/obj/item/storage/box/cups, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoF" = ( -/obj/machinery/vending/snack/random, /obj/effect/turf_decal/tile/red, +/obj/structure, +/obj/machinery/chem_dispenser/drinks, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoG" = ( @@ -7008,9 +6528,17 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "aoI" = ( -/obj/structure/fireplace, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aoJ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -7105,26 +6633,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/port/fore) -"aoY" = ( -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - dir = 10; - icon_state = "roomnum"; - name = "Room Number 6"; - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/washing_machine{ - pixel_x = 7; - pixel_y = 7 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aoZ" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ name = "Waste Release" @@ -7273,23 +6781,23 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "apu" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet"; - pixel_y = 15 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"apv" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"apw" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/fitness"; + name = "Fitness Room APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/fore/secondary) "apx" = ( @@ -7349,9 +6857,9 @@ /turf/closed/wall/r_wall, /area/maintenance/starboard/fore) "apD" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/computer/slot_machine, -/obj/item/coin/iron, +/obj/structure/closet/wardrobe/mixed, +/obj/item/clothing/shoes/jackboots, +/obj/item/coin/silver, /turf/open/floor/plating, /area/maintenance/starboard/fore) "apE" = ( @@ -7367,15 +6875,6 @@ /obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/plasteel, /area/janitor) -"apH" = ( -/obj/machinery/door/airlock{ - desc = "A small bathroom with a sink, toilet and shower."; - id_tag = "Bath1"; - name = "Bathroom" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "apI" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ dir = 1 @@ -7386,12 +6885,6 @@ "apJ" = ( /turf/closed/wall, /area/construction/mining/aux_base) -"apK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/space/nearstation) "apL" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -7420,14 +6913,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/port/fore) -"apQ" = ( -/obj/machinery/door/airlock{ - desc = "A small bathroom with a sink, toilet and shower."; - id_tag = "Bath2"; - name = "Bathroom" - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "apR" = ( /obj/item/paper/fluff/jobs/security/beepsky_mom, /turf/open/floor/plating, @@ -7438,18 +6923,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"apT" = ( -/obj/structure/lattice/catwalk, -/obj/item/stack/marker_beacon{ - anchored = 1; - icon_state = "markerburgundy-on"; - light_power = 3; - light_range = 3; - name = "Docking Beacon"; - picked_color = "Burgundy" - }, -/turf/open/space/basic, -/area/space/nearstation) "apU" = ( /turf/open/floor/plating, /area/security/vacantoffice/b) @@ -7465,22 +6938,12 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"apX" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +"apY" = ( +/obj/machinery/light/small{ + dir = 1 }, /turf/open/floor/carpet, /area/crew_quarters/dorms) -"apY" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "maintdiy"; - name = "Security Shutters" - }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) "apZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -7488,9 +6951,13 @@ /turf/open/floor/wood, /area/lawoffice) "aqa" = ( -/obj/machinery/recharge_station, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/structure/closet/secure_closet/personal{ + desc = "Swipe your ID on this locker to claim it. You can drag it around and use it as your own personal storage area. Very useful."; + name = "Personal ID-Locked Locker"; + pixel_y = 10 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "aqb" = ( /obj/structure/rack, /obj/item/storage/briefcase, @@ -7584,22 +7051,26 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "aql" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/machinery/light/small{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aqm" = ( -/obj/structure/chair/sofa/right, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aqn" = ( /obj/structure/bed, /obj/machinery/airalarm{ @@ -7619,25 +7090,13 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "aqo" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/fitness"; - name = "Fitness Room APC"; - pixel_y = -24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/turf/open/floor/wood, +/area/crew_quarters/dorms) "aqp" = ( /obj/structure/rack, /obj/item/clothing/suit/fire/firefighter, @@ -7661,37 +7120,15 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"aqr" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) "aqs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" - }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) -"aqt" = ( /obj/machinery/door/airlock{ - desc = "A small bathroom with a sink, toilet and shower."; - id_tag = "Bath3"; - name = "Bathroom" + id_tag = "Room Two"; + name = "Room Seven - Luxury Suite" }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "aqu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -7743,48 +7180,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aqB" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aqC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/dorms) -"aqD" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/crew_quarters/dorms) -"aqE" = ( -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 22 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4; - pixel_y = 5 - }, -/obj/structure/dresser{ - desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; - name = "Dresser"; - pixel_y = 7 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"aqF" = ( -/turf/open/floor/carpet, -/area/crew_quarters/dorms) "aqG" = ( /obj/docking_port/stationary/random{ dir = 4; @@ -7793,28 +7188,6 @@ }, /turf/open/space, /area/space/nearstation) -"aqH" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) -"aqI" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) "aqJ" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -7840,12 +7213,6 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/port/fore) -"aqN" = ( -/obj/structure/toilet{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) "aqO" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ @@ -7898,14 +7265,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"aqU" = ( -/obj/structure/closet/secure_closet/personal{ - desc = "Swipe your ID on this locker to claim it. You can drag it around and use it as your own personal storage area. Very useful."; - name = "Personal ID-Locked Locker"; - pixel_y = 10 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) "aqV" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -7974,13 +7333,6 @@ "arf" = ( /turf/closed/wall, /area/crew_quarters/dorms) -"arg" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "arh" = ( /obj/machinery/door/airlock/maintenance{ name = "Dormitories Maintenance"; @@ -7990,49 +7342,31 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "ari" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/airalarm{ + pixel_y = 23 }, -/turf/open/floor/carpet, +/obj/structure/table/wood, +/turf/open/floor/wood, /area/crew_quarters/dorms) "arj" = ( -/obj/machinery/door/airlock{ - id_tag = "Room Two"; - name = "Room Seven - Luxury Suite" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) -"ark" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"arl" = ( -/obj/structure/sign/poster/official/ion_rifle, -/turf/closed/wall/r_wall, -/area/ai_monitored/security/armory) -"arm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" - }, -/turf/open/floor/plating, +/turf/closed/wall, /area/crew_quarters/fitness) -"arn" = ( -/obj/structure/cable{ - icon_state = "4-8" +"ark" = ( +/obj/machinery/airalarm{ + pixel_y = 23 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/turf/open/floor/wood, +/area/crew_quarters/dorms) +"arm" = ( +/obj/machinery/light/small{ + dir = 1; + light_color = "#ffc1c1" }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aro" = ( /turf/open/floor/engine{ name = "Holodeck Projector Floor" @@ -8055,31 +7389,26 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "arr" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Dormitories Maintenance"; - req_access_txt = "12" +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" }, /turf/open/floor/plating, -/area/maintenance/fore/secondary) -"ars" = ( -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 22 - }, -/obj/structure/dresser{ - desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; - name = "Dresser"; - pixel_y = 7 - }, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/area/maintenance/starboard/fore) "art" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/machinery/light/small{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/camera{ + c_tag = "Fore Starboard Solar Access" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "aru" = ( /obj/structure/chair/stool, /turf/open/floor/plating, @@ -8103,12 +7432,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"ary" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/turf/open/floor/wood, -/area/crew_quarters/dorms) "arz" = ( /obj/item/coin/gold, /obj/item/coin/iron, @@ -8123,20 +7446,6 @@ "arB" = ( /turf/closed/wall/r_wall, /area/hallway/secondary/entry) -"arC" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"arD" = ( -/obj/item/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 27 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) "arE" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/yellow{ @@ -8224,27 +7533,15 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "arO" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/chair/sofa, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/item/clothing/gloves/color/rainbow, +/obj/item/clothing/head/soft/rainbow, +/obj/item/clothing/shoes/sneakers/rainbow, +/obj/item/clothing/under/color/rainbow, +/turf/open/floor/plating, +/area/maintenance/port/fore) "arP" = ( /turf/closed/wall, /area/maintenance/fore) -"arQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "arR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/table/wood, @@ -8268,7 +7565,7 @@ }, /obj/structure/filingcabinet/employment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/wood, @@ -8316,20 +7613,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"asb" = ( -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - dir = 5; - icon_state = "roomnum"; - name = "Room Number 7"; - pixel_y = 24 - }, -/obj/structure/chair/sofa/right, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "asc" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8369,11 +7652,29 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "asg" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 4; + icon_state = "roomnum"; + name = "Room Number 3"; + pixel_x = -30; + pixel_y = -7 + }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "ash" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8406,29 +7707,31 @@ /turf/open/floor/plating, /area/security/vacantoffice/b) "ask" = ( -/obj/machinery/light/small{ - dir = 4; - light_color = "#d8b1b1" +/obj/item/flashlight/lamp/green{ + pixel_x = -3; + pixel_y = 22 + }, +/obj/structure/dresser{ + desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; + name = "Dresser"; + pixel_y = 7 }, /turf/open/floor/wood, /area/crew_quarters/dorms) "asl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plating, /area/security/vacantoffice/b) "asm" = ( -/obj/structure/closet/secure_closet/bar{ - req_access_txt = "25" +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/chair/comfy/brown{ + dir = 4 }, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/waiter, -/obj/item/gun/ballistic/revolver/doublebarrel, /turf/open/floor/wood, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "asn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plating, @@ -8444,66 +7747,18 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"asp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/vending/wardrobe/bar_wardrobe, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"asq" = ( -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"asr" = ( -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ - pixel_x = -3; - pixel_y = 5 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"ass" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "ast" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/structure/chair/sofa/left, +/obj/structure/bed, +/obj/item/bedsheet/random, /turf/open/floor/carpet, /area/crew_quarters/dorms) "asu" = ( -/obj/structure/bed, -/obj/machinery/button/door{ - id = "Dorm5"; - name = "Cabin Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/spawner/lootdrop/bedsheet, /turf/open/floor/wood, /area/crew_quarters/dorms) -"asv" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" - }, -/obj/structure/light_construct{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "asw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -8537,10 +7792,6 @@ "asC" = ( /turf/open/floor/plasteel/airless, /area/space/nearstation) -"asD" = ( -/obj/machinery/light, -/turf/open/floor/wood, -/area/crew_quarters/bar) "asE" = ( /turf/closed/wall, /area/hallway/secondary/entry) @@ -8548,13 +7799,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/construction/mining/aux_base) -"asG" = ( -/obj/machinery/camera{ - c_tag = "Bar South"; - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "asH" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/tile/yellow{ @@ -8598,31 +7842,13 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"asL" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/space/nearstation) -"asM" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "asN" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 }, -/obj/machinery/camera{ - c_tag = "Fore Starboard Solar Access" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "asO" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -8656,59 +7882,24 @@ }, /turf/open/floor/plasteel, /area/security/vacantoffice/b) -"asV" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/fore"; - dir = 1; - name = "Starboard Bow Maintenance APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "asW" = ( -/obj/structure/table/wood, -/obj/item/storage/box/evidence, -/obj/item/hand_labeler{ - pixel_x = 5 +/obj/machinery/light/small{ + dir = 8 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/taperecorder, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) -"asX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"asY" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" - }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) "asZ" = ( -/obj/structure/chair/sofa/left, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/item/clothing/suit/straight_jacket, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "ata" = ( @@ -8748,14 +7939,11 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "atf" = ( -/obj/machinery/camera{ - c_tag = "Bar Storage" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 }, -/obj/structure/sink/kitchen{ - pixel_y = 28 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "atg" = ( /obj/machinery/door/airlock{ id_tag = "Dorm4"; @@ -8795,17 +7983,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"atk" = ( -/obj/machinery/light/small, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"atl" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) "atm" = ( /turf/open/floor/wood, /area/crew_quarters/dorms) @@ -8850,13 +8027,7 @@ /turf/open/floor/plating, /area/security/vacantoffice/b) "att" = ( -/obj/structure/table/wood/fancy, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/item/reagent_containers/food/drinks/britcup{ - desc = "Kingston's personal cup."; - pixel_x = 5; - pixel_y = 5 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "atu" = ( @@ -8900,19 +8071,6 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/fore) -"atz" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/structure/closet/wardrobe/black, -/obj/item/clothing/under/skirt/black, -/obj/item/clothing/head/beret/black, -/obj/item/clothing/head/beret/black, -/obj/item/clothing/under/trendy_fit, -/obj/item/clothing/under/trendy_fit, -/obj/item/clothing/under/sundress, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "atA" = ( /obj/structure/table, /obj/item/paicard, @@ -9010,20 +8168,6 @@ }, /turf/closed/wall, /area/maintenance/port/fore) -"atQ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/obj/structure/closet/wardrobe/white, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/waiter, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/item/clothing/suit/straight_jacket, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "atR" = ( /obj/effect/landmark/carpspawn, /obj/structure/lattice, @@ -9032,16 +8176,6 @@ "atS" = ( /turf/closed/wall, /area/space/nearstation) -"atT" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck{ - pixel_y = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "atU" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -9050,49 +8184,34 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"atV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - pixel_y = 5 - }, -/obj/structure/chair/sofa{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "atW" = ( /obj/structure/chair/stool, /turf/open/floor/plating, /area/maintenance/port/fore) -"atX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plating, -/area/space/nearstation) "atY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/security/vacantoffice/b) "atZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aua" = ( -/obj/structure/bed, -/obj/machinery/button/door{ - id = "Dorm6"; - name = "Cabin Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/spawner/lootdrop/bedsheet, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/wardrobe/mixed, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/skirt/purple, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aub" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/yellow, @@ -9112,12 +8231,6 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"aud" = ( -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "aue" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -9220,60 +8333,35 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating, /area/maintenance/fore) -"aup" = ( -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - dir = 1; - pixel_x = 3; - pixel_y = 9 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "auq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/vacantoffice/b) "aur" = ( -/obj/structure/table/wood/fancy/black, -/obj/machinery/light/small, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/button/door{ + id = "Room One"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + specialfunctions = 4 + }, /turf/open/floor/carpet, /area/crew_quarters/dorms) -"aus" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral{ +"aut" = ( +/obj/structure/chair/comfy/black{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aut" = ( -/obj/machinery/door/airlock{ - id_tag = "Room One"; - name = "Room Six - Luxury Suite" +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -29 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) -"auu" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet"; - pixel_y = 15 - }, -/turf/open/floor/wood, +/turf/open/floor/carpet, /area/crew_quarters/dorms) "auv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet"; - pixel_y = 15 +/obj/structure/chair/comfy/black{ + dir = 8 }, -/turf/open/floor/wood, +/turf/open/floor/carpet, /area/crew_quarters/dorms) "auw" = ( /obj/structure/bed, @@ -9294,79 +8382,40 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "aux" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"auy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "auz" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/components/unary/tank/air{ +/obj/machinery/camera{ + c_tag = "Holodeck" + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"auA" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - dir = 4; - icon_state = "roomnum"; - name = "Room Number 3"; - pixel_x = -30; - pixel_y = -7 - }, -/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"auB" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" - }, -/turf/open/floor/plating, /area/crew_quarters/fitness) -"auC" = ( +"auB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "auD" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -9428,21 +8477,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/electrical) -"auN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "auO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -9454,43 +8488,38 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "auR" = ( -/turf/closed/wall, -/area/crew_quarters/fitness) -"auS" = ( -/obj/machinery/camera{ - c_tag = "Holodeck" - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/machinery/light{ dir = 8 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 1; + icon_state = "roomnum"; + name = "Room Number 2"; + pixel_x = -30; + pixel_y = -7 + }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "auT" = ( /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/port/fore) -"auU" = ( -/obj/machinery/atmospherics/components/binary/valve, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "auV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/port/fore) -"auW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "auX" = ( /obj/structure/mirror{ icon_state = "mirror_broke"; @@ -9557,8 +8586,12 @@ /turf/open/floor/plating, /area/maintenance/fore) "avg" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel, +/obj/machinery/door/airlock{ + id_tag = "Dorm5"; + name = "Room Four" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, /area/crew_quarters/dorms) "avh" = ( /obj/structure/cable{ @@ -9588,7 +8621,7 @@ /area/maintenance/fore) "avj" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable{ @@ -9608,19 +8641,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"avl" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"avm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "avn" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, +/obj/machinery/door/airlock{ + id_tag = "Dorm6"; + name = "Room Five" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, /area/crew_quarters/dorms) "avo" = ( /obj/structure/sign/warning/electricshock, @@ -9665,64 +8692,75 @@ /turf/open/floor/plating, /area/maintenance/fore) "avt" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"avu" = ( -/obj/structure/chair/sofa/left{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"avv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"avw" = ( -/obj/machinery/button/door{ - id = "Room One"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -25; - specialfunctions = 4 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"avx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"avy" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" - }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) -"avz" = ( -/obj/machinery/computer/holodeck{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"avA" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/structure/chair/sofa/right{ +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"avv" = ( +/obj/machinery/camera{ + c_tag = "Dorms West" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) +"avw" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Dormitories Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"avy" = ( +/obj/machinery/door/airlock{ + id_tag = "Room One"; + name = "Room Six - Luxury Suite" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"avz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, +/obj/structure/table, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"avA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "avB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -9731,20 +8769,17 @@ /turf/open/floor/plating, /area/ai_monitored/security/armory) "avC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/structure/chair{ + dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "avD" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/computer/holodeck{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "avE" = ( /obj/machinery/door/poddoor/preopen{ id = "maint3" @@ -9855,17 +8890,22 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "avR" = ( -/obj/structure/table/wood/poker, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 3; - pixel_y = 3 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 8; + icon_state = "roomnum"; + name = "Room Number 4"; + pixel_y = 24 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - pixel_y = 5 +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "avS" = ( /obj/item/wrench, /turf/open/floor/plating, @@ -10078,65 +9118,54 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "awo" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -29 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"awp" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/machinery/door/airlock{ + id_tag = "Dorm3"; + name = "Room Two" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"awp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "awq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"awr" = ( -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aws" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) -"awt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"awu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/closet/wardrobe/mixed, -/obj/item/clothing/under/kilt, -/obj/item/clothing/under/kilt, -/obj/item/clothing/under/skirt/purple, -/obj/item/clothing/head/beret, -/obj/item/clothing/head/beret, -/obj/item/clothing/head/beret, +"awr" = ( /turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"awv" = ( +/area/crew_quarters/dorms) +"awt" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/sign/warning/fire{ desc = "A sign that states the labeled room's number."; - dir = 8; + dir = 6; icon_state = "roomnum"; - name = "Room Number 4"; + name = "Room Number 5"; pixel_y = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -10147,8 +9176,33 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"awu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"awv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aww" = ( /obj/effect/landmark/event_spawn, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/security/brig) "awx" = ( @@ -10161,62 +9215,101 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "awy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) -"awz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ dir = 5 }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) -"awA" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm5"; - name = "Room Four" +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"awz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"awA" = ( +/obj/machinery/holopad, +/obj/machinery/camera{ + c_tag = "Dorms Central" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/plasteel, /area/crew_quarters/dorms) "awB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet{ + name = "Holodeck Outfits" + }, +/obj/item/clothing/under/trek/Q, +/obj/item/clothing/under/trek/command/next, +/obj/item/clothing/under/trek/command/next, +/obj/item/clothing/under/trek/command/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/medsci/next, +/obj/item/clothing/under/trek/medsci/next, +/obj/item/clothing/under/trek/medsci/next, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/gladiator, +/obj/item/clothing/under/gladiator, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "awC" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/structure/table, +/obj/item/paper/fluff/holodeck/disclaimer, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "awD" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard/fore) "awE" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 20 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - dir = 1; - pixel_x = 3; - pixel_y = 20 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/item/reagent_containers/food/drinks/britcup, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "awF" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance{ @@ -10261,30 +9354,23 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "awL" = ( -/obj/structure/table, -/obj/item/instrument/guitar{ - pixel_x = -7 +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 }, -/obj/item/instrument/eguitar{ - pixel_x = 5 - }, -/obj/item/instrument/violin, -/obj/item/instrument/trombone, -/obj/item/instrument/saxophone, -/obj/item/instrument/piano_synth, -/obj/item/instrument/recorder, -/obj/item/instrument/accordion, +/obj/item/pen, /turf/open/floor/plating, /area/maintenance/starboard/fore) "awM" = ( -/obj/machinery/button/door{ - id = "maintdiy"; - name = "Shutters Control Button"; - pixel_x = -6; - pixel_y = 24 +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, /turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/area/maintenance/starboard/fore) "awN" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10380,14 +9466,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/entry) -"awX" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm6"; - name = "Room Five" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) "awY" = ( /obj/machinery/light{ dir = 1 @@ -10451,15 +9529,6 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"axd" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "axe" = ( /obj/machinery/sleeper{ dir = 4 @@ -10547,6 +9616,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore) "axr" = ( @@ -10559,6 +9631,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore) "axs" = ( @@ -10568,6 +9643,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore) "axt" = ( @@ -10661,11 +9739,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "axC" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/sign/poster/official/enlist{ - pixel_y = 32 +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_x = -32 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) @@ -10676,16 +9758,15 @@ /turf/closed/wall, /area/maintenance/fore/secondary) "axE" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 8; - name = "8maintenance loot spawner" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 }, -/obj/item/radio/intercom{ - pixel_y = 25 +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/official/do_not_question{ + pixel_x = 32 }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "axF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -10723,12 +9804,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"axJ" = ( -/obj/structure/piano{ - icon_state = "piano" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "axK" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -10736,189 +9811,63 @@ /turf/closed/wall, /area/maintenance/port/fore) "axL" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/closet/wardrobe/grey, -/obj/item/clothing/under/assistantformal, -/obj/item/clothing/under/assistantformal, -/obj/machinery/camera{ - c_tag = "Dorms East - Holodeck"; +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"axM" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plasteel, /area/crew_quarters/dorms) "axN" = ( -/obj/structure/chair/comfy/black{ - dir = 8 - }, -/turf/open/floor/carpet, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, /area/crew_quarters/dorms) "axO" = ( -/obj/machinery/light/small, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) -"axP" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/table/wood, -/obj/item/paicard, -/obj/item/clothing/mask/balaclava{ - pixel_x = -8; - pixel_y = 8 - }, -/obj/item/toy/cards/deck{ - pixel_x = 2 - }, -/obj/item/storage/crayons, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"axQ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - dir = 1; - icon_state = "roomnum"; - name = "Room Number 2"; - pixel_x = -30; - pixel_y = -7 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"axR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"axS" = ( -/obj/item/flashlight/lamp/green{ - pixel_x = -3; - pixel_y = 22 - }, -/obj/structure/dresser{ - desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; - name = "Dresser"; - pixel_y = 7 - }, -/turf/open/floor/plating, -/area/maintenance/port) -"axT" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm3"; - name = "Room Two" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) -"axU" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - dir = 6; - icon_state = "roomnum"; - name = "Room Number 5"; - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"axV" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"axW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/structure/chair/comfy/black, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"axP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, +/obj/structure/chair/comfy/brown, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"axS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"axT" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"axW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "axX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, -/obj/machinery/light/small, -/turf/open/floor/carpet, +/turf/open/floor/plasteel, /area/crew_quarters/dorms) -"axY" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/structure/closet/toolcloset, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"axZ" = ( -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" - }, -/obj/machinery/airalarm{ - pixel_y = 24 +"aya" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"aya" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "ayb" = ( -/obj/structure/chair{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -11092,23 +10041,9 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/fore) -"ayB" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/maintenance/fore) "ayC" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/fore) "ayD" = ( /obj/structure/cable{ @@ -11168,6 +10103,12 @@ /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "ayM" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel, +/area/ai_monitored/storage/eva) +"ayN" = ( /obj/structure/rack, /obj/machinery/light{ dir = 1 @@ -11180,12 +10121,6 @@ /obj/item/clothing/glasses/welding, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) -"ayN" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/turf/open/floor/plasteel, -/area/ai_monitored/storage/eva) "ayO" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical{ @@ -11284,45 +10219,36 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "ayY" = ( -/obj/structure/sign/poster/official/cohiba_robusto_ad, -/turf/closed/wall, -/area/lawoffice) -"ayZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/structure/sign/poster/contraband/pwr_game{ +/obj/structure/sign/poster/official/obey{ pixel_x = -32 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"ayZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/official/obey{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "aza" = ( -/obj/machinery/vr_sleeper{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/fitness) +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "azb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) +/obj/structure/table/wood/poker, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "azc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -11335,23 +10261,20 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"azd" = ( -/obj/machinery/vr_sleeper{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white/side{ - dir = 8 - }, -/area/crew_quarters/fitness) "aze" = ( -/obj/machinery/vr_sleeper{ +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"azf" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"azg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/tile/red{ @@ -11360,44 +10283,12 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/fitness) -"azf" = ( -/obj/structure/grille/broken, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/window{ - dir = 4 - }, -/obj/structure/window, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/starboard/fore) -"azg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "holoprivacy"; - name = "Holodeck Privacy"; - pixel_y = 24 - }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "azh" = ( -/obj/machinery/door/airlock{ - name = "Instrument Storage" - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "azi" = ( /obj/machinery/door/airlock/maintenance{ name = "Garden Maintenance"; @@ -11406,83 +10297,26 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) -"azj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/closet{ - name = "Holodeck Outfits" - }, -/obj/item/clothing/under/trek/Q, -/obj/item/clothing/under/trek/command/next, -/obj/item/clothing/under/trek/command/next, -/obj/item/clothing/under/trek/command/next, -/obj/item/clothing/under/trek/engsec/next, -/obj/item/clothing/under/trek/engsec/next, -/obj/item/clothing/under/trek/engsec/next, -/obj/item/clothing/under/trek/engsec/next, -/obj/item/clothing/under/trek/medsci/next, -/obj/item/clothing/under/trek/medsci/next, -/obj/item/clothing/under/trek/medsci/next, -/obj/item/clothing/under/mw2_russian_para, -/obj/item/clothing/under/mw2_russian_para, -/obj/item/clothing/under/gladiator, -/obj/item/clothing/under/gladiator, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "azk" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4; - light_color = "#d8b1b1" - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"azl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"azm" = ( -/obj/machinery/shower{ - dir = 4 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"azn" = ( -/turf/open/floor/plasteel/dark, /area/crew_quarters/dorms) "azo" = ( -/obj/machinery/shower{ - dir = 8; - pixel_y = -4 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "azp" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel, /area/crew_quarters/fitness) "azq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11600,15 +10434,15 @@ /turf/closed/wall, /area/maintenance/port/fore) "azH" = ( -/obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/space, -/area/space/nearstation) +/turf/closed/wall, +/area/crew_quarters/theatre) "azI" = ( -/obj/structure/lattice, +/obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/space, -/area/space/nearstation) +/obj/item/instrument/eguitar, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "azJ" = ( /obj/machinery/gateway{ dir = 9 @@ -11684,27 +10518,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"azP" = ( -/obj/structure/table/wood, -/obj/machinery/requests_console{ - department = "Theatre"; - name = "theatre RC"; - pixel_x = -32 - }, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/toy/dummy, -/obj/item/lipstick/random{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/lipstick/random{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) "azQ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11743,9 +10556,11 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "azT" = ( -/obj/effect/landmark/event_spawn, -/turf/closed/wall, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "azU" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11758,39 +10573,15 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) -"azV" = ( -/obj/machinery/vr_sleeper{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/white/side{ - dir = 8 - }, -/area/crew_quarters/fitness) "azW" = ( /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "azX" = ( -/obj/machinery/vr_sleeper{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/plasteel/white/corner{ - dir = 4 - }, -/area/crew_quarters/fitness) +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "azY" = ( /obj/structure/table, /obj/item/radio/off, @@ -11810,27 +10601,22 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aAb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/door/airlock{ + id_tag = "Dorm2"; + name = "Room One" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "aAc" = ( /obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aAd" = ( -/obj/machinery/camera{ - c_tag = "Dorms West" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "aAe" = ( @@ -11840,45 +10626,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) -"aAf" = ( -/obj/machinery/vr_sleeper{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/crew_quarters/fitness) -"aAg" = ( -/obj/machinery/vr_sleeper{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/plasteel/white/corner{ - dir = 4 - }, -/area/crew_quarters/fitness) "aAh" = ( /turf/closed/wall, /area/crew_quarters/toilet) "aAi" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/structure/chair/comfy/brown{ + dir = 1 }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aAj" = ( /obj/structure/cable{ icon_state = "1-4" @@ -11894,87 +10650,56 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aAk" = ( -/obj/structure/closet/athletic_mixed, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aAl" = ( -/obj/structure/closet/boxinggloves, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aAm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) -"aAn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aAl" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aAn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "aAo" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/crew_quarters/dorms) "aAp" = ( -/obj/structure/closet{ - name = "Suit Closet" +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, -/obj/item/clothing/under/suit_jacket/white, -/obj/item/clothing/under/suit_jacket/tan, -/obj/item/clothing/under/suit_jacket/red, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/under/suit_jacket/green, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/suit_jacket/checkered, -/obj/item/clothing/under/suit_jacket/charcoal, -/obj/item/clothing/under/suit_jacket/burgundy, -/obj/item/clothing/under/suit_jacket, -/obj/item/clothing/under/lawyer/black, -/obj/item/clothing/under/lawyer/blacksuit, -/obj/item/clothing/under/lawyer/blue, -/obj/item/clothing/under/lawyer/bluesuit, -/obj/item/clothing/under/lawyer/female, -/obj/item/clothing/under/lawyer/purpsuit, -/obj/item/clothing/under/lawyer/really_black, -/obj/item/clothing/under/lawyer/red, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aAq" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/area/crew_quarters/dorms) "aAr" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aAs" = ( -/obj/machinery/light/small{ - dir = 4; - light_color = "#d8b1b1" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aAt" = ( -/obj/machinery/door/poddoor/preopen{ - id = "maint2" +/obj/structure/closet, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aAu" = ( -/obj/structure/cable{ - icon_state = "4-8" +"aAs" = ( +/obj/structure/piano{ + icon_state = "piano" }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"aAt" = ( /obj/machinery/door/poddoor/preopen{ id = "maint2" }, @@ -12118,16 +10843,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"aAM" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "aAN" = ( /obj/structure/cable{ icon_state = "2-8" @@ -12203,11 +10918,20 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aAX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "aAY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -12215,11 +10939,27 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aAZ" = ( -/obj/structure/urinal{ - pixel_y = 32 +/obj/structure/table/wood, +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/pen/fountain, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/pen/fourcolor, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aBa" = ( /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) @@ -12422,41 +11162,46 @@ /turf/open/floor/plasteel, /area/hydroponics/garden) "aBx" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel, -/area/hydroponics) +/obj/machinery/shower{ + dir = 8; + pixel_y = -4 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) "aBy" = ( -/obj/machinery/camera{ - c_tag = "Library North" +/obj/machinery/door/airlock{ + desc = "A small bathroom with a sink, toilet and shower."; + id_tag = "Bath3"; + name = "Bathroom" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/chair/sofa/right, -/obj/machinery/light{ - dir = 1; - light_color = "#c1caff" - }, -/turf/open/floor/wood, -/area/library) +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aBz" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/shower{ dir = 4 }, -/obj/structure/chair/sofa/left, -/turf/open/floor/wood, -/area/library) +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) "aBA" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood, -/area/library) +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table/wood, +/obj/item/paicard, +/obj/item/clothing/mask/balaclava{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/toy/cards/deck{ + pixel_x = 2 + }, +/obj/item/storage/crayons, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aBB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, @@ -12472,12 +11217,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aBD" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/turf/open/floor/wood, -/area/library) "aBE" = ( /obj/item/clothing/under/rank/mailman, /obj/item/clothing/head/mailman, @@ -12526,13 +11265,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) -"aBM" = ( -/obj/structure/sign/poster/official/nanomichi_ad{ - pixel_y = 32 - }, -/obj/machinery/vending/snack/random, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/central) "aBN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -12565,13 +11297,6 @@ "aBR" = ( /turf/closed/wall/r_wall, /area/storage/primary) -"aBS" = ( -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/circuit, -/area/ai_monitored/nuke_storage) "aBT" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/bot_white, @@ -12588,27 +11313,20 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) "aBU" = ( -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/nuke_storage"; - dir = 1; - name = "Vault APC"; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/circuit, -/area/ai_monitored/nuke_storage) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "aBV" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/turf/open/floor/circuit, -/area/ai_monitored/nuke_storage) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "aBW" = ( /obj/structure/filingcabinet, /obj/item/folder/documents, @@ -12713,27 +11431,9 @@ /turf/open/floor/carpet, /area/crew_quarters/cryopod) "aCe" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/sign/poster/official/do_not_question{ - pixel_x = 32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) -"aCf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/sign/poster/official/obey{ - pixel_x = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/crew_quarters/toilet) "aCg" = ( /obj/structure/cable{ icon_state = "4-8" @@ -12741,14 +11441,11 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aCh" = ( -/obj/machinery/shower{ - dir = 8; - pixel_y = -4 +/obj/machinery/vending/autodrobe, +/turf/open/floor/plasteel/white/side{ + dir = 4 }, -/obj/effect/landmark/xeno_spawn, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/area/crew_quarters/theatre) "aCi" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -12774,51 +11471,17 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aCm" = ( -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/obj/machinery/camera{ - c_tag = "Theatre Stage" - }, -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aCn" = ( -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 20 +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" }, -/obj/item/reagent_containers/food/condiment/peppermill{ - dir = 1; - pixel_x = 3; - pixel_y = 20 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aCo" = ( -/obj/structure/closet{ - name = "Costume Closet" - }, -/obj/item/clothing/head/russobluecamohat, -/obj/item/clothing/head/russobluecamohat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/head/russofurhat, -/obj/item/clothing/under/mw2_russian_para, -/obj/item/clothing/under/mw2_russian_para, -/obj/item/clothing/under/mw2_russian_para, -/obj/item/clothing/under/mw2_russian_para, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/jackboots, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "aCp" = ( /obj/machinery/camera{ c_tag = "Arrivals North"; @@ -12832,12 +11495,6 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) -"aCq" = ( -/obj/structure/closet/lasertag/red, -/obj/item/clothing/under/pj/red, -/obj/item/clothing/under/pj/red, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "aCr" = ( /turf/closed/wall, /area/crew_quarters/theatre) @@ -12861,24 +11518,25 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/dark, /area/crew_quarters/fitness) "aCv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/machinery/vr_sleeper{ + dir = 8 }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 }, -/turf/open/floor/plating, /area/crew_quarters/fitness) "aCw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -12891,23 +11549,17 @@ }, /turf/open/floor/plating, /area/crew_quarters/fitness) -"aCx" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aCy" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, -/obj/machinery/firealarm{ - pixel_y = 24 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/crew_quarters/fitness) "aCz" = ( /obj/structure/window/reinforced{ dir = 8 @@ -12918,11 +11570,19 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCA" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 +/obj/structure/grille/broken, +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/wood, -/area/library) +/obj/structure/window{ + dir = 4 + }, +/obj/structure/window, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/fore) "aCB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -13052,13 +11712,6 @@ "aCR" = ( /turf/closed/wall, /area/chapel/main) -"aCS" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/floor/wood, -/area/library) "aCT" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -13070,23 +11723,6 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"aCU" = ( -/obj/machinery/photocopier{ - pixel_x = -5; - pixel_y = -5 - }, -/turf/open/floor/wood, -/area/library) -"aCV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/sign/poster/official/obey{ - pixel_x = 32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) "aCW" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/spawner/lootdrop/maintenance, @@ -13185,14 +11821,14 @@ /turf/open/floor/plasteel, /area/hydroponics/garden) "aDh" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/sign/poster/official/space_cops{ - pixel_x = -32 +/obj/machinery/vending/assist, +/obj/structure/sign/poster/contraband/grey_tide{ + desc = "A poster promoting a regression to ape-like intelligence for Assistants, suggesting they break, loot and murder enough to make even a caveman blush."; + pixel_x = -32; + poster_item_desc = "Nanotrasen does not condone such messages. Please don't regress to ape-level intelligence as this poster suggests." }, /turf/open/floor/plasteel, -/area/hallway/primary/fore) +/area/storage/primary) "aDi" = ( /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, @@ -13299,27 +11935,11 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aDu" = ( -/obj/structure/chair/comfy/brown, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aDv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/nuke_storage) +/obj/structure/window/reinforced, +/obj/structure/chair/stool, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "aDw" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -13400,33 +12020,44 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aDG" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - desc = "Privacy shutters for the Private Study. Stops people spying in on your game."; - id = "PrivateStudy1"; - name = "Private Study Privacy Shutters" +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/effect/spawner/structure/window, -/turf/open/floor/wood, -/area/library) +/obj/machinery/camera{ + c_tag = "Dorms South"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aDH" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/pen/fountain/captain, -/turf/open/floor/carpet, -/area/crew_quarters/heads/captain) +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/folder/white, +/obj/item/pen/fountain, +/obj/item/stamp/rd{ + pixel_x = 3; + pixel_y = -2 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/heads/hor) "aDI" = ( /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) -"aDJ" = ( -/obj/machinery/door/airlock{ - desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; - id_tag = "PrivateStudy"; - name = "Private Study" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/wood, -/area/library) "aDK" = ( /obj/machinery/door/airlock/public/glass{ name = "Cryogenics " @@ -13439,147 +12070,90 @@ /turf/open/floor/plasteel, /area/crew_quarters/cryopod) "aDL" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "Bath1"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"aDM" = ( +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"aDN" = ( +/obj/machinery/camera{ + c_tag = "Bathrooms"; + dir = 1 + }, +/obj/structure/urinal{ + pixel_y = 32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"aDP" = ( +/obj/machinery/shower{ + dir = 8; + pixel_y = -4 + }, +/obj/effect/landmark/xeno_spawn, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) +"aDQ" = ( /obj/machinery/door/airlock{ - desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; - id_tag = "PrivateStudy"; - name = "Private Study" + desc = "A small bathroom with a sink, toilet and shower."; + id_tag = "Bath1"; + name = "Bathroom" }, /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood, -/area/library) -"aDM" = ( -/obj/structure/chair/sofa/right, -/obj/structure/window{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDN" = ( -/obj/structure/chair/sofa, -/obj/structure/window{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDO" = ( -/obj/structure/chair/sofa/left, -/obj/structure/window{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDP" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aDR" = ( -/obj/structure/closet/lasertag/blue, -/obj/item/clothing/under/pj/blue, -/obj/item/clothing/under/pj/blue, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aDS" = ( /obj/machinery/light/small{ - dir = 4; - light_color = "#d8b1b1" + dir = 1 }, /turf/open/floor/wood, /area/crew_quarters/bar) "aDT" = ( -/obj/structure/table/wood/fancy, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/snacks/burger/plain, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDU" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/soap, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small{ dir = 1; - pixel_x = 3; - pixel_y = 9 + light_color = "#ffc1c1" }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDV" = ( -/obj/structure/table/wood/fancy, -/obj/machinery/light, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 20 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - dir = 1; - pixel_x = 3; - pixel_y = 20 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4; - pixel_y = 5 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDW" = ( -/obj/machinery/holopad, -/obj/machinery/camera{ - c_tag = "Dorms Central" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aDX" = ( -/obj/structure/chair/sofa{ - dir = 1 - }, -/obj/structure/window, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aDY" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 25 - }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) +"aDU" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) +"aDY" = ( +/obj/structure/window{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDZ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -13607,18 +12181,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aEb" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet"; - pixel_y = 15 - }, -/turf/open/floor/plating, -/area/maintenance/port) "aEc" = ( -/obj/structure/chair/wood/wings, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aEd" = ( /obj/structure/cable{ icon_state = "4-8" @@ -13715,116 +12283,6 @@ /obj/structure/fans/tiny, /turf/open/floor/plating, /area/chapel/main) -"aEo" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aEp" = ( -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/sparsegrass, -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/brflowers, -/obj/effect/spawner/structure/window, -/turf/open/floor/grass, -/area/crew_quarters/bar) -"aEq" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aEr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/machinery/light{ - dir = 1; - light_color = "#cee5d2" - }, -/obj/structure/table, -/obj/structure/bedsheetbin/color, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aEs" = ( -/obj/machinery/vending/cola/red, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/central) -"aEt" = ( -/obj/machinery/computer/arcade/minesweeper, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aEu" = ( -/obj/machinery/computer/arcade/battle, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aEv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/closet/wardrobe/pjs, -/obj/item/clothing/under/maid, -/obj/item/clothing/under/maid, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/accessory/maidapron, -/obj/item/clothing/accessory/maidapron, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aEw" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aEx" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/head/that, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aEy" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - dir = 1; - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -9 - }, -/obj/item/sharpener{ - pixel_x = 10 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) "aEz" = ( /obj/machinery/power/apc{ areastring = "/area/hallway/secondary/entry"; @@ -14086,79 +12544,44 @@ /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "aFd" = ( -/obj/structure/table/wood, -/obj/item/instrument/guitar{ - pixel_x = -7 - }, -/obj/item/instrument/eguitar{ - pixel_x = 5 - }, -/obj/item/instrument/violin, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFe" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm2"; - name = "Room One" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, /area/crew_quarters/dorms) -"aFf" = ( -/obj/structure/piano{ - icon_state = "piano" - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFg" = ( -/obj/structure/chair/comfy/black{ - dir = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFh" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFi" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFj" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFk" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +"aFe" = ( +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aFk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, /area/crew_quarters/bar) "aFl" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/structure/festivus{ + anchored = 1; + desc = "A pole for dancing."; + name = "pole" }, -/obj/structure/dresser, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aFm" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -14180,17 +12603,10 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aFp" = ( -/obj/machinery/door/window/southright{ - name = "Bar Door"; - req_one_access_txt = "25;28" - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "aFq" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -14223,20 +12639,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aFt" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = 32 - }, -/obj/item/book/manual/wiki/barman_recipes, -/obj/item/reagent_containers/rag, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) "aFu" = ( /turf/closed/wall, /area/library) @@ -14289,36 +12691,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/chapel/main) -"aFC" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/snacks/bluecherrycupcake{ - pixel_y = 5 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFD" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aFE" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 23 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) -"aFF" = ( -/obj/structure/chair/sofa{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aFG" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -14463,12 +12835,6 @@ }, /turf/open/floor/plasteel, /area/storage/primary) -"aFS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/storage/primary) "aFT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -14476,8 +12842,8 @@ /turf/open/floor/plasteel, /area/storage/primary) "aFU" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 }, /turf/open/floor/plasteel, /area/storage/primary) @@ -14564,30 +12930,9 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"aGe" = ( -/obj/structure/safe, -/obj/item/clothing/head/bearpelt, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/nuke_storage) "aGf" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -14610,48 +12955,50 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) "aGk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/structure/toilet{ + dir = 4 }, -/turf/open/floor/plating, -/area/space/nearstation) +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "Bath2"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aGl" = ( -/obj/structure/closet/crate, -/obj/item/book/manual/wiki/telescience, -/obj/item/book/manual/wiki/engineering_guide, -/obj/item/book/manual/wiki/engineering_construction, -/obj/item/book/manual/wiki/atmospherics, -/obj/item/book/manual/wiki/detective, -/obj/item/book/manual/wiki/tcomms, -/obj/item/book/manual/wiki/engineering_singulo_tesla, -/obj/item/book/manual/wiki/experimentor, -/obj/item/book/manual/wiki/research_and_development, -/obj/item/book/manual/wiki/robotics_cyborgs, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/book/manual/wiki/medicine, -/obj/item/book/manual/wiki/medical_cloning, -/obj/item/book/manual/wiki/infections, -/obj/item/book/manual/ripley_build_and_repair, -/obj/item/book/manual/hydroponics_pod_people, -/obj/item/book/manual/wiki/toxins, -/obj/item/book/manual/wiki/grenades, -/obj/item/book{ - desc = "An undeniably handy book."; - icon_state = "bookknock"; - name = "A Simpleton's Guide to Safe-cracking with Stethoscopes" +/obj/machinery/door/airlock{ + desc = "A small bathroom with a sink, toilet and shower."; + id_tag = "Bath2"; + name = "Bathroom" }, -/turf/open/floor/wood, -/area/library) +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aGm" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/hydroponics) -"aGn" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +/obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/toilet"; + dir = 4; + name = "Dormitory Bathrooms APC"; + pixel_x = 26 }, -/turf/open/floor/plasteel, -/area/hydroponics) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table/glass, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aGo" = ( /obj/structure/table, /obj/item/stack/sheet/rglass{ @@ -14670,12 +13017,6 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) -"aGp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hydroponics) "aGq" = ( /obj/item/stack/sheet/plasteel{ amount = 10 @@ -14727,13 +13068,21 @@ /turf/closed/wall, /area/crew_quarters/theatre) "aGw" = ( -/obj/machinery/seed_extractor, -/turf/open/floor/plasteel/dark, -/area/hydroponics) +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 5 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aGx" = ( -/obj/machinery/biogenerator, -/turf/open/floor/plasteel/dark, -/area/hydroponics) +/obj/item/radio/intercom{ + pixel_x = -25 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aGy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14751,9 +13100,6 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/structure/cable{ - icon_state = "2-4" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -14891,12 +13237,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aGK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hydroponics) "aGL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -14937,10 +13277,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/chapel/office) -"aGP" = ( -/obj/machinery/vending/hydronutrients, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "aGQ" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -14953,12 +13289,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aGR" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "aGS" = ( /obj/structure/cable{ icon_state = "2-8" @@ -15050,33 +13380,14 @@ /area/hallway/secondary/entry) "aHb" = ( /obj/structure/table/wood, -/obj/item/paper_bin/bundlenatural{ - pixel_x = 6; - pixel_y = 4 - }, /obj/item/paper_bin{ - pixel_x = -6; - pixel_y = 4 + pixel_x = 1; + pixel_y = 9 }, -/obj/item/pen/fountain, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/stack/packageWrap, /obj/item/pen/fourcolor, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aHc" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/landmark/start/botanist, -/turf/open/floor/plasteel, -/area/hydroponics) +/turf/open/floor/wood, +/area/library) "aHd" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -15183,34 +13494,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/chapel/main) -"aHr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/hydroponics) -"aHs" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hydroponics) -"aHt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1; - light_color = "#cee5d2" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aHu" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -15289,12 +13572,11 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) "aHD" = ( -/obj/structure/chair/comfy/beige{ - dir = 8 +/obj/structure/chair/stool{ + pixel_y = 8 }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/grimy, -/area/hallway/secondary/entry) +/turf/open/floor/plasteel, +/area/storage/primary) "aHE" = ( /obj/structure/table, /obj/item/weldingtool, @@ -15309,26 +13591,6 @@ /obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) -"aHG" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/vault{ - req_access_txt = "53" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/nuke_storage) "aHH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -15460,68 +13722,25 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"aHU" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aHV" = ( -/obj/machinery/airalarm{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1; - pixel_y = -22 + pixel_x = 5 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aHW" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aHX" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/table/glass, +/obj/item/razor{ + pixel_x = 2; + pixel_y = 3 }, -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -9 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - dir = 1; - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/condiment/pack/ketchup{ - pixel_x = 5 - }, -/obj/item/reagent_containers/food/condiment/pack/ketchup{ - pixel_x = 5 - }, -/obj/item/reagent_containers/food/condiment/pack/ketchup{ - pixel_x = 5 - }, -/obj/item/reagent_containers/food/condiment/pack/hotsauce{ - pixel_x = 10 - }, -/obj/item/reagent_containers/food/condiment/pack/hotsauce{ - pixel_x = 10 - }, -/obj/item/reagent_containers/food/condiment/pack/mustard{ - pixel_x = 10 - }, -/obj/item/reagent_containers/food/condiment/pack/mustard{ - pixel_x = 10 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/item/reagent_containers/rag/towel/random, +/obj/item/reagent_containers/rag/towel/random, +/obj/item/reagent_containers/rag/towel/random, +/obj/item/reagent_containers/rag/towel/random, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aHY" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -15529,12 +13748,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aHZ" = ( -/obj/effect/turf_decal/tile/blue, -/obj/structure/sign/poster/contraband/fun_police{ - pixel_x = 32 +/obj/machinery/light/small{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aIa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -15543,13 +13761,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aIb" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/theatre"; - dir = 8; - name = "Theatre APC"; - pixel_x = -25 - }, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -15613,12 +13824,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aIi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aIj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -15697,15 +13902,37 @@ /turf/closed/wall, /area/hydroponics) "aIr" = ( -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) -"aIs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/button/door{ + desc = "Bolts the doors to the Private Study."; + id = "PrivateStudy"; + name = "Private Study Lock"; + pixel_x = -5; + pixel_y = 24; + req_access_txt = "28" + }, +/obj/machinery/button/door{ + id = "PrivateStudy1"; + name = "Privacy Shutters"; + pixel_x = 5; + pixel_y = 24 }, -/obj/structure/chair/comfy/brown, /turf/open/floor/wood, -/area/crew_quarters/bar) +/area/library) +"aIs" = ( +/obj/machinery/camera{ + c_tag = "Library North" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/sofa/right, +/obj/machinery/light{ + dir = 1; + light_color = "#c1caff" + }, +/turf/open/floor/wood, +/area/library) "aIt" = ( /turf/open/floor/wood, /area/library) @@ -15725,11 +13952,16 @@ /turf/open/floor/wood, /area/library) "aIw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +/obj/structure/disposalpipe/segment{ + dir = 6 }, +/obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/sofa/left, /turf/open/floor/wood, -/area/crew_quarters/bar) +/area/library) "aIx" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -15740,21 +13972,19 @@ /turf/open/floor/wood, /area/library) "aIy" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, -/obj/item/stack/packageWrap, -/obj/item/pen/fourcolor, -/turf/open/floor/wood, -/area/library) +/turf/open/floor/plasteel/dark, +/area/chapel/office) "aIz" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/grimy, /area/chapel/office) -"aIA" = ( +"aIB" = ( /obj/structure/bodycontainer/crematorium{ id = "crematoriumChapel" }, @@ -15763,14 +13993,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) -"aIB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "aIC" = ( /obj/effect/landmark/start/chaplain, /obj/structure/chair, @@ -15792,15 +14014,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/security/warden) -"aIG" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aIH" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -15886,7 +14099,7 @@ /obj/item/reagent_containers/glass/bucket, /obj/item/plant_analyzer, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/green, @@ -15975,29 +14188,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/plasteel, /area/storage/primary) -"aJd" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/hallway/primary/port) -"aJe" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/port) "aJf" = ( /obj/machinery/camera{ c_tag = "EVA South"; @@ -16059,13 +14249,12 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aJk" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Bar Back Room" }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/bar) "aJl" = ( /obj/structure/tank_dispenser/oxygen, /obj/machinery/light{ @@ -16077,11 +14266,10 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aJm" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/vending/wardrobe/bar_wardrobe, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aJn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -16163,17 +14351,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aJv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/robust_softdrinks{ - pixel_x = -32; +/obj/structure/sign/poster/official/nanomichi_ad{ pixel_y = 32 }, -/turf/open/floor/plasteel, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/dark, /area/hallway/primary/central) "aJw" = ( /turf/closed/wall, @@ -16194,9 +14376,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aJz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) +/obj/machinery/button/door{ + id = "Bath3"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/recharge_station, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aJA" = ( /obj/machinery/door/airlock/maintenance{ name = "Kitchen Maintenance"; @@ -16228,12 +14421,15 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aJE" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" +/obj/structure/closet/secure_closet/bar{ + req_access_txt = "25" }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/gun/ballistic/revolver/doublebarrel, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aJF" = ( /obj/machinery/newscaster{ pixel_x = 30 @@ -16270,11 +14466,12 @@ /turf/closed/wall, /area/crew_quarters/kitchen) "aJJ" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/item/pen/blue, -/turf/open/floor/wood, -/area/library) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "aJK" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -16296,28 +14493,6 @@ /turf/open/floor/plasteel, /area/hydroponics) "aJM" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/dark, -/area/chapel/office) -"aJN" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/sign/departments/security{ - pixel_x = -32; - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) -"aJO" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/turf/open/floor/plasteel, -/area/hydroponics) -"aJP" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp{ pixel_y = 10 @@ -16329,32 +14504,30 @@ }, /turf/open/floor/plasteel/grimy, /area/chapel/office) -"aJQ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, +"aJO" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aJR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/area/hydroponics) +"aJP" = ( +/obj/structure/table/wood, +/obj/item/folder/yellow, +/obj/item/pen/blue, +/turf/open/floor/wood, +/area/library) +"aJQ" = ( +/obj/structure/chair/comfy/brown{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood, +/area/library) +"aJR" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/wood, +/area/library) "aJS" = ( /obj/structure/table/wood, /obj/structure/disposalpipe/segment, @@ -16441,8 +14614,8 @@ }, /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/turf/open/floor/plating, -/area/hallway/primary/port) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "aKc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -16488,30 +14661,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"aKg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aKh" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aKi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/structure/table, -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aKj" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral, @@ -16554,24 +14703,27 @@ /turf/open/floor/plating, /area/storage/primary) "aKq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 +/obj/item/radio/intercom{ + pixel_y = 25 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aKr" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/camera{ + c_tag = "Theatre Stage" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/structure/chair/comfy/brown{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aKr" = ( +/obj/machinery/vending/snack/orange, +/obj/machinery/light{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/structure/sign/poster/contraband/donut_corp{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKs" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/structure/window, @@ -16585,15 +14737,15 @@ icon_state = "0-8" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/hallway/primary/port) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "aKu" = ( /obj/structure/cable{ icon_state = "0-4" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/hallway/primary/port) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "aKv" = ( /obj/structure/cable, /obj/structure/cable{ @@ -16603,8 +14755,8 @@ icon_state = "0-4" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/hallway/primary/port) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "aKw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16626,15 +14778,18 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, /turf/open/floor/plasteel/dark, -/area/hallway/primary/port) +/area/crew_quarters/theatre) "aKx" = ( /obj/structure/cable{ icon_state = "0-8" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/hallway/primary/port) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "aKy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -16710,22 +14865,12 @@ /turf/open/floor/plasteel, /area/hydroponics) "aKJ" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -29 +/obj/machinery/vending/cola/black, +/obj/structure/sign/poster/contraband/sun_kist{ + pixel_y = 32 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/secure_closet/hydroponics, @@ -16748,46 +14893,45 @@ /turf/open/floor/plasteel, /area/hydroponics) "aKM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair/comfy/brown{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 20 }, -/obj/structure/chair/comfy/brown, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 20 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/obj/structure/chair/comfy/black, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKP" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKQ" = ( /obj/machinery/reagentgrinder, /obj/structure/table/wood, @@ -16797,13 +14941,14 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "aKS" = ( -/obj/effect/turf_decal/tile/red, -/obj/structure/sign/departments/security{ - pixel_x = 32; - pixel_y = -32 +/obj/machinery/camera{ + c_tag = "Bar Storage" }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) +/obj/structure/sink/kitchen{ + pixel_y = 28 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aKT" = ( /obj/structure/closet/secure_closet/freezer/meat, /turf/open/floor/plasteel/showroomfloor, @@ -16923,10 +15068,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/library) -"aLh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/crew_quarters/toilet) "aLi" = ( /obj/structure/chair/comfy/beige, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -17002,23 +15143,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main) -"aLs" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Dorms South"; - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aLt" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -17035,7 +15159,7 @@ /area/construction/mining/aux_base) "aLv" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -17179,18 +15303,18 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aLQ" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/toilet"; - dir = 4; - name = "Dormitory Bathrooms APC"; - pixel_x = 26 +/obj/machinery/camera{ + c_tag = "Central Hallway North-East" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/table/glass, -/obj/structure/bedsheetbin/towel, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "aLR" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -17203,13 +15327,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aLS" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) "aLT" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/corner{ @@ -17299,12 +15416,18 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aMg" = ( -/obj/machinery/vending/cola/pwr_game, -/obj/structure/sign/poster/contraband/pwr_game{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/robust_softdrinks{ + pixel_x = -32; pixel_y = 32 }, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/hallway/primary/central) "aMh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -17357,34 +15480,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aMp" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/department/electrical) "aMq" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/sign/poster/contraband/space_cola{ + pixel_x = -32 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aMr" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/theatre) "aMs" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -17406,33 +15510,23 @@ /turf/open/floor/plasteel, /area/hydroponics) "aMu" = ( -/obj/machinery/camera{ - c_tag = "Bathrooms"; - dir = 1 - }, -/obj/structure/urinal{ - pixel_y = 32 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) -"aMv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aMw" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" +/obj/machinery/vending/dinnerware{ + contraband = list(/obj/item/reagent_containers/food/condiment/flour = 4); + desc = "This vendor is full of condiments to put on food."; + name = "\improper Condiments Vendor"; + product_ads = "Get your sauces here!;No slave labour was used to make these products!;Nanotrasen Approved?!"; + products = list(/obj/item/storage/bag/tray = 8, /obj/item/reagent_containers/food/drinks/drinkingglass = 10, /obj/item/storage/box/cups = 5, /obj/item/reagent_containers/food/condiment/pack/ketchup = 20, /obj/item/reagent_containers/food/condiment/pack/mustard = 20, /obj/item/reagent_containers/food/condiment/pack/hotsauce = 20, /obj/item/reagent_containers/food/condiment/pack/astrotame = 20, /obj/item/reagent_containers/food/condiment/saltshaker = 20, /obj/item/reagent_containers/food/condiment/peppermill = 20) }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/central) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aMx" = ( -/obj/machinery/door/airlock{ - name = "Shower Room" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/toilet) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aMy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17465,21 +15559,13 @@ /turf/open/floor/plasteel, /area/hydroponics) "aMB" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/structure/reagent_dispensers/keg/mead, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aMC" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_y = -25 - }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/structure/reagent_dispensers/keg/gargle, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aMD" = ( /obj/machinery/icecream_vat, /turf/open/floor/plasteel/showroomfloor, @@ -17504,31 +15590,11 @@ /obj/item/wirecutters, /turf/open/floor/plasteel, /area/hydroponics) -"aMH" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/bar) "aMI" = ( /obj/machinery/light/small, /obj/machinery/vending/wardrobe/hydro_wardrobe, /turf/open/floor/plasteel, /area/hydroponics) -"aMJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/crew_quarters/dorms) -"aMK" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "aML" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -17603,12 +15669,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aMW" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, -/turf/open/floor/carpet, -/area/library) "aMX" = ( /turf/open/floor/plasteel/grimy, /area/chapel/office) @@ -17689,13 +15749,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aNn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/chair/comfy/brown, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aNo" = ( /obj/structure/cable{ icon_state = "1-8" @@ -17725,34 +15778,19 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aNt" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aNu" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/table/wood, +/obj/item/paper/fluff{ + info = "Renovation Notice

The bar layout for the station is very old. We've decided to give it a facelift after our partnership with IKEA Intergalactic?.
  • We added some sweet retro arcade machines and much more seating area. We removed the stage since it hasn't ever been used.
  • You can run this place like a restaurant now that you have tables. Go whip up a menu with the Chef. You have a condiments table and your Requests Console has been moved so a noticeboard can be placed there. Take tickets from customers and pin them on the noticeboard for the Chef.
  • We hope you like the new bar!"; + name = "Renovation Notice - Bar"; + pixel_x = -5; + pixel_y = 3 }, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/abandoned_gambling_den"; - name = "Abandoned Gambling Den APC"; - pixel_y = -24 - }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/stack/spacecash/c100, +/obj/item/stack/spacecash/c100, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aNv" = ( /obj/effect/turf_decal/plaque{ icon_state = "L4" @@ -17828,78 +15866,16 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "aNF" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ - pixel_x = -3; - pixel_y = 5 - }, -/turf/open/floor/plasteel, +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, /area/crew_quarters/bar) -"aNG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aNH" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - icon_state = "roomnum"; - name = "Room Number 1"; - pixel_x = -30; - pixel_y = -7 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aNI" = ( -/obj/structure/closet/jcloset, -/obj/item/storage/bag/trash, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/under/maid, -/obj/item/clothing/under/maid, -/obj/item/clothing/under/maid, -/turf/open/floor/plasteel, -/area/janitor) -"aNJ" = ( -/obj/structure/table, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/machinery/requests_console{ - department = "Janitorial"; - departmentType = 1; - pixel_y = -29 +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" }, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, -/turf/open/floor/plasteel, -/area/janitor) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aNK" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -17988,12 +15964,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aNV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) "aNW" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office"; @@ -18200,15 +16170,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aOu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "aOv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -18333,56 +16294,28 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aOH" = ( -/obj/structure/closet/secure_closet/captains, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/item/clothing/under/captainparade, -/turf/open/floor/carpet, -/area/crew_quarters/heads/captain) +/obj/structure/window/reinforced, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "aOI" = ( /obj/structure/kitchenspike, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aOJ" = ( -/obj/item/radio/intercom{ - dir = 8; - name = "Station Intercom (General)"; - pixel_x = -28 - }, -/obj/structure/closet/secure_closet/hop, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/chair/comfy/brown{ dir = 8 }, -/obj/item/clothing/suit/ianshirt, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/hop) -"aOK" = ( -/obj/machinery/door/airlock{ - name = "Theatre Backstage"; - req_access_txt = "46" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, +/turf/open/floor/wood, /area/crew_quarters/bar) "aOL" = ( -/obj/machinery/camera{ - c_tag = "Central Hallway North-East" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aOM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -18508,38 +16441,9 @@ /turf/open/floor/wood, /area/library) "aPg" = ( -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/obj/machinery/vending/wardrobe/curator_wardrobe, -/turf/open/floor/carpet, -/area/library) -"aPh" = ( -/obj/structure/table/wood, -/obj/item/book/codex_gigas, -/obj/item/clothing/under/suit_jacket/red, -/obj/structure/destructible/cult/tome, -/turf/open/floor/carpet, -/area/library) -"aPi" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/carpet, /area/library) -"aPj" = ( -/obj/machinery/vr_sleeper{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/crew_quarters/fitness) "aPk" = ( /turf/open/floor/plasteel/chapel{ dir = 4 @@ -18732,19 +16636,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aPP" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/turf/open/floor/plasteel, -/area/hydroponics) "aPQ" = ( /turf/closed/wall, /area/storage/tools) @@ -18835,35 +16726,38 @@ /turf/open/floor/plating, /area/bridge) "aPY" = ( -/obj/structure/table/optable{ - name = "Robotics Operating Table" +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 }, -/obj/effect/landmark/event_spawn, -/obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 9 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aPZ" = ( -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{ - pixel_x = 32 - }, -/turf/open/floor/plasteel, -/area/janitor) +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/britcup, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aQa" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/structure/sign/poster/contraband/lusty_xenomorph{ - pixel_x = 32 - }, -/turf/open/floor/plasteel, -/area/janitor) +/obj/machinery/computer/arcade/battle, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aQb" = ( -/obj/machinery/vending/autodrobe, -/turf/open/floor/plasteel/white/side{ - dir = 4 +/obj/structure/chair/sofa/right, +/obj/structure/window{ + dir = 1 }, -/area/crew_quarters/theatre) +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_x = -32 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aQc" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -18872,15 +16766,18 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar) "aQd" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) -"aQe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/window, +/obj/structure/chair/sofa/right{ + dir = 1 }, -/turf/open/floor/plating, -/area/space/nearstation) +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aQe" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/landmark/xmastree, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aQf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/green{ @@ -19003,16 +16900,6 @@ /obj/item/bedsheet/black, /turf/open/floor/carpet, /area/library) -"aQt" = ( -/obj/structure/table, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil, -/obj/item/paper_bin/construction, -/obj/item/stack/cable_coil, -/obj/item/pen/fourcolor, -/turf/open/floor/plasteel, -/area/storage/art) "aQu" = ( /turf/open/floor/plasteel/chapel, /area/chapel/main) @@ -19154,16 +17041,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aQQ" = ( /obj/machinery/light_switch{ pixel_y = 28 }, @@ -19171,64 +17048,61 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQR" = ( -/obj/machinery/camera{ - c_tag = "Arrivals Bay 3 & 4"; - dir = 1 +/obj/machinery/vending/cola/pwr_game, +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_y = 32 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/hallway/secondary/entry) +/area/crew_quarters/locker) "aQS" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQT" = ( -/obj/item/clothing/gloves/color/rainbow, -/obj/item/clothing/head/soft/rainbow, -/obj/item/clothing/shoes/sneakers/rainbow, -/obj/item/clothing/under/color/rainbow, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"aQU" = ( -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aQV" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"aQU" = ( +/obj/machinery/vending/kink, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"aQV" = ( +/obj/machinery/vending/autodrobe/all_access, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "aQW" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQX" = ( -/obj/machinery/vending/clothing, +/obj/machinery/firealarm{ + pixel_y = 24 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/vending/games, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQY" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/table, +/obj/item/storage/toolbox/artistic{ + pixel_y = 10 + }, +/obj/item/storage/toolbox/artistic, +/obj/item/storage/toolbox/electrical{ + pixel_y = -10 }, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/storage/art) "aQZ" = ( /obj/machinery/light/small{ dir = 4 @@ -19421,30 +17295,23 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aRu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/vending/kink, /obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" + dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aRv" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aRw" = ( -/obj/structure/fans/tiny/invisible, -/turf/open/space/basic, -/area/space) +/obj/structure/window, +/obj/structure/sign/poster/official/high_class_martini{ + pixel_x = -32 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aRx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plating, -/area/space/nearstation) +/obj/machinery/computer/arcade/minesweeper, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aRy" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -19589,7 +17456,7 @@ /area/library) "aRR" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/dark, @@ -19620,7 +17487,7 @@ pixel_y = 24 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable{ @@ -19680,6 +17547,7 @@ /area/storage/tools) "aSd" = ( /obj/machinery/firealarm{ + dir = 1; pixel_y = -24 }, /turf/open/floor/plasteel, @@ -19699,39 +17567,31 @@ /turf/open/floor/plating, /area/maintenance/port) "aSh" = ( -/obj/structure/table, -/obj/item/storage/toolbox/artistic{ - pixel_y = 10 - }, -/obj/item/storage/toolbox/artistic, -/obj/item/storage/toolbox/electrical{ - pixel_y = -10 +/obj/structure/closet/wardrobe/mixed, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -27 }, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/russobluecamohat, +/obj/item/clothing/head/russobluecamohat, /turf/open/floor/plasteel, -/area/storage/art) +/area/crew_quarters/locker) "aSi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aSj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aSk" = ( -/obj/structure/table/wood, -/obj/item/camera_film, -/obj/item/camera_film, -/obj/item/taperecorder, -/obj/item/camera, -/turf/open/floor/wood, -/area/library) +/obj/structure/table, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil, +/obj/item/paper_bin/construction, +/obj/item/stack/cable_coil, +/obj/item/pen/fourcolor, +/turf/open/floor/plasteel, +/area/storage/art) "aSl" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -19746,51 +17606,15 @@ /obj/item/extinguisher, /turf/open/floor/plating, /area/storage/emergency/port) -"aSo" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aSp" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/machinery/button/door{ - id = "Bath1"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 14; - pixel_y = 38; - specialfunctions = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "aSq" = ( -/obj/machinery/door/airlock{ - name = "Recharging Station" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aSr" = ( /turf/open/floor/plasteel, /area/storage/tools) @@ -19905,21 +17729,49 @@ /mob/living/carbon/monkey/punpun, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"aSG" = ( -/obj/structure/fireplace, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 23 - }, -/turf/open/floor/plating, -/area/maintenance/port) "aSH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/light{ + dir = 1 }, -/turf/open/space, -/area/solar/starboard/aft) +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = -9 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -9; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/pack/ketchup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/food/condiment/pack/ketchup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/food/condiment/pack/ketchup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/food/condiment/pack/hotsauce{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/condiment/pack/hotsauce{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/condiment/pack/mustard{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/condiment/pack/mustard{ + pixel_x = 10 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aSI" = ( /obj/machinery/door/airlock/public/glass{ name = "Kitchen"; @@ -20000,17 +17852,13 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "aSS" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/turf/open/space, -/area/solar/starboard/aft) +/obj/machinery/seed_extractor, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aST" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/space, -/area/solar/starboard/aft) +/obj/machinery/biogenerator, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aSU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -20032,19 +17880,35 @@ /turf/open/floor/plasteel, /area/storage/tools) "aSX" = ( -/obj/machinery/vending/kink, -/obj/structure/disposalpipe/segment{ +/obj/machinery/power/apc{ + areastring = "/area/storage/art"; + dir = 1; + name = "Art Storage"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aSY" = ( -/obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "0-8" }, -/turf/open/space, -/area/solar/starboard/aft) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port) +"aSY" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/that, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aSZ" = ( /obj/effect/landmark/start/bartender, /obj/effect/turf_decal/tile/bar, @@ -20053,13 +17917,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"aTa" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/space, -/area/solar/starboard/aft) "aTb" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -20164,20 +18021,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) -"aTp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/space, -/area/solar/port/fore) -"aTq" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/space, -/area/solar/starboard/fore) "aTr" = ( /obj/machinery/door/firedoor, /obj/machinery/status_display{ @@ -20209,25 +18052,12 @@ /turf/open/floor/plating, /area/maintenance/port) "aTw" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = -27 +/obj/structure/closet/wardrobe/green, +/obj/machinery/light{ + dir = 8 }, -/obj/item/clothing/head/beret, -/obj/item/clothing/head/beret, -/obj/item/clothing/head/russobluecamohat, -/obj/item/clothing/head/russobluecamohat, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aTx" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/vending/games, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/kilt, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTy" = ( @@ -20235,19 +18065,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTz" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aTA" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aTB" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -20267,6 +18084,12 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"aTB" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "aTC" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -20284,22 +18107,20 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/window{ - dir = 1 - }, -/obj/structure/window{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/machinery/camera{ + c_tag = "Locker Room East"; dir = 8 }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table, +/obj/item/reagent_containers/rag/towel/random, +/obj/item/razor, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTE" = ( @@ -20358,15 +18179,11 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aTN" = ( -/obj/machinery/vending/dinnerware{ - contraband = list(/obj/item/reagent_containers/food/condiment/flour = 4); - desc = "This vendor is full of condiments to put on food."; - name = "\improper Condiments Vendor"; - product_ads = "Get your sauces here!;No slave labour was used to make these products!;Nanotrasen Approved?!"; - products = list(/obj/item/storage/bag/tray = 8, /obj/item/reagent_containers/food/drinks/drinkingglass = 10, /obj/item/storage/box/cups = 5, /obj/item/reagent_containers/food/condiment/pack/ketchup = 20, /obj/item/reagent_containers/food/condiment/pack/mustard = 20, /obj/item/reagent_containers/food/condiment/pack/hotsauce = 20, /obj/item/reagent_containers/food/condiment/pack/astrotame = 20, /obj/item/reagent_containers/food/condiment/saltshaker = 20, /obj/item/reagent_containers/food/condiment/peppermill = 20) - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/kitchen/rollingpin, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "aTO" = ( /obj/structure/table, /obj/item/book/manual/chef_recipes, @@ -20485,20 +18302,13 @@ }, /turf/open/floor/plasteel, /area/bridge) -"aUf" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/space, -/area/solar/port/aft) "aUg" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/turf/open/space, -/area/solar/port/aft) +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aUh" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/eastleft{ @@ -20523,28 +18333,15 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "aUj" = ( -/obj/item/soap, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/machinery/vending/hydronutrients, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aUk" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 }, -/obj/effect/turf_decal/tile/green, -/obj/machinery/camera{ - c_tag = "VR Sleepers"; - dir = 1 - }, -/obj/machinery/light/small, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/fitness) +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aUl" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -20569,23 +18366,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUp" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/camera{ - c_tag = "Locker Room East"; - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table, -/obj/item/reagent_containers/rag/towel/random, -/obj/item/razor, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aUq" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -20604,7 +18384,7 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aUr" = ( +"aUs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20620,22 +18400,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aUs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) "aUt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -20643,20 +18407,17 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUu" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/window{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, /turf/open/floor/plasteel, @@ -20709,18 +18470,6 @@ /obj/structure/bookcase/random/adult, /turf/open/floor/wood, /area/library) -"aUC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/landmark/start/mime, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) "aUD" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -20798,30 +18547,6 @@ "aUO" = ( /turf/open/floor/wood, /area/security/vacantoffice) -"aUP" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/machinery/button/door{ - id = "Bath2"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 14; - pixel_y = 38; - specialfunctions = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "aUQ" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -20845,31 +18570,16 @@ /turf/open/floor/plating, /area/maintenance/port) "aUU" = ( -/obj/structure/closet/wardrobe/green, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/clothing/under/kilt, -/obj/item/clothing/under/kilt, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aUV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/door/window/westright{ - name = "Red Corner" - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/closet/wardrobe/grey, +/obj/machinery/requests_console{ + department = "Locker Room"; + pixel_x = -32 }, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/color/grey, +/obj/item/clothing/under/color/grey, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUW" = ( @@ -20900,13 +18610,9 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUZ" = ( -/obj/structure/table, -/obj/item/clothing/gloves/boxing/yellow, -/obj/item/clothing/gloves/boxing/green, -/obj/item/clothing/gloves/boxing/blue, -/obj/item/clothing/gloves/boxing/blue, -/obj/item/clothing/gloves/boxing, -/obj/item/clothing/gloves/boxing, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aVa" = ( @@ -21161,43 +18867,31 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aVw" = ( -/obj/effect/landmark/carpspawn, -/turf/open/space/basic, -/area/space) -"aVx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "holoprivacy"; - name = "Holodeck Shutters" - }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) "aVy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_y = 5 +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/bar) "aVz" = ( /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aVA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/food/snacks/pie/cream, +/obj/structure/noticeboard{ + desc = "Tickets for food orders will be placed here. The Chef should make the order and hand it to a waiter, waitress or just let the barkeep serve it."; + name = "Food Orders"; + pixel_y = 26 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "aVB" = ( /obj/structure/table, /obj/item/reagent_containers/food/condiment/enzyme{ @@ -21217,18 +18911,27 @@ /turf/open/floor/plating, /area/maintenance/port) "aVD" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Theatre Maintenance"; - req_access_txt = "46" +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -9; + pixel_y = 9 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = -3 }, -/turf/open/floor/plating, -/area/crew_quarters/theatre) +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = -9 + }, +/obj/item/sharpener{ + pixel_x = 10 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "aVE" = ( /obj/structure/table, /obj/item/storage/box/donkpockets{ @@ -21244,18 +18947,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) -"aVG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/table, -/obj/item/coin/gold, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "aVH" = ( /obj/machinery/processor, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/cafeteria, @@ -21277,14 +18972,12 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "aVK" = ( -/obj/machinery/shower{ - dir = 4 +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel, +/area/hydroponics) "aVL" = ( /obj/structure/cable{ icon_state = "1-2" @@ -21326,17 +19019,21 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"aVP" = ( -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "aVQ" = ( /obj/structure/chair/comfy/black{ dir = 8 }, /turf/open/floor/wood, /area/library) -"aVR" = ( +"aVS" = ( +/obj/structure/table/wood, +/obj/item/camera_film, +/obj/item/camera_film, +/obj/item/taperecorder, +/obj/item/camera, +/turf/open/floor/wood, +/area/library) +"aVT" = ( /obj/structure/table/wood, /obj/item/paper_bin/bundlenatural{ pixel_x = 6; @@ -21350,20 +19047,6 @@ /obj/item/pen/fourcolor, /turf/open/floor/wood, /area/library) -"aVS" = ( -/obj/structure/table/wood, -/obj/item/pen/red, -/turf/open/floor/wood, -/area/library) -"aVT" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ - pixel_x = 3 - }, -/obj/item/lighter, -/obj/item/restraints/handcuffs, -/turf/open/floor/carpet, -/area/security/detectives_office) "aVU" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -21573,24 +19256,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"aWw" = ( -/obj/machinery/power/apc{ - areastring = "/area/storage/art"; - dir = 1; - name = "Art Storage"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/port) "aWx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ @@ -21627,21 +19292,15 @@ /turf/open/floor/plating, /area/maintenance/port) "aWB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + name = "Detective Maintenance"; + req_access_txt = "4" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/turf/open/floor/plating, +/area/maintenance/port) "aWC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22021,51 +19680,57 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aXi" = ( -/obj/machinery/vending/clothing, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"aXj" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aXk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/door/window/eastleft{ - name = "Blue Corner" - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/chair/sofa/right, +/obj/structure/window{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aXj" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/pen/fountain{ + pixel_x = 6 + }, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/item/pen/fourcolor, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/crew_quarters/bar) +"aXk" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 32 + }, +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/rag, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aXl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/door/window/southright{ + name = "Bar Door"; + req_one_access_txt = "25;28" }, -/obj/structure/disposalpipe/junction, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/bar) "aXm" = ( /obj/effect/landmark/start/cook, /turf/open/floor/plasteel/cafeteria, @@ -22101,40 +19766,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "aXr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aXs" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Detective Maintenance"; - req_access_txt = "4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/port) -"aXt" = ( -/obj/machinery/power/apc{ - areastring = "/area/security/detectives_office"; - dir = 4; - name = "Detective's Office APC"; - pixel_x = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) -"aXu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/library) -"aXv" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -22150,7 +19781,26 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aXw" = ( +"aXt" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"aXu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/library) +"aXv" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -22163,14 +19813,17 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aXx" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, +"aXw" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, @@ -22193,22 +19846,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet, /area/chapel/main) -"aXA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/window{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) "aXB" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -22240,24 +19877,25 @@ /turf/closed/wall, /area/quartermaster/warehouse) "aXF" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 10; + icon_state = "roomnum"; + name = "Room Number 6"; + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/paper_bin/bundlenatural{ - pixel_x = 6; - pixel_y = 4 +/obj/machinery/washing_machine{ + pixel_x = 7; + pixel_y = 7 }, -/obj/item/pen/fountain{ - pixel_x = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/pen/fourcolor, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aXG" = ( /obj/machinery/light{ dir = 4 @@ -22270,10 +19908,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"aXH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aXI" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -22322,17 +19956,6 @@ /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/wood, /area/security/vacantoffice) -"aXO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aXP" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -22410,7 +20033,19 @@ }, /turf/open/floor/carpet, /area/security/vacantoffice) -"aYa" = ( +"aYb" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port) +"aYc" = ( /obj/machinery/power/apc{ areastring = "/area/maintenance/port"; dir = 8; @@ -22430,27 +20065,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"aYb" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/port) -"aYc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/closed/wall, -/area/quartermaster/warehouse) "aYd" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -22478,19 +20092,6 @@ }, /turf/open/floor/plating, /area/construction) -"aYh" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/button/door{ - id = "kanyewest"; - name = "Privacy Shutters"; - pixel_y = 24 - }, -/obj/structure/rack, -/obj/item/storage/briefcase, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) "aYi" = ( /obj/structure/closet/secure_closet/detective, /obj/structure/disposalpipe/segment{ @@ -22502,9 +20103,16 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aYj" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 10 }, +/obj/machinery/button/door{ + id = "kanyewest"; + name = "Privacy Shutters"; + pixel_y = 24 + }, +/obj/structure/rack, +/obj/item/storage/briefcase, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aYk" = ( @@ -22718,25 +20326,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aYH" = ( -/obj/structure/table/wood, -/obj/item/paper/fluff{ - info = "Renovation Notice

    The bar layout for the station is very old. We've decided to give it a facelift after our partnership with IKEA Intergalactic?.
  • We added some sweet retro arcade machines and much more seating area. We removed the stage since it hasn't ever been used.
  • You can run this place like a restaurant now that you have tables. Go whip up a menu with the Chef. You have a condiments table and your Requests Console has been moved so a noticeboard can be placed there. Take tickets from customers and pin them on the noticeboard for the Chef.
  • We hope you like the new bar!"; - name = "Renovation Notice - Bar"; - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/stack/spacecash/c100, -/obj/item/stack/spacecash/c100, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"aYI" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "aYJ" = ( /obj/machinery/light_switch{ pixel_y = -25 @@ -22784,9 +20373,18 @@ /turf/open/floor/plasteel, /area/hydroponics) "aYP" = ( -/obj/structure/table/wood/poker, +/obj/structure/reagent_dispensers/watertank/high, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/hydroponics) "aYQ" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/tile/green{ @@ -22803,24 +20401,19 @@ /turf/open/floor/plasteel, /area/hydroponics) "aYS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1; - pixel_x = 5 +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/light/small{ +/obj/effect/turf_decal/tile/blue, +/obj/structure/window, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/structure/table/glass, -/obj/item/razor{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/reagent_containers/rag/towel/random, -/obj/item/reagent_containers/rag/towel/random, -/obj/item/reagent_containers/rag/towel/random, -/obj/item/reagent_containers/rag/towel/random, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "aYT" = ( /obj/machinery/camera{ c_tag = "Hydroponics South"; @@ -22839,22 +20432,6 @@ "aYW" = ( /turf/open/floor/carpet, /area/library) -"aYX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) "aYY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -22862,15 +20439,17 @@ /turf/open/floor/carpet, /area/library) "aYZ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/structure/table/wood, +/obj/item/storage/box/evidence, +/obj/item/hand_labeler{ + pixel_x = 5 }, -/obj/structure/closet/crate/freezer, -/obj/machinery/light/small{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/item/taperecorder, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aZa" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -22878,10 +20457,12 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aZb" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/machinery/camera{ + c_tag = "Bar South"; + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aZc" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -22972,14 +20553,18 @@ /turf/open/floor/wood, /area/security/vacantoffice) "aZo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/sink{ + dir = 4; + pixel_x = 11 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/locker) "aZp" = ( /obj/structure/rack, /obj/item/electronics/apc, @@ -23014,73 +20599,60 @@ /turf/open/floor/plating, /area/maintenance/port) "aZt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1; - pixel_x = 5 +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "LockerShitter1"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 }, -/obj/machinery/light/small, /turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) +/area/crew_quarters/toilet/locker) "aZu" = ( /obj/machinery/photocopier, /turf/open/floor/wood, /area/bridge/meeting_room) "aZv" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/machinery/door/airlock{ + id_tag = "LockerShitter1"; + name = "Unit 1" }, -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer{ +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet/locker) +"aZw" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/locker) +"aZx" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/item/radio/intercom{ - pixel_y = 25 +/obj/structure/window, +/obj/structure/window{ + dir = 8 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aZw" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/machinery/requests_console{ - department = "Bar"; - departmentType = 2; - pixel_x = -30; - pixel_y = 45; - receive_ore_updates = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aZx" = ( -/obj/structure/closet{ - name = "Suit Closet" - }, -/obj/item/clothing/under/suit_jacket/white, -/obj/item/clothing/under/suit_jacket/tan, -/obj/item/clothing/under/suit_jacket/red, -/obj/item/clothing/under/suit_jacket/really_black, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/under/suit_jacket/green, -/obj/item/clothing/under/suit_jacket/female, -/obj/item/clothing/under/suit_jacket/checkered, -/obj/item/clothing/under/suit_jacket/charcoal, -/obj/item/clothing/under/suit_jacket/burgundy, -/obj/item/clothing/under/suit_jacket, -/obj/item/clothing/under/lawyer/black, -/obj/item/clothing/under/lawyer/blacksuit, -/obj/item/clothing/under/lawyer/blue, -/obj/item/clothing/under/lawyer/bluesuit, -/obj/item/clothing/under/lawyer/female, -/obj/item/clothing/under/lawyer/purpsuit, -/obj/item/clothing/under/lawyer/really_black, -/obj/item/clothing/under/lawyer/red, -/turf/open/floor/plasteel, /area/crew_quarters/locker) "aZy" = ( /obj/machinery/camera{ @@ -23245,50 +20817,39 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aZZ" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 +/obj/structure/chair/sofa{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/bar) "baa" = ( -/obj/structure/chair/comfy/brown{ +/obj/structure/chair/sofa/left{ dir = 1 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bab" = ( -/obj/structure/chair/comfy/black{ +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"bac" = ( +/obj/structure/noticeboard{ + pixel_y = -27 + }, +/obj/structure/chair/sofa/right{ dir = 1 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"bac" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/bar) "bad" = ( -/obj/structure/rack, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/effect/decal/cleanable/cobweb, -/obj/item/clothing/under/color/grey, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"bae" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/machinery/light, +/turf/open/floor/wood, +/area/crew_quarters/bar) "baf" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -23302,34 +20863,21 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bag" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/turf/open/floor/wood, +/area/crew_quarters/bar) "bah" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/turf/open/floor/wood, +/area/crew_quarters/bar) "bai" = ( -/obj/machinery/camera{ - c_tag = "Bar"; - dir = 8 - }, -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks{ - dir = 8 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, +/obj/machinery/light/small, +/turf/open/floor/wood, /area/crew_quarters/bar) "baj" = ( /obj/structure/table/reinforced, @@ -23357,7 +20905,7 @@ pixel_y = 2 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -23420,9 +20968,10 @@ /turf/open/floor/wood, /area/library) "bat" = ( -/obj/structure/reagent_dispensers/keg/semen, -/turf/open/floor/plating, -/area/maintenance/bar) +/obj/structure/table/wood, +/obj/item/pen/red, +/turf/open/floor/wood, +/area/library) "bau" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -23440,16 +20989,12 @@ /turf/open/floor/wood, /area/library) "baw" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/snacks/pie/cream, -/obj/structure/noticeboard{ - desc = "Tickets for food orders will be placed here. The Chef should make the order and hand it to a waiter, waitress or just let the barkeep serve it."; - name = "Food Orders"; - pixel_y = 26 +/obj/machinery/camera{ + c_tag = "Locker Room Toilets"; + dir = 8 }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/locker) "bax" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -23581,28 +21126,15 @@ /turf/open/floor/plating, /area/maintenance/port) "baO" = ( -/obj/structure/toilet{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 }, /obj/structure/mirror{ - pixel_y = 32 + pixel_x = 28 }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/machinery/button/door{ - id = "LockerShitter1"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 14; - pixel_y = 38; - specialfunctions = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "baP" = ( /obj/structure/table/wood, @@ -23792,29 +21324,17 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) -"bbr" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ +"bbs" = ( +/obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/window, -/obj/structure/window{ +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"bbs" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/landmark/xmastree, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, -/area/crew_quarters/bar) "bbt" = ( /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -23864,14 +21384,17 @@ }, /area/hallway/primary/starboard) "bbA" = ( -/obj/machinery/vending/assist, -/obj/structure/sign/poster/contraband/grey_tide{ - desc = "A poster promoting a regression to ape-like intelligence for Assistants, suggesting they break, loot and murder enough to make even a caveman blush."; - pixel_x = -32; - poster_item_desc = "Nanotrasen does not condone such messages. Please don't regress to ape-level intelligence as this poster suggests." +/obj/machinery/camera{ + c_tag = "Starboard Primary Hallway 2" }, -/turf/open/floor/plasteel, -/area/storage/primary) +/obj/structure/sign/poster/contraband/eat{ + pixel_y = 32; + poster_item_desc = "This poster promotes obesity, it also promotes giving the Chef a reason to keep their job." + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/primary/starboard) "bbB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -23901,7 +21424,7 @@ /area/chapel/main) "bbG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/red{ @@ -23949,8 +21472,8 @@ /area/maintenance/port) "bbL" = ( /obj/machinery/door/airlock{ - id_tag = "LockerShitter1"; - name = "Unit 1" + id_tag = "LockerShitter2"; + name = "Unit 2" }, /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet/locker) @@ -23959,21 +21482,6 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/bridge/meeting_room) -"bbN" = ( -/obj/machinery/button/door{ - id = "Bath3"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 14; - pixel_y = 38; - specialfunctions = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/recharge_station, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) "bbO" = ( /obj/machinery/washing_machine, /obj/effect/turf_decal/tile/blue{ @@ -23991,20 +21499,14 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bbQ" = ( -/obj/item/paper_bin/bundlenatural{ - pixel_x = 6; - pixel_y = 4 +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 3 }, -/obj/item/paper_bin{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/pen/fountain, -/obj/structure/table, -/obj/item/pen/fourcolor, -/obj/item/stamp/hop, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/hop) +/obj/item/lighter, +/obj/item/restraints/handcuffs, +/turf/open/floor/carpet, +/area/security/detectives_office) "bbR" = ( /turf/open/floor/plasteel, /area/quartermaster/office) @@ -24020,23 +21522,9 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/carpet, /area/security/detectives_office) -"bbU" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/window, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) "bbV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -24189,15 +21677,14 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcr" = ( -/obj/machinery/smartfridge/disks{ - pixel_y = 2 +/obj/machinery/camera{ + c_tag = "Starboard Primary Hallway" }, -/obj/structure/table, /obj/item/radio/intercom{ pixel_y = 25 }, /turf/open/floor/plasteel, -/area/hydroponics) +/area/hallway/primary/starboard) "bcs" = ( /obj/machinery/firealarm{ pixel_y = 24 @@ -24205,30 +21692,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bct" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/obj/structure/chair/wood/wings, +/turf/open/floor/plating, +/area/maintenance/port) "bcu" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/maintenance{ + name = "Locker Room Maintenance"; + req_access_txt = "12" }, -/obj/structure/window, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/turf/open/floor/plating, +/area/maintenance/port) "bcv" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -24237,22 +21711,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcw" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/window, -/obj/structure/window{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, /area/crew_quarters/locker) "bcx" = ( /obj/machinery/camera{ @@ -24329,13 +21789,15 @@ /turf/open/floor/plating, /area/maintenance/port) "bcJ" = ( -/obj/machinery/door/airlock{ - desc = "To keep the station within regulations, space IKEA requires one storage cupboard for their Nanotrasen partnership to continue."; - id_tag = "MaintDorm1"; - name = "Furniture Storage" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/maintenance/port) +/obj/structure/closet/crate/freezer, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "bcK" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -24362,22 +21824,6 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/bridge/meeting_room) -"bcO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/theatre) "bcP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -24385,8 +21831,10 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "bcQ" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 + dir = 5 }, /turf/open/floor/carpet, /area/crew_quarters/heads/captain) @@ -24397,20 +21845,12 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bcS" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) -"bcT" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/quartermaster/warehouse) "bcU" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -24424,14 +21864,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) -"bcW" = ( -/obj/structure/table/wood, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/wood, -/area/security/vacantoffice) "bcX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -24517,7 +21949,13 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "bdi" = ( -/obj/machinery/computer/arcade, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Captain's Desk"; + departmentType = 5; + name = "Captain RC"; + pixel_x = -30 + }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bdj" = ( @@ -24704,32 +22142,14 @@ /turf/open/floor/plating, /area/maintenance/port) "bdE" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/closet/crate/wooden/toy, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/structure/sign/poster/contraband/clown{ +/obj/structure/sign/poster/contraband/have_a_puff{ pixel_y = -32 }, -/obj/structure/sign/poster/contraband/clown{ - pixel_y = -32 - }, -/obj/structure/sign/poster/contraband/clown{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "bdF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -24753,18 +22173,13 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bdJ" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/turf/open/floor/plating, +/area/maintenance/port) "bdK" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -24773,20 +22188,16 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bdL" = ( -/obj/machinery/camera{ - c_tag = "Locker Room South"; - dir = 8 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"bdM" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/light, +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/locker) "bdN" = ( /obj/machinery/door/airlock/medical{ name = "Morgue"; @@ -24851,39 +22262,6 @@ /obj/structure/closet/crate/medical, /turf/open/floor/plasteel, /area/quartermaster/warehouse) -"bdV" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/machinery/button/door{ - id = "LockerShitter2"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 14; - pixel_y = 38; - specialfunctions = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet/locker) -"bdW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) "bdX" = ( /obj/item/storage/fancy/donut_box, /obj/structure/table, @@ -24999,12 +22377,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) -"bei" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/heads/captain) "bej" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -25096,12 +22468,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bev" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/machinery/light, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/sign/directions/evac{ + dir = 4; + pixel_y = -25 + }, +/obj/structure/sign/directions/science{ + dir = 4; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bew" = ( /obj/structure/cable{ icon_state = "2-4" @@ -25327,7 +22707,7 @@ layer = 2.9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/table/reinforced, @@ -25366,12 +22746,12 @@ /turf/closed/wall, /area/maintenance/disposal) "bfa" = ( -/obj/structure/chair/sofa/left{ - dir = 1 +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/wood/fifty{ + amount = 20 }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/maintenance/port) "bfb" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -25405,17 +22785,10 @@ /turf/open/floor/plating, /area/maintenance/port) "bfe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/window{ - dir = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/locker) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/port) "bff" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -25449,27 +22822,6 @@ }, /turf/open/floor/plating, /area/quartermaster/sorting) -"bfk" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/storage"; - name = "Cargo Bay APC"; - pixel_x = 1; - pixel_y = -24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/port) "bfl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -25575,11 +22927,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"bfC" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/floor/wood, -/area/crew_quarters/heads/captain) "bfD" = ( /obj/structure/cable{ icon_state = "1-2" @@ -25793,17 +23140,14 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bgi" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/space_up{ - pixel_y = -32 +/obj/machinery/camera{ + c_tag = "Arrivals Bay 3 & 4"; + dir = 1 }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/hallway/secondary/entry) "bgj" = ( /obj/machinery/conveyor{ dir = 8; @@ -25818,13 +23162,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) -"bgl" = ( -/obj/machinery/door/airlock{ - id_tag = "LockerShitter2"; - name = "Unit 2" - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet/locker) "bgm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -25875,14 +23212,12 @@ /turf/open/floor/plating, /area/maintenance/port) "bgr" = ( -/obj/machinery/camera{ - c_tag = "Locker Room Toilets"; - dir = 8 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plating, +/area/maintenance/port) "bgs" = ( -/obj/item/chair/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/table/wood/fancy/purple, /turf/open/floor/plating, /area/maintenance/port) "bgt" = ( @@ -25914,11 +23249,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port) -"bgx" = ( -/obj/structure/closet/wardrobe/cargotech, -/obj/item/radio/headset/headset_cargo, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "bgy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -26024,10 +23354,12 @@ /turf/open/floor/wood, /area/bridge/meeting_room) "bgM" = ( -/obj/machinery/vending/coffee, /obj/machinery/light{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/wood, /area/bridge/meeting_room) "bgN" = ( @@ -26053,12 +23385,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bgR" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) "bgS" = ( /obj/machinery/requests_console{ announcementConsole = 1; @@ -26096,6 +23422,9 @@ icon_state = "1-2" }, /obj/machinery/holopad, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bgX" = ( @@ -26112,7 +23441,7 @@ /area/crew_quarters/heads/captain) "bgY" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -26478,11 +23807,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) -"bhK" = ( -/obj/structure/table/wood/fancy/royalblue, -/obj/item/crowbar/red, -/turf/open/floor/plating, -/area/maintenance/port) "bhL" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 1; @@ -26512,31 +23836,11 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"bhP" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/wood/fifty{ - amount = 20 - }, -/turf/open/floor/plating, -/area/maintenance/port) "bhQ" = ( -/obj/structure/closet, -/obj/item/stack/tile/carpet/royalblue{ - amount = 24 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/item/stack/tile/carpet/green{ - amount = 24 - }, -/obj/item/stack/tile/carpet/purple{ - amount = 24 - }, -/obj/item/stack/tile/carpet/orange{ - amount = 24 - }, -/obj/item/stack/tile/wood{ - amount = 24 - }, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port) "bhR" = ( /obj/structure/grille, @@ -26709,17 +24013,9 @@ /obj/machinery/suit_storage_unit/captain, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"bil" = ( -/obj/machinery/computer/card{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, -/area/crew_quarters/heads/captain) "bim" = ( /obj/structure/table/wood, /obj/machinery/recharger, -/obj/item/melee/chainofcommand, /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bin" = ( @@ -26772,16 +24068,16 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "bit" = ( -/obj/machinery/light, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/structure/bedsheetbin/color, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/locker) +/obj/effect/turf_decal/tile/blue{ + alpha = 255; + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "biu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -26919,19 +24215,6 @@ "biL" = ( /turf/open/floor/plasteel/white, /area/science/robotics/lab) -"biM" = ( -/obj/machinery/button/door{ - desc = "Alright, GAMER! Want to take your PWRGAME addiction to the MAX? Just smash this button with your chubby chetto encrusted hands an- oh, you broke the switch. Good job, idiot."; - id = "RIPFUN"; - name = "Powerful Gamer Toggle"; - normaldoorcontrol = 1; - pixel_x = -24; - pixel_y = 7; - specialfunctions = 4 - }, -/obj/structure/table_frame/wood, -/turf/open/floor/plating, -/area/maintenance/port) "biN" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -27062,10 +24345,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard) -"biZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plating, -/area/maintenance/port) "bja" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -27274,15 +24553,26 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bjy" = ( -/obj/machinery/camera{ - c_tag = "Gravity Generator Room"; +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, /turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) +/area/ai_monitored/nuke_storage) "bjz" = ( /turf/closed/wall/r_wall, /area/maintenance/central) @@ -27297,10 +24587,6 @@ /obj/structure/closet/wardrobe/black, /turf/open/floor/plating, /area/maintenance/central) -"bjD" = ( -/obj/structure/bed, -/turf/open/floor/plating, -/area/maintenance/port) "bjE" = ( /obj/machinery/airalarm{ dir = 4; @@ -27449,11 +24735,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bjW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/structure/table/wood/fancy/purple, -/turf/open/floor/plating, -/area/maintenance/port) "bjX" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -27515,23 +24796,10 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/storage/emergency/starboard) -"bke" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/junction/flip, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "bkf" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/storage/emergency/starboard) -"bkg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/maintenance/port) "bkh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit, @@ -27571,22 +24839,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/robotics/lab) -"bkl" = ( -/obj/effect/turf_decal/tile/blue{ - alpha = 255 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - alpha = 255; - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "bkm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -27764,12 +25016,6 @@ }, /turf/open/floor/plating, /area/quartermaster/sorting) -"bkI" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "bkJ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -28144,9 +25390,15 @@ /turf/open/floor/plasteel, /area/science/robotics/mechbay) "blt" = ( -/obj/structure/sign/poster/contraband/tools, -/turf/closed/wall, -/area/storage/primary) +/obj/machinery/recharge_station, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/state_laws{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/science/robotics/mechbay) "blu" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 4 @@ -28304,17 +25556,6 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel, /area/science/robotics/lab) -"blN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - alpha = 255; - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "blO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -28412,7 +25653,7 @@ }, /obj/item/stack/cable_coil, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white, @@ -28507,16 +25748,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) -"bml" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/port) "bmm" = ( /obj/structure/cable{ icon_state = "1-2" @@ -28577,24 +25808,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"bmu" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) -"bmv" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) -"bmw" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "bmx" = ( /turf/closed/wall, /area/crew_quarters/heads/captain) @@ -28706,7 +25919,7 @@ }, /obj/machinery/light, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/white, @@ -28857,38 +26070,6 @@ }, /turf/closed/wall/r_wall, /area/science/robotics/mechbay) -"bnd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - alpha = 255; - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) -"bne" = ( -/obj/machinery/button/door{ - desc = "A remote control switch for the genetics doors."; - id = "GeneticsDoor"; - name = "Genetics Exit Button"; - normaldoorcontrol = 1; - pixel_x = 8; - pixel_y = 24 - }, -/obj/structure/table, -/obj/item/book/manual/wiki/medical_cloning{ - pixel_y = 6 - }, -/obj/item/storage/box/rxglasses{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/bodybags, -/obj/item/pen, -/turf/open/floor/plasteel/white, -/area/medical/genetics) "bnf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -28945,7 +26126,7 @@ /obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -29025,12 +26206,11 @@ /turf/closed/wall, /area/maintenance/starboard) "bnt" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, /turf/open/floor/plating, /area/maintenance/starboard/aft) @@ -29276,16 +26456,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/gravity_generator) -"bnU" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Gravity Generator"; - req_access_txt = "11" - }, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "bnV" = ( /obj/structure/cable{ icon_state = "0-8" @@ -29324,15 +26494,11 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "bnZ" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=HOP"; - location = "CHE" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/item/pen/fountain/captain, +/turf/open/floor/carpet, +/area/crew_quarters/heads/captain) "boa" = ( /obj/structure/toilet{ dir = 4 @@ -29473,12 +26639,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bop" = ( -/obj/structure/closet/wardrobe/white, -/obj/item/clothing/under/kilt, -/obj/item/clothing/under/janimaid, -/turf/open/floor/plasteel/white, -/area/medical/genetics) "boq" = ( /obj/structure/bed/roller, /obj/effect/turf_decal/tile/blue, @@ -29506,16 +26666,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/robotics/lab) -"bot" = ( -/obj/structure/closet/wardrobe/grey, -/obj/item/clothing/head/beret/black, -/obj/item/clothing/head/beret/black, -/obj/item/clothing/head/beret, -/obj/item/clothing/head/beret, -/obj/item/clothing/under/assistantformal, -/obj/item/clothing/under/skirt/black, -/turf/open/floor/plasteel/white, -/area/medical/genetics) "bou" = ( /turf/open/floor/plasteel, /area/science/robotics/lab) @@ -29756,12 +26906,19 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "boY" = ( -/obj/machinery/vending/cola/black, -/obj/structure/sign/poster/contraband/sun_kist{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/sign/poster/official/ian{ + pixel_x = 32; pixel_y = 32 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plasteel, +/area/hallway/primary/central) "boZ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northleft{ @@ -29834,36 +26991,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"bpg" = ( -/obj/structure/chair/office/light, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) "bph" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"bpi" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) "bpj" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -29878,18 +27011,14 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "bpk" = ( -/obj/machinery/camera{ - c_tag = "Genetics Cloning"; - dir = 4; - network = list("ss13","medbay") +/obj/structure/closet/secure_closet/captains, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/closet/secure_closet/personal/patient, -/turf/open/floor/plasteel/white, -/area/medical/genetics) +/obj/item/clothing/under/captainparade, +/turf/open/floor/carpet, +/area/crew_quarters/heads/captain) "bpl" = ( /obj/structure/table/wood, /obj/item/storage/box/matches, @@ -30212,7 +27341,7 @@ /area/science/robotics/lab) "bpX" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -30245,12 +27374,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) -"bqb" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/open/space/basic, -/area/space/nearstation) "bqc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white, @@ -30448,48 +27571,31 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "bqD" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - areastring = "/area/engine/gravity_generator"; +/obj/machinery/vending/coffee, +/obj/machinery/light{ dir = 8; - name = "Gravity Generator APC"; - pixel_x = -25; - pixel_y = 1 + light_color = "#e8eaff" }, -/obj/structure/table, -/obj/item/paper/guides/jobs/engi/gravity_gen, -/obj/item/pen/blue, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -35 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bqE" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/holopad, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bqF" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) +/obj/machinery/vending/cigarette/beach, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bqG" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" }, -/obj/structure/cable, -/obj/machinery/power/smes{ - charge = 5e+006 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bqH" = ( /turf/closed/wall/r_wall, /area/teleporter) @@ -30751,12 +27857,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/medical/genetics) -"brl" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium, -/area/space/nearstation) "brm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -31074,9 +28174,6 @@ "brS" = ( /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"brT" = ( -/turf/open/floor/plating, -/area/space/nearstation) "brU" = ( /obj/structure/sign/warning/electricshock{ pixel_y = -32 @@ -31139,11 +28236,8 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "bsa" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bsb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -31153,33 +28247,10 @@ "bsc" = ( /turf/open/floor/plasteel, /area/engine/gravity_generator) -"bsd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bse" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) "bsf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bsg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bsh" = ( /turf/closed/wall, /area/teleporter) @@ -31363,9 +28434,6 @@ dir = 9 }, /area/science/research) -"bsB" = ( -/turf/closed/wall/mineral/titanium, -/area/space/nearstation) "bsC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -31469,8 +28537,14 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bsP" = ( -/turf/open/floor/plating/foam, -/area/space/nearstation) +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/obj/effect/landmark/event_spawn, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bsQ" = ( /turf/open/floor/plasteel/dark, /area/science/robotics/lab) @@ -31605,9 +28679,15 @@ /turf/open/floor/plasteel/white, /area/science/research) "bti" = ( -/obj/effect/spawner/structure/window/shuttle, -/turf/open/floor/plating, -/area/space/nearstation) +/obj/structure/closet/wardrobe/grey, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/skirt/black, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "btj" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -31618,9 +28698,11 @@ /turf/open/floor/plasteel/white, /area/science/explab) "btk" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/space/nearstation) +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/janimaid, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "btl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/white, @@ -31709,7 +28791,7 @@ "btt" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/folder/yellow, @@ -31753,16 +28835,12 @@ /turf/open/floor/plasteel, /area/science/research) "bty" = ( -/obj/structure/chair/sofa/right, -/obj/structure/window{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/pwr_game{ - pixel_x = -32 +/obj/structure/chair{ + dir = 8 }, /obj/effect/landmark/start/assistant, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plasteel, +/area/quartermaster/office) "btz" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/brown{ @@ -31801,23 +28879,20 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "btD" = ( -/obj/structure/table, +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 + }, /obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 + pixel_x = -6; + pixel_y = 4 }, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/item/folder/white, /obj/item/pen/fountain, -/obj/item/stamp/rd{ - pixel_x = 3; - pixel_y = -2 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/heads/hor) +/obj/structure/table, +/obj/item/pen/fourcolor, +/obj/item/stamp/hop, +/turf/open/floor/plasteel, +/area/crew_quarters/heads/hop) "btE" = ( /obj/structure/cable{ icon_state = "1-2" @@ -31829,16 +28904,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"btF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Gravity Generator"; - req_access_txt = "11" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) "btG" = ( /turf/closed/wall/r_wall, /area/engine/gravity_generator) @@ -32077,10 +29142,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics) -"buh" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/space/nearstation) "bui" = ( /obj/machinery/airalarm{ dir = 1; @@ -32247,12 +29308,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard) -"buA" = ( -/obj/structure/frame/computer{ - dir = 1 - }, -/turf/open/floor/plating, -/area/space/nearstation) "buB" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -32335,12 +29390,13 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "buJ" = ( -/obj/structure/chair/sofa, -/obj/structure/window{ - dir = 1 +/obj/structure/chair{ + dir = 8 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/light, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/quartermaster/office) "buK" = ( /obj/machinery/light{ dir = 4 @@ -32392,46 +29448,10 @@ /obj/item/hand_labeler, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"buP" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/closed/wall, -/area/engine/gravity_generator) "buQ" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"buR" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/engine/gravity_generator) -"buS" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Gravity Generator Foyer" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "buT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32608,12 +29628,26 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bvn" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/button/door{ + desc = "A remote control switch for the genetics doors."; + id = "GeneticsDoor"; + name = "Genetics Exit Button"; + normaldoorcontrol = 1; + pixel_x = 8; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/maintenance/port) +/obj/structure/table, +/obj/item/book/manual/wiki/medical_cloning{ + pixel_y = 6 + }, +/obj/item/storage/box/rxglasses{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/bodybags, +/obj/item/pen, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "bvo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -32773,20 +29807,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/qm) -"bvG" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/light/small, -/obj/structure/extinguisher_cabinet{ - pixel_x = 5; - pixel_y = -32 - }, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/fitness) "bvH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -32906,6 +29926,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bvX" = ( @@ -33008,10 +30031,21 @@ /area/hallway/primary/central) "bwi" = ( /obj/item/radio/intercom{ - pixel_x = -25 + dir = 8; + name = "Station Intercom (General)"; + pixel_x = -28 }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/toilet) +/obj/structure/closet/secure_closet/hop, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/clothing/suit/ianshirt, +/turf/open/floor/plasteel, +/area/crew_quarters/heads/hop) "bwj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -33033,34 +30067,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"bwm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/engine/gravity_generator) -"bwn" = ( -/obj/structure/closet/radiation, -/obj/structure/sign/warning/radiation/rad_area{ - pixel_x = -32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bwo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/engine/gravity_generator) -"bwp" = ( -/obj/structure/closet/radiation, -/obj/structure/sign/warning/radiation/rad_area{ - pixel_x = 32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) "bwq" = ( /obj/machinery/teleport/station, /turf/open/floor/plating, @@ -33204,17 +30210,18 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bwL" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/camera{ + c_tag = "Genetics Cloning"; + dir = 4; + network = list("ss13","medbay") }, -/obj/structure/closet/wardrobe/miner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 }, -/obj/item/radio/headset/headset_cargo/mining, -/turf/open/floor/plasteel, -/area/quartermaster/miningdock) +/obj/structure/closet/secure_closet/personal/patient, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "bwM" = ( /obj/structure/cable{ icon_state = "1-2" @@ -33261,10 +30268,6 @@ dir = 9 }, /area/science/research) -"bwP" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/closed/wall, -/area/maintenance/port) "bwQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -33447,14 +30450,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) -"bxh" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "bxi" = ( /obj/machinery/computer/aifixer{ dir = 8 @@ -33680,31 +30675,36 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"bxH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/closed/wall, -/area/engine/gravity_generator) "bxI" = ( -/obj/machinery/status_display/ai, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/closed/wall, -/area/engine/gravity_generator) -"bxJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/closed/wall, -/area/engine/gravity_generator) +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "bridge blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/hallway/primary/central) "bxK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/closed/wall, -/area/engine/gravity_generator) +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "bridge blast door" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/hallway/primary/central) "bxL" = ( /obj/machinery/camera{ c_tag = "Central Hallway South-East"; @@ -34279,16 +31279,9 @@ /area/security/checkpoint/supply) "byU" = ( /obj/machinery/light, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"byV" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 5; - pixel_y = -32 - }, /turf/open/floor/plasteel, /area/hallway/primary/central) "byW" = ( @@ -34596,7 +31589,7 @@ /area/science/research) "bzF" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -34796,6 +31789,9 @@ /area/hallway/primary/central) "bAf" = ( /obj/machinery/holopad, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bAg" = ( @@ -34820,11 +31816,14 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bAj" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=HOP"; + location = "CHE" }, -/obj/machinery/disposal/bin, -/turf/open/floor/plasteel/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/hallway/primary/central) "bAk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -34892,7 +31891,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/white, @@ -35274,6 +32273,9 @@ name = "Station Intercom (General)"; pixel_y = -29 }, +/obj/machinery/light{ + light_color = "#cee5d2" + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBh" = ( @@ -35317,6 +32319,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBm" = ( @@ -35353,6 +32358,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBq" = ( @@ -35377,6 +32385,9 @@ pixel_x = -32; pixel_y = -32 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBr" = ( @@ -35443,8 +32454,16 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bBz" = ( -/obj/machinery/vending/cola/space_up, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/space_up{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, /area/hallway/primary/central) "bBA" = ( /obj/structure/cable{ @@ -35456,20 +32475,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bBB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 9 }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/hallway/primary/central) "bBC" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -35517,12 +32531,17 @@ /turf/closed/wall, /area/quartermaster/miningdock) "bBI" = ( -/obj/structure/table, -/obj/item/stack/packageWrap, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/closet/wardrobe/miner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/radio/headset/headset_cargo/mining, /turf/open/floor/plasteel, -/area/hallway/secondary/service) +/area/quartermaster/miningdock) "bBJ" = ( /obj/machinery/firealarm{ pixel_y = 24 @@ -35543,14 +32562,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bBM" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "bBN" = ( /turf/closed/wall, /area/crew_quarters/heads/cmo) @@ -35610,18 +32621,6 @@ }, /turf/open/floor/circuit/telecomms/server, /area/science/server) -"bBT" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bBU" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 9 @@ -35733,6 +32732,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/light{ + light_color = "#cee5d2" + }, /turf/open/floor/plating, /area/maintenance/port/aft) "bCe" = ( @@ -35878,6 +32880,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, +/mob/living/simple_animal/hostile/lizard{ + name = "Wags-His-Tail"; + real_name = "Wags-His-Tail" + }, /turf/open/floor/plasteel, /area/janitor) "bCu" = ( @@ -35929,20 +32935,12 @@ /turf/open/floor/plating, /area/maintenance/aft) "bCA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/machinery/disposal/bin, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "bCB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36002,15 +33000,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"bCI" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bCJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -36231,7 +33220,7 @@ /area/quartermaster/miningdock) "bDl" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -36265,7 +33254,7 @@ /area/quartermaster/miningdock) "bDp" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -36288,18 +33277,16 @@ /obj/item/storage/box/mousetraps, /obj/item/storage/box/mousetraps, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table, /turf/open/floor/plasteel, /area/janitor) "bDs" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_x = 32 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, +/obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plasteel, -/area/hallway/primary/starboard) +/area/janitor) "bDt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -36317,13 +33304,6 @@ /turf/open/floor/plating, /area/maintenance/aft) "bDv" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) -"bDw" = ( /obj/structure/table, /obj/item/flashlight{ pixel_x = 1; @@ -36349,16 +33329,7 @@ }, /turf/open/floor/plating, /area/storage/tech) -"bDx" = ( -/obj/structure/table, -/obj/item/electronics/apc, -/obj/item/electronics/airlock, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating, -/area/storage/tech) -"bDy" = ( +"bDw" = ( /obj/structure/table, /obj/item/screwdriver{ pixel_y = 16 @@ -36366,12 +33337,12 @@ /obj/item/wirecutters, /turf/open/floor/plating, /area/storage/tech) -"bDz" = ( +"bDx" = ( /obj/structure/table, -/obj/item/aicard, -/obj/item/aiModule/reset, -/obj/structure/cable{ - icon_state = "1-2" +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/obj/machinery/light/small{ + dir = 1 }, /turf/open/floor/plating, /area/storage/tech) @@ -36455,9 +33426,14 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bDJ" = ( -/obj/structure/sign/poster/contraband/lizard{ - pixel_x = -32 - }, +/obj/structure/closet/jcloset, +/obj/item/storage/bag/trash, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, /turf/open/floor/plasteel, /area/janitor) "bDK" = ( @@ -36471,17 +33447,11 @@ /turf/open/floor/plasteel, /area/janitor) "bDL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/janitor) "bDM" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -36495,15 +33465,14 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bDO" = ( -/obj/machinery/vending/snack/orange, -/obj/machinery/light{ - dir = 1 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/structure/sign/poster/contraband/donut_corp{ +/obj/structure/sign/poster/contraband/hacking_guide{ pixel_y = 32 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/maintenance/aft) "bDP" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -36577,13 +33546,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"bDX" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) "bDY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -36969,8 +33931,12 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bER" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/techstorage/rnd, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, /turf/open/floor/plating, /area/storage/tech) "bES" = ( @@ -37020,11 +33986,11 @@ /turf/open/floor/plating, /area/storage/tech) "bEX" = ( +/obj/structure/table, +/obj/item/aicard, +/obj/item/aiModule/reset, /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-2" }, /turf/open/floor/plating, /area/storage/tech) @@ -37121,12 +34087,14 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bFk" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{ + pixel_x = 32 }, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/structure/closet, +/turf/open/floor/plasteel, +/area/janitor) "bFl" = ( /obj/structure/cable{ icon_state = "1-2" @@ -37266,14 +34234,17 @@ /turf/open/floor/plasteel, /area/medical/sleeper) "bFC" = ( -/obj/structure/door_assembly/door_assembly_mai, -/obj/item/electronics/airlock, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/table/wood/poker, +/obj/item/clothing/mask/cigarette/cigar{ + pixel_x = 3; + pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bFD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -37507,22 +34478,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/science/test_area) -"bGg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"bGh" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/starboard/fore) "bGi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -37631,12 +34586,8 @@ /turf/open/floor/plating, /area/storage/tech) "bGw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/techstorage/rnd, /turf/open/floor/plating, /area/storage/tech) "bGx" = ( @@ -37667,14 +34618,20 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "bGB" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/machinery/requests_console{ + department = "Janitorial"; + departmentType = 1; + pixel_y = -29 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/item/reagent_containers/spray/cleaner, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/plasteel, +/area/janitor) "bGC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -37835,22 +34792,6 @@ /obj/item/clothing/neck/stethoscope, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"bGS" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "bGT" = ( /obj/structure/table, /obj/item/folder/white, @@ -37970,21 +34911,19 @@ /turf/open/floor/plasteel/white, /area/science/research) "bHg" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 5; + icon_state = "roomnum"; + name = "Room Number 7"; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/structure/chair/sofa/right, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/sign/departments/restroom{ - pixel_y = -32 - }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "bHh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -38109,16 +35048,6 @@ }, /turf/open/floor/plating, /area/science/test_area) -"bHx" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/structure/table, -/obj/item/kitchen/rollingpin, -/obj/item/shovel/spade, -/obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "bHy" = ( /obj/structure/closet/crate, /obj/machinery/light/small{ @@ -38150,19 +35079,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"bHB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/table, -/obj/item/storage/box/beakers{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "bHC" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -38177,18 +35093,6 @@ "bHE" = ( /turf/open/floor/plating, /area/maintenance/port/aft) -"bHF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bHG" = ( /obj/structure/rack, /obj/machinery/light/small{ @@ -38339,18 +35243,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bHZ" = ( -/obj/structure/table, -/obj/item/book/manual/hydroponics_pod_people{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/item/paper/guides/jobs/hydroponics{ - pixel_x = -5; - pixel_y = 3 - }, -/turf/open/floor/plasteel, -/area/hydroponics) "bIa" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -39221,10 +36113,6 @@ }, /turf/closed/wall, /area/science/storage) -"bJS" = ( -/obj/structure/sign/departments/restroom, -/turf/closed/wall, -/area/crew_quarters/toilet) "bJT" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/white, @@ -39915,14 +36803,6 @@ luminosity = 2 }, /area/science/test_area) -"bLs" = ( -/obj/structure/reagent_dispensers/keg/milk, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"bLt" = ( -/obj/structure/reagent_dispensers/keg/gargle, -/turf/open/floor/wood, -/area/crew_quarters/bar) "bLu" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -40397,10 +37277,6 @@ }, /turf/open/floor/plating/airless, /area/science/test_area) -"bMF" = ( -/obj/structure/reagent_dispensers/keg/mead, -/turf/open/floor/wood, -/area/crew_quarters/bar) "bMG" = ( /obj/structure/cable{ icon_state = "1-2" @@ -40532,13 +37408,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bNa" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/departments/evac{ - pixel_y = 32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bNb" = ( /obj/item/airlock_painter, /obj/structure/lattice, @@ -40805,31 +37674,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"bNL" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/plating, -/area/construction) -"bNM" = ( -/obj/machinery/light, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/sign/directions/evac{ - dir = 4; - pixel_y = -25 - }, -/obj/structure/sign/directions/science{ - dir = 4; - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bNN" = ( /obj/structure/cable{ icon_state = "1-2" @@ -41224,21 +38068,13 @@ /area/quartermaster/office) "bOM" = ( /obj/structure/table, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 7 +/obj/item/paper_bin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 }, -/obj/item/clothing/head/welding{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/multitool, -/obj/item/clothing/glasses/welding, +/obj/item/pen/fountain, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/tcommsat/computer) "bON" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -41563,13 +38399,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"bPv" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/departments/evac{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bPw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -41805,36 +38634,6 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) -"bPR" = ( -/obj/structure/sign/mining{ - pixel_y = 7 - }, -/turf/closed/wall, -/area/quartermaster/miningdock) -"bPS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/departments/custodian{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"bPT" = ( -/obj/structure/reagent_dispensers/foamtank, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plasteel, -/area/engine/atmos) "bPU" = ( /obj/item/shard, /turf/open/floor/plating, @@ -42241,21 +39040,6 @@ }, /turf/open/floor/engine, /area/science/misc_lab) -"bQX" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plasteel, -/area/engine/atmos) "bQY" = ( /obj/structure/table/reinforced, /obj/item/integrated_circuit_printer, @@ -42276,50 +39060,6 @@ /obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) -"bRb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/structure/sign/departments/engineering{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"bRc" = ( -/obj/structure/sign/poster/contraband/space_cola{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"bRd" = ( -/obj/structure/sign/poster/contraband/space_up{ - pixel_x = -32; - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"bRe" = ( -/obj/machinery/computer/slot_machine{ - balance = 15; - money = 500; - pixel_x = -5 - }, -/obj/structure/sign/poster/contraband/robust_softdrinks{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"bRf" = ( -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) "bRg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -42597,7 +39337,7 @@ /area/medical/virology) "bRO" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white, @@ -42817,14 +39557,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/port/aft) -"bSr" = ( -/obj/structure/sign/poster/official/fruit_bowl{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/hallway/primary/starboard) "bSs" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -42839,18 +39571,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) -"bSu" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway 2" - }, -/obj/structure/sign/poster/contraband/eat{ - pixel_y = 32; - poster_item_desc = "This poster promotes obesity, it also promotes giving the Chef a reason to keep their job." - }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/hallway/primary/starboard) "bSv" = ( /obj/machinery/camera{ c_tag = "Construction Area"; @@ -42954,13 +39674,21 @@ /area/engine/atmos) "bSF" = ( /obj/structure/table, -/obj/item/paper_bin, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 7 }, -/obj/item/pen/fountain, +/obj/item/clothing/head/welding{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/multitool, +/obj/item/clothing/glasses/welding, /turf/open/floor/plasteel, -/area/tcommsat/computer) +/area/engine/atmos) "bSG" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -43001,12 +39729,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) -"bSL" = ( -/obj/structure/sign/poster/contraband/red_rum{ - pixel_y = 32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bSM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -43022,15 +39744,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) -"bSO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/official/cohiba_robusto_ad{ - pixel_y = -32 - }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) "bSP" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 4 @@ -43132,15 +39845,6 @@ /obj/machinery/vending/medical, /turf/open/floor/plasteel/white, /area/medical/virology) -"bSZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/have_a_puff{ - pixel_y = -32 - }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) "bTa" = ( /obj/machinery/door/window/northleft{ dir = 4; @@ -43322,13 +40026,6 @@ /obj/item/pen, /turf/open/floor/plasteel/white, /area/science/circuit) -"bTq" = ( -/obj/structure/sign/poster/contraband/smoke{ - desc = "This poster reminds us all that the Detective is a parasite. Year after year, they must get replacement lungs because of their addiction. "; - pixel_y = -32 - }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) "bTr" = ( /obj/structure/cable{ icon_state = "1-2" @@ -43337,68 +40034,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"bTs" = ( -/obj/structure/sign/poster/official/help_others{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) -"bTt" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/maintenance/port) -"bTu" = ( -/obj/machinery/recharge_station, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/official/state_laws{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/science/robotics/mechbay) -"bTv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/sign/poster/official/ian{ - pixel_x = 32; - pixel_y = 32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"bTw" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/sign/poster/official/love_ian{ - pixel_x = 32; - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"bTx" = ( -/obj/effect/turf_decal/bot, -/obj/structure/sign/poster/official/pda_ad{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"bTy" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/sign/poster/contraband/hacking_guide{ - pixel_y = 32 - }, -/turf/open/floor/plating, -/area/maintenance/aft) "bTz" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -43783,6 +40418,10 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, /turf/open/floor/plating, /area/maintenance/port/aft) "bUu" = ( @@ -43807,21 +40446,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) -"bUw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/free_drone{ - pixel_y = 32 - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bUx" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 1 @@ -43851,23 +40475,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"bUA" = ( -/obj/machinery/door/poddoor/preopen{ - id = "Engineering"; - name = "engineering security door" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/shower{ - dir = 8 - }, -/obj/structure/sign/warning/enginesafety{ - pixel_x = 32 - }, -/obj/structure/sign/poster/official/safety_eye_protection{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "bUB" = ( /obj/machinery/power/apc{ areastring = "/area/tcommsat/computer"; @@ -44029,13 +40636,6 @@ }, /turf/open/floor/engine/n2o, /area/engine/atmos) -"bUX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/official/safety_eye_protection, -/turf/closed/wall/r_wall, -/area/engine/engineering) "bUY" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -44253,10 +40853,6 @@ }, /turf/open/space, /area/space/nearstation) -"bVw" = ( -/obj/structure/sign/poster/official/safety_eye_protection, -/turf/closed/wall/r_wall, -/area/engine/engineering) "bVx" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on, /turf/open/floor/plating/airless, @@ -44330,19 +40926,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"bVH" = ( -/obj/machinery/camera{ - c_tag = "Engineering Storage"; - dir = 4 - }, -/obj/machinery/rnd/production/protolathe/department/engineering, -/obj/structure/sign/poster/contraband/power{ - desc = "Lord Singuloth must feed. Annoyingly, it's really easy for people to sabotage containment and let Lord Singuloth eat the entire station.. For this reason, Nanotrasen prefers Supermatter reactors."; - pixel_x = -32; - poster_item_desc = "This poster depicts Lord Singuloth. Nanotrasen doesn't approve. Nanotrasen wants Supermatter over Singularities, as they are usually much safer." - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "bVI" = ( /turf/closed/wall/r_wall, /area/tcommsat/server) @@ -44353,12 +40936,6 @@ /obj/machinery/vending/snack/random, /turf/open/floor/plasteel, /area/engine/break_room) -"bVL" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/floor/plasteel/freezer, -/area/security/prison) "bVM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, @@ -44542,13 +41119,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/medical/virology) -"bWk" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, -/area/quartermaster/office) "bWl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45090,17 +41660,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/science/circuit) -"bXu" = ( -/obj/machinery/camera{ - c_tag = "Bar West"; - dir = 4 - }, -/obj/machinery/computer/arcade/orion_trail, -/obj/structure/sign/poster/official/foam_force_ad{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "bXv" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -45576,19 +42135,27 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "bYG" = ( -/obj/structure/chair{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/machinery/light, -/obj/effect/landmark/start/assistant, +/obj/structure/sign/departments/engineering{ + pixel_y = -32 + }, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/hallway/primary/aft) "bYH" = ( /turf/closed/wall, /area/engine/break_room) "bYI" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/yellow, @@ -45754,22 +42321,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/break_room) -"bZf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "bZg" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -46166,15 +42717,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"cab" = ( -/obj/structure/table, -/obj/item/storage/pill_bottle/dice{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/food/snacks/cherrycupcake, -/turf/open/floor/wood, -/area/crew_quarters/bar) "cac" = ( /obj/structure/chair/stool, /turf/open/floor/plating, @@ -46217,18 +42759,6 @@ }, /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) -"caj" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{ - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "cak" = ( /obj/machinery/telecomms/hub/preset, /obj/effect/turf_decal/tile/neutral{ @@ -46266,18 +42796,6 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) -"cam" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchen"; - name = "kitchen shutters" - }, -/obj/item/reagent_containers/food/snacks/bluecherrycupcake{ - pixel_y = 5 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) "can" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -46376,20 +42894,15 @@ /area/hallway/primary/aft) "caw" = ( /obj/structure/table, -/obj/item/storage/box/lights/mixed, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 }, +/obj/item/stack/packageWrap, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, /turf/open/floor/plasteel, -/area/engine/engineering) +/area/engine/break_room) "cax" = ( /obj/structure/closet/wardrobe/black, /obj/effect/decal/cleanable/cobweb, @@ -46426,18 +42939,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/checkpoint/engineering) -"caB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchen"; - name = "kitchen shutters" - }, -/obj/item/reagent_containers/food/snacks/cheesynachos{ - pixel_y = 5 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) "caC" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -46895,6 +43396,21 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cbw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"cbx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -46908,7 +43424,7 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"cbx" = ( +"cby" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -46923,11 +43439,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"cby" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/port/aft) "cbz" = ( /obj/machinery/vending/wardrobe/atmos_wardrobe, /turf/open/floor/plasteel, @@ -47122,11 +43633,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"cbX" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/machinery/atmospherics/miner/carbon_dioxide, -/turf/open/floor/engine/co2, -/area/engine/atmos) "cbY" = ( /obj/structure/table/reinforced, /obj/item/multitool, @@ -47180,10 +43686,13 @@ /turf/open/space, /area/solar/port/aft) "ccd" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/engine/atmos) +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "cce" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -47345,16 +43854,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"ccu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) "ccv" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -47393,9 +43895,9 @@ /turf/open/floor/plasteel, /area/engine/atmos) "ccB" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/miner/carbon_dioxide, +/turf/open/floor/engine/co2, /area/engine/atmos) "ccC" = ( /obj/machinery/air_sensor/atmos/carbon_tank, @@ -47427,11 +43929,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) -"ccH" = ( -/obj/structure/table, -/obj/item/paper/fluff/holodeck/disclaimer, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "ccI" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -47517,20 +44014,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/misc_lab) -"ccS" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/window, -/obj/structure/sign/poster/official/high_class_martini{ - pixel_x = -32 - }, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/sofa/left{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "ccT" = ( /obj/machinery/light{ dir = 4 @@ -47618,30 +44101,17 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "cdh" = ( -/obj/structure/lattice/catwalk, -/obj/item/stack/marker_beacon{ - anchored = 1; - icon_state = "markerburgundy-on"; - light_power = 3; - light_range = 3; - name = "Docking Beacon"; - picked_color = "Burgundy" - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/space/nearstation) -"cdi" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/open/floor/plating, -/area/space/nearstation) +/area/maintenance/port/aft) "cdj" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/cartridge/atmos, -/turf/open/floor/engine, -/area/engine/engineering) +/turf/open/floor/plating, +/area/maintenance/port/aft) "cdk" = ( /obj/machinery/computer/atmos_alert, /obj/effect/turf_decal/tile/neutral{ @@ -47880,13 +44350,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"cdM" = ( -/obj/structure/window, -/obj/structure/chair/sofa/right{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "cdN" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -47901,15 +44364,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cdP" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "cdQ" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, @@ -47969,13 +44423,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"cdY" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "cdZ" = ( /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/plasteel/dark/telecomms, @@ -48050,18 +44497,22 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cek" = ( -/obj/structure/closet/wardrobe/grey, -/obj/machinery/requests_console{ - department = "Locker Room"; - pixel_x = -32 +/obj/machinery/door/poddoor/preopen{ + id = "Engineering"; + name = "engineering security door" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/shower{ + dir = 8 + }, +/obj/structure/sign/warning/enginesafety{ + pixel_x = 32 + }, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = -32 }, -/obj/item/clothing/under/assistantformal, -/obj/item/clothing/under/assistantformal, -/obj/item/clothing/under/assistantformal, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/engine/engineering) "cel" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -48138,18 +44589,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"ceu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "cev" = ( /obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -48381,7 +44820,7 @@ /area/crew_quarters/heads/chief) "cfd" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/closet/radiation, @@ -48405,16 +44844,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) -"cff" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "cfg" = ( /obj/structure/cable{ icon_state = "1-4" @@ -48557,33 +44986,17 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cfA" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "cfB" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"cfC" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/item/clothing/under/overalls, +/obj/item/clothing/under/overalls, +/obj/item/radio/headset/headset_eng, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/engine/engineering) "cfD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ @@ -48596,18 +45009,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) -"cfE" = ( -/obj/machinery/button/door{ - desc = "Bolts the doors to the Private Study."; - id = "PrivateStudy"; - name = "Private Study Lock"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = ""; - req_one_access_txt = "28;63" - }, -/turf/open/floor/wood, -/area/library) "cfF" = ( /obj/machinery/suit_storage_unit/ce, /obj/effect/turf_decal/stripes/line{ @@ -48642,15 +45043,20 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) "cfI" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/closet/secure_closet/engineering_personal, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 }, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/landmark/start/assistant, +/obj/item/clothing/under/overalls, +/obj/item/clothing/under/overalls, +/obj/item/radio/headset/headset_eng, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/engine/engineering) "cfJ" = ( /obj/machinery/light/small{ dir = 1 @@ -48714,14 +45120,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"cfS" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 8; - name = "8maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) "cfT" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 9 @@ -48734,17 +45132,6 @@ }, /turf/closed/wall, /area/maintenance/disposal/incinerator) -"cfV" = ( -/obj/structure/table, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/obj/item/stack/packageWrap, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/turf/open/floor/plasteel, -/area/engine/break_room) "cfW" = ( /obj/structure/cable{ icon_state = "1-2" @@ -48896,12 +45283,13 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgp" = ( -/obj/structure/rack, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" +/obj/structure/cable{ + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/closet/toolcloset, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgq" = ( @@ -48938,8 +45326,13 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgu" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/spawner/structure/window, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgv" = ( @@ -49037,17 +45430,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"cgH" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/item/clothing/under/overalls, -/obj/item/clothing/under/overalls, -/obj/item/radio/headset/headset_eng, -/turf/open/floor/plasteel, -/area/engine/engineering) "cgI" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -49075,34 +45457,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"cgM" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/item/clothing/under/overalls, -/obj/item/clothing/under/overalls, -/obj/item/radio/headset/headset_eng, -/turf/open/floor/plasteel, -/area/engine/engineering) -"cgN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/storage/toolbox/artistic{ - icon_state = "yellow"; - item_state = "toolbox_yellow"; - name = "Cable Toolbox"; - pixel_y = 6 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "cgO" = ( /obj/structure/rack, /obj/item/lighter, @@ -49123,19 +45477,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) -"cgP" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/closet/secure_closet/engineering_welding, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/turf/open/floor/plasteel, -/area/engine/engineering) "cgQ" = ( /obj/machinery/camera{ c_tag = "Engineering East"; @@ -49574,11 +45915,6 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/port/aft) -"chM" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/radio/headset/headset_eng, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "chN" = ( /obj/structure/cable{ icon_state = "4-8" @@ -49638,22 +45974,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"chU" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/artistic{ - icon_state = "yellow"; - item_state = "toolbox_yellow"; - name = "Cable Toolbox"; - pixel_y = 6 - }, -/obj/item/storage/toolbox/artistic{ - icon_state = "yellow"; - item_state = "toolbox_yellow"; - name = "Cable Toolbox"; - pixel_y = -4 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "chV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -49672,22 +45992,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"chW" = ( -/obj/item/wrench, -/obj/structure/rack, -/obj/item/weldingtool/hugetank, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "chX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -49704,10 +46008,6 @@ /obj/machinery/shieldgen, /turf/open/floor/plating, /area/engine/engineering) -"chZ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/crew_quarters/locker) "cia" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -49720,14 +46020,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cib" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 8; - name = "8maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) "cic" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -49794,10 +46086,6 @@ "cig" = ( /turf/closed/wall, /area/engine/engineering) -"cih" = ( -/obj/effect/spawner/lootdrop/keg, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "cii" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -49853,13 +46141,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) -"cil" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/light_construct{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "cim" = ( /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) @@ -49931,12 +46212,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) -"ciw" = ( -/obj/structure/light_construct{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "cix" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/closed/wall/r_wall, @@ -50026,9 +46301,11 @@ }, /area/maintenance/starboard/aft) "ciK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/structure/rack, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/starboard/aft) @@ -50116,27 +46393,24 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) -"ciV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/light_construct{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "ciW" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/engine/engineering) "ciX" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/turf/open/floor/plating, /area/engine/engineering) "ciY" = ( /obj/machinery/door/poddoor{ @@ -50612,11 +46886,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) -"cjZ" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/turf/open/floor/plasteel, -/area/engine/engineering) "cka" = ( /obj/machinery/door/poddoor/preopen{ id = "testlab"; @@ -50727,21 +46996,9 @@ /area/maintenance/starboard/aft) "ckp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" - }, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"ckq" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/rods/fifty, -/turf/open/floor/plasteel, -/area/engine/engineering) "ckr" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -50834,14 +47091,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"ckE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/maintenance{ - name = "Locker Room Maintenance"; - req_access_txt = "12" - }, -/turf/open/floor/plating, -/area/maintenance/port) "ckF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, @@ -50866,15 +47115,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"ckJ" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/obj/item/storage/toolbox/electrical, -/turf/open/floor/plating, -/area/maintenance/department/medical/morgue) "ckK" = ( /obj/structure/tank_dispenser, /obj/effect/turf_decal/bot{ @@ -50939,27 +47179,10 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) -"ckP" = ( -/obj/structure/noticeboard{ - pixel_y = -27 - }, -/obj/structure/chair/sofa/right{ - dir = 1 - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "ckQ" = ( /obj/structure/closet/cardboard, /turf/open/floor/plasteel, /area/quartermaster/warehouse) -"ckR" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/coin/gold, -/obj/item/coin/gold, -/obj/item/coin/gold, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ckS" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, @@ -51147,10 +47370,13 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cls" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, -/turf/closed/wall, +/turf/open/floor/plating, /area/maintenance/starboard/aft) "clt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -51284,12 +47510,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) -"clH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "clI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -51304,33 +47524,22 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/engine/engineering) -"clK" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/turf/open/floor/plating, -/area/engine/engineering) -"clL" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/coin/silver, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "clM" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/coin/silver, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/table, +/obj/item/storage/box/lights/mixed, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "clN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/yellow{ @@ -51339,21 +47548,16 @@ /turf/open/floor/plasteel, /area/engine/engineering) "clO" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/janitor, -/mob/living/simple_animal/hostile/lizard{ - name = "Wags-His-Tail"; - real_name = "Wags-His-Tail" - }, -/turf/open/floor/plasteel, -/area/janitor) -"clP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/wardrobe/grey, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/assistantformal, +/obj/machinery/camera{ + c_tag = "Dorms East - Holodeck"; dir = 4 }, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "clQ" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -51361,9 +47565,14 @@ /turf/open/floor/plasteel, /area/engine/engineering) "clR" = ( -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "clS" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/rnd/production/techfab/department/security, @@ -51374,30 +47583,21 @@ /turf/open/floor/plasteel, /area/security/main) "clT" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/engine/atmos) "clU" = ( /turf/open/floor/engine/n2, /area/engine/atmos) "clV" = ( -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, +/area/engine/atmos) "clW" = ( /turf/open/floor/engine/o2, /area/engine/atmos) -"clX" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "clY" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/air, @@ -51405,28 +47605,11 @@ "clZ" = ( /turf/open/floor/engine/air, /area/engine/atmos) -"cma" = ( -/obj/machinery/hydroponics/constructable, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = 29 - }, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "cmb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) -"cmc" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway" - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "cmd" = ( /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) @@ -51491,26 +47674,19 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "cmm" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/kitchen/rollingpin, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) -"cmn" = ( -/obj/structure/table/wood, -/obj/item/storage/pill_bottle/dice, -/turf/open/floor/plasteel, -/area/security/prison) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) "cmo" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cmp" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck, -/turf/open/floor/plasteel, -/area/security/prison) "cmq" = ( /obj/effect/landmark/xeno_spawn, /obj/structure/disposalpipe/segment, @@ -51519,18 +47695,11 @@ }, /area/maintenance/starboard/aft) "cmr" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, -/turf/open/floor/plasteel, -/area/security/prison) -"cms" = ( -/obj/structure/chair/comfy/brown{ - color = "#66b266"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/prison) +/turf/closed/wall, +/area/maintenance/starboard/aft) "cmt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -51637,13 +47806,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) -"cmE" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/prison) "cmF" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -51655,7 +47817,7 @@ /area/engine/engineering) "cmG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable{ @@ -51672,34 +47834,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cmH" = ( -/obj/item/electropack/shockcollar, -/obj/item/assembly/signaler, -/turf/open/floor/plating, -/area/security/prison) -"cmI" = ( -/obj/structure/bed, -/obj/effect/spawner/lootdrop/bedsheet, -/turf/open/floor/plating, -/area/security/prison) -"cmJ" = ( -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"cmK" = ( -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cmL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -52014,6 +48148,13 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cnJ" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "cnK" = ( /obj/structure/cable{ icon_state = "1-2" @@ -52196,6 +48337,10 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"coj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, +/area/crew_quarters/dorms) "cop" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ dir = 1 @@ -52248,6 +48393,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel, /area/engine/engine_smes) "cow" = ( @@ -52263,25 +48411,30 @@ /turf/open/floor/plasteel, /area/engine/engine_smes) "cox" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engine_smes) "coy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/engine_smes) "coz" = ( @@ -52294,6 +48447,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/plasteel, /area/engine/engine_smes) "coA" = ( @@ -52415,6 +48571,32 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/science/misc_lab) +"coZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"cpa" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/floor/plasteel, +/area/engine/engineering) "cpb" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small{ @@ -52467,12 +48649,17 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/chair/office/light, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, /turf/open/floor/plasteel, /area/engine/engine_smes) "cpk" = ( @@ -52480,6 +48667,12 @@ /turf/open/floor/plasteel, /area/engine/engine_smes) "cpl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engine_smes) "cpm" = ( @@ -52498,6 +48691,7 @@ "cpn" = ( /obj/machinery/light, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/engine/engine_smes) "cpo" = ( @@ -52532,6 +48726,11 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cps" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel, +/area/engine/engineering) "cpt" = ( /obj/structure/table, /obj/item/clothing/gloves/color/yellow, @@ -52661,37 +48860,54 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/structure/table, +/obj/item/stock_parts/cell/high/plus, /turf/open/floor/plasteel, /area/engine/engine_smes) "cpT" = ( -/obj/structure/table, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_y = -35 }, -/obj/item/stock_parts/cell/high/plus, /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel, /area/engine/engine_smes) "cpU" = ( -/obj/structure/chair/office/light{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/engine_smes) +"cpV" = ( +/obj/machinery/camera{ + c_tag = "Engineering Storage"; + dir = 4 + }, +/obj/machinery/rnd/production/protolathe/department/engineering, +/obj/structure/sign/poster/contraband/power{ + desc = "Lord Singuloth must feed. Annoyingly, it's really easy for people to sabotage containment and let Lord Singuloth eat the entire station.. For this reason, Nanotrasen prefers Supermatter reactors."; + pixel_x = -32; + poster_item_desc = "This poster depicts Lord Singuloth. Nanotrasen doesn't approve. Nanotrasen wants Supermatter over Singularities, as they are usually much safer." + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "cpW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, /turf/open/floor/plasteel, /area/engine/engineering) +"cpX" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/rods/fifty, +/turf/open/floor/plasteel, +/area/engine/engineering) "cpY" = ( /obj/structure/cable{ icon_state = "2-8" @@ -52930,7 +49146,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/engine, @@ -52986,6 +49202,13 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"cqJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space, +/area/solar/starboard/aft) "cqK" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -53000,6 +49223,15 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"cqM" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "cqN" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -53103,6 +49335,14 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cri" = ( +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "crk" = ( /obj/structure/lattice/catwalk, /turf/open/space, @@ -53119,9 +49359,11 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "crn" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/engine/engineering) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) "cro" = ( /obj/structure/cable{ icon_state = "0-4" @@ -53439,6 +49681,10 @@ /obj/structure/transit_tube/crossing/horizontal, /turf/open/space, /area/space/nearstation) +"csp" = ( +/obj/effect/landmark/event_spawn, +/turf/closed/wall, +/area/crew_quarters/fitness) "csq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -53482,6 +49728,12 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/space, /area/space/nearstation) +"csy" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "csA" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "engsm"; @@ -53584,6 +49836,13 @@ }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) +"csZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/space, +/area/solar/starboard/aft) "cta" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -53882,7 +50141,7 @@ pixel_y = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -54088,7 +50347,7 @@ "cuo" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/corner, @@ -54175,7 +50434,7 @@ amount = 35 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/corner{ @@ -54830,7 +51089,7 @@ network = list("aicore") }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/circuit, @@ -55028,7 +51287,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -55216,7 +51475,6 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/box/handcuffs, /obj/item/storage/box/flashbangs{ pixel_x = 3; pixel_y = -3 @@ -55326,6 +51584,14 @@ }, /turf/open/floor/plating, /area/security/processing) +"cxW" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "cxY" = ( /obj/machinery/camera{ c_tag = "Arrivals Escape Pod 1"; @@ -55383,6 +51649,13 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"cyi" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "cyl" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -55544,6 +51817,10 @@ }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) +"czD" = ( +/obj/structure/extinguisher_cabinet, +/turf/closed/wall/r_wall, +/area/hallway/primary/central) "czE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -55850,6 +52127,13 @@ /obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) +"cAz" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "cAA" = ( /obj/machinery/light/small{ dir = 1 @@ -55924,6 +52208,11 @@ /obj/machinery/light/small, /turf/open/floor/plating, /area/maintenance/port/aft) +"cAL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/janitor, +/turf/open/floor/plasteel, +/area/janitor) "cAN" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -56148,6 +52437,25 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"cBn" = ( +/obj/structure/closet, +/obj/item/stack/tile/carpet/royalblue{ + amount = 24 + }, +/obj/item/stack/tile/carpet/green{ + amount = 24 + }, +/obj/item/stack/tile/carpet/purple{ + amount = 24 + }, +/obj/item/stack/tile/carpet/orange{ + amount = 24 + }, +/obj/item/stack/tile/wood{ + amount = 24 + }, +/turf/open/floor/plating, +/area/maintenance/port) "cBo" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/wood, @@ -56361,6 +52669,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/hallway) +"cBT" = ( +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "cBV" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -56435,6 +52753,15 @@ }, /turf/closed/wall, /area/security/detectives_office) +"cCn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "cCo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -56922,7 +53249,7 @@ /area/engine/engineering) "cEk" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -57274,6 +53601,21 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"cFF" = ( +/obj/machinery/vr_sleeper{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/crew_quarters/fitness) "cFI" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -57380,6 +53722,14 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"cGd" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/cartridge/atmos, +/turf/open/floor/engine, +/area/engine/engineering) "cGe" = ( /obj/structure/cable{ icon_state = "2-8" @@ -57428,6 +53778,11 @@ /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"cGl" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/radio/headset/headset_eng, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "cGr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -57960,6 +54315,29 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"cII" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"cIW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/vending/kink, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"cJl" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "cMm" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -58181,6 +54559,10 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cPO" = ( +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "cQw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58639,6 +55021,24 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"dfH" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/power/apc{ + areastring = "/area/security/main"; + dir = 4; + name = "Firing Range APC"; + pixel_x = 24 + }, +/turf/open/floor/plasteel, +/area/security/prison) "dfL" = ( /obj/structure/reagent_dispensers/keg/gargle, /turf/open/floor/wood, @@ -58646,10 +55046,66 @@ "dgz" = ( /turf/closed/wall, /area/crew_quarters/cryopod) +"djq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"djB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/fore) +"dok" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "dqu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"dqD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/vault, +/obj/effect/mapping_helpers/airlock/locked, +/turf/closed/wall/r_wall, +/area/ai_monitored/nuke_storage) +"dqG" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-03" + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/secondary/entry) +"dsV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 + }, +/turf/open/floor/wood, +/area/crew_quarters/dorms) +"duc" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "dvc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -58662,12 +55118,108 @@ }, /turf/closed/wall, /area/science/circuit) +"dyS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "dzi" = ( /obj/structure/cable{ icon_state = "2-4" }, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"dBt" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"dCk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/theatre) +"dEZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/window/westleft{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Shooting Range" + }, +/turf/open/floor/plating, +/area/security/prison) +"dGY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/safety_eye_protection, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"dHx" = ( +/obj/structure/light_construct{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"dHP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"dIA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"dIH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating, +/area/security/prison) +"dKe" = ( +/obj/machinery/atmospherics/components/binary/valve, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"dKg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) "dKP" = ( /turf/closed/wall, /area/maintenance/bar) @@ -58675,12 +55227,51 @@ /obj/structure/chair/stool/bar, /turf/open/floor/wood, /area/maintenance/bar) +"dLh" = ( +/obj/structure/table/wood, +/obj/item/instrument/trumpet, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "dMZ" = ( /obj/structure/sign/poster/official/random{ pixel_y = 32 }, /turf/open/floor/plasteel/white, /area/science/circuit) +"dQy" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/security/prison) +"dQz" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"dSI" = ( +/obj/machinery/door/airlock{ + desc = "To keep the station within regulations, space IKEA requires one storage cupboard for their Nanotrasen partnership to continue."; + id_tag = "MaintDorm1"; + name = "Furniture Storage" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/port) +"dSM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"eaD" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/hydroponics) "eaI" = ( /obj/structure/table/reinforced, /obj/item/radio/intercom{ @@ -58690,9 +55281,87 @@ /obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) +"eeD" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + areastring = "/area/engine/gravity_generator"; + dir = 8; + name = "Gravity Generator APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/table, +/obj/item/paper/guides/jobs/engi/gravity_gen, +/obj/item/pen/blue, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"efo" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"ekY" = ( +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"epP" = ( +/obj/machinery/door/airlock/engineering{ + name = "Gravity Generator"; + req_access_txt = "11" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/engine/engine_smes) +"eqs" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/machinery/requests_console{ + department = "Bar"; + departmentType = 2; + pixel_x = -30; + pixel_y = 45; + receive_ore_updates = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) +"ese" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "evR" = ( /turf/open/floor/plating, /area/maintenance/bar) +"eyC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "eyM" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -58701,17 +55370,90 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"eAE" = ( +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/turf/open/floor/carpet, +/area/library) +"eBm" = ( +/obj/structure/chair/sofa/left, +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"eDq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"eDv" = ( +/turf/open/floor/carpet, +/area/crew_quarters/theatre) "eHI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"eIe" = ( +/obj/structure/table/wood, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/instrument/trombone, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"eJk" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/security/brig) +"eJz" = ( +/obj/machinery/door/airlock{ + name = "Theatre Backstage"; + req_access_txt = "46" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"eMb" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall, +/area/space/nearstation) +"eMV" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/security/prison) "eRz" = ( /obj/structure/lattice, /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) +"eTc" = ( +/obj/item/flashlight/lamp/green{ + pixel_x = -3; + pixel_y = 22 + }, +/obj/structure/dresser{ + desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; + name = "Dresser"; + pixel_y = 7 + }, +/turf/open/floor/plating, +/area/maintenance/port) +"eUR" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "eVC" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor, @@ -58727,12 +55469,93 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"eWl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"eWv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/security/prison) +"eWV" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"eYr" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/space/nearstation) +"fcc" = ( +/obj/machinery/vr_sleeper{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/crew_quarters/fitness) +"fcu" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/space, +/area/solar/port/aft) "fcG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/closed/wall/r_wall, /area/science/mixing) +"fey" = ( +/obj/structure/chair/sofa, +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"ffm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/closed/wall, +/area/quartermaster/warehouse) +"ffU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/crew_quarters/heads/captain) +"fkx" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/departments/evac{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "flc" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -58751,10 +55574,20 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"fpd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/crew_quarters/dorms) "fsQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"ftK" = ( +/obj/structure/bed, +/turf/open/floor/plating, +/area/maintenance/port) "fvY" = ( /obj/machinery/computer/cryopod{ pixel_y = 26 @@ -58764,17 +55597,161 @@ }, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"fwD" = ( +/obj/structure/sign/poster/official/ion_rifle, +/turf/closed/wall/r_wall, +/area/ai_monitored/security/armory) "fxa" = ( /obj/structure/chair/wood/normal, /turf/open/floor/wood{ icon_state = "wood-broken4" }, /area/maintenance/bar) +"fyr" = ( +/obj/machinery/door/window/southright{ + name = "Target Storage" + }, +/obj/item/target/alien, +/obj/item/target/alien, +/obj/item/target/syndicate, +/turf/open/floor/plating, +/area/security/prison) +"fBj" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Air In" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"fDV" = ( +/obj/machinery/computer/card{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/crew_quarters/heads/captain) +"fEo" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"fFp" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/crowbar/red, +/turf/open/floor/plating, +/area/maintenance/port) +"fGf" = ( +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"fIK" = ( +/obj/structure/closet{ + name = "Costume Closet" + }, +/obj/item/clothing/head/russobluecamohat, +/obj/item/clothing/head/russobluecamohat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"fJA" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "fKl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/science/circuit) +"fLb" = ( +/obj/structure/table/wood, +/obj/item/instrument/violin, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"fLn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"fLX" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/security/prison) +"fOB" = ( +/obj/structure/chair/sofa{ + dir = 1 + }, +/obj/structure/window, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"fPz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + pixel_x = 5 + }, +/obj/machinery/light/small, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"fRa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + icon_state = "roomnum"; + name = "Room Number 1"; + pixel_x = -30; + pixel_y = -7 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"fSL" = ( +/obj/machinery/door/window/westleft{ + base_state = "right"; + icon_state = "right"; + name = "Unisex Showers" + }, +/turf/open/floor/plasteel/freezer, +/area/security/prison) "fTg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -58784,12 +55761,73 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"fXo" = ( +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"fXH" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/crew_quarters/theatre) +"fZD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/landmark/start/mime, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) +"gbb" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"gbq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plating, +/area/construction) "gbT" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/fifty, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"gfn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "gfD" = ( /obj/structure/cable{ icon_state = "4-8" @@ -58799,18 +55837,197 @@ "gjl" = ( /turf/closed/wall, /area/quartermaster/warehouse) +"gks" = ( +/turf/open/floor/grass, +/area/security/prison) +"gmc" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green, +/obj/machinery/camera{ + c_tag = "VR Sleepers"; + dir = 1 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/crew_quarters/fitness) +"gnM" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"gnW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space, +/area/solar/starboard/aft) +"gqp" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/turf/open/floor/plating, +/area/space/nearstation) +"gqR" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"gro" = ( +/obj/machinery/door/airlock/engineering{ + name = "Gravity Generator"; + req_access_txt = "11" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"guh" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "kitchen shutters" + }, +/obj/item/reagent_containers/food/snacks/cheesynachos{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) +"gvC" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/theatre) "gwd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/science/circuit) +"gxH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"gzA" = ( +/obj/structure/table/wood/fancy, +/obj/machinery/light, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 20 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 20 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"gzJ" = ( +/obj/structure/sign/poster/official/cohiba_robusto_ad, +/turf/closed/wall, +/area/lawoffice) "gBo" = ( /obj/structure/cable{ icon_state = "1-8" }, /turf/open/floor/wood, /area/maintenance/bar) +"gBY" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/fore"; + dir = 1; + name = "Starboard Bow Maintenance APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"gDv" = ( +/obj/structure/table, +/obj/item/clothing/gloves/boxing/yellow, +/obj/item/clothing/gloves/boxing/green, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing, +/obj/item/clothing/gloves/boxing, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"gFY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/wood, +/area/bridge/meeting_room) +"gGD" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"gGK" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + pixel_y = -25 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"gIT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "kitchen shutters" + }, +/obj/item/reagent_containers/food/snacks/bluecherrycupcake{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) +"gJR" = ( +/obj/structure/table/wood, +/obj/item/instrument/guitar{ + pixel_x = -7 + }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/violin, +/turf/open/floor/wood, +/area/crew_quarters/bar) "gLH" = ( /obj/machinery/door/airlock/external{ name = "External Access"; @@ -58827,6 +56044,29 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"gOZ" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"gTx" = ( +/obj/structure/bed, +/obj/machinery/button/door{ + id = "Dorm5"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/spawner/lootdrop/bedsheet, +/turf/open/floor/wood, +/area/crew_quarters/dorms) +"gUz" = ( +/obj/structure/sign/poster/official/safety_eye_protection, +/turf/closed/wall/r_wall, +/area/engine/engineering) "gWd" = ( /obj/structure/cable{ icon_state = "1-4" @@ -58837,6 +56077,16 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"gYK" = ( +/obj/machinery/light/small, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"gYR" = ( +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "gZG" = ( /obj/structure/closet/crate/freezer/surplus_limbs, /obj/item/reagent_containers/glass/beaker/synthflesh, @@ -58844,7 +56094,120 @@ dir = 8 }, /area/medical/sleeper) -"hcE" = ( +"hmv" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"hot" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/window, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"hvD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"hxw" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"hFk" = ( +/obj/structure/piano{ + icon_state = "piano" + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"hIi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/space/nearstation) +"hIJ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"hKI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/fore) +"hKX" = ( +/obj/machinery/button/door{ + desc = "Alright, GAMER! Want to take your PWRGAME addiction to the MAX? Just smash this button with your chubby chetto encrusted hands an- oh, you broke the switch. Good job, idiot."; + id = "RIPFUN"; + name = "Powerful Gamer Toggle"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 7; + specialfunctions = 4 + }, +/obj/structure/table_frame/wood, +/turf/open/floor/plating, +/area/maintenance/port) +"hMk" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "Secure Gate"; + name = "brig shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/security/brig) +"hRa" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/circuit) +"hSS" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"hUC" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-06" + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/secondary/entry) +"hVk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -58861,23 +56224,36 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"hEm" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" +"hYH" = ( +/obj/machinery/door/airlock/security{ + name = "Labor Shuttle"; + req_access_txt = "2" }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) -"hRa" = ( -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/cell_charger{ - pixel_y = 5 +/obj/structure/cable{ + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/white, -/area/science/circuit) +/turf/open/floor/plasteel, +/area/security/processing) +"iaq" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"iiH" = ( +/obj/structure/table/wood/fancy, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/reagent_containers/food/drinks/britcup{ + desc = "Kingston's personal cup."; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "iiW" = ( /turf/open/floor/wood, /area/maintenance/bar) @@ -58886,25 +56262,89 @@ /obj/item/stack/sheet/metal/fifty, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"ilO" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) +"imi" = ( +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "imH" = ( /obj/structure/falsewall, /turf/open/floor/plating, /area/maintenance/bar) +"imK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/light_construct{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"ioS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/fitness) "ipA" = ( /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"ipU" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 25 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"itE" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/curtain, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "itG" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/plasteel/white, /area/science/circuit) +"itP" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/prison) "ium" = ( /mob/living/simple_animal/bot/cleanbot{ name = "C.L.E.A.N." }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"ixv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/space/nearstation) "izv" = ( /obj/machinery/vending/clothing, /obj/machinery/light/small{ @@ -58912,6 +56352,54 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"izL" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/departments/evac{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"iCE" = ( +/obj/structure/table/wood, +/obj/machinery/requests_console{ + department = "Theatre"; + name = "theatre RC"; + pixel_x = -32 + }, +/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/toy/dummy, +/obj/item/lipstick/random{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/lipstick/random{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) +"iEc" = ( +/obj/structure/safe, +/obj/item/clothing/head/bearpelt, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/gun/ballistic/revolver/nagant, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) "iEJ" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod One" @@ -58921,6 +56409,29 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"iFt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"iGV" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"iHq" = ( +/obj/machinery/door/airlock{ + name = "Recharging Station" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "iNn" = ( /obj/machinery/camera{ c_tag = "Kitchen Cold Room" @@ -58929,6 +56440,49 @@ /obj/structure/reagent_dispensers/cooking_oil, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) +"iQA" = ( +/obj/structure/rack, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/cobweb, +/obj/item/clothing/under/color/grey, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"iRI" = ( +/obj/structure/chair/comfy/beige{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/grimy, +/area/hallway/secondary/entry) +"iSB" = ( +/obj/machinery/door/window/southleft{ + name = "Target Storage" + }, +/obj/item/target/clown, +/obj/item/target/clown, +/obj/item/target, +/obj/item/target, +/turf/open/floor/plating, +/area/security/prison) +"iTd" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"iTD" = ( +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "iVU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -58937,6 +56491,21 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/crew_quarters/cryopod) +"iWm" = ( +/obj/machinery/camera{ + c_tag = "Bar West"; + dir = 4 + }, +/obj/machinery/computer/arcade/orion_trail, +/obj/structure/sign/poster/official/foam_force_ad{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"jav" = ( +/obj/structure/chair/sofa/right, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "jbf" = ( /obj/structure/cable{ icon_state = "0-2" @@ -58949,6 +56518,22 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"jcN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"jde" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/obj/structure/chair/sofa{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "jgm" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -58963,10 +56548,56 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"jil" = ( +/obj/machinery/vr_sleeper{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/crew_quarters/fitness) "jlm" = ( /obj/machinery/rnd/production/techfab/department/cargo, /turf/open/floor/plasteel, /area/quartermaster/office) +"joc" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/dresser, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/theatre"; + dir = 8; + name = "Theatre APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/theatre) +"joq" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/theatre) "jqv" = ( /obj/structure/chair/wood/normal{ dir = 1 @@ -58981,6 +56612,39 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"jtp" = ( +/obj/structure/sign/poster/contraband/red_rum{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"jtY" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/bar) +"juV" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"jvm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/space, +/area/solar/starboard/aft) +"jxp" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "jAD" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -58997,6 +56661,13 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"jDh" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "jHt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ @@ -59017,6 +56688,75 @@ }, /turf/open/floor/wood, /area/maintenance/port/aft) +"jKM" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/locker) +"jMa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"jMY" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = 6 + }, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = -4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"jNS" = ( +/obj/structure/filingcabinet, +/turf/open/floor/wood, +/area/crew_quarters/heads/captain) +"jOF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/port) +"jRc" = ( +/obj/structure/table, +/obj/item/storage/pill_bottle/dice{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/cherrycupcake, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"jRs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"jSk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/security/prison) "jSO" = ( /obj/machinery/light{ dir = 4 @@ -59026,6 +56766,19 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"jTp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"jUc" = ( +/obj/structure/closet/radiation, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "jVl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -59035,6 +56788,78 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"jYg" = ( +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 9 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"jYD" = ( +/obj/structure/closet{ + name = "Suit Closet" + }, +/obj/item/clothing/under/suit_jacket/white, +/obj/item/clothing/under/suit_jacket/tan, +/obj/item/clothing/under/suit_jacket/red, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/under/suit_jacket/green, +/obj/item/clothing/under/suit_jacket/female, +/obj/item/clothing/under/suit_jacket/checkered, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/burgundy, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/under/lawyer/black, +/obj/item/clothing/under/lawyer/blacksuit, +/obj/item/clothing/under/lawyer/blue, +/obj/item/clothing/under/lawyer/bluesuit, +/obj/item/clothing/under/lawyer/female, +/obj/item/clothing/under/lawyer/purpsuit, +/obj/item/clothing/under/lawyer/really_black, +/obj/item/clothing/under/lawyer/red, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"kcg" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/plasteel, +/area/engine/atmos) +"kgf" = ( +/obj/machinery/button/door{ + id = "maintdiy"; + name = "Shutters Control Button"; + pixel_x = -6; + pixel_y = 24 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"khb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/item/shovel/spade, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) "khB" = ( /obj/machinery/door/airlock/external{ req_access_txt = "13" @@ -59044,18 +56869,49 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"knx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Gravity Generator"; - req_access_txt = "11" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +"kiH" = ( +/obj/machinery/door/airlock{ + name = "Bar Back Room" }, +/turf/open/space/basic, +/area/crew_quarters/bar) +"kmf" = ( +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plasteel, -/area/engine/gravity_generator) +/area/crew_quarters/fitness) +"kmw" = ( +/obj/machinery/door/airlock{ + name = "Theatre Backstage"; + req_access_txt = "46" + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"knx" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "bridge blast door" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"knR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/security/prison) "kob" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, @@ -59064,6 +56920,44 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"ktc" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/hydroponics) +"kte" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"kuT" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/maintenance/department/electrical) +"kwj" = ( +/obj/machinery/door/airlock{ + name = "Instrument Storage" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/fore) +"kwW" = ( +/obj/structure/table/wood, +/obj/item/book/codex_gigas, +/obj/item/clothing/under/suit_jacket/red, +/obj/structure/destructible/cult/tome, +/turf/open/floor/carpet, +/area/library) +"kyA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating, +/area/space/nearstation) "kyF" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/wood, @@ -59072,6 +56966,86 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/science/mixing) +"kBF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/security/prison) +"kCq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/carpet, +/area/crew_quarters/heads/captain) +"kCK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"kDw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"kFf" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "bridge blast door" + }, +/turf/open/floor/plating, +/area/hallway/primary/central) +"kMg" = ( +/turf/open/space/basic, +/area/space/nearstation) +"kMO" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/item/soap, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"kMY" = ( +/obj/machinery/door/airlock{ + desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; + id_tag = "PrivateStudy"; + name = "Private Study" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/library) +"kOA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "holoprivacy"; + name = "Holodeck Privacy"; + pixel_y = 24 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "kPd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/cable{ @@ -59079,6 +57053,26 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"kQg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + alpha = 255; + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"kQk" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) "kQq" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -59090,6 +57084,68 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"kTe" = ( +/obj/structure/shuttle/engine/heater{ + dir = 1 + }, +/turf/closed/wall/mineral/titanium, +/area/space/nearstation) +"lev" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"lfx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "maintdiy"; + name = "Security Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"liD" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"ljN" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "LockerShitter2"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet/locker) +"lmT" = ( +/obj/structure/table/wood/fancy, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 5 + }, +/obj/item/reagent_containers/food/snacks/burger/plain, +/turf/open/floor/wood, +/area/crew_quarters/bar) "lnu" = ( /obj/structure/chair/wood/normal{ dir = 4 @@ -59098,26 +57154,232 @@ icon_state = "wood-broken6" }, /area/maintenance/bar) +"lqe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/sofa, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"lre" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-18" + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) +"lrF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"lrH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"ltC" = ( +/obj/effect/turf_decal/tile/red, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"lwn" = ( +/obj/structure/table, +/obj/item/book/manual/hydroponics_pod_people{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/paper/guides/jobs/hydroponics{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"lyB" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Firing Range"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"lzY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/engine/engine_smes) "lAB" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall, /area/science/circuit) +"lAY" = ( +/obj/structure/closet/lasertag/red, +/obj/item/clothing/under/pj/red, +/obj/item/clothing/under/pj/red, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"lBk" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "lCi" = ( /obj/docking_port/stationary/public_mining_dock{ dir = 8 }, /turf/open/floor/plating, /area/construction/mining/aux_base) +"lDF" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) +"lHE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "maint2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"lJX" = ( +/obj/machinery/light/small{ + brightness = 3; + dir = 8 + }, +/turf/open/floor/plating, +/area/security/prison) "lMg" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/plasteel, /area/science/circuit) +"lNn" = ( +/obj/structure/lattice, +/turf/closed/wall/r_wall, +/area/ai_monitored/nuke_storage) +"lNz" = ( +/obj/structure/sign/mining{ + pixel_y = 7 + }, +/turf/closed/wall, +/area/quartermaster/miningdock) "lQG" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/science/circuit) +"lQR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"lUd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/crew_quarters/theatre) +"lUR" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"maz" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Office"; + req_access_txt = "20" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/crew_quarters/heads/captain) +"maK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/space/nearstation) +"mbl" = ( +/obj/structure/chair/sofa/left, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"mcQ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/closet/wardrobe/black, +/obj/item/clothing/under/skirt/black, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/under/trendy_fit, +/obj/item/clothing/under/trendy_fit, +/obj/item/clothing/under/sundress, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"mdp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"mdQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"mgT" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"mjr" = ( +/obj/structure/reagent_dispensers/keg/milk, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"mnP" = ( +/obj/effect/turf_decal/bot, +/obj/structure/sign/poster/official/pda_ad{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"moa" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"mpA" = ( +/obj/structure/table/wood, +/obj/item/melee/chainofcommand, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/crew_quarters/heads/captain) "mpI" = ( /obj/structure/table/wood, /turf/open/floor/wood{ @@ -59133,6 +57395,28 @@ /obj/effect/spawner/lootdrop/keg, /turf/open/floor/wood, /area/maintenance/bar) +"muq" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) +"mvB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 23 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"mwm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) "mBv" = ( /obj/structure/cable{ icon_state = "1-2" @@ -59144,6 +57428,82 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"mDU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port) +"mFJ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/free_drone{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"mHC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"mHW" = ( +/obj/machinery/vr_sleeper{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/fitness) +"mJU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"mKU" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"mMb" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-14" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "mNi" = ( /obj/machinery/light_switch{ pixel_x = -20 @@ -59151,6 +57511,35 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/circuit) +"mOL" = ( +/obj/structure/bed, +/obj/machinery/button/door{ + id = "Dorm6"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/spawner/lootdrop/bedsheet, +/turf/open/floor/wood, +/area/crew_quarters/dorms) +"mPj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/departments/restroom{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "mPE" = ( /obj/machinery/chem_dispenser/drinks, /obj/structure/table/wood, @@ -59163,14 +57552,149 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/circuit) +"mRj" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"mTi" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck{ + pixel_y = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"mTj" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"ncB" = ( +/obj/machinery/camera{ + c_tag = "Gravity Generator Room"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"ncI" = ( +/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/structure/table, +/turf/open/floor/plasteel, +/area/security/prison) +"ndo" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"neq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"neT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "nfm" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/wood, /area/maintenance/bar) +"nhn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"niE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, +/area/maintenance/port) +"nlN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"nnb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) "noK" = ( /obj/structure/girder, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"npV" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"nqP" = ( +/obj/machinery/vending/cola/red, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"nuI" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"nvw" = ( +/obj/machinery/photocopier{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/open/floor/wood, +/area/library) "nxv" = ( /obj/machinery/power/apc{ areastring = "/area/construction"; @@ -59182,10 +57706,31 @@ }, /turf/open/floor/plating, /area/construction) +"nxN" = ( +/turf/closed/wall/mineral/titanium, +/area/space/nearstation) +"nyF" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood, +/area/bridge/meeting_room) +"nzc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/theatre) "nzh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"nDn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) "nGt" = ( /obj/structure/cable{ icon_state = "1-2" @@ -59197,16 +57742,55 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"nGN" = ( +/obj/structure/piano, +/obj/structure/window/reinforced, +/turf/open/floor/carpet, +/area/crew_quarters/theatre) +"nNY" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"nOD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/light_construct{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "nRG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"nWU" = ( -/obj/machinery/smartfridge/organ/preloaded, -/turf/closed/wall, -/area/medical/sleeper) +"nTu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel, +/area/security/prison) +"oaB" = ( +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"oaP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"oaT" = ( +/obj/structure/window, +/turf/open/floor/wood, +/area/crew_quarters/bar) "oce" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -59217,26 +57801,263 @@ /obj/machinery/vending/kink, /turf/open/floor/plating, /area/maintenance/bar) +"odR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"ogU" = ( +/obj/machinery/door/airlock/security{ + name = "Firing Range"; + req_access_txt = "2" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/security/prison) +"ohe" = ( +/obj/machinery/hydroponics/constructable, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29 + }, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "olr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/circuit) +"ope" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/storage/tech) +"oqa" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/marker_beacon{ + anchored = 1; + icon_state = "markerburgundy-on"; + light_power = 3; + light_range = 3; + name = "Docking Beacon"; + picked_color = "Burgundy" + }, +/turf/open/space/basic, +/area/space/nearstation) +"osd" = ( +/obj/structure/sign/poster/contraband/tools, +/turf/closed/wall, +/area/storage/primary) +"ove" = ( +/obj/machinery/door/airlock/command{ + name = "Conference Room"; + req_access_txt = "19" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/bridge/meeting_room) +"ovG" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/sign/poster/official/love_ian{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"oxA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"oAc" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"oAV" = ( +/obj/structure/table, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"oBB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating, +/area/space/nearstation) "oDF" = ( /obj/machinery/light, /turf/open/floor/plating, /area/engine/engineering) +"oFY" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"oGS" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "oHU" = ( /obj/structure/cable{ icon_state = "1-2" }, /turf/open/floor/plasteel, /area/science/circuit) +"oIt" = ( +/obj/machinery/button/door{ + desc = "Bolts the doors to the Private Study."; + id = "PrivateStudy"; + name = "Private Study Lock"; + pixel_x = 25; + pixel_y = 25; + req_access_txt = ""; + req_one_access_txt = "28;63" + }, +/turf/open/floor/wood, +/area/library) +"oIx" = ( +/obj/machinery/button/door{ + id = "Room Two"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 7; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"oJs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engine_smes) "oKh" = ( /obj/structure/chair/wood/normal{ dir = 8 }, /turf/open/floor/wood, /area/maintenance/bar) +"oKy" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"oLI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"oNq" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"oNN" = ( +/obj/item/electropack/shockcollar, +/obj/item/assembly/signaler, +/turf/open/floor/plating, +/area/security/prison) +"oSk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) +"oSW" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/space/nearstation) +"oTI" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -29 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "oUh" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -59244,6 +58065,138 @@ /obj/machinery/disposal/bin, /turf/open/floor/plasteel/white, /area/science/circuit) +"oVS" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/window, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"oWe" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + desc = "Privacy shutters for the Private Study. Stops people spying in on your game."; + id = "PrivateStudy1"; + name = "Private Study Privacy Shutters" + }, +/obj/effect/spawner/structure/window, +/turf/open/floor/wood, +/area/library) +"oZl" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/sign/departments/security{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"pbw" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"pdg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/window/eastleft{ + name = "Blue Corner" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"pet" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/security/brig) +"pgY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"phP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/space, +/area/solar/starboard/aft) +"pmf" = ( +/obj/structure/reagent_dispensers/foamtank, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/plasteel, +/area/engine/atmos) +"pmj" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"pnl" = ( +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"pnx" = ( +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"pnS" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/marker_beacon{ + anchored = 1; + icon_state = "markerburgundy-on"; + light_power = 3; + light_range = 3; + name = "Docking Beacon"; + picked_color = "Burgundy" + }, +/turf/open/floor/plating, +/area/space/nearstation) "poc" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -59253,6 +58206,41 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"puG" = ( +/obj/structure/closet{ + name = "Suit Closet" + }, +/obj/item/clothing/under/suit_jacket/white, +/obj/item/clothing/under/suit_jacket/tan, +/obj/item/clothing/under/suit_jacket/red, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/under/suit_jacket/green, +/obj/item/clothing/under/suit_jacket/female, +/obj/item/clothing/under/suit_jacket/checkered, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/burgundy, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/under/lawyer/black, +/obj/item/clothing/under/lawyer/blacksuit, +/obj/item/clothing/under/lawyer/blue, +/obj/item/clothing/under/lawyer/bluesuit, +/obj/item/clothing/under/lawyer/female, +/obj/item/clothing/under/lawyer/purpsuit, +/obj/item/clothing/under/lawyer/really_black, +/obj/item/clothing/under/lawyer/red, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"pAE" = ( +/obj/machinery/vending/cola/space_up, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"pGr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "pHl" = ( /obj/structure/table, /obj/item/storage/box/beakers{ @@ -59279,6 +58267,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"pIA" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"pKz" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/closed/wall, +/area/maintenance/port) "pLn" = ( /obj/machinery/conveyor/inverted{ dir = 5; @@ -59286,49 +58284,7 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) -"qeQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/circuit) -"qoW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-18" - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) -"quT" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) -"qIw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/crew_quarters/cryopod) -"qQP" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-14" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"rcD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/science/circuit) -"rfW" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) -"rjA" = ( +"pMv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -59337,23 +58293,463 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"pNj" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/fore) +"pNO" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"pQA" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"pRx" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/computer/slot_machine, +/obj/item/coin/iron, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"pUo" = ( +/obj/structure/fireplace, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"pVa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/crew_quarters/heads/captain) +"pWH" = ( +/obj/structure/closet/crate, +/obj/item/book/manual/wiki/telescience, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction, +/obj/item/book/manual/wiki/atmospherics, +/obj/item/book/manual/wiki/detective, +/obj/item/book/manual/wiki/tcomms, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/obj/item/book/manual/wiki/experimentor, +/obj/item/book/manual/wiki/research_and_development, +/obj/item/book/manual/wiki/robotics_cyborgs, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/book/manual/wiki/medicine, +/obj/item/book/manual/wiki/medical_cloning, +/obj/item/book/manual/wiki/infections, +/obj/item/book/manual/ripley_build_and_repair, +/obj/item/book/manual/hydroponics_pod_people, +/obj/item/book/manual/wiki/toxins, +/obj/item/book/manual/wiki/grenades, +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "A Simpleton's Guide to Safe-cracking with Stethoscopes" + }, +/turf/open/floor/wood, +/area/library) +"pWO" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"qaZ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"qcu" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"qdm" = ( +/obj/machinery/autolathe{ + name = "public autolathe" + }, +/turf/open/floor/plasteel, +/area/quartermaster/office) +"qet" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/spawner/structure/window, +/turf/open/floor/grass, +/area/crew_quarters/bar) +"qeQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/science/circuit) +"qeZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/crew_quarters/bar) +"qnd" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/obj/structure/light_construct{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"qqY" = ( +/obj/effect/turf_decal/tile/blue{ + alpha = 255 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + alpha = 255; + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"quT" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/space/nearstation) +"qvo" = ( +/obj/structure/chair/comfy/brown{ + color = "#66b266"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"qwZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"qxb" = ( +/obj/machinery/vr_sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"qzE" = ( +/obj/machinery/door/airlock{ + name = "Shower Room" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/toilet) +"qGM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"qIw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/crew_quarters/cryopod) +"qIT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"qIZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"qKJ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"qKZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/security/execution/transfer) +"qMf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) +"qPl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"qPJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/camera{ + c_tag = "Bar Backroom"; + dir = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"qRq" = ( +/obj/structure/table, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/recharger, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/turf/open/floor/plasteel, +/area/security/prison) +"qVa" = ( +/obj/structure/sign/poster/official/help_others{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"qXl" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"qYi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating, +/area/security/prison) +"qZv" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"rak" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"rcD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/science/circuit) +"rfu" = ( +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/grass, +/area/security/prison) +"rfE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/security/prison) +"rfW" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/maintenance/disposal/incinerator) +"rgv" = ( +/obj/structure/bed, +/obj/effect/spawner/lootdrop/bedsheet, +/turf/open/floor/plating, +/area/security/prison) +"rkR" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/crew_quarters/theatre) +"rmC" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/space/basic, +/area/space) "rmX" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/beer, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"rmY" = ( +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"rnY" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/space/nearstation) +"rrJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/space/nearstation) +"ruS" = ( +/obj/structure/closet/athletic_mixed, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"rAJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/door/window/westright{ + name = "Red Corner" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "rBq" = ( /obj/item/clothing/head/kitty, /obj/item/clothing/under/maid, /obj/item/clothing/mask/muzzle, /turf/open/floor/plating, /area/maintenance/bar) +"rEQ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"rJv" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/sign/poster/official/space_cops{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "rKP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /turf/open/floor/plating, /area/construction) +"rKZ" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"rLg" = ( +/turf/closed/wall/r_wall, +/area/hallway/primary/central) +"rMI" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/space, +/area/solar/port/fore) "rMN" = ( /obj/structure/bed, /obj/item/tank/internals/anesthetic, @@ -59376,6 +58772,29 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"rTD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"rXv" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "saK" = ( /obj/structure/closet/crate, /obj/item/target/alien, @@ -59388,6 +58807,43 @@ /obj/item/gun/energy/laser/practice, /turf/open/floor/plasteel/white, /area/science/circuit) +"sbs" = ( +/turf/open/floor/plating, +/area/space/nearstation) +"sfO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/wardrobe/pjs, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/accessory/maidapron, +/obj/item/clothing/accessory/maidapron, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"sfY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"shX" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"siG" = ( +/obj/machinery/vending/clothing, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "slk" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -59400,16 +58856,101 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"sno" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/cohiba_robusto_ad{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"srw" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"svt" = ( +/obj/structure/target_stake, +/obj/item/target/syndicate, +/turf/open/floor/plating, +/area/security/prison) +"sxe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"sxs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/item/storage/box/beakers{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) +"szF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) +"szH" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer, +/area/security/prison) "sAM" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" }, /area/maintenance/bar) +"sBu" = ( +/obj/machinery/vr_sleeper{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/crew_quarters/fitness) +"sCo" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space, +/area/solar/starboard/fore) "sEt" = ( /turf/open/floor/wood{ icon_state = "wood-broken7" }, /area/maintenance/bar) +"sEJ" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/abandoned_gambling_den"; + name = "Abandoned Gambling Den APC"; + pixel_y = -24 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "sLv" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -59425,6 +58966,29 @@ /obj/machinery/door/airlock/maintenance/abandoned, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"sOO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"sPj" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/gold, +/obj/item/coin/gold, +/obj/item/coin/gold, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sPA" = ( +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "sQX" = ( /turf/open/floor/plating, /area/space) @@ -59436,6 +59000,38 @@ /obj/structure/chair/office/light, /turf/open/floor/plasteel/white, /area/science/circuit) +"sTt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"sVN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"sWr" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) "sWR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -59445,6 +59041,16 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) +"sXo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/fitness) "sXy" = ( /obj/machinery/door/airlock/external{ name = "Security External Airlock"; @@ -59463,17 +59069,54 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/hallway/secondary/service) +"taU" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/window, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"tcE" = ( +/obj/structure/door_assembly/door_assembly_mai, +/obj/item/electronics/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"thl" = ( +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/sleeper) +"thY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"tku" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/crew_quarters/theatre) "tkU" = ( /turf/open/floor/wood{ icon_state = "wood-broken5" }, /area/maintenance/bar) -"tlO" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "applebush" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +"tpb" = ( +/turf/open/floor/plating/foam, +/area/space/nearstation) "tqg" = ( /obj/machinery/cryopod{ dir = 4 @@ -59489,10 +59132,100 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) +"trk" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) +"trl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"trM" = ( +/obj/structure/table, +/obj/item/instrument/guitar{ + pixel_x = -7 + }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/violin, +/obj/item/instrument/trombone, +/obj/item/instrument/saxophone, +/obj/item/instrument/piano_synth, +/obj/item/instrument/recorder, +/obj/item/instrument/accordion, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"tsY" = ( +/obj/structure/urinal{ + pixel_y = 32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"ttp" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"ttF" = ( +/obj/machinery/vr_sleeper{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/crew_quarters/fitness) "tur" = ( /obj/item/restraints/handcuffs/fake, /turf/open/floor/plating, /area/maintenance/bar) +"tyg" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"tDE" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/floor/plating, +/area/space/nearstation) +"tEy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "tMl" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/showroomfloor, @@ -59503,11 +59236,39 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) +"tPS" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/theatre) "tPT" = ( /obj/machinery/chem_dispenser/drinks/beer, /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) +"tQu" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "tRe" = ( /obj/machinery/chem_master, /turf/open/floor/plasteel/white, @@ -59518,12 +59279,52 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"tTh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"tTt" = ( +/obj/structure/sign/departments/restroom, +/turf/closed/wall, +/area/crew_quarters/toilet) +"tVp" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"tVQ" = ( +/obj/structure/table, +/obj/item/folder/blue, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "tXL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"tYn" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/security/prison) +"uao" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "uaw" = ( /obj/machinery/power/apc{ areastring = "/area/storage/art"; @@ -59536,18 +59337,128 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"udn" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "udp" = ( /obj/item/crowbar/large, /obj/structure/rack, /obj/item/flashlight, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"udS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"ueP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"uhG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"uhH" = ( +/obj/item/wrench, +/obj/structure/rack, +/obj/item/weldingtool/hugetank, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"uip" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"uiR" = ( +/obj/structure/lattice, +/turf/closed/wall, +/area/security/prison) +"uiT" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "ujF" = ( /obj/machinery/cryopod{ dir = 4 }, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"ukL" = ( +/obj/structure/closet/boxinggloves, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"ulP" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"unN" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/window{ + dir = 1 + }, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "uoB" = ( /obj/structure/table/reinforced, /obj/item/multitool, @@ -59558,12 +59469,25 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"urE" = ( -/obj/machinery/autolathe{ - name = "public autolathe" +"uqO" = ( +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/contraband/fun_police{ + pixel_x = 32 }, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/hallway/primary/fore) +"urH" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"usD" = ( +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) "usO" = ( /obj/machinery/vending/snack/random, /obj/machinery/light/small{ @@ -59580,10 +59504,75 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"uuT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "uvZ" = ( /obj/structure/mineral_door/wood, /turf/open/floor/wood, /area/maintenance/bar) +"uBW" = ( +/turf/closed/wall, +/area/crew_quarters/abandoned_gambling_den) +"uFF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/space/nearstation) +"uGq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/engine/engine_smes) +"uJq" = ( +/obj/machinery/vr_sleeper{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/fitness) +"uJI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"uNs" = ( +/obj/item/flashlight/lamp/green{ + pixel_x = -3; + pixel_y = 22 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 5 + }, +/obj/structure/dresser{ + desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; + name = "Dresser"; + pixel_y = 7 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "uNu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -59594,6 +59583,26 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"uOb" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"uOn" = ( +/obj/structure/chair/office/light, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "uPT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -59601,6 +59610,31 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"uTQ" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"uUC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space, +/area/solar/port/aft) +"uVo" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + on = 0; + pixel_x = -7; + pixel_y = 12 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "uVS" = ( /obj/structure/cable{ icon_state = "4-8" @@ -59613,20 +59647,23 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"uZN" = ( -/obj/machinery/light{ +"uWs" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/chair{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/turf/open/floor/plasteel, +/area/hallway/primary/fore) +"uXD" = ( +/obj/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) +"vbc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-03" - }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/hallway/secondary/entry) +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) "vbD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -59638,6 +59675,48 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) +"vbP" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/structure/extinguisher_cabinet{ + pixel_x = 5; + pixel_y = -32 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/crew_quarters/fitness) +"vfe" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"vgX" = ( +/obj/item/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 27 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"vhc" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/washing_machine, +/turf/open/floor/plasteel/freezer, +/area/security/prison) +"viT" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "vjm" = ( /obj/structure/table/wood, /obj/item/reagent_containers/rag, @@ -59646,11 +59725,43 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"vnw" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"voH" = ( +/obj/structure/closet/wardrobe/cargotech, +/obj/item/radio/headset/headset_cargo, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"vpY" = ( +/obj/structure/closet/lasertag/blue, +/obj/item/clothing/under/pj/blue, +/obj/item/clothing/under/pj/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"vqa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/departments/custodian{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "vsM" = ( /obj/machinery/power/apc/auto_name/south, /obj/structure/cable, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"vtO" = ( +/obj/structure/sign/poster/official/twelve_gauge, +/turf/closed/wall/r_wall, +/area/ai_monitored/security/armory) "vxh" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -59662,7 +59773,7 @@ "vzp" = ( /obj/structure/table/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/stock_parts/cell/high, @@ -59675,6 +59786,36 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"vAP" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/wood, +/area/security/vacantoffice) +"vAZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"vBb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"vBN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "vCb" = ( /obj/machinery/rnd/production/techfab/department/service, /turf/open/floor/plasteel, @@ -59683,6 +59824,48 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/science/circuit) +"vEA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 20 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 20 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/item/reagent_containers/food/drinks/britcup, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"vGp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/power/apc{ + areastring = "/area/quartermaster/storage"; + name = "Cargo Bay APC"; + pixel_x = 1; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/port) "vHj" = ( /obj/machinery/door/airlock/public/glass{ name = "Cryogenics " @@ -59696,17 +59879,104 @@ "vHY" = ( /turf/open/floor/plating, /area/science/mixing) +"vKR" = ( +/obj/machinery/computer/arcade/minesweeper{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/security/prison) +"vMd" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"vOw" = ( +/obj/structure/table/wood, +/obj/item/instrument/guitar, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"vPl" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/space/nearstation) "vPE" = ( /obj/machinery/light{ dir = 4 }, /turf/open/floor/plasteel/white, /area/science/circuit) +"vQS" = ( +/obj/structure/sign/poster/contraband/smoke{ + desc = "This poster reminds us all that the Detective is a parasite. Year after year, they must get replacement lungs because of their addiction. "; + pixel_y = -32 + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"vXW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/table, +/obj/item/coin/gold, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"wab" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"wbB" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/closet/crate/wooden/toy, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/obj/item/megaphone/clown, +/turf/open/floor/plasteel, +/area/crew_quarters/theatre) +"wcX" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/pen/fountain, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"wdQ" = ( +/obj/structure/fireplace, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 23 + }, +/turf/open/floor/plating, +/area/maintenance/port) "wfR" = ( /obj/item/electropack/shockcollar, /obj/item/assembly/signaler, /turf/open/floor/plating, /area/maintenance/bar) +"wgV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/fitness) "wkN" = ( /turf/closed/wall, /area/science/circuit) @@ -59751,18 +60021,154 @@ }, /turf/closed/wall, /area/hallway/secondary/service) +"wCs" = ( +/obj/machinery/door/airlock{ + name = "Theatre Backstage"; + req_access_txt = "46" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/maintenance/fore) +"wDQ" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "applebush" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "wHz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"wJq" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space) +"wLe" = ( +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) +"wNd" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"wSg" = ( +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/structure/chair/sofa/left, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"wTu" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"wTC" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/library) +"wUY" = ( +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) +"wVp" = ( +/obj/machinery/camera{ + c_tag = "Locker Room South"; + dir = 8 + }, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"wWo" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"wWF" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Gravity Generator"; + req_access_txt = "11" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/engine/gravity_generator) +"wZk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) +"wZI" = ( +/obj/effect/spawner/lootdrop/keg, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"xah" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/library) +"xbZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/security/prison) +"xcw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "xgF" = ( /obj/structure/chair/stool/bar, /turf/open/floor/wood{ icon_state = "wood-broken5" }, /area/maintenance/bar) +"xgY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"xgZ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/plasteel, +/area/security/brig) "xhV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -59783,31 +60189,154 @@ }, /turf/open/floor/plating, /area/hallway/secondary/service) +"xlX" = ( +/obj/machinery/door/firedoor, +/turf/open/space/basic, +/area/space) +"xqV" = ( +/obj/structure/table/wood, +/obj/item/instrument/piano_synth, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"xwI" = ( +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/machinery/vending/wardrobe/curator_wardrobe, +/turf/open/floor/carpet, +/area/library) +"xyp" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/vault, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/nuke_storage) +"xzw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 5; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"xzU" = ( +/obj/structure/reagent_dispensers/keg/semen, +/turf/open/floor/plating, +/area/maintenance/bar) +"xCs" = ( +/obj/structure/chair/sofa, +/obj/structure/window{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"xCE" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "xEu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"xFY" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-06" - }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/hallway/secondary/entry) "xIa" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"xIU" = ( +/obj/item/chair/wood, +/turf/open/floor/plating, +/area/maintenance/port) +"xNd" = ( +/obj/machinery/door/airlock{ + desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; + id_tag = "PrivateStudy"; + name = "Private Study" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/wood, +/area/library) +"xPX" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"xWW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/space, +/area/solar/starboard/fore) +"xXW" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"xZr" = ( +/obj/structure/sign/poster/official/fruit_bowl{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/primary/starboard) +"xZN" = ( +/obj/machinery/power/apc{ + areastring = "/area/ai_monitored/nuke_storage"; + dir = 1; + name = "Vault APC"; + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"yar" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "ycu" = ( /obj/structure/cable{ icon_state = "2-4" @@ -59819,6 +60348,47 @@ /obj/machinery/suit_storage_unit/rd, /turf/open/floor/plasteel, /area/science/mixing) +"ydZ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) +"yeR" = ( +/obj/structure/sign/poster/contraband/space_up{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"yfs" = ( +/obj/machinery/power/apc{ + areastring = "/area/security/detectives_office"; + dir = 4; + name = "Detective's Office APC"; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"yhO" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/bluecherrycupcake{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) (1,1,1) = {" aaa @@ -65840,11 +66410,11 @@ aaa aaa aaa aaa -cdh +pnS aaa aaa aaa -cdh +pnS aaa aaa aaa @@ -65857,7 +66427,7 @@ aaa aaa aaa aaa -aVw +wJq aaa aaa aaa @@ -66091,9 +66661,9 @@ aaa aaa aaa aaa -cdh +pnS aaa -cdh +pnS aaa aaa aaa @@ -66105,9 +66675,9 @@ gXs aaa aaa aaa -cdh +pnS aaa -cdh +pnS aaa aaa aaa @@ -66354,11 +66924,11 @@ gXs aaa aaa gXs -apv +viT gXs gXs gXs -apv +viT gXs aaa aaa @@ -66604,11 +67174,11 @@ aaa aaa aaa aaa -apv -apv +viT +viT gXs aag -apv +viT gXs gXs aaa @@ -66618,11 +67188,11 @@ aaa aaa gXs gXs -apv -apv -aQd +viT +viT +pNO aag -apv +viT aaa aaa aaa @@ -66861,11 +67431,11 @@ aaa aaa aaa aaa -aGk -aQe +kyA +maK aaa -aQe -aRx +maK +hIi gXs aoV aaa @@ -66875,11 +67445,11 @@ aaa aaa aaa gXs -aGk -aQe +kyA +maK aaa -aQe -aRx +maK +hIi aaa aaa aaa @@ -67118,11 +67688,11 @@ aaa aaa aaa aaa -aab +uFF aaa cpe aaa -asL +eYr aaa aaa aaa @@ -67132,11 +67702,11 @@ aaa aaa aaa aaa -aab +uFF aaa cwV aaa -asL +eYr aaa aaa aaa @@ -67374,7 +67944,7 @@ aaa aaa aaa aae -alN +kMg gXs aaa aaa @@ -67631,7 +68201,7 @@ aaa aaa aaa aaa -alN +kMg gXs aaa aaa @@ -67888,7 +68458,7 @@ aaa aaa aaa aaa -alN +kMg gXs aaa aaa @@ -68145,7 +68715,7 @@ aaa aaa aaa aaa -alN +kMg gXs aaa cqq @@ -68402,7 +68972,7 @@ aaf aaf aaf aaa -alN +kMg arB asE cyb @@ -69175,7 +69745,7 @@ apN apN apN apJ -xFY +hUC ayk awW aAD @@ -69199,7 +69769,7 @@ aaa aaa aaa arB -uZN +dqG ayk awW aAD @@ -70475,7 +71045,7 @@ aaa awW aOh ayl -bRf +cPO aRY awW aaa @@ -70487,7 +71057,7 @@ awW awZ ayl ayl -aQR +bgi awW aaa aaa @@ -71771,7 +72341,7 @@ awW arB awZ aym -qoW +lre awW aaf aaa @@ -73052,7 +73622,7 @@ aUO aUy aWm aWf -bcW +vAP czK bhN bcl @@ -74070,7 +74640,7 @@ aHy ayl aKk aLA -aHD +iRI aNf aLA aQD @@ -76096,8 +76666,8 @@ ady ady ady ady +rMI ajq -aTp ajW akB alh @@ -76140,9 +76710,9 @@ aXQ aXQ aPz aPz -bcJ +dSI aPz -bkg +bhQ bjj bkF aaa @@ -76392,14 +76962,14 @@ aPA aPA aPA aXQ -baO +aZt aXQ -bdV +ljN aPz -axS -bgs -biM -bkg +eTc +xIU +hKX +bhQ bjj bkF aaa @@ -76644,20 +77214,20 @@ aNm aOl aPA aQO +aSh aTw aUU -cek aWn aXQ -bbL +aZv aXQ -bgl +bbL aPz -aEb -bhK -biZ -bvn -bml +bdJ +fFp +bgr +niE +mDU bkF aaa aaa @@ -76890,7 +77460,7 @@ ayw atN aAV aBQ -bbA +aDh aDo aFQ aHe @@ -76908,12 +77478,12 @@ aTy aWy aYe bbq -bcS +aZw aPz -aEc -bhP -bjD -bkg +bct +bfa +ftK +bhQ bjk bkE aaa @@ -77163,14 +77733,14 @@ aSV aUo aUX aXp -bct -bdJ -bgr +baO +aZo +baw aPz -aSG -bhQ -bjW -bwP +wdQ +cBn +bgs +pKz bjk bkF aaa @@ -77414,9 +77984,9 @@ aLE aLE aOn aPA -aQQ +aQP aQN -aTz +aTB aUt aWo aXQ @@ -77427,7 +77997,7 @@ aPz aPz aPz aPz -bkg +bhQ bjk aPz aaa @@ -77471,7 +78041,7 @@ ccb ccb ccb aaa -aUf +fcu aaa ccb ccb @@ -77666,12 +78236,12 @@ bxk aDo aDo aIX -blt +osd aLE aLE aOp aPA -aMg +aQR aQN aQN aUt @@ -77680,7 +78250,7 @@ aQN aQN aQN aQN -bfe +jKM bbO aPA bgt @@ -77728,7 +78298,7 @@ aaa aaf aaa aaa -aUg +uUC aaa aaa aaf @@ -77743,7 +78313,7 @@ aaa aaa aaa aaa -aaa +wJq aaa aaa aaa @@ -77930,15 +78500,15 @@ aOl aPC aQN aQN -aTB -aUq -aUV -aXv -bbr +aTz +aUp +rAJ +aXr +aZx aQN aQN cBh -bit +bdL aPA bgt bhR @@ -77985,7 +78555,7 @@ aaf aaf aaf aaf -aUg +uUC aaf aaf aaf @@ -78178,23 +78748,23 @@ aBQ aDn aDo aDo -aFU +aHD aIZ aBQ aLE aLE aOq aPD -aQV +aQT aQN aTC -aUr +aUs aUY -aXw -bbU +aXv +aYS aQN aQN -bfe +jKM bbO aPA aSg @@ -78437,18 +79007,18 @@ aDo aDo aDo aIY -blt +osd aLE aLE aOl aPA -aQX +siG aQN aTC -aUr -aYX -aXx -bcu +aUs +qIZ +aXt +taU aQN aQN aPA @@ -78691,7 +79261,7 @@ aAY aBQ aDp aDo -aFS +aFU aDo aJb aKp @@ -78699,13 +79269,13 @@ aLE aLE aOl aPE -aQY +aQV aQN aTC -aUs -aWB -aXx -bcu +aUu +rTD +aXt +taU aQN aQN aZB @@ -78936,7 +79506,7 @@ alU aaf aaH alU -aQT +arO amC amC avc @@ -78956,13 +79526,13 @@ aLH aLE aOl aPA -aSX +aQU aQN -aTD -aUu -aXk -aXA -bcw +unN +qXl +pdg +aXw +oVS aQN aQN aZA @@ -79213,7 +79783,7 @@ aLK aLK aOr aPA -aTx +aQX aQN aSi aUv @@ -79222,8 +79792,8 @@ aTy aTy aTy aTy -bcT -chZ +bbs +bcw bfd bgw aZE @@ -79470,18 +80040,18 @@ aLJ aLE aOl aPA -aTA +jDh aQN -aUp +aTD +gDv aUZ -aXr aYU aYU aYU aYU aYU -ckE -bTt +bcu +bfe aYb aZE bjm @@ -79713,15 +80283,15 @@ aoV aaf avY axo -ayB -aaa -aaf -aaa -aaf -aaa -aaf -aaa -aaa +arP +iCE +joc +aGD +wbB +aCr +eDv +rkR +eDv aKu aLM aLF @@ -79731,14 +80301,14 @@ aPG aPG aPG aPG -aZx +puG aQW aQW aQW aQW -bdL +wVp aPA -clP +jOF aYb aZE bjp @@ -79967,25 +80537,25 @@ aaf aoV aoV aoV -aoV +aaa avY axo -ayA -aaf -aBa -aBa -aBa -aBa -aBa -aBa -aaf +arP +usD +fZD +aGr +aHI +kmw +qIT +trl +eDv aKt aLL bDe aOl aPF -aSh -aQt +aQY +aSk aTE aPG aPA @@ -80227,15 +80797,15 @@ aaf aaf avY axo -ayA -aaa -aBa -aBT -aDs -aEN -aGb -aBa -aaa +arP +aCh +oSk +dCk +aHK +aCr +lUd +wab +eDv aKt aLN aLE @@ -80246,16 +80816,16 @@ aRa aTG aPG aWu -aYa +aYc aZD aZD -hcE +hVk aZD aZD bff -bfk +vGp aZE -bgx +voH bjr ama bmh @@ -80314,18 +80884,18 @@ bLv bLv bLv aaa +uXD +uXD +uXD +uXD +uXD +uXD +uXD +uXD +uXD aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +wJq aaa aaa aaa @@ -80486,13 +81056,13 @@ avZ axp ayC azH -aBb -aBS -aDr -aEM -aGa -aHF -aJd +eJz +aGv +aCr +aCr +lUd +wab +eDv aKv aLN aLE @@ -80502,8 +81072,8 @@ aQZ aRa aTF aPG -aWw -aYc +aSX +ffm aZF aZF aZF @@ -80571,15 +81141,15 @@ cqK crl bLv aaa -aaa -aaa -aae -aaa -aaa -aaa -aaa -aaa -aaa +uXD +ctv +ctv +ctv +ctv +ctv +ctv +ctv +uXD aaa aaa aaa @@ -80740,16 +81310,16 @@ aGh aqR aqR awb -axo -ayA -aaa -aBa +djB +wCs +eWl +eyC aBV -alu -aEM -aGd -aHG -aJe +hot +nzc +jRs +aBU +aMr aKw aLP aMR @@ -80764,7 +81334,7 @@ aXJ bgA aZp baY -aYZ +bcJ bcF bfg bgA @@ -80828,15 +81398,15 @@ cAQ crm bLv aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +uXD +uXD +uXD +uXD +uXD +uXD +uXD +uXD +uXD aaa aaa aaa @@ -81000,13 +81570,13 @@ awa axq ayD azI -aBc +dyS aBU -aDt -aEO -aGc -aHF -aJd +nGN +gvC +lUd +tPS +eDv aKb aLN aMQ @@ -81053,7 +81623,7 @@ aoV bCq bHE bHE -bad +iQA cdb bCq bVE @@ -81087,17 +81657,17 @@ bLv aaa aaa aaa +gXs aaa aaa aaa +gXs aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +uXD +uXD +uXD aaa aaa aaa @@ -81254,16 +81824,16 @@ aaa aaa aag avY -axo +hKI ayA -aaa -aBa -aBW +fLb +aMr +sxe aDv -aEP -aGe -aBa -aaa +gvC +lUd +tPS +eDv aKt aLN aMS @@ -81278,7 +81848,7 @@ aXM bfi cBi bbS -bdM +bcS bbt bfi beD @@ -81341,20 +81911,20 @@ bCq bCq bCq bCq +gXs +gXs +aaa +gXs aaa aaa aaa +gXs aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +uXD +ctv +uXD aaa aaa aaa @@ -81511,21 +82081,21 @@ aaa aaa aag avY -axo +hKI ayA -aaf -aBa -aBa -aBa -aBa -aBa -aBa -aaf +dLh +aMr +aMr +aOH +gvC +tku +joq +eDv aKt aLN aMS aOi -tlO +wDQ aPK aSl aTH @@ -81580,14 +82150,14 @@ mrR dKP odx rBq -bat +xzU bCq bUs bLv aaa bLv bJf -cfS +ccd bCq aaa aaa @@ -81596,22 +82166,22 @@ aaa aaa aaf aaf -cig +aaa aaf +gXs +muq +crn +bij +bij +bij +bij +bij +vbc +btG aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +uXD +ctv +uXD aaa aaa aaa @@ -81770,14 +82340,14 @@ aag avY axs ayF -aaa -aaf -aaa -aaf -aaa -aaf -aaa -aaa +xqV +vOw +eIe +aOH +eDv +eDv +fXH +eDv aKx aLN aMS @@ -81792,7 +82362,7 @@ aWC baS aZI baS -bdW +cCn bdS bdU ckQ @@ -81807,7 +82377,7 @@ bbR btu bbR bOL -bPR +lNz byF bwW bGm @@ -81849,26 +82419,26 @@ cjJ cjJ cjJ cjJ -cjJ -cjJ -cjJ -aaa +oJs +uGq +uGq +bij crn -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bij +bij +ilO +udS +bnT +bph +bsc +bsc +bsc +mdQ +btG +gXs +uXD +ctv +uXD aaa aaa aaa @@ -82044,7 +82614,7 @@ aPK aSm aTI aPK -aXs +aWB cCj apd apd @@ -82109,23 +82679,23 @@ cov cpj cpS cjJ +jUc +mdQ +btG +uOn +eeD +srw +bnV +bph +bih +big +bii +bsc +btG aaa -crn -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +uXD +ctv +uXD aaa aaa aaa @@ -82301,9 +82871,9 @@ aPK aSn aTK aPK -aXt -aZo -aYj +yfs +lev +asW baW bLE bLG @@ -82365,24 +82935,24 @@ cnN cox cpl cpU -cjJ -aaf -crn -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +epP +oLI +oLI +gro +oLI +oLI +qZv +wWF +bph +big +bgN +bkZ +bsc +btG aaa +uXD +ctv +uXD aaa aaa aaa @@ -82519,7 +83089,7 @@ aaa acd acd acd -afr +eMV acd acd aaa @@ -82562,8 +83132,8 @@ apd aYi aqW aqW -aVT -bSO +bbQ +sno apd aZH aZK @@ -82623,23 +83193,23 @@ cow cpk cpT cjJ +jUc +qwZ +btG +qPJ +nlN +lQR +bnV +bph +bii +big +bih +bsc +btG aaa -crn -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +uXD +ctv +uXD aaa aaa aaa @@ -82774,10 +83344,10 @@ abc abc afu abc -age -aeE -afs -ahw +iSB +kBF +knR +eWv acd aaa aaa @@ -82841,7 +83411,7 @@ bwY byJ bwe bAc -bwL +bBI bGn bGn bGn @@ -82878,25 +83448,25 @@ clG cnP coz cpn -cjJ -cjJ -aaa -crn -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lzY +lzY +bgO +sWr +bgO +trk +bsb +iaq +bnW +bph +bsc +ncB +bsc +qwZ +btG +gXs +uXD +ctv +uXD aaa aaa aaa @@ -83031,11 +83601,11 @@ aea aeH aft abc -agH -aeF -alr -ajt -afr +fyr +xbZ +svt +dQy +eMV aaa aaa aiU @@ -83077,7 +83647,7 @@ aWG aZa baX bcH -bSZ +bdE apd aZH bnL @@ -83138,22 +83708,22 @@ cpm cjJ aaf aaf -crn aaa aaa +gXs +szF +bgO +bgO +bgO +bgO +bgO +bgO +wZk +btG aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaT -aaT -aaa +eMb +ctv +uXD aaa aaa aaa @@ -83277,7 +83847,7 @@ aaa aaa gXs gXs -brT +sbs abc abu abu @@ -83289,10 +83859,10 @@ aeJ afw abc abc -aeF +xbZ aay -ajt -akd +dQy +uiR aaf aaf aiU @@ -83360,7 +83930,7 @@ bCq bHD bJe bCq -cib +vnw bHE bHE bHE @@ -83395,22 +83965,22 @@ cjJ cjJ aaa aaa -crn -aaf -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaT aaa -aaf +aaa +gXs +aaa +aaa +gXs +aaa +aaa +gXs +aaa +aaa +aaa +aaa +uXD ctv aaT -aaT aaa aaa aaa @@ -83546,9 +84116,9 @@ aeI afv agf abc -aeF +xbZ aay -ajt +dQy aiT aiT aiV @@ -83581,17 +84151,17 @@ aKA aLN aMS aOz -qQP +mMb aPQ aSa aSr aSr apd -asW +aYZ bLE aqW aqW -bTq +vQS apd beA bqp @@ -83599,7 +84169,7 @@ cNG cNJ bLF aZK -urE +qdm bbR bqt cBq @@ -83652,21 +84222,21 @@ cpo cjJ aaa aaa -crn -aaf -aaT -ctv -ctv -ctv -ctv -ctv -ctv -ctv -aaT aaa -aaf -ctv -ctv +aaa +gXs +aaa +aaa +gXs +aaa +aaa +gXs +aaa +aaa +aaa +aaa +uXD +uXD aaT aaa aaa @@ -83790,8 +84360,8 @@ aaa aaa aaa aai -cmH -aay +oNN +lJX abe abw acc @@ -83803,9 +84373,9 @@ aeL afy agh abc -aeM -afz -aju +qYi +dEZ +dIH aiT ajs akb @@ -83844,7 +84414,7 @@ aTL aTP aWD apd -aYh +aYj aZL baU baU @@ -83860,8 +84430,8 @@ bnJ bbR bbR bbR -bWk -bYG +bty +buJ bwe bxE byM @@ -83909,21 +84479,21 @@ cpp cjJ aaf aaf -cig -aaf -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaf -aaf -aaf -aaf +aaa +aaa +gXs +aaa +aaa +gXs +aaa +aaa +gXs +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -84047,7 +84617,7 @@ aaa aaa gXs aai -cmI +rgv aay abd abv @@ -84060,9 +84630,9 @@ aeK afx agg abc -ajX -alx -alY +qRq +npV +lyB aiU ajr aka @@ -84152,7 +84722,7 @@ bLw bLw bLw caq -bCA +cbw bHE ciT bCq @@ -84178,7 +84748,7 @@ aaf aaa aaa aaa -aaf +aaa aaa aaa aaa @@ -84305,9 +84875,9 @@ aaf aaf ctv acd -aaM -aaP -aaY +tYn +abg +qKZ aby aby aby @@ -84317,12 +84887,12 @@ aeN afA afA abc -afq -agv -ajY -akC -akE -akJ +nTu +fLX +rfE +hYH +aju +akd akK als ame @@ -84387,14 +84957,14 @@ bCn bGq bGq bGq -bGq +tyg bLw bGq bGq bGq bLw bGq -bGq +tyg bTD bUx bVI @@ -84409,7 +84979,7 @@ bVI bVI bVI bTA -bHF +sOO bHE bHE bHE @@ -84420,7 +84990,7 @@ cnr cnU chD cpq -bVH +cpV cqw cqO crp @@ -84563,26 +85133,26 @@ aai aai abf aat -aaU -abg +vKR +abx acd acC ada adF -aad -abz aef -aeD +aeM +afz +ogU aav +ueP +dfH +oAV +jSk +ajt akc -alM -alZ -akD -akF -alj -all -alm -alo +akJ +alr +amd amL anu alq @@ -84666,8 +85236,8 @@ bWB bWB bVI cax -cbw -cby +cbx +cdh ciU cjK ckA @@ -84885,12 +85455,12 @@ aYl bBi aLY bnN -bTv +boY bqw aJq aJq aYl -bTw +ovG aLX aJq aJq @@ -84923,8 +85493,8 @@ cdd cea bVI caz -cbx -ccu +cby +cdj cdv cem cem @@ -85073,8 +85643,8 @@ aaf aai aan aaw -aaD -aaL +aaB +ncI aaJ aat abh @@ -85328,9 +85898,9 @@ aaa aag aaa aak -aao -aaz -aaE +aap +rfu +aaD aat aat aat @@ -85367,7 +85937,7 @@ ats atY auo axy -ayM +ayN azE aAW aCa @@ -85404,7 +85974,7 @@ bqy cBr bqy buK -bTx +mnP aJw aJq aJq @@ -85436,10 +86006,10 @@ bWB bWB cec bVI -bUw +mFJ ccw chY -clK +ciX cjM ckB ckB @@ -85585,9 +86155,9 @@ aaa aag aaf aaj -aap -aaB -aaF +aao +aax +aaC aat aat adO @@ -85624,7 +86194,7 @@ atu cCi awg axy -ayN +ayM azs aAR aBP @@ -85704,8 +86274,8 @@ ckC ccw cnX coH -cjZ -ckq +cps +cpX cqz cqR ccw @@ -85842,13 +86412,13 @@ aaa aag aaa aal -aaq -aax -aaN +aar +gks +aaF aat -aaV -cmn -cms +aaO +aaW +qvo abB acf abM @@ -85918,11 +86488,11 @@ bqA brW btB buM -aOJ +bwi bmr aMm aJq -byV +xzw bCs bCs bEY @@ -86099,13 +86669,13 @@ aaa aag aaf aaj -aar -aaC -aaO +aaq +iGV +aaE aat -aaW -cmp -cmE +aaN +aaV +itP aat acd abL @@ -86181,10 +86751,10 @@ aMn aJq bBi bCs -bDw -bDz -bFb +bDv bEX +bFb +ope bFa bKt bLx @@ -86361,7 +86931,7 @@ aat aat aat aat -cmr +rKZ aat abD acd @@ -86380,9 +86950,9 @@ agj auj akl akO -afM -afM -amR +pet +pet +hMk anw anz aox @@ -86430,7 +87000,7 @@ bnR bpe bqB bqq -bbQ +btD buO bwk bmr @@ -86662,7 +87232,7 @@ aGq aHO aJl ayW -clV +gYR aJq aOE aJn @@ -86695,7 +87265,7 @@ byP aJq bBi bCs -bDy +bDw bEZ bGv bHH @@ -86707,7 +87277,7 @@ bNJ bNJ bKx cjL -bNL +gbq bNI bUz bVJ @@ -86935,7 +87505,7 @@ bde bcd bcd bcd -bcd +gFY bcd bcd bcd @@ -86999,7 +87569,7 @@ cEL cFb cFu cFI -cdj +cGd cGs cGr ccw @@ -87127,14 +87697,14 @@ aaa aag aaf aai -aaA -aaA +qxb +qxb aaG -aaA -aaQ +qxb +aaP aaX -abj -abG +vhc +fSL acd acD acY @@ -87190,7 +87760,7 @@ aZP bbh bcc bdd -bbX +nyF bfr bgM bif @@ -87207,12 +87777,12 @@ bmr bmr byQ aJq -aJq +bBi bCs bFa bFa -bER bGw +bER bJk bFa bLA @@ -87244,7 +87814,7 @@ cTa ceZ clQ cgR -bUX +dGY coM cpv cqb @@ -87259,11 +87829,11 @@ cqb cAo cGt cgx -chU +jMY csd cHa csd -chW +uhH ccw aaa aaT @@ -87390,7 +87960,7 @@ aai aai aai aai -abx +abj abF acd acd @@ -87408,9 +87978,9 @@ aiz ajg akl akR -afM -afM -amR +pet +pet +hMk anw anz aov @@ -87449,22 +88019,22 @@ bbk bbk bbk bfs -aZM +ove aZM aZM aaf aaf -aaa +kMg aaf -aaa +kMg aaf -aaa -aaa -aaa -aJn +kMg +aaf +kMg +rLg aXf aJq -aJq +bBi bCs bAM bFa @@ -87483,7 +88053,7 @@ bNI bEP bVJ bVJ -bSF +bOM bQd bQP bSt @@ -87648,7 +88218,7 @@ aaa aaf aai abi -bVL +szH ach acK adf @@ -87706,19 +88276,19 @@ bce bdf beb aYv +tVp +lNn aaf aaf +kMg +kMg aaf -aaf -aaa -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aJn +rLg +rLg +rLg +rLg +rLg +rLg aXf aJq byU @@ -87963,22 +88533,22 @@ aZR bbm bec bfu -bgO -bgO -bgO -bmu -bgO -bgO -bgO -bgO -bsb -aaf -aaf -aaf -aJn +nnb +aBa +aBa +aBa +aBa +aBa +aBa +rLg +gGD +tVQ +wcX +dBt +kFf aXf aJq -aJq +bBi bCs bFa bFa @@ -88169,11 +88739,11 @@ cpg acv adi adi -arl +fwD aeW agQ ahv -agX +ahQ aiI aiH ajB @@ -88186,7 +88756,7 @@ anw anz aov aph -ayY +gzJ ard ard ard @@ -88220,22 +88790,22 @@ aZR aZR aZR bft -bgN -bgN -bgN -bmv -bkI -bnT -bpg +oaP +aBa +aBT +aDs +aEN +aGb +aBa bqD bsa -bgO -buP -bwm -bxH +vfe +bsa +bsa +kFf byS aJq -aMh +yar bCs bCs bCs @@ -88423,10 +88993,10 @@ aaa aaZ abH acl -ajC +cxA acL adi -anq +vtO agp agT ahx @@ -88437,11 +89007,11 @@ ajI akl akT aww -afM -amR +pet +hMk anw anz -aJN +oZl apk anw anw @@ -88450,9 +89020,9 @@ anw aVh avj awl -ayZ -aCf -aDh +axC +ayY +rJv azZ azZ azZ @@ -88477,18 +89047,18 @@ bbm bdh bee bfv -bgN -bih -big -bii -bgN -bnV -bph +nDn +aBb +pnx +aDr +aEM +aGa +aHF bqF -bsd -btG +bsa +iFt +buQ buQ -bwn bxI bwa bAg @@ -88734,18 +89304,18 @@ bcf bdg bed bfv -bgN -big -bgN -bkZ -bgN -bnU -bph +sVN +dqD +wTu +alu +aEM +aGd +xyp +bqE +bqE +bqE +bqE bqE -bsc -btF -bph -bsc knx bvW bAf @@ -88952,10 +89522,10 @@ akq akQ agj agj -amS +aiX anx anz -aKS +aoz apm aqd anA @@ -88964,9 +89534,9 @@ atd anA avk awk -aCe -aCV -aHZ +axE +ayZ +uqO aBu aAa aAa @@ -88991,18 +89561,18 @@ bbm bdh bef bfv -bgN -bii -big -bih -bgN -bnV -bph -bqF +jTp +aBc +xZN +aDt +aEO +aGc +aHF +aKG bsf -btG -buS -bwp +lrF +lrF +lrF bxK bwh bAh @@ -89201,7 +89771,7 @@ aeY agt agt ahz -ahQ +aie aiN ajc ajI @@ -89212,7 +89782,7 @@ aml amT anw anz -aoz +ltC apl aqc aqc @@ -89248,19 +89818,19 @@ aZR aZR aZR bfw -bgN -bgN -bgN +uJI +aBa +aBW bjy -bmw -bnW -bpi +aEP +iEc +aBa bqG -bse -bij -buR -bwo -bxJ +bsa +mRj +bsa +bsa +kFf bwb aJq bBr @@ -89289,7 +89859,7 @@ bYH bYH bVg bXn -bRb +bYG cfb cfF cfb @@ -89297,7 +89867,7 @@ cik cjg cjU cfb -caw +clM cfz cgR ccw @@ -89469,7 +90039,7 @@ amn amV anw anz -aoz +uWs aod aqf ahT @@ -89505,25 +90075,25 @@ aZR bbm beh bfx -bij -bij -bij -bgR -bij -bij -bij -bij -bsg -aaf -aaf -aaf -aJn +kDw +aBa +aBa +aBa +aBa +aBa +aBa +czD +gGD +tVQ +wcX +ekY +kFf aJq aJq bBu bCv bAT -bDJ +bDL bDq bCv bJs @@ -89542,7 +90112,7 @@ bWO bXK bYH bZz -cfV +caw bYH bVo bXq @@ -89712,7 +90282,7 @@ bkA acF aes avB -afn +amN agt awN aHp @@ -89722,8 +90292,8 @@ ajI akp akQ alA -amm amU +aiX anw anT aoA @@ -89762,26 +90332,26 @@ bcg aZU beg aYB +tVp +lNn aaf aaf +kMg +kMg aaf -aaf -aaa -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aJn +rLg +rLg +rLg +rLg +rLg +rLg aJq aJq bBt bCv bDH bFf -aNJ +bGB bCv bJs bKy @@ -89979,22 +90549,22 @@ ajJ akr akX alC -alC +xgZ amX -anz +lUR anz aoB aod aqe arf -aqU -awy +aqa +atf arf -aqU -awy +aqa +atf arf -aqU -awy +aqa +atf dgz tqg ujF @@ -90019,19 +90589,19 @@ bbp bbp bbp bfz -aZV +maz aZV aZV aaf aaf -aaa +kMg aaf -aaa +kMg aaf -aaa -aaa -aaa -aJn +kMg +aaf +kMg +rLg aJq aJq aXf @@ -90238,19 +90808,19 @@ akW aiG amo amW +eWV anz -anz -aoz +uWs aod aqe arf -ari +apY ate arf -ari +apY ath arf -ari +apY ath dgz fvY @@ -90274,9 +90844,9 @@ aZV bbo bch bdi -bei bfy bgS +ffU bik aZV aZV @@ -90291,9 +90861,9 @@ bsh bqH aJq aJq -bPS +vqa bCv -aNI +bDJ bCt bGD bCv @@ -90328,7 +90898,7 @@ ckO ckH cja cny -bVw +gUz cip cnx cDx @@ -90491,11 +91061,11 @@ adR aiQ ajI akt -akQ -agj -agj +amS aiX -anB +aiX +aiX +anw anz aoD aod @@ -90530,16 +91100,16 @@ aYD aZX baf bdk -bdk bek bfB bgU +pVa bdk bjF blc bmz bnY -aOH +bpk bqJ bsj btI @@ -90582,7 +91152,7 @@ ciq cfb cfb cfb -ciX +clR cgR cgR cMm @@ -90748,11 +91318,11 @@ cBV ajf ajK aks -akY -afM -amp aiX -axC +nuI +anw +anw +anw anz aoC aod @@ -90762,19 +91332,19 @@ asd atg arf asd -axT +awo arf asd -aFe +aAb dgz iVU aDK vHj eVC dgz -aBM -aEs aJv +nqP +aMg bHt aOE aJn @@ -90787,11 +91357,11 @@ aYq aZW aZG bej -bej bdj bfA bgT -bil +fDV +bej bej blb bmy @@ -90808,7 +91378,7 @@ aJq aXf bCv bAU -clO +cAL bFg bFs bJt @@ -91003,30 +91573,30 @@ ahC aia aiP aiR -ajB -akv -ala -akz -alf +eJk +akl aiX -anA +akz +anz +anz +anz anz aoF apo aqh arh -auA +asg atj aul -axQ +auR atj -azl -aNH +gnM +fRa atj -aJQ +aAX azc atj -aMq +aFe aul aHT aJy @@ -91044,15 +91614,15 @@ aPR aZV baq baQ -baQ +kCq bcQ -bfC bgV +mpA bim bjG aZV bmB -aDH +bnZ bpl bqH bsl @@ -91065,8 +91635,8 @@ aLY bBx bCv apG -aPZ -aQa +bFk +bDs bCv bJs bHo @@ -91262,10 +91832,10 @@ adR aiG ajL aku -akZ -alE -amq aiX +alE +anA +anA anA anz aoE @@ -91275,15 +91845,15 @@ aun asf ati auk -arQ -aus -aJk -bbl +aux avt -aJR -aya -aLs -aMr +axL +bbl +azT +gxH +tEy +aDG +aFd auk aHH aJg @@ -91304,7 +91874,7 @@ baP bbZ bcP cBo -bbw +ffU bbw bbw aZV @@ -91333,8 +91903,8 @@ bNT bOV bQj bRw -bOM -bPT +bSF +pmf bTP bRA bWQ @@ -91350,12 +91920,12 @@ cap ctR ccn cdo -bUA +cek ccw cet cfd -cgH -cgM +cfB +cfI cgQ cjS cjN @@ -91368,7 +91938,7 @@ cEW cse cse csu -chM +cGl ccw aaa aaa @@ -91533,11 +92103,11 @@ arf arf arf arf -auC -aKg +dHP +djq awr awr -aKr +wWo aAh aAh aAh @@ -91574,7 +92144,7 @@ btL buY buY bqH -clV +gYR aJq aXf bCv @@ -91591,7 +92161,7 @@ bOV bQo bRz bSH -bQX +kcg bTP bRA bWQ @@ -91786,23 +92356,23 @@ aoG cSA aqe arf -auu +aqo atm atm arf -aAd -auW +avv +awu awr -aXH -aXO +aAd +qKJ aAh -aSp +aDL aAh -aUP +aGk aAh -bbN +aJz aAh -aOL +aLQ aJq aOE aJn @@ -91835,7 +92405,7 @@ aJq aJq bBy bzs -bTy +bDO bFl bGH bHU @@ -91848,7 +92418,7 @@ bOV bQj bRy bSG -bPT +pmf bUK bVT bWR @@ -92043,23 +92613,23 @@ aoH cSA aqe arf -aqC +asm blU blU -awA -auy -aKh +avg +awp +axN awr awr -aKJ +oTI aAh -apH +aDQ aAh -apQ +aGl aAh -aqt +aBy aAh -clX +uOb aJq aOE aJn @@ -92072,7 +92642,7 @@ aYF aZV bbw bcn -bbw +jNS ben bfE bgX @@ -92128,7 +92698,7 @@ clU clU bOh ccw -cgN +coZ cgU cgU cDK @@ -92300,21 +92870,21 @@ ajo cSA aqe arf -aqD -ask +ari asu +gTx aun -awv -aKg -aYI +avR +djq +vMd awr -bHg +mPj aAh -aop -bwi -aop -aop -aop +aDM +aGx +aDM +aDM +aDM aAh aMm aJq @@ -92347,7 +92917,7 @@ bqH bqH aJq bHt -bgi +bBz bzs bzs bFm @@ -92381,11 +92951,11 @@ bMQ aaf bQA ckU -ccd +clT cmU bOh ccw -cgP +cpa cjc cqo cDL @@ -92561,18 +93131,18 @@ arf arf arf arf -auC -aKN -aYP -baa -aKM -aKP -aFE -aDY -aLQ -aYS -aop -aMw +dHP +axP +azb +aAi +sTt +aCn +mvB +ipU +aGm +aHV +aDM +urH aJq aJq aJq @@ -92603,9 +93173,9 @@ bva bwu bwu bwu -bke -cfI -bBz +pgY +bBB +pAE bzs bFp bGJ @@ -92814,21 +93384,21 @@ ajo app aqi arf -ars +ask atm atm arf -aHt -aKO -aZb -bab -aSj +awq +axO +aza +moa +uhG aAh aAh aAh aAh aAh -aMu +aDN aAh aMo aNC @@ -92860,7 +93430,7 @@ aJq aJq aJq aJq -bnZ +bAj aJq aKG bzs @@ -93071,22 +93641,22 @@ ajo aps aqk arf -auv +dsV blU aHw -awX -axR -aKq -aZZ +avn +awv +axX +aze awr -bac +uuT aAh -aVK -azm -azm +aDU +aBz +aBz aAh -aAZ -bJS +tsY +tTt aJq aJq aJq @@ -93119,7 +93689,7 @@ bxL byX aXh bmE -bAj +bCA bzs bCC bDA @@ -93328,21 +93898,21 @@ ajo apr aqj arf -ary -ask -aua +ark +asu +mOL aun -axU +awt awr awr -axW -aHb -aLh -aUj -aMv -aMv -aMx -aZt +azX +aAZ +aCe +aDT +mwm +mwm +qzE +fPz aAh aJC aJC @@ -93409,7 +93979,7 @@ bMQ aaf bQA ckX -ccB +clV cmV bOh cig @@ -93560,7 +94130,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaf abo @@ -93583,35 +94153,35 @@ ajp ajp ajo apt -arn +aqm arf arf arf arf arf -asX +awz awr awr avG -axP +aBA aAh -aCh -azo -azo +aDP +aBx +aBx aAh -aAM -aMH -bRc -bRe -bty -aFj -ccS -bXu +oNq +jtY +aMq +adq +aQb +aPZ +aRu +iWm aKR -aFd -aDM -cab -bfa +gJR +aXi +jRc +baa aJC bcq bcq @@ -93810,13 +94380,13 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aaf +aaf +aag +aag +aag +aag +aaf aaf aaf aaf @@ -93840,17 +94410,17 @@ ajo aoa ajo apt -aqr +aql aoJ aoJ aoJ aoJ -arr -auN +avw +awy awr awr avG -aNt +tQu aAh aAh aAh @@ -93860,15 +94430,15 @@ aAh aAh aKR aKR -buJ -aDU -aDX -aEt +fey +aPY +fOB +aRx aKR -aFf -aDN -aDU -aFF +hFk +xCs +aPY +aZZ aQg aYV aYV @@ -94097,35 +94667,35 @@ ahT anb ahT anZ -aqo +apu arf arf arf arf arf -aDW -avl -avm -avg -awE -aCr -azP +awA +axT +axW +aAl +vEA +aJC +aDR aFl -aGD -bdE -aCr -boY -bRd +oaT +aHZ +aJC +aKJ +yeR aKR -aDO -aFC -cdM -aEu +eBm +yhO +aQd +aQa aKR -aFg -aDO -caj -ckP +ndo +eBm +gbb +bac aJC aYV aYV @@ -94348,43 +94918,43 @@ aif aif aif bkV -adq -amB +thY +alK aif aif -apw -aqH -aqI +anc +anD +aoI arf -apu -atl -avw -aut -axM -avx -avn -awp -aNG -aCr -aLS -aUC -aGr -aHI -aOK -aKR -aKR -aKR -aKR -aKR -aKR -aKR -aKR -aKR -aKR -aKR -asq +iTd +asN +aur +avy +neT +axS +azk +aAk +oxA aJC -bSL +aDY +aDY +oaT +aKR +aJk +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +bab +aJC +jtp aYV ber bfF @@ -94581,11 +95151,11 @@ aaa aaa aaa aaa -aaf -aaf -aag -aag -aag +aaa +aaa +aaa +aaa +aaa aaa aaa aag @@ -94596,13 +95166,13 @@ abp afo abp abp -aSq +iHq ahn aiA aiA aiA ahn -and +qaZ anF aod ahn @@ -94613,37 +95183,37 @@ ahn ahn ahn arf -aoI -aqF -awo +pUo +sPA +aut arf -aoY +aXF awr awr -awt -aXj -aCr -aQb -aVA -bcO -aHK -aCr -bDO +aAn +dQz +aJC +aEc +aFk +aGw +aKR +aJC +aKr aKR aKR -aDP -aDP -aEo +pIA +pIA +jcN aKR aKR aKR -aDP +pIA aKR aKR bbx aYV aYV -bTs +qVa bfF bhd bis @@ -94838,22 +95408,22 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aaf +aaf +aag +aag +aag aag aaf aaf aaf aaf abp -aRw +rmC afp -aRw +rmC abp -aqa +fEo ahn aaa aaf @@ -94863,39 +95433,39 @@ ahn anE aod aoK -amI +fBj aqp ahn -anc -anr -anM -aqF -aqF -aqF -aur +kMO +oaB +itE +sPA +sPA +sPA +xCE aun -aEr +avz awr awr -awt -aSo -aCr -aCr -aVD -aGv -aCr -aCr -aCm +aAn +tTh +aJC +aJC +kiH +qeZ +aJC +aJC +aKq aKR -aDu -aDT -aDV -aEp -aHX +aNF +lmT +gzA +qet +aSH aKR -aIs -atT -aFD +dSM +mTi +hmv aKR aQg aYV @@ -94921,7 +95491,7 @@ bvj bvj bvd bFu -nWU +thl bvj bvd bKH @@ -95123,36 +95693,36 @@ aoL apy aqq ahn -aql -aqN +ttp +cJl arf -aqE -ark -aqF -axN +uNs +ast +sPA +auv arf -aKi -avm -aAn -aIG -aXl +avA +axW +azo +aAp +qPl aBC aCt aEA aGz aIb -aCr -aCn +aJC +aKN aKR aKR -axV -aFh -arC +aOJ +nNY +hIJ aKR aKR -aNn -avR -aFD +aUg +bFC +hmv aKR bbx aYV @@ -95160,9 +95730,9 @@ aYV bet bfH bhf -bkl +qqY bhh -bkl +qqY bmJ bof bpu @@ -95388,38 +95958,38 @@ arf arf arf arf -aMJ -azn +fpd +imi +azf aAo -aJz -amP +coj aBB aBB aBB aGy aIa cNE -aQP -awB -awB -aDQ -aFi -awB -awB -awB -aIi -aOu +aKM +aMu +aMu +ese +sfY +aMu +aMu +aMu +mdp +aSq aKR -asD +bad bby aYV aYV bet bfG bhe -blN +bit bjS -bnd +kQg bli boe bli @@ -95634,40 +96204,40 @@ aag aag aag arf -amJ -axO +xXW +gYK arf -apu -acN -amP -atz -axL -atQ -awu -aEv -azj -aAb -aAr -amN -amN -aza -azX +iTd +uVo +coj +mcQ +clO +asZ +aua +sfO +awB +att +azh +mgT +mgT +uJq +fcc alP aGI aId aJD -aCx -awC -awC -bbs -aHW -awC -awC -awC -awC -aIw +aKP +aMx +aMx +aQe +aOL +aMx +aMx +aMx +aMx +hvD aKR -asG +aZb aJC aYV aYV @@ -95876,11 +96446,11 @@ aaa aaa aaa aaa -aab +uFF aaa aqG aaa -asL +eYr aaa aaa aaa @@ -95891,42 +96461,42 @@ aaa aaa aaa arf -amO -anr -anM -aqF -alK +duc +oaB +itE +sPA +oIx arf -axZ -amN +arm +mgT +aya +mgT +mgT +auB atZ -amN -amN -bBB -cdP -ceu -cfA -amN -azb -aUk +azg +azp +mgT +aCu +gmc alP aGH aIc aJC -aCy -aTN -aDS +aKO +aMw +aNI aKR aKR -aEq -aEq -aEq -aEq -aEq +acN +acN +acN +acN +acN aKR aKR aJC -cmc +bcr aYV bet bfG @@ -95969,7 +96539,7 @@ bYU bXW bOh cbH -cbX +ccB cbH bOh aaf @@ -96133,11 +96703,11 @@ aaa aaa aaa aaa -aac -apK +oBB +ixv aaa -apK -atX +ixv +rrJ aaa aaa aaa @@ -96151,21 +96721,21 @@ arf arf arf arf -aoI -anD -arj -art -amN -amN -amN -amN -bDL -amN -aAX -cfB -amN -azd -aAf +pUo +xgY +aqs +gfn +mgT +mgT +mgT +mgT +vBb +mgT +ayb +fJA +mgT +aCv +cFF alP aGJ aIe @@ -96175,13 +96745,13 @@ aJC aJC aJC aJC -aXF -aEw -aEx -aEw -aNF -aEq -aHU +aXj +aVy +aSY +aVy +ydZ +acN +bah aJC aYV bdo @@ -96390,11 +96960,11 @@ aaa aaa aaa aaa -apv -apv +viT +viT gXs -apv -apv +viT +viT aaa aaa aaa @@ -96407,38 +96977,38 @@ aaa aaa aaa arf -aqm -aqF -axX +jav +sPA +eDq arf -asb -asr -avu -amN -amN -bDL -amN -aAX -cfB -amN -aze -aAg +bHg +iTD +lBk +mgT +mgT +vBb +mgT +ayb +fJA +mgT +mHW +sBu alP aGJ aIe -asm +aJE aLU aKQ -aYH +aNu aJC aPw -aZw +eqs aQc aSZ aQc -aFk -aEq -aHV +jxp +acN +bag aJC aYV aYV @@ -96664,22 +97234,22 @@ aaa aaa aaa arf -ast -arD -apX +wSg +vgX +rak arf -arO -aup -atV -amN -asg -bZf -cdY -cff -cfC -amN -azb -bvG +lqe +jYg +jde +mgT +pbw +neq +mTj +qGM +ulP +mgT +aCu +vbP alP aGA aHS @@ -96693,15 +97263,15 @@ aRz aSF aQc aQc -aFp +aXl aKR -atk +bai aJC aYV aYV bet bfH -hEm +liD bhh bhg bln @@ -96905,9 +97475,9 @@ aaa aaa aaa aaa -apT +oqa aaa -apT +oqa aaa aaa aaa @@ -96925,38 +97495,38 @@ arf arf arf arf -asZ -att -avA -awq -aVy -aVG -amN -aRu -aVP -aXi -azV -aPj +mbl +iiH +udn +vBN +fLn +vXW +mgT +cIW +kmf +uip +jil +ttF alP aGL aHM -asp +aJm aKz -bLs +mjr aND aJC -aZv +aab aRg aQc -bai +aac aQc -aFt +aXk aKR aKR aJC aYV aYV -bNM +bev bfK bhi bhi @@ -97181,32 +97751,32 @@ aaa aaa aaa gXs -aqs -asY -asY -auB -aws -avy -avy -aws -azp -aCu -aCu -aCv -auR +jMa +qMf +qMf +kte +wgV +odR +odR +wgV +kCK +cmm +cmm +dKg +arj alP aGL aIe aJC -atf -bLt +aKS +aMC aJC aJC aJI aJI aSI aJI -baw +aVA aJI aYK aJI @@ -97416,7 +97986,7 @@ aaa aaa aaa aaa -aaa +xlX aaa aaa aaa @@ -97456,7 +98026,7 @@ aGL aIg aJH aKR -bMF +aMB aJC aOP aJI @@ -97467,7 +98037,7 @@ aVz aVz aYJ aJI -bSr +xZr aYV aYV aYV @@ -97984,7 +98554,7 @@ baj bbz aYV bdp -bDv +pWO bfK bfK bfK @@ -98233,11 +98803,11 @@ aON aQk aRD aSM -aEy +aVD aVE aXm aVz -cam +gIT bbz aYV bdp @@ -98490,7 +99060,7 @@ aOM aQj aRB aSL -cmm +aTN cCq aVz cAg @@ -98723,19 +99293,19 @@ aaa aaa aaa aaa -arm -asY -asY -asY -awz -avy -avy -aAm -aCu -aCu -aCu -aVx -auR +mHC +qMf +qMf +qMf +sXo +odR +odR +ioS +cmm +cmm +cmm +aCy +arj alP aGL avI @@ -98751,7 +99321,7 @@ aTO cCq aVz aVz -caB +guh bbz aYV bdp @@ -98767,8 +99337,8 @@ boo bqQ bhg bua -bne -bpk +bvn +bwL bxX bsL bua @@ -98983,16 +99553,16 @@ aaa aaa aaa aaa -auR -azg -avz -ccH -aAX -aAp -aAk -aAl -aCq -aDR +arj +kOA +avD +awC +ayb +jYD +ruS +ukL +lAY +vpY alP aGJ avI @@ -99009,7 +99579,7 @@ aVF aVF aYM aJI -bSu +bbA aYV bdr bdb @@ -99037,7 +99607,7 @@ bCR bqQ bGX bCR -rjA +pMv bRN bIK bPq @@ -99240,17 +99810,17 @@ aaa aaa aaf aaf -auR -auS -ayb -azk -atZ -amN -amN -aAs -amN -amN -alP +arj +auz +avC +oGS +aya +mgT +mgT +rmY +mgT +mgT +gOZ aGJ avI aJL @@ -99281,7 +99851,7 @@ boq boq brj bpE -bop +btk bum bvq bzn @@ -99497,11 +100067,11 @@ aaa aaf aaf alO -auR -auR -auR -azT -aAi +arj +arj +arj +csp +gOZ cVb cVb cVb @@ -99538,7 +100108,7 @@ bpE bpE bpE bpE -bot +bti bul bvp bzm @@ -99778,7 +100348,7 @@ aSR aUi aVJ aOX -aPP +aYP bal bam aYV @@ -100008,19 +100578,19 @@ aaa aaa aaa aag -ass +cxW anf aqv ayf -aux -auU -avv -avC +hxw +dKe +awE +pGr cVb vCb -bBI -bHx -bHB +wUY +khb +sxs tal aCI aIj @@ -100268,8 +100838,8 @@ aag alO anf alO -aud -auz +gqR +pQA alP anf aCG @@ -100285,12 +100855,12 @@ aIq aKK aMy aIp -arg +rXv aQm -aBx -aGp -aGp -aHc +eaD +vAZ +vAZ +aVK aRJ aRJ aRJ @@ -100531,10 +101101,10 @@ alP awF aCG alP -bBM +uTQ aBE aCz -aQU +fXo aCJ aGT aIn @@ -100544,10 +101114,10 @@ aMt aIp aOW aQm -aGm -aGw -aGP -aHr +ktc +aSS +aUj +uao aRJ aYQ cBg @@ -100781,34 +101351,34 @@ aoN apA aof arq -asv +qnd atv auD alP aoQ -avD +cqM ayg ayg ayg -azf +aCA aFn -aAq +aFp aGW anf aIp -bcr +fGf aMA aIp aOX aQm -aGm -aGx -aGR -aHr +ktc +aST +aUk +uao aRJ aYQ bam -bBT +oAc aYV aYV aYV @@ -101025,10 +101595,10 @@ adU adU adU adU -alg -aTq -aTq -aTq +xWW +sCo +sCo +sCo acx amv ane @@ -101037,7 +101607,7 @@ aog aoM apz aqw -asM +arr asw asw auE @@ -101058,14 +101628,14 @@ aMz aNQ aOX aQm -aGn -aGK -aGK -aHs +pmj +lrH +lrH +rEQ aRJ aYR ban -bCI +efo aYV aYV bez @@ -101294,7 +101864,7 @@ aoi aoO apB aqx -asN +art anf anf auF @@ -101302,14 +101872,14 @@ alP awH auF alP -axd +aAr aBF alP aaa aFq aGX aIp -bHZ +lwn aKU aME aNN @@ -101322,13 +101892,13 @@ aXo aXo aYO bap -bCI +efo aYV bci beB bfS bfS -ckJ +kQk ipA gbT cTO @@ -101551,7 +102121,7 @@ aof aof aof aof -asV +gBY aoP atw auF @@ -101559,7 +102129,7 @@ alP aoP auF azr -aRv +juV atw alP alP @@ -101573,13 +102143,13 @@ aNQ aOZ aOX aOX -cma +ohe aUz aVM aOX aYT bam -bDs +qcu baR bcb bdl @@ -101636,7 +102206,7 @@ bAw bAw clp aag -apv +viT aaa aaa aaa @@ -101814,7 +102384,7 @@ aty auF alP aAt -aAu +lHE alP alP alP @@ -102065,7 +102635,7 @@ aaa aaa apC anf -aRv +juV alP atx auF @@ -102073,8 +102643,8 @@ alP auD auF apE -axJ -awL +aAs +trM alP aCG aFr @@ -102327,12 +102897,12 @@ alP apE auG alP -clM +hSS auF apE anf anf -azh +kwj aCG aDZ aFu @@ -102593,11 +103163,11 @@ aCB aEB aFs bbE -amd +aIr bav aLf -aCU -aDG +nvw +oWe aRO aQp aRN @@ -102620,7 +103190,7 @@ bls bfT boD bpY -aPY +bsP box btw buT @@ -102661,11 +103231,11 @@ cQB czY cOT aaa -apv -apv -apv -apv -apv +viT +viT +viT +viT +viT aaa aaa aaa @@ -102838,12 +103408,12 @@ apC alP alP alP -ciw +dHx auH avF awI ayc -ciV +nOD asw asw aCD @@ -102851,10 +103421,10 @@ aEa aFv aGG aIu -aBA +aJQ aIt aIt -aDG +oWe aRO aIt aRN @@ -103107,11 +103677,11 @@ aCC aDZ anf aFu -aBy -aJJ -aCA +aIs +aJP +xah aIt -aDJ +xNd aYW aYW aYW @@ -103130,7 +103700,7 @@ cHJ cHL blw bjP -bTu +blt bfT boG bqa @@ -103178,10 +103748,10 @@ aaa aaa aaa aaa -bsP -bti -btk -buh +tpb +rnY +oSW +vPl aaa aaa aaa @@ -103364,11 +103934,11 @@ aCE aDZ aFu aFu -aBz +aIw aJS -aCS +wTC aNP -aDL +kMY aOS aOS aOS @@ -103432,14 +104002,14 @@ cQB cAa cOT gXs -bqb -brl +lDF +kTe aaa aaa -bsP -bsP -bsP -buh +tpb +tpb +tpb +vPl aaa aaa aaa @@ -103616,16 +104186,16 @@ awJ anf alP aAv -cih +wZI aCE aDZ aFu -aIy +aHb aIv -aBD +aJR aIt aIt -aDG +oWe aRO aIt aPd @@ -103634,7 +104204,7 @@ aPb aIt aXu aYW -aVS +bat bbD aYV aXq @@ -103689,14 +104259,14 @@ czU czZ cOT aaa -apv -brT -brT -bsP -bsP -bsP -buA -bti +viT +sbs +sbs +tpb +tpb +tpb +gqp +rnY aaa aaa aaa @@ -103882,7 +104452,7 @@ aIx aJF aQq aNS -aDG +oWe aRO aIt aPd @@ -103946,14 +104516,14 @@ cgm czY cOT gXs -bqb -brl -bsB -brT -brT +lDF +kTe +nxN +sbs +sbs aaa aaa -bsB +nxN aaa aaa aaa @@ -104119,7 +104689,7 @@ aaf aaa aaa alP -aie +apD aEl anf arx @@ -104143,12 +104713,12 @@ aFu aPf aQq aRP -cfE +oIt aIt aIt aWd aXV -aGl +pWH bbD aYV aXq @@ -104205,10 +104775,10 @@ cNW aaa aaa aaa -bsB -bsB -bti -bsP +nxN +nxN +rnY +tpb gXs aaa aaa @@ -104379,11 +104949,11 @@ alO anf anf arw -bxh -clL +uiT +cII anf alP -aqB +awL anf anf apE @@ -104392,8 +104962,8 @@ aCH aED aFy aGO -aIA -aJM +aIB +aJJ aKZ aFw aFu @@ -104402,7 +104972,7 @@ aFu aFu aTc aUD -aSk +aVS aYW aYW bax @@ -104649,12 +105219,12 @@ aCk aEC aFx aGM -aIB +aIy aJG -aMK +cAz aFw -aMW -aPi +eAE +aPg aQr aFu aTb @@ -104720,10 +105290,10 @@ aaa aaa aaa aaa -apv -apv -apv -apv +viT +viT +viT +viT aaa aaa aaa @@ -104890,14 +105460,14 @@ aaa aaa gXs alP -apD +pRx ayf -bev -cil +eUR +imK aFn aFn aBB -bGB +awM ayg ayg ayg @@ -104910,7 +105480,7 @@ aFw aLo aLb aFw -aPg +xwI aYW aYW aRQ @@ -105144,13 +105714,13 @@ aaa aaa aaa aaa -amx -amx -amx -amx -aMB -amx -amx +uBW +uBW +uBW +uBW +oFY +uBW +uBW atB alP alP @@ -105164,16 +105734,16 @@ aEd aFw aHf aIz -aJP +aJM aLa aFw -aPh +kwW aYW aQs aFu aTd aUE -aVR +aVT aYW aYW aZd @@ -105401,21 +105971,21 @@ aaa aaa aaa aaa -amx -axE -aIr -aJm -aNV -bDX -bFC -bGg -bGh -bGg -bGS +uBW +mKU +wLe +shX +mJU +cyi +tcE +dIA +pNj +dIA +nhn avI asA apE -aCo +fIK aCG aEf aFw @@ -105658,12 +106228,12 @@ aaa aaa aaa aaa -apY -aIr -aIr -aIr -aIr -aMC +lfx +wLe +wLe +wLe +wLe +gGK asB asB asB @@ -105747,14 +106317,14 @@ cko clq cmq ciI -bae -cmJ +cnJ +cri cOe cOe -cmK +cBT aag gXs -apv +viT aaa aaa aaa @@ -105915,12 +106485,12 @@ aaa aaa aaa aaa -apY -aIr -aIr -aIr -aIr -aNu +lfx +wLe +wLe +wLe +wLe +sEJ asB atD auJ @@ -106172,12 +106742,12 @@ aaa aaa aaa aaa -amx -aIr -aIr -aIr -aIr -aIr +uBW +wLe +wLe +wLe +wLe +wLe asB atC auI @@ -106261,8 +106831,8 @@ cNW cNW cNW cOe -bag -clH +xPX +csy cko cAf aaa @@ -106429,12 +106999,12 @@ aaa aaa aaa aaa -apY -aIr -aIr -aIr -aIr -aIr +lfx +wLe +wLe +wLe +wLe +wLe asB atE auI @@ -106512,11 +107082,11 @@ ceO cNW cgm chw -cgp +ciK cjC -cgu ckp cls +cmr cOe cOe cou @@ -106686,18 +107256,18 @@ aaa aaa aaa aaa -apY -aIr -aIr -aIr -aIr -aIr +lfx +wLe +wLe +wLe +wLe +wLe asB asB asB avL awR -aMp +kuT azu aAz asB @@ -106737,7 +107307,7 @@ buo bvJ bCk byo -btD +aDH bxP bCf bvK @@ -106767,13 +107337,13 @@ bQZ cdR ceN cNW -axY +cgp chv ciJ cbf -ciK +xcw clr -bah +bnt cOe cOe bMB @@ -106943,12 +107513,12 @@ aaa aaa aaa aaa -amx -awM -aIr -aJE -aIr -bFk +uBW +kgf +wLe +pnl +wLe +oKy asB atG auL @@ -107200,12 +107770,12 @@ aaa aaa aaa aaa -amx -amx -amx -amx -amx -amx +uBW +uBW +uBW +uBW +uBW +uBW asB atF auK @@ -107491,9 +108061,9 @@ aXB aZh baB aCR -bNa +fkx bdx -bPv +izL bgc bgc biX @@ -107807,13 +108377,13 @@ cOe cOe cOe sQX -cdi -cdi -cdi -cdi -cdi -cdi -cdi +tDE +tDE +tDE +tDE +tDE +tDE +tDE aaS aaS aba @@ -108052,7 +108622,7 @@ ccT bSc bSc cfu -bnt +cgu chA cNW aaa @@ -108565,7 +109135,7 @@ cbZ bSl cmo cNW -ckR +sPj cNW chC ciL @@ -109617,7 +110187,7 @@ crD aaa aaa aaa -aSY +csZ aaa aaa aaa @@ -109864,18 +110434,18 @@ cyU cpi cpi cpi -aSH -aSS +cqJ +gnW crk crk crk crk crk -aST -aSH -aSS +phP +cqJ +gnW crk -aST +phP cpi cpi ctB @@ -110131,7 +110701,7 @@ crF aaa aaa aaa -aTa +jvm aaa aaa aaa @@ -110870,7 +111440,7 @@ cNW cNW cNW cNW -clR +dok clt cac cbh @@ -111136,7 +111706,7 @@ cbf cbf ceT cNW -clT +wNd chH cNW aaf diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ac7d291b2f..b47944146f 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -124,36 +124,6 @@ }, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) -"aaq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/table, -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel, -/area/crew_quarters/toilet/restrooms) -"aar" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/bedsheetbin/color, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/crew_quarters/dorms) "aas" = ( /obj/docking_port/stationary/random{ id = "pod_lavaland1"; @@ -173,88 +143,6 @@ /obj/effect/landmark/xeno_spawn, /turf/open/space, /area/solar/starboard/fore) -"aav" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aaw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/fore) -"aax" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/fore) -"aay" = ( -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aaz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/fore) -"aaA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aaB" = ( -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plating, -/area/security/prison) "aaE" = ( /obj/structure/lattice/catwalk, /turf/open/space, @@ -1183,10 +1071,6 @@ "aeF" = ( /turf/open/floor/plating, /area/construction/mining/aux_base) -"aeH" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "aeR" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -1565,6 +1449,26 @@ }, /turf/open/floor/plating, /area/construction/mining/aux_base) +"agv" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 2; + pixel_y = 22 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "agB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1800,7 +1704,7 @@ pixel_y = -32 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/twohanded/required/kirbyplants/random, @@ -4645,6 +4549,14 @@ }, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) +"anz" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "anA" = ( /obj/structure/cable/white{ icon_state = "0-2" @@ -7199,6 +7111,13 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"arX" = ( +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "arY" = ( /obj/structure/table/wood, /obj/item/toy/talking/codex_gigas, @@ -7229,6 +7148,14 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) +"asa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "asb" = ( /obj/machinery/airalarm{ dir = 1; @@ -15186,7 +15113,7 @@ /area/crew_quarters/bar) "aGc" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = 32 }, @@ -15457,7 +15384,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -16828,7 +16755,7 @@ /area/maintenance/disposal/incinerator) "aIy" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -17791,7 +17718,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -21486,7 +21413,7 @@ "aQl" = ( /obj/structure/table/wood, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/camera, @@ -22042,6 +21969,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/security/prison) +"aRi" = ( +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plating, +/area/security/prison) "aRj" = ( /obj/structure/cable/white{ icon_state = "0-2" @@ -23602,7 +23536,7 @@ /area/crew_quarters/theatre) "aTy" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -26869,6 +26803,7 @@ /area/engine/atmos) "aXW" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/miner/carbon_dioxide, /turf/open/floor/engine/co2, /area/engine/atmos) "aXX" = ( @@ -27337,7 +27272,7 @@ /area/crew_quarters/bar/atrium) "aYF" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -27513,7 +27448,7 @@ "aYR" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -27639,7 +27574,7 @@ "aZb" = ( /obj/machinery/photocopier, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -29257,6 +29192,7 @@ /area/engine/atmos) "bbO" = ( /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/miner/oxygen, /turf/open/floor/engine/o2, /area/engine/atmos) "bbP" = ( @@ -29336,7 +29272,7 @@ pixel_y = 22 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/chem_master/condimaster{ @@ -29603,7 +29539,7 @@ /obj/item/clipboard, /obj/item/toy/figure/miner, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -30753,6 +30689,7 @@ /area/engine/atmos) "bev" = ( /obj/machinery/portable_atmospherics/canister/toxins, +/obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos) "bew" = ( @@ -30819,7 +30756,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -31057,7 +30994,7 @@ "beY" = ( /obj/structure/kitchenspike, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -32494,6 +32431,7 @@ /area/engine/atmos) "bhw" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/miner/nitrogen, /turf/open/floor/engine/n2, /area/engine/atmos) "bhx" = ( @@ -32627,7 +32565,7 @@ /area/crew_quarters/kitchen) "bhL" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = 32 }, @@ -34606,6 +34544,7 @@ /obj/machinery/portable_atmospherics/canister/nitrous_oxide{ valve_open = 1 }, +/obj/machinery/atmospherics/miner/n2o, /turf/open/floor/engine/n2o, /area/engine/atmos) "bkI" = ( @@ -37308,7 +37247,6 @@ /obj/item/clothing/accessory/armband/deputy, /obj/item/clothing/accessory/armband/deputy, /obj/item/clothing/accessory/armband/deputy, -/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -40095,7 +40033,7 @@ /area/crew_quarters/heads/hos) "bty" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -40782,7 +40720,7 @@ /area/security/main) "buM" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -41844,7 +41782,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -43216,7 +43154,7 @@ "byI" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/red{ @@ -43230,7 +43168,7 @@ /area/security/execution/transfer) "byJ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -48755,7 +48693,7 @@ /area/engine/gravity_generator) "bGg" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/twohanded/required/kirbyplants/random, @@ -48794,7 +48732,7 @@ /area/engine/break_room) "bGk" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/airalarm{ @@ -48935,7 +48873,7 @@ "bGt" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -49890,7 +49828,7 @@ /area/engine/gravity_generator) "bHS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -50406,7 +50344,7 @@ "bIG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, @@ -51881,7 +51819,7 @@ "bKU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -52445,7 +52383,7 @@ "bLK" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/button/door{ @@ -55374,7 +55312,7 @@ "bQh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/yellow{ @@ -56102,6 +56040,10 @@ /obj/structure/window/reinforced{ dir = 1 }, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = -3; + pixel_y = 3 + }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "bRv" = ( @@ -56146,6 +56088,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/item/gun/energy/pumpaction/blaster, +/obj/item/gun/energy/pumpaction/blaster, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "bRx" = ( @@ -57009,7 +56953,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/red{ @@ -57153,7 +57097,7 @@ pixel_y = -3 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -57183,6 +57127,10 @@ /obj/structure/window/reinforced{ dir = 4 }, +/obj/item/gun/energy/laser{ + pixel_x = 3; + pixel_y = -3 + }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "bTk" = ( @@ -57248,7 +57196,7 @@ layer = 2.9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ @@ -58732,10 +58680,6 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/gun/energy/e_gun/advtaser{ - pixel_x = 3; - pixel_y = -3 - }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "bVr" = ( @@ -60665,6 +60609,7 @@ dir = 4 }, /obj/structure/window/reinforced, +/obj/item/gun/energy/e_gun, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "bXQ" = ( @@ -60797,7 +60742,7 @@ "bXY" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -60899,7 +60844,7 @@ "bYh" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -60920,7 +60865,7 @@ "bYi" = ( /obj/structure/window/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -62280,7 +62225,7 @@ /area/ai_monitored/turret_protected/aisat_interior) "caj" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/porta_turret/ai, @@ -64037,7 +63982,7 @@ "cdk" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -64076,7 +64021,7 @@ /area/security/brig) "cdn" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -67030,7 +66975,7 @@ /area/engine/engineering) "chF" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -67361,7 +67306,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, @@ -69328,7 +69273,7 @@ pixel_x = -26 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = 32 }, @@ -70711,7 +70656,7 @@ }, /obj/item/camera_film, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/grimy, @@ -76603,7 +76548,7 @@ }, /obj/item/crowbar, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/table/reinforced, @@ -77602,7 +77547,7 @@ "czP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -77888,7 +77833,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable/white{ @@ -78794,7 +78739,7 @@ "cBL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/twohanded/required/kirbyplants/random, @@ -80798,7 +80743,7 @@ /obj/item/radio, /obj/item/radio, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/decal/cleanable/dirt, @@ -80916,6 +80861,23 @@ }, /turf/open/floor/plating, /area/crew_quarters/toilet/restrooms) +"cFc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel, +/area/crew_quarters/toilet/restrooms) "cFd" = ( /obj/machinery/shower{ dir = 8; @@ -81427,7 +81389,7 @@ /obj/item/clothing/head/welding, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -82645,7 +82607,7 @@ /area/crew_quarters/dorms) "cIk" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -84408,6 +84370,19 @@ /obj/item/reagent_containers/dropper, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cKT" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/crew_quarters/dorms) "cKU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -87477,7 +87452,7 @@ "cQE" = ( /obj/structure/closet/secure_closet/security/science, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/status_display{ @@ -88838,7 +88813,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -95618,7 +95593,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/storage/bag/bio, @@ -96554,7 +96529,7 @@ /obj/item/reagent_containers/glass/bottle/epinephrine, /obj/item/reagent_containers/dropper, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -100259,7 +100234,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/door/firedoor, @@ -100623,7 +100598,7 @@ /area/science/explab) "dmJ" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/bot, @@ -100634,7 +100609,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -103278,7 +103253,7 @@ pixel_x = 36 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/vending/assist, @@ -103445,7 +103420,7 @@ pixel_y = 6 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -104055,7 +104030,7 @@ "dti" = ( /obj/structure/closet/bombcloset, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -104389,7 +104364,7 @@ /area/medical/surgery) "dtQ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/blue{ @@ -105002,7 +104977,7 @@ "duZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24; pixel_y = -26 }, @@ -105033,7 +105008,7 @@ "dvd" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -107185,7 +107160,7 @@ "dyD" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/status_display/ai{ @@ -108398,7 +108373,7 @@ /obj/item/clothing/glasses/welding, /obj/structure/table/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -111492,7 +111467,7 @@ dir = 5 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -111886,7 +111861,7 @@ pixel_y = 26 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24; pixel_y = -26 }, @@ -112582,7 +112557,7 @@ /area/science/robotics/lab) "dHC" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/disposalpipe/segment, @@ -113983,7 +113958,7 @@ "dJO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -114247,7 +114222,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, @@ -116746,7 +116721,7 @@ "dOC" = ( /obj/structure/filingcabinet/medical, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -117626,7 +117601,7 @@ name = "emergency shower" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -118825,7 +118800,7 @@ /area/medical/virology) "dSd" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -119500,7 +119475,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/closet/crate/coffin, +/obj/structure/bodycontainer/morgue, /turf/open/floor/plasteel/dark, /area/chapel/office) "dTy" = ( @@ -119657,7 +119632,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sign/poster/official/work_for_a_future{ @@ -119868,7 +119843,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -120829,6 +120804,17 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"dWi" = ( +/obj/structure/table, +/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/security/prison) "dWm" = ( /obj/structure/reagent_dispensers/virusfood{ pixel_x = -32 @@ -121622,7 +121608,7 @@ "dXI" = ( /obj/structure/chair/wood, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -122148,7 +122134,7 @@ /area/medical/virology) "dYV" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/closet/secure_closet/medical1, @@ -125155,7 +125141,7 @@ }, /obj/item/camera_film, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/status_display{ @@ -125251,7 +125237,7 @@ "eeH" = ( /obj/structure/filingcabinet/security, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -125960,7 +125946,7 @@ "egb" = ( /obj/structure/table/wood, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/clipboard, @@ -126415,20 +126401,14 @@ }, /turf/open/floor/plasteel/dark, /area/library) -"enO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, +"euu" = ( +/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/bodycontainer/morgue, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "exE" = ( /obj/machinery/air_sensor/atmos/toxins_mixing_tank, /turf/open/floor/engine/vacuum, @@ -126443,6 +126423,27 @@ }, /turf/open/floor/plasteel/white, /area/science/misc_lab) +"eHb" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/office) +"eIC" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "eJc" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall/r_wall, @@ -126536,6 +126537,24 @@ }, /turf/open/floor/plasteel, /area/medical/medbay/central) +"flG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/fore) "fno" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -126579,10 +126598,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/science/circuit) -"fHS" = ( -/obj/structure/sign/warning/vacuum, -/turf/closed/wall/r_wall, -/area/chapel/office) "fLR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -126611,24 +126626,43 @@ }, /turf/open/floor/engine, /area/science/mixing) +"gkl" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "gmj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/science/circuit) -"gFk" = ( -/obj/structure/grille, -/turf/open/space, -/area/space/nearstation) -"gJj" = ( -/obj/machinery/door/window/northleft{ - name = "Mass Driver" +"gug" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/security/prison) +"gER" = ( +/obj/structure/cable/white{ + icon_state = "4-8" }, -/obj/machinery/mass_driver{ - id = "chapelgun"; - name = "Holy Driver" +/obj/structure/cable/white{ + icon_state = "2-4" }, -/turf/open/floor/plating, -/area/chapel/office) +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) "gKr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -126646,26 +126680,6 @@ }, /turf/open/floor/plasteel/white, /area/science/misc_lab) -"gNJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/airalarm{ - dir = 2; - pixel_y = 22 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "gNS" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/neutral{ @@ -126690,20 +126704,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel/white, /area/science/research) -"gQw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/maintenance/port/aft) "gQS" = ( /turf/open/floor/plasteel/white/side{ dir = 9 @@ -126720,10 +126720,6 @@ dir = 1 }, /area/science/circuit) -"gUV" = ( -/obj/item/twohanded/required/kirbyplants/random, -/turf/open/floor/plasteel, -/area/security/prison) "gVS" = ( /obj/item/clothing/head/kitty, /obj/item/clothing/under/maid, @@ -126740,6 +126736,10 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/electrical) +"hds" = ( +/obj/structure/grille, +/turf/open/space, +/area/space/nearstation) "hdH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ @@ -126748,10 +126748,6 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) -"hei" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/r_wall, -/area/chapel/office) "hic" = ( /obj/structure/table/reinforced, /obj/item/integrated_electronics/analyzer, @@ -126761,9 +126757,21 @@ dir = 10 }, /area/science/circuit) -"hlc" = ( +"hig" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /turf/open/floor/plasteel, -/area/security/prison) +/area/maintenance/port/fore) "hrP" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -126785,6 +126793,19 @@ }, /turf/open/floor/plasteel, /area/maintenance/port/aft) +"hsc" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "hFo" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -126816,22 +126837,9 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"hLO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +"hJk" = ( +/turf/open/space, +/area/space) "hNZ" = ( /obj/structure/chair/office/light{ dir = 8 @@ -126851,31 +126859,11 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/medbay/central) -"iaF" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/science/research) -"ibC" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/hydroponics/soil, -/obj/item/seeds/lime{ - pixel_x = 6 - }, -/turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned{ - name = "Maintenance Garden" - }) -"iiH" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) -"ijd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +"hUt" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -126884,21 +126872,17 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/turf/open/floor/plasteel, +/area/maintenance/port/aft) +"iaF" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/science/research) "ijB" = ( /obj/structure/reagent_dispensers/keg/aphro/strong, /obj/item/reagent_containers/glass/beaker, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) -"ivF" = ( -/obj/machinery/door/poddoor{ - id = "chapelgun"; - name = "Chapel Launcher Door" - }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/chapel/office) "iwL" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -126917,9 +126901,6 @@ }, /turf/open/floor/engine/vacuum, /area/science/mixing) -"iyd" = ( -/turf/open/space, -/area/space) "iQh" = ( /obj/structure/bodycontainer/morgue{ dir = 1 @@ -126960,6 +126941,37 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"iUn" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/closet/crate/coffin, +/turf/open/floor/plasteel/dark, +/area/chapel/office) +"iZm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/fore) "jdO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -126984,21 +126996,13 @@ }, /turf/open/floor/plasteel, /area/science/research/abandoned) -"jhK" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +"jie" = ( +/obj/machinery/vr_sleeper, +/obj/structure/cable/white{ + icon_state = "4-8" }, /turf/open/floor/plasteel, -/area/maintenance/port/aft) +/area/security/prison) "jjN" = ( /obj/structure/table/reinforced, /obj/machinery/camera{ @@ -127096,18 +127100,9 @@ /obj/machinery/chem_master, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) -"jPA" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +"jPL" = ( +/obj/structure/sign/warning/vacuum, +/turf/closed/wall/r_wall, /area/chapel/office) "jRy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -127129,6 +127124,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/science/mixing) +"jTP" = ( +/obj/machinery/door/window/northleft{ + name = "Mass Driver" + }, +/obj/machinery/mass_driver{ + id = "chapelgun"; + name = "Holy Driver" + }, +/turf/open/floor/plating, +/area/chapel/office) "kam" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ @@ -127137,6 +127142,12 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) +"ktV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/turf/open/floor/plating, +/area/chapel/office) "kvf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -127162,31 +127173,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/port) -"kzw" = ( -/obj/machinery/button/crematorium{ - id = "cremawheat"; - pixel_x = -26; - req_access_txt = "27" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/table, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "kLu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -127202,15 +127188,27 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) -"kZu" = ( -/obj/effect/landmark/barthpot, -/turf/open/floor/wood, -/area/library) +"kTU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/r_wall, +/area/chapel/office) +"lag" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "lak" = ( /turf/open/floor/plasteel/white/side{ dir = 10 }, /area/science/circuit) +"lem" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/grape, +/turf/open/floor/plasteel, +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "loI" = ( /obj/machinery/autolathe, /obj/machinery/door/window/southleft{ @@ -127242,6 +127240,13 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"lva" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "lyU" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix{ dir = 8 @@ -127355,14 +127360,38 @@ dir = 1 }, /area/science/circuit) -"mdk" = ( +"lYm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) +"mhH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/light/small, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) +/turf/open/floor/plasteel/dark, +/area/chapel/office) "mkm" = ( /obj/machinery/atmospherics/components/binary/valve, /obj/machinery/embedded_controller/radio/airlock_controller/incinerator_toxmix{ @@ -127381,16 +127410,8 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"mvf" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole/bookmanagement, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/turf/open/floor/plating, +"mqT" = ( +/turf/open/floor/plasteel, /area/security/prison) "mvm" = ( /obj/effect/decal/cleanable/dirt, @@ -127413,25 +127434,36 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit/green, /area/science/research/abandoned) -"mEy" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/cobweb, -/obj/item/storage/crayons, -/obj/item/storage/crayons, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/security/prison) "mIi" = ( /obj/item/electropack/shockcollar, /obj/item/assembly/signaler, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) -"mMC" = ( -/obj/structure/sign/warning/nosmoking, -/turf/closed/wall, -/area/medical/surgery) +"mIQ" = ( +/obj/machinery/button/crematorium{ + id = "cremawheat"; + pixel_x = -26; + req_access_txt = "27" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "mQE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -127455,118 +127487,54 @@ }, /turf/open/floor/engine, /area/science/mixing) -"mXJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "nyN" = ( /obj/machinery/vending/kink, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) -"nOV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "nSh" = ( /obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"oaP" = ( -/obj/machinery/seed_extractor, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned{ - name = "Maintenance Garden" - }) -"obe" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) -"ost" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/keycard_auth{ - pixel_x = -25 - }, -/turf/open/floor/plasteel, -/area/quartermaster/qm) -"owr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel/dark, -/area/chapel/office) -"owI" = ( +"nUj" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) +"nZa" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ dir = 4 }, +/obj/machinery/door/window{ + req_one_access_txt = "48,50" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"oDr" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) -"ozr" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/hydroponics/soil, -/obj/item/seeds/grape, -/turf/open/floor/plasteel, -/area/hydroponics/garden/abandoned{ - name = "Maintenance Garden" - }) +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/fore) "oIl" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -127616,26 +127584,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"oNW" = ( -/obj/machinery/vr_sleeper, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/security/prison) -"oOb" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/window{ - req_one_access_txt = "48,50" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) "oSD" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -127726,27 +127674,36 @@ }, /turf/open/floor/plating, /area/science/research/abandoned) -"pEq" = ( -/obj/structure/sign/warning/electricshock{ - pixel_y = 32 +"pDQ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/machinery/vr_sleeper, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/turf/open/floor/plating{ - icon_state = "platingdmg2" +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/area/security/prison) -"pHf" = ( +/turf/open/floor/plasteel, +/area/maintenance/port/fore) +"pLz" = ( +/obj/structure/sign/warning/nosmoking, +/turf/closed/wall, +/area/medical/surgery) +"pPt" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/bodycontainer/morgue, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "pQm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -127764,6 +127721,27 @@ }, /turf/open/floor/plasteel, /area/science/research/abandoned) +"qbg" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/computer/pod/old{ + density = 0; + icon = 'icons/obj/airlock_machines.dmi'; + icon_state = "airlock_control_standby"; + id = "chapelgun"; + name = "Mass Driver Controller"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "qhc" = ( /obj/structure/table/reinforced, /obj/item/integrated_electronics/analyzer, @@ -127773,6 +127751,10 @@ dir = 9 }, /area/science/circuit) +"qkw" = ( +/obj/effect/landmark/barthpot, +/turf/open/floor/wood, +/area/library) "qnx" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input, /turf/open/floor/engine/vacuum, @@ -127782,23 +127764,20 @@ dir = 5 }, /area/science/circuit) -"qBG" = ( -/obj/effect/spawner/lootdrop/keg, -/turf/open/floor/plating, -/area/crew_quarters/abandoned_gambling_den) -"qMR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 +"qzY" = ( +/obj/machinery/door/window/northright{ + name = "Coffin Storage" }, -/turf/open/floor/plating, -/area/chapel/office) -"rbY" = ( /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/closet/crate/coffin, /turf/open/floor/plating, /area/chapel/office) +"qBG" = ( +/obj/effect/spawner/lootdrop/keg, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "rhO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -127812,6 +127791,18 @@ dir = 6 }, /area/science/circuit) +"rTc" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = 32 + }, +/obj/machinery/vr_sleeper, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/security/prison) "rUD" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -127846,16 +127837,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"rYR" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) "saw" = ( /turf/closed/wall, /area/science/circuit) @@ -127863,27 +127844,66 @@ /obj/effect/decal/remains/xeno, /turf/open/floor/engine/vacuum, /area/science/mixing) +"siB" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/crate/coffin, +/turf/open/floor/plating, +/area/chapel/office) "svv" = ( /obj/machinery/door/poddoor/incinerator_toxmix, /turf/open/floor/engine/vacuum, /area/science/mixing) -"tbC" = ( +"sBk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel{ + heat_capacity = 1e+006 + }, +/area/maintenance/port/aft) +"tma" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, +/obj/machinery/keycard_auth{ + pixel_x = -25 + }, /turf/open/floor/plasteel, -/area/maintenance/port/fore) +/area/quartermaster/qm) "tmi" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plasteel, /area/science/circuit) -"tmZ" = ( -/obj/machinery/light/small, -/turf/open/floor/plasteel, -/area/security/prison) +"tra" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark, +/area/chapel/office) "twt" = ( /obj/machinery/vr_sleeper, /obj/effect/turf_decal/tile/neutral{ @@ -127891,8 +127911,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) -"tAi" = ( -/obj/structure/reagent_dispensers/watertank, +"tzT" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -127902,46 +127929,11 @@ "tCh" = ( /turf/closed/wall, /area/science/misc_lab) -"tEW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/bodycontainer/morgue, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "tMk" = ( /turf/open/floor/plasteel/white/side{ dir = 10 }, /area/science/misc_lab) -"tOQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/computer/pod/old{ - density = 0; - icon = 'icons/obj/airlock_machines.dmi'; - icon_state = "airlock_control_standby"; - id = "chapelgun"; - name = "Mass Driver Controller"; - pixel_x = -24 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "tRT" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -127952,6 +127944,16 @@ /obj/machinery/chem_heater, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"umo" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb, +/obj/item/storage/crayons, +/obj/item/storage/crayons, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/prison) "upk" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Access" @@ -127984,6 +127986,10 @@ }, /turf/open/floor/plasteel/white, /area/science/misc_lab) +"uNx" = ( +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel, +/area/security/prison) "uNP" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line{ @@ -128016,6 +128022,15 @@ /obj/item/clothing/under/color/grey, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"vph" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/maintenance/port/fore) "vAb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -128025,40 +128040,22 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) -"vFw" = ( -/obj/machinery/door/window/northright{ - name = "Coffin Storage" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/closet/crate/coffin, -/turf/open/floor/plating, -/area/chapel/office) -"vON" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) "wei" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/circuit) -"whX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +"wjb" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/lime{ + pixel_x = 6 }, +/turf/open/floor/plasteel, +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) +"wsI" = ( +/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -128079,6 +128076,28 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel/white, /area/science/misc_lab) +"wJf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/office) +"wQz" = ( +/obj/machinery/seed_extractor, +/obj/item/reagent_containers/glass/bucket, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/hydroponics/garden/abandoned{ + name = "Maintenance Garden" + }) "xaf" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Access" @@ -128097,6 +128116,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) +"xdG" = ( +/obj/machinery/door/poddoor{ + id = "chapelgun"; + name = "Chapel Launcher Door" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/chapel/office) "xmt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -128184,22 +128211,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/research) -"xWZ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "xXn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output, /turf/open/floor/engine/vacuum, @@ -157106,7 +157117,7 @@ arB aug alg alg -whX +pDQ aKg alf aMO @@ -157363,7 +157374,7 @@ aAb aAb aAb aAb -pHf +vph aKh alf aMN @@ -157621,7 +157632,7 @@ aCv aFJ aAb aIH -tAi +eIC alf aMP aDw @@ -158135,7 +158146,7 @@ aEB aFL aAb aIH -tbC +lva avm arB arB @@ -158387,7 +158398,7 @@ alf aAb aBj aCv -oaP +wQz aEC aFM aAb @@ -158518,7 +158529,7 @@ edL eep eff aad -aeH +lag aaa ajr aaa @@ -158644,7 +158655,7 @@ alg aAb aBk aCv -ozr +lem aEC aFN aAb @@ -158775,7 +158786,7 @@ edM eeq dLY aad -gFk +hds aaa aad aaa @@ -158906,7 +158917,7 @@ aED aFO aHm aII -mdk +euu aLz aMR aOq @@ -159163,7 +159174,7 @@ aEE aFP aHn aIJ -iiH +wsI aLz aMS aOr @@ -159415,12 +159426,12 @@ ayX aAb aBn aCx -ibC +wjb aCv aFQ aAb -owI -iiH +hig +wsI aLz aMT aOs @@ -159793,7 +159804,7 @@ dXz dYt dON dOl -vON +gER eaX dYu ect @@ -160049,8 +160060,8 @@ dON dON dON dON -gQw -rYR +sBk +nUj ebc ebQ ecu @@ -160191,7 +160202,7 @@ aAb aAb aAb aIL -tbC +lva aLz aLz aLz @@ -160312,12 +160323,12 @@ dZN dZN dZN dZN -fHS +jPL dZN dZN dLY aad -aeH +lag aad aad aaa @@ -160448,7 +160459,7 @@ aEG aFS aHp aIM -obe +tzT aLB aFS aEG @@ -160563,20 +160574,20 @@ dWJ dLW dYu dZg -hLO -jhK +lYm +hUt dZN -owr -nOV -tOQ -gJj -qMR -ivF +hsc +gkl +qbg +jTP +ktV +xdG aaa -iyd +hJk aaa aaa -iyd +hJk aaa aaa aaa @@ -160752,7 +160763,7 @@ caG chU cjt ckR -kZu +qkw cnR cpv cqQ @@ -160822,12 +160833,12 @@ dTw dTw dZN dZN -hei -gNJ -jPA -jPA -vFw -rbY +kTU +agv +eHb +eHb +qzY +siB dTw aad aad @@ -161069,19 +161080,19 @@ dPJ dQC dRB dSz -tEW +dTx dUi -dTx +iUn dVN -dTx +iUn dXB dYv dTw dZO -kzw -enO -xWZ -mXJ +mIQ +pPt +mhH +tra dTw dTw dTw @@ -161334,7 +161345,7 @@ dUj dXC dYw dZh -ijd +wJf eau edr ebS @@ -168156,7 +168167,7 @@ aCP avQ aFe aGp -oOb +nZa aJg aKF aLP @@ -170713,7 +170724,7 @@ aox apu aqy arb -aax +flG aig auA avU @@ -170970,7 +170981,7 @@ aoy apv aqz apu -aay +arX aig auB avU @@ -171479,8 +171490,8 @@ aiC akU alI amE -aav -aaw +anz +oDr apw aqA apy @@ -171998,7 +172009,7 @@ aiC apy apy apu -aaz +iZm atw auD avW @@ -172255,7 +172266,7 @@ aoB apz apw apv -aaA +asa atw auE avW @@ -172843,7 +172854,7 @@ bsE cAm cBI cDo -aaq +cFc cAm cHW cIW @@ -174923,7 +174934,7 @@ dkv dma dma dma -mMC +pLz dsI dro dvz @@ -175359,7 +175370,7 @@ aaa aaa aad aQR -ost +tma aUq aVR aXF @@ -177216,7 +177227,7 @@ cFr cGP cqd cJe -aar +cKT cMq cAw cPM @@ -179462,7 +179473,7 @@ aaa aaa aaa aaa -aeH +lag aFm aIc aFm @@ -179719,9 +179730,9 @@ aaa aaa aaa aaa -aeH +lag aFm -mEy +umo bbt aFm aMc @@ -179976,10 +179987,10 @@ aaa aaa aaa aaa -aeH +lag aFm -oNW -tmZ +jie +gug aFm aKV aNy @@ -180235,10 +180246,10 @@ ajr ajr aad aFm -pEq -hlc -gUV -hlc +rTc +mqT +uNx +mqT aNz aPh aQZ @@ -180492,7 +180503,7 @@ ajr aad aad aFn -mvf +dWi aJA aJA aMe @@ -182811,7 +182822,7 @@ aFn aMn aNI aPr -aaB +aRi aKV aUC aWk diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 0e6feb67c6..d65ac85bb1 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -2,17 +2,6 @@ "aaa" = ( /turf/open/space/basic, /area/space) -"aab" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, -/obj/structure/table, -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/restrooms) "aac" = ( /obj/effect/landmark/carpspawn, /turf/open/space, @@ -1445,7 +1434,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -3063,7 +3052,6 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/energy/e_gun/advtaser, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -3613,6 +3601,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/item/gun/energy/e_gun, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "agV" = ( @@ -3882,7 +3871,7 @@ /obj/item/clothing/head/helmet/riot, /obj/item/clothing/head/helmet/riot, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -3895,6 +3884,11 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/suit/armor/riot, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "ahD" = ( @@ -3993,12 +3987,6 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "ahI" = ( -/obj/structure/rack, -/obj/item/shield/riot{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/shield/riot, /obj/machinery/button/door{ id = "armory"; name = "Armory Shutters"; @@ -4015,12 +4003,15 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/rack, +/obj/item/gun/energy/pumpaction/blaster, +/obj/item/gun/energy/pumpaction/blaster, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "ahJ" = ( /obj/machinery/disposal/bin, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -4158,7 +4149,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -4903,7 +4894,7 @@ name = "Evidence Closet 5" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -7192,7 +7183,7 @@ /obj/item/reagent_containers/glass/bottle/morphine, /obj/machinery/light/small, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/bot, @@ -7248,7 +7239,7 @@ "anu" = ( /obj/machinery/vending/security, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/showroomfloor, @@ -7733,7 +7724,7 @@ "aot" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/red{ @@ -7780,7 +7771,7 @@ /area/maintenance/port/fore) "aoy" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/closet/secure_closet/warden, @@ -9298,7 +9289,7 @@ }, /obj/structure/table/wood, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/grimy, @@ -9456,7 +9447,7 @@ /area/engine/gravity_generator) "arS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/cable{ @@ -11192,7 +11183,7 @@ dir = 5 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/neutral{ @@ -13469,7 +13460,7 @@ /area/security/brig) "azQ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/filingcabinet, @@ -14063,7 +14054,7 @@ /area/hallway/primary/fore) "aAX" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light/small{ @@ -14112,7 +14103,7 @@ "aBc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/red{ @@ -14609,7 +14600,7 @@ maxcharge = 2000 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/spawner/lootdrop/maintenance, @@ -14669,15 +14660,12 @@ /area/security/nuke_storage) "aCh" = ( /obj/structure/safe, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/backpack/duffelbag/syndie/hitman{ contents = newlist(/obj/item/clothing/suit/armor/vest,/obj/item/gun/ballistic/automatic/pistol,/obj/item/suppressor,/obj/item/melee/classic_baton/telescopic,/obj/item/clothing/mask/balaclava,/obj/item/bodybag,/obj/item/soap/nanotrasen) }, -/obj/item/storage/backpack/duffelbag/syndie/hitman, /obj/item/card/id/silver/reaper, /obj/item/lazarus_injector, /obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, /obj/item/clothing/neck/stethoscope, /obj/item/book{ desc = "An undeniably handy book."; @@ -15124,7 +15112,7 @@ /area/maintenance/port/fore) "aDh" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -16127,7 +16115,7 @@ "aFc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -16225,7 +16213,7 @@ "aFo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -16236,7 +16224,7 @@ "aFp" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -16584,7 +16572,7 @@ icon_state = "2-4" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/machinery/camera{ @@ -16858,7 +16846,7 @@ }, /obj/item/pen, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/reagent_dispensers/peppertank{ @@ -17616,7 +17604,7 @@ /area/maintenance/starboard/fore) "aHX" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -18710,7 +18698,7 @@ icon_state = "1-8" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -19722,7 +19710,7 @@ /area/storage/primary) "aMF" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -19794,7 +19782,7 @@ /area/hallway/primary/fore) "aMK" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20623,7 +20611,7 @@ /area/lawoffice) "aOs" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/table, @@ -21207,7 +21195,7 @@ "aPA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -21396,7 +21384,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/neutral{ @@ -23473,7 +23461,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -23863,7 +23851,7 @@ /area/crew_quarters/locker) "aUL" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -25956,7 +25944,7 @@ pixel_x = -38 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/loading_area{ @@ -27129,6 +27117,10 @@ /obj/effect/turf_decal/tile/neutral{ dir = 2 }, +/obj/structure/sign/departments/custodian{ + pixel_x = 32; + pixel_y = -32 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baI" = ( @@ -28079,7 +28071,7 @@ "bcn" = ( /obj/structure/rack, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/item/clothing/gloves/color/fyellow, @@ -28277,7 +28269,7 @@ /area/storage/tech) "bcE" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/disposalpipe/segment{ @@ -28446,7 +28438,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/cable/yellow{ @@ -28566,7 +28558,7 @@ }, /obj/structure/closet/secure_closet/security, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/red{ @@ -28783,7 +28775,7 @@ dir = 9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -29276,7 +29268,7 @@ "beo" = ( /obj/structure/closet/secure_closet/security/engine, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/cable/yellow{ @@ -30114,7 +30106,7 @@ pixel_y = 7 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/dark, @@ -30613,7 +30605,7 @@ /obj/item/mop, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -31943,7 +31935,7 @@ /area/hallway/primary/starboard) "bjE" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -32353,7 +32345,7 @@ "bkn" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/brown{ @@ -33024,7 +33016,7 @@ /obj/machinery/computer/teleporter, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/neutral{ @@ -34207,7 +34199,7 @@ /area/ai_monitored/storage/satellite) "bnK" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -34637,7 +34629,7 @@ /area/bridge) "boC" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/storage/fancy/donut_box, @@ -36458,7 +36450,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -37243,7 +37235,7 @@ /obj/structure/table, /obj/item/camera_film, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel, @@ -38242,7 +38234,7 @@ pixel_x = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/dark, @@ -38729,7 +38721,7 @@ "bwr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -38821,7 +38813,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -38943,7 +38935,7 @@ "bwK" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/machinery/chem_dispenser/drinks, @@ -39807,7 +39799,7 @@ "byv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -39973,7 +39965,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue, @@ -40671,7 +40663,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/carpet, @@ -41103,7 +41095,7 @@ pixel_y = -30 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/paper_bin{ @@ -41614,7 +41606,7 @@ /area/crew_quarters/theatre) "bCd" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/table/wood, @@ -41949,7 +41941,7 @@ /area/crew_quarters/toilet/auxiliary) "bCS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -44190,7 +44182,7 @@ dir = 5 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/yellow{ @@ -45223,7 +45215,7 @@ /area/security/vacantoffice) "bJx" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -45233,7 +45225,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/decal/cleanable/cobweb, @@ -45319,7 +45311,7 @@ "bJH" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -45855,6 +45847,7 @@ /obj/machinery/portable_atmospherics/canister/nitrous_oxide{ valve_open = 1 }, +/obj/machinery/atmospherics/miner/n2o, /turf/open/floor/engine/n2o, /area/engine/atmos) "bKJ" = ( @@ -45967,7 +45960,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -46985,7 +46978,7 @@ "bMW" = ( /obj/machinery/teleport/station, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plating, @@ -47352,7 +47345,7 @@ /area/crew_quarters/kitchen) "bNC" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/vending/dinnerware, @@ -47447,7 +47440,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -48899,6 +48892,7 @@ /area/engine/atmos) "bQY" = ( /obj/machinery/portable_atmospherics/canister/toxins, +/obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos) "bQZ" = ( @@ -49198,7 +49192,7 @@ name = "novelty HoS hat" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ @@ -49294,7 +49288,7 @@ "bRO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -49729,7 +49723,7 @@ "bSD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -51342,6 +51336,7 @@ /area/engine/atmos) "bVO" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/miner/carbon_dioxide, /turf/open/floor/engine/co2, /area/engine/atmos) "bVP" = ( @@ -52408,7 +52403,7 @@ /area/hallway/primary/central) "bXZ" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/twohanded/required/kirbyplants{ @@ -53733,7 +53728,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -53817,7 +53812,7 @@ }, /obj/item/pen, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/red{ @@ -53831,7 +53826,7 @@ /area/security/checkpoint/science/research) "caG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sink{ @@ -55905,7 +55900,7 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26; pixel_y = 28 }, @@ -57091,7 +57086,7 @@ icon_state = "2-8" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/reagent_dispensers/cooking_oil, @@ -57265,7 +57260,7 @@ /area/medical/sleeper) "cgT" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -57892,7 +57887,7 @@ /area/maintenance/port/aft) "cie" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -58454,6 +58449,7 @@ /area/engine/atmos) "cjd" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/miner/nitrogen, /turf/open/floor/engine/n2, /area/engine/atmos) "cje" = ( @@ -58468,6 +58464,7 @@ /area/engine/atmos) "cjg" = ( /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/miner/oxygen, /turf/open/floor/engine/o2, /area/engine/atmos) "cjh" = ( @@ -59031,7 +59028,7 @@ /area/maintenance/starboard/aft) "ckm" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sink{ @@ -59626,7 +59623,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -59730,7 +59727,7 @@ /area/science/research) "clI" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/closet/firecloset, @@ -61045,7 +61042,7 @@ /area/science/research) "cok" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/disposalpipe/segment, @@ -62766,7 +62763,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white/side{ @@ -63319,7 +63316,7 @@ "csq" = ( /obj/structure/bed, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/bedsheet/medical, @@ -63349,7 +63346,7 @@ /area/medical/cryo) "cst" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -64556,7 +64553,7 @@ pixel_y = 2 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/sign/warning/nosmoking{ @@ -64778,7 +64775,7 @@ }, /obj/item/storage/secure/briefcase, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/cafeteria{ @@ -65130,7 +65127,7 @@ /area/medical/genetics) "cvC" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/storage/box/syringes, @@ -65705,7 +65702,7 @@ "cwF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/blue{ @@ -65785,7 +65782,7 @@ "cwO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -66781,7 +66778,7 @@ /area/science/circuit) "cyN" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/airalarm{ @@ -67430,7 +67427,7 @@ }, /obj/item/paper, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/table/glass, @@ -68105,7 +68102,7 @@ "cBi" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/delivery, @@ -68521,7 +68518,7 @@ /area/medical/medbay/aft) "cCb" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/closet/secure_closet/personal/patient, @@ -69596,7 +69593,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -70136,7 +70133,7 @@ /area/science/robotics/lab) "cFj" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28; pixel_y = 5 }, @@ -70649,7 +70646,7 @@ "cGi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white/side{ @@ -72046,7 +72043,7 @@ dir = 9 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/machinery/vending/wardrobe/viro_wardrobe, @@ -73267,7 +73264,7 @@ dir = 9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -73902,7 +73899,7 @@ "cLS" = ( /obj/structure/chair/stool, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/green, @@ -73931,7 +73928,7 @@ pixel_y = 25 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/table/wood, @@ -77869,7 +77866,7 @@ /area/hallway/primary/central) "cVi" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -79683,7 +79680,7 @@ network = list("ss13","engine") }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/dark, @@ -80873,6 +80870,17 @@ }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) +"dhD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/obj/structure/table, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/restrooms) "dhE" = ( /obj/structure/sign/poster/contraband/random{ pixel_x = 32 @@ -81295,7 +81303,7 @@ /area/crew_quarters/theatre) "dis" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/disposal/bin, @@ -83283,13 +83291,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) -"ghT" = ( -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/security/prison) "gnZ" = ( /obj/item/radio/intercom{ pixel_y = -30 @@ -83404,15 +83405,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"hYs" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel, -/area/security/prison) "ioI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -83524,10 +83516,6 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"jVj" = ( -/obj/machinery/vr_sleeper, -/turf/open/floor/plasteel, -/area/security/prison) "kfu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, @@ -83535,6 +83523,16 @@ "krD" = ( /turf/closed/wall, /area/science/circuit) +"kwg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/public/glass{ + id_tag = "permahydro"; + name = "Recreation Module" + }, +/turf/open/floor/plasteel, +/area/security/prison) "kwI" = ( /obj/item/wrench, /obj/item/clothing/suit/apron, @@ -83595,6 +83593,10 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"kRT" = ( +/obj/machinery/vr_sleeper, +/turf/open/floor/plasteel, +/area/security/prison) "kVo" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -83614,6 +83616,13 @@ /obj/item/integrated_circuit_printer, /turf/open/floor/plasteel/white, /area/science/circuit) +"lmg" = ( +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/prison) "lsv" = ( /obj/machinery/power/apc{ areastring = "/area/science/circuit"; @@ -83783,6 +83792,13 @@ /obj/item/storage/fancy/candle_box, /turf/open/floor/engine/cult, /area/library) +"oba" = ( +/obj/structure/chair/stool, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/security/prison) "obb" = ( /obj/structure/target_stake, /obj/effect/turf_decal/stripes/line{ @@ -83819,17 +83835,6 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"odR" = ( -/obj/structure/table, -/obj/item/folder, -/obj/item/paper/guides/jobs/hydroponics, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/item/pen, -/obj/item/storage/crayons, -/turf/open/floor/plasteel, -/area/security/prison) "ohj" = ( /obj/item/integrated_electronics/analyzer, /obj/item/integrated_electronics/debugger, @@ -83935,13 +83940,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"pzu" = ( -/obj/structure/chair/stool, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/prison) "pCV" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -83997,10 +83995,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"qnB" = ( -/obj/machinery/smartfridge/organ/preloaded, -/turf/closed/wall, -/area/medical/surgery) "qqg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -84068,7 +84062,7 @@ /area/library) "qXt" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/dark, @@ -84263,16 +84257,6 @@ /obj/machinery/vending/assist, /turf/open/floor/plasteel, /area/science/mixing) -"uEa" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/public/glass{ - id_tag = "permahydro"; - name = "Recreation Module" - }, -/turf/open/floor/plasteel, -/area/security/prison) "uGW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -84291,6 +84275,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"uHA" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/security/prison) "uJU" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -84375,6 +84368,10 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space) +"vPN" = ( +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/surgery) "wdu" = ( /obj/structure/grille, /obj/structure/lattice, @@ -84447,6 +84444,17 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/science/misc_lab) +"xcb" = ( +/obj/structure/table, +/obj/item/folder, +/obj/item/paper/guides/jobs/hydroponics, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/item/pen, +/obj/item/storage/crayons, +/turf/open/floor/plasteel, +/area/security/prison) "xeC" = ( /obj/machinery/light, /turf/open/floor/plasteel/dark, @@ -104233,7 +104241,7 @@ cia cia cpX cia -qnB +vPN cia ceu dyg @@ -106706,11 +106714,11 @@ aaa aaf aaf aay -odR -hYs +xcb +uHA abC -uEa -hYs +kwg +uHA abC abC acr @@ -106964,10 +106972,10 @@ aaf aaa aax abl -pzu -ghT +oba +lmg aax -jVj +kRT aaR aaR aaI @@ -118821,7 +118829,7 @@ aBu aCB aDU aFg -aab +dhD axC axC axC diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index de42e1ac63..99c536bd3c 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -3571,14 +3571,6 @@ }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"Wt" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall, -/area/mine/laborcamp/security) -"Wz" = ( -/obj/effect/mapping_helpers/planet_z, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) "WA" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -3630,26 +3622,6 @@ }, /turf/open/floor/plasteel, /area/mine/production) -"WF" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall, -/area/mine/laborcamp) -"WH" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall, -/area/mine/eva) -"WI" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall, -/area/mine/production) -"WJ" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall/r_wall, -/area/mine/maintenance) -"WK" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/closed/wall, -/area/mine/living_quarters) (1,1,1) = {" aa @@ -3906,7 +3878,7 @@ aj aj aj aj -Wz +aj "} (2,1,1) = {" aa @@ -8751,7 +8723,7 @@ aq WB aq bi -WF +aq WC aq bZ @@ -9012,7 +8984,7 @@ az az aq ca -Wt +ca ca aj aj @@ -12102,7 +12074,7 @@ ai cQ dk dA -WJ +cQ ed er eM @@ -13134,7 +13106,7 @@ dR ef es dZ -WK +cM fg cM cM @@ -20320,9 +20292,9 @@ bt bH bV cq -WH +bf +bq bq -WI db bP bP diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index bd3d72dc85..a9528ae61a 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -955,19 +955,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"abn" = ( -/obj/structure/table, -/obj/machinery/camera{ - c_tag = "Locker Room East"; - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/bedsheetbin/color, -/turf/open/floor/plasteel/white/corner, -/area/crew_quarters/dorms) "abo" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -1094,7 +1081,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/purple{ @@ -1279,22 +1266,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"abQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/computer/arcade{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/port) "abR" = ( /obj/structure/lattice, /turf/open/space, @@ -3052,7 +3023,7 @@ "afp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -3138,7 +3109,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -4288,7 +4259,7 @@ /area/maintenance/starboard/fore) "ahk" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -4440,7 +4411,7 @@ "ahy" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -4475,7 +4446,7 @@ "ahB" = ( /obj/machinery/photocopier, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable/white{ @@ -4863,6 +4834,7 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/item/gun/energy/pumpaction/blaster, /turf/open/floor/plasteel/dark, /area/security/brig) "aip" = ( @@ -7740,7 +7712,7 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -7886,7 +7858,7 @@ "anj" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/end{ @@ -8367,7 +8339,7 @@ "anZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -8554,7 +8526,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/red{ @@ -9965,7 +9937,7 @@ icon_state = "plant-21" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -10216,7 +10188,7 @@ pixel_y = -22 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/paper_bin, @@ -11445,7 +11417,7 @@ "atj" = ( /obj/machinery/vending/coffee, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -12887,7 +12859,7 @@ /area/hallway/primary/port) "avX" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/twohanded/required/kirbyplants{ @@ -12902,7 +12874,7 @@ /obj/item/stock_parts/cell/high, /obj/machinery/cell_charger, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -14105,7 +14077,7 @@ /area/engine/atmos) "ayl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -14116,7 +14088,7 @@ "aym" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/delivery, @@ -14753,7 +14725,7 @@ "azD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ - name = "Cabin" + name = "Bar Back Room" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -15311,6 +15283,19 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"aAJ" = ( +/obj/structure/table, +/obj/machinery/camera{ + c_tag = "Locker Room East"; + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel/white/corner, +/area/crew_quarters/dorms) "aAK" = ( /obj/structure/sign/poster/random, /turf/closed/wall, @@ -16093,7 +16078,7 @@ "aCh" = ( /obj/machinery/vending/snack/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/bot, @@ -16186,11 +16171,13 @@ "aCs" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light/small, +/obj/machinery/atmospherics/miner/oxygen, /turf/open/floor/engine/o2, /area/engine/atmos) "aCw" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/light/small, +/obj/machinery/atmospherics/miner/nitrogen, /turf/open/floor/engine/n2, /area/engine/atmos) "aCz" = ( @@ -16503,7 +16490,7 @@ /obj/item/clipboard, /obj/item/toy/figure/chef, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -16714,7 +16701,7 @@ /area/engine/break_room) "aDw" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -17444,7 +17431,7 @@ "aEK" = ( /obj/machinery/vending/clothing, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -17977,7 +17964,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/cable{ @@ -18209,7 +18196,7 @@ /area/hallway/primary/port) "aFL" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20148,7 +20135,7 @@ /obj/structure/table, /obj/item/storage/pill_bottle/dice, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -21489,7 +21476,7 @@ "aLg" = ( /obj/machinery/vending/snack/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -22597,7 +22584,7 @@ /area/maintenance/starboard/central) "aNF" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -23062,7 +23049,7 @@ /area/engine/engineering) "aOG" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -23834,7 +23821,7 @@ "aPW" = ( /obj/machinery/vending/snack/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -25049,7 +25036,7 @@ name = "emergency shower" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -26916,7 +26903,7 @@ /obj/item/storage/box/bodybags, /obj/item/pen, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -28252,7 +28239,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -29794,7 +29781,7 @@ /area/hallway/primary/aft) "baN" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -30100,7 +30087,7 @@ /area/medical/medbay/zone3) "bbu" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -31241,7 +31228,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -32128,7 +32115,7 @@ /area/security/checkpoint) "beK" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -34456,7 +34443,7 @@ pixel_y = -22 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ @@ -37099,7 +37086,7 @@ "dai" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/blue{ @@ -37180,6 +37167,22 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"dEa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/arcade{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/port) "dFV" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -37669,6 +37672,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/atmospherics/miner/n2o, /turf/open/floor/engine/n2o, /area/engine/atmos) "gcw" = ( @@ -37974,6 +37978,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/atmospherics/miner/carbon_dioxide, /turf/open/floor/engine/co2, /area/engine/atmos) "hTn" = ( @@ -38421,6 +38426,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos) "kiw" = ( @@ -39022,6 +39028,12 @@ dir = 1 }, /area/engine/atmos) +"ooX" = ( +/obj/machinery/smartfridge/organ/preloaded{ + pixel_y = 2 + }, +/turf/closed/wall, +/area/medical/medbay/zone3) "oql" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel, @@ -40387,7 +40399,7 @@ /area/maintenance/starboard) "sHf" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -42215,6 +42227,7 @@ }, /obj/structure/table, /obj/machinery/firealarm{ + dir = 1; pixel_y = -26 }, /obj/effect/turf_decal/tile/neutral, @@ -42280,6 +42293,7 @@ }, /obj/effect/turf_decal/delivery, /obj/machinery/firealarm{ + dir = 1; pixel_y = -26 }, /obj/effect/turf_decal/tile/neutral, @@ -42880,12 +42894,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"uvp" = ( -/obj/machinery/smartfridge/organ/preloaded{ - pixel_y = 2 - }, -/turf/closed/wall, -/area/medical/medbay/zone3) "uxJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -76202,7 +76210,7 @@ aZp bak bbc bbQ -abQ +dEa bdD beu sKE @@ -81601,7 +81609,7 @@ aSh bcf bcW blt -uvp +ooX aOL bfA bfX @@ -82340,7 +82348,7 @@ awQ axK ayC awQ -abn +aAJ aBT awQ aDI diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 9f1c1824cd..be4128208a 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -2,63 +2,12 @@ "aaa" = ( /turf/open/space/basic, /area/space) -"aab" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/bedsheetbin/color, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/dorms) -"aac" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/table, -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/restrooms) "aad" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/maintenance/department/science) -"aae" = ( -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) -"aaf" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) "abf" = ( /obj/structure/bed, /turf/open/floor/plating, @@ -68,13 +17,6 @@ /obj/structure/grille, /turf/open/space, /area/space/nearstation) -"abD" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "abI" = ( /obj/structure/lattice, /turf/open/space, @@ -174,7 +116,6 @@ pixel_x = -27 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 26 }, /turf/open/floor/circuit, @@ -672,7 +613,7 @@ /obj/item/pen, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/item/paper_bin, @@ -1621,6 +1562,13 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison) +"afI" = ( +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "afJ" = ( /obj/effect/landmark/carpspawn, /turf/open/space/basic, @@ -2453,7 +2401,7 @@ dir = 6 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /turf/open/floor/plasteel/showroomfloor, @@ -3387,7 +3335,7 @@ /obj/item/gun/energy/e_gun, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /turf/open/floor/plasteel/dark, @@ -3899,15 +3847,9 @@ /area/security/armory) "akN" = ( /obj/effect/landmark/event_spawn, -/mob/living/simple_animal/bot/secbot{ - arrest_type = 1; - health = 45; - icon_state = "secbot1"; - idcheck = 1; - name = "Sergeant-at-Armsky"; - on = 1; - weaponscheck = 1 - }, +/obj/structure/rack, +/obj/item/gun/energy/pumpaction/blaster, +/obj/item/gun/energy/pumpaction/blaster, /turf/open/floor/plasteel/dark, /area/security/armory) "akO" = ( @@ -4248,7 +4190,7 @@ }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /obj/effect/turf_decal/tile/red{ @@ -4964,7 +4906,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/showroomfloor, @@ -7277,6 +7219,22 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/dorms) +"asg" = ( +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/dorms) "ash" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -8228,7 +8186,7 @@ dir = 10 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -8715,7 +8673,7 @@ /area/crew_quarters/dorms) "avl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/computer/cryopod{ @@ -9674,7 +9632,7 @@ light_color = "#e8eaff" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/computer/rdconsole{ @@ -11431,7 +11389,6 @@ "aBB" = ( /obj/machinery/computer/cargo/request, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /turf/open/floor/wood, @@ -12379,7 +12336,7 @@ /area/storage/primary) "aDB" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral, @@ -13681,6 +13638,23 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) +"aGm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/arcade{ + icon_state = "arcade"; + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) "aGn" = ( /obj/item/twohanded/required/kirbyplants/photosynthetic{ layer = 3.1 @@ -14356,7 +14330,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/blue{ @@ -14549,18 +14522,6 @@ }, /turf/open/space, /area/solar/port) -"aIA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "aIC" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -14873,6 +14834,17 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/restrooms) +"aJo" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/table, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/restrooms) "aJp" = ( /obj/item/chair, /turf/open/floor/plating, @@ -15280,6 +15252,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"aKm" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) "aKn" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16684,19 +16663,6 @@ /turf/open/floor/plating, /area/maintenance/disposal) "aNV" = ( -/obj/machinery/mineral/stacking_unit_console{ - dir = 2; - machinedir = 8; - pixel_x = -32; - pixel_y = 32 - }, -/obj/machinery/conveyor{ - dir = 4; - id = "garbagestacked" - }, -/turf/open/floor/plating, -/area/maintenance/disposal) -"aNW" = ( /obj/machinery/conveyor{ dir = 4; id = "garbagestacked" @@ -17508,7 +17474,7 @@ dir = 10 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel, @@ -18556,7 +18522,7 @@ /area/maintenance/department/crew_quarters/bar) "aSA" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/hydroponics/constructable, @@ -18775,7 +18741,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/brown{ @@ -19108,7 +19073,7 @@ "aTP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral, @@ -21328,7 +21293,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/brown, @@ -21725,7 +21690,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/dark, @@ -22077,7 +22042,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/green{ @@ -24181,17 +24146,6 @@ /obj/item/caution, /turf/open/floor/plating, /area/maintenance/department/cargo) -"beT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Monastery Transit" - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/chapel/dock) "beU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -24433,7 +24387,6 @@ "bfx" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/firealarm{ - dir = 1; pixel_y = 24 }, /obj/effect/turf_decal/delivery, @@ -24608,6 +24561,12 @@ /obj/machinery/shieldwallgen, /turf/open/floor/plating, /area/maintenance/department/cargo) +"bfQ" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "bfY" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/effect/turf_decal/tile/neutral, @@ -24819,7 +24778,6 @@ /area/hallway/primary/central) "bgx" = ( /obj/machinery/firealarm{ - dir = 1; pixel_y = 27 }, /obj/structure/chair, @@ -26683,7 +26641,7 @@ "bly" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26; pixel_y = 28 }, @@ -27994,7 +27952,6 @@ "boz" = ( /obj/machinery/vending/clothing, /obj/machinery/firealarm{ - dir = 1; pixel_y = 27 }, /obj/effect/turf_decal/tile/blue{ @@ -29426,13 +29383,6 @@ dir = 1 }, /obj/effect/landmark/start/chemist, -/obj/machinery/button/door{ - id = "chemistry_shutters"; - name = "Shutters Control"; - pixel_x = 26; - pixel_y = 4; - req_access_txt = "5; 33" - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, @@ -29474,15 +29424,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"brp" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-03" - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -24 - }, -/turf/open/floor/plasteel/dark, -/area/science/lab) "brq" = ( /obj/structure/sink/kitchen{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -30024,7 +29965,7 @@ "bsB" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/sign/poster/official/random{ @@ -30231,7 +30172,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/green, @@ -30360,7 +30301,7 @@ /obj/item/crowbar, /obj/item/wrench, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/item/multitool, @@ -30810,7 +30751,7 @@ /area/medical/chemistry) "bun" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/yellow{ @@ -30848,7 +30789,7 @@ network = list("ss13","rd") }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -31469,7 +31410,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/purple{ @@ -31964,13 +31905,27 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "bwW" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "chemistry shutters" +/obj/structure/rack, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) +"bxa" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/research_and_development, +/obj/item/disk/tech_disk, +/obj/item/disk/design_disk, +/turf/open/floor/plasteel/dark, +/area/science/lab) "bxc" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -34270,7 +34225,7 @@ /area/science/storage) "bBH" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/purple{ @@ -34299,7 +34254,7 @@ "bBK" = ( /obj/structure/closet/bombcloset, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sign/poster/official/random{ @@ -35599,7 +35554,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -35961,8 +35916,7 @@ dir = 1 }, /obj/machinery/vending/wallmed{ - pixel_y = 28; - products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1) + pixel_y = 28 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/landmark/blobstart, @@ -36644,7 +36598,7 @@ "bGe" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -36690,7 +36644,7 @@ network = list("ss13","rd") }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/engine, @@ -37123,7 +37077,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -37178,7 +37132,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/purple{ dir = 1 }, @@ -37303,6 +37256,19 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"bHp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "bHq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -37798,8 +37764,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/vending/wallmed{ - pixel_y = 28; - products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1) + pixel_y = 28 }, /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -38077,6 +38042,11 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/dock) +"bIY" = ( +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) "bIZ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -38760,8 +38730,7 @@ /area/medical/medbay/central) "bKw" = ( /obj/machinery/vending/wallmed{ - pixel_y = 28; - products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1) + pixel_y = 28 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -39155,6 +39124,15 @@ heat_capacity = 1e+006 }, /area/chapel/dock) +"bLs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) "bLt" = ( /obj/effect/decal/cleanable/oil{ icon_state = "floor6" @@ -39311,7 +39289,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/white, @@ -39665,6 +39643,14 @@ heat_capacity = 1e+006 }, /area/chapel/dock) +"bMy" = ( +/obj/structure/window/reinforced{ + dir = 8; + layer = 2.9 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "bMA" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/engine, @@ -40516,6 +40502,19 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/dock) +"bOy" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/dock) "bOz" = ( /obj/structure/chair/comfy/black{ dir = 1 @@ -40977,7 +40976,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/yellow{ @@ -41115,6 +41114,7 @@ /area/engine/atmos) "bQa" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/machinery/atmospherics/miner/n2o, /turf/open/floor/engine/n2o, /area/engine/atmos) "bQb" = ( @@ -41200,7 +41200,6 @@ }, /obj/effect/turf_decal/stripes/line, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /turf/open/floor/plasteel/dark, @@ -41252,7 +41251,6 @@ }, /obj/item/stock_parts/cell/high/plus, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/green{ @@ -42226,6 +42224,12 @@ /obj/structure/flora/ausbushes, /turf/open/floor/plating/asteroid, /area/chapel/asteroid/monastery) +"bSn" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/space, +/area/space/nearstation) "bSo" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -42523,6 +42527,7 @@ /area/engine/atmos) "bSX" = ( /obj/machinery/portable_atmospherics/canister/toxins, +/obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos) "bSY" = ( @@ -42923,7 +42928,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/yellow{ @@ -44029,6 +44033,7 @@ /area/engine/atmos) "bWf" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/miner/carbon_dioxide, /turf/open/floor/engine/co2, /area/engine/atmos) "bWg" = ( @@ -44760,6 +44765,12 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) +"bXI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/chapel/main/monastery) "bXJ" = ( /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) @@ -45081,24 +45092,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"bYM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "bYN" = ( /obj/structure/cable{ icon_state = "4-8" @@ -45171,15 +45164,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, /turf/open/floor/plasteel, /area/engine/engineering) "bYR" = ( @@ -45325,7 +45318,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/stripes/corner{ @@ -46143,6 +46135,7 @@ /area/engine/atmos) "cbt" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/miner/nitrogen, /turf/open/floor/engine/n2, /area/engine/atmos) "cbu" = ( @@ -46150,6 +46143,7 @@ /area/engine/atmos) "cbv" = ( /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/miner/oxygen, /turf/open/floor/engine/o2, /area/engine/atmos) "cbw" = ( @@ -46674,7 +46668,6 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/machinery/power/port_gen/pacman, /turf/open/floor/plasteel, /area/engine/engineering) "cdK" = ( @@ -46843,15 +46836,6 @@ }, /turf/open/floor/plating/asteroid, /area/chapel/asteroid/monastery) -"cep" = ( -/obj/structure/sign/poster/official/random{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "ceq" = ( /obj/machinery/power/emitter, /turf/open/floor/plating, @@ -46942,6 +46926,16 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) +"ceG" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/structure/rack, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "ceH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -47112,6 +47106,22 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) +"cfp" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/main/monastery) "cfr" = ( /obj/structure/transit_tube_pod, /obj/structure/transit_tube/station/reverse{ @@ -47399,13 +47409,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"cgt" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9 - }, -/turf/open/floor/plating, -/area/engine/engineering) "cgu" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -47520,7 +47523,7 @@ /area/engine/engineering) "cgV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -48339,7 +48342,7 @@ "ckD" = ( /obj/structure/chair/wood/normal, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/open/floor/plasteel/dark, @@ -50141,19 +50144,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/dock) -"cqI" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/dock) "cqS" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -50895,22 +50885,6 @@ /obj/machinery/vending/wardrobe/chap_wardrobe, /turf/open/floor/carpet, /area/chapel/office) -"cua" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main/monastery) "cuc" = ( /obj/machinery/light, /obj/machinery/camera{ @@ -50931,6 +50905,13 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"cui" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "cuk" = ( /obj/structure/closet{ name = "beekeeping wardrobe" @@ -51843,22 +51824,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"cxj" = ( -/obj/structure/table, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/obj/item/pipe_dispenser, -/obj/item/pipe_dispenser, -/obj/item/pipe_dispenser, -/obj/machinery/light, -/obj/effect/turf_decal/delivery, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "cxk" = ( /obj/structure/window/reinforced{ dir = 1; @@ -52007,6 +51972,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/library/lounge) +"cxW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "cxX" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -52165,7 +52136,6 @@ network = list("ss13","monastery") }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /turf/open/floor/plasteel/dark, @@ -52404,12 +52374,6 @@ }, /turf/open/floor/plasteel/dark, /area/library) -"cAp" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "cAr" = ( /obj/machinery/light/small{ dir = 8 @@ -52561,6 +52525,15 @@ }, /turf/open/floor/plasteel/dark, /area/library) +"cAQ" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) "cAS" = ( /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/plasteel/dark, @@ -52858,19 +52831,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) -"cJd" = ( -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "cJo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -52889,6 +52849,23 @@ }, /turf/open/floor/plasteel, /area/science/explab) +"cKV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"cLw" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/engine/engineering) "cOp" = ( /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, @@ -52898,13 +52875,6 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/science/xenobiology) -"cOA" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/engineering) "cPy" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2 @@ -52939,14 +52909,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"cQZ" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/plating, -/area/maintenance/department/engine) -"cRJ" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/quartermaster/warehouse) "cSJ" = ( /obj/item/reagent_containers/glass/beaker/cryoxadone{ pixel_x = -2; @@ -53002,15 +52964,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/lab) -"cUT" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "cXW" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -53063,6 +53016,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"dgj" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "dgz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -53084,13 +53044,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"dhu" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "dhz" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -53135,12 +53088,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/explab) -"dlI" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "dmP" = ( /obj/structure/chair{ dir = 8 @@ -53212,21 +53159,10 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) -"dqi" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) +"dps" = ( +/obj/machinery/status_display/ai, +/turf/closed/wall, +/area/quartermaster/qm) "dqw" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "0"; @@ -53262,6 +53198,13 @@ /obj/machinery/reagentgrinder, /turf/open/floor/plating, /area/maintenance/department/cargo) +"dsz" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "dtm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -53327,24 +53270,6 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plating, /area/maintenance/department/engine) -"dzA" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/rack, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/department/chapel/monastery) -"dAa" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "dAF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -53359,30 +53284,54 @@ icon_state = "platingdmg1" }, /area/maintenance/department/engine) -"dFF" = ( -/turf/closed/wall/r_wall, +"dEy" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"dFJ" = ( +/turf/open/floor/engine, /area/engine/supermatter) -"dGd" = ( +"dHr" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/machinery/meter, +/obj/machinery/button/door{ + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_y = 24; + req_access_txt = "10" + }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/engine, /area/engine/engineering) -"dGp" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ +"dHZ" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/chemist, +/obj/machinery/button/door{ + id = "chemistry_shutters"; + name = "Shutters Control"; + pixel_x = 26; + pixel_y = 4; + req_access_txt = "5; 33" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/closed/wall/r_wall, -/area/engine/engineering) -"dHF" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"dJk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating, +/area/engine/atmos) "dJm" = ( /obj/structure/cable{ icon_state = "4-8" @@ -53442,47 +53391,57 @@ /obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating, /area/maintenance/department/engine) -"dPZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"dQj" = ( +/mob/living/simple_animal/bot/secbot{ + arrest_type = 1; + health = 45; + icon_state = "secbot1"; + idcheck = 1; + name = "Sergeant-at-Armsky"; + on = 1; + weaponscheck = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, +/area/security/armory) +"dSp" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ + dir = 1 + }, +/turf/open/floor/plating/airless, /area/engine/engineering) -"dRs" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space) "dSr" = ( /obj/item/chair, /turf/open/floor/wood, /area/maintenance/department/engine) +"dTz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, +/turf/open/floor/plasteel/dark, +/area/chapel/main/monastery) "dTV" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"dUk" = ( -/obj/machinery/cryopod{ +"dUI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/security/prison) -"dVt" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /turf/open/floor/plasteel/white, -/area/medical/chemistry) +/area/hallway/secondary/entry) "dVI" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -53536,6 +53495,10 @@ }, /turf/open/floor/plating, /area/lawoffice) +"ebT" = ( +/mob/living/simple_animal/hostile/retaliate/goose, +/turf/open/floor/wood, +/area/maintenance/department/crew_quarters/dorms) "edl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53549,6 +53512,10 @@ /obj/structure/chair/office/light, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"eex" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/quartermaster/office) "eeQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -53584,22 +53551,50 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"eiV" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"ejJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "ekU" = ( /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"ekV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "elk" = ( /obj/structure/chair/office/dark, /turf/open/floor/wood, /area/lawoffice) +"epj" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "epJ" = ( /obj/structure/sign/poster/contraband/random{ pixel_y = 32 }, /turf/open/floor/carpet, /area/maintenance/department/crew_quarters/dorms) +"epV" = ( +/obj/structure/chair, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/engine/engineering) "eqD" = ( /obj/structure/sign/poster/contraband/random{ pixel_x = -32 @@ -53609,20 +53604,6 @@ icon_state = "wood-broken" }, /area/maintenance/department/crew_quarters/dorms) -"eqM" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"erV" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "eta" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Supplies"; @@ -53641,40 +53622,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"eue" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) -"eux" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) -"euN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-10" - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main/monastery) "euQ" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -53684,20 +53631,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"eyT" = ( -/obj/machinery/jukebox, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/bar) -"ezo" = ( -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/obj/structure/rack, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/department/chapel/monastery) +"eyj" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) "ezF" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -53729,6 +53666,23 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"eAH" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"eAZ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "eCw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53767,6 +53721,19 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"eFG" = ( +/obj/machinery/mineral/stacking_unit_console{ + dir = 2; + machinedir = 8; + pixel_x = -32; + pixel_y = 32 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "garbagestacked" + }, +/turf/open/floor/plating, +/area/maintenance/disposal) "eHI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, @@ -53791,17 +53758,6 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) -"eMz" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine"; - req_access_txt = "10" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "eMC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -53821,15 +53777,6 @@ /obj/structure/lattice, /turf/closed/wall, /area/space/nearstation) -"eOA" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "eOZ" = ( /obj/structure/closet, /obj/item/clothing/suit/judgerobe, @@ -53837,25 +53784,18 @@ /obj/item/gavelhammer, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"ePS" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -28 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "ePU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/closed/wall, /area/maintenance/department/security/brig) +"eQa" = ( +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/department/chapel/monastery) "eQN" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -53877,6 +53817,18 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) +"eRp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"eSB" = ( +/obj/machinery/computer/cryopod{ + dir = 1; + pixel_y = -26 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "eSL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/beacon, @@ -53898,10 +53850,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"eVW" = ( -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/open/floor/plating, -/area/engine/engineering) "eWi" = ( /obj/structure/cable{ icon_state = "0-4" @@ -53931,12 +53879,6 @@ /obj/item/stack/cable_coil/cut/random, /turf/open/floor/plating, /area/maintenance/department/cargo) -"fbu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) "fdQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53995,6 +53937,9 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"ffK" = ( +/turf/open/space/basic, +/area/hallway/secondary/entry) "fhM" = ( /obj/item/storage/secure/safe{ pixel_x = -22 @@ -54021,6 +53966,22 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"fjC" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/obj/structure/rack, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) +"fjD" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "fkH" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -54033,20 +53994,16 @@ }, /turf/open/floor/plasteel, /area/science/explab) -"flP" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "fmh" = ( /turf/open/floor/wood, /area/maintenance/department/engine) -"fml" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 +"fmL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" }, -/turf/closed/wall/r_wall, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "fmU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -54087,6 +54044,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/department/engine) +"frj" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "ftp" = ( /turf/open/floor/plating{ icon_state = "platingdmg1" @@ -54136,10 +54099,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) -"fwo" = ( -/obj/machinery/door/airlock/maintenance, -/turf/open/floor/plating, -/area/chapel/main/monastery) "fwr" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -54153,6 +54112,21 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"fxC" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"fym" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/supermatter) "fyF" = ( /obj/structure/cable/yellow{ icon_state = "0-4" @@ -54221,21 +54195,30 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"fFv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +"fBZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/supermatter) +"fCC" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) -"fGt" = ( -/obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) +"fFv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "fIu" = ( /obj/structure/disposalpipe/segment{ @@ -54309,9 +54292,19 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/plasteel/dark, /area/library/lounge) -"fWE" = ( +"fZK" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/engine, -/area/engine/supermatter) +/area/engine/engineering) "gam" = ( /obj/machinery/door/airlock/medical/glass{ name = "Service Door"; @@ -54324,18 +54317,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) -"gaJ" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/quartermaster/qm) -"gaQ" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "gcj" = ( /obj/machinery/vending/kink, /obj/effect/turf_decal/tile/blue{ @@ -54362,7 +54343,7 @@ "gdL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/purple{ @@ -54383,13 +54364,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"gfh" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "gfi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -54400,21 +54374,10 @@ /turf/open/floor/plating, /area/maintenance/department/cargo) "ggg" = ( -/mob/living/simple_animal/hostile/retaliate/goose, -/turf/open/floor/wood, -/area/maintenance/department/crew_quarters/dorms) -"gih" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 }, -/obj/machinery/light{ - dir = 1; - light_color = "#d1dfff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "giI" = ( /obj/machinery/light/small{ @@ -54459,12 +54422,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"gkN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/engine, -/area/engine/engineering) "gkR" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/structure/extinguisher_cabinet{ @@ -54594,14 +54551,6 @@ heat_capacity = 1e+006 }, /area/hallway/secondary/exit/departure_lounge) -"gvO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/chapel/dock) "gwn" = ( /obj/structure/sign/warning{ pixel_y = 32 @@ -54654,6 +54603,24 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/carpet, /area/lawoffice) +"gBb" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"gDR" = ( +/obj/machinery/camera{ + c_tag = "Central Primary Hallway Escape"; + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "gDZ" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -54673,6 +54640,11 @@ }, /turf/open/floor/plasteel/dark, /area/science/explab) +"gEo" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "gFo" = ( /obj/structure/window/reinforced, /obj/structure/table/glass, @@ -54699,6 +54671,14 @@ /obj/item/clothing/glasses/welding, /turf/open/floor/plasteel/dark, /area/science/lab) +"gFw" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "gGy" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -54706,39 +54686,17 @@ /turf/open/floor/plating, /area/maintenance/department/security/brig) "gGA" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "chemistry shutters" +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/turf/open/floor/plasteel/white, /area/medical/chemistry) -"gHp" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"gHy" = ( -/obj/machinery/computer/cryopod{ - dir = 1; - pixel_y = -26 - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "gHZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -54789,13 +54747,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"gLn" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "gLF" = ( /obj/machinery/vending/snack/random, /obj/effect/turf_decal/tile/neutral{ @@ -54841,12 +54792,29 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"gOI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) "gPV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /turf/open/floor/wood, /area/lawoffice) +"gQf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) "gSH" = ( /turf/closed/wall, /area/lawoffice) @@ -54864,21 +54832,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"gUS" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/camera{ - c_tag = "Engineering Supermatter Fore"; - dir = 1; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/engine, -/area/engine/engineering) "gVc" = ( /turf/open/floor/wood{ icon_state = "wood-broken4" @@ -54891,10 +54844,39 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"gXZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Fore"; + dir = 4; + network = list("ss13","engine") + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "gYo" = ( /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) +"haq" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) +"haA" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods/fifty, +/obj/item/clothing/glasses/welding, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "heC" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 8; @@ -54941,6 +54923,24 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"hjk" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) +"hjD" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "hkQ" = ( /obj/machinery/light{ dir = 4 @@ -54963,6 +54963,26 @@ }, /turf/open/floor/wood, /area/lawoffice) +"hon" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Gas to Filter" + }, +/turf/open/floor/engine, +/area/engine/engineering) +"hoS" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/engine/engineering) "hqo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -54978,13 +54998,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"hrx" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "hvW" = ( /obj/machinery/door/poddoor/preopen{ id = "xenobio4"; @@ -55020,27 +55033,18 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, /area/security/execution/transfer) -"hxh" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "hxn" = ( /obj/structure/chair, /obj/item/clothing/glasses/regular, /turf/open/floor/plating, /area/maintenance/department/science) -"hyl" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 +"hyh" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "hzc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55070,21 +55074,12 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port) -"hCg" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "garbage" +"hCR" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, -/turf/open/floor/plating, -/area/maintenance/disposal) -"hDy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/engineering) +/area/maintenance/department/chapel/monastery) "hDG" = ( /obj/machinery/door/airlock/engineering{ name = "Auxillary Base Construction"; @@ -55117,20 +55112,43 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"hGB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "hHr" = ( /obj/structure/chair/comfy/black{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"hJO" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ +"hIZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"hKp" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/structure/window/plasma/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/machinery/power/rad_collector/anchored, +/turf/open/floor/engine, +/area/engine/supermatter) "hOx" = ( /obj/structure/cable{ icon_state = "2-4" @@ -55168,6 +55186,17 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) +"hQy" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/item/tank/internals/plasma, +/turf/open/floor/plating, +/area/engine/supermatter) "hQz" = ( /obj/structure/closet/emcloset/anchored, /obj/structure/cable/yellow{ @@ -55179,14 +55208,29 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) -"hRQ" = ( -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 +"hSt" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Gas to Cooling Loop" }, -/obj/structure/lattice, -/turf/open/space, -/area/space/nearstation) +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"hSC" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "hSM" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -55211,23 +55255,18 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"hUf" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 9 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"hUi" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/obj/machinery/meter, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "hUt" = ( /obj/structure/closet/crate{ icon_state = "crateopen" }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"hUw" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "hUJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55243,25 +55282,17 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"hWa" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) -"hXm" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "hXt" = ( /obj/structure/girder, /turf/open/floor/plating, /area/maintenance/department/science) +"hXK" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/engine/engineering) "hYe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/red{ @@ -55303,15 +55334,20 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) -"iaZ" = ( -/turf/open/space/basic, -/area/hallway/secondary/entry) "ick" = ( /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel/dark, /area/library) +"iej" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) "igE" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -55360,24 +55396,30 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) -"ikm" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix to Gas" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "ikB" = ( /obj/structure/closet/secure_closet/medical2, /turf/open/floor/plating, /area/maintenance/department/science) +"ikO" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "ilD" = ( /obj/machinery/processor/slime, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"imE" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "ioj" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -55394,13 +55436,43 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"iop" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"ioF" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "iqc" = ( /turf/open/floor/plasteel/stairs/right, /area/maintenance/department/crew_quarters/dorms) -"irs" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) +"irD" = ( +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"irM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "itl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55433,6 +55505,13 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"iwe" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "iyg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55449,6 +55528,11 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"izm" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/engine/engineering) "izB" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod" @@ -55531,20 +55615,6 @@ }, /turf/open/floor/plasteel/white, /area/storage/emergency/port) -"iHe" = ( -/obj/machinery/camera{ - c_tag = "Central Primary Hallway Escape"; - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"iHI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) "iJi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -55558,6 +55628,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/quartermaster/sorting) +"iLh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/engine, +/area/engine/engineering) "iLl" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -55619,22 +55696,6 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) -"iSi" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Cooling Loop Bypass" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "iSz" = ( /obj/structure/cable{ icon_state = "2-8" @@ -55647,14 +55708,9 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"iSL" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plating, -/area/engine/atmos) -"iTE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, +"iTF" = ( +/obj/structure/sign/warning/electricshock, +/turf/closed/wall/r_wall, /area/engine/supermatter) "iVJ" = ( /obj/effect/spawner/lootdrop/organ_spawner, @@ -55674,10 +55730,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"jdA" = ( -/obj/machinery/smartfridge/organ/preloaded, -/turf/closed/wall, -/area/medical/surgery) "jeq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55692,6 +55744,13 @@ dir = 1 }, /area/hallway/secondary/exit/departure_lounge) +"jfr" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "jgr" = ( /obj/machinery/door/airlock/grunge{ name = "Library" @@ -55725,16 +55784,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/crew_quarters/dorms) -"jjA" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Gas to Cooling Loop" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "jjC" = ( /obj/structure/rack, /obj/item/storage/briefcase{ @@ -55747,18 +55796,6 @@ }, /turf/open/floor/wood, /area/lawoffice) -"jkm" = ( -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) -"jrb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "jrG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -55814,17 +55851,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"jtv" = ( -/obj/machinery/camera{ - c_tag = "Engineering Supermatter Starboard"; - dir = 8; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "jvi" = ( /obj/structure/cable{ icon_state = "4-8" @@ -55870,6 +55896,17 @@ /obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/hallway/secondary/entry) +"jzE" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine"; + req_access_txt = "10" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "jAy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55948,39 +55985,15 @@ /obj/machinery/atmospherics/pipe/simple/purple/visible, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"jOw" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "jOB" = ( /turf/open/floor/plating, /area/storage/emergency/starboard) -"jOX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Monastery Transit" - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/chapel/dock) "jPf" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/item/kitchen/knife, /turf/open/floor/plasteel, /area/maintenance/department/engine) -"jPC" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space, -/area/space/nearstation) "jQh" = ( /obj/item/stack/sheet/animalhide/xeno, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -55990,15 +56003,6 @@ icon_state = "platingdmg1" }, /area/maintenance/department/science) -"jQn" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "jRG" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -56009,13 +56013,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"jTc" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Gas to Filter" - }, -/turf/open/floor/engine, -/area/engine/engineering) "jTh" = ( /obj/structure/cable{ icon_state = "1-2" @@ -56037,6 +56034,24 @@ }, /turf/open/floor/carpet, /area/lawoffice) +"jTN" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"jTU" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "jUV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56057,6 +56072,12 @@ /obj/item/stack/ore/iron, /turf/open/floor/plating, /area/maintenance/department/science) +"jXF" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "jXV" = ( /obj/machinery/light/small{ dir = 1 @@ -56081,14 +56102,20 @@ icon_state = "platingdmg3" }, /area/maintenance/department/engine) -"kec" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" +"jZG" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters"; + name = "chemistry shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/chemistry) +"kaR" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 }, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 1 }, /turf/open/floor/engine, /area/engine/engineering) @@ -56146,6 +56173,10 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) +"klb" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/quartermaster/sorting) "klo" = ( /obj/structure/dresser, /obj/structure/mirror{ @@ -56164,16 +56195,32 @@ /obj/item/clothing/under/rank/clown/sexy, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) +"kmd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "kmn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/mixing) +"koz" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "kpK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, /turf/open/floor/plating, /area/maintenance/department/engine) +"kqV" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space) "krU" = ( /obj/structure/chair{ dir = 4 @@ -56187,12 +56234,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"ksC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) +"kuT" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/maintenance/department/engine) "kvj" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -56206,20 +56251,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"kvu" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"kvx" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) "kwm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -56264,6 +56295,15 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"kzK" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria, +/area/security/prison) "kAa" = ( /obj/structure/chair{ dir = 8 @@ -56280,22 +56320,12 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) -"kBe" = ( -/obj/structure/reflector/double/anchored{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "kDf" = ( /obj/machinery/light/small{ dir = 2 }, /turf/open/floor/carpet/black, /area/chapel/office) -"kDI" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/supermatter) "kDJ" = ( /obj/machinery/light{ dir = 8 @@ -56363,7 +56393,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /obj/effect/turf_decal/tile/green{ @@ -56377,6 +56407,10 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"kGc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "kIo" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -56411,6 +56445,16 @@ /obj/structure/closet, /turf/open/floor/plating, /area/maintenance/department/cargo) +"kLT" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "kNf" = ( /obj/machinery/door/window/northleft{ base_state = "right"; @@ -56428,11 +56472,6 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"kNK" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/engine/engineering) "kPi" = ( /obj/structure/table, /obj/machinery/microwave, @@ -56506,10 +56545,20 @@ }, /turf/open/floor/plating, /area/storage/emergency/port) -"kVA" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/quartermaster/sorting) +"kTj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"kTR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "kWQ" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/cable/yellow{ @@ -56523,15 +56572,16 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"kYR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +"kYM" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 }, -/obj/machinery/light, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 }, -/area/hallway/secondary/entry) +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "lcU" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -56559,14 +56609,29 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) -"lfZ" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/quartermaster/office) +"lfx" = ( +/obj/structure/table, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "lhA" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"lhP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "liR" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -56581,30 +56646,18 @@ /obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/open/floor/plating, /area/maintenance/department/cargo) -"llS" = ( -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 +"ljG" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 }, -/area/hallway/secondary/entry) +/turf/open/floor/plasteel, +/area/engine/atmos) "lms" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, /turf/closed/wall, /area/maintenance/department/engine) -"lmv" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1; - light_color = "#d1dfff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "lnn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, @@ -56613,17 +56666,32 @@ }, /turf/open/floor/plasteel, /area/storage/primary) +"lnr" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"loz" = ( +/obj/structure/closet/radiation, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "lqc" = ( /obj/item/toy/gun, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"lqo" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) "lqy" = ( /obj/machinery/door/airlock/grunge{ name = "Library" @@ -56633,13 +56701,27 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/library/lounge) -"lxh" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +"lrM" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"ltB" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) +"lxm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/space, -/area/space/nearstation) +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) "lzJ" = ( /obj/structure/closet/crate/bin, /turf/open/floor/carpet, @@ -56673,24 +56755,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"lCR" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) -"lCY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"lDW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel, -/area/engine/engineering) "lEn" = ( /obj/structure/window/reinforced{ dir = 1 @@ -56761,6 +56825,12 @@ /obj/item/wrench, /turf/open/floor/plating, /area/maintenance/department/science) +"lJI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "lKL" = ( /obj/machinery/door/airlock/abandoned{ name = "Starboard Emergency Storage"; @@ -56795,13 +56865,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"lQy" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/open/space, -/area/space/nearstation) "lQQ" = ( /obj/machinery/door/poddoor/preopen{ id = "bridgespace"; @@ -56827,6 +56890,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"lRX" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/open/floor/plating, +/area/engine/engineering) "lTC" = ( /obj/item/shard, /obj/effect/turf_decal/stripes/line{ @@ -56837,6 +56907,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"lUO" = ( +/obj/structure/sign/warning/radiation, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "lWy" = ( /turf/open/floor/plating, /area/maintenance/department/science) @@ -56858,11 +56932,28 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"lXb" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Gas to Mix" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "lXc" = ( /obj/structure/table, /obj/item/clothing/head/beret, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"lXJ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "mal" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -56903,32 +56994,10 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"mbD" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, +"mci" = ( +/obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, /area/engine/engineering) -"mcf" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"mdi" = ( -/obj/machinery/rnd/production/circuit_imprinter, -/obj/machinery/camera{ - c_tag = "Engineering Starboard Aft"; - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "mdL" = ( /obj/structure/table, /obj/item/paper_bin, @@ -56945,19 +57014,19 @@ /obj/machinery/status_display/evac, /turf/closed/wall/r_wall, /area/engine/supermatter) -"mfg" = ( -/obj/structure/window/reinforced{ - dir = 8 +"mfC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/turf/open/space, -/area/space/nearstation) -"mfx" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"mgz" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "mhl" = ( /obj/machinery/power/emitter, /obj/machinery/light{ @@ -56965,14 +57034,45 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"mlb" = ( -/obj/structure/cable{ - icon_state = "1-8" +"mhn" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/poster/random{ + pixel_x = 32 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"miw" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Fore"; + dir = 1; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"mjk" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"mjn" = ( +/obj/machinery/jukebox, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/bar) +"mjK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/closed/wall/r_wall, /area/engine/engineering) "mlr" = ( /obj/structure/lattice, @@ -56981,26 +57081,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"mlx" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"mlS" = ( -/obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber"; - req_access_txt = "10" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/supermatter) "mmv" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Supplies"; @@ -57048,6 +57128,19 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"mqp" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -28 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "msX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -57086,21 +57179,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"mvA" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/engine/engineering) -"mvY" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 2; - name = "Gas to Filter" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/engine/supermatter) "mwg" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -57111,6 +57189,15 @@ /obj/item/gun/ballistic/shotgun/toy, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"mwl" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/cafeteria, +/area/security/prison) "mwG" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -57119,6 +57206,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/engineering) +"mxu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "mxy" = ( /obj/machinery/power/terminal{ dir = 4 @@ -57168,12 +57261,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/department/engine) -"mAi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "mCe" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -57182,27 +57269,6 @@ }, /turf/open/floor/plating, /area/security/checkpoint/engineering) -"mCP" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"mCU" = ( -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/rods/fifty, -/obj/item/clothing/glasses/welding, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "mDW" = ( /obj/machinery/power/smes{ charge = 5e+006 @@ -57210,6 +57276,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/tcommsat/computer) +"mEu" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "mES" = ( /obj/machinery/door/airlock/maintenance/abandoned{ name = "Surgical Room" @@ -57239,10 +57315,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"mLc" = ( -/obj/structure/sign/warning/electricshock, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "mLB" = ( /obj/structure/cable{ icon_state = "1-4" @@ -57282,16 +57354,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"mVj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "mVM" = ( /turf/open/floor/plating/airless, /area/space/nearstation) @@ -57304,20 +57366,6 @@ "mZE" = ( /turf/open/space/basic, /area/space/nearstation) -"mZK" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"mZV" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "naq" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -57327,14 +57375,14 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"ndf" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Gas to Mix" +"ncm" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) "ndI" = ( @@ -57379,37 +57427,10 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) -"ngg" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "ngp" = ( /obj/item/chair/stool, /turf/open/floor/carpet, /area/maintenance/department/crew_quarters/dorms) -"nhW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"nif" = ( -/obj/structure/table/glass, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_construction, -/turf/open/floor/plasteel, -/area/engine/engineering) "nih" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/costume, @@ -57433,30 +57454,6 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) -"nkk" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/chair{ - dir = 8; - name = "Defense" - }, -/obj/machinery/camera{ - c_tag = "Atmospherics Starboard"; - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "nku" = ( /obj/machinery/door/airlock/centcom{ name = "Crematorium"; @@ -57466,21 +57463,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/chapel/office) -"nnf" = ( -/obj/structure/rack, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "nnh" = ( /obj/structure/chair{ dir = 8 @@ -57488,6 +57470,11 @@ /obj/item/stack/spacecash/c10, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) +"nog" = ( +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "noC" = ( /obj/machinery/vending/kink, /turf/open/floor/wood, @@ -57502,6 +57489,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/department/engine) +"nqu" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "nqV" = ( /obj/structure/cable{ icon_state = "1-2" @@ -57512,19 +57506,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"nqW" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "nsy" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -57554,6 +57535,14 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) +"nsJ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "ntj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57590,10 +57579,6 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/primary/central) -"nyN" = ( -/obj/machinery/power/supermatter_crystal/engine, -/turf/open/floor/engine, -/area/engine/supermatter) "nyO" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" @@ -57620,6 +57605,12 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"nAY" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel, +/area/engine/engineering) "nBw" = ( /obj/machinery/computer/crew{ dir = 1 @@ -57692,15 +57683,6 @@ /obj/structure/table/reinforced, /turf/open/floor/plasteel, /area/science/xenobiology) -"nIq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Engineering Supermatter Fore"; - dir = 4; - network = list("ss13","engine") - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "nIU" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -57724,17 +57706,6 @@ }, /turf/open/floor/engine, /area/science/explab) -"nKF" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/poster/random{ - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "nLl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -57770,17 +57741,6 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) -"nNn" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "nNJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57815,13 +57775,6 @@ /obj/item/chair, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"nPW" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 6 - }, -/obj/machinery/meter, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "nQc" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -57832,9 +57785,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"nQf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/closed/wall/r_wall, +"nRM" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel, /area/engine/engineering) "nSj" = ( /obj/structure/grille/broken, @@ -57848,6 +57805,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/lawoffice) +"nTr" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"nUQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/engine/supermatter) "nVU" = ( /obj/item/twohanded/spear, /turf/open/floor/plating, @@ -57860,24 +57827,25 @@ /obj/structure/table_frame/wood, /turf/open/floor/wood, /area/maintenance/department/engine) -"nYe" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix to Engine" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "nYn" = ( /obj/structure/sign/warning/docking, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) +"nYM" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "nZw" = ( /obj/machinery/door/airlock/abandoned{ name = "Backup Laboratory" }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"obh" = ( +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "obj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -57893,23 +57861,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"obl" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"obG" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/machinery/button/door{ - id = "engsm"; - name = "Radiation Shutters Control"; - pixel_y = 24; - req_access_txt = "10" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "obP" = ( /obj/structure/table, /obj/item/paper_bin, @@ -57919,11 +57870,6 @@ initial_gas_mix = "o2=0.01;n2=0.01" }, /area/maintenance/department/science) -"ocy" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/engine/engineering) "oep" = ( /obj/structure/table/glass, /obj/item/paper_bin, @@ -57956,10 +57902,14 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"oge" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/engineering) +"ogn" = ( +/obj/structure/lattice, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/space, +/area/space/nearstation) "ohR" = ( /obj/item/chair, /turf/open/floor/plating, @@ -57974,18 +57924,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"ona" = ( -/obj/machinery/atmospherics/pipe/manifold/green/visible{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "onX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -58043,12 +57981,6 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel, /area/science/xenobiology) -"oto" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) "ous" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/button/door{ @@ -58071,14 +58003,13 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"ovE" = ( -/obj/machinery/light/small{ - dir = 8 +"ovg" = ( +/obj/structure/transit_tube/horizontal, +/obj/structure/sign/departments/holy{ + pixel_x = -32 }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/department/chapel/monastery) +/turf/open/floor/plating, +/area/hallway/secondary/entry) "ovM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -58104,17 +58035,11 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) -"oxt" = ( -/obj/structure/table/glass, -/obj/item/book/manual/wiki/research_and_development, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/turf/open/floor/plasteel/dark, -/area/science/lab) -"oyE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 +"oxw" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) "oyF" = ( @@ -58142,19 +58067,6 @@ }, /turf/closed/wall/r_wall, /area/science/xenobiology) -"oBY" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/engine/engineering) "oCn" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -58225,15 +58137,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"oFi" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/engine, -/area/engine/engineering) "oFo" = ( /obj/structure/closet/emcloset/anchored, /obj/structure/sign/warning/vacuum/external{ @@ -58250,6 +58153,23 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plasteel, /area/maintenance/department/engine) +"oHa" = ( +/obj/machinery/power/emitter/anchored{ + dir = 8; + state = 2 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"oJr" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) "oKa" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -58265,6 +58185,18 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) +"oKv" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/turf/open/floor/engine, +/area/engine/engineering) +"oKJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/engine/engineering) "oLR" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -58371,12 +58303,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) -"oTD" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/bot, -/turf/open/floor/engine, -/area/engine/engineering) "oUa" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -58392,6 +58318,14 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"oWu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/engine/engineering) "oWw" = ( /obj/item/flashlight, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -58412,6 +58346,22 @@ }, /turf/open/floor/plasteel/white, /area/security/execution/transfer) +"oXq" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Cooling Loop Bypass" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "oYj" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -58424,6 +58374,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"paU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) "pbm" = ( /obj/machinery/door/airlock/external{ name = "Pod Docking Bay" @@ -58459,19 +58415,6 @@ }, /turf/open/floor/plating, /area/science/explab) -"peb" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced{ - dir = 4 - }, -/obj/machinery/power/rad_collector/anchored, -/turf/open/floor/engine, -/area/engine/supermatter) "pfz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -58492,12 +58435,13 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"pga" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 +"pgH" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) +/turf/open/floor/engine, +/area/engine/engineering) "phJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -58519,6 +58463,13 @@ /obj/structure/piano, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) +"pmB" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) "pnU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 4; @@ -58527,16 +58478,14 @@ }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"ppi" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = 29 - }, -/obj/effect/turf_decal/stripes/line{ +"poP" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/open/floor/engine, -/area/engine/engineering) +/turf/open/space, +/area/space/nearstation) "pps" = ( /turf/closed/wall, /area/engine/break_room) @@ -58555,20 +58504,33 @@ }, /turf/open/floor/engine, /area/engine/supermatter) -"ptk" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"psd" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Gas to Filter" }, -/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, -/area/engine/engineering) -"puO" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 +/area/engine/supermatter) +"pua" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria, +/area/security/prison) +"puw" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "pvK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -58603,13 +58565,17 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pBs" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/effect/turf_decal/stripes/line{ +"pxD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/engine, -/area/engine/engineering) +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters"; + name = "chemistry shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/chemistry) "pBD" = ( /obj/structure/cable{ icon_state = "0-8" @@ -58620,6 +58586,28 @@ /obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating, /area/maintenance/department/engine) +"pBJ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"pCo" = ( +/obj/structure/reflector/single/anchored{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"pDd" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "pDP" = ( /obj/machinery/vending/assist, /obj/effect/turf_decal/tile/neutral{ @@ -58634,12 +58622,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/explab) -"pED" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "pEL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -58682,29 +58664,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) -"pIk" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine, -/area/engine/engineering) -"pJx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/engine, -/area/engine/engineering) "pKd" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; @@ -58713,6 +58672,14 @@ /obj/structure/closet/crate, /turf/open/floor/plating, /area/maintenance/department/cargo) +"pKg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) "pMG" = ( /obj/structure/sink{ dir = 8; @@ -58764,12 +58731,6 @@ dir = 1 }, /area/hallway/secondary/exit/departure_lounge) -"pPu" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/engine/engineering) "pQw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58850,6 +58811,19 @@ /obj/structure/cable, /turf/open/floor/wood, /area/lawoffice) +"pYh" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"pYw" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-03" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, +/area/science/lab) "pYC" = ( /obj/structure/sign/warning{ pixel_y = -32 @@ -58864,25 +58838,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"qbm" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "qbp" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"qbV" = ( -/obj/structure/lattice, -/turf/open/space, -/area/space) "qbZ" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, @@ -58937,6 +58898,18 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plating, /area/maintenance/department/engine) +"qeY" = ( +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"qhE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "qjx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, @@ -58946,10 +58919,38 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"qkM" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) "qnT" = ( /obj/machinery/iv_drip, /turf/open/floor/plating, /area/maintenance/department/science) +"qpd" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qpS" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "qtA" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -59090,6 +59091,21 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/department/science) +"qLI" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty{ + layer = 4 + }, +/obj/item/stack/cable_coil, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "qMi" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/general/visible, @@ -59126,10 +59142,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"qPh" = ( -/obj/structure/chair, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel, +"qOS" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, /area/engine/engineering) "qPB" = ( /obj/structure/chair/stool, @@ -59138,8 +59154,22 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) -"qUe" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ +"qRl" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"qTV" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -27 + }, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, /turf/open/floor/plasteel, @@ -59169,12 +59199,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"qWB" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "qWG" = ( /obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, @@ -59251,13 +59275,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"rax" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "garbage" - }, -/turf/open/floor/plating, -/area/maintenance/disposal) "reH" = ( /obj/item/reagent_containers/food/drinks/bottle/vodka, /obj/structure/disposalpipe/segment{ @@ -59413,23 +59430,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) -"rwf" = ( -/obj/machinery/power/emitter/anchored{ - dir = 8; - state = 2 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/engine/engineering) -"rwt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/engine, -/area/engine/engineering) "rxa" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -59450,7 +59450,6 @@ pixel_y = 6 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 27 }, /turf/open/floor/plasteel/cafeteria, @@ -59464,13 +59463,6 @@ icon_state = "panelscorched" }, /area/maintenance/department/engine) -"rAZ" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "rBh" = ( /obj/structure/mopbucket, /obj/item/mop, @@ -59485,19 +59477,6 @@ /obj/item/reagent_containers/blood/random, /turf/open/floor/plating, /area/maintenance/department/science) -"rEt" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "rFq" = ( /obj/structure/chair, /obj/item/reagent_containers/food/snacks/donkpocket, @@ -59505,24 +59484,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) -"rGz" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"rHv" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Monastery Transit" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/hallway/secondary/entry) "rHA" = ( /turf/open/floor/plasteel, /area/construction/mining/aux_base) @@ -59581,16 +59542,6 @@ /obj/item/ammo_casing/shotgun/improvised, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"rMt" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "rMV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -59602,16 +59553,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/department/science) -"rPd" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = -27 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "rPg" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 @@ -59626,12 +59567,13 @@ /obj/item/trash/can, /turf/open/floor/wood, /area/maintenance/department/engine) -"rTZ" = ( -/obj/machinery/cryopod{ - dir = 8 +"rTd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/engine/engineering) "rWE" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -59658,14 +59600,6 @@ }, /turf/open/floor/plating, /area/storage/emergency/starboard) -"saW" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Monastery Transit" - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/hallway/secondary/entry) "sbk" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -59708,17 +59642,6 @@ }, /turf/open/space, /area/space/nearstation) -"sdZ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) -"sfr" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "sgc" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/tile/neutral{ @@ -59733,23 +59656,51 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) -"sho" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/hallway/secondary/entry) +"shH" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) "sij" = ( /obj/structure/closet, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, /turf/open/floor/plating, /area/maintenance/department/engine) +"sjC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plasteel, +/area/engine/engineering) "skw" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/closed/wall, /area/maintenance/department/security/brig) +"slJ" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#d1dfff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"smv" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Cooling Loop to Gas" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "spz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -59795,6 +59746,12 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard) +"svA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "svN" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/sign/departments/restroom{ @@ -59802,6 +59759,11 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"swg" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "sww" = ( /obj/effect/decal/cleanable/blood/old, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, @@ -59836,12 +59798,6 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) -"sAF" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel, -/area/engine/engineering) "sAK" = ( /obj/item/clothing/mask/gas/plaguedoctor, /turf/open/floor/plating, @@ -59851,7 +59807,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/red{ @@ -59879,17 +59834,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"sHX" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Cooling Loop to Gas" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "sJp" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line, @@ -59911,21 +59855,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"sKw" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty{ - layer = 4 - }, -/obj/item/stack/cable_coil, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "sNz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -59939,12 +59868,6 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) -"sOQ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/space/basic, -/area/space) "sQt" = ( /obj/machinery/door/airlock/external{ name = "Supply Dock Airlock"; @@ -59955,37 +59878,6 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) -"sQG" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"sQV" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine, -/area/engine/engineering) -"sRH" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/open/space, -/area/space/nearstation) -"sTg" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/lattice, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "sUP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -60012,6 +59904,19 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"sWW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) "sXi" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -60026,6 +59931,16 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/science/xenobiology) +"sYQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "sZh" = ( /obj/structure/closet/crate, /turf/open/floor/plating, @@ -60063,16 +59978,13 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"tcC" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/poster/official/random{ - pixel_x = -32 +"tbw" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) +/turf/open/space, +/area/space/nearstation) "tcY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -60093,7 +60005,7 @@ }, /obj/item/hand_labeler, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -60120,6 +60032,10 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"tdL" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "tfw" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -60165,6 +60081,17 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"tkL" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "tlc" = ( /obj/machinery/recharger, /obj/structure/table, @@ -60183,14 +60110,12 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"tmi" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +"tlV" = ( +/obj/structure/reflector/double/anchored{ + dir = 9 }, -/turf/open/space, -/area/space/nearstation) +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "tnY" = ( /obj/machinery/button/door{ id = "aux_base_shutters"; @@ -60212,13 +60137,15 @@ icon_state = "panelscorched" }, /area/maintenance/department/security/brig) -"tpX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light{ +"tqO" = ( +/obj/structure/sign/poster/official/random{ + pixel_x = -32 + }, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "tqX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -60230,13 +60157,6 @@ }, /turf/open/floor/plating, /area/science/xenobiology) -"ttX" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/open/floor/plating, -/area/engine/engineering) "tue" = ( /obj/structure/cable{ icon_state = "2-4" @@ -60257,6 +60177,7 @@ "tvj" = ( /obj/structure/festivus{ anchored = 1; + desc = "A pole for dancing."; name = "pole" }, /turf/open/floor/plasteel/dark, @@ -60293,19 +60214,14 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"tzh" = ( -/obj/structure/chair/office/dark{ - dir = 4 +"tzH" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "research_shutters_2"; + name = "research shutters" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/engine/engineering) -"tAv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6 - }, -/turf/open/floor/plating/airless, -/area/engine/engineering) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/lab) "tAK" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -60323,6 +60239,13 @@ /obj/item/wrench, /turf/open/floor/plating, /area/maintenance/department/cargo) +"tDE" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Engine" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "tHk" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -60338,19 +60261,44 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"tMA" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 +"tJr" = ( +/obj/structure/plasticflaps/opaque, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "research_shutters_2"; + name = "research shutters" }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/science/lab) +"tLP" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/quartermaster/warehouse) +"tOD" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"tQT" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) "tRc" = ( /obj/structure/ore_box, /turf/open/floor/plating{ icon_state = "panelscorched" }, /area/maintenance/department/engine) +"tSk" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "tSL" = ( /turf/open/floor/plating{ icon_state = "panelscorched" @@ -60377,11 +60325,25 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"uaa" = ( -/turf/open/floor/plating{ - icon_state = "panelscorched" +"tZk" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" }, -/area/maintenance/department/chapel/monastery) +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) +"tZu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"uau" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "uaC" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -60394,6 +60356,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"uaO" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "uaP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -60407,6 +60376,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/science/mixing) +"ucT" = ( +/obj/effect/landmark/carpspawn, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"udl" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "uek" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -60435,27 +60417,21 @@ icon_state = "panelscorched" }, /area/maintenance/department/science) +"ueX" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_construction, +/turf/open/floor/plasteel, +/area/engine/engineering) "ufa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"ufr" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel, -/area/engine/atmos) -"ufx" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "research_shutters_2"; - name = "research shutters" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/science/lab) "ugC" = ( /obj/structure/chair/office/light{ icon_state = "officechair_white"; @@ -60488,6 +60464,16 @@ }, /turf/closed/wall, /area/maintenance/department/engine) +"ukp" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Gas" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "ulu" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -60550,12 +60536,13 @@ "uoS" = ( /turf/open/floor/plating, /area/construction/mining/aux_base) -"upg" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ +"upc" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 6 }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "uqJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -60624,17 +60611,44 @@ }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"uwT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "uwX" = ( /obj/machinery/field/generator, /turf/open/floor/plating, /area/maintenance/department/engine) +"uxP" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/chair{ + dir = 8; + name = "Defense" + }, +/obj/machinery/camera{ + c_tag = "Atmospherics Starboard"; + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"uzh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/engine, +/area/engine/supermatter) "uzn" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/cable{ @@ -60648,10 +60662,6 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) -"uAL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) "uAU" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -60673,11 +60683,6 @@ }, /turf/open/floor/engine, /area/science/explab) -"uBu" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/department/chapel/monastery) "uCS" = ( /obj/machinery/door/poddoor/shutters{ id = "aux_base_shutters"; @@ -60686,16 +60691,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"uDr" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/plating, -/area/engine/engineering) -"uER" = ( -/turf/closed/wall/r_wall, -/area/space/nearstation) "uHG" = ( /obj/structure/cable{ icon_state = "1-4" @@ -60708,6 +60703,22 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"uIB" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"uJI" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"uKS" = ( +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/surgery) "uLF" = ( /obj/structure/cable{ icon_state = "1-4" @@ -60744,12 +60755,10 @@ /obj/effect/turf_decal/plaque, /turf/open/floor/plating, /area/maintenance/department/engine) -"uQa" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/supermatter) +"uNP" = ( +/obj/effect/landmark/barthpot, +/turf/open/floor/carpet, +/area/library/lounge) "uQR" = ( /obj/item/ammo_casing/shotgun/beanbag, /turf/open/floor/plating, @@ -60763,6 +60772,11 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"uTY" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/department/chapel/monastery) "uUQ" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Maintenance"; @@ -60789,14 +60803,19 @@ /obj/item/stamp/law, /turf/open/floor/carpet, /area/lawoffice) -"uWe" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 2; - name = "External Gas to Loop" +"uWP" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/tile/green{ + dir = 1 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/engine, -/area/engine/engineering) +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "uXG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60819,28 +60838,21 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard) -"uZs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" +"uYk" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/engine/engineering) +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "vay" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/department/engine) -"vbQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) -"vdb" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "veM" = ( /obj/machinery/suit_storage_unit/rd, /obj/machinery/light{ @@ -60858,15 +60870,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"vfn" = ( -/obj/structure/plasticflaps/opaque, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "research_shutters_2"; - name = "research shutters" - }, -/turf/open/floor/plasteel, -/area/science/lab) "vgp" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -60884,14 +60887,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"vgX" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space, -/area/space/nearstation) "vhk" = ( /obj/structure/chair, /turf/open/floor/carpet, @@ -60905,10 +60900,31 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"vkd" = ( -/obj/effect/landmark/barthpot, -/turf/open/floor/carpet, -/area/library/lounge) +"vli" = ( +/obj/structure/table, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/machinery/light, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"vlC" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "vlF" = ( /obj/item/coin/silver, /obj/effect/decal/cleanable/oil{ @@ -60943,6 +60959,20 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"voh" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"vor" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) "vpz" = ( /obj/structure/girder, /turf/open/floor/plating{ @@ -60950,6 +60980,11 @@ initial_gas_mix = "o2=0.01;n2=0.01" }, /area/maintenance/department/science) +"vsc" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/space) "vsk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -60960,6 +60995,31 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"vsw" = ( +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Starboard"; + dir = 8; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"vsG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Research Lab Maintenance"; + req_access_txt = "0"; + req_one_access_txt = "7;29" + }, +/turf/open/floor/plating, +/area/maintenance/department/engine) "vsJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -60979,12 +61039,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"vtz" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "vtT" = ( /turf/open/floor/plating, /area/maintenance/solars/port) @@ -60999,13 +61053,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/plating, /area/maintenance/department/science) -"vvr" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/engineering) "vxp" = ( /obj/machinery/door/window/eastright{ base_state = "left"; @@ -61019,12 +61066,17 @@ /obj/item/assembly/mousetrap, /turf/open/floor/engine, /area/science/explab) -"vyN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +"vxr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/closed/wall/r_wall, -/area/crew_quarters/heads/hor) +/turf/open/floor/plasteel, +/area/engine/engineering) "vzz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -61035,6 +61087,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) +"vzA" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "vzP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, @@ -61065,6 +61126,19 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"vBE" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#d1dfff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "vCC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -61075,6 +61149,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"vFZ" = ( +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "vGg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -61090,36 +61171,16 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"vIn" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) -"vIU" = ( -/obj/structure/transit_tube/horizontal, -/obj/structure/sign/departments/holy{ +"vKq" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/poster/official/random{ pixel_x = -32 }, -/turf/open/floor/plating, -/area/hallway/secondary/entry) -"vJS" = ( -/obj/structure/closet/radiation, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, /turf/open/floor/plasteel, -/area/engine/engineering) -"vMv" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main/monastery) +/area/hallway/primary/aft) "vMx" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -61129,19 +61190,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"vMH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) -"vMQ" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "vOw" = ( /obj/machinery/door/airlock/grunge{ name = "Library" @@ -61156,13 +61204,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/library) -"vPU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "vRi" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -61231,20 +61272,16 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"vYi" = ( -/obj/structure/cable{ - icon_state = "4-8" +"vVO" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/turf_decal/stripes/corner{ + dir = 1 }, -/obj/machinery/door/airlock/maintenance{ - name = "Research Lab Maintenance"; - req_access_txt = "0"; - req_one_access_txt = "7;29" - }, -/turf/open/floor/plating, -/area/maintenance/department/engine) +/turf/open/floor/engine, +/area/engine/engineering) "vYN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8; @@ -61254,16 +61291,22 @@ }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"waN" = ( -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +"wbB" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "External Gas to Loop" }, -/obj/structure/rack, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/obj/effect/turf_decal/delivery, +/turf/open/floor/engine, +/area/engine/engineering) +"wbF" = ( +/obj/machinery/rnd/production/circuit_imprinter, +/obj/machinery/camera{ + c_tag = "Engineering Starboard Aft"; + dir = 8 }, -/area/maintenance/department/chapel/monastery) +/turf/open/floor/plasteel, +/area/engine/engineering) "wcs" = ( /turf/open/floor/plasteel/dark, /area/engine/engineering) @@ -61300,10 +61343,24 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"wfG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/crew_quarters/heads/hor) "wfO" = ( /mob/living/simple_animal/hostile/retaliate/poison/snake, /turf/open/floor/plating, /area/maintenance/department/engine) +"wfP" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "wig" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plating{ @@ -61318,14 +61375,22 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "wjm" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/structure/cable/yellow{ +/obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/engine, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/engine/engineering) "wkZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -61354,27 +61419,6 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) -"wlZ" = ( -/obj/machinery/light/small, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/department/chapel/monastery) -"wmA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) -"wnw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "wnJ" = ( /obj/structure/sign/warning, /turf/closed/wall, @@ -61408,17 +61452,6 @@ }, /turf/open/floor/wood, /area/lawoffice) -"wsx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "wun" = ( /obj/structure/cable{ icon_state = "1-2" @@ -61446,9 +61479,19 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"wwK" = ( -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) +"wxa" = ( +/obj/machinery/vr_sleeper{ + icon_state = "sleeper"; + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria, +/area/security/prison) "wxb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -61496,21 +61539,15 @@ }, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/bar) +"wDl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/engine/engineering) "wDm" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"wDH" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" - }, -/obj/item/tank/internals/plasma, -/turf/open/floor/plating, -/area/engine/supermatter) "wDZ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -61538,6 +61575,18 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"wHI" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"wIo" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "wIv" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 8; @@ -61572,6 +61621,12 @@ }, /turf/open/floor/plating, /area/crew_quarters/heads/cmo) +"wLK" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "wMF" = ( /obj/effect/spawner/lootdrop/three_course_meal, /obj/effect/spawner/lootdrop/three_course_meal, @@ -61587,6 +61642,10 @@ /obj/structure/grille, /turf/open/floor/plating, /area/maintenance/department/engine) +"wMX" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/supermatter) "wNq" = ( /obj/structure/cable{ icon_state = "1-4" @@ -61657,12 +61716,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"wSU" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/hallway/secondary/entry) "wTD" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -61698,6 +61751,10 @@ icon_state = "panelscorched" }, /area/maintenance/department/security/brig) +"wUW" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "wVC" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Sci"; @@ -61705,16 +61762,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"wXe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber"; - req_access_txt = "10" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/engine, -/area/engine/supermatter) "wXu" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced{ @@ -61732,6 +61779,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"wYK" = ( +/obj/machinery/power/supermatter_crystal/engine, +/turf/open/floor/engine, +/area/engine/supermatter) "xah" = ( /obj/structure/cable{ icon_state = "1-2" @@ -61756,7 +61807,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/neutral{ @@ -61779,15 +61829,18 @@ /obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) +"xer" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/turf/open/floor/plating, +/area/maintenance/disposal) "xeB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/lawoffice) -"xgB" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/closed/wall/r_wall, -/area/engine/engineering) "xgG" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -61812,11 +61865,16 @@ dir = 1 }, /area/hallway/secondary/exit/departure_lounge) -"xiY" = ( -/obj/structure/lattice, +"xhI" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"xhW" = ( /obj/structure/lattice, /turf/open/space/basic, -/area/space/nearstation) +/area/space) "xja" = ( /obj/machinery/light/small{ dir = 4 @@ -61864,34 +61922,10 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"xkf" = ( -/obj/effect/landmark/carpspawn, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) -"xkL" = ( -/obj/structure/table, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/effect/turf_decal/delivery, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "xlA" = ( /obj/machinery/door/airlock/maintenance/abandoned, /turf/open/floor/plating, /area/maintenance/department/science) -"xlY" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, -/area/maintenance/department/chapel/monastery) "xmp" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -61946,20 +61980,6 @@ /obj/item/broken_bottle, /turf/open/floor/plating, /area/maintenance/solars/port) -"xuW" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"xvK" = ( -/obj/structure/reflector/single/anchored{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating, -/area/engine/engineering) "xvO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -62017,10 +62037,6 @@ icon_state = "panelscorched" }, /area/maintenance/department/security/brig) -"xyT" = ( -/obj/machinery/light/small, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) "xzp" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -62028,6 +62044,13 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"xzR" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "xCV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -62107,11 +62130,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/lawoffice) +"xNw" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/chapel/main/monastery) "xNx" = ( /obj/structure/lattice, /obj/structure/disposalpipe/junction/flip, /turf/open/space/basic, /area/space/nearstation) +"xNy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "xOC" = ( /obj/machinery/door/airlock/external{ name = "Construction Zone"; @@ -62142,6 +62176,13 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plasteel/freezer, /area/storage/emergency/port) +"xRE" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "garbage" + }, +/turf/open/floor/plating, +/area/maintenance/disposal) "xSX" = ( /obj/machinery/airalarm/unlocked{ pixel_y = 23 @@ -62155,12 +62196,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"xVT" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "xWl" = ( /obj/item/pen, /obj/item/paper_bin{ @@ -62172,10 +62207,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"xXh" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) "ybX" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -62197,19 +62228,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"yff" = ( -/obj/machinery/vr_sleeper{ - icon_state = "sleeper"; - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) "yfO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/yellow, @@ -62226,30 +62244,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"yhs" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) -"yjy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) -"ykV" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel, -/area/engine/atmos) "ymb" = ( /obj/machinery/camera{ c_tag = "Engineering Telecomms Access"; @@ -77864,7 +77858,7 @@ ctL cgg cfE cfE -cua +cfp cfE cuW cfE @@ -79134,7 +79128,7 @@ bQf bQf bQf bWW -vMv +bXI bZn bZn bZn @@ -79376,10 +79370,10 @@ bGG bHL bIW bKc -cqI +bOy bMt bLn -cqI +bOy bPo bQg bQg @@ -79933,7 +79927,7 @@ ckT xhj xhj cwK -vkd +uNP xhj cxn xhj @@ -80384,7 +80378,7 @@ aaa aaa aaa aaa -iaZ +ffK bsl btL aZx @@ -80400,11 +80394,11 @@ aaa aaa aaa aaa -irs +xhW aqG bGE bKf -gvO +lxm bMw bNy bNw @@ -80641,7 +80635,7 @@ aaa aaa aaa aaa -iaZ +ffK aZx bcX aZx @@ -80656,12 +80650,12 @@ aaa aaa aaa aaa -irs -irs +xhW +xhW aqG bGE bKf -gvO +lxm bMx bNz bHM @@ -80688,7 +80682,7 @@ ccJ cdw cel ceM -cua +cfp cfE cfE chn @@ -80912,13 +80906,13 @@ aaa aaa aaa aaa -irs -irs -irs +xhW +xhW +xhW aqG bGE -jOX -beT +haq +gOI bHM bNA bHM @@ -80955,7 +80949,7 @@ cvc cho cvk cdx -euN +dTz csS cfm cwe @@ -81168,17 +81162,17 @@ bVp bVp bVp bVp -gLn -sTg -gLn -gLn -eOA +jfr +jTN +jfr +jfr +uYk aZx -llS -kYR +bIY +bLs aZx bNB -hRQ +bMy abI aby abI @@ -81213,7 +81207,7 @@ ciF cuQ cfm cfm -fwo +xNw cfm cwe ckp @@ -81431,8 +81425,8 @@ aZx aZx aZx aZx -llS -sho +bIY +pKg aZx amC aaa @@ -81440,8 +81434,8 @@ aht aby aby abI -mfg -sRH +bSn +ogn cqS bNs bQe @@ -81678,18 +81672,18 @@ aaa aaa bGI aZx -jkm -tpX -iHI -iHI -iHI -tpX -iHI -hWa -wwK -wSU -llS -wmA +vFZ +tZu +uau +uau +uau +tZu +uau +dUI +irD +mjk +bIY +mxu aZx amB aht @@ -81699,7 +81693,7 @@ aaa abI abI abI -sRH +ogn bNs bNs bNs @@ -81727,7 +81721,7 @@ chr chL cfm cfN -xyT +obh cfN cfN cfN @@ -81935,18 +81929,18 @@ aaa aaa bGI aZx -oto -wwK -wwK -wwK -uAL -vbQ -vbQ -vbQ -vbQ -vbQ -vbQ -pga +cxW +irD +irD +irD +ejJ +kGc +kGc +kGc +kGc +kGc +kGc +ekV aZx amC aaa @@ -81957,7 +81951,7 @@ aaa aaa abI aaa -sOQ +uJI bQR bNs bNs @@ -82192,8 +82186,8 @@ aaa aaa bGI aZx -oto -wwK +cxW +irD aZx aZx aZx @@ -82449,19 +82443,19 @@ aaa aaa aqG aZx -oto -wwK +cxW +irD aZx -irs -irs -irs -irs -irs -irs -irs -irs -irs -irs +xhW +xhW +xhW +xhW +xhW +xhW +xhW +xhW +xhW +xhW amD aaa aht @@ -82703,11 +82697,11 @@ bon aZx aaa aaa -irs +xhW aqG aZx -oto -wwK +cxW +irD aZx bBV bDf @@ -82963,12 +82957,12 @@ aZx aZx aZx aZx -oto -kvx +cxW +nYM bAI -qbV +kqV abI -irs +xhW abI aaa bva @@ -83012,7 +83006,7 @@ cfN cfN cfN cfN -wlZ +hCR cjm cfN cfN @@ -83142,11 +83136,11 @@ abI aen aet aeH -vtz +bfQ afo afG aeU -gHy +eSB agy agL agZ @@ -83220,8 +83214,8 @@ bbR bbR bbR aZx -rHv -saW +fCC +tZk bAJ bBX bBX @@ -83269,9 +83263,9 @@ cfN cfN cfN cfN -uaa +nog cjm -irs +xhW aaa aaa aaa @@ -83398,8 +83392,8 @@ adR aaa aem aeu -cJd -pED +uWP +ltB aeH afH aeH @@ -83479,7 +83473,7 @@ baK aZx bxY bzz -vIU +ovg bBX bDg bEj @@ -83526,10 +83520,10 @@ cfN cfN cfN cfN -uBu +uTY cjm cjm -irs +xhW aaa aaa aaa @@ -83658,9 +83652,9 @@ agy agy lGp aeU -aae +afI aeU -dUk +jXF agy agN agY @@ -83769,22 +83763,22 @@ bIZ cba cbT bDi -cQZ +kuT cwA cwA cwA cwA -lqo +pDd cwA cwA cwA cwA -uaa -ovE -uaa -uBu -xlY -ezo +nog +gFw +nog +uTY +eQa +ceG cjm aht aaa @@ -83912,8 +83906,8 @@ adR aaa aem aeW -yhs -hyl +mwl +kzK afr agy agc @@ -84029,19 +84023,19 @@ ccO bIZ cjm cjm -xXh -xXh +wUW +wUW cjm cjm cjm -xXh -xXh +wUW +wUW cjm cjm cjm cjm -waN -dzA +fjC +kLT cjm aht aaa @@ -84169,9 +84163,9 @@ adR aaa aem aeX -dqi -yff -yff +pua +wxa +wxa agy agd agp @@ -84284,10 +84278,10 @@ bva bNK bva bva -irs -xkf -dRs -dRs +xhW +ucT +vsc +vsc aht aht mau @@ -84553,11 +84547,11 @@ aaa aaa aaa aaa -dRs -dRs -irs -irs -xiY +vsc +vsc +xhW +xhW +tSk aaa aaa aaa @@ -85213,7 +85207,7 @@ aiM ajh ajR akN -aiM +dQj amj amX anH @@ -89164,9 +89158,9 @@ eQN tcY cam cam -cdI +sjC bXk -eVW +mci cbX ceq mhl @@ -89421,7 +89415,7 @@ bpL fQf cbW cbd -gaQ +cdI cri cbX cbX @@ -90889,7 +90883,7 @@ aCC aDG aBm aFz -aaf +aGm awR aHQ aIO @@ -90959,9 +90953,9 @@ bXh bXZ bYK bZz -sAF +nAY cbd -fGt +nRM cam cdM bXq @@ -90971,8 +90965,8 @@ cfQ bXk qWG bXk -tAv -pPu +paU +dSp cdm aaa aht @@ -91224,22 +91218,22 @@ qtO bXk bXk bXk -fbu -nQf -nQf -nQf -cgt -oge -oge +svA +mjK +mjK +mjK +wHI +eyj +eyj bXk -uER -uER -uER -uER -uER -uER -uER -uER +shH +shH +shH +shH +shH +shH +shH +shH fon fon mau @@ -91471,23 +91465,23 @@ bVH bWr bXj qGZ -bYM +bYQ bZD caj cbf ccb cah cdO -jOw +ioF ceX -ocy +qOS cfS fFv -yjy -nIq -mAi -abD -abD +fmL +gXZ +kmd +lXJ +lXJ bXk aaa aht @@ -91740,10 +91734,10 @@ mwG nAs cfT wcs -upg +ggg qbp qbp -hUi +gEo dMG bXk aaa @@ -91987,14 +91981,14 @@ bXk bYc bYO bZA -dlI +xhI cbh cbh cbh cbh cbh -nNn -mvA +hjD +vor cfU tIS iCs @@ -92225,7 +92219,7 @@ bFU bFU bIn bJt -jdA +uKS bFU bFU bFU @@ -92244,21 +92238,21 @@ bXk bYd bYP bZF -uZs -lDW -wsx -uwT -uwT +rTd +wDl +vxr +irM +irM qFu cet ulY cfV cgu cgU -kNK +izm chw -oge -eMz +eyj +jzE bXk bXk bXk @@ -92499,31 +92493,31 @@ bVK bWu bXk bYe -bYM +bYQ bZA can cbi ccc -oge +eyj cdR -vvr +tQT bXk bXk -oBY +sWW cgv -ndf +lXb cgv uaP cgv -ikm +ukp cgV cgv cgv -gkN +gQf bXk aht fon -uER +shH fon aaa aaa @@ -92760,27 +92754,27 @@ bYR bZA can cbj -oge +eyj cbX wcs iyJ cfa -oge +eyj twv -pJx +hoS sWj dnS -rEt -mZK -nqW -pBs -pBs +hSC +jTU +fZK +pgH +pgH uRk ciG bXk aaa fon -uER +shH fon aaa aaa @@ -93016,7 +93010,7 @@ bYf bYS bZA can -eue +qpS ccd ccX ccX @@ -93024,20 +93018,20 @@ ceu cbX cfu tlN -pIk +ncm cCI uoq -wDH +hQy chA meF -oTD -uWe -dHF +oKv +wbB +xzR hQC bXk aht fon -uER +shH fon aht aaa @@ -93238,7 +93232,7 @@ bmz bnG boN bpW -brk +dHZ bsK buk bvs @@ -93274,27 +93268,27 @@ bYT bZB caq cbk -oge +eyj ccY cdT ccY cbX -oge -jQn -sQV -dFF +eyj +vlC +iej +qeY fyO fyO fyO -dFF -oTD -uWe -dGd +qeY +oKv +wbB +wfP hQC bXk aaa fon -uER +shH fon aaa aaa @@ -93530,28 +93524,28 @@ bYh bYU bZE car -sdZ -oge +mgz +eyj cbX wcs wcs cfd bXk tlN -pIk -obl +ncm +lUO mpd -peb -peb +hKp +hKp cit -dFF -vMQ -gih +qeY +puw +vBE hQC bXk aht fon -uER +shH fon aaa aaa @@ -93752,7 +93746,7 @@ bkh bkh boN bpW -dVt +brk bsM bum bvt @@ -93793,22 +93787,22 @@ cda wcs wcs wcs -oge -oFi -wjm -dFF -uQa -uQa -uQa +eyj +eAH +lnr +qeY +fBZ +fBZ +fBZ cgY ciI -mZV -obG +tdL +dHr hQC bXk aaa fon -uER +shH fon aaa aaa @@ -93989,7 +93983,7 @@ aSS aUg aVf aWi -eyT +mjn aYe aZb bag @@ -94012,8 +94006,8 @@ bpV brm bsN bun -mcf -nnf +gGA +bwW byA bAi bpY @@ -94042,30 +94036,30 @@ bWz bVN bYf bYW -hDy +oWu cam -cxj +vli ckJ cey cdW wcs cdW -oge -vPU -eux -kDI -fWE -nyN -fWE -wXe -iTE -mlS -jTc +eyj +kTR +mEu +wMX +dFJ +wYK +dFJ +uzh +nUQ +fym +hon hQC bXk aht fon -uER +shH fon aaa aaa @@ -94269,12 +94263,12 @@ bpY bpY bpY bpY -gGA -bwW +pxD +jZG bpY bpY bpY -vYi +vsG bva bva bva @@ -94301,28 +94295,28 @@ bUT bYX bZA cam -xkL +lfx bXk -xvK +pCo wcs wcs -kBe -oge -mlx -gUS -dFF +tlV +eyj +qkM +miw +qeY prQ prQ prQ -nPW -mvY -sfr +dgj +psd +fxC dZj hQC bXk aaa fon -uER +shH fon aaa aaa @@ -94522,17 +94516,17 @@ bls aBI aBI bmB -tcC -qWB -iHe -qbm +vKq +nTr +gDR +vzA bvu -wnw -cep -ePS -nhW -rGz -rPd +hIZ +tqO +mqp +cKV +iwe +qTV xDj blt jCv @@ -94555,31 +94549,31 @@ bVO bWA mCe bYj -bYM +bYQ bZA cam -sdZ -oge +mgz +eyj cbX wcs wcs -hxh +dEy bXk tlN -pIk -vMQ +ncm +puw fyF cZt cZt -hUf -dFF -mLc -lmv +fjD +qeY +iTF +slJ hQC bXk aht fon -uER +shH fon aaa aaa @@ -94787,11 +94781,11 @@ gkS tTl tTl tTl -qUe +koz dgg phJ phJ -lCY +lJI bAk bIt bJB @@ -94812,31 +94806,31 @@ bVP bWB mCe bYk -bYQ +wjm bZF cbm -sdZ -oge -rwf -rwf +mgz +eyj +oHa +oHa eWi cbX -oge -jQn +eyj +vlC cgx -dFF +qeY fyO fyO fyO -dFF +qeY cBS cjt -mCP +kaR hQC bXk aaa fon -uER +shH fon aht aaa @@ -95036,19 +95030,19 @@ blu aDZ aDZ bjm -nKF +mhn cqi cqi cqi cqi cqi -erV -rMt -ksC +imE +kYM +mfC fdQ bmD bmD -jrb +eRp bAl bIu bJC @@ -95072,28 +95066,28 @@ bYl bYO bZA cam -lCR +lrM ccd -mlb -mlb -mbD +cAQ +cAQ +cLw cbX cfu jBn -ptk +oxw meF chA chA woh cCI cBS -rwt +iLh liR hQC bXk aht fon -uER +shH fon aaa aaa @@ -95296,18 +95290,18 @@ bKM cCl cCl cCl -vfn -ufx -ufx +tJr +tzH +tzH byD bAm dhz -nkk +uxP bDA bEQ bGa -bHg -mVj +bHp +sYQ bJD bBo bBo @@ -95330,27 +95324,27 @@ bYY bZA cam cbn -oge +eyj cbX wcs cfP cff -oge +eyj cfX -kvu -gHp +vVO +iop kWQ -iSi -ona -kec -ngg -ngg -cUT +oXq +qpd +tkL +tOD +tOD +ikO hQC bXk aaa fon -uER +shH fon aaa aaa @@ -95551,14 +95545,14 @@ bmC cqi boP bqb -brp +pYw gFo cSK duF -oxt +bxa byE bBp -vyN +wfG bBp bBp bBp @@ -95588,22 +95582,22 @@ bZG cax cbo ccc -oge +eyj cdR -uDr +oJr bXq bXq cfY -hrx -sHX -hrx -hXm -jjA +xNy +smv +xNy +hGB +hSt civ civ -jtv -ppi -oyE +vsw +qRl +oKJ bXk aht fon @@ -95845,19 +95839,19 @@ bZF cal cbp cci -dPZ -dPZ -vMH -vJS -vIn -ttX -oge -dGp -oge -oge -dGp -oge -oge +kTj +kTj +qhE +loz +frj +lRX +eyj +uIB +eyj +eyj +uIB +eyj +eyj bXk bXk bXk @@ -96097,24 +96091,24 @@ bVU bWG bXq bYo -tzh +hXK bZI -tzh +hXK cbq cbd cam cam cam -mCU -cOA -gfh -vdb -rAZ -gfh -tMA -puO -vdb -tMA +haA +aKm +upc +wIo +hyh +upc +voh +pBJ +wIo +voh cdm aaa aaa @@ -96355,23 +96349,23 @@ bWH bXk bTE bZc -nif +ueX cCU bZJ -mdi +wbF cCV ceb -qPh -sKw -cOA -sQG -gfh -eqM -sQG -sQG -dhu -tMA -sQG +epV +qLI +aKm +eiV +upc +dsz +eiV +eiV +uaO +voh +eiV cdm aaa aaa @@ -96611,29 +96605,29 @@ bJN bJN bJN bJN -vIn -xgB -xgB -xgB -xgB -xgB -xgB -xgB -xgB -fml -mfx -hJO -dAa -hJO -hJO -dAa -hJO -hJO -eqM +frj +pYh +pYh +pYh +pYh +pYh +pYh +pYh +pYh +hUw +nqu +nsJ +gBb +nsJ +nsJ +gBb +nsJ +nsJ +dsz aht aht fon -uER +shH fon aaa aaa @@ -96868,7 +96862,7 @@ bVV bWI bXr bKQ -vgX +udl bZK abI abI @@ -96877,20 +96871,20 @@ abI aaa aaa aaa -dhu -vdb -hJO -dAa -hJO -hJO -dAa -hJO -hJO -rAZ +uaO +wIo +nsJ +gBb +nsJ +nsJ +gBb +nsJ +nsJ +hyh aaa aaa fon -uER +shH fon aaa aaa @@ -97125,7 +97119,7 @@ bQI bWJ bXs bJN -lxh +cui bJP bJP bJP @@ -97134,20 +97128,20 @@ bJP abI abI aht -puO -vdb -hJO -dAa -hJO -hJO -dAa -hJO -hJO -eqM +pBJ +wIo +nsJ +gBb +nsJ +nsJ +gBb +nsJ +nsJ +dsz aht aht fon -uER +shH fon aaa aaa @@ -97362,7 +97356,7 @@ bCK bDG bEW bAt -aIA +bHg cqw cqD bKO @@ -97382,7 +97376,7 @@ bMf fuR bXt bYp -jPC +eAZ bZL caz cbs @@ -97391,20 +97385,20 @@ bJP aaa aaa aaa -dhu -vdb -hJO -dAa -hJO -hJO -dAa -hJO -hJO -rAZ +uaO +wIo +nsJ +gBb +nsJ +nsJ +gBb +nsJ +nsJ +hyh aaa aaa fon -uER +shH fon aaa aaa @@ -97639,7 +97633,7 @@ bVW bWL bXu bLW -lxh +cui bMi caA cbt @@ -97648,20 +97642,20 @@ bJP aaa aaa aaa -puO -xuW -rAZ -puO -rAZ -puO -rAZ -puO -rAZ +pBJ +swg +hyh +pBJ +hyh +pBJ +hyh +pBJ +hyh cdm aht aht fon -uER +shH fon aaa aaa @@ -97896,7 +97890,7 @@ bVX bWM bXv bWc -tmi +poP bZL caB cbs @@ -98133,7 +98127,7 @@ bAt bAt bAu bAu -bHg +bHp cqx bJJ bKQ @@ -98148,12 +98142,12 @@ bQI bQI bTM bUs -cAp -ykV -ufr +ljG +hjk +pmB bXw -iSL -lQy +dJk +tbw bJP bJP bJP @@ -98405,7 +98399,7 @@ bMf bMf bTN bUt -flP +wLK bOk bWK bXt @@ -98661,8 +98655,8 @@ bRx bQJ bPQ bTO -cAp -xVT +ljG +lhP bOk bWL bXx @@ -98676,21 +98670,21 @@ bJP aaa aaa fon -uER -uER -uER -uER -uER -uER -uER -uER -uER -uER +shH +shH +shH +shH +shH +shH +shH +shH +shH +shH fon aaa aht -uER -uER +shH +shH fon aaa aaa @@ -98918,7 +98912,7 @@ bPQ bPQ bPQ bTP -flP +wLK bVh bVY bWM @@ -98946,7 +98940,7 @@ fon fon aaa aht -uER +shH fon fon aaa @@ -99175,7 +99169,7 @@ bQK bQK bPQ bTQ -flP +wLK bKX bOk bWN @@ -99343,7 +99337,7 @@ cBk jhD cBo alQ -ggg +ebT cBw noC aiS @@ -99432,7 +99426,7 @@ bRy bSf bSR bTM -flP +wLK bKX bVZ bWO @@ -99689,7 +99683,7 @@ bRz bMf bSS bTR -nYe +tDE bKX bWa bMf @@ -100146,7 +100140,7 @@ aHn aIi aJi aKe -kVA +klb aMi aNJ fwl @@ -100898,7 +100892,7 @@ aiT aiS apX cod -aab +asg atj apX avi @@ -101184,7 +101178,7 @@ lAs eeQ aUs aLf -lfZ +eex aLf aLf aUl @@ -101708,7 +101702,7 @@ bcA bdF beJ bfB -gaJ +dps aZv aUC biz @@ -102445,7 +102439,7 @@ apX apX avl fIu -rTZ +epj aIh azA dbi @@ -102457,7 +102451,7 @@ aFH aGG aHo aIk -aac +aJo aGF aEd aMr @@ -102979,7 +102973,7 @@ aNP aPb aNO aNP -cRJ +tLP aTq aSk aTm @@ -107857,7 +107851,7 @@ aaa aaa aLn aNT -rax +xer aQo aPg aRu @@ -108115,7 +108109,7 @@ aaa aLm aLm aNU -hCg +xRE dqY aRv sZh @@ -108371,8 +108365,8 @@ aaa aaa aLm aME -aNV -hCg +eFG +xRE dqY aRw sqQ @@ -108628,8 +108622,8 @@ aaa aaa aLo aMF -aNW -hCg +aNV +xRE cvf aQn sqQ @@ -108886,8 +108880,8 @@ aaa aLo aMG aNX -hCg -rax +xRE +xer aRy aSn aSn diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 80e80cd6a9..7e095329af 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -63,21 +63,21 @@ pixel_y = 4 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "am" = ( /obj/structure/closet/crate/bin, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "an" = ( /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "ao" = ( @@ -86,8 +86,8 @@ layer = 3.3 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "ap" = ( @@ -166,15 +166,15 @@ pixel_y = 8 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aA" = ( /obj/structure/chair/wood/normal, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aB" = ( @@ -218,16 +218,16 @@ dir = 4 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aJ" = ( /obj/structure/table/wood/poker, /obj/item/clothing/mask/cigarette/pipe, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aK" = ( @@ -235,8 +235,8 @@ /obj/structure/table/wood/poker, /obj/effect/holodeck_effect/cards, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aL" = ( @@ -244,8 +244,8 @@ dir = 8 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aM" = ( @@ -259,8 +259,8 @@ dir = 1 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aO" = ( @@ -272,15 +272,15 @@ dir = 4 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aQ" = ( /obj/structure/window/reinforced, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aR" = ( @@ -299,8 +299,8 @@ pixel_y = 10 }, /turf/open/floor/holofloor{ - icon_state = "wood"; - dir = 9 + dir = 9; + icon_state = "wood" }, /area/holodeck/rec_center/lounge) "aU" = ( @@ -1403,7 +1403,6 @@ /obj/structure/window/reinforced, /obj/machinery/mass_driver{ dir = 1; - icon_state = "mass_driver"; id = "trektorpedo1"; name = "photon torpedo tube" }, @@ -1452,7 +1451,6 @@ /obj/structure/window/reinforced, /obj/machinery/mass_driver{ dir = 1; - icon_state = "mass_driver"; id = "trektorpedo2"; name = "photon torpedo tube" }, @@ -1470,14 +1468,14 @@ dir = 4 }, /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 1 + dir = 1; + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "dT" = ( /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 4 + dir = 4; + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "dU" = ( @@ -1489,8 +1487,8 @@ /area/holodeck/rec_center/chapelcourt) "dV" = ( /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 1 + dir = 1; + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "dW" = ( @@ -1498,8 +1496,8 @@ dir = 8 }, /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 4 + dir = 4; + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "dX" = ( @@ -1523,8 +1521,8 @@ dir = 8 }, /turf/open/floor/holofloor{ - icon_state = "white"; - dir = 8 + dir = 8; + icon_state = "white" }, /area/holodeck/rec_center/firingrange) "eb" = ( @@ -1539,8 +1537,8 @@ dir = 4 }, /turf/open/floor/holofloor{ - icon_state = "white"; - dir = 4 + dir = 4; + icon_state = "white" }, /area/holodeck/rec_center/firingrange) "ed" = ( @@ -1611,8 +1609,7 @@ /area/holodeck/rec_center/chapelcourt) "en" = ( /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 2 + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "eo" = ( @@ -1635,8 +1632,7 @@ dir = 8 }, /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 2 + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "er" = ( @@ -1644,8 +1640,8 @@ dir = 8 }, /turf/open/floor/holofloor{ - icon_state = "white"; - dir = 10 + dir = 10; + icon_state = "white" }, /area/holodeck/rec_center/firingrange) "es" = ( @@ -1658,8 +1654,8 @@ dir = 4 }, /turf/open/floor/holofloor{ - icon_state = "white"; - dir = 6 + dir = 6; + icon_state = "white" }, /area/holodeck/rec_center/firingrange) "eu" = ( @@ -1679,8 +1675,8 @@ /area/holodeck/rec_center/spacechess) "ex" = ( /turf/open/floor/holofloor{ - icon_state = "stairs-old"; - dir = 8 + dir = 8; + icon_state = "stairs-old" }, /area/holodeck/rec_center/thunderdome1218) "ey" = ( @@ -1780,8 +1776,8 @@ dir = 1 }, /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 1 + dir = 1; + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "eN" = ( @@ -1789,8 +1785,8 @@ dir = 1 }, /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 4 + dir = 4; + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "eO" = ( @@ -1827,8 +1823,7 @@ dir = 1 }, /turf/open/floor/holofloor{ - icon_state = "chapel"; - dir = 2 + icon_state = "chapel" }, /area/holodeck/rec_center/chapelcourt) "eT" = ( @@ -2114,7 +2109,6 @@ /turf/closed/indestructible/riveted, /area/space) "fy" = ( -/obj/machinery/igniter/on, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/tdome/arena_source) @@ -2517,9 +2511,9 @@ /area/ctf) "gB" = ( /obj/structure/window/reinforced/fulltile{ - obj_integrity = 5000; max_integrity = 5000; - name = "hardened window" + name = "hardened window"; + obj_integrity = 5000 }, /turf/open/floor/plating, /area/ctf) @@ -3398,7 +3392,7 @@ /area/centcom/supply) "iS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/brown{ @@ -3471,8 +3465,7 @@ "ja" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "CentCom"; - opacity = 1 + name = "CentCom" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -3565,7 +3558,6 @@ /area/centcom/control) "jk" = ( /obj/machinery/door/poddoor{ - density = 1; id = "XCCQMLoaddoor2"; name = "Supply Dock Loading Door" }, @@ -3580,9 +3572,7 @@ /area/centcom/supply) "jl" = ( /obj/structure/plasticflaps, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/conveyor{ dir = 4; id = "XCCQMLoad2" @@ -3591,13 +3581,10 @@ /area/centcom/supply) "jm" = ( /obj/machinery/door/poddoor{ - density = 1; id = "XCCQMLoaddoor2"; name = "Supply Dock Loading Door" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/conveyor{ dir = 4; id = "XCCQMLoad2" @@ -3683,7 +3670,6 @@ pixel_y = -5 }, /obj/machinery/button/door{ - dir = 2; id = "XCCQMLoaddoor2"; layer = 4; name = "Loading Doors"; @@ -3760,7 +3746,6 @@ /area/centcom/control) "jI" = ( /obj/machinery/door/poddoor{ - density = 1; id = "XCCQMLoaddoor"; name = "Supply Dock Loading Door" }, @@ -3779,14 +3764,11 @@ dir = 8; id = "XCCQMLoad" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/supply) "jK" = ( /obj/machinery/door/poddoor{ - density = 1; id = "XCCQMLoaddoor"; name = "Supply Dock Loading Door" }, @@ -3794,9 +3776,7 @@ dir = 8; id = "XCCQMLoad" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/supply) "jL" = ( @@ -3883,7 +3863,7 @@ /area/centcom/control) "jV" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -4103,7 +4083,6 @@ "ki" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership; - dir = 1; dwidth = 25; height = 50; id = "emergency_syndicate"; @@ -4231,7 +4210,7 @@ icon_state = "plant-22" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -4282,8 +4261,7 @@ /area/centcom/control) "kG" = ( /obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 2 + color = "#596479" }, /turf/open/floor/plasteel/grimy, /area/centcom/control) @@ -4431,19 +4409,14 @@ "kZ" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/control) "la" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; - dir = 2; - icon_state = "leftsecure"; name = "CentCom Stand"; req_access_txt = "109" }, @@ -4479,8 +4452,6 @@ }, /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; - dir = 2; - icon_state = "leftsecure"; name = "CentCom Stand"; req_access_txt = "109" }, @@ -4498,8 +4469,6 @@ "lf" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; - dir = 2; - icon_state = "leftsecure"; name = "CentCom Stand"; req_access_txt = "109" }, @@ -4701,12 +4670,9 @@ "lJ" = ( /obj/machinery/door/airlock/centcom{ name = "Shuttle Control Office"; - opacity = 1; req_access_txt = "109" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/supply) "lK" = ( @@ -4714,9 +4680,7 @@ name = "CentCom Supply"; req_access_txt = "106" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/supply) "lL" = ( @@ -4792,10 +4756,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"lS" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja1"; + name = "Dorm 1" + }, +/turf/open/floor/wood, +/area/centcom/holding) "lT" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -4852,6 +4822,16 @@ icon_state = "alien11" }, /area/abductor_ship) +"ma" = ( +/obj/machinery/button/door{ + id = "Ninja7"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "mb" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/neutral{ @@ -5249,9 +5229,7 @@ /area/centcom/control) "mR" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/control) "mS" = ( @@ -5769,13 +5747,11 @@ "nQ" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; - dir = 2; - icon_state = "leftsecure"; name = "CentCom Stand"; req_access_txt = "109" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -5793,13 +5769,11 @@ "nR" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; - dir = 2; - icon_state = "leftsecure"; name = "CentCom Stand"; req_access_txt = "109" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -6295,7 +6269,6 @@ "oJ" = ( /obj/machinery/door/airlock/centcom{ name = "Administrative Office"; - opacity = 1; req_access_txt = "109" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -6610,11 +6583,11 @@ /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/window/brigdoor{ - name = "CentCom Customs"; - icon_state = "rightsecure"; + base_state = "rightsecure"; dir = 4; - req_access_txt = "109"; - base_state = "rightsecure" + icon_state = "rightsecure"; + name = "CentCom Customs"; + req_access_txt = "109" }, /obj/item/clipboard, /obj/item/folder/yellow, @@ -6866,7 +6839,7 @@ /area/centcom/ferry) "pM" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -6893,7 +6866,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/eyepatch, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/grimy, @@ -6990,9 +6963,7 @@ /area/ai_multicam_room) "pZ" = ( /obj/machinery/washing_machine, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, +/turf/open/floor/plasteel/freezer, /area/syndicate_mothership) "qa" = ( /obj/structure/flora/tree/pine, @@ -7275,8 +7246,8 @@ /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/fernybush, /turf/open/floor/plasteel{ - name = "plating"; - icon_state = "asteroid5" + icon_state = "asteroid5"; + name = "plating" }, /area/centcom/control) "qx" = ( @@ -7334,24 +7305,26 @@ /turf/closed/indestructible/riveted/uranium, /area/wizard_station) "qI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/light{ dir = 1 }, /turf/open/floor/plating, /area/syndicate_mothership) +"qP" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "qQ" = ( /obj/machinery/door/airlock/centcom{ name = "Administrative Office"; - opacity = 1; req_access_txt = "109" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/ferry) "qR" = ( @@ -7361,23 +7334,17 @@ "qS" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/centcom/supply) "qT" = ( /obj/machinery/door/airlock/centcom{ - name = "CentCom"; - opacity = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 + name = "CentCom" }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/centcom/control) @@ -7747,8 +7714,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - name = "plating"; - icon_state = "asteroid5" + icon_state = "asteroid5"; + name = "plating" }, /area/centcom/control) "rI" = ( @@ -7940,7 +7907,6 @@ "sc" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership/control; - dir = 1; dwidth = 3; height = 7; name = "escape pod loader"; @@ -8259,7 +8225,6 @@ "sL" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -8388,7 +8353,6 @@ "te" = ( /obj/machinery/door/airlock/centcom{ name = "Auxillary Dock"; - opacity = 1; req_access_txt = "" }, /turf/open/floor/plating, @@ -8751,6 +8715,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plasteel, /area/centcom/supplypod) +"tZ" = ( +/obj/structure/chair/wood/normal, +/turf/open/floor/wood, +/area/centcom/holding) "uc" = ( /obj/effect/turf_decal/tile/green{ dir = 1 @@ -8764,9 +8732,7 @@ /obj/item/storage/crayons, /obj/structure/table, /obj/item/storage/crayons, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, +/turf/open/floor/plasteel/freezer, /area/syndicate_mothership) "uf" = ( /obj/effect/turf_decal/tile/brown{ @@ -8777,6 +8743,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"uh" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja2"; + name = "Dorm 2" + }, +/turf/open/floor/wood, +/area/centcom/holding) "uj" = ( /obj/item/clipboard, /obj/item/folder/red, @@ -9078,12 +9051,9 @@ "uO" = ( /obj/machinery/door/airlock/centcom{ name = "Shuttle Control Office"; - opacity = 1; req_access_txt = "109" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/ferry) "uP" = ( @@ -9214,7 +9184,7 @@ pixel_y = -32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -9309,9 +9279,9 @@ dwidth = 25; height = 50; id = "emergency_away"; + json_key = "emergency"; name = "CentCom Emergency Shuttle Dock"; - width = 50; - json_key = "emergency" + width = 50 }, /turf/open/space, /area/space) @@ -9446,12 +9416,9 @@ "vF" = ( /obj/machinery/door/airlock/centcom{ name = "Administrative Office"; - opacity = 1; req_access_txt = "109" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/ferry) "vG" = ( @@ -9755,6 +9722,13 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"wj" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet" + }, +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) "wl" = ( /obj/structure/table/wood, /obj/item/paicard, @@ -9814,7 +9788,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -9881,7 +9854,6 @@ "wC" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Customs"; - opacity = 1; req_access_txt = "109" }, /obj/effect/turf_decal/stripes/line{ @@ -9914,8 +9886,7 @@ /area/centcom/control) "wE" = ( /obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 2 + color = "#596479" }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -9967,8 +9938,7 @@ "wJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "CentCom"; - opacity = 1 + name = "CentCom" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -10033,9 +10003,7 @@ /area/syndicate_mothership) "xa" = ( /obj/machinery/door/window/northright{ - base_state = "right"; dir = 4; - icon_state = "right"; name = "Security Desk"; req_access_txt = "103" }, @@ -10266,6 +10234,14 @@ /obj/item/bedsheet/syndie, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) +"xO" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/obj/structure/window{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "xQ" = ( /obj/effect/turf_decal/delivery, /obj/machinery/light, @@ -10396,7 +10372,6 @@ "yj" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -10441,12 +10416,9 @@ "yr" = ( /obj/machinery/door/airlock/centcom{ name = "Briefing Room"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/ferry) "ys" = ( @@ -10652,11 +10624,17 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) +"yS" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja7"; + name = "Dorm 7" + }, +/turf/open/floor/wood, +/area/centcom/holding) "yU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "CentCom"; - opacity = 1 + name = "CentCom" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -10828,7 +10806,6 @@ "zj" = ( /obj/structure/closet/secure_closet/ertCom, /obj/structure/sign/directions/command{ - dir = 2; pixel_y = 24 }, /obj/effect/turf_decal/stripes/line, @@ -10838,9 +10815,7 @@ /obj/machinery/door/airlock/medical/glass{ name = "Infirmary" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/control) "zl" = ( @@ -11017,7 +10992,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -11098,6 +11073,13 @@ /obj/item/reagent_containers/food/snacks/carpmeat, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) +"zW" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja5"; + name = "Dorm 5" + }, +/turf/open/floor/wood, +/area/centcom/holding) "zX" = ( /obj/structure/table, /obj/machinery/light{ @@ -11106,6 +11088,14 @@ /obj/item/soap/deluxe, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) +"zY" = ( +/obj/item/bedsheet/wiz{ + desc = "A glow in the dark blue bedsheet."; + name = "blue bedsheet" + }, +/obj/structure/bed, +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) "Aa" = ( /turf/open/floor/mech_bay_recharge_floor, /area/syndicate_mothership) @@ -11344,6 +11334,16 @@ /obj/effect/decal/remains/xeno, /turf/open/floor/grass, /area/wizard_station) +"AC" = ( +/obj/machinery/button/door{ + id = "Ninja5"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "AD" = ( /obj/machinery/door/airlock/centcom{ name = "Leader's Room"; @@ -11585,11 +11585,6 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) -"Bp" = ( -/obj/item/paicard, -/obj/structure/table/wood, -/turf/open/floor/engine/cult, -/area/wizard_station) "Bs" = ( /obj/structure/table/wood, /obj/machinery/computer/libraryconsole/bookmanagement, @@ -11846,12 +11841,9 @@ "BM" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/evac) "BN" = ( @@ -12157,7 +12149,6 @@ icon_state = "plant-22" }, /obj/machinery/power/apc{ - dir = 2; name = "Briefing Room APC"; pixel_y = -26 }, @@ -12323,7 +12314,7 @@ /obj/item/book/manual/wiki/security_space_law, /obj/item/taperecorder, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -12390,7 +12381,7 @@ "CM" = ( /obj/structure/filingcabinet/medical, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -12876,11 +12867,11 @@ /obj/item/folder/red, /obj/item/pen/red, /obj/machinery/door/window/brigdoor{ - name = "CentCom Customs"; - icon_state = "rightsecure"; + base_state = "rightsecure"; dir = 4; - req_access_txt = "109"; - base_state = "rightsecure" + icon_state = "rightsecure"; + name = "CentCom Customs"; + req_access_txt = "109" }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -12891,11 +12882,11 @@ /obj/item/folder/white, /obj/item/pen/blue, /obj/machinery/door/window/brigdoor{ - name = "CentCom Customs"; - icon_state = "rightsecure"; + base_state = "rightsecure"; dir = 8; - req_access_txt = "109"; - base_state = "rightsecure" + icon_state = "rightsecure"; + name = "CentCom Customs"; + req_access_txt = "109" }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -13101,12 +13092,9 @@ /area/wizard_station) "Eg" = ( /obj/machinery/door/airlock/centcom{ - name = "Thunderdome Booth"; - opacity = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 + name = "Thunderdome Booth" }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/centcom/control) "Eh" = ( @@ -13121,7 +13109,6 @@ /area/wizard_station) "Ej" = ( /obj/vehicle/ridden/scooter/skateboard{ - icon_state = "skateboard"; dir = 4 }, /obj/effect/turf_decal/stripes/line, @@ -13161,9 +13148,7 @@ /area/tdome/tdomeobserve) "Eq" = ( /obj/machinery/door/airlock/external, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "Er" = ( @@ -13263,12 +13248,9 @@ "EB" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) @@ -13281,9 +13263,7 @@ /turf/open/floor/engine/cult, /area/wizard_station) "ED" = ( -/obj/machinery/vending/boozeomat{ - req_access_txt = "0" - }, +/obj/machinery/vending/boozeomat, /turf/closed/indestructible{ icon = 'icons/turf/walls/wood_wall.dmi'; icon_state = "wood"; @@ -13323,8 +13303,8 @@ /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/fernybush, /turf/open/floor/plasteel{ - name = "plating"; - icon_state = "asteroid5" + icon_state = "asteroid5"; + name = "plating" }, /area/tdome/tdomeobserve) "EH" = ( @@ -13591,7 +13571,6 @@ "Fr" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; - dir = 2; icon_state = "rightsecure"; name = "Thunderdome Booth"; req_access_txt = "109" @@ -13731,8 +13710,7 @@ /area/tdome/tdomeobserve) "FK" = ( /obj/machinery/door/airlock/centcom{ - name = "Thunderdome Backstage"; - opacity = 1 + name = "Thunderdome Backstage" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -13984,9 +13962,9 @@ /area/tdome/tdomeobserve) "Gr" = ( /obj/structure/window/reinforced{ - resistance_flags = 3; color = "#008000"; - dir = 1 + dir = 1; + resistance_flags = 3 }, /turf/open/lava, /area/wizard_station) @@ -14004,9 +13982,7 @@ /area/tdome/tdomeobserve) "Gv" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "Gw" = ( @@ -14016,12 +13992,9 @@ "Gx" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "Gy" = ( @@ -14033,9 +14006,9 @@ resistance_flags = 3 }, /obj/structure/window/reinforced{ - resistance_flags = 3; color = "#008000"; - dir = 1 + dir = 1; + resistance_flags = 3 }, /turf/open/lava/airless, /area/wizard_station) @@ -14511,7 +14484,7 @@ /area/tdome/tdomeobserve) "Hq" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white, @@ -14554,7 +14527,7 @@ /area/tdome/tdomeobserve) "Hu" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/bar, @@ -14823,12 +14796,9 @@ "HS" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome Locker Room"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "HT" = ( @@ -15148,7 +15118,6 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "Is" = ( -/obj/machinery/igniter/on, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/tdome/arena) @@ -15176,12 +15145,9 @@ "Ix" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome Administration"; - opacity = 1; req_access_txt = "102" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/tdome/tdomeadmin) @@ -15348,9 +15314,7 @@ /area/tdome/tdomeadmin) "IS" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/tdome/tdomeadmin) "IT" = ( @@ -15442,8 +15406,8 @@ /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/fernybush, /turf/open/floor/plasteel{ - name = "plating"; - icon_state = "asteroid5" + icon_state = "asteroid5"; + name = "plating" }, /area/tdome/tdomeadmin) "Je" = ( @@ -15835,7 +15799,7 @@ icon_state = "plant-21" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -15878,6 +15842,14 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"Kf" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/lighter, +/obj/item/stack/sheet/mineral/wood{ + amount = 10 + }, +/turf/open/floor/carpet/red, +/area/centcom/holding) "Kg" = ( /turf/closed/indestructible/fakedoor{ name = "Thunderdome Admin" @@ -15887,7 +15859,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ name = "Thunderdome Administration"; - opacity = 1; req_access_txt = "102" }, /obj/effect/turf_decal/stripes/line{ @@ -16199,7 +16170,6 @@ /area/centcom/evac) "KL" = ( /obj/docking_port/stationary{ - dir = 1; dwidth = 1; height = 4; id = "pod4_away"; @@ -16210,7 +16180,6 @@ /area/space) "KM" = ( /obj/docking_port/stationary{ - dir = 1; dwidth = 1; height = 4; id = "pod3_away"; @@ -16322,6 +16291,12 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) +"Ln" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "Lp" = ( /obj/structure/chair{ dir = 4 @@ -16598,6 +16573,12 @@ "Mm" = ( /turf/open/floor/grass, /area/centcom/holding) +"Ms" = ( +/obj/effect/mob_spawn/human/ghostcafe{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding) "Mt" = ( /obj/structure/window/reinforced{ dir = 4 @@ -16701,6 +16682,13 @@ "MI" = ( /turf/open/floor/plating, /area/syndicate_mothership) +"MJ" = ( +/obj/structure/bed, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "MM" = ( /obj/structure/window/reinforced, /turf/open/floor/carpet/black, @@ -16767,12 +16755,9 @@ "Nk" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -16810,9 +16795,7 @@ /area/syndicate_mothership) "Nv" = ( /obj/structure/table, -/turf/open/floor/plasteel/cafeteria{ - dir = 2 - }, +/turf/open/floor/plasteel/cafeteria, /area/centcom/holding) "Nw" = ( /obj/machinery/recharge_station, @@ -16852,12 +16835,9 @@ "NG" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -16888,12 +16868,9 @@ /area/centcom/holding) "NU" = ( /obj/machinery/door/airlock/centcom{ - name = "CentCom"; - opacity = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 + name = "CentCom" }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -16933,6 +16910,9 @@ /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) +"Of" = ( +/turf/open/floor/carpet/red, +/area/centcom/holding) "Oh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -16942,8 +16922,7 @@ "Oj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ - name = "CentCom"; - opacity = 1 + name = "CentCom" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -16953,6 +16932,10 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"Ol" = ( +/obj/structure/table/wood/fancy, +/turf/open/floor/wood, +/area/centcom/holding) "Om" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -16986,6 +16969,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"Ox" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Cryo" + }, +/turf/open/floor/wood, +/area/centcom/holding) "Oz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -17121,7 +17110,9 @@ /turf/open/floor/wood, /area/syndicate_mothership) "Px" = ( -/obj/machinery/vr_sleeper, +/obj/structure/mineral_door/paperframe{ + name = "Arcade" + }, /turf/open/floor/wood, /area/centcom/holding) "PA" = ( @@ -17135,7 +17126,10 @@ /area/syndicate_mothership) "PF" = ( /obj/machinery/vr_sleeper{ - dir = 1 + dir = 8 + }, +/obj/machinery/light{ + dir = 4 }, /turf/open/floor/wood, /area/centcom/holding) @@ -17168,6 +17162,12 @@ /obj/machinery/autolathe, /turf/open/floor/wood, /area/centcom/holding) +"PM" = ( +/obj/machinery/vending/clothing{ + extended_inventory = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "PO" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/tile/green{ @@ -17246,6 +17246,11 @@ "Qe" = ( /turf/open/ai_visible, /area/ai_multicam_room) +"Qi" = ( +/obj/item/paicard, +/obj/structure/table/wood, +/turf/open/floor/engine/cult, +/area/wizard_station) "Qk" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ppflowers, @@ -17273,11 +17278,8 @@ /turf/open/floor/plasteel, /area/syndicate_mothership) "Qu" = ( -/obj/machinery/vr_sleeper{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 +/obj/machinery/door/airlock/wood/glass{ + name = "Dorms" }, /turf/open/floor/wood, /area/centcom/holding) @@ -17292,9 +17294,25 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) +"QC" = ( +/obj/machinery/door/airlock/wood{ + name = "Bathroom" + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "QE" = ( /turf/open/floor/plasteel, /area/centcom/supplypod) +"QF" = ( +/obj/machinery/button/door{ + id = "Ninja3"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "QH" = ( /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -17330,6 +17348,12 @@ /obj/structure/window/reinforced/fulltile, /turf/open/floor/grass, /area/centcom/holding) +"QN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "QP" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 1 @@ -17466,6 +17490,21 @@ /obj/item/tank/internals/plasmaman/belt/full, /turf/open/floor/wood, /area/centcom/holding) +"Rq" = ( +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"Ru" = ( +/obj/structure/fireplace, +/turf/open/floor/carpet/red, +/area/centcom/holding) +"Rv" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) "Rz" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plating, @@ -17480,9 +17519,20 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) -"RL" = ( -/obj/structure/mineral_door/paperframe{ - name = "Arcade" +"RO" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/window{ + dir = 8 + }, +/obj/structure/curtain, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"RP" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja4"; + name = "Dorm 4" }, /turf/open/floor/wood, /area/centcom/holding) @@ -17508,6 +17558,12 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"RX" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479" + }, +/turf/open/floor/wood, +/area/centcom/holding) "RZ" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -17618,9 +17674,7 @@ pixel_x = -3; pixel_y = 6 }, -/turf/open/floor/plasteel/cafeteria{ - dir = 2 - }, +/turf/open/floor/plasteel/cafeteria, /area/centcom/holding) "SH" = ( /obj/effect/turf_decal/tile/green{ @@ -17648,6 +17702,9 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/space/basic, /area/centcom/supplypod) +"ST" = ( +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "SU" = ( /obj/structure/table/wood, /obj/item/camera/detective{ @@ -17686,10 +17743,27 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/centcom/holding) +"SZ" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja3"; + name = "Dorm 3" + }, +/turf/open/floor/wood, +/area/centcom/holding) "Tb" = ( /obj/structure/closet/crate/freezer/blood, /turf/open/floor/wood, /area/centcom/holding) +"Tc" = ( +/obj/machinery/button/door{ + id = "Ninja2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "Tj" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -17804,6 +17878,10 @@ /obj/effect/landmark/holding_facility, /turf/open/floor/wood, /area/centcom/holding) +"Uf" = ( +/obj/structure/closet/secure_closet, +/turf/open/floor/wood, +/area/centcom/holding) "Ug" = ( /obj/machinery/door/poddoor/shuttledock{ checkdir = 1; @@ -17861,15 +17939,15 @@ "Un" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"Ur" = ( +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) "Uu" = ( /obj/machinery/light{ dir = 8 @@ -17895,6 +17973,13 @@ /obj/machinery/vending/cola, /turf/open/floor/plasteel, /area/centcom/supplypod) +"UD" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet" + }, +/turf/open/floor/wood, +/area/centcom/holding) "UE" = ( /obj/structure/chair/stool/bar, /turf/open/floor/wood, @@ -17918,7 +18003,6 @@ "UO" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -17998,15 +18082,13 @@ dir = 8 }, /obj/machinery/door/window{ - name = "Tactical Toilet"; - icon_state = "right"; dir = 8; + icon_state = "right"; + name = "Tactical Toilet"; opacity = 1 }, /obj/structure/window/reinforced/tinted, -/turf/open/floor/plasteel/freezer{ - dir = 2 - }, +/turf/open/floor/plasteel/freezer, /area/syndicate_mothership) "Vm" = ( /obj/machinery/gibber, @@ -18124,7 +18206,6 @@ "Wc" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -18155,11 +18236,24 @@ "Wr" = ( /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"Ws" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja6"; + name = "Dorm 6" + }, +/turf/open/floor/wood, +/area/centcom/holding) "WC" = ( /obj/structure/table/reinforced, /obj/item/pen, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"WE" = ( +/obj/machinery/vending/kink{ + extended_inventory = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "WH" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ @@ -18170,12 +18264,9 @@ "WJ" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome Administration"; - opacity = 1; req_access_txt = "102" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -18194,6 +18285,16 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"WN" = ( +/obj/machinery/button/door{ + id = "Ninja6"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "WO" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18205,7 +18306,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -18220,6 +18320,14 @@ /obj/structure/closet/syndicate/personal, /turf/open/floor/wood, /area/syndicate_mothership) +"WV" = ( +/obj/structure/bed, +/obj/item/bedsheet/hos{ + desc = "A fancy red bedsheet."; + name = "red bedsheet" + }, +/turf/open/floor/carpet/red, +/area/centcom/holding) "WW" = ( /obj/machinery/processor, /turf/open/floor/plasteel/cafeteria, @@ -18232,9 +18340,7 @@ /turf/open/floor/grass, /area/centcom/holding) "Xe" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, +/obj/machinery/vending/autodrobe, /turf/open/floor/wood, /area/centcom/holding) "Xg" = ( @@ -18260,9 +18366,8 @@ /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) "Xn" = ( -/obj/machinery/door/airlock/wood{ - req_one_access_txt = "0" - }, +/obj/structure/bed, +/obj/item/bedsheet/random, /turf/open/floor/wood, /area/centcom/holding) "Xo" = ( @@ -18287,20 +18392,15 @@ /turf/open/floor/plasteel, /area/centcom/supplypod/loading/four) "Xs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/turf/open/floor/plating, -/area/syndicate_mothership) +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/centcom/holding) "Xt" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/centcom/control) @@ -18314,6 +18414,10 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/holofloor, /area/holodeck/rec_center/firingrange) +"Xw" = ( +/obj/structure/table/wood/fancy/royalblue, +/turf/open/floor/wood, +/area/centcom/holding) "Xx" = ( /obj/machinery/light{ dir = 4 @@ -18332,6 +18436,16 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"XD" = ( +/obj/machinery/button/door{ + id = "Ninja4"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "XE" = ( /obj/machinery/door/airlock/centcom{ name = "Kitchen"; @@ -18372,6 +18486,16 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) +"Ya" = ( +/obj/machinery/button/door{ + id = "Ninja1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding) "Yc" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -18428,12 +18552,9 @@ "Yt" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -18473,6 +18594,12 @@ /mob/living/simple_animal/chicken, /turf/open/floor/grass, /area/centcom/holding) +"YO" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) "YQ" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker, @@ -18495,6 +18622,9 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"YW" = ( +/turf/open/floor/plating, +/area/centcom/holding) "Za" = ( /obj/machinery/door/airlock/wood{ id_tag = "lmrestroom" @@ -18529,11 +18659,10 @@ /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"Zt" = ( -/obj/machinery/vr_sleeper{ - dir = 1 +"Zu" = ( +/obj/machinery/vending/autodrobe/all_access{ + extended_inventory = 1 }, -/obj/machinery/light, /turf/open/floor/wood, /area/centcom/holding) "Zw" = ( @@ -18554,6 +18683,16 @@ /obj/effect/landmark/start/nukeop_leader, /turf/open/floor/wood, /area/syndicate_mothership) +"ZE" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "ZF" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18570,7 +18709,6 @@ "ZJ" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, /obj/effect/turf_decal/stripes/line{ @@ -18629,12 +18767,9 @@ "ZX" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; - opacity = 1; req_access_txt = "101" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, @@ -25747,7 +25882,7 @@ lI lI lI Ax -Bp +Qi qZ qZ Ax @@ -39895,7 +40030,7 @@ aa aa aa QV -Xs +Yc MI MI MI @@ -40409,7 +40544,7 @@ aa aa aa QV -Xs +Yc MI MI MI @@ -40666,7 +40801,7 @@ aa aa aa QV -Xs +Yc MI MI MI @@ -42755,17 +42890,17 @@ Nd Nd Nd Nd +Nd +Nd +Nd +Nd +Nd aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Nd +Nd +Nd +Nd aa aa aa @@ -43009,20 +43144,20 @@ CT oV CT CT +CT oV CT Nd +Xk +Xk +Xk +Nd aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Uf +Xk +Xk +Nd aa aa aa @@ -43268,18 +43403,18 @@ Xk Xk Xk Xk +Xk +Nd +Gs +Xk +HH Nd aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +MJ +Xk +YW +Nd aa aa aa @@ -43519,24 +43654,24 @@ UV CV Xk NT -Xk +Dj PF +Dj +Xk +Dj +PF +Dj +Nd +Xk Xk -Px Xk -Zt Nd aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +ma +YW +Xk +Nd aa aa aa @@ -43775,25 +43910,25 @@ Nd Gs Xk Xk -RL -Xk -PF -Xk -Px -Xk -PF Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Nd +Nd +Px +Nd +Nd +Nd +Nd +Nd +Ox +Nd +Nd +Nd +Nd +Nd +yS +Nd +Nd aa aa aa @@ -44034,23 +44169,23 @@ CV Xk NT Xk -PF +Yo Xk -Px Xk -Zt +Xk +Yo +Xk +Nd +Xk +Xk +Yo +Xk +Xk +Yo +Xk +Xk +WE Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -44277,7 +44412,7 @@ Nd Xk Yo Xk -Xn +XL Xk Xk Tn @@ -44289,13 +44424,24 @@ NT Zh Xk Xk -NT +Re Xk Xk Xk Xk Xk Xk +Xk +Qu +Xk +Xk +Xk +Xk +Xk +Xk +Xk +Xk +Zu Nd aa aa @@ -44303,17 +44449,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa KH KH KS @@ -44547,24 +44682,24 @@ Ym CV Xk NT -Dj -Qu -Dj -Dj -Qu -Dj +Xk +Xx +Xk +Xk +Xk +Xx +Xk +Nd +Xk +Xk +Xk +Xk +Xk +Xk +Xk +Xk +PM Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -44811,17 +44946,17 @@ Nd Nd Nd Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Nd +Nd +Nd +Rq +HH +Nd +Nd +Nd +Nd +Nd aa aa aa @@ -45068,17 +45203,17 @@ OU RS VF Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +UD +tZ +SY +Nd +Xk +Xk +Nd +SY +Ri +UD +Nd aa aa aa @@ -45325,17 +45460,17 @@ Xk Xk Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Gs +Xk +Xk +lS +Xk +Xk +RP +Xk +Xk +HH +Nd aa aa aa @@ -45582,17 +45717,17 @@ XM XM Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Xn +Xk +Ya +Nd +Xk +Xk +Nd +XD +Xk +Xn +Nd aa aa aa @@ -45839,17 +45974,17 @@ Po ZU Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Nd +Nd +Nd +Xk +Xk +Nd +Nd +Nd +Nd +Nd aa aa aa @@ -46096,17 +46231,17 @@ Sd MM Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +UD +tZ +SY +Nd +Xk +Xk +Nd +SY +Ri +UD +Nd aa aa aa @@ -46353,17 +46488,17 @@ Sd MM TM Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Gs +Xk +Xk +uh +Xk +Xk +zW +Xk +Xk +HH +Nd aa aa aa @@ -46610,17 +46745,17 @@ Sd MM Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Xn +Xk +Tc +Nd +Xk +Xk +Nd +AC +Xk +Xn +Nd aa aa aa @@ -46867,17 +47002,17 @@ PA Pl Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Nd +Nd +Nd +Rq +HH +Nd +Nd +Nd +Nd +Nd aa aa aa @@ -47124,17 +47259,17 @@ GY GY Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Xs +Ol +YO +Nd +Xk +Xk +Nd +RX +Xw +qP +Nd aa aa aa @@ -47381,17 +47516,17 @@ Xk Xk Xk Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Gs +Xk +Xk +SZ +Xk +Xk +Ws +Xk +Xk +HH +Nd aa aa aa @@ -47628,7 +47763,7 @@ Xk GY NT Xk -Xk +Ms Xk NT vt @@ -47638,17 +47773,17 @@ Tb Uh tW Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Ru +Of +QF +Nd +Xk +Xk +Nd +WN +Ur +wj +Nd aa aa aa @@ -47895,17 +48030,17 @@ Nd Nd Nd Nd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Kf +WV +Xk +Nd +Nd +Nd +Nd +Xk +zY +Rv +Nd aa aa aa @@ -48151,18 +48286,18 @@ aa aa aa aa +Nd +Nd +Nd +QC +Nd aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +QC +Nd +Nd +Nd aa aa aa @@ -48408,18 +48543,18 @@ aa aa aa aa +Nd +Ln +ST +ST +Nd aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +ST +ST +Ln +Nd aa aa aa @@ -48665,18 +48800,18 @@ aa aa aa aa +Nd +xO +QN +ZE +Nd aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +ZE +QN +RO +Nd aa aa aa @@ -48922,18 +49057,18 @@ aa aa aa aa +Nd +Nd +Nd +Nd +Nd aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Nd +Nd +Nd +Nd +Nd aa aa aa diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm new file mode 100644 index 0000000000..b71da1fba0 --- /dev/null +++ b/_maps/templates/shelter_3.dmm @@ -0,0 +1,414 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod) +"b" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod) +"c" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"d" = ( +/obj/structure/sign/mining/survival{ + dir = 1 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"e" = ( +/obj/structure/sign/mining/survival{ + dir = 8 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"f" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/chem_dispenser/drinks, +/turf/open/floor/pod/dark, +/area/survivalpod) +"g" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/chem_dispenser/drinks/beer, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/survivalpod) +"h" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/pod/dark, +/area/survivalpod) +"i" = ( +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/rag, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/pod/dark, +/area/survivalpod) +"j" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/clipboard, +/obj/item/toy/figure/bartender, +/turf/open/floor/pod/dark, +/area/survivalpod) +"k" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/storage/fancy/cigarettes/cigars, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_y = 4 + }, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_y = 8 + }, +/turf/open/floor/pod/dark, +/area/survivalpod) +"l" = ( +/obj/structure/table/wood/fancy/black, +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/pod/dark, +/area/survivalpod) +"m" = ( +/obj/structure/closet/secure_closet/bar, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/survivalpod) +"n" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/pod/dark, +/area/survivalpod) +"o" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod) +"p" = ( +/obj/machinery/door/airlock/survival_pod/glass{ + req_access_txt = "25" + }, +/obj/structure/fans/tiny, +/turf/open/floor/pod/dark, +/area/survivalpod) +"q" = ( +/turf/open/floor/pod/dark, +/area/survivalpod) +"r" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"s" = ( +/obj/structure/table/reinforced, +/obj/item/lighter{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/lighter, +/turf/open/floor/pod/dark, +/area/survivalpod) +"t" = ( +/obj/structure/table/reinforced, +/turf/open/floor/pod/dark, +/area/survivalpod) +"u" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/matches{ + pixel_x = -4; + pixel_y = 8 + }, +/turf/open/floor/pod/dark, +/area/survivalpod) +"v" = ( +/obj/machinery/door/window/survival_pod{ + req_access_txt = "25" + }, +/turf/open/floor/pod/dark, +/area/survivalpod) +"w" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"x" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/carpet/black, +/area/survivalpod) +"y" = ( +/turf/open/floor/carpet/black, +/area/survivalpod) +"z" = ( +/obj/machinery/vending/cigarette/beach, +/turf/open/floor/carpet/black, +/area/survivalpod) +"A" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/carpet/black, +/area/survivalpod) +"B" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"C" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod, +/obj/structure/grille, +/turf/open/floor/pod/dark, +/area/survivalpod) +"D" = ( +/obj/structure/chair/comfy/black, +/turf/open/floor/carpet/black, +/area/survivalpod) +"E" = ( +/obj/machinery/door/airlock/survival_pod, +/turf/open/floor/pod/light, +/area/survivalpod) +"F" = ( +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/carpet/black, +/area/survivalpod) +"G" = ( +/obj/structure/urinal{ + pixel_y = 24 + }, +/turf/open/floor/pod/light, +/area/survivalpod) +"H" = ( +/turf/open/floor/pod/light, +/area/survivalpod) +"I" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/pod/light, +/area/survivalpod) +"J" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"K" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/survivalpod) +"L" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/carpet/black, +/area/survivalpod) +"M" = ( +/obj/machinery/light, +/turf/open/floor/carpet/black, +/area/survivalpod) +"N" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/pod/light, +/area/survivalpod) +"O" = ( +/obj/structure/sign/mining/survival{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod) +"P" = ( +/obj/structure/sign/mining/survival, +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod) +"Q" = ( +/obj/structure/sign/mining/survival, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/survivalpod) +"R" = ( +/obj/machinery/door/airlock/survival_pod/glass, +/obj/structure/fans/tiny, +/turf/open/floor/carpet/black, +/area/survivalpod) + +(1,1,1) = {" +a +e +p +e +c +e +C +e +C +e +a +"} +(2,1,1) = {" +b +f +q +s +x +y +D +F +K +L +P +"} +(3,1,1) = {" +c +g +q +t +x +y +y +y +y +M +c +"} +(4,1,1) = {" +d +h +q +t +x +y +D +F +K +y +Q +"} +(5,1,1) = {" +c +i +q +u +x +y +D +F +K +y +c +"} +(6,1,1) = {" +d +j +q +t +x +y +y +y +y +y +R +"} +(7,1,1) = {" +c +k +q +t +x +y +c +c +c +c +c +"} +(8,1,1) = {" +d +l +q +t +x +y +c +G +H +H +Q +"} +(9,1,1) = {" +c +m +q +v +y +y +E +H +c +E +c +"} +(10,1,1) = {" +b +n +q +t +z +A +c +I +c +N +P +"} +(11,1,1) = {" +a +o +r +w +r +B +c +J +c +O +a +"} diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 058fd864bd..cabcc0a17d 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -12,6 +12,7 @@ #define APPRENTICE_BLUESPACE "bluespace" #define APPRENTICE_ROBELESS "robeless" #define APPRENTICE_HEALING "healing" +#define APPRENTICE_MARTIAL "martial" //ERT Types diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index e3cafd4613..e29be375e6 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -57,9 +57,9 @@ #define BALLS_SACK_SIZE_DEF 8 #define BALLS_SACK_SIZE_MAX 40 -#define CUM_RATE 0.035 +#define CUM_RATE 2 // holy shit what a really shitty define name - relates to units per arbitrary measure of time? #define CUM_RATE_MULT 1 -#define CUM_EFFICIENCY 1//amount of nutrition required per life() +#define CUM_EFFICIENCY 1 //amount of nutrition required per life() #define EGG_GIRTH_MIN 1//inches #define EGG_GIRTH_DEF 6 @@ -109,8 +109,16 @@ #define MEDIHOUND_SLEEPER (1<<0) #define EATING_NOISES (1<<1) #define DIGESTION_NOISES (1<<2) +#define BREAST_ENLARGEMENT (1<<3) +#define PENIS_ENLARGEMENT (1<<4) +#define FORCED_FEM (1<<5) +#define FORCED_MASC (1<<6) +#define HYPNO (1<<7) +#define NEVER_HYPNO (1<<8) +#define NO_APHRO (1<<9) +#define NO_ASS_SLAP (1<<10) -#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES) +#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES|BREAST_ENLARGEMENT|PENIS_ENLARGEMENT) //component stuff #define COMSIG_COMBAT_TOGGLED "combatmode_toggled" //called by combat mode toggle on all equipped items. args: (mob/user, combatmode) diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index f95ff93ac3..7b2dd8663c 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -54,6 +54,10 @@ #define EXAMINE_POSITION_BEFORE 2 //End positions #define COMPONENT_EXNAME_CHANGED 1 +#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" //from base of atom/update_icon(): () + #define COMSIG_ATOM_NO_UPDATE_ICON_STATE 1 + #define COMSIG_ATOM_NO_UPDATE_OVERLAYS 2 +#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays) #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom) #define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc) #define COMPONENT_ATOM_BLOCK_EXIT 1 diff --git a/code/__DEFINES/dynamic.dm b/code/__DEFINES/dynamic.dm new file mode 100644 index 0000000000..45c1ba9cb2 --- /dev/null +++ b/code/__DEFINES/dynamic.dm @@ -0,0 +1,14 @@ +#define CURRENT_LIVING_PLAYERS 1 +#define CURRENT_LIVING_ANTAGS 2 +#define CURRENT_DEAD_PLAYERS 3 +#define CURRENT_OBSERVERS 4 + +#define NO_ASSASSIN (1<<0) +#define WAROPS_ALWAYS_ALLOWED (1<<1) + +#define ONLY_RULESET (1<<0) +#define HIGHLANDER_RULESET (1<<1) +#define TRAITOR_RULESET (1<<2) +#define MINOR_RULESET (1<<3) + +#define RULESET_STOP_PROCESSING 1 diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 15c7af5749..72e6a12f84 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -11,6 +11,7 @@ #define GROSS (1<<10) #define TOXIC (1<<11) #define PINEAPPLE (1<<12) +#define BREAKFAST (1<<13) #define DRINK_NICE 1 #define DRINK_GOOD 2 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 6f433374e7..55bfcaff79 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -118,6 +118,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) +#define iscow(A) (istype(A, /mob/living/simple_animal/cow)) + #define isslime(A) (istype(A, /mob/living/simple_animal/slime)) #define isdrone(A) (istype(A, /mob/living/simple_animal/drone)) @@ -222,6 +224,8 @@ GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list( #define isorgan(A) (istype(A, /obj/item/organ)) +#define isclothing(A) (istype(A, /obj/item/clothing)) + GLOBAL_LIST_INIT(pointed_types, typecacheof(list( /obj/item/pen, /obj/item/screwdriver, diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 13dccc74fe..89c702e605 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -59,11 +59,13 @@ #define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow. #define LIGHTING_PLANE_ALPHA_VISIBLE 255 -#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250 +#define LIGHTING_PLANE_ALPHA_NV_TRAIT 223 #define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 #define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. #define LIGHTING_PLANE_ALPHA_INVISIBLE 0 +#define NIGHT_VISION_DARKSIGHT_RANGE 3 + //lighting area defines #define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness) #define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled @@ -80,4 +82,4 @@ #define FLASH_LIGHT_DURATION 2 #define FLASH_LIGHT_POWER 3 -#define FLASH_LIGHT_RANGE 3.8 \ No newline at end of file +#define FLASH_LIGHT_RANGE 3.8 diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 1b42217fe1..73e900226e 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -38,8 +38,6 @@ require only minor tweaks. #define ZTRAIT_SPACE_RUINS "Space Ruins" #define ZTRAIT_LAVA_RUINS "Lava Ruins" #define ZTRAIT_ISOLATED_RUINS "Isolated Ruins" //Placing ruins on z levels with this trait will use turf reservation instead of usual placement. -// prevents certain turfs from being stripped by a singularity -#define ZTRAIT_PLANET "Planet" // number - bombcap is multiplied by this before being applied to bombs #define ZTRAIT_BOMBCAP_MULTIPLIER "Bombcap Multiplier" @@ -60,11 +58,18 @@ require only minor tweaks. // CROSSLINKED - mixed in with the cross-linked space pool #define CROSSLINKED "Cross" +// string - type path of the z-level's baseturf (defaults to space) +#define ZTRAIT_BASETURF "Baseturf" + // default trait definitions, used by SSmapping #define ZTRAITS_CENTCOM list(ZTRAIT_CENTCOM = TRUE) #define ZTRAITS_STATION list(ZTRAIT_LINKAGE = CROSSLINKED, ZTRAIT_STATION = TRUE) #define ZTRAITS_SPACE list(ZTRAIT_LINKAGE = CROSSLINKED, ZTRAIT_SPACE_RUINS = TRUE) -#define ZTRAITS_LAVALAND list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 5) +#define ZTRAITS_LAVALAND list(\ + ZTRAIT_MINING = TRUE, \ + ZTRAIT_LAVA_RUINS = TRUE, \ + ZTRAIT_BOMBCAP_MULTIPLIER = 5, \ + ZTRAIT_BASETURF = /turf/open/lava/smooth/lava_land_surface) #define ZTRAITS_REEBE list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5) #define DL_NAME "name" diff --git a/code/__DEFINES/melee.dm b/code/__DEFINES/melee.dm index cb4a433211..b166b9d21a 100644 --- a/code/__DEFINES/melee.dm +++ b/code/__DEFINES/melee.dm @@ -7,4 +7,5 @@ #define MARTIALART_MUSHPUNCH "mushroom punch" #define MARTIALART_KRAVMAGA "krav maga" #define MARTIALART_CQC "CQC" -#define MARTIALART_PLASMAFIST "plasma fist" \ No newline at end of file +#define MARTIALART_PLASMAFIST "plasma fist" +#define MARTIALART_RISINGBASS "rising bass" \ No newline at end of file diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 29ff0a8fae..d595abd3ec 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -427,6 +427,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S //Dummy mob reserve slots #define DUMMY_HUMAN_SLOT_PREFERENCES "dummy_preference_preview" +#define DUMMY_HUMAN_SLOT_HOLOFORM "dummy_holoform_generation" #define DUMMY_HUMAN_SLOT_ADMIN "admintools" #define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation" @@ -528,3 +529,11 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S #define FOURSPACES "    " #define CRYOMOBS 'icons/obj/cryo_mobs.dmi' + +#define CUSTOM_HOLOFORM_DELAY 10 SECONDS //prevents spamming to make lag. it's pretty expensive to do this. + +#define HOLOFORM_FILTER_AI "FILTER_AI" +#define HOLOFORM_FILTER_PAI "FILTER_PAI" +#define HOLOFORM_FILTER_STATIC "FILTER_STATIC" + +#define CANT_REENTER_ROUND -1 diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm index 50e1a10fa1..1883df6e8e 100644 --- a/code/__DEFINES/movespeed_modification.dm +++ b/code/__DEFINES/movespeed_modification.dm @@ -57,6 +57,7 @@ #define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG" #define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY" +#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER" #define MOVESPEED_ID_TASED_STATUS "TASED" diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 94c2c372f0..831f73ac74 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -41,6 +41,7 @@ #define VOICEBOX_TOGGLABLE (1<<6) //The voicebox in this clothing can be toggled. #define VOICEBOX_DISABLED (1<<7) //The voicebox is currently turned off. #define IGNORE_HAT_TOSS (1<<8) //Hats with negative effects when worn (i.e the tinfoil hat). +#define SCAN_REAGENTS (1<<9) // Allows helmets and glasses to scan reagents. // Flags for the organ_flags var on /obj/item/organ diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 1b63ef3d52..b7a5975ad5 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -118,6 +118,7 @@ #define TRAIT_PARALYSIS_R_ARM "para-r-arm" #define TRAIT_PARALYSIS_L_LEG "para-l-leg" #define TRAIT_PARALYSIS_R_LEG "para-r-leg" +#define TRAIT_DISK_VERIFIER "disk-verifier" #define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech" #define TRAIT_SOOTHED_THROAT "soothed-throat" #define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism" @@ -133,6 +134,7 @@ #define TRAIT_NORUNNING "norunning" // You walk! #define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites. #define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat. +#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events" //non-mob traits @@ -159,17 +161,16 @@ #define TRAIT_TAGGER "tagger" #define TRAIT_PHOTOGRAPHER "photographer" #define TRAIT_MUSICIAN "musician" -#define TRAIT_CROCRIN_IMMUNE "crocin_immune" #define TRAIT_NYMPHO "nymphomania" #define TRAIT_MASO "masochism" #define TRAIT_EXHIBITIONIST "exhibitionist" #define TRAIT_HIGH_BLOOD "high_blood" -#define TRAIT_PHARMA "hepatic_pharmacokinesis" #define TRAIT_PARA "paraplegic" #define TRAIT_EMPATH "empath" #define TRAIT_FRIENDLY "friendly" -#define TRAIT_ASSBLASTUSA "assblastusa" #define TRAIT_CULT_EYES "cult_eyes" +#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item" +#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman. #define TRAIT_FREESPRINT "free_sprinting" #define TRAIT_NO_ALCOHOL "alcohol_intolerance" @@ -192,6 +193,7 @@ #define ABSTRACT_ITEM_TRAIT "abstract-item" #define STATUS_EFFECT_TRAIT "status-effect" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention +#define GHOSTROLE_TRAIT "ghostrole" // unique trait sources, still defines #define STATUE_MUTE "statue" @@ -225,5 +227,9 @@ #define NINJA_SUIT_TRAIT "ninja-suit" #define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant" #define SLEEPING_CARP_TRAIT "sleeping_carp" +#define RISING_BASS_TRAIT "rising_bass" #define ABDUCTOR_ANTAGONIST "abductor-antagonist" +#define NUKEOP_ANTAGONIST "nukeop-antagonist" #define MADE_UNCLONEABLE "made-uncloneable" +#define NUKEOP_TRAIT "nuke-op" +#define DEATHSQUAD_TRAIT "deathsquad" diff --git a/code/__DEFINES/vote.dm b/code/__DEFINES/vote.dm new file mode 100644 index 0000000000..8fb2e6deab --- /dev/null +++ b/code/__DEFINES/vote.dm @@ -0,0 +1,6 @@ +#define PLURALITY_VOTING 0 +#define APPROVAL_VOTING 1 +#define RANKED_CHOICE_VOTING 2 +#define SCORE_VOTING 3 + +GLOBAL_LIST_INIT(vote_score_options,list("Bad","Poor","Acceptable","Good","Great")) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index c259831f94..3ee77d3edc 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -157,6 +157,8 @@ WRITE_LOG(GLOB.config_error_log, text) SEND_TEXT(world.log, text) +/proc/log_mapping(text) + WRITE_LOG(GLOB.world_map_error_log, text) /* For logging round startup. */ /proc/start_log(log) diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm new file mode 100644 index 0000000000..0e97314f1f --- /dev/null +++ b/code/__HELPERS/custom_holoforms.dm @@ -0,0 +1,62 @@ +// Generates a holoform appearance +// Equipment list is slot = path. +/proc/generate_custom_holoform_from_prefs(datum/preferences/prefs, list/equipment_by_slot, list/inhand_equipment, copy_job = FALSE, apply_loadout = FALSE) + ASSERT(prefs) + var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) + prefs.copy_to(mannequin) + if(apply_loadout && prefs.parent) + SSjob.equip_loadout(prefs.parent.mob, mannequin, bypass_prereqs = TRUE) + if(copy_job) + var/datum/job/highest = prefs.get_highest_job() + if(highest && !istype(highest, /datum/job/ai) && !istype(highest, /datum/job/cyborg)) + highest.equip(mannequin, TRUE, preference_source = prefs.parent) + + if(length(equipment_by_slot)) + for(var/slot in equipment_by_slot) + var/obj/item/I = new equipment_by_slot[slot] + mannequin.equip_to_slot_if_possible(I, slot, TRUE, TRUE, TRUE, TRUE) + if(length(inhand_equipment)) + for(var/path in inhand_equipment) + var/obj/item/I = new path + mannequin.equip_to_slot_if_possible(I, SLOT_HANDS, TRUE, TRUE, TRUE, TRUE) + + + var/icon/combined = new + for(var/d in GLOB.cardinals) + mannequin.setDir(d) + COMPILE_OVERLAYS(mannequin) + CHECK_TICK + var/icon/capture = getFlatIcon(mannequin) + CHECK_TICK + combined.Insert(capture, dir = d) + CHECK_TICK + + unset_busy_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) + return combined + +/proc/process_holoform_icon_filter(icon/I, filter_type, clone = TRUE) + if(clone) + I = icon(I) //Clone + switch(filter_type) + if(HOLOFORM_FILTER_AI) + I = getHologramIcon(I) + if(HOLOFORM_FILTER_STATIC) + I = getStaticIcon(I) + if(HOLOFORM_FILTER_PAI) + I = getPAIHologramIcon(I) + return I + +//Errors go to user. +/proc/generate_custom_holoform_from_prefs_safe(datum/preferences/prefs, mob/user) + if(user) + if(user.client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) + to_chat(user, "You are attempting to set your custom holoform too fast!") + return + return generate_custom_holoform_from_prefs(prefs, null, null, TRUE, TRUE) + +//Prompts this client for custom holoform parameters. +/proc/user_interface_custom_holoform(client/C) + var/datum/preferences/target_prefs = C.prefs + ASSERT(target_prefs) + //In the future, maybe add custom path allowances a la admin create outfit but for now.. + return generate_custom_holoform_from_prefs_safe(target_prefs, C.mob) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index d76fc7731a..222002f512 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -447,7 +447,7 @@ var/list/candidates = list() for(var/mob/dead/observer/G in GLOB.player_list) - if(G.reenter_round_timeout < world.realtime) + if(G.can_reenter_round(TRUE)) candidates += G return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 5fb64004c0..1af3143d9d 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -939,7 +939,7 @@ world I.pixel_y++ add_overlay(I)//And finally add the overlay. -/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created. +/proc/getHologramIcon(icon/A, safety = TRUE)//If safety is on, a new icon is not created. var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. flat_icon.ChangeOpacity(0.5)//Make it half transparent. @@ -947,6 +947,14 @@ world flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. return flat_icon +/proc/getPAIHologramIcon(icon/A, safety = TRUE) + var/icon/flat_icon = safety? A : new(A) + flat_icon.SetIntensity(0.75, 1, 0.75) + flat_icon.ChangeOpacity(0.7) + var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanlineslow")//Scanline effect. + flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. + return flat_icon + //What the mob looks like as animated static //By vg's ComicIronic /proc/getStaticIcon(icon/A, safety = TRUE) diff --git a/code/__HELPERS/level_traits.dm b/code/__HELPERS/level_traits.dm index 55ee069321..3e6e88c8fa 100644 --- a/code/__HELPERS/level_traits.dm +++ b/code/__HELPERS/level_traits.dm @@ -12,6 +12,3 @@ #define is_reserved_level(z) SSmapping.level_trait(z, ZTRAIT_RESERVED) #define is_away_level(z) SSmapping.level_trait(z, ZTRAIT_AWAY) - -// If true, the singularity cannot strip away asteroid turf on this Z -#define is_planet_level(z) SSmapping.level_trait(z, ZTRAIT_PLANET) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 0d6345dae2..cdf0f604b8 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -20,8 +20,6 @@ else return "000" -#define UNDIE_COLORABLE(U) (U?.has_color) - /proc/random_underwear(gender) if(!GLOB.underwear_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/bottom, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) @@ -76,6 +74,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_wings, GLOB.insect_wings_list) if(!GLOB.insect_fluffs_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_fluff, GLOB.insect_fluffs_list) + if(!GLOB.insect_markings_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_markings, GLOB.insect_markings_list) //CIT CHANGES - genitals and such if(!GLOB.cock_shapes_list.len) @@ -151,6 +151,7 @@ "caps" = pick(GLOB.caps_list), "insect_wings" = pick(GLOB.insect_wings_list), "insect_fluff" = "None", + "insect_markings" = pick(GLOB.insect_markings_list), "taur" = "None", "mam_body_markings" = pick(snowflake_markings_list), "mam_ears" = pick(snowflake_ears_list), diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index b899d7f6ab..49825bcb50 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -19,6 +19,9 @@ var/list/mob_data = list() if(isnewplayer(m)) continue + if (m.client && m.client.prefs && m.client.prefs.auto_ooc) + if (!(m.client.prefs.chat_toggles & CHAT_OOC)) + m.client.prefs.chat_toggles ^= CHAT_OOC if(m.mind) if(m.stat != DEAD && !isbrain(m) && !iscameramob(m)) num_survivors++ @@ -320,6 +323,8 @@ parts += "[FOURSPACES][FOURSPACES][str]" for(var/entry in mode.threat_tallies) parts += "[FOURSPACES][FOURSPACES][entry] added [mode.threat_tallies[entry]]" + SSblackbox.record_feedback("tally","dynamic_threat",mode.threat_level,"Final threat level") + SSblackbox.record_feedback("tally","dynamic_threat",mode.threat,"Threat left") return parts.Join("
    ") /client/proc/roundend_report_file() diff --git a/code/__HELPERS/sorts/__main.dm b/code/__HELPERS/sorts/__main.dm index 768622818f..493f7b2096 100644 --- a/code/__HELPERS/sorts/__main.dm +++ b/code/__HELPERS/sorts/__main.dm @@ -31,58 +31,58 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) var/list/runLens = list() - proc/timSort(start, end) - runBases.Cut() - runLens.Cut() +/datum/sortInstance/proc/timSort(start, end) + runBases.Cut() + runLens.Cut() - var/remaining = end - start + var/remaining = end - start - //If array is small, do a 'mini-TimSort' with no merges - if(remaining < MIN_MERGE) - var/initRunLen = countRunAndMakeAscending(start, end) - binarySort(start, end, start+initRunLen) - return + //If array is small, do a 'mini-TimSort' with no merges + if(remaining < MIN_MERGE) + var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start+initRunLen) + return - //March over the array finding natural runs - //Extend any short natural runs to runs of length minRun - var/minRun = minRunLength(remaining) + //March over the array finding natural runs + //Extend any short natural runs to runs of length minRun + var/minRun = minRunLength(remaining) - do - //identify next run - var/runLen = countRunAndMakeAscending(start, end) + do + //identify next run + var/runLen = countRunAndMakeAscending(start, end) - //if run is short, extend to min(minRun, remaining) - if(runLen < minRun) - var/force = (remaining <= minRun) ? remaining : minRun + //if run is short, extend to min(minRun, remaining) + if(runLen < minRun) + var/force = (remaining <= minRun) ? remaining : minRun - binarySort(start, start+force, start+runLen) - runLen = force + binarySort(start, start+force, start+runLen) + runLen = force - //add data about run to queue - runBases.Add(start) - runLens.Add(runLen) + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) - //maybe merge - mergeCollapse() + //maybe merge + mergeCollapse() - //Advance to find next run - start += runLen - remaining -= runLen + //Advance to find next run + start += runLen + remaining -= runLen - while(remaining > 0) + while(remaining > 0) - //Merge all remaining runs to complete sort - //ASSERT(start == end) - mergeForceCollapse(); - //ASSERT(runBases.len == 1) + //Merge all remaining runs to complete sort + //ASSERT(start == end) + mergeForceCollapse(); + //ASSERT(runBases.len == 1) - //reset minGallop, for successive calls - minGallop = MIN_GALLOP + //reset minGallop, for successive calls + minGallop = MIN_GALLOP - return L + return L - /* +/* Sorts the specified portion of the specified array using a binary insertion sort. This is the best method for sorting small numbers of elements. It requires O(n log n) compares, but O(n^2) data @@ -95,33 +95,33 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) lo the index of the first element in the range to be sorted hi the index after the last element in the range to be sorted start the index of the first element in the range that is not already known to be sorted - */ - proc/binarySort(lo, hi, start) - //ASSERT(lo <= start && start <= hi) - if(start <= lo) - start = lo + 1 +*/ +/datum/sortInstance/proc/binarySort(lo, hi, start) + //ASSERT(lo <= start && start <= hi) + if(start <= lo) + start = lo + 1 - for(,start < hi, ++start) - var/pivot = fetchElement(L,start) + for(,start < hi, ++start) + var/pivot = fetchElement(L,start) - //set left and right to the index where pivot belongs - var/left = lo - var/right = start - //ASSERT(left <= right) + //set left and right to the index where pivot belongs + var/left = lo + var/right = start + //ASSERT(left <= right) - //[lo, left) elements <= pivot < [right, start) elements - //in other words, find where the pivot element should go using bisection search - while(left < right) - var/mid = (left + right) >> 1 //round((left+right)/2) - if(call(cmp)(fetchElement(L,mid), pivot) > 0) - right = mid - else - left = mid+1 + //[lo, left) elements <= pivot < [right, start) elements + //in other words, find where the pivot element should go using bisection search + while(left < right) + var/mid = (left + right) >> 1 //round((left+right)/2) + if(call(cmp)(fetchElement(L,mid), pivot) > 0) + right = mid + else + left = mid+1 - //ASSERT(left == right) - moveElement(L, start, left) //move pivot element to correct location in the sorted range + //ASSERT(left == right) + moveElement(L, start, left) //move pivot element to correct location in the sorted range - /* +/* Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front A run is the longest ascending sequence with: @@ -132,514 +132,514 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) For its intended use in a stable mergesort, the strictness of the definition of "descending" is needed so that the call can safely reverse a descending sequence without violating stability. - */ - proc/countRunAndMakeAscending(lo, hi) - //ASSERT(lo < hi) +*/ +/datum/sortInstance/proc/countRunAndMakeAscending(lo, hi) + //ASSERT(lo < hi) - var/runHi = lo + 1 - if(runHi >= hi) - return 1 + var/runHi = lo + 1 + if(runHi >= hi) + return 1 - var/last = fetchElement(L,lo) - var/current = fetchElement(L,runHi++) + var/last = fetchElement(L,lo) + var/current = fetchElement(L,runHi++) - if(call(cmp)(current, last) < 0) - while(runHi < hi) - last = current - current = fetchElement(L,runHi) - if(call(cmp)(current, last) >= 0) - break - ++runHi - reverseRange(L, lo, runHi) - else - while(runHi < hi) - last = current - current = fetchElement(L,runHi) - if(call(cmp)(current, last) < 0) - break - ++runHi + if(call(cmp)(current, last) < 0) + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) >= 0) + break + ++runHi + reverseRange(L, lo, runHi) + else + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) < 0) + break + ++runHi - return runHi - lo + return runHi - lo - //Returns the minimum acceptable run length for an array of the specified length. - //Natural runs shorter than this will be extended with binarySort - proc/minRunLength(n) - //ASSERT(n >= 0) - var/r = 0 //becomes 1 if any bits are shifted off - while(n >= MIN_MERGE) - r |= (n & 1) - n >>= 1 - return n + r +//Returns the minimum acceptable run length for an array of the specified length. +//Natural runs shorter than this will be extended with binarySort +/datum/sortInstance/proc/minRunLength(n) + //ASSERT(n >= 0) + var/r = 0 //becomes 1 if any bits are shifted off + while(n >= MIN_MERGE) + r |= (n & 1) + n >>= 1 + return n + r - //Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: - // runLen[i-3] > runLen[i-2] + runLen[i-1] - // runLen[i-2] > runLen[i-1] - //This method is called each time a new run is pushed onto the stack. - //So the invariants are guaranteed to hold for i= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) - if(runLens[n-1] < runLens[n+1]) - --n - mergeAt(n) - else if(runLens[n] <= runLens[n+1]) - mergeAt(n) - else - break //Invariant is established - - - //Merges all runs on the stack until only one remains. - //Called only once, to finalise the sort - proc/mergeForceCollapse() - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] < runLens[n+1]) +//Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: +// runLen[i-3] > runLen[i-2] + runLen[i-1] +// runLen[i-2] > runLen[i-1] +//This method is called each time a new run is pushed onto the stack. +//So the invariants are guaranteed to hold for i= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) --n mergeAt(n) - - - //Merges the two consecutive runs at stack indices i and i+1 - //Run i must be the penultimate or antepenultimate run on the stack - //In other words, i must be equal to stackSize-2 or stackSize-3 - proc/mergeAt(i) - //ASSERT(runBases.len >= 2) - //ASSERT(i >= 1) - //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) - - var/base1 = runBases[i] - var/base2 = runBases[i+1] - var/len1 = runLens[i] - var/len2 = runLens[i+1] - - //ASSERT(len1 > 0 && len2 > 0) - //ASSERT(base1 + len1 == base2) - - //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run - //(which isn't involved in this merge). The current run (i+1) goes away in any case. - runLens[i] += runLens[i+1] - runLens.Cut(i+1, i+2) - runBases.Cut(i+1, i+2) - - - //Find where the first element of run2 goes in run1. - //Prior elements in run1 can be ignored (because they're already in place) - var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) - //ASSERT(k >= 0) - base1 += k - len1 -= k - if(len1 == 0) - return - - //Find where the last element of run1 goes in run2. - //Subsequent elements in run2 can be ignored (because they're already in place) - len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) - //ASSERT(len2 >= 0) - if(len2 == 0) - return - - //Merge remaining runs, using tmp array with min(len1, len2) elements - if(len1 <= len2) - mergeLo(base1, len1, base2, len2) + else if(runLens[n] <= runLens[n+1]) + mergeAt(n) else - mergeHi(base1, len1, base2, len2) + break //Invariant is established - /* - Locates the position to insert key within the specified sorted range - If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements +//Merges all runs on the stack until only one remains. +//Called only once, to finalise the sort +/datum/sortInstance/proc/mergeForceCollapse() + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) - key the element to be inserted into the sorted range - base the index of the first element of the sorted range - len the length of the sorted range, must be greater than 0 - hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint - Returns the index at which to insert element 'key' - */ - proc/gallopLeft(key, base, len, hint) - //ASSERT(len > 0 && hint >= 0 && hint < len) +//Merges the two consecutive runs at stack indices i and i+1 +//Run i must be the penultimate or antepenultimate run on the stack +//In other words, i must be equal to stackSize-2 or stackSize-3 +/datum/sortInstance/proc/mergeAt(i) + //ASSERT(runBases.len >= 2) + //ASSERT(i >= 1) + //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) - var/lastOffset = 0 - var/offset = 1 - if(call(cmp)(key, fetchElement(L,base+hint)) > 0) - var/maxOffset = len - hint - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) - lastOffset = offset - offset = (offset << 1) + 1 + var/base1 = runBases[i] + var/base2 = runBases[i+1] + var/len1 = runLens[i] + var/len2 = runLens[i+1] - if(offset > maxOffset) - offset = maxOffset + //ASSERT(len1 > 0 && len2 > 0) + //ASSERT(base1 + len1 == base2) - lastOffset += hint - offset += hint + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) - else - var/maxOffset = hint + 1 - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) - lastOffset = offset - offset = (offset << 1) + 1 - if(offset > maxOffset) - offset = maxOffset + //Find where the first element of run2 goes in run1. + //Prior elements in run1 can be ignored (because they're already in place) + var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) + //ASSERT(k >= 0) + base1 += k + len1 -= k + if(len1 == 0) + return - var/temp = lastOffset - lastOffset = hint - offset - offset = hint - temp + //Find where the last element of run1 goes in run2. + //Subsequent elements in run2 can be ignored (because they're already in place) + len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) + //ASSERT(len2 >= 0) + if(len2 == 0) + return - //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + //Merge remaining runs, using tmp array with min(len1, len2) elements + if(len1 <= len2) + mergeLo(base1, len1, base2, len2) + else + mergeHi(base1, len1, base2, len2) - //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than - //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] - ++lastOffset - while(lastOffset < offset) - var/m = lastOffset + ((offset - lastOffset) >> 1) - if(call(cmp)(key, fetchElement(L,base+m)) > 0) - lastOffset = m + 1 - else - offset = m +/* + Locates the position to insert key within the specified sorted range + If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements - //ASSERT(lastOffset == offset) - return offset + key the element to be inserted into the sorted range + base the index of the first element of the sorted range + len the length of the sorted range, must be greater than 0 + hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint - /** - * Like gallopLeft, except that if the range contains an element equal to - * key, gallopRight returns the index after the rightmost equal element. - * - * @param key the key whose insertion point to search for - * @param a the array in which to search - * @param base the index of the first element in the range - * @param len the length of the range; must be > 0 - * @param hint the index at which to begin the search, 0 <= hint < n. - * The closer hint is to the result, the faster this method will run. - * @param c the comparator used to order the range, and to search - * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] - */ - proc/gallopRight(key, base, len, hint) - //ASSERT(len > 0 && hint >= 0 && hint < len) + Returns the index at which to insert element 'key' +*/ +/datum/sortInstance/proc/gallopLeft(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) - var/offset = 1 - var/lastOffset = 0 - if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] - var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards - lastOffset = offset - offset = (offset << 1) + 1 //1 3 7 15 + var/lastOffset = 0 + var/offset = 1 + if(call(cmp)(key, fetchElement(L,base+hint)) > 0) + var/maxOffset = len - hint + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) + lastOffset = offset + offset = (offset << 1) + 1 - if(offset > maxOffset) - offset = maxOffset + if(offset > maxOffset) + offset = maxOffset - var/temp = lastOffset - lastOffset = hint - offset - offset = hint - temp + lastOffset += hint + offset += hint - else //key > L[base+hint] - var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) - lastOffset = offset - offset = (offset << 1) + 1 + else + var/maxOffset = hint + 1 + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) + lastOffset = offset + offset = (offset << 1) + 1 - if(offset > maxOffset) - offset = maxOffset + if(offset > maxOffset) + offset = maxOffset - lastOffset += hint - offset += hint + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) - ++lastOffset - while(lastOffset < offset) - var/m = lastOffset + ((offset - lastOffset) >> 1) + //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than + //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) - if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] - offset = m - else //key > L[base+m] - lastOffset = m + 1 + if(call(cmp)(key, fetchElement(L,base+m)) > 0) + lastOffset = m + 1 + else + offset = m - //ASSERT(lastOffset == offset) + //ASSERT(lastOffset == offset) + return offset - return offset +/** + * Like gallopLeft, except that if the range contains an element equal to + * key, gallopRight returns the index after the rightmost equal element. + * + * @param key the key whose insertion point to search for + * @param a the array in which to search + * @param base the index of the first element in the range + * @param len the length of the range; must be > 0 + * @param hint the index at which to begin the search, 0 <= hint < n. + * The closer hint is to the result, the faster this method will run. + * @param c the comparator used to order the range, and to search + * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] + */ +/datum/sortInstance/proc/gallopRight(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/offset = 1 + var/lastOffset = 0 + if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] + var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards + lastOffset = offset + offset = (offset << 1) + 1 //1 3 7 15 + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + else //key > L[base+hint] + var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] + offset = m + else //key > L[base+m] + lastOffset = m + 1 + + //ASSERT(lastOffset == offset) + + return offset - //Merges two adjacent runs in-place in a stable fashion. - //For performance this method should only be called when len1 <= len2! - proc/mergeLo(base1, len1, base2, len2) - //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) +//Merges two adjacent runs in-place in a stable fashion. +//For performance this method should only be called when len1 <= len2! +/datum/sortInstance/proc/mergeLo(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) - var/cursor1 = base1 - var/cursor2 = base2 + var/cursor1 = base1 + var/cursor2 = base2 - //degenerate cases - if(len2 == 1) - moveElement(L, cursor2, cursor1) - return + //degenerate cases + if(len2 == 1) + moveElement(L, cursor2, cursor1) + return - if(len1 == 1) - moveElement(L, cursor1, cursor2+len2) - return + if(len1 == 1) + moveElement(L, cursor1, cursor2+len2) + return - //Move first element of second run - moveElement(L, cursor2++, cursor1++) - --len2 + //Move first element of second run + moveElement(L, cursor2++, cursor1++) + --len2 - outer: - while(1) - var/count1 = 0 //# of times in a row that first run won - var/count2 = 0 // " " " " " " second run won + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won - //do the straightfoward thin until one run starts winning consistently + //do the straightfoward thin until one run starts winning consistently - do - //ASSERT(len1 > 1 && len2 > 0) - if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) - moveElement(L, cursor2++, cursor1++) - --len2 + do + //ASSERT(len1 > 1 && len2 > 0) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor2++, cursor1++) + --len2 - ++count2 - count1 = 0 + ++count2 + count1 = 0 - if(len2 == 0) - break outer - else - ++cursor1 - - ++count1 - count2 = 0 - - if(--len1 == 1) - break outer - - while((count1 | count2) < minGallop) - - - //one run is winning consistently so galloping may provide huge benifits - //so try galloping, until such time as the run is no longer consistently winning - do - //ASSERT(len1 > 1 && len2 > 0) - - count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) - if(count1) - cursor1 += count1 - len1 -= count1 - - if(len1 <= 1) - break outer - - moveElement(L, cursor2, cursor1) - ++cursor2 - ++cursor1 - if(--len2 == 0) + if(len2 == 0) break outer - - count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) - if(count2) - moveRange(L, cursor2, cursor1, count2) - - cursor2 += count2 - cursor1 += count2 - len2 -= count2 - - if(len2 == 0) - break outer - + else ++cursor1 + + ++count1 + count2 = 0 + if(--len1 == 1) break outer - --minGallop - - while((count1|count2) > MIN_GALLOP) - - if(minGallop < 0) - minGallop = 0 - minGallop += 2; // Penalize for leaving gallop mode + while((count1 | count2) < minGallop) - if(len1 == 1) - //ASSERT(len2 > 0) - moveElement(L, cursor1, cursor2+len2) + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 1 && len2 > 0) - //else - //ASSERT(len2 == 0) - //ASSERT(len1 > 1) + count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) + if(count1) + cursor1 += count1 + len1 -= count1 - - proc/mergeHi(base1, len1, base2, len2) - //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) - - var/cursor1 = base1 + len1 - 1 //start at end of sublists - var/cursor2 = base2 + len2 - 1 - - //degenerate cases - if(len2 == 1) - moveElement(L, base2, base1) - return - - if(len1 == 1) - moveElement(L, base1, cursor2+1) - return - - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - outer: - while(1) - var/count1 = 0 //# of times in a row that first run won - var/count2 = 0 // " " " " " " second run won - - //do the straightfoward thing until one run starts winning consistently - do - //ASSERT(len1 > 0 && len2 > 1) - if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - ++count1 - count2 = 0 - - if(len1 == 0) - break outer - else - --cursor2 - --len2 - - ++count2 - count1 = 0 - - if(len2 == 1) - break outer - while((count1 | count2) < minGallop) - - //one run is winning consistently so galloping may provide huge benifits - //so try galloping, until such time as the run is no longer consistently winning - do - //ASSERT(len1 > 0 && len2 > 1) - - count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? - if(count1) - cursor1 -= count1 - - moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition - - cursor2 -= count1 - len1 -= count1 - - if(len1 == 0) - break outer - - --cursor2 - - if(--len2 == 1) + if(len1 <= 1) break outer - count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) - if(count2) - cursor2 -= count2 - len2 -= count2 + moveElement(L, cursor2, cursor1) + ++cursor2 + ++cursor1 + if(--len2 == 0) + break outer - if(len2 <= 1) - break outer + count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) + if(count2) + moveRange(L, cursor2, cursor1, count2) + cursor2 += count2 + cursor1 += count2 + len2 -= count2 + + if(len2 == 0) + break outer + + ++cursor1 + if(--len1 == 1) + break outer + + --minGallop + + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2; // Penalize for leaving gallop mode + + + if(len1 == 1) + //ASSERT(len2 > 0) + moveElement(L, cursor1, cursor2+len2) + + //else + //ASSERT(len2 == 0) + //ASSERT(len1 > 1) + + +/datum/sortInstance/proc/mergeHi(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + len1 - 1 //start at end of sublists + var/cursor2 = base2 + len2 - 1 + + //degenerate cases + if(len2 == 1) + moveElement(L, base2, base1) + return + + if(len1 == 1) + moveElement(L, base1, cursor2+1) + return + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thing until one run starts winning consistently + do + //ASSERT(len1 > 0 && len2 > 1) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) moveElement(L, cursor1--, cursor2-- + 1) --len1 + ++count1 + count2 = 0 + + if(len1 == 0) + break outer + else + --cursor2 + --len2 + + ++count2 + count1 = 0 + + if(len2 == 1) + break outer + while((count1 | count2) < minGallop) + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 0 && len2 > 1) + + count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? + if(count1) + cursor1 -= count1 + + moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition + + cursor2 -= count1 + len1 -= count1 + if(len1 == 0) break outer - --minGallop - while((count1|count2) > MIN_GALLOP) + --cursor2 - if(minGallop < 0) - minGallop = 0 - minGallop += 2 // Penalize for leaving gallop mode + if(--len2 == 1) + break outer - if(len2 == 1) - //ASSERT(len1 > 0) + count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) + if(count2) + cursor2 -= count2 + len2 -= count2 - cursor1 -= len1 - moveRange(L, cursor1+1, cursor2+1, len1) + if(len2 <= 1) + break outer - //else - //ASSERT(len1 == 0) - //ASSERT(len2 > 0) + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + if(len1 == 0) + break outer + + --minGallop + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2 // Penalize for leaving gallop mode + + if(len2 == 1) + //ASSERT(len1 > 0) + + cursor1 -= len1 + moveRange(L, cursor1+1, cursor2+1, len1) + + //else + //ASSERT(len1 == 0) + //ASSERT(len2 > 0) - proc/mergeSort(start, end) - var/remaining = end - start +/datum/sortInstance/proc/mergeSort(start, end) + var/remaining = end - start - //If array is small, do an insertion sort - if(remaining < MIN_MERGE) - binarySort(start, end, start/*+initRunLen*/) - return + //If array is small, do an insertion sort + if(remaining < MIN_MERGE) + binarySort(start, end, start/*+initRunLen*/) + return - var/minRun = minRunLength(remaining) + var/minRun = minRunLength(remaining) - do - var/runLen = (remaining <= minRun) ? remaining : minRun + do + var/runLen = (remaining <= minRun) ? remaining : minRun - binarySort(start, start+runLen, start) + binarySort(start, start+runLen, start) - //add data about run to queue - runBases.Add(start) - runLens.Add(runLen) + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) - //Advance to find next run - start += runLen - remaining -= runLen + //Advance to find next run + start += runLen + remaining -= runLen - while(remaining > 0) + while(remaining > 0) - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) - if(runLens[n-1] < runLens[n+1]) - --n - mergeAt2(n) - else if(runLens[n] <= runLens[n+1]) - mergeAt2(n) - else - break //Invariant is established - - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] < runLens[n+1]) + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) --n mergeAt2(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt2(n) + else + break //Invariant is established - return L + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) - proc/mergeAt2(i) - var/cursor1 = runBases[i] - var/cursor2 = runBases[i+1] + return L - var/end1 = cursor1+runLens[i] - var/end2 = cursor2+runLens[i+1] +/datum/sortInstance/proc/mergeAt2(i) + var/cursor1 = runBases[i] + var/cursor2 = runBases[i+1] - var/val1 = fetchElement(L,cursor1) - var/val2 = fetchElement(L,cursor2) + var/end1 = cursor1+runLens[i] + var/end2 = cursor2+runLens[i+1] - while(1) - if(call(cmp)(val1,val2) <= 0) - if(++cursor1 >= end1) - break - val1 = fetchElement(L,cursor1) - else - moveElement(L,cursor2,cursor1) + var/val1 = fetchElement(L,cursor1) + var/val2 = fetchElement(L,cursor2) - if(++cursor2 >= end2) - break - ++end1 - ++cursor1 + while(1) + if(call(cmp)(val1,val2) <= 0) + if(++cursor1 >= end1) + break + val1 = fetchElement(L,cursor1) + else + moveElement(L,cursor2,cursor1) - val2 = fetchElement(L,cursor2) + if(++cursor2 >= end2) + break + ++end1 + ++cursor1 + + val2 = fetchElement(L,cursor2) - //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run - //(which isn't involved in this merge). The current run (i+1) goes away in any case. - runLens[i] += runLens[i+1] - runLens.Cut(i+1, i+2) - runBases.Cut(i+1, i+2) + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) #undef MIN_GALLOP #undef MIN_MERGE diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 29f5331fd3..74c32dd52f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -758,16 +758,6 @@ GLOBAL_LIST_INIT(can_embed_types, typecacheof(list( /obj/item/stack/rods, /obj/item/pipe))) -/proc/can_embed(obj/item/W) - if(W.get_sharpness()) - return 1 - if(is_pointed(W)) - return 1 - - if(is_type_in_typecache(W, GLOB.can_embed_types)) - return 1 - - /* Checks if that loc and dir has an item on the wall */ diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index e0cf8ebdd5..bf179760c0 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -143,6 +143,7 @@ GLOBAL_LIST_INIT(bitfields, list( "VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE, "VOICEBOX_DISABLED" = VOICEBOX_DISABLED, "IGNORE_HAT_TOSS" = IGNORE_HAT_TOSS, + "SCAN_REAGENTS" = SCAN_REAGENTS ), "tesla_flags" = list( "TESLA_MOB_DAMAGE" = TESLA_MOB_DAMAGE, diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index e2705ad49f..2391d39b3a 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -37,6 +37,7 @@ GLOBAL_LIST_EMPTY(deco_wings_list) GLOBAL_LIST_EMPTY(r_wings_list) GLOBAL_LIST_EMPTY(insect_wings_list) GLOBAL_LIST_EMPTY(insect_fluffs_list) +GLOBAL_LIST_EMPTY(insect_markings_list) GLOBAL_LIST_EMPTY(caps_list) GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index c25ebf5b0a..914e45add5 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -115,5 +115,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/clothing/shoes/kindleKicks = 1, /obj/item/autosurgeon/penis = 1, /obj/item/autosurgeon/testicles = 1, + /obj/item/storage/box/marshmallow = 2, "" = 3 )) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 6b8d91acf9..7340581d25 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -48,3 +48,5 @@ GLOBAL_LIST_EMPTY(sortedAreas) GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area) GLOBAL_LIST_EMPTY(all_abstract_markers) + +GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 8e5da083e3..5ca3513e66 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -28,6 +28,8 @@ GLOBAL_VAR(world_job_debug_log) GLOBAL_PROTECT(world_job_debug_log) GLOBAL_VAR(world_virus_log) GLOBAL_PROTECT(world_virus_log) +GLOBAL_VAR(world_map_error_log) +GLOBAL_PROTECT(world_map_error_log) GLOBAL_LIST_EMPTY(bombers) GLOBAL_PROTECT(bombers) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 49bdd3f3c0..93c3b63d1e 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -195,89 +195,107 @@ // Language menu using = new /obj/screen/language_menu using.screen_loc = ui_borg_language_menu + using.hud = src static_inventory += using //AI core using = new /obj/screen/ai/aicore() using.screen_loc = ui_ai_core + using.hud = src static_inventory += using //Camera list using = new /obj/screen/ai/camera_list() using.screen_loc = ui_ai_camera_list + using.hud = src static_inventory += using //Track using = new /obj/screen/ai/camera_track() using.screen_loc = ui_ai_track_with_camera + using.hud = src static_inventory += using //Camera light using = new /obj/screen/ai/camera_light() using.screen_loc = ui_ai_camera_light + using.hud = src static_inventory += using //Crew Monitoring using = new /obj/screen/ai/crew_monitor() using.screen_loc = ui_ai_crew_monitor + using.hud = src static_inventory += using //Crew Manifest using = new /obj/screen/ai/crew_manifest() using.screen_loc = ui_ai_crew_manifest + using.hud = src static_inventory += using //Alerts using = new /obj/screen/ai/alerts() using.screen_loc = ui_ai_alerts + using.hud = src static_inventory += using //Announcement using = new /obj/screen/ai/announcement() using.screen_loc = ui_ai_announcement + using.hud = src static_inventory += using //Shuttle using = new /obj/screen/ai/call_shuttle() using.screen_loc = ui_ai_shuttle + using.hud = src static_inventory += using //Laws using = new /obj/screen/ai/state_laws() using.screen_loc = ui_ai_state_laws + using.hud = src static_inventory += using //PDA message using = new /obj/screen/ai/pda_msg_send() using.screen_loc = ui_ai_pda_send + using.hud = src static_inventory += using //PDA log using = new /obj/screen/ai/pda_msg_show() using.screen_loc = ui_ai_pda_log + using.hud = src static_inventory += using //Take image using = new /obj/screen/ai/image_take() using.screen_loc = ui_ai_take_picture + using.hud = src static_inventory += using //View images using = new /obj/screen/ai/image_view() using.screen_loc = ui_ai_view_images + using.hud = src static_inventory += using //Medical/Security sensors using = new /obj/screen/ai/sensors() using.screen_loc = ui_ai_sensor + using.hud = src static_inventory += using //Multicamera mode using = new /obj/screen/ai/multicam() using.screen_loc = ui_ai_multicam + using.hud = src static_inventory += using //Add multicamera camera using = new /obj/screen/ai/add_multicam() using.screen_loc = ui_ai_add_multicam + using.hud = src static_inventory += using diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 391e86f390..c42956bbaa 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -213,6 +213,16 @@ or something covering your eyes." desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already." icon_state = "high" +/obj/screen/alert/mind_control + name = "Mind Control" + desc = "Your mind has been hijacked! Click to view the mind control command." + icon_state = "mind_control" + var/command + +/obj/screen/alert/mind_control/Click() + var/mob/living/L = usr + to_chat(L, "[command]") + /obj/screen/alert/hypnosis name = "Hypnosis" desc = "Something's hypnotizing you, but you're not really sure about what." diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 1f6ba28391..94585cbd52 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -43,18 +43,20 @@ using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand_position(owner,1) + using.hud = src static_inventory += using using = new /obj/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) + using.hud = src static_inventory += using - using = new /obj/screen/act_intent/alien() - using.icon_state = mymob.a_intent - static_inventory += using - action_intent = using + action_intent = new /obj/screen/act_intent/alien() + action_intent.icon_state = mymob.a_intent + action_intent.hud = src + static_inventory += action_intent if(isalienhunter(mymob)) var/mob/living/carbon/alien/humanoid/hunter/H = mymob @@ -64,43 +66,52 @@ using = new/obj/screen/language_menu using.screen_loc = ui_alien_language_menu + using.hud = src static_inventory += using using = new /obj/screen/drop() using.icon = ui_style using.screen_loc = ui_drop_throw + using.hud = src static_inventory += using using = new /obj/screen/resist() using.icon = ui_style using.screen_loc = ui_pull_resist + using.hud = src hotkeybuttons += using throw_icon = new /obj/screen/throw_catch() throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw + throw_icon.hud = src hotkeybuttons += throw_icon pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_pull_resist static_inventory += pull_icon //begin indicators healths = new /obj/screen/healths/alien() + healths.hud = src infodisplay += healths alien_plasma_display = new /obj/screen/alien/plasma_display() + alien_plasma_display.hud = src infodisplay += alien_plasma_display if(!isalienqueen(mymob)) alien_queen_finder = new /obj/screen/alien/alien_queen_finder + alien_queen_finder.hud = src infodisplay += alien_queen_finder zone_select = new /obj/screen/zone_sel/alien() - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() static_inventory += zone_select for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 3ffdd66fcd..0f3c6ccf17 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -5,26 +5,32 @@ ..() var/obj/screen/using - using = new /obj/screen/act_intent/alien() - using.icon_state = mymob.a_intent - static_inventory += using - action_intent = using + action_intent = new /obj/screen/act_intent/alien() + action_intent.icon_state = mymob.a_intent + action_intent.hud = src + static_inventory += action_intent healths = new /obj/screen/healths/alien() + healths.hud = src infodisplay += healths alien_queen_finder = new /obj/screen/alien/alien_queen_finder() + alien_queen_finder.hud = src infodisplay += alien_queen_finder + pull_icon = new /obj/screen/pull() pull_icon.icon = 'icons/mob/screen_alien.dmi' - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_pull_resist hotkeybuttons += pull_icon using = new/obj/screen/language_menu using.screen_loc = ui_alien_language_menu + using.hud = src static_inventory += using zone_select = new /obj/screen/zone_sel/alien() - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() static_inventory += zone_select diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index ab8bc459ae..8257b744d6 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -133,17 +133,21 @@ blobpwrdisplay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT blobpwrdisplay.layer = ABOVE_HUD_LAYER blobpwrdisplay.plane = ABOVE_HUD_PLANE + blobpwrdisplay.hud = src infodisplay += blobpwrdisplay healths = new /obj/screen/healths/blob() + healths.hud = src infodisplay += healths using = new /obj/screen/blob/BlobHelp() using.screen_loc = "WEST:6,NORTH:-3" + using.hud = src static_inventory += using using = new /obj/screen/blob/JumpToNode() using.screen_loc = ui_inventory + using.hud = src static_inventory += using using = new /obj/screen/blob/JumpToCore() @@ -153,18 +157,22 @@ using = new /obj/screen/blob/Blobbernaut() using.screen_loc = ui_belt + using.hud = src static_inventory += using using = new /obj/screen/blob/ResourceBlob() using.screen_loc = ui_back + using.hud = src static_inventory += using using = new /obj/screen/blob/NodeBlob() using.screen_loc = ui_hand_position(2) + using.hud = src static_inventory += using using = new /obj/screen/blob/FactoryBlob() using.screen_loc = ui_hand_position(1) + using.hud = src static_inventory += using using = new /obj/screen/blob/ReadaptChemical() @@ -174,4 +182,5 @@ using = new /obj/screen/blob/RelocateCore() using.screen_loc = ui_storage2 + using.hud = src static_inventory += using diff --git a/code/_onclick/hud/blobbernauthud.dm b/code/_onclick/hud/blobbernauthud.dm index 17d3b11a72..ed45d5b1f6 100644 --- a/code/_onclick/hud/blobbernauthud.dm +++ b/code/_onclick/hud/blobbernauthud.dm @@ -3,7 +3,9 @@ ..() blobpwrdisplay = new /obj/screen/healths/blob/naut/core() + blobpwrdisplay.hud = src infodisplay += blobpwrdisplay healths = new /obj/screen/healths/blob/naut() + healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm index 182495c236..06e657d136 100644 --- a/code/_onclick/hud/constructs.dm +++ b/code/_onclick/hud/constructs.dm @@ -5,9 +5,11 @@ ..() pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_construct_pull static_inventory += pull_icon healths = new /obj/screen/healths/construct() + healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index 40fdc37da3..fd2146424c 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -9,11 +9,13 @@ using = new /obj/screen/drop() using.icon = ui_style using.screen_loc = ui_drone_drop + using.hud = src static_inventory += using pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_drone_pull static_inventory += pull_icon @@ -26,6 +28,7 @@ using.screen_loc = ui_swaphand_position(owner,1) using.layer = HUD_LAYER using.plane = HUD_PLANE + using.hud = src static_inventory += using using = new /obj/screen/inventory() @@ -35,14 +38,19 @@ using.screen_loc = ui_swaphand_position(owner,2) using.layer = HUD_LAYER using.plane = HUD_PLANE + using.hud = src static_inventory += using zone_select = new /obj/screen/zone_sel() zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() lingchemdisplay = new /obj/screen/ling/chems() + lingchemdisplay.hud = src + devilsouldisplay = new /obj/screen/devil/soul_counter + devilsouldisplay.hud = src infodisplay += devilsouldisplay diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index 131b510f9b..dba9a59748 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -6,11 +6,13 @@ using = new /obj/screen/drop() using.icon = ui_style using.screen_loc = ui_drone_drop + using.hud = src static_inventory += using pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_drone_pull static_inventory += pull_icon @@ -20,12 +22,14 @@ using.icon = ui_style using.icon_state = "swap_1_m" using.screen_loc = ui_swaphand_position(owner,1) + using.hud = src static_inventory += using using = new /obj/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) + using.hud = src static_inventory += using if(mymob.possible_a_intents) @@ -36,20 +40,24 @@ action_intent = new /obj/screen/act_intent action_intent.icon = ui_style action_intent.icon_state = mymob.a_intent + action_intent.hud = src static_inventory += action_intent zone_select = new /obj/screen/zone_sel() zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() static_inventory += zone_select using = new /obj/screen/craft using.icon = ui_style + using.hud = src static_inventory += using using = new /obj/screen/area_creator using.icon = ui_style + using.hud = src static_inventory += using mymob.client.screen = list() diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 2b70392b39..549b6346ce 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -50,26 +50,32 @@ using = new /obj/screen/ghost/jumptomob() using.screen_loc = ui_ghost_jumptomob + using.hud = src static_inventory += using using = new /obj/screen/ghost/orbit() using.screen_loc = ui_ghost_orbit + using.hud = src static_inventory += using using = new /obj/screen/ghost/reenter_corpse() using.screen_loc = ui_ghost_reenter_corpse + using.hud = src static_inventory += using using = new /obj/screen/ghost/teleport() using.screen_loc = ui_ghost_teleport + using.hud = src static_inventory += using using = new /obj/screen/ghost/pai() using.screen_loc = ui_ghost_pai + using.hud = src static_inventory += using using = new /obj/screen/language_menu using.icon = ui_style + using.hud = src static_inventory += using /datum/hud/ghost/show_hud(version = 0, mob/viewmob) diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index a66558950a..35b40ee5db 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -4,26 +4,32 @@ var/obj/screen/using healths = new /obj/screen/healths/guardian() + healths.hud = src infodisplay += healths using = new /obj/screen/guardian/Manifest() using.screen_loc = ui_hand_position(2) + using.hud = src static_inventory += using using = new /obj/screen/guardian/Recall() using.screen_loc = ui_hand_position(1) + using.hud = src static_inventory += using using = new owner.toggle_button_type() using.screen_loc = ui_storage1 + using.hud = src static_inventory += using using = new /obj/screen/guardian/ToggleLight() using.screen_loc = ui_inventory + using.hud = src static_inventory += using using = new /obj/screen/guardian/Communicate() using.screen_loc = ui_back + using.hud = src static_inventory += using /datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 1d1836716b..09794444d1 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -61,6 +61,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list( // subtypes can override this to force a specific UI style var/ui_style + //Citadel stuff + var/obj/screen/arousal + /datum/hud/New(mob/owner) mymob = owner diff --git a/code/_onclick/hud/hud_cit.dm b/code/_onclick/hud/hud_cit.dm deleted file mode 100644 index 18ecf2e929..0000000000 --- a/code/_onclick/hud/hud_cit.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/hud - var/obj/screen/arousal \ No newline at end of file diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 3b5f851333..78a2d2fd17 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -95,18 +95,21 @@ using.icon = ui_style if(!widescreenlayout) // CIT CHANGE using.screen_loc = ui_boxcraft // CIT CHANGE + using.hud = src static_inventory += using using = new/obj/screen/language_menu using.icon = ui_style if(!widescreenlayout) // CIT CHANGE using.screen_loc = ui_boxlang // CIT CHANGE + using.hud = src static_inventory += using using = new /obj/screen/area_creator using.icon = ui_style if(!widescreenlayout) // CIT CHANGE using.screen_loc = ui_boxarea // CIT CHANGE + using.hud = src static_inventory += using using = new /obj/screen/voretoggle() //We fancy Vore now @@ -114,16 +117,19 @@ using.screen_loc = ui_voremode if(!widescreenlayout) using.screen_loc = ui_boxvore + using.hud = src static_inventory += using action_intent = new /obj/screen/act_intent/segmented action_intent.icon_state = mymob.a_intent + action_intent.hud = src static_inventory += action_intent using = new /obj/screen/mov_intent using.icon = tg_ui_icon_to_cit_ui(ui_style) // CIT CHANGE - overrides mov intent icon using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi + using.hud = src static_inventory += using //CITADEL CHANGES - sprint button @@ -131,19 +137,21 @@ using.icon = tg_ui_icon_to_cit_ui(ui_style) using.icon_state = (owner.sprinting ? "act_sprint_on" : "act_sprint") using.screen_loc = ui_movi + using.hud = src static_inventory += using //END OF CITADEL CHANGES //same as above but buffer. - using = new /obj/screen/sprint_buffer - using.screen_loc = ui_sprintbufferloc - sprint_buffer = using - static_inventory += using + sprint_buffer = new /obj/screen/sprint_buffer + sprint_buffer.screen_loc = ui_sprintbufferloc + sprint_buffer.hud = src + static_inventory += sprint_buffer using = new /obj/screen/drop() using.icon = ui_style using.screen_loc = ui_drop_throw + using.hud = src static_inventory += using inv_box = new /obj/screen/inventory() @@ -168,12 +176,14 @@ using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand_position(owner,1) + using.hud = src static_inventory += using using = new /obj/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) + using.hud = src static_inventory += using inv_box = new /obj/screen/inventory() @@ -235,28 +245,33 @@ using = new /obj/screen/resist() using.icon = ui_style using.screen_loc = ui_overridden_resist // CIT CHANGE - changes this to overridden resist + using.hud = src hotkeybuttons += using //CIT CHANGES - rest and combat mode buttons using = new /obj/screen/restbutton() using.icon = tg_ui_icon_to_cit_ui(ui_style) using.screen_loc = ui_pull_resist + using.hud = src static_inventory += using using = new /obj/screen/combattoggle() using.icon = tg_ui_icon_to_cit_ui(ui_style) using.screen_loc = ui_combat_toggle + using.hud = src static_inventory += using //END OF CIT CHANGES using = new /obj/screen/human/toggle() using.icon = ui_style using.screen_loc = ui_inventory + using.hud = src static_inventory += using using = new /obj/screen/human/equip() using.icon = ui_style using.screen_loc = ui_equip_position(mymob) + using.hud = src static_inventory += using inv_box = new /obj/screen/inventory() @@ -311,54 +326,71 @@ throw_icon = new /obj/screen/throw_catch() throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw + throw_icon.hud = src hotkeybuttons += throw_icon internals = new /obj/screen/internals() + internals.hud = src infodisplay += internals healths = new /obj/screen/healths() + healths.hud = src infodisplay += healths //CIT CHANGE - adds arousal and stamina to hud arousal = new /obj/screen/arousal() arousal.icon_state = (owner.canbearoused == 1 ? "arousal0" : "") + arousal.hud = src infodisplay += arousal staminas = new /obj/screen/staminas() + staminas.hud = src infodisplay += staminas if(!CONFIG_GET(flag/disable_stambuffer)) staminabuffer = new /obj/screen/staminabuffer() + staminabuffer.hud = src infodisplay += staminabuffer //END OF CIT CHANGES healthdoll = new /obj/screen/healthdoll() + healthdoll.hud = src infodisplay += healthdoll pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_pull_resist static_inventory += pull_icon lingchemdisplay = new /obj/screen/ling/chems() + lingchemdisplay.hud = src infodisplay += lingchemdisplay lingstingdisplay = new /obj/screen/ling/sting() + lingstingdisplay.hud = src infodisplay += lingstingdisplay devilsouldisplay = new /obj/screen/devil/soul_counter + devilsouldisplay.hud = src infodisplay += devilsouldisplay blood_display = new /obj/screen/bloodsucker/blood_counter // Blood Volume + blood_display.hud = src infodisplay += blood_display + vamprank_display = new /obj/screen/bloodsucker/rank_counter // Vampire Rank + vamprank_display.hud = src infodisplay += vamprank_display + sunlight_display = new /obj/screen/bloodsucker/sunlight_counter // Sunlight + sunlight_display.hud = src infodisplay += sunlight_display zone_select = new /obj/screen/zone_sel() zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() static_inventory += zone_select for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm index 277ea8b898..a36d9a0f36 100644 --- a/code/_onclick/hud/lavaland_elite.dm +++ b/code/_onclick/hud/lavaland_elite.dm @@ -6,9 +6,9 @@ pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style + pull_icon.hud = src pull_icon.update_icon() pull_icon.screen_loc = ui_living_pull - pull_icon.hud = src static_inventory += pull_icon healths = new /obj/screen/healths/lavaland_elite() diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index bbf2cca9f9..3d3c3cf64a 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -7,21 +7,25 @@ action_intent.icon = ui_style action_intent.icon_state = mymob.a_intent action_intent.screen_loc = ui_acti + action_intent.hud = src static_inventory += action_intent using = new /obj/screen/mov_intent() using.icon = ui_style using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi + using.hud = src static_inventory += using using = new/obj/screen/language_menu using.icon = ui_style + using.hud = src static_inventory += using using = new /obj/screen/drop() using.icon = ui_style using.screen_loc = ui_drop_throw + using.hud = src static_inventory += using build_hand_slots() @@ -30,12 +34,14 @@ using.icon = ui_style using.icon_state = "swap_1_m" //extra wide! using.screen_loc = ui_swaphand_position(owner,1) + using.hud = src static_inventory += using using = new /obj/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) + using.hud = src static_inventory += using inv_box = new /obj/screen/inventory() @@ -76,30 +82,37 @@ throw_icon = new /obj/screen/throw_catch() throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw + throw_icon.hud = src hotkeybuttons += throw_icon internals = new /obj/screen/internals() + internals.hud = src infodisplay += internals healths = new /obj/screen/healths() + healths.hud = src infodisplay += healths pull_icon = new /obj/screen/pull() pull_icon.icon = ui_style - pull_icon.update_icon(mymob) pull_icon.screen_loc = ui_pull_resist + pull_icon.hud = src + pull_icon.update_icon() static_inventory += pull_icon lingchemdisplay = new /obj/screen/ling/chems() + lingchemdisplay.hud = src infodisplay += lingchemdisplay lingstingdisplay = new /obj/screen/ling/sting() + lingstingdisplay.hud = src infodisplay += lingstingdisplay zone_select = new /obj/screen/zone_sel() zone_select.icon = ui_style - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() static_inventory += zone_select mymob.client.screen = list() @@ -107,6 +120,7 @@ using = new /obj/screen/resist() using.icon = ui_style using.screen_loc = ui_pull_resist + using.hud = src hotkeybuttons += using for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) diff --git a/code/_onclick/hud/revenanthud.dm b/code/_onclick/hud/revenanthud.dm index bc8a2bde7d..9369313941 100644 --- a/code/_onclick/hud/revenanthud.dm +++ b/code/_onclick/hud/revenanthud.dm @@ -3,4 +3,5 @@ ..() healths = new /obj/screen/healths/revenant() + healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 11517d79b8..00c89644b6 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -118,26 +118,31 @@ using = new/obj/screen/robot/language_menu using.screen_loc = ui_borg_language_menu + using.hud = src static_inventory += using //Radio using = new /obj/screen/robot/radio() using.screen_loc = ui_borg_radio + using.hud = src static_inventory += using //Module select using = new /obj/screen/robot/module1() using.screen_loc = ui_inv1 + using.hud = src static_inventory += using mymobR.inv1 = using using = new /obj/screen/robot/module2() using.screen_loc = ui_inv2 + using.hud = src static_inventory += using mymobR.inv2 = using using = new /obj/screen/robot/module3() using.screen_loc = ui_inv3 + using.hud = src static_inventory += using mymobR.inv3 = using @@ -146,36 +151,43 @@ //Photography stuff using = new /obj/screen/ai/image_take() using.screen_loc = ui_borg_camera + using.hud = src static_inventory += using using = new /obj/screen/ai/image_view() using.screen_loc = ui_borg_album + using.hud = src static_inventory += using //Sec/Med HUDs using = new /obj/screen/robot/sensors() using.screen_loc = ui_borg_sensor + using.hud = src static_inventory += using //Headlamp control using = new /obj/screen/robot/lamp() using.screen_loc = ui_borg_lamp + using.hud = src static_inventory += using mymobR.lamp_button = using //Thrusters using = new /obj/screen/robot/thrusters() using.screen_loc = ui_borg_thrusters + using.hud = src static_inventory += using mymobR.thruster_button = using //Intent action_intent = new /obj/screen/act_intent/robot() action_intent.icon_state = mymob.a_intent + action_intent.hud = src static_inventory += action_intent //Health healths = new /obj/screen/healths/robot() + healths.hud = src infodisplay += healths //Installed Module @@ -185,17 +197,20 @@ //Store module_store_icon = new /obj/screen/robot/store() + module_store_icon.hud = src module_store_icon.screen_loc = ui_borg_store pull_icon = new /obj/screen/pull() pull_icon.icon = 'icons/mob/screen_cyborg.dmi' - pull_icon.update_icon(mymob) + pull_icon.hud = src + pull_icon.update_icon() pull_icon.screen_loc = ui_borg_pull hotkeybuttons += pull_icon zone_select = new /obj/screen/zone_sel/robot() - zone_select.update_icon(mymob) + zone_select.hud = src + zone_select.update_icon() static_inventory += zone_select diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 86b4b0c024..dec743d35c 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -110,21 +110,21 @@ // At this point in client Click() code we have passed the 1/10 sec check and little else // We don't even know if it's a middle click if(world.time <= usr.next_move) - return 1 + return TRUE if(usr.incapacitated()) - return 1 + return TRUE if(ismecha(usr.loc)) // stops inventory actions in a mech - return 1 + return TRUE - if(hud && hud.mymob && slot_id) + if(hud?.mymob && slot_id) var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id) if(inv_item) return inv_item.Click(location, control, params) if(usr.attack_ui(slot_id)) usr.update_inv_hands() - return 1 + return TRUE /obj/screen/inventory/MouseEntered() ..() @@ -135,35 +135,37 @@ cut_overlay(object_overlays) object_overlays.Cut() -/obj/screen/inventory/update_icon() +/obj/screen/inventory/update_icon_state() if(!icon_empty) icon_empty = icon_state - if(hud && hud.mymob && slot_id && icon_full) + if(hud?.mymob && slot_id && icon_full) if(hud.mymob.get_item_by_slot(slot_id)) icon_state = icon_full else icon_state = icon_empty /obj/screen/inventory/proc/add_overlays() - var/mob/user = hud.mymob + var/mob/user = hud?.mymob - if(hud && user && slot_id) - var/obj/item/holding = user.get_active_held_item() + if(!user || !slot_id) + return - if(!holding || user.get_item_by_slot(slot_id)) - return + var/obj/item/holding = user.get_active_held_item() - var/image/item_overlay = image(holding) - item_overlay.alpha = 92 + if(!holding || user.get_item_by_slot(slot_id)) + return - if(!user.can_equip(holding, slot_id, TRUE)) - item_overlay.color = "#FF0000" - else - item_overlay.color = "#00ff00" + var/image/item_overlay = image(holding) + item_overlay.alpha = 92 - object_overlays += item_overlay - add_overlay(object_overlays) + if(!user.can_equip(holding, slot_id, TRUE)) + item_overlay.color = "#FF0000" + else + item_overlay.color = "#00ff00" + + object_overlays += item_overlay + add_overlay(object_overlays) /obj/screen/inventory/hand var/mutable_appearance/handcuff_overlay @@ -171,45 +173,50 @@ var/held_index = 0 /obj/screen/inventory/hand/update_icon() - ..() + . = ..() if(!handcuff_overlay) var/state = (!(held_index % 2)) ? "markus" : "gabrielle" handcuff_overlay = mutable_appearance('icons/mob/screen_gen.dmi', state) - cut_overlays() + cut_overlay(list(handcuff_overlay, blocked_overlay, "hand_active")) - if(hud && hud.mymob) - if(iscarbon(hud.mymob)) - var/mob/living/carbon/C = hud.mymob - if(C.handcuffed) - add_overlay(handcuff_overlay) + if(!hud?.mymob) + return - if(held_index) - if(!C.has_hand_for_held_index(held_index)) - add_overlay(blocked_overlay) + if(iscarbon(hud.mymob)) + var/mob/living/carbon/C = hud.mymob + if(C.handcuffed) + add_overlay(handcuff_overlay) - if(held_index == hud.mymob.active_hand_index) - add_overlay("hand_active") + if(held_index) + if(!C.has_hand_for_held_index(held_index)) + add_overlay(blocked_overlay) + + if(held_index == hud.mymob.active_hand_index) + add_overlay("hand_active") /obj/screen/inventory/hand/Click(location, control, params) // At this point in client Click() code we have passed the 1/10 sec check and little else // We don't even know if it's a middle click - if(world.time <= usr.next_move) - return 1 - if(usr.incapacitated() || isobserver(usr)) - return 1 - if (ismecha(usr.loc)) // stops inventory actions in a mech - return 1 + var/mob/user = hud?.mymob + if(usr != user) + return TRUE + if(world.time <= user.next_move) + return TRUE + if(user.incapacitated()) + return TRUE + if (ismecha(user.loc)) // stops inventory actions in a mech + return TRUE - if(hud.mymob.active_hand_index == held_index) - var/obj/item/I = hud.mymob.get_active_held_item() + if(user.active_hand_index == held_index) + var/obj/item/I = user.get_active_held_item() if(I) I.Click(location, control, params) else - hud.mymob.swap_hand(held_index) - return 1 + user.swap_hand(held_index) + return TRUE /obj/screen/close name = "close" @@ -343,12 +350,8 @@ /obj/screen/mov_intent/Click() toggle(usr) -/obj/screen/mov_intent/update_icon(mob/user) - if(!user && hud) - user = hud.mymob - if(!user) - return - switch(user.m_intent) +/obj/screen/mov_intent/update_icon_state() + switch(hud?.mymob?.m_intent) if(MOVE_INTENT_WALK) icon_state = "walking" if(MOVE_INTENT_RUN) @@ -369,10 +372,8 @@ return usr.stop_pulling() -/obj/screen/pull/update_icon(mob/mymob) - if(!mymob) - return - if(mymob.pulling) +/obj/screen/pull/update_icon_state() + if(hud?.mymob?.pulling) icon_state = "pull" else icon_state = "pull0" @@ -401,11 +402,11 @@ var/mob/living/L = usr L.lay_down() -/obj/screen/rest/update_icon(mob/mymob) - if(!isliving(mymob)) +/obj/screen/rest/update_icon_state() + var/mob/living/user = hud?.mymob + if(!istype(user)) return - var/mob/living/L = mymob - if(!L.resting) + if(!user.resting) icon_state = "act_rest" else icon_state = "act_rest0" @@ -448,7 +449,7 @@ name = "damage zone" icon_state = "zone_sel" screen_loc = ui_zonesel - var/selecting = BODY_ZONE_CHEST + var/overlay_icon = 'icons/mob/screen_gen.dmi' var/static/list/hover_overlays_cache = list() var/hovering @@ -541,26 +542,24 @@ return BODY_ZONE_HEAD /obj/screen/zone_sel/proc/set_selected_zone(choice, mob/user) - if(isobserver(user)) + if(user != hud?.mymob) return - if(choice != selecting) - selecting = choice - update_icon(usr) - return 1 + if(choice != hud.mymob.zone_selected) + hud.mymob.zone_selected = choice + update_icon() -/obj/screen/zone_sel/update_icon(mob/user) - cut_overlays() - add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[selecting]")) - user.zone_selected = selecting + return TRUE + +/obj/screen/zone_sel/update_overlays() + . = ..() + if(!hud?.mymob) + return + . += mutable_appearance(overlay_icon, "[hud.mymob.zone_selected]") /obj/screen/zone_sel/alien icon = 'icons/mob/screen_alien.dmi' - -/obj/screen/zone_sel/alien/update_icon(mob/user) - cut_overlays() - add_overlay(mutable_appearance('icons/mob/screen_alien.dmi', "[selecting]")) - user.zone_selected = selecting + overlay_icon = 'icons/mob/screen_alien.dmi' /obj/screen/zone_sel/robot icon = 'icons/mob/screen_cyborg.dmi' diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm index 6cf4c73e44..80cc01c3b3 100644 --- a/code/_onclick/hud/swarmer.dm +++ b/code/_onclick/hud/swarmer.dm @@ -69,24 +69,30 @@ using = new /obj/screen/swarmer/FabricateTrap() using.screen_loc = ui_hand_position(2) + using.hud = src static_inventory += using using = new /obj/screen/swarmer/Barricade() using.screen_loc = ui_hand_position(1) + using.hud = src static_inventory += using using = new /obj/screen/swarmer/Replicate() using.screen_loc = ui_zonesel + using.hud = src static_inventory += using using = new /obj/screen/swarmer/RepairSelf() using.screen_loc = ui_storage1 + using.hud = src static_inventory += using using = new /obj/screen/swarmer/ToggleLight() using.screen_loc = ui_back + using.hud = src static_inventory += using using = new /obj/screen/swarmer/ContactSwarmers() using.screen_loc = ui_inventory + using.hud = src static_inventory += using diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index f082f2ad16..e6b2a63673 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -98,17 +98,19 @@ take_damage(I.force, I.damtype, "melee", 1) /mob/living/attacked_by(obj/item/I, mob/living/user) + //CIT CHANGES START HERE - combatmode and resting checks + var/totitemdamage = I.force + if(iscarbon(user)) + var/mob/living/carbon/tempcarb = user + if(!tempcarb.combatmode) + totitemdamage *= 0.5 + if(user.resting) + totitemdamage *= 0.5 + //CIT CHANGES END HERE + if(user != src && check_shields(I, totitemdamage, "the [I.name]", MELEE_ATTACK, I.armour_penetration)) + return FALSE send_item_attack_message(I, user) if(I.force) - //CIT CHANGES START HERE - combatmode and resting checks - var/totitemdamage = I.force - if(iscarbon(user)) - var/mob/living/carbon/tempcarb = user - if(!tempcarb.combatmode) - totitemdamage *= 0.5 - if(user.resting) - totitemdamage *= 0.5 - //CIT CHANGES END HERE apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW)) if(prob(33)) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 30e6883d24..6ee7d51091 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -91,6 +91,8 @@ var/obj/item/clothing/gloves/G = gloves if(istype(G) && G.Touch(A,0)) // for magic gloves return + if (istype(glasses) && glasses.ranged_attack(src,A,mouseparams)) + return for(var/datum/mutation/human/HM in dna.mutations) HM.on_ranged_attack(src, A, mouseparams) diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index be9f7e116b..3f07eed029 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -151,6 +151,7 @@ var/key_mode var/value_mode var/splitter = " " + var/lowercase = TRUE /datum/config_entry/keyed_list/New() . = ..() @@ -167,7 +168,9 @@ var/key_value = null if(key_pos || value_mode == VALUE_MODE_FLAG) - key_name = lowertext(copytext(str_val, 1, key_pos)) + key_name = copytext(str_val, 1, key_pos) + if(lowercase) + key_name = lowertext(key_name) key_value = copytext(str_val, key_pos + 1) var/new_key var/new_value diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index a5d27819b8..14954524fa 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -14,6 +14,7 @@ var/list/modes // allowed modes var/list/gamemode_cache var/list/votable_modes // votable modes + var/list/storyteller_cache var/list/mode_names var/list/mode_reports var/list/mode_false_report_weight @@ -37,6 +38,7 @@ CRASH("/datum/controller/configuration/Load() called more than once!") InitEntries() LoadModes() + storyteller_cache = typecacheof(/datum/dynamic_storyteller, TRUE) if(fexists("[directory]/config.txt") && LoadEntries("config.txt") <= 1) var/list/legacy_configs = list("game_options.txt", "dbconfig.txt", "comms.txt") for(var/I in legacy_configs) @@ -227,6 +229,7 @@ for(var/T in gamemode_cache) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). + // for future reference: just use initial() lol var/datum/game_mode/M = new T() if(M.config_tag) @@ -317,6 +320,14 @@ return new T return new /datum/game_mode/extended() +/datum/controller/configuration/proc/pick_storyteller(storyteller_name) + for(var/T in storyteller_cache) + var/datum/dynamic_storyteller/S = T + var/name = initial(S.name) + if(name && name == storyteller_name) + return T + return /datum/dynamic_storyteller/classic + /datum/controller/configuration/proc/get_runnable_modes() var/list/datum/game_mode/runnable_modes = new var/list/probabilities = Get(/datum/config_entry/keyed_list/probability) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index fdddbda344..b95ef43d37 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -376,6 +376,21 @@ /datum/config_entry/flag/disable_stambuffer +/datum/config_entry/keyed_list/box_random_engine + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_FLAG + lowercase = FALSE + splitter = "-" + /datum/config_entry/number/auto_transfer_delay config_entry_value = 72000 min_val = 0 + +/datum/config_entry/flag/pai_custom_holoforms + +/datum/config_entry/number/marauder_delay_non_reebe + config_entry_value = 1800 + min_val = 0 + +/datum/config_entry/flag/allow_clockwork_marauder_on_station + config_entry_value = TRUE diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 5bcc911005..2a59558bcd 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -315,7 +315,7 @@ SUBSYSTEM_DEF(air) var/starting_ats = active_turfs.len sleep(world.tick_lag) var/timer = world.timeofday - warning("There are [starting_ats] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)") + log_mapping("There are [starting_ats] active turfs at roundstart caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required).") for(var/turf/T in active_turfs) GLOB.active_turfs_startlist += T @@ -382,6 +382,9 @@ SUBSYSTEM_DEF(air) CHECK_TICK /datum/controller/subsystem/air/proc/setup_template_machinery(list/atmos_machines) + if(!initialized) + return + for(var/A in atmos_machines) var/obj/machinery/atmospherics/AM = A AM.atmosinit() diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index af7ae825f4..7597a9229a 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -658,7 +658,7 @@ SUBSYSTEM_DEF(job) message_admins(msg) CRASH(msg) -/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, equipbackpackstuff) +/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, equipbackpackstuff, bypass_prereqs = FALSE) var/mob/the_mob = N if(!the_mob) the_mob = M // cause this doesn't get assigned if player is a latejoiner @@ -671,7 +671,7 @@ SUBSYSTEM_DEF(job) if(!G) continue var/permitted = TRUE - if(G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles)) + if(!bypass_prereqs && G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles)) permitted = FALSE if(G.donoritem && !G.donator_ckey_check(the_mob.client.ckey)) permitted = FALSE diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 29762338fb..8c8ad2d337 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -91,6 +91,7 @@ SUBSYSTEM_DEF(mapping) var/list/space_ruins = levels_by_trait(ZTRAIT_SPACE_RUINS) if (space_ruins.len) seedRuins(space_ruins, CONFIG_GET(number/space_budget), /area/space, space_ruins_templates) + SSmapping.seedStation() loading_ruins = FALSE #endif repopulate_sorted_areas() @@ -363,6 +364,8 @@ GLOBAL_LIST_EMPTY(the_station_areas) lava_ruins_templates[R.name] = R else if(istype(R, /datum/map_template/ruin/space)) space_ruins_templates[R.name] = R + else if(istype(R, /datum/map_template/ruin/station)) + station_room_templates[R.name] = R /datum/controller/subsystem/mapping/proc/preloadShuttleTemplates() var/list/unbuyable = generateMapList("[global.config.directory]/unbuyableshuttles.txt") @@ -524,4 +527,15 @@ GLOBAL_LIST_EMPTY(the_station_areas) if(!isolated_ruins_z) isolated_ruins_z = add_new_zlevel("Isolated Ruins/Reserved", list(ZTRAIT_RESERVED = TRUE, ZTRAIT_ISOLATED_RUINS = TRUE)) initialize_reserved_level(isolated_ruins_z.z_value) - return isolated_ruins_z.z_value \ No newline at end of file + return isolated_ruins_z.z_value + + // Station Ruins +/datum/controller/subsystem/mapping + var/list/station_room_templates = list() + +/datum/controller/subsystem/mapping/proc/seedStation() + for(var/V in GLOB.stationroom_landmarks) + var/obj/effect/landmark/stationroom/LM = V + LM.load() + if(GLOB.stationroom_landmarks.len) + seedStation() //I'm sure we can trust everyone not to insert a 1x1 rooms which loads a landmark which loads a landmark which loads a la... diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index c3db8552c6..e43c8f21a2 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -12,13 +12,15 @@ SUBSYSTEM_DEF(persistence) var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() var/list/saved_modes = list(1,2,3) - var/list/saved_threat_levels = list(1,1,1) + var/list/saved_dynamic_rules = list(list(),list(),list()) + var/list/saved_storytellers = list("foo","bar","baz","foo again","bar again") var/list/saved_maps var/list/saved_trophies = list() var/list/spawned_objects = list() var/list/antag_rep = list() var/list/antag_rep_change = list() var/list/picture_logging_information = list() + var/list/saved_votes = list() var/list/obj/structure/sign/picture_frame/photo_frames var/list/obj/item/storage/photo_album/photo_albums @@ -28,9 +30,12 @@ SUBSYSTEM_DEF(persistence) LoadChiselMessages() LoadTrophies() LoadRecentModes() - LoadRecentThreats() + LoadRecentStorytellers() + LoadRecentRulesets() LoadRecentMaps() LoadPhotoPersistence() + for(var/client/C in GLOB.clients) + LoadSavedVote(C.ckey) if(CONFIG_GET(flag/use_antag_rep)) LoadAntagReputation() LoadRandomizedRecipes() @@ -168,14 +173,23 @@ SUBSYSTEM_DEF(persistence) return saved_modes = json["data"] -/datum/controller/subsystem/persistence/proc/LoadRecentThreats() - var/json_file = file("data/RecentThreatLevels.json") +/datum/controller/subsystem/persistence/proc/LoadRecentRulesets() + var/json_file = file("data/RecentRulesets.json") if(!fexists(json_file)) return var/list/json = json_decode(file2text(json_file)) if(!json) return - saved_threat_levels = json["data"] + saved_dynamic_rules = json["data"] + +/datum/controller/subsystem/persistence/proc/LoadRecentStorytellers() + var/json_file = file("data/RecentStorytellers.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + saved_storytellers = json["data"] /datum/controller/subsystem/persistence/proc/LoadRecentMaps() var/json_file = file("data/RecentMaps.json") @@ -196,6 +210,15 @@ SUBSYSTEM_DEF(persistence) return antag_rep = json_decode(json) +/datum/controller/subsystem/persistence/proc/LoadSavedVote(var/ckey) + var/json_file = file("data/player_saves/[copytext(ckey,1,2)]/[ckey]/SavedVotes.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + saved_votes[ckey] = json["data"] + /datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items) for(var/A in GLOB.trophy_cases) var/obj/structure/displaycase/trophy/T = A @@ -227,7 +250,10 @@ SUBSYSTEM_DEF(persistence) CollectSecretSatchels() CollectTrophies() CollectRoundtype() - CollectThreatLevel() + if(istype(SSticker.mode, /datum/game_mode/dynamic)) + var/datum/game_mode/dynamic/mode = SSticker.mode + CollectStoryteller(mode) + CollectRulesets(mode) RecordMaps() SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. if(CONFIG_GET(flag/use_antag_rep)) @@ -384,17 +410,31 @@ SUBSYSTEM_DEF(persistence) fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) -/datum/controller/subsystem/persistence/proc/CollectThreatLevel() - if(istype(SSticker.mode, /datum/game_mode/dynamic)) - var/datum/game_mode/dynamic/mode = SSticker.mode - saved_threat_levels[3] = saved_threat_levels[2] - saved_threat_levels[2] = saved_threat_levels [1] - saved_threat_levels[1] = mode.threat_level - var/json_file = file("data/RecentThreatLevels.json") - var/list/file_data = list() - file_data["data"] = saved_threat_levels - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) +/datum/controller/subsystem/persistence/proc/CollectStoryteller(var/datum/game_mode/dynamic/mode) + saved_storytellers.len = 5 + saved_storytellers[5] = saved_storytellers[4] + saved_storytellers[4] = saved_storytellers[3] + saved_storytellers[3] = saved_storytellers[2] + saved_storytellers[2] = saved_storytellers[1] + saved_storytellers[1] = mode.storyteller.name + var/json_file = file("data/RecentStorytellers.json") + var/list/file_data = list() + file_data["data"] = saved_storytellers + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +/datum/controller/subsystem/persistence/proc/CollectRulesets(var/datum/game_mode/dynamic/mode) + saved_dynamic_rules[3] = saved_dynamic_rules[2] + saved_dynamic_rules[2] = saved_dynamic_rules[1] + saved_dynamic_rules[1] = list() + for(var/r in mode.executed_rules) + var/datum/dynamic_ruleset/rule = r + saved_dynamic_rules[1] += rule.config_tag + var/json_file = file("data/RecentRulesets.json") + var/list/file_data = list() + file_data["data"] = saved_dynamic_rules + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) /datum/controller/subsystem/persistence/proc/RecordMaps() saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]") @@ -459,3 +499,11 @@ SUBSYSTEM_DEF(persistence) fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) + +/datum/controller/subsystem/persistence/proc/SaveSavedVotes() + for(var/ckey in saved_votes) + var/json_file = file("data/player_saves/[copytext(ckey,1,2)]/[ckey]/SavedVotes.json") + var/list/file_data = list() + file_data["data"] = saved_votes[ckey] + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) diff --git a/code/controllers/subsystem/processing/nanites.dm b/code/controllers/subsystem/processing/nanites.dm index 69bd5781de..5b53f9f884 100644 --- a/code/controllers/subsystem/processing/nanites.dm +++ b/code/controllers/subsystem/processing/nanites.dm @@ -6,6 +6,7 @@ PROCESSING_SUBSYSTEM_DEF(nanites) var/list/datum/nanite_cloud_backup/cloud_backups = list() var/list/mob/living/nanite_monitored_mobs = list() var/list/datum/nanite_program/relay/nanite_relays = list() + var/neural_network_count = 0 /datum/controller/subsystem/processing/nanites/proc/check_hardware(datum/nanite_cloud_backup/backup) if(QDELETED(backup.storage) || (backup.storage.stat & (NOPOWER|BROKEN))) diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 9f04b43912..5c4cf55f45 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -35,7 +35,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks) var/list/my_quirks = cli.prefs.all_quirks.Copy() var/list/cut if(job?.blacklisted_quirks) - cut = filter_quirks(quirks, job) + cut = filter_quirks(my_quirks, job) for(var/V in my_quirks) var/datum/quirk/Q = quirks[V] if(Q) @@ -63,28 +63,28 @@ PROCESSING_SUBSYSTEM_DEF(quirks) for(var/i in quirk_names) . += quirk_points_by_name(i) -/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/quirks, datum/job/job) +/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, datum/job/job) var/list/cut = list() var/list/banned_names = list() for(var/i in job.blacklisted_quirks) var/name = quirk_name_by_path(i) if(name) banned_names += name - var/list/blacklisted = quirks & banned_names + var/list/blacklisted = our_quirks & banned_names if(length(blacklisted)) for(var/i in blacklisted) - quirks -= i + our_quirks -= i cut += i /* //Code to automatically reduce positive quirks until balance is even. - var/points_used = total_points(quirks) + var/points_used = total_points(our_quirks) if(points_used > 0) //they owe us points, let's collect. - for(var/i in quirks) + for(var/i in our_quirks) var/points = quirk_points_by_name(i) if(points > 0) cut += i - quirks -= i + our_quirks -= i points_used -= points if(points_used <= 0) break @@ -92,9 +92,9 @@ PROCESSING_SUBSYSTEM_DEF(quirks) //Nah, let's null all non-neutrals out. if(cut.len) - for(var/i in quirks) + for(var/i in our_quirks) if(quirk_points_by_name(i) != 0) //cut += i -- Commented out: Only show the ones that triggered the quirk purge. - quirks -= i + our_quirks -= i return cut diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index fe40b3f01f..b406a8ccad 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -37,7 +37,7 @@ SUBSYSTEM_DEF(shuttle) var/points = 5000 //number of trade-points we have var/centcom_message = "" //Remarks from CentCom on how well you checked the last order. var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentCom, associated with their potencies - var/passive_supply_points_per_minute = 750 + var/passive_supply_points_per_minute = 500 var/list/supply_packs = list() var/list/shoppinglist = list() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 890725fbb1..45c8e3c8fe 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -401,6 +401,9 @@ SUBSYSTEM_DEF(ticker) qdel(player) living.notransform = TRUE if(living.client) + if (living.client.prefs && living.client.prefs.auto_ooc) + if (living.client.prefs.chat_toggles & CHAT_OOC) + living.client.prefs.chat_toggles ^= CHAT_OOC var/obj/screen/splash/S = new(living.client, TRUE) S.Fade(TRUE) livings += living @@ -480,7 +483,10 @@ SUBSYSTEM_DEF(ticker) SSticker.timeLeft = 900 SSticker.modevoted = TRUE var/dynamic = CONFIG_GET(flag/dynamic_voting) - SSvote.initiate_vote(dynamic ? "dynamic" : "roundtype","server",TRUE) + if(dynamic) + SSvote.initiate_vote("dynamic","server",hideresults=TRUE,votesystem=SCORE_VOTING,forced=TRUE,vote_time = 2 MINUTES) + else + SSvote.initiate_vote("roundtype","server",hideresults=TRUE,votesystem=PLURALITY_VOTING,forced=TRUE, vote_time = 2 MINUTES) /datum/controller/subsystem/ticker/Recover() current_state = SSticker.current_state diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index ef63338a67..1ad4a15ee7 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -93,7 +93,7 @@ SUBSYSTEM_DEF(traumas) /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt, /obj/item/clothing/under/rank/research_director/alt, /obj/item/clothing/under/rank/research_director/turtleneck, /obj/item/clothing/under/captainparade, /obj/item/clothing/under/hosparademale, /obj/item/clothing/under/hosparadefem, - /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor_baton, + /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton, /obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer, /obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec, @@ -136,7 +136,7 @@ SUBSYSTEM_DEF(traumas) "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo, /obj/structure/alien, /obj/item/toy/toy_xeno, /obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien, - /obj/item/abductor_baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, + /obj/item/abductor/baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien, /obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor, /obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland, diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index dee10e4998..573c89a5af 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -1,3 +1,5 @@ +#define VOTE_COOLDOWN 10 + SUBSYSTEM_DEF(vote) name = "Vote" wait = 10 @@ -8,13 +10,17 @@ SUBSYSTEM_DEF(vote) var/initiator = null var/started_time = null - var/time_remaining = 0 + var/end_time = 0 var/mode = null + var/vote_system = PLURALITY_VOTING var/question = null var/list/choices = list() + var/list/choice_descs = list() // optional descriptions var/list/voted = list() var/list/voting = list() + var/list/saved = list() var/list/generated_actions = list() + var/next_pop = 0 var/obfuscated = FALSE//CIT CHANGE - adds obfuscated/admin-only votes @@ -22,28 +28,30 @@ SUBSYSTEM_DEF(vote) /datum/controller/subsystem/vote/fire() //called by master_controller if(mode) - time_remaining = round((started_time + CONFIG_GET(number/vote_period) - world.time)/10) - - if(time_remaining < 0) + if(end_time < world.time) result() + SSpersistence.SaveSavedVotes() for(var/client/C in voting) C << browse(null, "window=vote;can_close=0") reset() - else + else if(next_pop < world.time) var/datum/browser/client_popup for(var/client/C in voting) - client_popup = new(C, "vote", "Voting Panel") + client_popup = new(C, "vote", "Voting Panel", nwidth=600,nheight=700) client_popup.set_window_options("can_close=0") client_popup.set_content(interface(C)) client_popup.open(0) + next_pop = world.time+VOTE_COOLDOWN + /datum/controller/subsystem/vote/proc/reset() initiator = null - time_remaining = 0 + end_time = 0 mode = null question = null choices.Cut() + choice_descs.Cut() voted.Cut() voting.Cut() obfuscated = FALSE //CIT CHANGE - obfuscated votes @@ -84,17 +92,114 @@ SUBSYSTEM_DEF(vote) . += option return . +/datum/controller/subsystem/vote/proc/calculate_condorcet_votes(var/blackbox_text) + // https://en.wikipedia.org/wiki/Schulze_method#Implementation + var/list/d[][] = new/list(choices.len,choices.len) // the basic vote matrix, how many times a beats b + for(var/ckey in voted) + var/list/this_vote = voted[ckey] + for(var/a in 1 to choices.len) + for(var/b in a+1 to choices.len) + var/a_rank = this_vote.Find(a) + var/b_rank = this_vote.Find(b) + a_rank = a_rank ? a_rank : choices.len+1 + b_rank = b_rank ? b_rank : choices.len+1 + if(a_rankopposite_pref) + p[i][j] = d[i][j] + p[j][i] = 0 + else + p[i][j] = 0 + p[j][i] = d[i][j] + for(var/i in 1 to choices.len) + for(var/j in 1 to choices.len) + if(i != j) + for(var/k in 1 to choices.len) // YEAH O(n^3) !! + if(i != k && j != k) + p[j][k] = max(p[j][k],min(p[j][i], p[i][k])) + //one last pass, now that we've done the math + for(var/i in 1 to choices.len) + for(var/j in 1 to choices.len) + if(i != j) + SSblackbox.record_feedback("nested tally","voting",p[i][j],list(blackbox_text,"Shortest Paths",choices[i],choices[j])) + if(p[i][j] >= p[j][i]) + choices[choices[i]]++ // higher shortest path = better candidate, so we add to choices here + // choices[choices[i]] is the schulze ranking, here, rather than raw vote numbers + +/datum/controller/subsystem/vote/proc/calculate_majority_judgement_vote(var/blackbox_text) + // https://en.wikipedia.org/wiki/Majority_judgment + var/list/scores_by_choice = list() + for(var/choice in choices) + scores_by_choice[choice] = list() + for(var/ckey in voted) + var/list/this_vote = voted[ckey] + var/list/pretty_vote = list() + for(var/choice in this_vote) + sorted_insert(scores_by_choice[choice],this_vote[choice],/proc/cmp_numeric_asc) + // START BALLOT GATHERING + pretty_vote += choice + pretty_vote[choice] = GLOB.vote_score_options[this_vote[choice]] + SSblackbox.record_feedback("associative","voting_ballots",1,pretty_vote) + // END BALLOT GATHERING + for(var/score_name in scores_by_choice) + var/list/score = scores_by_choice[score_name] + for(var/indiv_score in score) + SSblackbox.record_feedback("nested tally","voting",1,list(blackbox_text,"Scores",score_name,GLOB.vote_score_options[indiv_score])) + if(score.len == 0) + scores_by_choice -= score_name + while(scores_by_choice.len > 1) + var/highest_median = 0 + for(var/score_name in scores_by_choice) // first get highest median + var/list/score = scores_by_choice[score_name] + if(!score.len) + scores_by_choice -= score_name + continue + var/median = score[max(1,round(score.len/2))] + if(median >= highest_median) + highest_median = median + for(var/score_name in scores_by_choice) // then, remove + var/list/score = scores_by_choice[score_name] + var/median = score[max(1,round(score.len/2))] + if(median < highest_median) + scores_by_choice -= score_name + for(var/score_name in scores_by_choice) // after removals + var/list/score = scores_by_choice[score_name] + if(score.len == 0) + choices[score_name] += 100 // we're in a tie situation--just go with the first one + return + var/median_pos = max(1,round(score.len/2)) + score.Cut(median_pos,median_pos+1) + choices[score_name]++ + /datum/controller/subsystem/vote/proc/announce_result() - var/list/winners = get_result() + var/vote_title_text var/text + if(question) + text += "[question]" + vote_title_text = "[question]" + else + text += "[capitalize(mode)] Vote" + vote_title_text = "[capitalize(mode)] Vote" + if(vote_system == RANKED_CHOICE_VOTING) + calculate_condorcet_votes(vote_title_text) + if(vote_system == SCORE_VOTING) + calculate_majority_judgement_vote(vote_title_text) + var/list/winners = get_result() var/was_roundtype_vote = mode == "roundtype" || mode == "dynamic" if(winners.len > 0) - if(question) - text += "[question]" - else - text += "[capitalize(mode)] Vote" if(was_roundtype_vote) stored_gamemode_votes = list() + if(!obfuscated && vote_system == RANKED_CHOICE_VOTING) + text += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!" for(var/i=1,i<=choices.len,i++) var/votes = choices[choices[i]] if(!votes) @@ -116,17 +221,25 @@ SUBSYSTEM_DEF(vote) log_vote(text) remove_action_buttons() to_chat(world, "\n[text]") + switch(vote_system) + if(APPROVAL_VOTING,PLURALITY_VOTING) + for(var/i=1,i<=choices.len,i++) + SSblackbox.record_feedback("nested tally","voting",choices[choices[i]],list(vote_title_text,choices[i])) + if(RANKED_CHOICE_VOTING) + for(var/i=1,i<=voted.len,i++) + var/list/myvote = voted[voted[i]] + for(var/j=1,j<=myvote.len,j++) + SSblackbox.record_feedback("nested tally","voting",1,list(vote_title_text,"[j]\th",choices[myvote[j]])) if(obfuscated) //CIT CHANGE - adds obfuscated votes. this messages admins with the vote's true results var/admintext = "Obfuscated results" + if(vote_system == RANKED_CHOICE_VOTING) + admintext += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!" for(var/i=1,i<=choices.len,i++) var/votes = choices[choices[i]] admintext += "\n[choices[i]]: [votes]" message_admins(admintext) return . -#define PEACE "calm" -#define CHAOS "chaotic" - /datum/controller/subsystem/vote/proc/result() . = announce_result() var/restart = 0 @@ -152,33 +265,15 @@ SUBSYSTEM_DEF(vote) if("dynamic") if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started. return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") - GLOB.master_mode = "dynamic" - if("extended" in choices) - if(. == "extended") - GLOB.dynamic_forced_extended = TRUE // we still do the rest of the stuff - choices[PEACE] += choices["extended"] - var/mean = 0 - var/voters = 0 - for(var/client/c in GLOB.clients) - var/vote = c.prefs.preferred_chaos - if(vote) - voters += 1 - switch(vote) - if(CHAOS_NONE) - mean -= 0.1 - if(CHAOS_LOW) - mean -= 0.05 - if(CHAOS_HIGH) - mean += 0.05 - if(CHAOS_MAX) - mean += 0.1 - mean/=voters - if(voted.len != 0) - mean += (choices[PEACE]*-1+choices[CHAOS])/voted.len - GLOB.dynamic_curve_centre = mean*20 - GLOB.dynamic_curve_width = CLAMP(2-abs(mean*5),0.5,4) - to_chat(world,"Dynamic curve centre set to [GLOB.dynamic_curve_centre] and width set to [GLOB.dynamic_curve_width].") - log_admin("Dynamic curve centre set to [GLOB.dynamic_curve_centre] and width set to [GLOB.dynamic_curve_width]") + if(. == "Secret") + GLOB.master_mode = "secret" + SSticker.save_mode(.) + message_admins("The gamemode has been voted for, and has been changed to: [GLOB.master_mode]") + log_admin("Gamemode has been voted for and switched to: [GLOB.master_mode].") + else + GLOB.master_mode = "dynamic" + var/datum/dynamic_storyteller/S = config.pick_storyteller(.) + GLOB.dynamic_storyteller_type = S if("map") var/datum/map_config/VM = config.maplist[.] message_admins("The map has been voted for and will change to: [VM.map_name]") @@ -196,27 +291,58 @@ SUBSYSTEM_DEF(vote) else to_chat(world, "Notice:Restart vote will not restart the server automatically because there are active admins on.") message_admins("A restart vote has passed, but there are active admins on with +server, so it has been canceled. If you wish, you may restart the server.") - + return . -/datum/controller/subsystem/vote/proc/submit_vote(vote) +/datum/controller/subsystem/vote/proc/submit_vote(vote, score = 0) if(mode) if(CONFIG_GET(flag/no_dead_vote) && usr.stat == DEAD && !usr.client.holder) return 0 - if(!(usr.ckey in voted)) - if(vote && 1<=vote && vote<=choices.len) - voted += usr.ckey - voted[usr.ckey] = vote - choices[choices[vote]]++ //check this - return vote - else if(vote && 1<=vote && vote<=choices.len) - choices[choices[voted[usr.ckey]]]-- - voted[usr.ckey] = vote - choices[choices[vote]]++ - return vote + if(vote && ISINRANGE(vote, 1, choices.len)) + switch(vote_system) + if(PLURALITY_VOTING) + if(usr.ckey in voted) + choices[choices[voted[usr.ckey]]]-- + voted[usr.ckey] = vote + choices[choices[vote]]++ + return vote + else + voted += usr.ckey + voted[usr.ckey] = vote + choices[choices[vote]]++ //check this + return vote + if(APPROVAL_VOTING) + if(usr.ckey in voted) + if(vote in voted[usr.ckey]) + voted[usr.ckey] -= vote + choices[choices[vote]]-- + else + voted[usr.ckey] += vote + choices[choices[vote]]++ + else + voted += usr.ckey + voted[usr.ckey] = list(vote) + choices[choices[vote]]++ + return vote + if(RANKED_CHOICE_VOTING) + if(usr.ckey in voted) + if(vote in voted[usr.ckey]) + voted[usr.ckey] -= vote + else + voted += usr.ckey + voted[usr.ckey] = list() + voted[usr.ckey] += vote + saved -= usr.ckey + if(SCORE_VOTING) + if(!(usr.ckey in voted)) + voted += usr.ckey + voted[usr.ckey] = list() + voted[usr.ckey][choices[vote]] = score + saved -= usr.ckey return 0 -/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, hideresults)//CIT CHANGE - adds hideresults argument to votes to allow for obfuscated votes +/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, hideresults, votesystem = PLURALITY_VOTING, forced = FALSE,vote_time = -1)//CIT CHANGE - adds hideresults argument to votes to allow for obfuscated votes + vote_system = votesystem if(!mode) if(started_time) var/next_allowed_time = (started_time + CONFIG_GET(number/vote_delay)) @@ -257,11 +383,17 @@ SUBSYSTEM_DEF(vote) if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote choices.Add("secret", "extended") if("dynamic") - var/saved_threats = SSpersistence.saved_threat_levels - if((saved_threats[1]+saved_threats[2]+saved_threats[3])>150) - choices.Add("extended",PEACE,CHAOS) - else - choices.Add(PEACE,CHAOS) + for(var/T in config.storyteller_cache) + var/datum/dynamic_storyteller/S = T + var/recent_rounds = 0 + for(var/i in 1 to SSpersistence.saved_storytellers.len) + if(SSpersistence.saved_storytellers[i] == initial(S.name)) + recent_rounds++ + if(recent_rounds < initial(S.weight)) + choices.Add(initial(S.name)) + choice_descs.Add(initial(S.desc)) + choices.Add("Secret") + choice_descs.Add("Standard secret. Switches mode if it wins.") if("custom") question = stripped_input(usr,"What is the vote for?") if(!question) @@ -280,9 +412,11 @@ SUBSYSTEM_DEF(vote) if(mode == "custom") text += "\n[question]" log_vote(text) - var/vp = CONFIG_GET(number/vote_period) + var/vp = vote_time + if(vp == -1) + vp = CONFIG_GET(number/vote_period) to_chat(world, "\n[text]\nType vote or click here to place your votes.\nYou have [DisplayTimeText(vp)] to vote.") - time_remaining = round(vp/10) + end_time = started_time+vp for(var/c in GLOB.clients) SEND_SOUND(c, sound('sound/misc/server-ready.ogg')) var/client/C = c @@ -292,6 +426,11 @@ SUBSYSTEM_DEF(vote) C.player_details.player_actions += V V.Grant(C.mob) generated_actions += V + if(forced) + var/datum/browser/popup = new(C, "vote", "Voting Panel",nwidth=600,nheight=700) + popup.set_window_options("can_close=0") + popup.set_content(SSvote.interface(C)) + popup.open(0) return 1 return 0 @@ -311,14 +450,71 @@ SUBSYSTEM_DEF(vote) . += "

    Vote: '[question]'

    " else . += "

    Vote: [capitalize(mode)]

    " - . += "Time Left: [time_remaining] s
      " - for(var/i=1,i<=choices.len,i++) - var/votes = choices[choices[i]] - var/ivotedforthis = ((C.ckey in voted) && (voted[C.ckey] == i) ? TRUE : FALSE) - if(!votes) - votes = 0 - . += "
    • [ivotedforthis ? "" : ""][choices[i]] ([obfuscated ? (admin ? "??? ([votes])" : "???") : votes] votes)[ivotedforthis ? "" : ""]
    • " // CIT CHANGE - adds obfuscated votes - . += "

    " + switch(vote_system) + if(PLURALITY_VOTING) + . += "

    Vote one.

    " + if(APPROVAL_VOTING) + . += "

    Vote any number of choices.

    " + if(RANKED_CHOICE_VOTING) + . += "

    Vote by order of preference. Revoting will demote to the bottom. 1 is your favorite, and higher numbers are worse.

    " + if(SCORE_VOTING) + . += "

    Grade the candidates by how much you like them.

    " + . += "

    No-votes have no power--your opinion is only heard if you vote!

    " + . += "Time Left: [DisplayTimeText(end_time-world.time)]
      " + switch(vote_system) + if(PLURALITY_VOTING, APPROVAL_VOTING) + for(var/i=1,i<=choices.len,i++) + var/votes = choices[choices[i]] + var/ivotedforthis = FALSE + switch(vote_system) + if(PLURALITY_VOTING) + ivotedforthis = ((C.ckey in voted) && (voted[C.ckey] == i)) + if(APPROVAL_VOTING) + ivotedforthis = ((C.ckey in voted) && (i in voted[C.ckey])) + if(!votes) + votes = 0 + . += "
    • [ivotedforthis ? "" : ""][choices[i]] ([obfuscated ? (admin ? "??? ([votes])" : "???") : votes] votes)[ivotedforthis ? "" : ""]
    • " // CIT CHANGE - adds obfuscated votes + if(choice_descs.len >= i) + . += "
    • [choice_descs[i]]
    • " + . += "

    " + if(RANKED_CHOICE_VOTING) + var/list/myvote = voted[C.ckey] + for(var/i=1,i<=choices.len,i++) + var/vote = (myvote ? (myvote.Find(i)) : 0) + if(vote) + . += "
  • [choices[i]] ([vote])
  • " + else + . += "
  • [choices[i]]
  • " + if(choice_descs.len >= i) + . += "
  • [choice_descs[i]]
  • " + . += "
    " + if(!(C.ckey in saved)) + . += "(Save vote)" + else + . += "(Saved!)" + . += "(Load vote from save)" + . += "(Reset votes)" + if(SCORE_VOTING) + var/list/myvote = voted[C.ckey] + for(var/i=1,i<=choices.len,i++) + . += "
  • [choices[i]]" + for(var/r in 1 to GLOB.vote_score_options.len) + . += " " + if((choices[i] in myvote) && myvote[choices[i]] == r) + . +="([GLOB.vote_score_options[r]])" + else + . +="[GLOB.vote_score_options[r]]" + . += "" + . += "
  • " + if(choice_descs.len >= i) + . += "
  • [choice_descs[i]]
  • " + . += "
    " + if(!(C.ckey in saved)) + . += "(Save vote)" + else + . += "(Saved!)" + . += "(Load vote from save)" + . += "(Reset votes)" if(admin) . += "(Cancel Vote) " else @@ -376,8 +572,31 @@ SUBSYSTEM_DEF(vote) if("custom") if(usr.client.holder) initiate_vote("custom",usr.key) + if("reset") + if(usr.ckey in voted) + voted -= usr.ckey + if("save") + if(usr.ckey in voted) + if(!(usr.ckey in SSpersistence.saved_votes)) + SSpersistence.saved_votes[usr.ckey] = list() + SSpersistence.saved_votes[usr.ckey][mode] = voted[usr.ckey] + saved += usr.ckey + if("load") + if(!(usr.ckey in SSpersistence.saved_votes)) + SSpersistence.LoadSavedVote(usr.ckey) + if(!(usr.ckey in SSpersistence.saved_votes)) + SSpersistence.saved_votes[usr.ckey] = list() + if(usr.ckey in voted) + SSpersistence.saved_votes[usr.ckey][mode] = voted[usr.ckey] + else + SSpersistence.saved_votes[usr.ckey][mode] = list() + voted[usr.ckey] = SSpersistence.saved_votes[usr.ckey][mode] + saved += usr.ckey else - submit_vote(round(text2num(href_list["vote"]))) + if(vote_system == SCORE_VOTING) + submit_vote(round(text2num(href_list["vote"])),round(text2num(href_list["score"]))) + else + submit_vote(round(text2num(href_list["vote"]))) usr.vote() /datum/controller/subsystem/vote/proc/remove_action_buttons() @@ -392,7 +611,7 @@ SUBSYSTEM_DEF(vote) set category = "OOC" set name = "Vote" - var/datum/browser/popup = new(src, "vote", "Voting Panel") + var/datum/browser/popup = new(src, "vote", "Voting Panel",nwidth=600,nheight=700) popup.set_window_options("can_close=0") popup.set_content(SSvote.interface(client)) popup.open(0) @@ -419,6 +638,3 @@ SUBSYSTEM_DEF(vote) var/datum/player_details/P = GLOB.player_details[owner.ckey] if(P) P.player_actions -= src - -#undef PEACE -#undef CHAOS diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index d5af47ea1f..06169f64bf 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -32,7 +32,7 @@ if(ishuman(M) && source.force && source.get_sharpness()) var/mob/living/carbon/human/H = M - if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_HEAD) // Only sleeping, neck grabbed, or crit, can be sliced. + if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_PRECISE_MOUTH) // Only sleeping, neck grabbed, or crit, can be sliced. if(H.has_status_effect(/datum/status_effect/neck_slice)) user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \ "Their neck has already been already cut, you can't make the bleeding any worse!") @@ -120,4 +120,4 @@ if(eater.safety_mode || (eater.stat & (BROKEN|NOPOWER))) //I'm so sorry. return if(L.stat == DEAD && (L.butcher_results || L.guaranteed_butcher_results)) - Butcher(parent, L) \ No newline at end of file + Butcher(parent, L) diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 0ef13b514b..89c4deb2e9 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -11,8 +11,9 @@ var/list/datum/nanite_program/programs = list() var/max_programs = NANITE_PROGRAM_LIMIT - var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans, and does not display the program list on nanite scans - + var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans + var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners + /datum/component/nanites/Initialize(amount = 100, cloud = 0) if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup)) return COMPONENT_INCOMPATIBLE @@ -252,8 +253,8 @@ to_chat(user, "Cloud ID: [cloud_id ? cloud_id : "Disabled"]") to_chat(user, "================") to_chat(user, "Program List:") - if(stealth) - to_chat(user, "%#$ENCRYPTED&^@") + if(!diagnostics) + to_chat(user, "Diagnostics Disabled") else for(var/X in programs) var/datum/nanite_program/NP = X diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm new file mode 100644 index 0000000000..f070d9b22f --- /dev/null +++ b/code/datums/components/shrink.dm @@ -0,0 +1,42 @@ +/datum/component/shrink + var/olddens + var/oldopac + dupe_mode = COMPONENT_DUPE_HIGHLANDER + +/datum/component/shrink/Initialize(shrink_time) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + var/atom/parent_atom = parent + parent_atom.transform = parent_atom.transform.Scale(0.5,0.5) + olddens = parent_atom.density + oldopac = parent_atom.opacity + parent_atom.density = 0 + parent_atom.opacity = 0 + if(isliving(parent_atom)) + var/mob/living/L = parent_atom + L.add_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY, update=TRUE, priority=100, multiplicative_slowdown=4) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.unequip_everything() + C.visible_message("[C]'s belongings fall off of [C.p_them()] as they shrink down!", + "Your belongings fall away as everything grows bigger!") + if(ishuman(C)) + var/mob/living/carbon/human/H = C + H.physiology.damage_resistance -= 100//carbons take double damage while shrunk + parent_atom.visible_message("[parent_atom] shrinks down to a tiny size!", + "Everything grows bigger!") + QDEL_IN(src, shrink_time) + + +/datum/component/shrink/Destroy() + var/atom/parent_atom = parent + parent_atom.transform = parent_atom.transform.Scale(2,2) + parent_atom.density = olddens + parent_atom.opacity = oldopac + if(isliving(parent_atom)) + var/mob/living/L = parent_atom + L.remove_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + H.physiology.damage_resistance += 100 + ..() \ No newline at end of file diff --git a/code/datums/components/sizzle.dm b/code/datums/components/sizzle.dm new file mode 100644 index 0000000000..5e56dd15cb --- /dev/null +++ b/code/datums/components/sizzle.dm @@ -0,0 +1,25 @@ +/datum/component/sizzle + var/mutable_appearance/sizzling + var/sizzlealpha = 0 + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + +/datum/component/sizzle/Initialize() + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + setup_sizzle() + +/datum/component/sizzle/InheritComponent(datum/component/C, i_am_original) + var/atom/food = parent + sizzlealpha += 5 + sizzling.alpha = sizzlealpha + food.cut_overlay(sizzling) + food.add_overlay(sizzling) + +/datum/component/sizzle/proc/setup_sizzle() + var/atom/food = parent + var/icon/grill_marks = icon(initial(food.icon), initial(food.icon_state)) //we only want to apply grill marks to the initial icon_state for each object + grill_marks.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + grill_marks.Blend(icon('icons/obj/kitchen.dmi', "grillmarks"), ICON_MULTIPLY) //adds grill marks and the remaining white areas become transparent + sizzling = new(grill_marks) + sizzling.alpha = sizzlealpha + food.add_overlay(sizzling) \ No newline at end of file diff --git a/code/datums/components/storage/concrete/_concrete.dm b/code/datums/components/storage/concrete/_concrete.dm index f7ca711421..accc8cadaf 100644 --- a/code/datums/components/storage/concrete/_concrete.dm +++ b/code/datums/components/storage/concrete/_concrete.dm @@ -66,7 +66,7 @@ /datum/component/storage/concrete/_insert_physical_item(obj/item/I, override = FALSE) . = TRUE var/atom/real_location = real_location() - if(I.loc != real_location) + if(I.loc != real_location && real_location) I.forceMove(real_location) refresh_mob_views() diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index f0fca5db5a..599c492d4c 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -136,9 +136,10 @@ /datum/emote/sound var/sound //Sound to play when emote is called var/vary = FALSE //used for the honk borg emote + var/volume = 50 mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon) /datum/emote/sound/run_emote(mob/user, params) . = ..() if(.) - playsound(user.loc, sound, 50, vary) + playsound(user.loc, sound, volume, vary) diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index b84133faf7..f9a9e07aed 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -4,7 +4,7 @@ mid_sounds = list('sound/machines/shower/shower_mid1.ogg'=1,'sound/machines/shower/shower_mid2.ogg'=1,'sound/machines/shower/shower_mid3.ogg'=1) mid_length = 10 end_sound = 'sound/machines/shower/shower_end.ogg' - volume = 20 + volume = 10 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -32,7 +32,7 @@ mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1) mid_length = 2 end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg' - volume = 15 + volume = 5 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -43,3 +43,12 @@ mid_length = 10 end_sound = 'sound/machines/microwave/microwave-end.ogg' volume = 90 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/grill + mid_length = 2 + mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1) + volume = 10 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/code/datums/martial.dm b/code/datums/martial.dm index 32850c69df..c8caa853c3 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -8,6 +8,8 @@ var/deflection_chance = 0 //Chance to deflect projectiles var/reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction? var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. + var/dodge_chance = 0 + var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not var/help_verb var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist. var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 09a493a670..4ec16ac18c 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -10,7 +10,6 @@ help_verb = /mob/living/carbon/human/proc/CQC_help block_chance = 75 var/old_grab_state = null - var/restraining = FALSE /datum/martial_art/cqc/reset_streak(mob/living/carbon/human/new_target) . = ..() diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm new file mode 100644 index 0000000000..9e00c90a92 --- /dev/null +++ b/code/datums/martial/rising_bass.dm @@ -0,0 +1,158 @@ +#define SIDE_KICK_COMBO "DH" +#define SHOULDER_FLIP_COMBO "GHDGHH" +#define REPULSE_PUNCH_COMBO "GHGH" +#define FOOT_SMASH_COMBO "HH" +#define DEFT_SWITCH_COMBO "GDD" + +/datum/martial_art/the_rising_bass + name = "The Rising Bass" + id = MARTIALART_RISINGBASS + dodge_chance = 100 + allow_temp_override = FALSE + help_verb = /mob/living/carbon/human/proc/rising_bass_help + +/datum/martial_art/the_rising_bass/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(findtext(streak,SIDE_KICK_COMBO)) + streak = "" + sideKick(A,D) + return 1 + if(findtext(streak,SHOULDER_FLIP_COMBO)) + streak = "" + shoulderFlip(A,D) + return 1 + if(findtext(streak,REPULSE_PUNCH_COMBO)) + streak = "" + repulsePunch(A,D) + return 1 + if(findtext(streak,FOOT_SMASH_COMBO)) + streak = "" + footSmash(A,D) + return 1 + if(findtext(streak,DEFT_SWITCH_COMBO)) + streak = "" + deftSwitch(A,D) + return 1 + return 0 + + +/datum/martial_art/the_rising_bass/proc/sideKick(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!D.IsKnockdown() || D.lying == 0) + var/turf/H = get_step(D, A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH)) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) + D.visible_message("[A] kicks [D] in the side, sliding them over!", \ + "[A] kicks you in the side, forcing you to step away!") + playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + D.apply_damage(5, BRUTE, BODY_ZONE_CHEST) + D.Knockdown(60) + var/L = H + for(var/obj/i in H.contents) + if(!istype(i,/mob) && i.density == 1) + L = D.loc + D.forceMove(L) + log_combat(A, D, "side kicked (Rising Bass)") + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!D.IsKnockdown() || !D.lying) + var/turf/H = get_step(A, get_dir(D,A)) + var/L = H + for(var/obj/i in H.contents) + if(!istype(i,/mob) && i.density == 1)//(i.anchored == 1 && i.density == 1) || istype(i,/obj/structure) || istype(i,/turf/closed) + L = A.loc + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + D.visible_message("[A] flips [D] over their shoulder, slamming them into the ground!", \ + "[A] flips you over their shoulder, slamming you into the ground!") + playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + D.emote("scream") + D.apply_damage(10, BRUTE, BODY_ZONE_CHEST) + D.apply_damage(30, BRUTE, BODY_ZONE_HEAD) + D.Sleeping(60) + D.Knockdown(300) + D.forceMove(L) + log_combat(A, D, "shoulder flipped (Rising Bass)") + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!D.IsKnockdown() || !D.lying) + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + D.visible_message("[A] smashes [D] in the chest, throwing them away!", \ + "[A] smashes you in the chest, repelling you away!") + playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1) + var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A))) + D.throw_at(F, 10, 1) + D.apply_damage(10, BRUTE, BODY_ZONE_CHEST) + D.Knockdown(90) + log_combat(A, D, "repulse punched (Rising Bass)") + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_rising_bass/proc/footSmash(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!D.IsKnockdown() || !D.lying) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) + D.visible_message("[A] smashes their foot down on [D]'s foot!", \ + "[A] smashes your foot!") + playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1) + D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + D.dropItemToGround(D.get_active_held_item()) + log_combat(A, D, "foot smashed (Rising Bass)") + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_rising_bass/proc/deftSwitch(mob/living/carbon/human/A, mob/living/carbon/human/D) + if(!D.IsKnockdown() || !D.lying) + if (D.get_active_held_item()) + var/obj/item/G = D.get_active_held_item() + if (G && !(G.item_flags & (ABSTRACT|DROPDEL)) && D.temporarilyRemoveItemFromInventory(G)) + A.put_in_hands(G) + D.visible_message("[A] slaps [D]'s hands, taking [G] from them!", \ + "[A] slaps you, taking [G] from you!") + log_combat(A, D, "deft switched (Rising Bass)") + return 1 + else + to_chat(A, "[G] can't be taken out of [D]'s hands!") + return 0 + +/datum/martial_art/the_rising_bass/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + add_to_streak("D",D) + if(check_streak(A,D)) + return 1 + return ..() + +/datum/martial_art/the_rising_bass/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + add_to_streak("H",D) + if(check_streak(A,D)) + return 1 + return ..() + +/datum/martial_art/the_rising_bass/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + add_to_streak("G",D) + if(check_streak(A,D)) + return 1 + return ..() + +/mob/living/carbon/human/proc/rising_bass_help() + set name = "Recall Teachings" + set desc = "Remember the martial techniques of the Rising Bass clan." + set category = "Rising Bass" + + to_chat(usr, "You retreat inward and recall the teachings of the Rising Bass...") + + to_chat(usr, "Side Kick: Disarm Harm. Forces opponent to step to the side.") + to_chat(usr, "Shoulder Flip: Grab Harm Disarm Grab Harm Harm. Flips opponent over your shoulder and stuns.") + to_chat(usr, "Repulse Punch: Grab Harm Grab Harm. Slams the opponent far away from you.") + to_chat(usr, "Foot Smash: Harm Harm. Stuns opponent, minor damage.") + to_chat(usr, "Deft Switch: Grab Disarm Disarm. Switches the opponent's held item for your own. Most useful with nothing in your hand.") + +/datum/martial_art/the_rising_bass/teach(mob/living/carbon/human/H, make_temporary = FALSE) + . = ..() + if(!.) + return + ADD_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT) + ADD_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, RISING_BASS_TRAIT) + +/datum/martial_art/the_rising_bass/on_remove(mob/living/carbon/human/H) + . = ..() + REMOVE_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT) + REMOVE_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, RISING_BASS_TRAIT) \ No newline at end of file diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index bb652208ee..85f8a4a101 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -185,9 +185,8 @@ righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' block_chance = 50 -/obj/item/twohanded/bostaff/update_icon() +/obj/item/twohanded/bostaff/update_icon_state() icon_state = "bostaff[wielded]" - return /obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) add_fingerprint(user) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index d1b4e51a7d..a0aa729a8d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -135,6 +135,9 @@ if(L.client && L.client.prefs) L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting... L.update_arousal_hud() //Removes the old icon + if (L.client.prefs.auto_ooc) + if (L.client.prefs.chat_toggles & CHAT_OOC) + L.client.prefs.chat_toggles ^= CHAT_OOC SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character) diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 19be10e668..94fd08535f 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -134,6 +134,12 @@ mood_change = 3 timeout = 3000 +/datum/mood_event/breakfast + description = "Nothing like a hearty breakfast to start the shift.\n" + mood_change = 2 + timeout = 15 MINUTES + +//Power gamer stuff below /datum/mood_event/drankblood description = "I have fed greedly from that which nourishes me.\n" mood_change = 10 @@ -143,6 +149,7 @@ description = "I slept in a coffin during the day. I feel whole again.\n" mood_change = 8 timeout = 1200 + //Cursed stuff below. /datum/mood_event/orgasm diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index f02b7f185f..82138e6e34 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -95,6 +95,7 @@ message = replacetext(message," ugly "," beautiful ") message = replacetext(message," douchbag "," nice guy ") message = replacetext(message," whore "," lady ") + message = replacetext(message," gamer "," intellectual ") message = replacetext(message," nerd "," smarty pants ") message = replacetext(message," moron "," fun person ") message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ") diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 8555e4cf3f..4795f8da60 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -3,6 +3,7 @@ var/turf/master_turf //The center of the wave var/steps=0 //How far we've moved var/intensity //How strong it was originaly + var/remaining_contam //How much contaminated material it still has var/range_modifier //Higher than 1 makes it drop off faster, 0.5 makes it drop off half etc var/move_dir //The direction of movement var/list/__dirs //The directions to the side of the wave, stored for easy looping @@ -18,6 +19,7 @@ __dirs+=turn(dir, -90) intensity = _intensity + remaining_contam = intensity range_modifier = _range_modifier can_contaminate = _can_contaminate @@ -46,8 +48,9 @@ qdel(src) return - radiate(atoms, FLOOR(strength, 1)) - + if(radiate(atoms, FLOOR(min(strength,remaining_contam), 1))) + //oof ow ouch + remaining_contam = max(0,remaining_contam-((min(strength,remaining_contam)-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT)) check_obstructions(atoms) // reduce our overall strength if there are radiation insulators /datum/radiation_wave/proc/get_rad_atoms() @@ -89,7 +92,8 @@ intensity *= (1-((1-thing.rad_insulation)/width)) /datum/radiation_wave/proc/radiate(list/atoms, strength) - var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier)) + var/can_contam = strength >= RAD_MINIMUM_CONTAMINATION + var/list/contam_atoms = list() for(var/k in 1 to atoms.len) var/atom/thing = atoms[k] if(!thing) @@ -109,8 +113,14 @@ )) if(!can_contaminate || blacklisted[thing.type]) continue - if(prob(contamination_chance)) // Only stronk rads get to have little baby rads - if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION) - continue - var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT + if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION) + continue + contam_atoms += thing + var/did_contam = 0 + if(length(can_contam)) + var/rad_strength = ((strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT)/contam_atoms.len + for(var/k in 1 to contam_atoms.len) + var/atom/thing = contam_atoms[k] thing.AddComponent(/datum/component/radioactive, rad_strength, source) + did_contam = 1 + return did_contam diff --git a/code/datums/ruins/station.dm b/code/datums/ruins/station.dm new file mode 100644 index 0000000000..156356788f --- /dev/null +++ b/code/datums/ruins/station.dm @@ -0,0 +1,21 @@ +/datum/map_template/ruin/station + prefix = "_maps/RandomRuins/StationRuins/" + cost = 0 + +// Boxstation + // Engine + +/datum/map_template/ruin/station/box/engine + id = "engine_sm" + suffix = "Box/Engine/engine_sm.dmm" + name = "Engine SM" + +/datum/map_template/ruin/station/box/engine/singulo + id = "engine_singulo" + suffix = "Box/Engine/engine_singulo.dmm" + name = "Engine Singulo" + +/datum/map_template/ruin/station/box/engine/tesla + id = "engine_tesla" + suffix = "Box/Engine/engine_tesla.dmm" + name = "Engine Tesla" \ No newline at end of file diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 5c4fc61827..5dab98d5ca 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -292,6 +292,7 @@ var/mob/living/carbon/C = owner for(var/X in C.bodyparts) var/obj/item/bodypart/BP = X + BP.max_damage *= 10 BP.brute_dam *= 10 BP.burn_dam *= 10 owner.toxloss *= 10 @@ -377,6 +378,7 @@ var/obj/item/bodypart/BP = X BP.brute_dam *= 0.1 BP.burn_dam *= 0.1 + BP.max_damage /= 10 owner.toxloss *= 0.1 owner.oxyloss *= 0.1 owner.cloneloss *= 0.1 diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 15ac70a2c7..b74f24c469 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -208,3 +208,15 @@ /datum/quirk/bloodpressure/remove() var/mob/living/M = quirk_holder M.blood_ratio = 1 + +/datum/quirk/night_vision + name = "Night Vision" + desc = "You can see slightly more clearly in full darkness than most people." + value = 1 + mob_trait = TRAIT_NIGHT_VISION + gain_text = "The shadows seem a little less dark." + lose_text = "Everything seems a little darker." + +/datum/quirk/night_vision/on_spawn() + var/mob/living/carbon/human/H = quirk_holder + H.update_sight() diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 0ae8d5914f..e712a38df1 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -88,15 +88,6 @@ if(quirk_holder) quirk_holder.remove_client_colour(/datum/client_colour/monochrome) -/datum/quirk/crocrin_immunity - name = "Crocin Immunity" - desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction." - mob_trait = TRAIT_CROCRIN_IMMUNE - value = 0 - gain_text = "You feel more prudish." - lose_text = "You don't feel as prudish as before." - medical_record_text = "Patient exhibits a special gene that makes them immune to aphrodisiacs." - /datum/quirk/libido name = "Nymphomania" desc = "You're always feeling a bit in heat. Also, you get aroused faster than usual." @@ -131,26 +122,6 @@ gain_text = "You feel like exposing yourself to the world." lose_text = "Indecent exposure doesn't sound as charming to you anymore." -/datum/quirk/pharmacokinesis //Prevents unwanted organ additions. - name = "Acute hepatic pharmacokinesis" - desc = "You've a rare genetic disorder that causes Incubus draft and Sucubus milk to be absorbed by your liver instead." - value = 0 - mob_trait = TRAIT_PHARMA - lose_text = "Your liver feels different." - medical_record_text = "Non-invasive tests report that the patient's metabolism is indeed incompatible with a certain \"stimulants\"." - var/active = FALSE - var/power = 0 - var/cachedmoveCalc = 1 - -/datum/quirk/assblastusa - name = "Buns of Steel" - desc = "You've never skipped ass day. With this trait, you are completely immune to all forms of ass slapping and anyone who tries to slap your rock hard ass usually gets a broken hand." - mob_trait = TRAIT_ASSBLASTUSA - value = 0 - medical_record_text = "Patient never skipped ass day." - gain_text = "Your ass rivals those of golems." - lose_text = "Your butt feels more squishy and slappable." - /datum/quirk/alcohol_intolerance name = "Alcohol Intolerance" desc = "You take toxin damage from alcohol rather than getting drunk." diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 6765cdf2cd..0d763aa5ad 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -22,27 +22,17 @@ target_trait = ZTRAIT_STATION immunity_type = "rad" + + var/radiation_intensity = 100 /datum/weather/rad_storm/telegraph() ..() status_alarm(TRUE) - /datum/weather/rad_storm/weather_act(mob/living/L) var/resist = L.getarmor(null, "rad") - if(prob(40)) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.dna && !HAS_TRAIT(H, TRAIT_RADIMMUNE)) - if(prob(max(0,100-resist))) - H.randmuti() - if(prob(50)) - if(prob(90)) - H.randmutb() - else - H.randmutg() - H.domutcheck() - L.rad_act(20) + var/ratio = 1 - (min(resist, 100) / 100) + L.rad_act(radiation_intensity * ratio) /datum/weather/rad_storm/end() if(..()) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index f5e285a5c2..f65ea98cab 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -326,8 +326,13 @@ GLOBAL_LIST_EMPTY(teleportlocs) F.update_fire_light(fire) for(var/obj/machinery/light/L in src) L.update() - -/area/proc/update_icon() +/** + * Update the icon state of the area + * + * Im not sure what the heck this does, somethign to do with weather being able to set icon + * states on areas?? where the heck would that even display? + */ +/area/update_icon_state() var/weather_icon for(var/V in SSweather.processing) var/datum/weather/W = V @@ -337,7 +342,10 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(!weather_icon) icon_state = null -/area/space/update_icon() +/** + * Update the icon of the area (overridden to always be null for space + */ +/area/space/update_icon_state() icon_state = null /* diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 7de5707032..36b701aae1 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -24,6 +24,8 @@ var/list/add_overlays // a very temporary list of overlays to add var/list/managed_vis_overlays //vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays + ///overlays managed by update_overlays() to prevent removing overlays that weren't added by the same proc + var/list/managed_overlays var/datum/proximity_monitor/proximity_monitor var/buckle_message_cooldown = 0 @@ -45,7 +47,7 @@ /atom/New(loc, ...) //atom creation method that preloads variables at creation if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New() - GLOB._preloader.load(src) + world.preloader_load(src) if(datum_flags & DF_USE_TAG) GenerateTag() @@ -164,7 +166,7 @@ return FALSE -/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) +/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) if(does_attack_animation) user.changeNext_move(CLICK_CD_MELEE) @@ -310,6 +312,32 @@ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) +/// Updates the icon of the atom +/atom/proc/update_icon() + // I expect we're going to need more return flags and options in this proc + var/signalOut = SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON) + + if(!(signalOut & COMSIG_ATOM_NO_UPDATE_ICON_STATE)) + update_icon_state() + + if(!(signalOut & COMSIG_ATOM_NO_UPDATE_OVERLAYS)) + var/list/new_overlays = update_overlays() + if(managed_overlays) + cut_overlay(managed_overlays) + managed_overlays = null + if(length(new_overlays)) + managed_overlays = new_overlays + add_overlay(new_overlays) + +/// Updates the icon state of the atom +/atom/proc/update_icon_state() + +/// Updates the overlays of the atom +/atom/proc/update_overlays() + SHOULD_CALL_PARENT(1) + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) + /atom/proc/relaymove(mob/user) if(buckle_message_cooldown <= world.time) buckle_message_cooldown = world.time + 50 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ef20b6e35e..7c57de74a4 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -515,10 +515,10 @@ step(src, AM.dir) ..() -/atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback) - return throw_at(target, range, speed, thrower, spin, diagonals_first, callback) +/atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback, messy_throw = TRUE) + return throw_at(target, range, speed, thrower, spin, diagonals_first, callback, messy_throw) -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback) //If this returns FALSE then callback will not be called. +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback, messy_throw = TRUE) //If this returns FALSE then callback will not be called. . = FALSE if (!target || speed <= 0) return diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 49a336e16a..11898701fa 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -57,7 +57,6 @@ ..() if(visualsOnly) return - H.dna.add_mutation(CLOWNMUT) H.dna.add_mutation(SMILE) /datum/outfit/syndicate/clownop/leader diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 67ea855466..821c819664 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -1,14 +1,3 @@ -#define CURRENT_LIVING_PLAYERS 1 -#define CURRENT_LIVING_ANTAGS 2 -#define CURRENT_DEAD_PLAYERS 3 -#define CURRENT_OBSERVERS 4 - -#define ONLY_RULESET 1 -#define HIGHLANDER_RULESET 2 -#define TRAITOR_RULESET 4 -#define MINOR_RULESET 8 - -#define RULESET_STOP_PROCESSING 1 // -- Injection delays GLOBAL_VAR_INIT(dynamic_latejoin_delay_min, (10 MINUTES)) @@ -52,6 +41,8 @@ GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset) // Forced threat level, setting this to zero or higher forces the roundstart threat to the value. GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) +GLOBAL_VAR_INIT(dynamic_storyteller_type, null) + /datum/game_mode/dynamic name = "dynamic mode" config_tag = "dynamic" @@ -60,7 +51,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) announce_text = "Dynamic mode!" // This needs to be changed maybe reroll_friendly = FALSE; - + // Current storyteller + var/datum/dynamic_storyteller/storyteller = null // Threat logging vars /// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations var/threat_level = 0 @@ -164,6 +156,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) dat += "Threat to Spend: [threat] \[Adjust\] \[View Log\]
    " dat += "
    " + dat += "Storyteller: [storyteller.name]
    " dat += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width].
    " dat += "On average, [peaceful_percentage]% of the rounds are more peaceful.
    " dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"]
    " @@ -178,7 +171,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) dat += "[DR.ruletype] - [DR.name]
    " else dat += "none.
    " - dat += "
    Injection Timers: ([get_injection_chance(TRUE)]% chance)
    " + dat += "
    Injection Timers: ([storyteller.get_injection_chance(TRUE)]% chance)
    " dat += "Latejoin: [(latejoin_injection_cooldown-world.time)>60*10 ? "[round((latejoin_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(latejoin_injection_cooldown-world.time)] seconds"] \[Now!\]
    " dat += "Midround: [(midround_injection_cooldown-world.time)>60*10 ? "[round((midround_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(midround_injection_cooldown-world.time)] seconds"] \[Now!\]
    " dat += "Event: [(event_injection_cooldown-world.time)>60*10 ? "[round((event_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(event_injection_cooldown-world.time)] seconds"] \[Now!\]
    " @@ -300,6 +293,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) /datum/game_mode/dynamic/proc/log_threat(var/log_str,var/verbose = FALSE) threat_log_verbose += ("[worldtime2text()]: "+log_str) + SSblackbox.record_feedback("tally","dynamic_threat_log",1,log_str) if(!verbose) threat_log += log_str @@ -329,8 +323,15 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) peaceful_percentage = round(LORENTZ_CUMULATIVE_DISTRIBUTION(relative_threat, GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width), 0.01)*100 threat = threat_level + SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Initial threat level") + SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_centre,"Curve centre") + SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_width,"Curve width") + SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful") /datum/game_mode/dynamic/can_start() + storyteller = new GLOB.dynamic_storyteller_type // this is where all the initialization happens + storyteller.on_start() + SSblackbox.record_feedback("text","dynamic_storyteller",1,storyteller.name) message_admins("Dynamic mode parameters for the round:") message_admins("Centre is [GLOB.dynamic_curve_centre], Width is [GLOB.dynamic_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].") message_admins("Stacking limit is [GLOB.dynamic_stacking_limit], Classic secret is [GLOB.dynamic_classic_secret ? "Enabled" : "Disabled"], High population limit is [GLOB.dynamic_high_pop_limit].") @@ -340,18 +341,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(GLOB.dynamic_forced_threat_level >= 0) threat_level = round(GLOB.dynamic_forced_threat_level, 0.1) threat = threat_level + SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Threat level (forced)") else generate_threat() - var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min) - latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time + storyteller.start_injection_cooldowns() - var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max) - midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time - - var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) - log_game("DYNAMIC: Dynamic Mode initialized with a Threat Level of... [threat_level]!") initial_threat_level = threat_level return TRUE @@ -384,7 +379,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if (roundstart_rules.len <= 0) log_game("DYNAMIC: [roundstart_rules.len] rules.") return TRUE - + SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Roundstart rules considered") + SSblackbox.record_feedback("tally","dynamic",roundstart_pop_ready,"Players readied up") if(GLOB.dynamic_forced_roundstart_ruleset.len > 0) rigged_roundstart() else @@ -422,13 +418,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if (GLOB.dynamic_forced_extended) log_game("DYNAMIC: Starting a round of forced extended.") return TRUE - var/list/drafted_rules = list() - for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) - if (rule.acceptable(roundstart_pop_ready, threat_level) && threat >= rule.cost) // If we got the population and threat required - rule.candidates = candidates.Copy() - rule.trim_candidates() - if (rule.ready() && rule.candidates.len > 0) - drafted_rules[rule] = rule.weight + var/list/drafted_rules = storyteller.roundstart_draft() if(!drafted_rules.len) message_admins("Not enough threat level for roundstart antags!") log_game("DYNAMIC: Not enough threat level for roundstart antags!") @@ -537,6 +527,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(rule.execute()) if(rule.persistent) current_rules += rule + SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info()) return TRUE rule.clean_up() // Refund threat, delete teams and so on. executed_rules -= rule @@ -615,6 +606,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) else if(new_rule.flags & ONLY_RULESET) only_ruleset_executed = TRUE log_game("DYNAMIC: Making a call to a specific ruleset...[new_rule.name]!") + SSblackbox.record_feedback("associative","dynamic_rulesets",1,new_rule.get_blackbox_info()) executed_rules += new_rule if (new_rule.persistent) current_rules += new_rule @@ -639,11 +631,11 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) message_admins("[key_name(M)] joined the station, and was selected by the [rule.name] ruleset.") log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.") executed_rules += rule + SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info()) rule.candidates.Cut() if (rule.persistent) current_rules += rule return TRUE - rule.clean_up() stack_trace("The [rule.ruletype] rule \"[rule.name]\" failed to execute.") return FALSE @@ -655,56 +647,45 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) for (var/datum/dynamic_ruleset/rule in current_rules) if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing. current_rules -= rule - + SSblackbox.record_feedback("tally","dynamic",1,"Rulesets finished") + SSblackbox.record_feedback("associative","dynamic_rulesets_finished",1,rule.get_blackbox_info()) + + storyteller.do_process() + if (midround_injection_cooldown < world.time) if (GLOB.dynamic_forced_extended) return // Somehow it managed to trigger midround multiple times so this was moved here. // There is no way this should be able to trigger an injection twice now. - var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) - midround_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + world.time) + midround_injection_cooldown = storyteller.get_midround_cooldown() + world.time // Time to inject some threat into the round if(EMERGENCY_ESCAPED_OR_ENDGAMED) // Unless the shuttle is gone return + if((world.realtime - SSshuttle.realtimeofstart) > SSshuttle.auto_call) // no rules after shuttle is auto-called + return message_admins("DYNAMIC: Checking for midround injection.") log_game("DYNAMIC: Checking for midround injection.") update_playercounts() - if (get_injection_chance()) - var/cur_threat_frac = threat/threat_level - var/list/drafted_rules = list() - var/antag_num = current_players[CURRENT_LIVING_ANTAGS].len - for (var/datum/dynamic_ruleset/midround/rule in midround_rules) - // if there are antags OR the rule is an antag rule, antag_acceptable will be true. - if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) - // Classic secret : only autotraitor/minor roles - if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) - continue - rule.trim_candidates() - if (rule.ready()) - if(!antag_num) - drafted_rules[rule] = round(rule.get_weight() + (rule.cost * cur_threat_frac)) - else - drafted_rules[rule] = rule.get_weight() + if (prob(storyteller.get_injection_chance())) + SSblackbox.record_feedback("tally","dynamic",1,"Attempted midround injections") + var/list/drafted_rules = storyteller.midround_draft() if (drafted_rules.len > 0) + SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections") picking_midround_latejoin_rule(drafted_rules) - else - midround_injection_cooldown = (midround_injection_cooldown + world.time)/2 + // get_injection_chance can do things on fail if(event_injection_cooldown < world.time) - var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) + SSblackbox.record_feedback("tally","dynamic",1,"Attempted event injections") + event_injection_cooldown = storyteller.get_event_cooldown() + world.time message_admins("DYNAMIC: Doing event injection.") log_game("DYNAMIC: Doing event injection.") update_playercounts() - var/list/drafted_rules = list() - for(var/datum/dynamic_ruleset/event/rule in events) - if(rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) - if(rule.ready()) - drafted_rules[rule] = rule.get_weight() + var/list/drafted_rules = storyteller.event_draft() if(drafted_rules.len > 0) + SSblackbox.record_feedback("tally","dynamic",1,"Successful event injections") picking_midround_latejoin_rule(drafted_rules) /// Updates current_players. @@ -721,38 +702,13 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if (M.mind && (M.mind.special_role || M.mind.antag_datums?.len > 0)) current_players[CURRENT_LIVING_ANTAGS].Add(M) else - if (istype(M,/mob/dead/observer)) + if (isobserver(M)) var/mob/dead/observer/O = M if (O.started_as_observer) // Observers current_players[CURRENT_OBSERVERS].Add(M) continue current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow) -/// Gets the chance for latejoin and midround injection, the dry_run argument is only used for forced injection. -/datum/game_mode/dynamic/proc/get_injection_chance(dry_run = FALSE) - if(forced_injection) - forced_injection = !dry_run - return 100 - var/chance = 0 - // If the high pop override is in effect, we reduce the impact of population on the antag injection chance - var/high_pop_factor = (current_players[CURRENT_LIVING_PLAYERS].len >= GLOB.dynamic_high_pop_limit) - var/max_pop_per_antag = max(5,15 - round(threat_level/10) - round(current_players[CURRENT_LIVING_PLAYERS].len/(high_pop_factor ? 10 : 5))) - if (!current_players[CURRENT_LIVING_ANTAGS].len) - chance += 80 // No antags at all? let's boost those odds! - else - var/current_pop_per_antag = current_players[CURRENT_LIVING_PLAYERS].len / current_players[CURRENT_LIVING_ANTAGS].len - if (current_pop_per_antag > max_pop_per_antag) - chance += min(50, 25+10*(current_pop_per_antag-max_pop_per_antag)) - else - chance += 25-10*(max_pop_per_antag-current_pop_per_antag) - if (current_players[CURRENT_DEAD_PLAYERS].len > current_players[CURRENT_LIVING_PLAYERS].len) - chance -= 30 // More than half the crew died? ew, let's calm down on antags - if (threat > 70) - chance += 15 - if (threat < 30) - chance -= 15 - return round(max(0,chance)) - /// Removes type from the list /datum/game_mode/dynamic/proc/remove_from_list(list/type_list, type) for(var/I in type_list) @@ -783,7 +739,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) return if(EMERGENCY_ESCAPED_OR_ENDGAMED) // No more rules after the shuttle has left return - + if((world.realtime - SSshuttle.realtimeofstart) > SSshuttle.auto_call) // no rules after shuttle is auto-called + return update_playercounts() if (forced_latejoin_rule) @@ -794,30 +751,17 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) picking_midround_latejoin_rule(list(forced_latejoin_rule), forced = TRUE) forced_latejoin_rule = null - else if (latejoin_injection_cooldown < world.time && prob(get_injection_chance())) - var/list/drafted_rules = list() - for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules) - if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) - // Classic secret : only autotraitor/minor roles - if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) - continue - // No stacking : only one round-ender, unless threat level > stacking_limit. - if (threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) - if(rule.flags & HIGHLANDER_RULESET && highlander_executed) - continue - - rule.candidates = list(newPlayer) - rule.trim_candidates() - if (rule.ready()) - drafted_rules[rule] = rule.get_weight() - + else if (latejoin_injection_cooldown < world.time && prob(storyteller.get_injection_chance())) + SSblackbox.record_feedback("tally","dynamic",1,"Attempted latejoin injections") + var/list/drafted_rules = storyteller.latejoin_draft(newPlayer) if (drafted_rules.len > 0 && picking_midround_latejoin_rule(drafted_rules)) - var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) - latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time + SSblackbox.record_feedback("tally","dynamic",1,"Successful latejoin injections") + latejoin_injection_cooldown = storyteller.get_latejoin_cooldown() + world.time /// Refund threat, but no more than threat_level. /datum/game_mode/dynamic/proc/refund_threat(regain) threat = min(threat_level,threat+regain) + SSblackbox.record_feedback("tally","dynamic_threat",regain,"Refunded threat") log_threat("[regain] refunded. Threat is now [threat].", verbose = TRUE) /// Generate threat and increase the threat_level if it goes beyond, capped at 100 @@ -825,11 +769,13 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) threat = min(100, threat+gain) if(threat > threat_level) threat_level = threat + SSblackbox.record_feedback("tally","dynamic_threat",gain,"Created threat") log_threat("[gain] created. Threat is now [threat] and threat level is now [threat_level].", verbose = TRUE) /// Expend threat, can't fall under 0. /datum/game_mode/dynamic/proc/spend_threat(cost) threat = max(threat-cost,0) + SSblackbox.record_feedback("tally","dynamic_threat",cost,"Threat spent") log_threat("[cost] spent. Threat is now [threat].", verbose = TRUE) /// Turns the value generated by lorentz distribution to threat value between 0 and 100. diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index 0c8ec0a2b8..2f143f7233 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -80,6 +80,13 @@ /// Delay for when execute will get called from the time of post_setup (roundstart) or process (midround/latejoin). /// Make sure your ruleset works with execute being called during the game when using this, and that the clean_up proc reverts it properly in case of faliure. var/delay = 0 + /// List of tags for use in storytellers. + var/list/property_weights = list() + /// Whether or not recent-round weight values are taken into account for this ruleset. + /// Weight reduction uses the same values as secret's recent-round mode weight reduction. + var/always_max_weight = FALSE + /// Weight reduction by recent-rounds. Saved on new. + var/weight_mult = 1 /datum/dynamic_ruleset/New() ..() @@ -91,8 +98,13 @@ var/costs = CONFIG_GET(keyed_list/dynamic_cost) var/requirementses = CONFIG_GET(keyed_list/dynamic_requirements) // can't damn well use requirements var/high_population_requirements = CONFIG_GET(keyed_list/dynamic_high_population_requirement) + var/list/repeated_mode_adjust = CONFIG_GET(number_list/repeated_mode_adjust) if(config_tag in weights) - weight = weights[config_tag] + if(!always_max_weight && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3) + var/saved_dynamic_rules = SSpersistence.saved_dynamic_rules + for(var/i in 1 to 3) + if(config_tag in saved_dynamic_rules[i]) + weight_mult -= (repeated_mode_adjust[i]/100) if(config_tag in costs) cost = costs[config_tag] if(config_tag in requirementses) @@ -115,12 +127,15 @@ /// If your rule has extra checks, such as counting security officers, do that in ready() instead /datum/dynamic_ruleset/proc/acceptable(population = 0, threat_level = 0) if(minimum_players > population) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to low pop") return FALSE if(maximum_players > 0 && population > maximum_players) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to high pop") return FALSE if (population >= GLOB.dynamic_high_pop_limit) indice_pop = 10 if(threat_level < high_population_requirement) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level") log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[high_population_requirement]") return FALSE else @@ -132,6 +147,7 @@ log_game("DYNAMIC: requirements and antag_cap lists have different lengths in ruleset [name]. Likely config issue, report this.") indice_pop = min(requirements.len,round(population/pop_per_requirement)+1) if(threat_level < requirements[indice_pop]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level") log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[requirements[indice_pop]]") return FALSE else @@ -178,6 +194,7 @@ /// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail! /datum/dynamic_ruleset/proc/ready(forced = 0) if (required_candidates > candidates.len) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough candidates") return FALSE return TRUE @@ -212,6 +229,24 @@ /datum/dynamic_ruleset/proc/check_finished() return FALSE +/// Returns a list to be displayed on statbus. +/datum/dynamic_ruleset/proc/get_blackbox_info() + var/list/ruleset_data = list() + ruleset_data["name"] = name + ruleset_data["rule_type"] = ruletype + ruleset_data["cost"] = total_cost + ruleset_data["weight"] = weight + ruleset_data["scaled_times"] = scaled_times + ruleset_data["antagonist_type"] = antag_datum + ruleset_data["population_tier"] = indice_pop + ruleset_data["assigned"] = list() + for (var/datum/mind/M in assigned) + var/assigned_data = list() + assigned_data["key"] = M.key + assigned_data["name"] = M.name + ruleset_data["assigned"] += list(assigned_data) + return ruleset_data + ////////////////////////////////////////////// // // // ROUNDSTART RULESETS // diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm index 4ac8cc91d3..23e94c4065 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm @@ -3,6 +3,17 @@ var/typepath // typepath of the event var/triggering +/datum/dynamic_ruleset/event/get_blackbox_info() + var/list/ruleset_data = list() + ruleset_data["name"] = name + ruleset_data["rule_type"] = ruletype + ruleset_data["cost"] = total_cost + ruleset_data["weight"] = weight + ruleset_data["scaled_times"] = scaled_times + ruleset_data["event_type"] = typepath + ruleset_data["population_tier"] = indice_pop + return ruleset_data + /datum/dynamic_ruleset/event/execute() var/datum/round_event/E = new typepath() E.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) @@ -26,6 +37,7 @@ var/threat = round(mode.threat_level/10) if (job_check < required_enemies[threat]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE return TRUE @@ -46,6 +58,7 @@ cost = 10 blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear) requirements = list(70,60,50,50,40,40,40,30,20,15) + property_weights = list("story_potential" = 1, "trust" = 1, "chaos" = 1) high_population_requirement = 15 /datum/dynamic_ruleset/event/pirates/ready(forced = FALSE) @@ -69,6 +82,7 @@ cost = 10 requirements = list(70,60,50,50,40,40,40,30,20,15) high_population_requirement = 15 + property_weights = list("chaos" = 1, "valid" = 1) ////////////////////////////////////////////// // // @@ -88,6 +102,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) // yes, can happen on fake-extended high_population_requirement = 5 repeatable = TRUE + property_weights = list("chaos" = 1, "extended" = 2) /datum/dynamic_ruleset/event/ventclog/ready() if(mode.threat_level > 30 && mode.threat >= 5 && prob(20)) @@ -121,10 +136,12 @@ required_enemies = list(1,1,0,0,0,0,0,0,0,0) weight = 4 // no repeatable weight decrease. too variable to be unfun multiple times in one round - cost = 3 + cost = 1 requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("story_potential" = 1, "extended" = 1) + always_max_weight = TRUE ////////////////////////////////////////////// // // @@ -143,15 +160,19 @@ repeatable_weight_decrease = 2 requirements = list(60,50,40,30,30,30,30,30,30,30) high_population_requirement = 30 + property_weights = list("extended" = -2) /datum/dynamic_ruleset/event/meteor_wave/ready() if(mode.threat_level > 40 && mode.threat >= 25 && prob(20)) + name = "Meteor Wave: Threatening" cost = 25 typepath = /datum/round_event/meteor_wave/threatening else if(mode.threat_level > 50 && mode.threat >= 40 && prob(30)) + name = "Meteor Wave: Catastrophic" cost = 40 typepath = /datum/round_event/meteor_wave/catastrophic else + name = "Meteor Wave: Normal" cost = 15 typepath = /datum/round_event/meteor_wave return ..() @@ -174,6 +195,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/anomaly_flux name = "Anomaly: Hyper-Energetic Flux" @@ -187,6 +209,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 10 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/anomaly_gravitational name = "Anomaly: Gravitational" @@ -198,6 +221,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/anomaly_pyroclastic name = "Anomaly: Pyroclastic" @@ -211,6 +235,7 @@ requirements = list(10,10,10,10,10,10,10,10,10,10) high_population_requirement = 10 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/anomaly_vortex name = "Anomaly: Vortex" @@ -224,6 +249,7 @@ requirements = list(10,10,10,10,10,10,10,10,10,10) high_population_requirement = 10 repeatable = TRUE + property_weights = list("extended" = 1) ////////////////////////////////////////////// // // @@ -243,6 +269,7 @@ requirements = list(10,10,10,10,10,10,10,10,10,10) high_population_requirement = 10 repeatable = TRUE + property_weights = list("extended" = -1, "chaos" = 1) /datum/dynamic_ruleset/event/carp_migration name = "Carp Migration" @@ -254,6 +281,7 @@ requirements = list(10,10,10,10,10,10,10,10,10,10) high_population_requirement = 10 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/communications_blackout name = "Communications Blackout" @@ -267,6 +295,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1, "chaos" = 1) /datum/dynamic_ruleset/event/processor_overload name = "Processor Overload" @@ -280,6 +309,8 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1, "chaos" = 1) + always_max_weight = TRUE /datum/dynamic_ruleset/event/space_dust name = "Minor Space Dust" @@ -293,6 +324,8 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1) + always_max_weight = TRUE /datum/dynamic_ruleset/event/major_dust name = "Major Space Dust" @@ -306,6 +339,7 @@ requirements = list(10,10,10,10,10,10,10,10,10,10) high_population_requirement = 10 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/electrical_storm name = "Electrical Storm" @@ -319,6 +353,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1) /datum/dynamic_ruleset/event/heart_attack name = "Random Heart Attack" @@ -332,6 +367,8 @@ requirements = list(101,101,101,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + property_weights = list("extended" = 1) + always_max_weight = TRUE /datum/dynamic_ruleset/event/radiation_storm name = "Radiation Storm" @@ -343,3 +380,4 @@ required_enemies = list(1,1,1,1,1,1,1,1,1,1) requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 + property_weights = list("extended" = 1,"chaos" = 1) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 5810fd0ae0..f4e9971a05 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -36,9 +36,9 @@ continue // Dead players cannot count as opponents if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles))) job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - var/threat = round(mode.threat_level/10) if (job_check < required_enemies[threat]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE return ..() @@ -69,6 +69,14 @@ high_population_requirement = 15 repeatable = TRUE flags = TRAITOR_RULESET + property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1) + always_max_weight = TRUE + +/datum/dynamic_ruleset/latejoin/infiltrator/execute() + . = ..() + for(var/datum/mind/M in assigned) + log_admin("[M.name] was made into a traitor by dynamic.") + message_admins("[M.name] was made into a traitor by dynamic.") ////////////////////////////////////////////// // // @@ -93,6 +101,7 @@ requirements = list(101,101,70,40,40,40,40,40,40,40) high_population_requirement = 40 flags = HIGHLANDER_RULESET + property_weights = list("trust" = -2, "chaos" = 2, "extended" = -2, "valid" = 2, "conversion" = 1) var/required_heads_of_staff = 3 var/finished = FALSE var/datum/team/revolution/revolution @@ -122,6 +131,8 @@ revolution.update_objectives() revolution.update_heads() SSshuttle.registerHostileEnvironment(src) + log_admin("[M.name] was made into a revolutionary by dynamic.") + message_admins("[M.name] was made into a revolutionary by dynamic.") return TRUE else log_game("DYNAMIC: [ruletype] [name] discarded [M.name] from head revolutionary due to ineligibility.") @@ -186,30 +197,31 @@ ////////////////////////////////////////////// // // -// VAMPIRE // +// BLOODSUCKERS // // // ////////////////////////////////////////////// -/* -/datum/dynamic_ruleset/latejoin/vampire - name = "vampire" - config_tag = "vampire_latejoin" - antag_flag = ROLE_VAMPIRE - antag_datum = ANTAG_DATUM_VAMPIRE - protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") +/datum/dynamic_ruleset/latejoin/bloodsucker + name = "Bloodsucker Infiltrator" + config_tag = "latejoin_bloodsucker" + antag_datum = ANTAG_DATUM_BLOODSUCKER + antag_flag = ROLE_TRAITOR restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") required_candidates = 1 - weight = 5 - cost = 15 - requirements = list(80,70,60,50,40,20,20,15,15,15) + weight = 3 + cost = 10 + property_weights = list("story_potential" = 2, "extended" = 2, "trust" = -2, "valid" = 1) + requirements = list(70,65,60,55,50,45,40,35,30,30) + high_population_requirement = 30 repeatable = TRUE - high_population_requirement = 15 -/datum/dynamic_ruleset/latejoin/vampire/pre_execute() +/datum/dynamic_ruleset/latejoin/bloodsucker/execute() var/mob/M = pick(candidates) - candidates -= M assigned += M.mind - M.mind.restricted_roles = restricted_roles - M.mind.special_role = ROLE_VAMPIRE + M.mind.special_role = antag_flag + if(mode.make_bloodsucker(M.mind)) + mode.bloodsuckers += M + log_admin("[M.name] was made into a bloodsucker by dynamic.") + message_admins("[M.name] was made into a bloodsucker by dynamic.") return TRUE -*/ diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 01c11d8b0b..c89562c9f9 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -87,6 +87,7 @@ var/threat = round(mode.threat_level/10) if (job_check < required_enemies[threat]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE return TRUE @@ -107,8 +108,12 @@ candidates = pollGhostCandidates("The mode is looking for volunteers to become a [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300) - if(!candidates || candidates.len <= required_candidates) + if(!candidates || candidates.len < required_candidates) message_admins("The ruleset [name] did not receive enough applications.") + if(candidates) + message_admins("Only received [candidates.len], needed [required_candidates].") + else + message_admins("There were no candidates.") log_game("DYNAMIC: The ruleset [name] did not receive enough applications.") return FALSE @@ -179,6 +184,8 @@ repeatable = TRUE high_population_requirement = 15 flags = TRAITOR_RULESET + property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1) + always_max_weight = TRUE /datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0) var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len @@ -212,6 +219,8 @@ living_players -= M var/datum/antagonist/traitor/newTraitor = new M.mind.add_antag_datum(newTraitor) + log_admin("[M] was made into a traitor by dynamic.") + message_admins("[M] was made into a traitor by dynamic.") return TRUE @@ -235,6 +244,7 @@ requirements = list(101,101,70,50,50,50,40,30,30,30) high_population_requirement = 30 required_type = /mob/living/silicon/ai + property_weights = list("story_potential" = 2, "trust" = 1, "chaos" = 2) var/ion_announce = 33 var/removeDontImproveChance = 10 @@ -259,6 +269,8 @@ var/datum/antagonist/traitor/AI = new M.mind.special_role = antag_flag M.mind.add_antag_datum(AI) + log_admin("[M] was made into a malf AI by dynamic.") + message_admins("[M] was made into a malf AI by dynamic.") if(prob(ion_announce)) priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", "ionstorm") if(prob(removeDontImproveChance)) @@ -287,10 +299,12 @@ requirements = list(90,90,70,50,50,50,50,40,30,30) high_population_requirement = 30 repeatable = TRUE + property_weights = list("story_potential" = 2, "trust" = 1, "chaos" = 2, "extended" = -2) var/datum/mind/wizard /datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE if(GLOB.wizardstart.len == 0) log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") @@ -334,6 +348,7 @@ cost = 35 requirements = list(90,90,90,80,70,60,50,40,40,40) high_population_requirement = 40 + property_weights = list("story_potential" = 2, "trust" = 2, "chaos" = 2, "extended" = -2, "valid" = 2) var/operative_cap = list(2,2,3,3,4,5,5,5,5,5) var/datum/team/nuclear/nuke_team flags = HIGHLANDER_RULESET @@ -353,6 +368,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -386,9 +402,11 @@ requirements = list(101,101,101,80,60,50,50,50,50,50) high_population_requirement = 50 repeatable = TRUE + property_weights = list("story_potential" = -1, "trust" = 2, "chaos" = 2, "extended" = -2, "valid" = 2) /datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -416,10 +434,12 @@ high_population_requirement = 50 repeatable_weight_decrease = 2 repeatable = TRUE + property_weights = list("story_potential" = -1, "trust" = 1, "chaos" = 2, "extended" = -2, "valid" = 2) var/list/vents = list() /datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -470,6 +490,7 @@ high_population_requirement = 50 repeatable_weight_decrease = 2 repeatable = TRUE + property_weights = list("story_potential" = 1, "trust" = 1, "extended" = 1, "valid" = 2, "integrity" = 2) var/list/spawn_locs = list() /datum/dynamic_ruleset/midround/from_ghosts/nightmare/execute() @@ -515,10 +536,12 @@ weight = 4 cost = 5 requirements = list(30,30,20,20,15,10,10,10,10,5) // yes, it can even happen in "extended"! + property_weights = list("story_potential" = 1, "extended" = 1, "valid" = -2) high_population_requirement = 5 /datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -548,15 +571,20 @@ cost = 5 requirements = list(30,30,30,30,20,15,15,15,15,15) high_population_requirement = 15 + property_weights = list("story_potential" = -2, "extended" = -1) var/list/spawn_locs = list() -/datum/dynamic_ruleset/midround/from_ghosts/revenant/ready(forced = FALSE) +/datum/dynamic_ruleset/midround/from_ghosts/revenant/acceptable(population = 0,threat = 0) var/deadMobs = 0 for(var/mob/M in GLOB.dead_mob_list) deadMobs++ if(deadMobs < REVENANT_SPAWN_THRESHOLD) return FALSE + return ..() + +/datum/dynamic_ruleset/midround/from_ghosts/revenant/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies var/turf/T = get_turf(L) @@ -599,11 +627,13 @@ weight = 4 cost = 15 requirements = list(101,101,101,90,80,70,60,50,40,30) + property_weights = list("story_potential" = -2, "extended" = -2, "integrity" = 2, "valid" = 2, "trust" = 2) high_population_requirement = 30 var/list/spawn_locs = list() /datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) if(isturf(L.loc)) @@ -650,11 +680,13 @@ blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear) high_population_requirement = 15 var/datum/team/abductor_team/team + property_weights = list("story_potential" = 1, "extended" = -2, "valid" = 1, "trust" = -1, "chaos" = 2) repeatable_weight_decrease = 4 repeatable = TRUE /datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE team = new /datum/team/abductor_team if(team.team_number > ABDUCTOR_MAX_TEAMS) @@ -689,11 +721,13 @@ cost = 15 requirements = list(101,101,101,90,80,70,60,50,40,30) high_population_requirement = 30 + property_weights = list("story_potential" = 1, "extended" = -2, "valid" = 2) var/list/spawn_locs = list() var/spawn_loc /datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE if(!spawn_loc) var/list/spawn_locs = list() @@ -734,31 +768,3 @@ #undef ABDUCTOR_MAX_TEAMS #undef REVENANT_SPAWN_THRESHOLD - -////////////////////////////////////////////// -// // -// BLOODSUCKERS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/latejoin/bloodsucker - name = "Bloodsucker Infiltrator" - config_tag = "latejoin_bloodsucker" - antag_datum = ANTAG_DATUM_BLOODSUCKER - antag_flag = ROLE_TRAITOR - restricted_roles = list("AI", "Cyborg") - protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") - required_candidates = 1 - weight = 3 - cost = 10 - requirements = list(90,80,70,60,55,50,45,40,35,30) - high_population_requirement = 30 - repeatable = TRUE - -/datum/dynamic_ruleset/latejoin/bloodsucker/execute() - var/mob/M = pick(candidates) - assigned += M.mind - M.mind.special_role = antag_flag - if(mode.make_bloodsucker(M.mind)) - mode.bloodsuckers += M - return TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 2d476eab19..abd40a1756 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -21,6 +21,8 @@ requirements = list(50,50,50,50,50,50,50,50,50,50) high_population_requirement = 40 antag_cap = list(1,1,1,1,2,2,2,2,3,3) + property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1, "valid" = 1) + always_max_weight = TRUE var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec) /datum/dynamic_ruleset/roundstart/traitor/pre_execute() @@ -60,6 +62,7 @@ requirements = list(101,101,101,101,101,101,101,101,101,101) high_population_requirement = 101 antag_cap = list(2,2,2,2,2,2,2,2,2,2) // Can pick 3 per team, but rare enough it doesn't matter. + property_weights = list("story_potential" = 1, "trust" = -1, "extended" = 1, "valid" = 1) var/list/datum/team/brother_team/pre_brother_teams = list() var/const/min_team_size = 2 @@ -107,6 +110,7 @@ cost = 15 scaling_cost = 15 requirements = list(101,101,101,101,101,101,101,101,101,101) + property_weights = list("trust" = -2, "valid" = 2) high_population_requirement = 10 antag_cap = list(1,1,1,1,1,2,2,2,2,3) var/team_mode_probability = 30 @@ -159,6 +163,7 @@ cost = 30 requirements = list(101,101,101,60,50,50,50,50,50,50) high_population_requirement = 50 + property_weights = list("story_potential" = 2, "trust" = 1, "chaos" = 2, "extended" = -2, "valid" = 2) var/list/roundstart_wizards = list() /datum/dynamic_ruleset/roundstart/wizard/acceptable(population=0, threat=0) @@ -221,6 +226,7 @@ weight = 3 cost = 30 requirements = list(101,101,101,80,70,60,50,50,50,50) + property_weights = list("story_potential" = -1, "trust" = -1, "chaos" = 1, "conversion" = 1, "extended" = -2, "valid" = 2) high_population_requirement = 50 flags = HIGHLANDER_RULESET antag_cap = list(2,2,2,3,3,4,4,4,4,4) @@ -282,6 +288,7 @@ high_population_requirement = 50 flags = HIGHLANDER_RULESET antag_cap = list(1,1,2,3,4,5,5,5,5,5) + property_weights = list("story_potential" = 2, "trust" = 2, "chaos" = 2, "extended" = -2, "valid" = 2) var/datum/team/nuclear/nuke_team /datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE) @@ -372,6 +379,7 @@ flags = HIGHLANDER_RULESET // I give up, just there should be enough heads with 35 players... minimum_players = 35 + property_weights = list("trust" = -2, "chaos" = 2, "extended" = -2, "valid" = 2, "conversion" = 1) var/datum/team/revolution/revolution var/finished = FALSE @@ -489,6 +497,7 @@ weight = 3 cost = 0 requirements = list(101,101,101,101,101,101,101,101,101,101) + property_weights = list("extended" = 2) high_population_requirement = 101 /datum/dynamic_ruleset/roundstart/extended/pre_execute() @@ -516,6 +525,7 @@ high_population_requirement = 50 flags = HIGHLANDER_RULESET antag_cap = list(2,3,3,4,4,4,4,4,4,4) + property_weights = list("trust" = 2, "chaos" = 2, "extended" = -2, "conversion" = 1, "valid" = 2) var/ark_time /datum/dynamic_ruleset/roundstart/clockcult/pre_execute() @@ -615,6 +625,8 @@ antag_leader_datum = /datum/antagonist/nukeop/leader/clownop requirements = list(101,101,101,101,101,101,101,101,101,101) high_population_requirement = 101 + property_weights = list("trust" = 2, "chaos" = 2, "extended" = -2, "story_potential" = 2, "valid" = 2) + /datum/dynamic_ruleset/roundstart/nuclear/clown_ops/pre_execute() . = ..() @@ -646,6 +658,7 @@ requirements = list(101,101,101,101,101,101,101,101,101,101) high_population_requirement = 101 antag_cap = list(1,1,1,2,2,2,3,3,3,4) + property_weights = list("extended" = 1) /datum/dynamic_ruleset/roundstart/devil/pre_execute() var/num_devils = antag_cap[indice_pop] @@ -697,6 +710,7 @@ cost = 0 requirements = list(101,101,101,101,101,101,101,101,101,101) high_population_requirement = 101 + property_weights = list("extended" = -2, "chaos" = 2, "conversion" = 1, "valid" = 2) var/players_per_carrier = 30 var/monkeys_to_win = 1 var/escaped_monkeys = 0 @@ -758,6 +772,7 @@ cost = 0 requirements = list(101,101,101,101,101,101,101,101,101,101) high_population_requirement = 101 + property_weights = list("extended" = -2, "chaos" = 2, "trust" = 2) var/meteordelay = 2000 var/nometeors = 0 var/rampupdelta = 5 @@ -798,7 +813,8 @@ weight = 2 cost = 15 scaling_cost = 10 - requirements = list(90,80,70,60,50,50,50,50,50,50) + property_weights = list("story_potential" = 1, "extended" = 1, "trust" = -2, "valid" = 1) + requirements = list(70,65,60,55,50,50,50,50,50,50) high_population_requirement = 50 antag_cap = list(1,1,1,1,1,2,2,2,2,2) diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm new file mode 100644 index 0000000000..afa6ed8ba7 --- /dev/null +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -0,0 +1,235 @@ +/datum/dynamic_storyteller + var/name = "none" + var/desc = "A coder's idiocy." + var/list/property_weights = list() + var/curve_centre = 0 + var/curve_width = 1.8 + var/forced_threat_level = -1 + var/flags = 0 + var/weight = 3 // how many rounds need to have been recently played for this storyteller to be left out of the vote + var/datum/game_mode/dynamic/mode = null + +/** +Property weights are: +"story_potential" -- essentially how many different ways the antag can be played. +"trust" -- How much it makes the crew trust each other. Negative values means they're suspicious. Team antags are like this. +"chaos" -- How chaotic it makes the round. Has some overlap with "valid" and somewhat contradicts "extended". +"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to + let everyone into the armory, wizard moving around and being a nuisance, nightmare busting lights. +"extended" -- How much the antag is conducive to a long round. Nukies and cults are bad for this; Wizard is less bad; and so on. +"conversion" -- Basically a bool. Conversion antags, well, convert. It's its own class for a good reason. +*/ + +/datum/dynamic_storyteller/New() + ..() + if (istype(SSticker.mode, /datum/game_mode/dynamic)) + mode = SSticker.mode + GLOB.dynamic_curve_centre = curve_centre + GLOB.dynamic_curve_width = curve_width + GLOB.dynamic_forced_threat_level = forced_threat_level + +/datum/dynamic_storyteller/proc/start_injection_cooldowns() + var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min) + mode.latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time + + var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max) + mode.midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time + + var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) + mode.event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) + +/datum/dynamic_storyteller/proc/do_process() + return + +/datum/dynamic_storyteller/proc/on_start() + return + +/datum/dynamic_storyteller/proc/get_midround_cooldown() + var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) + return round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + +/datum/dynamic_storyteller/proc/get_event_cooldown() + var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) + return round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + +/datum/dynamic_storyteller/proc/get_latejoin_cooldown() + var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) + return round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + +/datum/dynamic_storyteller/proc/get_injection_chance(dry_run = FALSE) + if(mode.forced_injection) + mode.forced_injection = !dry_run + return 100 + var/chance = 0 + // If the high pop override is in effect, we reduce the impact of population on the antag injection chance + var/high_pop_factor = (mode.current_players[CURRENT_LIVING_PLAYERS].len >= GLOB.dynamic_high_pop_limit) + var/max_pop_per_antag = max(5,15 - round(mode.threat_level/10) - round(mode.current_players[CURRENT_LIVING_PLAYERS].len/(high_pop_factor ? 10 : 5))) + if (!mode.current_players[CURRENT_LIVING_ANTAGS].len) + chance += 80 // No antags at all? let's boost those odds! + else + var/current_pop_per_antag = mode.current_players[CURRENT_LIVING_PLAYERS].len / mode.current_players[CURRENT_LIVING_ANTAGS].len + if (current_pop_per_antag > max_pop_per_antag) + chance += min(50, 25+10*(current_pop_per_antag-max_pop_per_antag)) + else + chance += 25-10*(max_pop_per_antag-current_pop_per_antag) + if (mode.current_players[CURRENT_DEAD_PLAYERS].len > mode.current_players[CURRENT_LIVING_PLAYERS].len) + chance -= 30 // More than half the crew died? ew, let's calm down on antags + if (mode.threat > 70) + chance += 15 + if (mode.threat < 30) + chance -= 15 + return round(max(0,chance)) + +/datum/dynamic_storyteller/proc/roundstart_draft() + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/roundstart/rule in mode.roundstart_rules) + if (rule.acceptable(mode.roundstart_pop_ready, mode.threat_level) && mode.threat >= rule.cost) // If we got the population and threat required + rule.candidates = mode.candidates.Copy() + rule.trim_candidates() + if (rule.ready() && rule.candidates.len > 0) + var/property_weight = 0 + for(var/property in property_weights) + if(property in rule.property_weights) // just treat it as 0 if it's not in there + property_weight += rule.property_weights[property] * property_weights[property] + drafted_rules[rule] = (rule.get_weight() + property_weight)*rule.weight_mult + return drafted_rules + +/datum/dynamic_storyteller/proc/midround_draft() + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/midround/rule in mode.midround_rules) + // if there are antags OR the rule is an antag rule, antag_acceptable will be true. + if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && mode.threat >= rule.cost) + // Classic secret : only autotraitor/minor roles + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + continue + rule.trim_candidates() + if (rule.ready()) + var/property_weight = 0 + for(var/property in property_weights) + if(property in rule.property_weights) + property_weight += rule.property_weights[property] * property_weights[property] + drafted_rules[rule] = (rule.get_weight() + property_weight)*rule.weight_mult + else if(mode.threat < rule.cost) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend") + return drafted_rules + +/datum/dynamic_storyteller/proc/latejoin_draft(mob/living/carbon/human/newPlayer) + var/list/drafted_rules = list() + for (var/datum/dynamic_ruleset/latejoin/rule in mode.latejoin_rules) + if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && mode.threat >= rule.cost) + // Classic secret : only autotraitor/minor roles + if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) + continue + // No stacking : only one round-ender, unless threat level > stacking_limit. + if (mode.threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) + if(rule.flags & HIGHLANDER_RULESET && mode.highlander_executed) + continue + + rule.candidates = list(newPlayer) + rule.trim_candidates() + if (rule.ready()) + var/property_weight = 0 + for(var/property in property_weights) + if(property in rule.property_weights) + property_weight += rule.property_weights[property] * property_weights[property] + drafted_rules[rule] = (rule.get_weight() + property_weight)*rule.weight_mult + else if(mode.threat < rule.cost) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend") + return drafted_rules + +/datum/dynamic_storyteller/proc/event_draft() + var/list/drafted_rules = list() + for(var/datum/dynamic_ruleset/event/rule in mode.events) + if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && mode.threat >= rule.cost) + if(rule.ready()) + var/property_weight = 0 + for(var/property in property_weights) + if(property in rule.property_weights) + property_weight += rule.property_weights[property] * property_weights[property] + drafted_rules[rule] = (rule.get_weight() + property_weight)*rule.weight_mult + else if(mode.threat < rule.cost) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend") + return drafted_rules + + +/datum/dynamic_storyteller/cowabunga + name = "Chaotic" + curve_centre = 10 + desc = "Chaos: high. Variation: high. Likely antags: clock cult, revs, wizard." + property_weights = list("extended" = -1, "chaos" = 10) + weight = 2 + flags = WAROPS_ALWAYS_ALLOWED + var/refund_cooldown + +/datum/dynamic_storyteller/cowabunga/get_midround_cooldown() + return ..() / 4 + +/datum/dynamic_storyteller/cowabunga/get_latejoin_cooldown() + return ..() / 4 + +/datum/dynamic_storyteller/cowabunga/do_process() + if(refund_cooldown < world.time) + mode.refund_threat(10) + mode.log_threat("Cowabunga it is. Refunded 10 threat. Threat is now [mode.threat].") + refund_cooldown = world.time + 300 SECONDS + +/datum/dynamic_storyteller/team + name = "Teamwork" + desc = "Chaos: high. Variation: low. Likely antags: nukies, clockwork cult, wizard, blob, xenomorph." + curve_centre = 2 + curve_width = 1.5 + weight = 2 + flags = WAROPS_ALWAYS_ALLOWED + property_weights = list("valid" = 3, "trust" = 5) + +/datum/dynamic_storyteller/team/get_injection_chance(dry_run = FALSE) + return (mode.current_players[CURRENT_LIVING_ANTAGS].len ? 0 : ..()) + +/datum/dynamic_storyteller/conversion + name = "Conversion" + desc = "Chaos: high. Variation: medium. Likely antags: cults, bloodsuckers, revs." + curve_centre = 3 + curve_width = 1 + weight = 2 + flags = WAROPS_ALWAYS_ALLOWED + property_weights = list("valid" = 1, "conversion" = 20) + +/datum/dynamic_storyteller/classic + name = "Random" + desc = "Chaos: varies. Variation: highest. No special weights attached." + weight = 6 + curve_width = 4 + +/datum/dynamic_storyteller/memes + name = "Story" + desc = "Chaos: varies. Variation: high. Likely antags: abductors, nukies, wizard, traitor." + curve_width = 4 + property_weights = list("story_potential" = 10) + +/datum/dynamic_storyteller/suspicion + name = "Intrigue" + desc = "Chaos: low. Variation: high. Likely antags: traitor, bloodsucker. Rare: revs, blood cult." + curve_width = 4 + property_weights = list("trust" = -5) + +/datum/dynamic_storyteller/liteextended + name = "Calm" + desc = "Chaos: low. Variation: medium. Likely antags: bloodsuckers, traitors, sentient disease, revenant." + curve_centre = -5 + curve_width = 0.5 + flags = NO_ASSASSIN + weight = 2 + property_weights = list("extended" = 1, "chaos" = -1, "valid" = -1, "story_potential" = 1, "conversion" = -10) + +/datum/dynamic_storyteller/liteextended/get_injection_chance(dry_run = FALSE) + return ..()/2 + +/datum/dynamic_storyteller/extended + name = "Extended" + desc = "Chaos: none. Variation: none. Likely antags: none." + curve_centre = -20 + weight = 2 + curve_width = 0.5 + +/datum/dynamic_storyteller/extended/on_start() + GLOB.dynamic_forced_extended = TRUE diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/dominator.dm rename to code/game/gamemodes/gangs/dominator.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator_countdown.dm b/code/game/gamemodes/gangs/dominator_countdown.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/dominator_countdown.dm rename to code/game/gamemodes/gangs/dominator_countdown.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang.dm b/code/game/gamemodes/gangs/gang.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang.dm rename to code/game/gamemodes/gangs/gang.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm b/code/game/gamemodes/gangs/gang_datums.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_datums.dm rename to code/game/gamemodes/gangs/gang_datums.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_decals.dm b/code/game/gamemodes/gangs/gang_decals.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_decals.dm rename to code/game/gamemodes/gangs/gang_decals.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_hud.dm b/code/game/gamemodes/gangs/gang_hud.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_hud.dm rename to code/game/gamemodes/gangs/gang_hud.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_items.dm b/code/game/gamemodes/gangs/gang_items.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_items.dm rename to code/game/gamemodes/gangs/gang_items.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_pen.dm b/code/game/gamemodes/gangs/gang_pen.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_pen.dm rename to code/game/gamemodes/gangs/gang_pen.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gangs.dm b/code/game/gamemodes/gangs/gangs.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gangs.dm rename to code/game/gamemodes/gangs/gangs.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gangtool.dm b/code/game/gamemodes/gangs/gangtool.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gangtool.dm rename to code/game/gamemodes/gangs/gangtool.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/implant_gang.dm b/code/game/gamemodes/gangs/implant_gang.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/implant_gang.dm rename to code/game/gamemodes/gangs/implant_gang.dm diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 8459819b5b..74554ac9f8 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -14,8 +14,8 @@ false_report_weight = 10 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") - required_players = 30 - required_enemies = 2 + required_players = 20 + required_enemies = 1 recommended_enemies = 3 enemy_minimum_age = 14 diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm index 296e79b403..c92e55084d 100644 --- a/code/game/machinery/bloodbankgen.dm +++ b/code/game/machinery/bloodbankgen.dm @@ -12,7 +12,6 @@ var/filling = FALSE var/obj/item/reagent_containers/blood/bag = null var/obj/item/reagent_containers/blood/outbag = null - var/bloodstored = 0 var/maxbloodstored = 1000 var/menustat = "menu" var/efficiency = 0 @@ -20,7 +19,7 @@ /obj/machinery/bloodbankgen/Initialize() . = ..() - create_reagents(1000) + create_reagents(maxbloodstored, AMOUNT_VISIBLE) update_icon() /obj/machinery/bloodbankgen/Destroy() @@ -28,6 +27,14 @@ QDEL_NULL(outbag) return ..() +/obj/machinery/bloodbankgen/examine(mob/user) + . = ..() + if(bag) + . += "It has \a [bag.name] hooked to its input slot. The counter reads: \"Current Capacity: [bag.reagents.total_volume] of [bag.reagents.maximum_volume]\"" + if(outbag) + . += "It has \a [bag.name] hooked to its output slot. The counter reads: \"Current Capacity: [outbag.reagents.total_volume] of [outbag.reagents.maximum_volume]\"" + + /obj/machinery/bloodbankgen/handle_atom_del(atom/A) ..() if(A == bag) @@ -108,74 +115,42 @@ /obj/machinery/bloodbankgen/process() if(!is_operational()) - return PROCESS_KILL - - bloodstored = reagents.total_volume + return var/transfer_amount = 20 if(draining) - if(reagents.total_volume >= reagents.maximum_volume) - draining = FALSE + if(reagents.total_volume >= reagents.maximum_volume || !bag || !bag.reagents.total_volume) + beep_stop_pumping() return - - if(bag) - if(bag.reagents.total_volume) - var/datum/reagent/blood/B = bag.reagents.has_reagent("blood") - if(B) - var/amount = reagents.maximum_volume - reagents.total_volume //monitor the machine's internal storage - amount = min(amount, transfer_amount) - if(!amount) - draining = FALSE - updateUsrDialog() - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - return - - if(bag.blood_type == "SY") //no infinite loops using synthetics. - reagents.add_reagent("syntheticblood", amount) - else - reagents.add_reagent("syntheticblood", (amount+(5*efficiency))) - - if(bag.reagents.total_volume >= amount) - bag.reagents.remove_reagent("blood", amount) - else - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - draining = FALSE - - bag.update_icon() - update_icon() - updateUsrDialog() - else - draining = FALSE - updateUsrDialog() + var/blood_amount = bag.reagents.get_reagent_amount("blood") + //monitor the machine and blood bag's reagents storage. + var/amount = min(blood_amount, min(transfer_amount, reagents.maximum_volume - reagents.total_volume)) + if(!amount) + beep_stop_pumping() return + var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics. + reagents.add_reagent("syntheticblood", amount + bonus) + bag.reagents.remove_reagent("blood", amount) + update_icon() if(filling) - if(!reagents || !reagents.total_volume) - filling = FALSE //there ain't anything in the machine yo. + if(!reagents.total_volume || !outbag || outbag.reagents.total_volume >= outbag.reagents.maximum_volume) + beep_stop_pumping("[src] pings.", TRUE) return - if(outbag && outbag.reagents.total_volume < outbag.reagents.maximum_volume) - var/amount = outbag.reagents.maximum_volume - outbag.reagents.total_volume //monitor the output bag's internal storage - amount = min(amount, transfer_amount) - if(!amount) - filling = FALSE - visible_message("[src] pings.") - playsound(loc, 'sound/machines/beep.ogg', 50, 1) - updateUsrDialog() - return + //monitor the output bag's reagents storage. + var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume) + reagents.trans_to(outbag, amount) + update_icon() - reagents.trans_to(outbag, amount) - outbag.update_icon() - update_icon() - updateUsrDialog() - else - visible_message("[src] pings.") - playsound(loc, 'sound/machines/beep.ogg', 50, 1) - filling = FALSE - updateUsrDialog() - return +/obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE) + if(out_instead_of_in) + filling = FALSE + else + draining = FALSE + updateUsrDialog() + audible_message(msg) + playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) /obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params) if(user.a_intent == INTENT_HARM) @@ -198,8 +173,8 @@ if(istype(O, /obj/item/reagent_containers/blood)) . = TRUE //no afterattack - var/msg = "" - if(!panel_open) + var/msg + if(panel_open) . += "Close the maintenance panel" if(!anchored) . += "[msg ? " and a" : "A"]nchor its bolts" @@ -267,7 +242,7 @@ if(!bag && !outbag) dat += "
    No containers inside, please insert container.
    " - var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 520) + var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 420) popup.set_content(dat) popup.open() @@ -305,6 +280,7 @@ if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) usr.put_in_hands(bag) bag = null + draining = null update_icon() /obj/machinery/bloodbankgen/proc/detachoutput() @@ -313,6 +289,7 @@ if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) usr.put_in_hands(outbag) outbag = null + filling = null update_icon() /obj/machinery/bloodbankgen/proc/attachinput(obj/item/O, mob/user) @@ -338,23 +315,22 @@ to_chat(user, "There is already something in this slot!") /obj/machinery/bloodbankgen/Topic(href, href_list) - if(..() || panel_open) + . = ..() + if(. | !is_operational()) return usr.set_machine(src) if(href_list["activateinput"]) activateinput() - updateUsrDialog() else if(href_list["detachinput"]) detachinput() - updateUsrDialog() else if(href_list["activateoutput"]) activateoutput() - updateUsrDialog() else if(href_list["detachoutput"]) detachoutput() - updateUsrDialog() + + updateUsrDialog() diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 968cbe7254..24c9e32969 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -38,21 +38,22 @@ board.one_access = 1 board.accesses = req_one_access - -/obj/machinery/button/update_icon() - cut_overlays() +/obj/machinery/button/update_icon_state() if(panel_open) icon_state = "button-open" - if(device) - add_overlay("button-device") - if(board) - add_overlay("button-board") - + else if(stat & (NOPOWER|BROKEN)) + icon_state = "[skin]-p" else - if(stat & (NOPOWER|BROKEN)) - icon_state = "[skin]-p" - else - icon_state = skin + icon_state = skin + +/obj/machinery/button/update_overlays() + . = ..() + if(!panel_open) + return + if(device) + . += "button-device" + if(board) + . += "button-board" /obj/machinery/button/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/screwdriver)) @@ -168,7 +169,7 @@ if(device) device.pulsed() - addtimer(CALLBACK(src, .proc/update_icon), 15) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 15) /obj/machinery/button/power_change() ..() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 17136d3c4f..bef5effb54 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -292,7 +292,7 @@ new /obj/item/stack/cable_coil(loc, 2) qdel(src) -/obj/machinery/camera/update_icon() +/obj/machinery/camera/update_icon_state() if(!status) icon_state = "[initial(icon_state)]1" else if (stat & EMPED) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 8d950f8458..b561224668 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -67,7 +67,9 @@ /obj/item/clothing/shoes/kindleKicks = ARCADE_WEIGHT_RARE, /obj/item/storage/belt/military/snack = ARCADE_WEIGHT_RARE, - /obj/item/clothing/mask/fakemoustache/italian = ARCADE_WEIGHT_RARE + /obj/item/clothing/mask/fakemoustache/italian = ARCADE_WEIGHT_RARE, + /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake = ARCADE_WEIGHT_TRICK, + /obj/item/clothing/suit/hooded/wintercoat/narsie/fake = ARCADE_WEIGHT_TRICK ) light_color = LIGHT_COLOR_GREEN diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index a8b4608b36..22a523c58b 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -70,7 +70,7 @@ if(check_access(I)) authenticated = 1 auth_id = "[I.registered_name] ([I.assignment])" - if((20 in I.access)) + if((ACCESS_CAPTAIN in I.access)) authenticated = 2 playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) if(obj_flags & EMAGGED) @@ -279,7 +279,7 @@ // OMG CENTCOM LETTERHEAD if("MessageCentCom") - if(authenticated==2) + if(authenticated) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") return diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 40ccc61b2b..f3be6ac214 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -38,17 +38,21 @@ defib.cell.give(180) //90% efficiency, slightly better than the cell charger's 87.5% update_icon() -/obj/machinery/defibrillator_mount/update_icon() - cut_overlays() - if(defib) - add_overlay("defib") - if(defib.powered) - add_overlay(defib.safety ? "online" : "emagged") - var/ratio = defib.cell.charge / defib.cell.maxcharge - ratio = CEILING(ratio * 4, 1) * 25 - add_overlay("charge[ratio]") - if(clamps_locked) - add_overlay("clamps") +/obj/machinery/defibrillator_mount/update_overlays() + . = ..() + if(!defib) + return + + . += "defib" + + if(defib.powered) + . += (defib.safety ? "online" : "emagged") + var/ratio = defib.cell.charge / defib.cell.maxcharge + ratio = CEILING(ratio * 4, 1) * 25 + . += "charge[ratio]" + + if(clamps_locked) + . += "clamps" /obj/machinery/defibrillator_mount/get_cell() if(defib) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 52b52eb288..03c1bb3bc8 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -180,7 +180,7 @@ limit-- while(!FoundDoor && limit) if (!FoundDoor) - log_world("### MAP WARNING, [src] at [AREACOORD(src)] failed to find a valid airlock to cyclelink with!") + log_mapping("[src] at [AREACOORD(src)] failed to find a valid airlock to cyclelink with!") return FoundDoor.cyclelinkedairlock = src cyclelinkedairlock = FoundDoor diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 5c2676c2b9..71f39608b5 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -58,8 +58,6 @@ /obj/machinery/firealarm/update_icon() cut_overlays() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - var/area/A = src.loc - A = A.loc if(panel_open) icon_state = "fire_b[buildstage]" @@ -69,23 +67,32 @@ icon_state = "firex" return + icon_state = "fire0" + if(stat & NOPOWER) - icon_state = "fire0" return - if(is_station_level(z)) - add_overlay("overlay_[GLOB.security_level]") - SSvis_overlays.add_vis_overlay(src, icon, "overlay_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - else - add_overlay("overlay_[SEC_LEVEL_GREEN]") - SSvis_overlays.add_vis_overlay(src, icon, "overlay_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + add_overlay("fire_overlay") - if(detecting) - add_overlay("overlay_[A.fire ? "fire" : "clear"]") - SSvis_overlays.add_vis_overlay(src, icon, "overlay_[A.fire ? "fire" : "clear"]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + if(is_station_level(z)) + add_overlay("fire_[GLOB.security_level]") + SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) else - add_overlay("overlay_fire") - SSvis_overlays.add_vis_overlay(src, icon, "overlay_fire", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + add_overlay("fire_[SEC_LEVEL_GREEN]") + SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + + var/area/A = src.loc + A = A.loc + + if(!detecting || !A.fire) + add_overlay("fire_off") + SSvis_overlays.add_vis_overlay(src, icon, "fire_off", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + else if(obj_flags & EMAGGED) + add_overlay("fire_emagged") + SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + else + add_overlay("fire_on") + SSvis_overlays.add_vis_overlay(src, icon, "fire_on", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) /obj/machinery/firealarm/emp_act(severity) . = ..() @@ -101,6 +108,7 @@ if(obj_flags & EMAGGED) return obj_flags |= EMAGGED + update_icon() if(user) user.visible_message("Sparks fly out of [src]!", "You emag [src], disabling its thermal sensors.") @@ -112,51 +120,39 @@ alarm() ..() -/obj/machinery/firealarm/proc/alarm() - if(!is_operational() && (last_alarm+FIREALARM_COOLDOWN < world.time)) +/obj/machinery/firealarm/proc/alarm(mob/user) + if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time)) return last_alarm = world.time var/area/A = get_area(src) A.firealert(src) - playsound(src.loc, 'goon/sound/machinery/FireAlarm.ogg', 75) + playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75) + if(user) + log_game("[user] triggered a fire alarm at [COORD(src)]") -/obj/machinery/firealarm/proc/reset() +/obj/machinery/firealarm/proc/reset(mob/user) if(!is_operational()) return var/area/A = get_area(src) A.firereset(src) + if(user) + log_game("[user] reset a fire alarm at [COORD(src)]") -/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "firealarm", name, 300, 150, master_ui, state) - ui.open() - -/obj/machinery/firealarm/ui_data(mob/user) - var/list/data = list() - data["emagged"] = obj_flags & EMAGGED ? 1 : 0 - - if(is_station_level(z)) - data["seclevel"] = get_security_level() - else - data["seclevel"] = "green" - +/obj/machinery/firealarm/attack_hand(mob/user) + if(buildstage != 2) + return ..() + add_fingerprint(user) var/area/A = get_area(src) - data["alarm"] = A.fire + if(A.fire) + reset(user) + else + alarm(user) - return data +/obj/machinery/firealarm/attack_ai(mob/user) + return attack_hand(user) -/obj/machinery/firealarm/ui_act(action, params) - if(..() || buildstage != 2) - return - switch(action) - if("reset") - reset() - . = TRUE - if("alarm") - alarm() - . = TRUE +/obj/machinery/firealarm/attack_robot(mob/user) + return attack_hand(user) /obj/machinery/firealarm/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -200,6 +196,12 @@ to_chat(user, "You cut the wires from \the [src].") update_icon() return + else if(W.force) //hit and turn it on + ..() + var/area/A = get_area(src) + if(!A.fire) + alarm() + return if(1) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W @@ -322,8 +324,3 @@ if (!party_overlay) party_overlay = iconstate2appearance('icons/turf/areas.dmi', "party") A.add_overlay(party_overlay) - -/obj/machinery/firealarm/partyalarm/ui_data(mob/user) - . = ..() - var/area/A = get_area(src) - .["alarm"] = A && A.party diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 1e7d720ee9..b1783ba940 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -500,7 +500,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ else return FALSE -/obj/machinery/holopad/proc/move_hologram(mob/living/user, turf/new_turf) +/obj/machinery/holopad/proc/move_hologram(mob/living/user, turf/new_turf, direction) if(LAZYLEN(masters) && masters[user]) var/obj/effect/overlay/holo_pad_hologram/holo = masters[user] var/transfered = FALSE @@ -512,6 +512,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ transfered = TRUE //All is good. holo.forceMove(new_turf) + if(direction) + holo.setDir(direction) if(!transfered) update_holoray(user,new_turf) return TRUE diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index aee1cf4f69..6d19776d86 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -222,5 +222,21 @@ . += "\t[attached ? attached : "No one"] is attached." +/obj/machinery/iv_drip/telescopic + name = "telescopic IV drip" + desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down." + icon_state = "iv_drip" + +/obj/machinery/iv_drip/telescopic/update_icon() + ..() + icon_state = icon_state + "_tele" + +/obj/machinery/iv_drip/telescopic/AltClick(mob/user) + if (attached || beaker || !user.canUseTopic(src, BE_CLOSE)) + return ..() + new /obj/item/tele_iv(get_turf(src)) + qdel(src) + return TRUE + #undef IV_TAKING -#undef IV_INJECTING \ No newline at end of file +#undef IV_INJECTING diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index f35caf514c..adc0e5bf1e 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -326,6 +326,9 @@ /obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) if(state_open && is_operational()) + if(istype(I, /obj/item/clothing/head/mob_holder)) + to_chat(user, "You can't quite fit that in while you hold it!") + return if(istype(I, /obj/item/clothing/suit)) if(suit) to_chat(user, "The unit already contains a suit!.") @@ -437,4 +440,4 @@ if(I) I.forceMove(loc) . = TRUE - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 2ca0df75ae..6990a7a4ba 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -219,6 +219,10 @@ update_icon() return + if(istype(W, /obj/item/clothing/head/mob_holder)) + to_chat(user, "It's too unwieldly to put in this way.") + return 1 + else if(user.a_intent != INTENT_HARM) if (!state_open) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 36708fcf90..ca8e8cecd9 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -262,14 +262,14 @@ occupant_message("Deconstructing [W]...") if(do_after_cooldown(W)) chassis.spark_system.start() - W.ScrapeAway() + W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) playsound(W, 'sound/items/deconstruct.ogg', 50, 1) else if(isfloorturf(target)) var/turf/open/floor/F = target occupant_message("Deconstructing [F]...") if(do_after_cooldown(target)) chassis.spark_system.start() - F.ScrapeAway() + F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) playsound(F, 'sound/items/deconstruct.ogg', 50, 1) else if (istype(target, /obj/machinery/door/airlock)) occupant_message("Deconstructing [target]...") @@ -282,7 +282,7 @@ var/turf/open/space/S = target occupant_message("Building Floor...") if(do_after_cooldown(S)) - S.PlaceOnTop(/turf/open/floor/plating) + S.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) playsound(S, 'sound/items/deconstruct.ogg', 50, 1) chassis.spark_system.start() else if(isfloorturf(target)) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 9c3df5395f..416644cada 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -107,7 +107,7 @@ //Wrapper procs that handle sanity and user feedback /atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) - if(!in_range(user, src) || !isturf(user.loc) || user.incapacitated() || M.anchored) + if(!in_range(user, src) || !isturf(user.loc) || user.incapacitated() || M.anchored || !user.can_buckle_others(M, src)) return FALSE add_fingerprint(user) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 9f072c48b6..6f92e94759 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -72,6 +72,11 @@ desc = "It's still good. Four second rule!" icon_state = "flour" +/obj/effect/decal/cleanable/greenglow/ecto + name = "ectoplasmic puddle" + desc = "You know who to call." + light_power = 2 + /obj/effect/decal/cleanable/greenglow name = "glowing goo" desc = "Jeez. I hope that's not for lunch." diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 10ee73915c..b6deaa1d06 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -123,7 +123,7 @@ if(metal) var/turf/T = get_turf(src) if(isspaceturf(T)) //Block up any exposed space - T.PlaceOnTop(/turf/open/floor/plating/foam) + T.PlaceOnTop(/turf/open/floor/plating/foam, flags = CHANGETURF_INHERIT_AIR) for(var/direction in GLOB.cardinals) var/turf/cardinal_turf = get_step(T, direction) if(get_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf! diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index ed88d51c2d..e01010baa5 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -432,3 +432,52 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) GLOB.ruin_landmarks -= src ruin_template = null . = ..() + +//------Station Rooms Landmarks------------// +/obj/effect/landmark/stationroom + var/list/template_names = list() + layer = BULLET_HOLE_LAYER + +/obj/effect/landmark/stationroom/New() + ..() + GLOB.stationroom_landmarks += src + +/obj/effect/landmark/stationroom/Destroy() + if(src in GLOB.stationroom_landmarks) + GLOB.stationroom_landmarks -= src + return ..() + +/obj/effect/landmark/stationroom/proc/load(template_name) + var/turf/T = get_turf(src) + if(!T) + return FALSE + if(!template_name) + for(var/t in template_names) + if(!SSmapping.station_room_templates[t]) + log_world("Station room spawner placed at ([T.x], [T.y], [T.z]) has invalid ruin name of \"[t]\" in its list") + template_names -= t + template_name = safepick(template_names) + if(!template_name) + GLOB.stationroom_landmarks -= src + qdel(src) + return FALSE + var/datum/map_template/template = SSmapping.station_room_templates[template_name] + if(!template) + return FALSE + testing("Room \"[template_name]\" placed at ([T.x], [T.y], [T.z])") + template.load(T, centered = FALSE) + template.loaded++ + GLOB.stationroom_landmarks -= src + qdel(src) + return TRUE + +// The landmark for the Engine on Box + +/obj/effect/landmark/stationroom/box/engine + template_names = list("Engine SM", "Engine Singulo", "Engine Tesla") + icon = 'icons/rooms/box/engine.dmi' + + +/obj/effect/landmark/stationroom/box/engine/New() + . = ..() + template_names = CONFIG_GET(keyed_list/box_random_engine) \ No newline at end of file diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index bdb949a570..4540e48ebc 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -165,7 +165,7 @@ /obj/item/organ/heart/gland/chem = 5, /obj/item/organ/heart/gland/mindshock = 5, /obj/item/organ/heart/gland/plasma = 7, - /obj/item/organ/heart/gland/pop = 5, + /obj/item/organ/heart/gland/transform = 5, /obj/item/organ/heart/gland/slime = 4, /obj/item/organ/heart/gland/spiderman = 5, /obj/item/organ/heart/gland/ventcrawling = 1, diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index a103c0a54f..1b85a41f7c 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -349,6 +349,10 @@ icon_state = "impact_laser_purple" duration = 4 +/obj/effect/temp_visual/impact_effect/shrink + icon_state = "m_shield" + duration = 10 + /obj/effect/temp_visual/impact_effect/ion icon_state = "shieldsparkles" duration = 6 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index c5d198c05f..a410827347 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -578,21 +578,22 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) itempush = 0 //too light to push anything return A.hitby(src, 0, itempush) -/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) +/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, messy_throw = TRUE) thrownby = thrower - callback = CALLBACK(src, .proc/after_throw, callback) //replace their callback with our own + callback = CALLBACK(src, .proc/after_throw, callback, (spin && messy_throw)) //replace their callback with our own . = ..(target, range, speed, thrower, spin, diagonals_first, callback) -/obj/item/proc/after_throw(datum/callback/callback) +/obj/item/proc/after_throw(datum/callback/callback, messy_throw) if (callback) //call the original callback . = callback.Invoke() throw_speed = initial(throw_speed) //explosions change this. item_flags &= ~IN_INVENTORY - var/matrix/M = matrix(transform) - M.Turn(rand(-170, 170)) - transform = M - pixel_x = rand(-8, 8) - pixel_y = rand(-8, 8) + if(messy_throw) + var/matrix/M = matrix(transform) + M.Turn(rand(-170, 170)) + transform = M + pixel_x = rand(-8, 8) + pixel_y = rand(-8, 8) /obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage if(!newLoc) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index cf8d38d9c9..884f5c4400 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -863,3 +863,205 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(reagents && reagents.total_volume) hand_reagents() + +/////////////// +/////BONGS///// +/////////////// + +/obj/item/bong + name = "bong" + desc = "A water bong used for smoking dried plants." + icon = 'icons/obj/bongs.dmi' + icon_state = null + item_state = null + w_class = WEIGHT_CLASS_NORMAL + light_color = "#FFCC66" + var/icon_off = "bong" + var/icon_on = "bong_lit" + var/chem_volume = 100 + var/last_used_time //for cooldown + var/firecharges = 0 //used for counting how many hits can be taken before the flame goes out + var/list/list_reagents = list() //For the base reagents bongs could get + + +/obj/item/bong/Initialize() + . = ..() + create_reagents(chem_volume, NO_REACT) // so it doesn't react until you light it + reagents.add_reagent_list(list_reagents) + icon_state = icon_off + +/obj/item/bong/attackby(obj/item/O, mob/user, params) + . = ..() + //If we're using a dried plant.. + if(istype(O,/obj/item/reagent_containers/food/snacks)) + var/obj/item/reagent_containers/food/snacks/DP = O + if (DP.dry) + //Nothing if our bong is full + if (reagents.holder_full()) + user.show_message("The bowl is full!", MSG_VISUAL) + return + + //Transfer reagents and remove the plant + user.show_message("You stuff the [DP] into the [src]'s bowl.", MSG_VISUAL) + DP.reagents.trans_to(src, 100) + qdel(DP) + return + else + user.show_message("[DP] must be dried first!", MSG_VISUAL) + return + + if (O.get_temperature() <= 500) + return + if (reagents && reagents.total_volume) //if there's stuff in the bong + var/lighting_text = O.ignition_effect(src, user) + if(lighting_text) + //Logic regarding igniting it on + if (firecharges == 0) + user.show_message("You light the [src] with the [O]!", MSG_VISUAL) + bongturnon() + else + user.show_message("You rekindle [src]'s flame with the [O]!", MSG_VISUAL) + + firecharges = 1 + return + else + user.show_message("There's nothing to light up in the bowl.", MSG_VISUAL) + return + +/obj/item/bong/CtrlShiftClick(mob/user) //empty reagents on alt click + ..() + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + + if (reagents && reagents.total_volume) + user.show_message("You empty the [src].", MSG_VISUAL) + reagents.clear_reagents() + if(firecharges) + firecharges = 0 + bongturnoff() + else + user.show_message("The [src] is already empty.", MSG_VISUAL) + +/obj/item/bong/AltClick(mob/user) + ..() + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + + if(firecharges) + firecharges = 0 + bongturnoff() + user.show_message("You quench the flame.", MSG_VISUAL) + return TRUE + +/obj/item/bong/examine(mob/user) + . = ..() + if(!reagents.total_volume) + . += "The bowl is empty." + else if (reagents.total_volume > 80) + . += "The bowl is filled to the brim." + else if (reagents.total_volume > 40) + . += "The bowl has plenty weed in it." + else + . += "The bowl has some weed in it." + + . += "Ctrl+Shift-click to empty." + . += "Alt-click to extinguish." + +/obj/item/bong/ignition_effect(atom/A, mob/user) + if(firecharges) + . = "[user] lights [A] off of the [src]." + else + . = "" + +/obj/item/bong/attack(mob/living/carbon/M, mob/living/carbon/user, obj/target) + //if it's lit up, some stuff in the bowl and the user is a target, and we're not on cooldown + + if (M != user) + return ..() + + if(user.is_mouth_covered(head_only = 1)) + to_chat(user, "Remove your headgear first.") + return ..() + + if(user.is_mouth_covered(mask_only = 1)) + to_chat(user, "Remove your mask first.") + return ..() + + if (!reagents.total_volume) + to_chat(user, "There's nothing in the bowl.") + return ..() + + if (!firecharges) + to_chat(user, "You have to light it up first.") + return ..() + + if (last_used_time + 30 >= world.time) + return ..() + var/hit_strength + var/noise + var/hittext = "" + //if the intent is help then you take a small hit, else a big one + if (user.a_intent == INTENT_HARM) + hit_strength = 2 + noise = 100 + hittext = "big hit" + else + hit_strength = 1 + noise = 70 + hittext = "hit" + //bubbling sound + playsound(user.loc,'sound/effects/bonghit.ogg', noise, 1) + + last_used_time = world.time + + //message + user.visible_message("[user] begins to take a [hittext] from the [src]!", \ + "You begin to take a [hittext] from [src].") + + //we take a hit here, after an uninterrupted delay + if(!do_after(user, 25, target = user)) + return + if (!(reagents && reagents.total_volume)) + return + + var/fraction = 12 * hit_strength + + var/datum/effect_system/smoke_spread/chem/smoke_machine/s = new + s.set_up(reagents, hit_strength, 18, user.loc) + s.start() + + reagents.reaction(user, INGEST, fraction) + if(!reagents.trans_to(user, fraction)) + reagents.remove_any(fraction) + + if (hit_strength == 2 && prob(15)) + user.emote("cough") + user.adjustOxyLoss(15) + + user.visible_message("[user] takes a [hittext] from the [src]!", \ + "You take a [hittext] from [src].") + + firecharges = firecharges - 1 + if (!firecharges) + bongturnoff() + if (!reagents.total_volume) + firecharges = 0 + bongturnoff() + + + +/obj/item/bong/proc/bongturnon() + icon_state = icon_on + set_light(3, 0.8) + +/obj/item/bong/proc/bongturnoff() + icon_state = icon_off + set_light(0, 0.0) + + + +/obj/item/bong/coconut + name = "coconut bong" + icon_off = "coconut_bong" + icon_on = "coconut_bong_lit" + desc = "A water bong used for smoking dried plants. This one's made out of a coconut and some bamboo." \ No newline at end of file diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 2392973b22..10a2b2c807 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -665,6 +665,13 @@ name = "Booze Dispenser (Machine Board)" build_path = /obj/machinery/chem_dispenser/drinks/beer +/obj/item/circuitboard/machine/chem_dispenser/abductor + name = "Reagent Synthetizer (Abductor Machine Board)" + icon_state = "abductor_mod" + build_path = /obj/machinery/chem_dispenser/abductor + def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) + needs_anchored = FALSE + /obj/item/circuitboard/machine/smoke_machine name = "Smoke Machine (Machine Board)" build_path = /obj/machinery/smoke_machine diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 702347c220..07d58c1754 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -47,8 +47,7 @@ /obj/item/defibrillator/update_icon() update_power() - update_overlays() - update_charge() + return ..() /obj/item/defibrillator/proc/update_power() if(!QDELETED(cell)) @@ -59,23 +58,20 @@ else powered = FALSE -/obj/item/defibrillator/proc/update_overlays() - cut_overlays() +/obj/item/defibrillator/update_overlays() + . = ..() if(!on) - add_overlay("[initial(icon_state)]-paddles") + . += "[initial(icon_state)]-paddles" if(powered) - add_overlay("[initial(icon_state)]-powered") - if(!cell) - add_overlay("[initial(icon_state)]-nocell") - if(!safety) - add_overlay("[initial(icon_state)]-emagged") - -/obj/item/defibrillator/proc/update_charge() - if(powered) //so it doesn't show charge if it's unpowered + . += "[initial(icon_state)]-powered" if(!QDELETED(cell)) var/ratio = cell.charge / cell.maxcharge ratio = CEILING(ratio*4, 1) * 25 add_overlay("[initial(icon_state)]-charge[ratio]") + if(!cell) + . += "[initial(icon_state)]-nocell" + if(!safety) + . += "[initial(icon_state)]-emagged" /obj/item/defibrillator/CheckParts(list/parts_list) ..() diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 0c73d829ff..bf9c5daccd 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -2,7 +2,7 @@ name = "forcefield projector" desc = "An experimental device that can create several forcefields at a distance." icon = 'icons/obj/device.dmi' - icon_state = "signmaker_engi" + icon_state = "signmaker_forcefield" slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL item_flags = NOBLUDGEON diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 7dc2f1d60b..3ee4a14a91 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -8,7 +8,8 @@ w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT var/mob/living/silicon/pai/pai - resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE + resistance_flags = FIRE_PROOF | ACID_PROOF + max_integrity = 200 /obj/item/paicard/suicide_act(mob/living/user) user.visible_message("[user] is staring sadly at [src]! [user.p_they()] can't keep living without real human intimacy!") @@ -45,6 +46,8 @@ dat += "Radio Uplink
    " dat += "Transmit: [(pai.radio.wires.is_cut(WIRE_TX)) ? "Disabled" : "Enabled"]
    " dat += "Receive: [(pai.radio.wires.is_cut(WIRE_RX)) ? "Disabled" : "Enabled"]
    " + if(pai.radio_short) + dat += "Reset radio short: \[RESET\]
    " else dat += "Radio Uplink
    " dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
    " @@ -82,7 +85,6 @@ pai.master = M.real_name pai.master_dna = M.dna.unique_enzymes to_chat(pai, "You have been bound to a new master.") - pai.emittersemicd = FALSE if(href_list["wipe"]) var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No") if(confirm == "Yes") @@ -96,6 +98,8 @@ var/wire = text2num(href_list["wires"]) if(pai.radio) pai.radio.wires.cut(wire) + if(href_list["reset_radio_short"]) + pai.unshort_radio() if(href_list["setlaws"]) var/newlaws = copytext(sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.laws.supplied[1]) as message),1,MAX_MESSAGE_LEN) if(newlaws && pai) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 4d91fee9aa..cc009b5fc2 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -44,11 +44,6 @@ icon_state = "eng_cypherkey" channels = list(RADIO_CHANNEL_ENGINEERING = 1) -/obj/item/encryptionkey/headset_rob - name = "robotics radio encryption key" - icon_state = "rob_cypherkey" - channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1) - /obj/item/encryptionkey/headset_med name = "medical radio encryption key" icon_state = "med_cypherkey" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 1d0f94de71..42d9ec0269 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -123,12 +123,6 @@ GLOBAL_LIST_INIT(channel_tokens, list( icon_state = "eng_headset" keyslot = new /obj/item/encryptionkey/headset_eng -/obj/item/radio/headset/headset_rob - name = "robotics radio headset" - desc = "Made specifically for the roboticists, who cannot decide between departments." - icon_state = "rob_headset" - keyslot = new /obj/item/encryptionkey/headset_rob - /obj/item/radio/headset/headset_med name = "medical radio headset" desc = "A headset for the trained staff of the medbay." @@ -230,6 +224,14 @@ GLOBAL_LIST_INIT(channel_tokens, list( icon_state = "srv_headset" keyslot = new /obj/item/encryptionkey/headset_service +/obj/item/radio/headset/headset_clown + name = "clown's headset" + desc = "A headset for the clown. Finally. A megaphone you can't take away." + icon_state = "srv_headset" + keyslot = new /obj/item/encryptionkey/headset_service + command = TRUE + commandspan = SPAN_CLOWN + /obj/item/radio/headset/headset_cent name = "\improper CentCom headset" desc = "A headset used by the upper echelons of Nanotrasen." diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 7823e6bf87..22012a114f 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -29,6 +29,7 @@ var/freqlock = FALSE // Frequency lock to stop the user from untuning specialist radios. var/use_command = FALSE // If true, broadcasts will be large and BOLD. var/command = FALSE // If true, use_command can be toggled at will. + var/commandspan = SPAN_COMMAND //allow us to set what the fuck we want for headsets // Encryption key handling var/obj/item/encryptionkey/keyslot @@ -206,7 +207,7 @@ return if(use_command) - spans |= SPAN_COMMAND + spans |= commandspan /* Roughly speaking, radios attempt to make a subspace transmission (which diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index fca7f9bc6d..a8d57fab69 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -224,7 +224,7 @@ merge_gases() for(var/i in 1 to 6) - addtimer(CALLBACK(src, .proc/update_icon), 20 + (i - 1) * 10) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 20 + (i - 1) * 10) else if(valve_open && tank_one && tank_two) split_gases() diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index f97b3f99d6..8054d8c6a4 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -76,7 +76,7 @@ GLOBAL_LIST_EMPTY(possible_gifts) /obj/item/clothing/suit/poncho/red, /obj/item/clothing/suit/snowman, /obj/item/clothing/head/snowman, - /obj/item/trash/coal) + /obj/item/stack/sheet/mineral/coal) gift_type_list += subtypesof(/obj/item/clothing/head/collectable) gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) //All toys, except for abstract types and syndicate cards. diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 62a7742628..70cd503ef4 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -414,6 +414,23 @@ name = "empty scroll" icon_state = "blankscroll" +/obj/item/book/granter/martial/bass + martial = /datum/martial_art/the_rising_bass + name = "shifting scroll" + martialname = "rising bass" + desc = "A paper scroll that seems to move even as you read it, the letters never seem to stay still." + greet = "You have learned the ancient martial art of the Rising Bass. Your skill at running away has increased quite a bit. Use the combos to get away from opponents quickly. Along with this, you now dodge all projectiles and catch anything thrown at you." + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll2" + remarks = list("The trick is to disarm them...","Running away helps in many situations...","Never stay still...","Fighting won't help unless you're forced to...", "Crush their limbs to incapacitate them...", "Stay as far away as possible...") + +/obj/item/book/granter/martial/bass/onlearned(mob/living/carbon/user) + ..() + if(oneuse == TRUE) + desc = "It's completely blank." + name = "empty scroll" + icon_state = "blankscroll" + /obj/item/book/granter/martial/plasma_fist martial = /datum/martial_art/plasma_fist name = "frayed scroll" diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index 48ecf8273a..724cfc8f9d 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -14,23 +14,31 @@ do_sparks(rand(5, 9), FALSE, src) playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) new /obj/effect/dummy/lighting_obj (flashbang_turf, LIGHT_COLOR_WHITE, (flashbang_range + 2), 4, 2) - for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf)) - bang(get_turf(M), M) + flashbang_mobs(flashbang_turf, flashbang_range) qdel(src) -/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M) +/obj/item/grenade/flashbang/proc/flashbang_mobs(turf/source, range) + var/list/banged = get_hearers_in_view(range, source) + var/list/flashed = viewers(range, source) + for(var/mob/living/l in banged) + bang(l, source) + for(var/mob/living/l in flashed) + flash(l, source) + +/obj/item/grenade/flashbang/proc/bang(mob/living/M, turf/source) if(M.stat == DEAD) //They're dead! return M.show_message("BANG", MSG_AUDIBLE) - var/distance = max(0,get_dist(get_turf(src),T)) - -//Flash - if(M.flash_act(affect_silicon = 1)) - M.Knockdown(max(200/max(1,distance), 60)) -//Bang + var/distance = get_dist(get_turf(M), source) if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this. M.Knockdown(200) M.soundbang_act(1, 200, 10, 15) - else M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5)) + +/obj/item/grenade/flashbang/proc/flash(mob/living/M, turf/source) + if(M.stat == DEAD) //They're dead! + return + var/distance = get_dist(get_turf(M), source) + if(M.flash_act(affect_silicon = 1)) + M.Knockdown(max(200/max(1,distance), 60)) diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 78881d901e..eb58089293 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -79,7 +79,7 @@ /obj/item/holosign_creator/atmos name = "ATMOS holofan projector" desc = "A holographic projector that creates holographic barriers that prevent changes in atmosphere conditions." - icon_state = "signmaker_engi" + icon_state = "signmaker_atmos" holosign_type = /obj/structure/holosign/barrier/atmos creation_time = 0 max_signs = 3 diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 16262d61c3..4549dc73b6 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -374,7 +374,7 @@ It appears to have a wooden grip and a shaved down guard." icon_state = "cxsword_hilt_traitor" force_on = 30 - armour_penetration = 50 + armour_penetration = 35 embedding = list("embedded_pain_multiplier" = 10, "embed_chance" = 75, "embedded_fall_chance" = 0, "embedded_impact_pain_multiplier" = 10) block_chance = 50 hitsound_on = 'sound/weapons/blade1.ogg' diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index d8abff70a6..4242fb6c4b 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -216,10 +216,11 @@ return else if(last_hit < world.time) + if(target.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) + playsound(target, 'sound/weapons/genhit.ogg', 50, 1) + return if(ishuman(target)) var/mob/living/carbon/human/H = target - if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - return if(check_martial_counter(H, user)) return playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 77bc7ed810..c09f5b1b65 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -11,11 +11,9 @@ var/charge_cost = 30 /obj/item/borg/stun/attack(mob/living/M, mob/living/user) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.check_shields(src, 0, "[M]'s [name]", MELEE_ATTACK)) - playsound(M, 'sound/weapons/genhit.ogg', 50, 1) - return FALSE + if(M.check_shields(src, 0, "[M]'s [name]", MELEE_ATTACK)) + playsound(M, 'sound/weapons/genhit.ogg', 50, 1) + return FALSE if(iscyborg(user)) var/mob/living/silicon/robot/R = user if(!R.cell.use(charge_cost)) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 9f3e5f6bd4..178bdd8a5e 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -2,8 +2,8 @@ name = "medical pack" singular_name = "medical pack" icon = 'icons/obj/stack_objects.dmi' - amount = 6 - max_amount = 6 + amount = 12 + max_amount = 12 w_class = WEIGHT_CLASS_TINY full_w_class = WEIGHT_CLASS_TINY throw_speed = 3 @@ -11,95 +11,42 @@ resistance_flags = FLAMMABLE max_integrity = 40 novariants = FALSE - var/heal_brute = 0 - var/heal_burn = 0 - var/stop_bleeding = 0 + item_flags = NOBLUDGEON var/self_delay = 50 /obj/item/stack/medical/attack(mob/living/M, mob/user) - if(M.stat == DEAD && !stop_bleeding) - var/t_him = "it" - if(M.gender == MALE) - t_him = "him" - else if(M.gender == FEMALE) - t_him = "her" - to_chat(user, "\The [M] is dead, you cannot help [t_him]!") + . = ..() + if(!M.can_inject(user, TRUE)) return - - if(!iscarbon(M) && !isanimal(M)) - to_chat(user, "You don't know how to apply \the [src] to [M]!") - return 1 - - var/obj/item/bodypart/affecting - if(iscarbon(M)) - var/mob/living/carbon/C = M - affecting = C.get_bodypart(check_zone(user.zone_selected)) - if(!affecting) //Missing limb? - to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!") + if(M == user) + user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...") + if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE))) return - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(stop_bleeding) - if(H.bleedsuppress) - to_chat(user, "[H]'s bleeding is already bandaged!") - return - else if(!H.bleed_rate) - to_chat(user, "[H] isn't bleeding!") - return + if(heal(M, user)) + log_combat(user, M, "healed", src.name) + use(1) - if(isliving(M)) - if(!M.can_inject(user, 1)) - return +/obj/item/stack/medical/proc/heal(mob/living/M, mob/user) + return - if(user) - if (M != user) - if (isanimal(M)) - var/mob/living/simple_animal/critter = M - if (!(critter.healable)) - to_chat(user, " You cannot use [src] on [M]!") - return - else if (critter.health == critter.maxHealth) - to_chat(user, " [M] is at full health.") - return - else if(src.heal_brute < 1) - to_chat(user, " [src] won't help [M] at all.") - return - user.visible_message("[user] applies [src] on [M].", "You apply [src] on [M].") - else - var/t_himself = "itself" - if(user.gender == MALE) - t_himself = "himself" - else if(user.gender == FEMALE) - t_himself = "herself" - user.visible_message("[user] starts to apply [src] on [t_himself]...", "You begin applying [src] on yourself...") - if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject,user,1))) - return - user.visible_message("[user] applies [src] on [t_himself].", "You apply [src] on yourself.") - - - if(iscarbon(M)) - var/mob/living/carbon/C = M - affecting = C.get_bodypart(check_zone(user.zone_selected)) - if(!affecting) //Missing limb? - to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!") - return - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(stop_bleeding) - if(!H.bleedsuppress) //so you can't stack bleed suppression - H.suppress_bloodloss(stop_bleeding) - if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR - if(affecting.heal_damage(heal_brute, heal_burn)) +/obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/C, mob/user, brute, burn) + var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected)) + if(!affecting) //Missing limb? + to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!") + return + if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR + if(affecting.brute_dam && brute || affecting.burn_dam && burn) + user.visible_message("[user] applies \the [src] on [C]'s [affecting.name].", "You apply \the [src] on [C]'s [affecting.name].") + if(affecting.heal_damage(brute, burn)) C.update_damage_overlays() - else - to_chat(user, "Medicine won't work on a robotic limb!") - else - M.heal_bodypart_damage((src.heal_brute/2), (src.heal_burn/2)) - - use(1) - + return TRUE + to_chat(user, "[C]'s [affecting.name] can not be healed with \the [src].") + return + to_chat(user, "\The [src] won't work on a robotic limb!") +/obj/item/stack/medical/get_belt_overlay() + return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") /obj/item/stack/medical/bruise_pack name = "bruise pack" @@ -108,27 +55,54 @@ icon_state = "brutepack" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - heal_brute = 40 + var/heal_brute = 20 self_delay = 20 grind_results = list("styptic_powder" = 10) +/obj/item/stack/medical/bruise_pack/heal(mob/living/M, mob/user) + if(M.stat == DEAD) + to_chat(user, " [M] is dead. You can not help [M.p_them()]!") + return + if(isanimal(M)) + var/mob/living/simple_animal/critter = M + if (!(critter.healable)) + to_chat(user, " You cannot use \the [src] on [M]!") + return FALSE + else if (critter.health == critter.maxHealth) + to_chat(user, " [M] is at full health.") + return FALSE + user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].") + M.heal_bodypart_damage((heal_brute/2)) + return TRUE + if(iscarbon(M)) + return heal_carbon(M, user, heal_brute, 0) + to_chat(user, "You can't heal [M] with the \the [src]!") + /obj/item/stack/medical/bruise_pack/suicide_act(mob/user) user.visible_message("[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) /obj/item/stack/medical/gauze name = "medical gauze" - desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds." + desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, heals minor wounds." gender = PLURAL singular_name = "medical gauze" icon_state = "gauze" - stop_bleeding = 1800 - self_delay = 20 - max_amount = 12 + var/stop_bleeding = 1800 + var/heal_brute = 5 + self_delay = 10 +/obj/item/stack/medical/gauze/heal(mob/living/M, mob/user) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression + H.suppress_bloodloss(stop_bleeding) + to_chat(user, "You stop the bleeding of [M]!") + return TRUE + to_chat(user, "You can not use \the [src] on [M]!") /obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/wirecutters) || I.get_sharpness()) + if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) if(get_amount() < 2) to_chat(user, "You need at least two gauzes to do this!") return @@ -149,6 +123,7 @@ singular_name = "improvised gauze" desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds." stop_bleeding = 900 + heal_brute = 0 /obj/item/stack/medical/gauze/cyborg materials = list() @@ -163,13 +138,18 @@ icon_state = "ointment" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - heal_burn = 40 + var/heal_burn = 20 self_delay = 20 grind_results = list("silver_sulfadiazine" = 10) +/obj/item/stack/medical/ointment/heal(mob/living/M, mob/user) + if(M.stat == DEAD) + to_chat(user, " [M] is dead. You can not help [M.p_them()]!") + return + if(iscarbon(M)) + return heal_carbon(M, user, 0, heal_burn) + to_chat(user, "You can't heal [M] with the \the [src]!") + /obj/item/stack/medical/ointment/suicide_act(mob/living/user) user.visible_message("[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic?") return TOXLOSS - -/obj/item/stack/medical/get_belt_overlay() - return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 63ebd24b16..fe42f88f56 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -4,7 +4,6 @@ Mineral Sheets - Sandstone - Sandbags - Diamond - - Snow - Uranium - Plasma - Gold @@ -15,8 +14,9 @@ Mineral Sheets Others: - Adamantine - Mythril - - Enriched Uranium + - Snow - Abductor + - Coal */ /obj/item/stack/sheet/mineral/Initialize(mapload) @@ -410,3 +410,36 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ /obj/item/stack/sheet/mineral/abductor/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.abductor_recipes . = ..() + +/* + * Coal + */ + +/obj/item/stack/sheet/mineral/coal + name = "coal" + desc = "Someone's gotten on the naughty list." + icon = 'icons/obj/mining.dmi' + icon_state = "slag" + singular_name = "coal lump" + merge_type = /obj/item/stack/sheet/mineral/coal + grind_results = list("carbon" = 20) + +/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params) + if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite + var/turf/T = get_turf(src) + message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") + log_game("Coal ignited by [key_name(user)] in [AREACOORD(T)]") + fire_act(W.get_temperature()) + return TRUE + else + return ..() + +/obj/item/stack/sheet/mineral/coal/fire_act(exposed_temperature, exposed_volume) + atmos_spawn_air("co2=[amount*10];TEMP=[exposed_temperature]") + qdel(src) + +/obj/item/stack/sheet/mineral/coal/five + amount = 5 + +/obj/item/stack/sheet/mineral/coal/ten + amount = 10 \ No newline at end of file diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4fc31ea674..34146d89b3 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -673,7 +673,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ merge_type = /obj/item/stack/sheet/bone GLOBAL_LIST_INIT(plastic_recipes, list( - new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \ + new /datum/stack_recipe("see-through plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \ + new /datum/stack_recipe("opaque plastic flaps", /obj/structure/plasticflaps/opaque, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \ new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \ new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \ new /datum/stack_recipe("large trash cart", /obj/structure/closet/crate/bin,50),\ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index e8bd50f19b..4180681754 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -192,9 +192,15 @@ var/obj/O if(R.max_res_amount > 1) //Is it a stack? O = new R.result_type(usr.drop_location(), R.res_amount * multiplier) + else if(ispath(R.result_type, /turf)) + var/turf/T = usr.drop_location() + if(!isturf(T)) + return + T.PlaceOnTop(R.result_type, flags = CHANGETURF_INHERIT_AIR) else O = new R.result_type(usr.drop_location()) - O.setDir(usr.dir) + if(O) + O.setDir(usr.dir) use(R.req_amount * multiplier) //START: oh fuck i'm so sorry @@ -439,4 +445,4 @@ /datum/stack_recipe_list/New(title, recipes) src.title = title - src.recipes = recipes \ No newline at end of file + src.recipes = recipes diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 15db8e2ebd..d200471b5b 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -551,7 +551,7 @@ /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents() new /obj/item/clothing/shoes/magboots/syndie(src) - new /obj/item/storage/firstaid/tactical(src) + new /obj/item/storage/firstaid/tactical/nukeop(src) new /obj/item/gun/ballistic/automatic/l6_saw/toy(src) new /obj/item/ammo_box/foambox/riot(src) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 3a4579d3f8..6c250029a6 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -61,6 +61,7 @@ /obj/item/radio, /obj/item/clothing/gloves, /obj/item/holosign_creator, + /obj/item/forcefield_projector, /obj/item/assembly/signaler )) STR.can_hold = can_hold @@ -458,8 +459,7 @@ /obj/item/extinguisher/mini, /obj/item/radio, /obj/item/clothing/gloves, - /obj/item/holosign_creator/atmos, - /obj/item/holosign_creator/engineering, + /obj/item/holosign_creator, /obj/item/forcefield_projector, /obj/item/assembly/signaler, /obj/item/lightreplacer, @@ -571,6 +571,7 @@ /obj/item/reagent_containers/spray, /obj/item/soap, /obj/item/holosign_creator, + /obj/item/forcefield_projector, /obj/item/key/janitor, /obj/item/clothing/gloves, /obj/item/melee/flyswatter, @@ -582,7 +583,7 @@ /obj/item/storage/belt/bandolier name = "bandolier" - desc = "A bandolier for holding shotgun ammunition." + desc = "A bandolier for holding ammunition." icon_state = "bandolier" item_state = "bandolier" @@ -592,7 +593,7 @@ STR.max_items = 18 STR.display_numerical_stacking = TRUE STR.can_hold = typecacheof(list( - /obj/item/ammo_casing/shotgun + /obj/item/ammo_casing )) /obj/item/storage/belt/bandolier/durathread diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index e214db3c71..4b2b3e2203 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1259,3 +1259,12 @@ var/obj/item/stack/sheet/cardboard/I = new(user.drop_location()) qdel(src) user.put_in_hands(I) + +/obj/item/storage/box/marshmallow + name = "box of marshmallows" + desc = "A box of marshmallows." + illustration = "marshmallow" + +/obj/item/storage/box/marshmallow/PopulateContents() + for (var/i in 1 to 5) + new /obj/item/reagent_containers/food/snacks/marshmallow(src) \ No newline at end of file diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 0d9b86fd68..8c96e567d1 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -176,18 +176,36 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_combined_w_class = 16 + STR.max_items = 8 /obj/item/storage/firstaid/tactical/PopulateContents() if(empty) return new /obj/item/stack/medical/gauze(src) new /obj/item/defibrillator/compact/combat/loaded(src) - new /obj/item/reagent_containers/hypospray/combat(src) - new /obj/item/reagent_containers/pill/patch/styptic(src) - new /obj/item/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/reagent_containers/syringe/lethal/choral(src) + new /obj/item/reagent_containers/hypospray/combat/omnizine(src) + new /obj/item/reagent_containers/medspray/styptic(src) + new /obj/item/reagent_containers/medspray/silver_sulf(src) + new /obj/item/healthanalyzer/advanced(src) + new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for new /obj/item/clothing/glasses/hud/health/night(src) +/obj/item/storage/firstaid/tactical/nukeop + name = "improved combat medical kit" + +/obj/item/storage/firstaid/tactical/nukeop/PopulateContents() + if(empty) + return + new /obj/item/stack/medical/gauze(src) + new /obj/item/defibrillator/compact/combat/loaded(src) + new /obj/item/reagent_containers/hypospray/combat(src) + new /obj/item/reagent_containers/medspray/styptic(src) + new /obj/item/reagent_containers/medspray/silver_sulf(src) + new /obj/item/healthanalyzer/advanced(src) + new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for + new /obj/item/clothing/glasses/hud/health/night(src) + /* * Pill Bottles */ diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 223c8e9cf6..817465a16c 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -390,4 +390,10 @@ new /obj/item/seeds/random(src) if(prob(50)) - new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box \ No newline at end of file + new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box + +/obj/item/storage/box/syndie_kit/revolver + +/obj/item/storage/box/syndie_kit/revolver/PopulateContents() + new /obj/item/gun/ballistic/revolver(src) + new /obj/item/ammo_box/a357(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 484b9862ff..6972587263 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -36,7 +36,7 @@ . = ..() if(preload_cell_type) if(!ispath(preload_cell_type,/obj/item/stock_parts/cell)) - log_world("### MAP WARNING, [src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") + log_mapping("[src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") else cell = new preload_cell_type(src) update_icon() @@ -168,11 +168,9 @@ /obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that - playsound(L, 'sound/weapons/genhit.ogg', 50, 1) - return FALSE + if(L.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that + playsound(L, 'sound/weapons/genhit.ogg', 50, 1) + return FALSE var/stunpwr = stunforce var/obj/item/stock_parts/cell/our_cell = get_cell() if(!our_cell) diff --git a/code/game/objects/items/telescopic_iv.dm b/code/game/objects/items/telescopic_iv.dm new file mode 100644 index 0000000000..9b0b714ea5 --- /dev/null +++ b/code/game/objects/items/telescopic_iv.dm @@ -0,0 +1,17 @@ +/obj/item/tele_iv + name = "telescopic IV drip" + desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down." + icon = 'icons/obj/iv_drip.dmi' + icon_state = "tele_iv" + +/obj/item/tele_iv/attack_self(mob/user) + deploy_iv(user, user.loc) + +/obj/item/tele_iv/afterattack(atom/target, mob/user, proximity) + . = ..() + if(proximity && isopenturf(target) && user.CanReach(target)) + deploy_iv(user, target) + +/obj/item/tele_iv/proc/deploy_iv(mob/user, atom/location) + new /obj/machinery/iv_drip/telescopic(location) + qdel(src) diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 37ab948332..b2158eb1c8 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -72,17 +72,10 @@ resistance_flags = NONE grind_results = list("aluminium" = 10) +/obj/item/trash/boritos + name = "boritos bag" + icon_state = "boritos" + grind_results = list("aluminium" = 1) //from the mylar bag + /obj/item/trash/attack(mob/M, mob/living/user) return - -/obj/item/trash/coal - name = "lump of coal" - icon = 'icons/obj/mining.dmi' - icon_state = "slag" - desc = "Someone's gotten on the naughty list." - grind_results = list("carbon" = 20) - -/obj/item/trash/coal/burn() - visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...") - new /obj/item/stack/ore/diamond(loc) - qdel(src) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index dd7d46d0d7..d7891feaa0 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -872,7 +872,7 @@ user.visible_message("[user] blasts \the [target] with \the [src]!") playsound(target, 'sound/magic/disintegrate.ogg', 100, 1) W.break_wall() - W.ScrapeAway() + W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return //HF blade diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 51386c791c..14ac2f037e 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -80,13 +80,12 @@ SEND_SIGNAL(src, COMSIG_OBJ_SETANCHORED, anchorvalue) anchored = anchorvalue -/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - ..() +/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, messy_throw) + . = ..() if(obj_flags & FROZEN) visible_message("[src] shatters into a million pieces!") qdel(src) - /obj/assume_air(datum/gas_mixture/giver) if(loc) return loc.assume_air(giver) @@ -173,9 +172,6 @@ /obj/proc/container_resist(mob/living/user) return -/obj/proc/update_icon() - return - /mob/proc/unset_machine() if(machine) machine.on_unset_machine(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 8da50d488f..579b1444a5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -12,18 +12,12 @@ new /obj/item/clothing/head/hardhat/white(src) new /obj/item/clothing/head/hardhat/weldhat/white(src) new /obj/item/clothing/gloves/color/yellow(src) - new /obj/item/clothing/shoes/sneakers/brown(src) new /obj/item/tank/jetpack/suit(src) new /obj/item/cartridge/ce(src) new /obj/item/radio/headset/heads/ce(src) - new /obj/item/storage/toolbox/mechanical(src) - new /obj/item/clothing/suit/hazardvest(src) new /obj/item/megaphone/command(src) new /obj/item/areaeditor/blueprints(src) - new /obj/item/airlock_painter(src) new /obj/item/holosign_creator/engineering(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/multitool(src) new /obj/item/assembly/flash/handheld(src) new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/door_remote/chief_engineer(src) @@ -67,7 +61,7 @@ for(var/i in 1 to 3) new /obj/item/clothing/head/welding(src) for(var/i in 1 to 3) - new /obj/item/weldingtool(src) + new /obj/item/weldingtool/largetank(src) /obj/structure/closet/secure_closet/engineering_personal name = "engineer's locker" @@ -84,7 +78,6 @@ new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/storage/box/emptysandbags(src) - /obj/structure/closet/secure_closet/atmospherics name = "\proper atmospheric technician's locker" req_access = list(ACCESS_ATMOSPHERICS) @@ -103,3 +96,33 @@ new /obj/item/clothing/head/hardhat/atmos(src) new /obj/item/clothing/glasses/meson/engine/tray(src) new /obj/item/extinguisher/advanced(src) + +/* + * Empty lockers + * Some of the lockers are filled with junk, and sometimes its nice to just fill it with your own set-up for your own map gimmicks. + */ + +/obj/structure/closet/secure_closet/engineering_chief/empty + +/obj/structure/closet/secure_closet/engineering_chief/empty/PopulateContents() + return + +/obj/structure/closet/secure_closet/engineering_electrical/empty + +/obj/structure/closet/secure_closet/engineering_electrical/empty/PopulateContents() + return + +/obj/structure/closet/secure_closet/engineering_welding/empty + +/obj/structure/closet/secure_closet/engineering_welding/empty/PopulateContents() + return + +/obj/structure/closet/secure_closet/engineering_personal/empty + +/obj/structure/closet/secure_closet/engineering_personal/empty/PopulateContents() + return + +/obj/structure/closet/secure_closet/atmospherics/empty + +/obj/structure/closet/secure_closet/atmospherics/empty/PopulateContents() + return diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index b8137d831b..e7a0ac2d04 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -41,7 +41,7 @@ to_chat(user, "The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.") user.reagents.add_reagent("godblood",20) update_icon() - addtimer(CALLBACK(src, .proc/update_icon), time_between_uses) + addtimer(CALLBACK(src, /atom/.proc/update_icon), time_between_uses) /obj/structure/healingfountain/update_icon() diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 07a66505e7..271ae72d47 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -73,7 +73,7 @@ else if(glass) user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) + if(W.use_tool(src, user, 40, volume=50) && glass) to_chat(user, "You weld the glass panel out.") if(heat_proof_finished) new /obj/item/stack/sheet/rglass(get_turf(src)) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 05e62c196f..7f0c3c6eb8 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -30,11 +30,11 @@ return var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color") - if(!UNDIE_COLORABLE(GLOB.underwear_list[H.underwear])) + if(!(GLOB.underwear_list[H.underwear]?.has_color)) undergarment_choices -= "Underwear Color" - if(!UNDIE_COLORABLE(GLOB.undershirt_list[H.undershirt])) + if(!(GLOB.undershirt_list[H.undershirt]?.has_color)) undergarment_choices -= "Undershirt Color" - if(!UNDIE_COLORABLE(GLOB.socks_list[H.socks])) + if(!(GLOB.socks_list[H.socks]?.has_color)) undergarment_choices -= "Socks Color" var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 688006a6e3..fd6030453c 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -30,6 +30,8 @@ new/obj/structure/fluff/empty_terrarium(get_turf(src)) return ..() +/obj/effect/mob_spawn/human/seed_vault/special(mob/living/carbon/human/new_spawn) + ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT) //Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers. /obj/effect/mob_spawn/human/ash_walker @@ -251,6 +253,9 @@ new/obj/structure/fluff/empty_cryostasis_sleeper(get_turf(src)) return ..() +/obj/effect/mob_spawn/human/hermit/special(mob/living/carbon/human/new_spawn) + ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT) + //Broken rejuvenation pod: Spawns in animal hospitals in lavaland. Ghosts become disoriented interns and are advised to search for help. /obj/effect/mob_spawn/human/doctor/alive/lavaland name = "broken rejuvenation pod" @@ -353,6 +358,9 @@ new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) ..() +/obj/effect/mob_spawn/human/hotel_staff/special(mob/living/carbon/human/new_spawn) + ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT) + /obj/effect/mob_spawn/human/demonic_friend name = "Essence of friendship" desc = "Oh boy! Oh boy! A friend!" @@ -595,3 +603,64 @@ /obj/effect/mob_spawn/human/pirate/gunner rank = "Gunner" + +/obj/effect/mob_spawn/human/ghostcafe + name = "Ghost Cafe Sleeper" + uses = -1 + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + mob_name = "a ghost cafe visitor" + roundstart = FALSE + anchored = TRUE + density = FALSE + death = FALSE + assignedrole = "Ghost Cafe Visitor" + flavour_text = "Is this what life after death is like?" + skip_reentry_check = TRUE + banType = "ghostcafe" + +/obj/effect/mob_spawn/human/ghostcafe/special(mob/living/carbon/human/new_spawn) + if(new_spawn.client) + new_spawn.client.prefs.copy_to(new_spawn) + var/datum/outfit/O = new /datum/outfit/ghostcafe() + O.equip(new_spawn, FALSE, new_spawn.client) + SSjob.equip_loadout(null, new_spawn, FALSE) + SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn) + ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT) + +/datum/outfit/ghostcafe + name = "ID, jumpsuit and shoes" + uniform = /obj/item/clothing/under/color/random + shoes = /obj/item/clothing/shoes/sneakers/black + id = /obj/item/card/id + r_hand = /obj/item/storage/box/syndie_kit/chameleon/ghostcafe + + +/datum/outfit/ghostcafe/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) + ..() + var/suited = !preference_source || preference_source.prefs.jumpsuit_style == PREF_SUIT + if (CONFIG_GET(flag/grey_assistants)) + if(suited) + uniform = /obj/item/clothing/under/color/grey + else + uniform = /obj/item/clothing/under/skirt/color/grey + else + if(suited) + uniform = /obj/item/clothing/under/color/random + else + uniform = /obj/item/clothing/under/skirt/color/random + +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe + name = "ghost cafe costuming kit" + desc = "Look just the way you did in life - or better!" + +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe/PopulateContents() // Doesn't contain a PDA, for isolation reasons. + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/storage/backpack/chameleon(src) + new /obj/item/clothing/neck/cloak/chameleon(src) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index b946a06432..a7eaea0d16 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -60,7 +60,7 @@ to_chat(user, "You build a floor.") var/turf/T = src.loc if(isspaceturf(T)) - T.PlaceOnTop(/turf/open/floor/plating) + T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) qdel(src) return TRUE return FALSE diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index bd657fe1e8..f2c4e628e0 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -102,13 +102,13 @@ /obj/structure/stairs/proc/force_open_above() var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP) if(T && !istype(T)) - T.ChangeTurf(/turf/open/openspace) + T.ChangeTurf(/turf/open/openspace, flags = CHANGETURF_INHERIT_AIR) /obj/structure/stairs/proc/on_multiz_new(turf/source, dir) if(dir == UP) var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP) if(T && !istype(T)) - T.ChangeTurf(/turf/open/openspace) + T.ChangeTurf(/turf/open/openspace, flags = CHANGETURF_INHERIT_AIR) /obj/structure/stairs/intercept_zImpact(atom/movable/AM, levels = 1) . = ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 76c8f7f11f..e2e0f703f7 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -5,6 +5,8 @@ icon_state = "toilet00" density = FALSE anchored = TRUE + can_buckle = TRUE + buckle_lying = 0 var/open = FALSE //if the lid is up var/cistern = 0 //if the cistern bit is open var/w_items = 0 //the combined w_class of all the items in the cistern @@ -682,4 +684,4 @@ else playsound(loc, 'sound/weapons/tap.ogg', 50, 1) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 80, 1) \ No newline at end of file + playsound(loc, 'sound/items/welder.ogg', 80, 1) diff --git a/code/game/say.dm b/code/game/say.dm index 3bfd11bac0..7f01bf163d 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -126,8 +126,14 @@ GLOBAL_LIST_INIT(freqtospan, list( return returntext return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]" -/proc/attach_spans(input, list/spans) - return "[message_spans_start(spans)][input]" +/atom/movable/proc/attach_spans(input, list/spans) + var/customsayverb = findtext(input, "*") + if(customsayverb) + input = capitalize(copytext(input, customsayverb+1)) + if(input) + return "[message_spans_start(spans)][input]" + else + return /proc/message_spans_start(list/spans) var/output = "You build a floor.") - PlaceOnTop(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else to_chat(user, "You need one floor tile to build a floor!") else diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 0a7b507488..dab0c1c376 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -38,7 +38,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") - PlaceOnTop(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -70,7 +70,7 @@ playsound(src, 'sound/weapons/genhit.ogg', 50, 1) to_chat(user, "You build a floor.") // Create a floor, which has this chasm underneath it - PlaceOnTop(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else to_chat(user, "You need one floor tile to build a floor!") else diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 194014b61a..3f46994da9 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -62,29 +62,29 @@ if(severity != 1 && shielded && target != src) return if(target == src) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return if(target != null) severity = 3 switch(severity) if(1) - ScrapeAway(2) + ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) if(2) switch(pick(1,2;75,3)) if(1) if(!length(baseturfs) || !ispath(baseturfs[baseturfs.len-1], /turf/open/floor)) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) ReplaceWithLattice() else - ScrapeAway(2) + ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) if(prob(33)) new /obj/item/stack/sheet/metal(src) if(2) - ScrapeAway(2) + ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) if(3) if(prob(80)) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) else break_tile() hotspot_expose(1000,CELL_VOLUME) @@ -103,9 +103,9 @@ /turf/open/floor/blob_act(obj/structure/blob/B) return -/turf/open/floor/proc/update_icon() +/turf/open/floor/update_icon() + . = ..() update_visuals() - return 1 /turf/open/floor/attack_paw(mob/user) return attack_hand(user) @@ -135,7 +135,7 @@ burnt = 1 /turf/open/floor/proc/make_plating() - return ScrapeAway() + return ScrapeAway(flags = CHANGETURF_INHERIT_AIR) /turf/open/floor/ChangeTurf(path, new_baseturf, flags) if(!isfloorturf(src)) @@ -213,15 +213,15 @@ /turf/open/floor/narsie_act(force, ignore_mobs, probability = 20) . = ..() if(.) - ChangeTurf(/turf/open/floor/engine/cult) + ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) /turf/open/floor/ratvar_act(force, ignore_mobs) . = ..() if(.) - ChangeTurf(/turf/open/floor/clockwork) + ChangeTurf(/turf/open/floor/clockwork, flags = CHANGETURF_INHERIT_AIR) /turf/open/floor/acid_melt() - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) /turf/open/floor/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) switch(the_rcd.mode) @@ -267,7 +267,7 @@ A.autoclose = TRUE return TRUE if(RCD_DECONSTRUCT) - if(ScrapeAway() == src) + if(ScrapeAway(flags = CHANGETURF_INHERIT_AIR) == src) return FALSE to_chat(user, "You deconstruct [src].") return TRUE diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index ae67edf073..8e0eace9cd 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -11,7 +11,7 @@ name = "plating" icon_state = "plating" intact = FALSE - baseturfs = /turf/open/space + baseturfs = /turf/baseturf_bottom footstep = FOOTSTEP_PLATING barefootstep = FOOTSTEP_HARD_BAREFOOT clawfootstep = FOOTSTEP_HARD_CLAW @@ -61,7 +61,7 @@ to_chat(user, "You begin reinforcing the floor...") if(do_after(user, 30, target = src)) if (R.get_amount() >= 2 && !istype(src, /turf/open/floor/engine)) - PlaceOnTop(/turf/open/floor/engine) + PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) playsound(src, 'sound/items/deconstruct.ogg', 80, 1) R.use(2) to_chat(user, "You reinforce the floor.") @@ -76,7 +76,7 @@ var/obj/item/stack/tile/W = C if(!W.use(1)) return - var/turf/open/floor/T = PlaceOnTop(W.turf_type) + var/turf/open/floor/T = PlaceOnTop(W.turf_type, flags = CHANGETURF_INHERIT_AIR) if(istype(W, /obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow var/obj/item/stack/tile/light/L = W var/turf/open/floor/light/F = T @@ -117,7 +117,7 @@ qdel(L) to_chat(user, "You reinforce the foamed plating with tiling.") playsound(src, 'sound/weapons/Genhit.ogg', 50, TRUE) - ChangeTurf(/turf/open/floor/plating) + ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else playsound(src, 'sound/weapons/tap.ogg', 100, TRUE) //The attack sound is muffled by the foam itself user.changeNext_move(CLICK_CD_MELEE) @@ -125,7 +125,7 @@ if(prob(I.force * 20 - 25)) user.visible_message("[user] smashes through [src]!", \ "You smash through [src] with [I]!") - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) else to_chat(user, "You hit [src], to no effect!") @@ -136,13 +136,13 @@ /turf/open/floor/plating/foam/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) if(passed_mode == RCD_FLOORWALL) to_chat(user, "You build a floor.") - ChangeTurf(/turf/open/floor/plating) + ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE /turf/open/floor/plating/foam/ex_act() ..() - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) /turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/I, tool_type) return diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 9f2da57312..ecc8ee5e8d 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -76,11 +76,6 @@ for(var/obj/item/stack/ore/O in src) SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O) -/turf/open/floor/plating/asteroid/singularity_act() - if(is_planet_level(z)) - return ..() - ScrapeAway() - /turf/open/floor/plating/asteroid/ex_act(severity, target) . = SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) contents_explosion(severity, target) @@ -132,6 +127,7 @@ /turf/open/floor/plating/asteroid/airless initial_gas_mix = AIRLESS_ATMOS + baseturfs = /turf/open/floor/plating/asteroid/airless turf_type = /turf/open/floor/plating/asteroid/airless diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index b04f89f8be..28ffbbd1ff 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -43,7 +43,7 @@ return TRUE if(floor_tile) new floor_tile(src, 2) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return TRUE /turf/open/floor/engine/acid_act(acidpwr, acid_volume) @@ -56,23 +56,23 @@ if(severity != 1 && shielded && target != src) return if(target == src) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return switch(severity) if(1) if(prob(80)) if(!length(baseturfs) || !ispath(baseturfs[baseturfs.len-1], /turf/open/floor)) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) ReplaceWithLattice() else - ScrapeAway(2) + ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) else if(prob(50)) - ScrapeAway(2) + ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) else - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) if(2) if(prob(50)) - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) /turf/open/floor/engine/singularity_pull(S, current_size) ..() diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 362b410cbb..2f8ae0cb93 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -54,7 +54,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") - PlaceOnTop(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index b4e84648c2..8eab4c34fe 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -202,15 +202,20 @@ return 1 return 0 -/turf/closed/wall/r_wall/proc/update_icon() +/turf/closed/wall/r_wall/update_icon() + . = ..() if(d_state != INTACT) smooth = SMOOTH_FALSE clear_smooth_overlays() - icon_state = "r_wall-[d_state]" else smooth = SMOOTH_TRUE queue_smooth_neighbors(src) queue_smooth(src) + +/turf/closed/wall/r_wall/update_icon_state() + if(d_state != INTACT) + icon_state = "r_wall-[d_state]" + else icon_state = "r_wall" /turf/closed/wall/r_wall/singularity_pull(S, current_size) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index f38f13e657..5278374abd 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -125,7 +125,7 @@ qdel(L) playsound(src, 'sound/weapons/genhit.ogg', 50, 1) to_chat(user, "You build a floor.") - PlaceOnTop(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else to_chat(user, "You need one floor tile to build a floor!") else @@ -212,7 +212,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") - PlaceOnTop(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index f0f0667c37..db5fc8a1f8 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -103,10 +103,13 @@ for(var/atom/movable/AM in src) throw_atom(AM) -/turf/open/space/transit/proc/update_icon() - icon_state = "speedspace_ns_[get_transit_state(src)]" +/turf/open/space/transit/update_icon() + . = ..() transform = turn(matrix(), get_transit_angle(src)) +/turf/open/space/transit/update_icon_state() + icon_state = "speedspace_ns_[get_transit_state(src)]" + /proc/get_transit_state(turf/T) var/p = 9 . = 1 diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index d618e457b0..d280ba408b 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -9,7 +9,7 @@ // A list will be created in initialization that figures out the baseturf's baseturf etc. // In the case of a list it is sorted from bottom layer to top. // This shouldn't be modified directly, use the helper procs. - var/list/baseturfs = /turf/open/space + var/list/baseturfs = /turf/baseturf_bottom var/temperature = T20C var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed @@ -391,7 +391,7 @@ continue if(O.invisibility == INVISIBILITY_MAXIMUM) O.singularity_act() - ScrapeAway() + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return(2) /turf/proc/can_have_cabling() @@ -564,4 +564,4 @@ //Whatever happens after high temperature fire dies out or thermite reaction works. //Should return new turf /turf/proc/Melt() - return ScrapeAway() + return ScrapeAway(flags = CHANGETURF_INHERIT_AIR) diff --git a/code/game/world.dm b/code/game/world.dm index 25b8c4d9f3..4043f15f6f 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -108,6 +108,7 @@ GLOBAL_VAR(restart_counter) GLOB.world_href_log = "[GLOB.log_directory]/hrefs.log" GLOB.sql_error_log = "[GLOB.log_directory]/sql.log" GLOB.world_qdel_log = "[GLOB.log_directory]/qdel.log" + GLOB.world_map_error_log = "[GLOB.log_directory]/map_errors.log" GLOB.world_runtime_log = "[GLOB.log_directory]/runtime.log" GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log" GLOB.world_job_debug_log = "[GLOB.log_directory]/job_debug.log" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 895f8c9f88..1cecbbd0e5 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -693,7 +693,7 @@ var/prev_dynamic_voting = CONFIG_GET(flag/dynamic_voting) CONFIG_SET(flag/dynamic_voting,!prev_dynamic_voting) if (!prev_dynamic_voting) - to_chat(world, "Vote is now between extended and dynamic chaos.") + to_chat(world, "Vote is now a ranked choice of dynamic storytellers.") else to_chat(world, "Vote is now between extended and secret.") log_admin("[key_name(usr)] [prev_dynamic_voting ? "disabled" : "enabled"] dynamic voting.") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 53fdb315b5..f08112939a 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -492,7 +492,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) message_admins("[key_name_admin(usr)] assumed direct control of [M].") log_admin("[key_name(usr)] assumed direct control of [M].") var/mob/adminmob = src.mob - M.ckey = src.ckey + adminmob.transfer_ckey(M, send_signal = FALSE) if( isobserver(adminmob) ) qdel(adminmob) SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 2b8d365e15..acd320856a 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -35,6 +35,9 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( /client/proc/cmd_admin_grantfullaccess, /client/proc/cmd_admin_areatest_all, /client/proc/cmd_admin_areatest_station, + #ifdef TESTING + /client/proc/see_dirty_varedits, + #endif /client/proc/cmd_admin_test_atmos_controllers, /client/proc/cmd_admin_rejuvenate, /datum/admins/proc/show_traitor_panel, @@ -84,8 +87,24 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping) SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Range") +#ifdef TESTING +GLOBAL_LIST_EMPTY(dirty_vars) +/client/proc/see_dirty_varedits() + set category = "Mapping" + set name = "Dirty Varedits" + + var/list/dat = list() + dat += "

    Abandon all hope ye who enter here



    " + for(var/thing in GLOB.dirty_vars) + dat += "[thing]
    " + CHECK_TICK + var/datum/browser/popup = new(usr, "dirty_vars", "Dirty Varedits", 900, 750) + popup.set_content(dat.Join()) + popup.open() +#endif + /client/proc/sec_camera_report() set category = "Mapping" set name = "Camera Report" diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 3723b99f4e..c8fbfde4d2 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -37,6 +37,8 @@ dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
    " dat += "Robeless
    " dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
    " + dat += "Martial Artist
    " + dat += "Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist.
    " user << browse(dat, "window=radio") onclose(user, "radio") return diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm index e8d30e8dbe..92504641a9 100644 --- a/code/modules/antagonists/abductor/abductor.dm +++ b/code/modules/antagonists/abductor/abductor.dm @@ -65,6 +65,8 @@ //Equip var/mob/living/carbon/human/H = owner.current H.set_species(/datum/species/abductor) + var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE) + T.mothership = "[team.name]" H.real_name = "[team.name] [sub_role]" H.equipOutfit(outfit) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index b708c59ef7..fce45810d1 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -17,7 +17,7 @@ actions_types = list(/datum/action/item_action/hands_free/activate) allowed = list( /obj/item/abductor, - /obj/item/abductor_baton, + /obj/item/abductor/baton, /obj/item/melee/baton, /obj/item/gun/energy, /obj/item/restraints/handcuffs @@ -57,7 +57,7 @@ /obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A) if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it. - return 1 + return TRUE /obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry) disguise = entry @@ -89,11 +89,9 @@ /obj/item/clothing/suit/armor/abductor/vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) DeactivateStealth() - return 0 /obj/item/clothing/suit/armor/abductor/vest/IsReflect() DeactivateStealth() - return 0 /obj/item/clothing/suit/armor/abductor/vest/ui_action_click() switch(mode) @@ -111,7 +109,10 @@ to_chat(loc, "Combat injection is still recharging.") return var/mob/living/carbon/human/M = loc - M.do_adrenaline(150, FALSE, 0, 0, TRUE, list("inaprovaline" = 3, "synaptizine" = 10, "omnizine" = 10), "You feel a sudden surge of energy!") + M.adjustStaminaLoss(-75) + M.SetUnconscious(0) + M.SetStun(0) + M.SetKnockdown(0) combat_cooldown = 0 START_PROCESSING(SSobj, src) @@ -131,9 +132,11 @@ /obj/item/abductor icon = 'icons/obj/abductor.dmi' + lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' + righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' /obj/item/abductor/proc/AbductorCheck(mob/user) - if(HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING)) + if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING)) return TRUE if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) return TRUE @@ -158,8 +161,6 @@ desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras." icon_state = "gizmo_scan" item_state = "silencer" - lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' var/mode = GIZMO_SCAN var/mob/living/marked = null var/obj/machinery/abductor/console/console @@ -218,12 +219,9 @@ if(marked == target) to_chat(user, "This specimen is already marked!") return - if(ishuman(target)) - if(isabductor(target)) - marked = target - to_chat(user, "You mark [target] for future retrieval.") - else - prepare(target,user) + if(isabductor(target) || iscow(target)) + marked = target + to_chat(user, "You mark [target] for future retrieval.") else prepare(target,user) @@ -247,8 +245,6 @@ desc = "A compact device used to shut down communications equipment." icon_state = "silencer" item_state = "gizmo" - lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' /obj/item/abductor/silencer/attack(mob/living/M, mob/user) if(!AbductorCheck(user)) @@ -292,8 +288,6 @@ or to send a command to a test subject with a charged gland." icon_state = "mind_device_message" item_state = "silencer" - lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' var/mode = MIND_DEVICE_MESSAGE /obj/item/abductor/mind_device/attack_self(mob/user) @@ -389,6 +383,17 @@ item_state = "alienpistol" trigger_guard = TRIGGER_GUARD_ALLOW_ALL +/obj/item/gun/energy/shrink_ray + name = "shrink ray blaster" + desc = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \ + That or it's just space magic. Either way, it shrinks stuff." + ammo_type = list(/obj/item/ammo_casing/energy/shrink) + item_state = "shrink_ray" + icon_state = "shrink_ray" + fire_delay = 30 + selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds + trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them) + /obj/item/paper/guides/antag/abductor name = "Dissection Guide" icon_state = "alienpaper_words" @@ -422,21 +427,18 @@ #define BATON_PROBE 3 #define BATON_MODES 4 -/obj/item/abductor_baton +/obj/item/abductor/baton name = "advanced baton" desc = "A quad-mode baton used for incapacitation and restraining of specimens." var/mode = BATON_STUN - icon = 'icons/obj/abductor.dmi' icon_state = "wonderprodStun" item_state = "wonderprod" - lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' slot_flags = ITEM_SLOT_BELT force = 7 w_class = WEIGHT_CLASS_NORMAL actions_types = list(/datum/action/item_action/toggle_mode) -/obj/item/abductor_baton/proc/toggle(mob/living/user=usr) +/obj/item/abductor/baton/proc/toggle(mob/living/user=usr) mode = (mode+1)%BATON_MODES var/txt switch(mode) @@ -452,7 +454,7 @@ to_chat(usr, "You switch the baton to [txt] mode.") update_icon() -/obj/item/abductor_baton/update_icon() +/obj/item/abductor/baton/update_icon() switch(mode) if(BATON_STUN) icon_state = "wonderprodStun" @@ -467,8 +469,8 @@ icon_state = "wonderprodProbe" item_state = "wonderprodProbe" -/obj/item/abductor_baton/attack(mob/target, mob/living/user) - if(!isabductor(user)) +/obj/item/abductor/baton/attack(mob/target, mob/living/user) + if(!AbductorCheck(user)) return if(iscyborg(target)) @@ -482,11 +484,9 @@ user.do_attack_animation(L) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - playsound(L, 'sound/weapons/genhit.ogg', 50, 1) - return 0 + if(L.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) + playsound(L, 'sound/weapons/genhit.ogg', 50, TRUE) + return FALSE switch (mode) if(BATON_STUN) @@ -498,10 +498,10 @@ if(BATON_PROBE) ProbeAttack(L,user) -/obj/item/abductor_baton/attack_self(mob/living/user) +/obj/item/abductor/baton/attack_self(mob/living/user) toggle(user) -/obj/item/abductor_baton/proc/StunAttack(mob/living/L,mob/living/user) +/obj/item/abductor/baton/proc/StunAttack(mob/living/L,mob/living/user) L.lastattacker = user.real_name L.lastattackerckey = user.ckey @@ -513,7 +513,7 @@ L.visible_message("[user] has stunned [L] with [src]!", \ "[user] has stunned you with [src]!") - playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) + playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) if(ishuman(L)) var/mob/living/carbon/human/H = L @@ -521,7 +521,7 @@ log_combat(user, L, "stunned") -/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user) +/obj/item/abductor/baton/proc/SleepAttack(mob/living/L,mob/living/user) if(L.incapacitated(TRUE, TRUE)) if(L.anti_magic_check(FALSE, FALSE, TRUE, 0)) to_chat(user, "The specimen's tinfoil protection is interfering with the sleep inducement!") @@ -531,7 +531,7 @@ return L.visible_message("[user] has induced sleep in [L] with [src]!", \ "You suddenly feel very drowsy!") - playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) + playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) L.Sleeping(1200) log_combat(user, L, "put to sleep") else @@ -545,13 +545,13 @@ L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ "You suddenly feel drowsy!") -/obj/item/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user) +/obj/item/abductor/baton/proc/CuffAttack(mob/living/L,mob/living/user) if(!iscarbon(L)) return var/mob/living/carbon/C = L if(!C.handcuffed) if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()) - playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) + playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) C.visible_message("[user] begins restraining [C] with [src]!", \ "[user] begins shaping an energy field around your hands!") if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())) @@ -565,7 +565,7 @@ else to_chat(user, "[C] doesn't have two hands...") -/obj/item/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user) +/obj/item/abductor/baton/proc/ProbeAttack(mob/living/L,mob/living/user) L.visible_message("[user] probes [L] with [src]!", \ "[user] probes you!") @@ -610,7 +610,7 @@ S.start() . = ..() -/obj/item/abductor_baton/examine(mob/user) +/obj/item/abductor/baton/examine(mob/user) . = ..() switch(mode) if(BATON_STUN) @@ -639,10 +639,44 @@ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) /obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) return // Stops humans from disassembling abductor headsets. return ..() +/obj/item/abductor_machine_beacon + name = "machine beacon" + desc = "A beacon designed to instantly tele-construct abductor machinery." + icon = 'icons/obj/abductor.dmi' + icon_state = "beacon" + w_class = WEIGHT_CLASS_TINY + var/obj/machinery/spawned_machine + +/obj/item/abductor_machine_beacon/attack_self(mob/user) + ..() + user.visible_message("[user] places down [src] and activates it.", "You place down [src] and activate it.") + user.dropItemToGround(src) + playsound(src, 'sound/machines/terminal_alert.ogg', 50) + addtimer(CALLBACK(src, .proc/try_spawn_machine), 30) + +/obj/item/abductor_machine_beacon/proc/try_spawn_machine() + var/viable = FALSE + if(isfloorturf(loc)) + var/turf/T = loc + viable = TRUE + for(var/obj/thing in T.contents) + if(thing.density || ismachinery(thing) || isstructure(thing)) + viable = FALSE + if(viable) + playsound(src, 'sound/effects/phasein.ogg', 50, TRUE) + var/new_machine = new spawned_machine(loc) + visible_message("[new_machine] warps on top of the beacon!") + qdel(src) + else + playsound(src, 'sound/machines/buzz-two.ogg', 50) + +/obj/item/abductor_machine_beacon/chem_dispenser + name = "beacon - Reagent Synthesizer" + spawned_machine = /obj/machinery/chem_dispenser/abductor /obj/item/scalpel/alien name = "alien scalpel" @@ -706,11 +740,11 @@ framestackamount = 1 /obj/structure/table_frame/abductor/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/wrench)) + if(I.tool_behaviour == TOOL_WRENCH) to_chat(user, "You start disassembling [src]...") I.play_tool_sound(src) if(I.use_tool(src, user, 30)) - playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) for(var/i = 1, i <= framestackamount, i++) new framestack(get_turf(src)) qdel(src) @@ -760,7 +794,6 @@ icon = 'icons/obj/abductor.dmi' icon_state = "bed" can_buckle = 1 - buckle_lying = 1 var/static/list/injected_reagents = list("corazone") @@ -798,3 +831,11 @@ airlock_type = /obj/machinery/door/airlock/abductor material_type = /obj/item/stack/sheet/mineral/abductor noglass = TRUE + +/obj/item/clothing/under/abductor + desc = "The most advanced form of jumpsuit known to reality, looks uncomfortable." + name = "alien jumpsuit" + icon_state = "abductor" + item_state = "bl_suit" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0) + can_adjust = 0 diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm index 7bfadf6f3b..ec76f61ec6 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm @@ -1,6 +1,6 @@ /datum/outfit/abductor name = "Abductor Basic" - uniform = /obj/item/clothing/under/color/grey //they're greys gettit + uniform = /obj/item/clothing/under/abductor shoes = /obj/item/clothing/shoes/combat back = /obj/item/storage/backpack ears = /obj/item/radio/headset/abductor @@ -34,7 +34,7 @@ name = "Abductor Agent" head = /obj/item/clothing/head/helmet/abductor suit = /obj/item/clothing/suit/armor/abductor/vest - suit_store = /obj/item/abductor_baton + suit_store = /obj/item/abductor/baton belt = /obj/item/storage/belt/military/abductor/full backpack_contents = list( diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index f7b49e1cf4..82170444d0 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -5,18 +5,23 @@ icon_state = "gland" status = ORGAN_ROBOTIC beating = TRUE + organ_flags = ORGAN_NO_SPOIL var/true_name = "baseline placebo referencer" var/cooldown_low = 300 var/cooldown_high = 300 var/next_activation = 0 var/uses // -1 For infinite - var/human_only = 0 - var/active = 0 + var/human_only = FALSE + var/active = FALSE var/mind_control_uses = 1 var/mind_control_duration = 1800 var/active_mind_control = FALSE +/obj/item/organ/heart/gland/Initialize() + . = ..() + icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral")) + /obj/item/organ/heart/gland/examine(mob/user) . = ..() if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user)) @@ -55,14 +60,18 @@ active_mind_control = TRUE message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]") update_gland_hud() - + var/obj/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /obj/screen/alert/mind_control) + mind_alert.command = command addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration) + return TRUE /obj/item/organ/heart/gland/proc/clear_mind_control() if(!ownerCheck() || !active_mind_control) return FALSE - to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders.") + to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders.") + owner.clear_alert("mind_control") active_mind_control = FALSE + return TRUE /obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = 0) active = 0 @@ -98,257 +107,4 @@ active = 0 /obj/item/organ/heart/gland/proc/activate() - return - -/obj/item/organ/heart/gland/heals - true_name = "coherency harmonizer" - cooldown_low = 200 - cooldown_high = 400 - uses = -1 - icon_state = "health" - mind_control_uses = 3 - mind_control_duration = 3000 - -/obj/item/organ/heart/gland/heals/activate() - to_chat(owner, "You feel curiously revitalized.") - owner.adjustToxLoss(-20, FALSE, TRUE) - owner.heal_bodypart_damage(20, 20, 0, TRUE) - owner.adjustOxyLoss(-20) - -/obj/item/organ/heart/gland/slime - true_name = "gastric animation galvanizer" - cooldown_low = 600 - cooldown_high = 1200 - uses = -1 - icon_state = "slime" - mind_control_uses = 1 - mind_control_duration = 2400 - -/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) - ..() - owner.faction |= "slime" - owner.grant_language(/datum/language/slime) - -/obj/item/organ/heart/gland/slime/activate() - to_chat(owner, "You feel nauseated!") - owner.vomit(20) - - var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey") - Slime.Friends = list(owner) - Slime.Leader = owner - -/obj/item/organ/heart/gland/mindshock - true_name = "neural crosstalk uninhibitor" - cooldown_low = 400 - cooldown_high = 700 - uses = -1 - icon_state = "mindshock" - mind_control_uses = 1 - mind_control_duration = 6000 - -/obj/item/organ/heart/gland/mindshock/activate() - to_chat(owner, "You get a headache.") - - var/turf/T = get_turf(owner) - for(var/mob/living/carbon/H in orange(4,T)) - if(H == owner) - continue - switch(pick(1,3)) - if(1) - to_chat(H, "You hear a loud buzz in your head, silencing your thoughts!") - H.Stun(50) - if(2) - to_chat(H, "You hear an annoying buzz in your head.") - H.confused += 15 - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160) - if(3) - H.hallucination += 60 - -/obj/item/organ/heart/gland/pop - true_name = "anthropmorphic translocator" - cooldown_low = 900 - cooldown_high = 1800 - uses = -1 - human_only = TRUE - icon_state = "species" - mind_control_uses = 5 - mind_control_duration = 300 - -/obj/item/organ/heart/gland/pop/activate() - to_chat(owner, "You feel unlike yourself.") - randomize_human(owner) - var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly)) - owner.set_species(species) - -/obj/item/organ/heart/gland/ventcrawling - true_name = "pliant cartilage enabler" - cooldown_low = 1800 - cooldown_high = 2400 - uses = 1 - icon_state = "vent" - mind_control_uses = 4 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/ventcrawling/activate() - to_chat(owner, "You feel very stretchy.") - owner.ventcrawler = VENTCRAWLER_ALWAYS - -/obj/item/organ/heart/gland/viral - true_name = "contamination incubator" - cooldown_low = 1800 - cooldown_high = 2400 - uses = 1 - icon_state = "viral" - mind_control_uses = 1 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/viral/activate() - to_chat(owner, "You feel sick.") - var/datum/disease/advance/A = random_virus(pick(2,6),6) - A.carrier = TRUE - owner.ForceContractDisease(A, FALSE, TRUE) - -/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level) - if(max_symptoms > VIRUS_SYMPTOM_LIMIT) - max_symptoms = VIRUS_SYMPTOM_LIMIT - var/datum/disease/advance/A = new /datum/disease/advance() - var/list/datum/symptom/possible_symptoms = list() - for(var/symptom in subtypesof(/datum/symptom)) - var/datum/symptom/S = symptom - if(initial(S.level) > max_level) - continue - if(initial(S.level) <= 0) //unobtainable symptoms - continue - possible_symptoms += S - for(var/i in 1 to max_symptoms) - var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms) - if(chosen_symptom) - var/datum/symptom/S = new chosen_symptom - A.symptoms += S - A.Refresh() //just in case someone already made and named the same disease - return A - -/obj/item/organ/heart/gland/trauma - true_name = "white matter randomiser" - cooldown_low = 800 - cooldown_high = 1200 - uses = 5 - icon_state = "emp" - mind_control_uses = 3 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/trauma/activate() - to_chat(owner, "You feel a spike of pain in your head.") - if(prob(33)) - owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) - else - if(prob(20)) - owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) - else - owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) - -/obj/item/organ/heart/gland/spiderman - true_name = "araneae cloister accelerator" - cooldown_low = 450 - cooldown_high = 900 - uses = -1 - icon_state = "spider" - mind_control_uses = 2 - mind_control_duration = 2400 - -/obj/item/organ/heart/gland/spiderman/activate() - to_chat(owner, "You feel something crawling in your skin.") - owner.faction |= "spiders" - var/obj/structure/spider/spiderling/S = new(owner.drop_location()) - S.directive = "Protect your nest inside [owner.real_name]." - -/obj/item/organ/heart/gland/egg - true_name = "roe/enzymatic synthesizer" - cooldown_low = 300 - cooldown_high = 400 - uses = -1 - icon_state = "egg" - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - mind_control_uses = 2 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/egg/activate() - owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]") - var/turf/T = owner.drop_location() - new /obj/item/reagent_containers/food/snacks/egg/gland(T) - -/obj/item/organ/heart/gland/electric - true_name = "electron accumulator/discharger" - cooldown_low = 800 - cooldown_high = 1200 - uses = -1 - mind_control_uses = 2 - mind_control_duration = 900 - -/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) - ..() - ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT) - -/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0) - REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT) - ..() - -/obj/item/organ/heart/gland/electric/activate() - owner.visible_message("[owner]'s skin starts emitting electric arcs!",\ - "You feel electric energy building up inside you!") - playsound(get_turf(owner), "sparks", 100, 1, -1) - addtimer(CALLBACK(src, .proc/zap), rand(30, 100)) - -/obj/item/organ/heart/gland/electric/proc/zap() - tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN) - playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, 1) - -/obj/item/organ/heart/gland/chem - true_name = "intrinsic pharma-provider" - cooldown_low = 50 - cooldown_high = 50 - uses = -1 - mind_control_uses = 3 - mind_control_duration = 1200 - var/list/possible_reagents = list() - -/obj/item/organ/heart/gland/chem/Initialize() - ..() - for(var/X in subtypesof(/datum/reagent/drug)) - var/datum/reagent/R = X - possible_reagents += initial(R.id) - for(var/X in subtypesof(/datum/reagent/medicine)) - var/datum/reagent/R = X - possible_reagents += initial(R.id) - for(var/X in typesof(/datum/reagent/toxin)) - var/datum/reagent/R = X - possible_reagents += initial(R.id) - -/obj/item/organ/heart/gland/chem/activate() - var/chem_to_add = pick(possible_reagents) - owner.reagents.add_reagent(chem_to_add, 2) - owner.adjustToxLoss(-2, TRUE, TRUE) - ..() - -/obj/item/organ/heart/gland/plasma - true_name = "effluvium sanguine-synonym emitter" - cooldown_low = 1200 - cooldown_high = 1800 - uses = -1 - mind_control_uses = 1 - mind_control_duration = 800 - -/obj/item/organ/heart/gland/plasma/activate() - to_chat(owner, "You feel bloated.") - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you."), 150) - addtimer(CALLBACK(src, .proc/vomit_plasma), 200) - -/obj/item/organ/heart/gland/plasma/proc/vomit_plasma() - if(!owner) - return - owner.visible_message("[owner] vomits a cloud of plasma!") - var/turf/open/T = get_turf(owner) - if(istype(T)) - T.atmos_spawn_air("plasma=50;TEMP=[T20C]") - owner.vomit() + return \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/access.dm b/code/modules/antagonists/abductor/equipment/glands/access.dm new file mode 100644 index 0000000000..548650d4e3 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/access.dm @@ -0,0 +1,19 @@ +/obj/item/organ/heart/gland/access + true_name = "anagraphic electro-scrambler" + cooldown_low = 600 + cooldown_high = 1200 + uses = 1 + icon_state = "mindshock" + mind_control_uses = 3 + mind_control_duration = 900 + +/obj/item/organ/heart/gland/access/activate() + to_chat(owner, "You feel like a VIP for some reason.") + RegisterSignal(owner, COMSIG_MOB_ALLOWED, .proc/free_access) + +/obj/item/organ/heart/gland/access/proc/free_access(datum/source, obj/O) + return TRUE + +/obj/item/organ/heart/gland/access/Remove(mob/living/carbon/M, special = 0) + UnregisterSignal(owner, COMSIG_MOB_ALLOWED) + ..() \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/blood.dm b/code/modules/antagonists/abductor/equipment/glands/blood.dm new file mode 100644 index 0000000000..06b8249484 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/blood.dm @@ -0,0 +1,18 @@ +/obj/item/organ/heart/gland/blood + true_name = "pseudonuclear hemo-destabilizer" + cooldown_low = 1200 + cooldown_high = 1800 + uses = -1 + icon_state = "egg" + lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' + mind_control_uses = 3 + mind_control_duration = 1500 + +/obj/item/organ/heart/gland/blood/activate() + if(!ishuman(owner) || !owner.dna.species) + return + var/mob/living/carbon/human/H = owner + var/datum/species/species = H.dna.species + to_chat(H, "You feel your blood heat up for a moment.") + species.exotic_blood = get_random_reagent_id() \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/chem.dm b/code/modules/antagonists/abductor/equipment/glands/chem.dm new file mode 100644 index 0000000000..e7b6fda85f --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/chem.dm @@ -0,0 +1,20 @@ +/obj/item/organ/heart/gland/chem + true_name = "intrinsic pharma-provider" + cooldown_low = 50 + cooldown_high = 50 + uses = -1 + icon_state = "viral" + mind_control_uses = 3 + mind_control_duration = 1200 + var/list/possible_reagents = list() + +/obj/item/organ/heart/gland/chem/Initialize() + . = ..() + for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin)) + possible_reagents += R + +/obj/item/organ/heart/gland/chem/activate() + var/chem_to_add = pick(possible_reagents) + owner.reagents.add_reagent(chem_to_add, 2) + owner.adjustToxLoss(-5, TRUE, TRUE) + ..() \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/egg.dm b/code/modules/antagonists/abductor/equipment/glands/egg.dm new file mode 100644 index 0000000000..429a24b19c --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/egg.dm @@ -0,0 +1,15 @@ +/obj/item/organ/heart/gland/egg + true_name = "roe/enzymatic synthesizer" + cooldown_low = 300 + cooldown_high = 400 + uses = -1 + icon_state = "egg" + lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' + mind_control_uses = 2 + mind_control_duration = 1800 + +/obj/item/organ/heart/gland/egg/activate() + owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]") + var/turf/T = owner.drop_location() + new /obj/item/reagent_containers/food/snacks/egg/gland(T) \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm new file mode 100644 index 0000000000..63d95f8b1f --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/electric.dm @@ -0,0 +1,26 @@ +/obj/item/organ/heart/gland/electric + true_name = "electron accumulator/discharger" + cooldown_low = 800 + cooldown_high = 1200 + icon_state = "species" + uses = -1 + mind_control_uses = 2 + mind_control_duration = 900 + +/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) + ..() + ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland") + +/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0) + REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland") + ..() + +/obj/item/organ/heart/gland/electric/activate() + owner.visible_message("[owner]'s skin starts emitting electric arcs!",\ + "You feel electric energy building up inside you!") + playsound(get_turf(owner), "sparks", 100, TRUE, -1) + addtimer(CALLBACK(src, .proc/zap), rand(30, 100)) + +/obj/item/organ/heart/gland/electric/proc/zap() + tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN) + playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE) \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm new file mode 100644 index 0000000000..bf9a00e13c --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -0,0 +1,178 @@ +/obj/item/organ/heart/gland/heal + true_name = "organic replicator" + cooldown_low = 200 + cooldown_high = 400 + uses = -1 + human_only = TRUE + icon_state = "health" + mind_control_uses = 3 + mind_control_duration = 3000 + +/obj/item/organ/heart/gland/heal/activate() + if(!(owner.mob_biotypes & MOB_ORGANIC)) + return + + for(var/organ in owner.internal_organs) + if(istype(organ, /obj/item/organ/cyberimp)) + reject_implant(organ) + return + + var/obj/item/organ/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER) + if((!liver/* && !HAS_TRAIT(owner, TRAIT_NOMETABOLISM)*/) || (liver && ((liver.damage > (liver.maxHealth / 2)) || (istype(liver, /obj/item/organ/liver/cybernetic))))) + replace_liver(liver) + return + + var/obj/item/organ/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS) + if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && (istype(lungs, /obj/item/organ/lungs/cybernetic)))) + replace_lungs(lungs) + return + + var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES) + if(!eyes || (eyes && ((HAS_TRAIT_FROM(owner, TRAIT_NEARSIGHT, EYE_DAMAGE)) || (HAS_TRAIT_FROM(owner, TRAIT_BLIND, EYE_DAMAGE)) || (istype(eyes, /obj/item/organ/eyes/robotic))))) + replace_eyes(eyes) + return + + var/obj/item/bodypart/limb + var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + for(var/zone in limb_list) + limb = owner.get_bodypart(zone) + if(!limb) + replace_limb(zone) + return + if((limb.get_damage() >= (limb.max_damage / 2)) || (limb.status == BODYPART_ROBOTIC)) + replace_limb(zone, limb) + return + + if(owner.getToxLoss() > 40) + replace_blood() + return + var/tox_amount = 0 + for(var/datum/reagent/toxin/T in owner.reagents.reagent_list) + tox_amount += owner.reagents.get_reagent_amount(T.type) + if(tox_amount > 10) + replace_blood() + return + if(owner.blood_volume < BLOOD_VOLUME_OKAY) + owner.blood_volume = BLOOD_VOLUME_NORMAL + to_chat(owner, "You feel your blood pulsing within you.") + return + + var/obj/item/bodypart/chest/chest = owner.get_bodypart(BODY_ZONE_CHEST) + if((chest.get_damage() >= (chest.max_damage / 4)) || (chest.status == BODYPART_ROBOTIC)) + replace_chest(chest) + return + +/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/organ/cyberimp/implant) + owner.visible_message("[owner] vomits up his [implant.name]!", "You suddenly vomit up your [implant.name]!") + owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE) + implant.Remove(owner) + implant.forceMove(owner.drop_location()) + +/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver) + if(liver) + owner.visible_message("[owner] vomits up his [liver.name]!", "You suddenly vomit up your [liver.name]!") + owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE) + liver.Remove(owner) + liver.forceMove(owner.drop_location()) + else + to_chat(owner, "You feel a weird rumble in your bowels...") + + var/liver_type = /obj/item/organ/liver + if(owner?.dna?.species?.mutantliver) + liver_type = owner.dna.species.mutantliver + var/obj/item/organ/liver/new_liver = new liver_type() + new_liver.Insert(owner) + +/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs) + if(lungs) + owner.visible_message("[owner] vomits up his [lungs.name]!", "You suddenly vomit up your [lungs.name]!") + owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE) + lungs.Remove(owner) + lungs.forceMove(owner.drop_location()) + else + to_chat(owner, "You feel a weird rumble inside your chest...") + + var/lung_type = /obj/item/organ/lungs + if(owner.dna.species && owner.dna.species.mutantlungs) + lung_type = owner.dna.species.mutantlungs + var/obj/item/organ/lungs/new_lungs = new lung_type() + new_lungs.Insert(owner) + +/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes) + if(eyes) + owner.visible_message("[owner]'s [eyes.name] fall out of their sockets!", "Your [eyes.name] fall out of their sockets!") + playsound(owner, 'sound/effects/splat.ogg', 50, TRUE) + eyes.Remove(owner) + eyes.forceMove(owner.drop_location()) + else + to_chat(owner, "You feel a weird rumble behind your eye sockets...") + + addtimer(CALLBACK(src, .proc/finish_replace_eyes), rand(100, 200)) + +/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes() + var/eye_type = /obj/item/organ/eyes + if(owner.dna.species && owner.dna.species.mutanteyes) + eye_type = owner.dna.species.mutanteyes + var/obj/item/organ/eyes/new_eyes = new eye_type() + new_eyes.Insert(owner) + owner.visible_message("A pair of new eyes suddenly inflates into [owner]'s eye sockets!", "A pair of new eyes suddenly inflates into your eye sockets!") + +/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb) + if(limb) + owner.visible_message("[owner]'s [limb.name] suddenly detaches from [owner.p_their()] body!", "Your [limb.name] suddenly detaches from your body!") + playsound(owner, "desceration", 50, TRUE, -1) + limb.drop_limb() + else + to_chat(owner, "You feel a weird tingle in your [parse_zone(body_zone)]... even if you don't have one.") + + addtimer(CALLBACK(src, .proc/finish_replace_limb, body_zone), rand(150, 300)) + +/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone) + owner.visible_message("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!", + "With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body!", + "Your hear a loud snap.") + playsound(owner, 'sound/magic/demon_consume.ogg', 50, TRUE) + owner.regenerate_limb(body_zone) + +/obj/item/organ/heart/gland/heal/proc/replace_blood() + owner.visible_message("[owner] starts vomiting huge amounts of blood!", "You suddenly start vomiting huge amounts of blood!") + keep_replacing_blood() + +/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood() + var/keep_going = FALSE + owner.vomit(0, TRUE, FALSE, 3, FALSE, FALSE, FALSE, TRUE) + owner.Stun(15) + owner.adjustToxLoss(-15, TRUE, TRUE) + + owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) + if(owner.blood_volume < BLOOD_VOLUME_NORMAL) + keep_going = TRUE + + if(owner.getToxLoss()) + keep_going = TRUE + for(var/datum/reagent/toxin/R in owner.reagents.reagent_list) + owner.reagents.remove_reagent(R.type, 4) + if(owner.reagents.has_reagent(R.type)) + keep_going = TRUE + if(keep_going) + addtimer(CALLBACK(src, .proc/keep_replacing_blood), 30) + +/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest) + if(chest.status == BODYPART_ROBOTIC) + owner.visible_message("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!", "Your [chest.name] rapidly expels its mechanical components, replacing them with flesh!") + playsound(owner, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE) + var/list/dirs = GLOB.alldirs.Copy() + for(var/i in 1 to 3) + var/obj/effect/decal/cleanable/robot_debris/debris = new(get_turf(owner)) + debris.streak(dirs) + else + owner.visible_message("[owner]'s [chest.name] sheds off its damaged flesh, rapidly replacing it!", "Your [chest.name] sheds off its damaged flesh, rapidly replacing it!") + playsound(owner, 'sound/effects/splat.ogg', 50, TRUE) + var/list/dirs = GLOB.alldirs.Copy() + for(var/i in 1 to 3) + var/obj/effect/decal/cleanable/blood/gibs/gibs = new(get_turf(owner)) + gibs.streak(dirs) + + var/obj/item/bodypart/chest/new_chest = new(null) + new_chest.replace_limb(owner, TRUE) + qdel(chest) \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm new file mode 100644 index 0000000000..f8b91343f2 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm @@ -0,0 +1,64 @@ +/obj/item/organ/heart/gland/mindshock + true_name = "neural crosstalk uninhibitor" + cooldown_low = 400 + cooldown_high = 700 + uses = -1 + icon_state = "mindshock" + mind_control_uses = 1 + mind_control_duration = 6000 + var/list/mob/living/carbon/human/broadcasted_mobs = list() + +/obj/item/organ/heart/gland/mindshock/activate() + to_chat(owner, "You get a headache.") + + var/turf/T = get_turf(owner) + for(var/mob/living/carbon/H in orange(4,T)) + if(H == owner) + continue + switch(pick(1,3)) + if(1) + to_chat(H, "You hear a loud buzz in your head, silencing your thoughts!") + H.Stun(50) + if(2) + to_chat(H, "You hear an annoying buzz in your head.") + H.confused += 15 + H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160) + if(3) + H.hallucination += 60 + +/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user) + if(!ownerCheck() || !mind_control_uses || active_mind_control) + return FALSE + mind_control_uses-- + for(var/mob/M in oview(7, owner)) + if(!ishuman(M)) + continue + var/mob/living/carbon/human/H = M + if(H.stat) + continue + + broadcasted_mobs += H + to_chat(H, "You suddenly feel an irresistible compulsion to follow an order...") + to_chat(H, "[command]") + + message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]") + + var/obj/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /obj/screen/alert/mind_control) + mind_alert.command = command + + if(LAZYLEN(broadcasted_mobs)) + active_mind_control = TRUE + addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration) + + update_gland_hud() + return TRUE + +/obj/item/organ/heart/gland/mindshock/clear_mind_control() + if(!active_mind_control || !LAZYLEN(broadcasted_mobs)) + return FALSE + for(var/M in broadcasted_mobs) + var/mob/living/carbon/human/H = M + to_chat(H, "You feel the compulsion fade, and you completely forget about your previous orders.") + H.clear_alert("mind_control") + active_mind_control = FALSE + return TRUE \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm new file mode 100644 index 0000000000..4a30d99d44 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/plasma.dm @@ -0,0 +1,22 @@ +/obj/item/organ/heart/gland/plasma + true_name = "effluvium sanguine-synonym emitter" + cooldown_low = 1200 + cooldown_high = 1800 + icon_state = "slime" + uses = -1 + mind_control_uses = 1 + mind_control_duration = 800 + +/obj/item/organ/heart/gland/plasma/activate() + to_chat(owner, "You feel bloated.") + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you."), 150) + addtimer(CALLBACK(src, .proc/vomit_plasma), 200) + +/obj/item/organ/heart/gland/plasma/proc/vomit_plasma() + if(!owner) + return + owner.visible_message("[owner] vomits a cloud of plasma!") + var/turf/open/T = get_turf(owner) + if(istype(T)) + T.atmos_spawn_air("plasma=50;TEMP=[T20C]") + owner.vomit() \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/quantum.dm b/code/modules/antagonists/abductor/equipment/glands/quantum.dm new file mode 100644 index 0000000000..a5b8815437 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/quantum.dm @@ -0,0 +1,47 @@ +/obj/item/organ/heart/gland/quantum + true_name = "quantic de-observation matrix" + cooldown_low = 150 + cooldown_high = 150 + uses = -1 + icon_state = "emp" + mind_control_uses = 2 + mind_control_duration = 1200 + var/mob/living/carbon/entangled_mob + +/obj/item/organ/heart/gland/quantum/activate() + if(entangled_mob) + return + for(var/mob/M in oview(owner, 7)) + if(!iscarbon(M)) + continue + entangled_mob = M + addtimer(CALLBACK(src, .proc/quantum_swap), rand(600, 2400)) + return + +/obj/item/organ/heart/gland/quantum/proc/quantum_swap() + if(QDELETED(entangled_mob)) + entangled_mob = null + return + var/turf/T = get_turf(owner) + do_teleport(owner, get_turf(entangled_mob),null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM) + do_teleport(entangled_mob, T,null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM) + to_chat(owner, "You suddenly find yourself somewhere else!") + to_chat(entangled_mob, "You suddenly find yourself somewhere else!") + if(!active_mind_control) //Do not reset entangled mob while mind control is active + entangled_mob = null + +/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user) + if(..()) + if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD)) + to_chat(entangled_mob, "You suddenly feel an irresistible compulsion to follow an order...") + to_chat(entangled_mob, "[command]") + var/obj/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /obj/screen/alert/mind_control) + mind_alert.command = command + message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]") + update_gland_hud() + +/obj/item/organ/heart/gland/quantum/clear_mind_control() + if(active_mind_control) + to_chat(entangled_mob, "You feel the compulsion fade, and you completely forget about your previous orders.") + entangled_mob.clear_alert("mind_control") + ..() \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm new file mode 100644 index 0000000000..53b8133528 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm @@ -0,0 +1,21 @@ +/obj/item/organ/heart/gland/slime + true_name = "gastric animation galvanizer" + cooldown_low = 600 + cooldown_high = 1200 + uses = -1 + icon_state = "slime" + mind_control_uses = 1 + mind_control_duration = 2400 + +/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) + ..() + owner.faction |= "slime" + owner.grant_language(/datum/language/slime) + +/obj/item/organ/heart/gland/slime/activate() + to_chat(owner, "You feel nauseated!") + owner.vomit(20) + + var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey") + Slime.Friends = list(owner) + Slime.Leader = owner \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/spider.dm b/code/modules/antagonists/abductor/equipment/glands/spider.dm new file mode 100644 index 0000000000..f0421b23b2 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/spider.dm @@ -0,0 +1,14 @@ +/obj/item/organ/heart/gland/spiderman + true_name = "araneae cloister accelerator" + cooldown_low = 450 + cooldown_high = 900 + uses = -1 + icon_state = "spider" + mind_control_uses = 2 + mind_control_duration = 2400 + +/obj/item/organ/heart/gland/spiderman/activate() + to_chat(owner, "You feel something crawling in your skin.") + owner.faction |= "spiders" + var/obj/structure/spider/spiderling/S = new(owner.drop_location()) + S.directive = "Protect your nest inside [owner.real_name]." \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/transform.dm b/code/modules/antagonists/abductor/equipment/glands/transform.dm new file mode 100644 index 0000000000..05c4760d37 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/transform.dm @@ -0,0 +1,15 @@ +/obj/item/organ/heart/gland/transform + true_name = "anthropmorphic transmorphosizer" + cooldown_low = 900 + cooldown_high = 1800 + uses = -1 + human_only = TRUE + icon_state = "species" + mind_control_uses = 7 + mind_control_duration = 300 + +/obj/item/organ/heart/gland/transform/activate() + to_chat(owner, "You feel unlike yourself.") + randomize_human(owner) + var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly)) + owner.set_species(species) \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/trauma.dm b/code/modules/antagonists/abductor/equipment/glands/trauma.dm new file mode 100644 index 0000000000..b6280ec017 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/trauma.dm @@ -0,0 +1,18 @@ +/obj/item/organ/heart/gland/trauma + true_name = "white matter randomiser" + cooldown_low = 800 + cooldown_high = 1200 + uses = 5 + icon_state = "emp" + mind_control_uses = 3 + mind_control_duration = 1800 + +/obj/item/organ/heart/gland/trauma/activate() + to_chat(owner, "You feel a spike of pain in your head.") + if(prob(33)) + owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) + else + if(prob(20)) + owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) + else + owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm new file mode 100644 index 0000000000..d1ea135497 --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm @@ -0,0 +1,12 @@ +/obj/item/organ/heart/gland/ventcrawling + true_name = "pliant cartilage enabler" + cooldown_low = 1800 + cooldown_high = 2400 + uses = 1 + icon_state = "vent" + mind_control_uses = 4 + mind_control_duration = 1800 + +/obj/item/organ/heart/gland/ventcrawling/activate() + to_chat(owner, "You feel very stretchy.") + owner.ventcrawler = VENTCRAWLER_ALWAYS \ No newline at end of file diff --git a/code/modules/antagonists/abductor/equipment/glands/viral.dm b/code/modules/antagonists/abductor/equipment/glands/viral.dm new file mode 100644 index 0000000000..4d4f865a7c --- /dev/null +++ b/code/modules/antagonists/abductor/equipment/glands/viral.dm @@ -0,0 +1,34 @@ +/obj/item/organ/heart/gland/viral + true_name = "contamination incubator" + cooldown_low = 1800 + cooldown_high = 2400 + uses = 1 + icon_state = "viral" + mind_control_uses = 1 + mind_control_duration = 1800 + +/obj/item/organ/heart/gland/viral/activate() + to_chat(owner, "You feel sick.") + var/datum/disease/advance/A = random_virus(pick(2,6),6) + A.carrier = TRUE + owner.ForceContractDisease(A, FALSE, TRUE) + +/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level) + if(max_symptoms > VIRUS_SYMPTOM_LIMIT) + max_symptoms = VIRUS_SYMPTOM_LIMIT + var/datum/disease/advance/A = new /datum/disease/advance() + var/list/datum/symptom/possible_symptoms = list() + for(var/symptom in subtypesof(/datum/symptom)) + var/datum/symptom/S = symptom + if(initial(S.level) > max_level) + continue + if(initial(S.level) <= 0) //unobtainable symptoms + continue + possible_symptoms += S + for(var/i in 1 to max_symptoms) + var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms) + if(chosen_symptom) + var/datum/symptom/S = new chosen_symptom + A.symptoms += S + A.Refresh() //just in case someone already made and named the same disease + return A \ No newline at end of file diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index bcf02bda01..47294bc766 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -43,12 +43,15 @@ dat += "Collected Samples : [points]
    " dat += "Gear Credits: [credits]
    " dat += "Transfer data in exchange for supplies:
    " - dat += "Advanced Baton
    " - dat += "Agent Helmet
    " - dat += "Agent Vest
    " - dat += "Radio Silencer
    " - dat += "Science Tool
    " - dat += "Mental Interface Device
    " + dat += "Advanced Baton (2 Credits)
    " + dat += "Mental Interface Device (2 Credits)
    " + dat += "Reagent Synthesizer (2 Credits)
    " + dat += "Shrink Ray Blaster (2 Credits)
    " + dat += "Agent Helmet (1 Credit)
    " + dat += "Agent Vest (1 Credit)
    " + dat += "Radio Silencer (1 Credit)
    " + dat += "Science Tool (1 Credit)
    " + dat += "Superlingual Matrix (1 Credit)
    " else dat += "NO EXPERIMENT MACHINE DETECTED
    " @@ -101,7 +104,7 @@ else if(href_list["dispense"]) switch(href_list["dispense"]) if("baton") - Dispense(/obj/item/abductor_baton,cost=2) + Dispense(/obj/item/abductor/baton,cost=2) if("helmet") Dispense(/obj/item/clothing/head/helmet/abductor) if("silencer") @@ -112,6 +115,12 @@ Dispense(/obj/item/clothing/suit/armor/abductor/vest) if("mind_device") Dispense(/obj/item/abductor/mind_device,cost=2) + if("chem_dispenser") + Dispense(/obj/item/abductor_machine_beacon/chem_dispenser,cost=2) + if("tongue") + Dispense(/obj/item/organ/tongue/abductor) + if("shrink_ray") + Dispense(/obj/item/gun/energy/shrink_ray,cost=2) updateUsrDialog() /obj/machinery/abductor/console/proc/TeleporterRetrieve() @@ -136,9 +145,9 @@ var/entry_name if(remote) - entry_name = show_radial_menu(usr, camera.eyeobj, disguises2) + entry_name = show_radial_menu(usr, camera.eyeobj, disguises2, tooltips = TRUE) else - entry_name = show_radial_menu(usr, src, disguises2) + entry_name = show_radial_menu(usr, src, disguises2, require_near = TRUE, tooltips = TRUE) var/datum/icon_snapshot/chosen = disguises[entry_name] if(chosen && vest && (remote || in_range(usr,src))) @@ -236,4 +245,4 @@ new item(drop_location) else - say("Insufficent data!") + say("Insufficent data!") \ No newline at end of file diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index 33e7e4392f..da165adef2 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -3,6 +3,7 @@ icon = 'icons/mob/blob.dmi' icon_state = "blob_shield" desc = "A solid wall of slightly twitching tendrils." + var/damaged_desc = "A wall of twitching tendrils." max_integrity = 150 brute_resist = 0.25 explosion_block = 3 @@ -21,10 +22,10 @@ /obj/structure/blob/shield/update_icon() ..() - if(obj_integrity <= 70) - icon_state = "blob_shield_damaged" - name = "weakened strong blob" - desc = "A wall of twitching tendrils." + if(obj_integrity < max_integrity * 0.5) + icon_state = "[initial(icon_state)]_damaged" + name = "weakened [initial(name)]" + desc = "[damaged_desc]" atmosblock = FALSE if(!weakened) armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) @@ -37,4 +38,27 @@ if(weakened) armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) weakened = FALSE - air_update_turf(1) \ No newline at end of file + air_update_turf(1) + +/obj/structure/blob/shield/reflective + name = "reflective blob" + desc = "A solid wall of slightly twitching tendrils with a reflective glow." + damaged_desc = "A wall of twitching tendrils with a reflective glow." + icon_state = "blob_glow" + flags_1 = CHECK_RICOCHET_1 + point_return = 8 + max_integrity = 50 + brute_resist = 1 + explosion_block = 2 + +/obj/structure/blob/shield/reflective/handle_ricochet(obj/item/projectile/P) + var/turf/p_turf = get_turf(P) + var/face_direction = get_dir(src, p_turf) + var/face_angle = dir2angle(face_direction) + var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (P.Angle + 180)) + if(abs(incidence_s) > 90 && abs(incidence_s) < 270) + return FALSE + var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) + P.setAngle(new_angle_s) + visible_message("[P] reflects off [src]!") + return TRUE \ No newline at end of file diff --git a/code/modules/antagonists/blob/blob/powers.dm b/code/modules/antagonists/blob/blob/powers.dm index e49d186362..73c0776ad7 100644 --- a/code/modules/antagonists/blob/blob/powers.dm +++ b/code/modules/antagonists/blob/blob/powers.dm @@ -113,12 +113,22 @@ /mob/camera/blob/verb/create_shield_power() set category = "Blob" - set name = "Create Shield Blob (15)" - set desc = "Create a shield blob, which will block fire and is hard to kill." + set name = "Create/Upgrade Shield Blob (15)" + set desc = "Create a shield blob, which will block fire and is hard to kill. Using this on an existing shield blob turns it into a reflective blob, capable of reflecting most projectiles but making it much weaker than usual to brute attacks." create_shield() /mob/camera/blob/proc/create_shield(turf/T) - createSpecial(15, /obj/structure/blob/shield, 0, 0, T) + var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T + if(S) + if(!can_buy(15)) + return + if(S.obj_integrity < S.max_integrity * 0.5) + to_chat(src, "This shield blob is too damaged to be modified properly!") + return + to_chat(src, "You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced intregrity.") + S.change_to(/obj/structure/blob/shield/reflective, src) + else + createSpecial(15, /obj/structure/blob/shield, 0, 0, T) /mob/camera/blob/verb/create_resource() set category = "Blob" @@ -359,7 +369,7 @@ to_chat(src, "You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.") to_chat(src, "Normal Blobs will expand your reach and can be upgraded into special blobs that perform certain functions.") to_chat(src, "You can upgrade normal blobs into the following types of blob:") - to_chat(src, "Shield Blobs are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires.") + to_chat(src, "Shield Blobs are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires. Upgrading them again will result in a reflective blob, capable of reflecting most projectiles at the cost of the strong blob's extra health.") to_chat(src, "Resource Blobs are blobs which produce more resources for you, build as many of these as possible to consume the station. This type of blob must be placed near node blobs or your core to work.") to_chat(src, "Factory Blobs are blobs that spawn blob spores which will attack nearby enemies. This type of blob must be placed near node blobs or your core to work.") to_chat(src, "Blobbernauts can be produced from factories for a cost, and are hard to kill, powerful, and moderately smart. The factory used to create one will become fragile and briefly unable to produce spores.") diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm index bf4ae4b6b5..3a6b4efedb 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm @@ -128,7 +128,7 @@ /mob/living/carbon/human/ShowAsPaleExamine() // Check for albino, as per human/examine.dm's check. - if(skin_tone == "albino") + if(dna.species.use_skintones && skin_tone == "albino") return TRUE return ..() // Return vamp check diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index febf53c324..97b4437298 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -183,7 +183,7 @@ BuyPower(new /datum/action/bloodsucker/masquerade) BuyPower(new /datum/action/bloodsucker/veil) // Traits - for (var/T in defaultTraits) + for(var/T in defaultTraits) ADD_TRAIT(owner.current, T, "bloodsucker") if(HAS_TRAIT(owner.current, TRAIT_TOXINLOVER)) //No slime bonuses here, no thank you had_toxlover = TRUE @@ -200,10 +200,10 @@ var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species // Make Changes - S.brutemod *= 0.5 // <-------------------- Start small, but burn mod increases based on rank! - S.coldmod = 0 - S.stunmod *= 0.25 - S.siemens_coeff *= 0.75 //base electrocution coefficient 1 + H.physiology.brute_mod *= 0.8 // <-------------------- Start small, but burn mod increases based on rank! + H.physiology.cold_mod = 0 + H.physiology.stun_mod *= 0.35 + H.physiology.siemens_coeff *= 0.75 //base electrocution coefficient 1 //S.heatmod += 0.5 // Heat shouldn't affect. Only Fire. //S.punchstunthreshold = 8 //damage at which punches from this race will stun 9 S.punchdamagelow += 1 //lowest possible punch damage 0 @@ -319,12 +319,10 @@ datum/antagonist/bloodsucker/proc/SpendRank() if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current var/datum/species/S = H.dna.species - S.burnmod *= 0.025 // Slightly more burn damage - S.stunmod *= 0.95 // Slightly less stun time. S.punchdamagelow += 0.5 S.punchdamagehigh += 0.5 // NOTE: This affects the hitting power of Brawn. // More Health - owner.current.setMaxHealth(owner.current.maxHealth + 5) + owner.current.setMaxHealth(owner.current.maxHealth + 10) // Vamp Stats regenRate += 0.05 // Points of brute healed (starts at 0.3) feedAmount += 2 // Increase how quickly I munch down vics (15) diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm index f73912d0f5..3493622945 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm @@ -275,7 +275,7 @@ // All done! if(convert_progress <= 0) // FAIL: Can't be Vassal - if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) && HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY + if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) || HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY to_chat(user, "[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you, they either have a mindshield or their external loyalties are too difficult for you to break.\[ALT+click to release\]") convert_progress ++ // Pop it back up some. Avoids wasting Blood on a lost cause. // SUCCESS: All done! diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index 0125dc7cf5..a27f911163 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -77,13 +77,16 @@ for(var/mob/living/M in viewers(5, src)) if(!is_servant_of_ratvar(M) && M != L) M.flash_act() - if(iscultist(L)) + if(iscultist(L)) //No longer stuns cultists, instead sets them on fire and burns them to_chat(L, "\"Watch your step, wretch.\"") - L.adjustBruteLoss(10) - L.Knockdown(80, FALSE) + L.adjustFireLoss(10) + L.Knockdown(20, FALSE) + L.adjust_fire_stacks(5) //Burn! + L.IgniteMob() + else + L.Stun(40) L.visible_message("[src] appears around [L] in a burst of light!", \ - "[target_flashed ? "An unseen force":"The glowing sigil around you"] holds you in place!") - L.Stun(40) + "[target_flashed ? "An unseen force":"The glowing sigil around you"] [iscultist(L) ? "painfully bursts into flames!" : "holds you in place!"]") L.apply_status_effect(STATUS_EFFECT_BELLIGERENT) new /obj/effect/temp_visual/ratvar/sigil/transgression(get_turf(src)) qdel(src) diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm index bd986bac25..05f11294de 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm @@ -345,3 +345,8 @@ if(!power_amount) power_amount = -(CLOCKCULT_POWER_UNIT*0.02) return ..() + + +// Winter coat +/obj/item/clothing/suit/hooded/wintercoat/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) //four sheets of metal + return list("operation_time" = 30, "new_obj_type" = /obj/item/clothing/suit/hooded/wintercoat/ratvar, "power_cost" = POWER_METAL * 4, "spawn_dir" = SOUTH) diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index 23caa788d4..1f616b7dbc 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -193,15 +193,26 @@ L.visible_message("[L]'s eyes flare with dim light!") playsound(L, 'sound/weapons/sear.ogg', 50, TRUE) else - L.visible_message("[L]'s eyes blaze with brilliant light!", \ - "Your vision suddenly screams with white-hot light!") - L.Knockdown(15, TRUE, FALSE, 15) - L.apply_status_effect(STATUS_EFFECT_KINDLE) - L.flash_act(1, 1) - if(issilicon(target)) - var/mob/living/silicon/S = L - S.emp_act(EMP_HEAVY) - if(iscultist(L)) + if(!iscultist(L)) + L.visible_message("[L]'s eyes blaze with brilliant light!", \ + "Your vision suddenly screams with white-hot light!") + L.Knockdown(15, TRUE, FALSE, 15) + L.apply_status_effect(STATUS_EFFECT_KINDLE) + L.flash_act(1, 1) + if(issilicon(target)) + var/mob/living/silicon/S = L + S.emp_act(EMP_HEAVY) + else //for Nar'sian weaklings + to_chat(L, "\"How does it feel to see the light, dog?\"") + L.visible_message("[L]'s eyes flare with burning light!", \ + "Your vision suddenly screams with a flash of burning hot light!") //Debuffs Narsian cultists hard + deals some burn instead of just hardstunning them; Only the confusion part can stack + L.flash_act(1,1) + if(iscarbon(target)) + var/mob/living/carbon/C = L + C.stuttering = max(8, C.stuttering) + C.drowsyness = max(8, C.drowsyness) + C.confused += CLAMP(16 - C.confused, 0, 8) + C.apply_status_effect(STATUS_EFFECT_BELLIGERENT) L.adjustFireLoss(15) ..() diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm index a7fcf0a3b0..7534f7c043 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm @@ -56,8 +56,14 @@ L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!") else if(!..()) if(!L.anti_magic_check()) - if(issilicon(L) || iscultist(L)) + if(issilicon(L)) L.Knockdown(100) + else if(iscultist(L)) + L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage + to_chat(L, "[src] crashes into you with burning force, sending you reeling!") + L.adjust_fire_stacks(2) + L.Knockdown(1) + L.IgniteMob() else L.Knockdown(40) GLOB.clockwork_vitality += L.adjustFireLoss(bonus_burn * 3) //normally a total of 40 damage, 70 with ratvar diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm index 0365ae63af..501bcdc1c4 100644 --- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm +++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm @@ -139,7 +139,7 @@ var/new_thing_type = fabrication_values["new_obj_type"] if(isturf(target)) //if our target is a turf, we're just going to ChangeTurf it and assume it'll work out. var/turf/T = target - T.ChangeTurf(new_thing_type) + T.ChangeTurf(new_thing_type, flags = CHANGETURF_INHERIT_AIR) else if(new_thing_type) if(fabrication_values["dir_in_new"]) diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm index 42ca9e07e2..311f552467 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm @@ -1,5 +1,7 @@ #define MARAUDER_SLOWDOWN_PERCENTAGE 0.40 //Below this percentage of health, marauders will become slower #define MARAUDER_SHIELD_REGEN_TIME 200 //In deciseconds, how long it takes for shields to regenerate after breaking +#define MARAUDER_SPACE_FULL_DAMAGE 6 //amount of damage per life tick while inside space +#define MARAUDER_SPACE_NEAR_DAMAGE 4 //amount of damage taking per Life() tick from being next to space. //Clockwork marauder: A well-rounded frontline construct. Only one can exist for every two human servants. /mob/living/simple_animal/hostile/clockwork/marauder @@ -20,12 +22,14 @@ movement_type = FLYING a_intent = INTENT_HARM loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor) - light_range = 2 - light_power = 1.1 + light_range = 3 + light_power = 1.7 playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \ unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles!

    Obey the Servants and do as they \ - tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.
    " + tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.
    \ + Be warned, however, that you will rapidly decay near the void of space." empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable." + var/default_speed = 0 var/max_shield_health = 3 var/shield_health = 3 //Amount of projectiles that can be deflected within var/shield_health_regen = 0 //When world.time equals this, shield health will regenerate @@ -36,10 +40,21 @@ /mob/living/simple_animal/hostile/clockwork/marauder/Life() ..() + var/turf/T = get_turf(src) + var/turf/open/space/S = isspaceturf(T)? T : null + var/less_space_damage + if(!istype(S)) + var/turf/open/space/nearS = locate() in oview(1) + if(nearS) + S = nearS + less_space_damage = TRUE + if(S) + to_chat(src, "The void of space drains Ratvar's Light from you! You feel yourself rapidly decaying. It would be wise to get back inside!") + adjustBruteLoss(less_space_damage? MARAUDER_SPACE_NEAR_DAMAGE : MARAUDER_SPACE_FULL_DAMAGE) if(!GLOB.ratvar_awakens && health / maxHealth <= MARAUDER_SLOWDOWN_PERCENTAGE) - speed = initial(speed) + 1 //Yes, this slows them down + speed = default_speed + 1 //Yes, this slows them down else - speed = initial(speed) + speed = default_speed if(shield_health < max_shield_health && world.time >= shield_health_regen) shield_health_regen = world.time + MARAUDER_SHIELD_REGEN_TIME to_chat(src, "Your shield has recovered, [shield_health] blocks remaining!") diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm index 755b324d71..0fd6c8a8dc 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm @@ -87,9 +87,22 @@ object_path = /obj/item/clockwork/construct_chassis/clockwork_marauder construct_type = /mob/living/simple_animal/hostile/clockwork/marauder combat_construct = TRUE - var/static/recent_marauders = 0 - var/static/time_since_last_marauder = 0 - var/static/scaled_recital_time = 0 + var/static/last_marauder = 0 + +/datum/clockwork_scripture/create_object/construct/clockwork_marauder/post_recital() + last_marauder = world.time + return ..() + +/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital() + if(!is_reebe(invoker.z)) + if(!CONFIG_GET(flag/allow_clockwork_marauder_on_station)) + to_chat(invoker, "This particular station is too far from the influence of the Hierophant Network. You can not summon a marauder here.") + return FALSE + if(world.time < (last_marauder + CONFIG_GET(number/marauder_delay_non_reebe))) + to_chat(invoker, "The hierophant network is still strained from the last summoning of a marauder on a plane without the strong energy connection of Reebe to support it. \ + You must wait another [DisplayTimeText((last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)) - world.time, TRUE)]!") + return FALSE + return ..() /datum/clockwork_scripture/create_object/construct/clockwork_marauder/update_construct_limit() var/human_servants = 0 @@ -98,27 +111,7 @@ var/mob/living/L = M.current if(ishuman(L) && L.stat != DEAD) human_servants++ - construct_limit = round(CLAMP((human_servants / 4), 1, 3)) - recent_marauders //1 per 4 human servants, maximum of 3, reduced by recent marauder creation - if(recent_marauders) - to_chat(invoker, "The Hierophant Network is depleted by a summoning in the last [DisplayTimeText(MARAUDER_SCRIPTURE_SCALING_THRESHOLD, TRUE)] - limiting the number of available marauders by [recent_marauders]!") - -/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital() - channel_time = initial(channel_time) - if(recent_marauders) - scaled_recital_time = min(recent_marauders * MARAUDER_SCRIPTURE_SCALING_TIME, MARAUDER_SCRIPTURE_SCALING_MAX) - to_chat(invoker, "The Hierophant Network is under strain from repeated summoning, making this scripture [DisplayTimeText(scaled_recital_time)] slower!") - channel_time += scaled_recital_time - return TRUE - -/datum/clockwork_scripture/create_object/construct/clockwork_marauder/scripture_effects() - . = ..() - recent_marauders++ - addtimer(CALLBACK(GLOBAL_PROC, .proc/marauder_reset),MARAUDER_SCRIPTURE_SCALING_THRESHOLD) - -/proc/marauder_reset() - var/datum/clockwork_scripture/create_object/construct/clockwork_marauder/CM = new() - CM.recent_marauders-- - qdel(CM) + construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3 //Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage. /datum/clockwork_scripture/create_object/summon_arbiter diff --git a/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm b/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm index 32b1b61dd1..d823f19d4a 100644 --- a/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm +++ b/code/modules/antagonists/clockcult/clock_structures/wall_gear.dm @@ -59,7 +59,7 @@ if(anchored) T.PlaceOnTop(/turf/closed/wall/clockwork) else - T.PlaceOnTop(/turf/open/floor/clockwork) + T.PlaceOnTop(/turf/open/floor/clockwork, flags = CHANGETURF_INHERIT_AIR) new /obj/structure/falsewall/brass(T) qdel(src) else diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index beea67e596..794010d9c0 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -438,21 +438,27 @@ target.visible_message("[L] starts to glow in a halo of light!", \ "A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light!") else - to_chat(user, "In an brilliant flash of red, [L] falls to the ground!") - L.Knockdown(160) - L.adjustStaminaLoss(140) //Ensures hard stamcrit - L.flash_act(1,1) - if(issilicon(target)) - var/mob/living/silicon/S = L - S.emp_act(EMP_HEAVY) - else if(iscarbon(target)) - var/mob/living/carbon/C = L - C.silent += 6 - C.stuttering += 15 - C.cultslurring += 15 - C.Jitter(15) - if(is_servant_of_ratvar(L)) + if(!iscultist(L)) + L.Knockdown(160) + L.adjustStaminaLoss(140) //Ensures hard stamcrit + L.flash_act(1,1) + if(issilicon(target)) + var/mob/living/silicon/S = L + S.emp_act(EMP_HEAVY) + else if(iscarbon(target)) + var/mob/living/carbon/C = L + C.silent += CLAMP(12 - C.silent, 0, 6) + C.stuttering += CLAMP(30 - C.stuttering, 0, 15) + C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15) + C.Jitter(15) + else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff + if(iscarbon(target)) + var/mob/living/carbon/C = L + C.stuttering = max(10, C.stuttering) + C.drowsyness = max(10, C.drowsyness) + C.confused += CLAMP(20 - C.confused, 0, 10) L.adjustBruteLoss(15) + to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"]") uses-- ..() @@ -579,6 +585,12 @@ new /obj/item/stack/sheet/runed_metal(T,quantity) to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!") SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + if(istype(target, /obj/item/clothing/suit/hooded/wintercoat) && target.type != /obj/item/clothing/suit/hooded/wintercoat/narsie) + if (do_after(user,30,target=target)) + new /obj/item/clothing/suit/hooded/wintercoat/narsie(T) + qdel(target) + to_chat(user, "A dark cloud emanates from you hand and swirls around [target], transforming it into a narsian winter coat!") + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/mob/living/silicon/robot)) var/mob/living/silicon/robot/candidate = target if(candidate.mmi) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 5fe941d32f..b4ddb9dbff 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -703,7 +703,10 @@ else if(!..()) if(!L.anti_magic_check()) if(is_servant_of_ratvar(L)) - L.Knockdown(100) + to_chat(L, "\"Kneel for me, scum\"") + L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before + L.Knockdown(15) + L.adjustBruteLoss(10) else L.Knockdown(50) break_spear(T) diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index f38f379abe..6f340b9271 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -239,9 +239,9 @@ var/turf/T = safepick(validturfs) if(T) if(istype(T, /turf/open/floor/plating)) - T.PlaceOnTop(/turf/open/floor/engine/cult) + T.PlaceOnTop(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) else - T.ChangeTurf(/turf/open/floor/engine/cult) + T.ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) else var/turf/open/floor/engine/cult/F = safepick(cultturfs) if(F) diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 5968c7643a..0fb41cabc8 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -34,6 +34,12 @@ . = ..() name_source = GLOB.commando_names +/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) + ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + +/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) + REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + /datum/antagonist/ert/security // kinda handled by the base template but here for completion /datum/antagonist/ert/security/amber diff --git a/code/modules/antagonists/nukeop/clownop.dm b/code/modules/antagonists/nukeop/clownop.dm index 43e62c4638..58b492b578 100644 --- a/code/modules/antagonists/nukeop/clownop.dm +++ b/code/modules/antagonists/nukeop/clownop.dm @@ -5,6 +5,14 @@ antagpanel_category = "ClownOp" nukeop_outfit = /datum/outfit/syndicate/clownop +/datum/antagonist/nukeop/clownop/on_gain() + . = ..() + ADD_TRAIT(owner, TRAIT_CLOWN_MENTALITY, NUKEOP_ANTAGONIST) + +/datum/antagonist/nukeop/clownop/on_removal() + REMOVE_TRAIT(owner, TRAIT_CLOWN_MENTALITY, NUKEOP_ANTAGONIST) + return ..() + /datum/antagonist/nukeop/leader/clownop name = "Clown Operative Leader" roundend_category = "clown operatives" diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index 0a223f8b10..b5ce5538e9 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -76,9 +76,10 @@ GLOBAL_VAR_INIT(war_declared, FALSE) CONFIG_SET(number/shuttle_refuel_delay, max(CONFIG_GET(number/shuttle_refuel_delay), CHALLENGE_SHUTTLE_DELAY)) if(istype(SSticker.mode, /datum/game_mode/dynamic)) var/datum/game_mode/dynamic/mode = SSticker.mode - var/threat_spent = CONFIG_GET(number/dynamic_warops_cost) - mode.spend_threat(threat_spent) - mode.log_threat("Nuke ops spent [threat_spent] on war ops.") + if(!(mode.storyteller.flags & WAROPS_ALWAYS_ALLOWED)) + var/threat_spent = CONFIG_GET(number/dynamic_warops_cost) + mode.spend_threat(threat_spent) + mode.log_threat("Nuke ops spent [threat_spent] on war ops.") SSblackbox.record_feedback("amount", "nuclear_challenge_mode", 1) qdel(src) @@ -101,12 +102,13 @@ GLOBAL_VAR_INIT(war_declared, FALSE) return FALSE if(istype(SSticker.mode, /datum/game_mode/dynamic)) var/datum/game_mode/dynamic/mode = SSticker.mode - if(mode.threat_level < CONFIG_GET(number/dynamic_warops_requirement)) - to_chat(user, "Due to the dynamic space in which the station resides, you are too deep into Nanotrasen territory to reasonably go loud.") - return FALSE - else if(mode.threat < CONFIG_GET(number/dynamic_warops_cost)) - to_chat(user, "Due to recent threats on the station, Nanotrasen is looking too closely for a war declaration to be wise.") - return FALSE + if(!(mode.storyteller.flags & WAROPS_ALWAYS_ALLOWED)) + if(mode.threat_level < CONFIG_GET(number/dynamic_warops_requirement)) + to_chat(user, "Due to the dynamic space in which the station resides, you are too deep into Nanotrasen territory to reasonably go loud.") + return FALSE + else if(mode.threat < CONFIG_GET(number/dynamic_warops_cost)) + to_chat(user, "Due to recent threats on the station, Nanotrasen is looking too closely for a war declaration to be wise.") + return FALSE return TRUE /obj/item/nuclear_challenge/clownops diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 8021ee5f08..e1c50a7cf5 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -611,10 +611,7 @@ This is here to make the tiles around the station mininuke change when it's arme if(!fake) return - var/ghost = isobserver(user) - var/captain = user.mind && user.mind.assigned_role == "Captain" - var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop) - if(ghost || captain || nukie) + if(isobserver(user) || HAS_TRAIT(user, TRAIT_DISK_VERIFIER) || (user.mind && HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER))) . += "The serial numbers on [src] are incorrect." /obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) @@ -653,3 +650,7 @@ This is here to make the tiles around the station mininuke change when it's arme /obj/item/disk/nuclear/fake fake = TRUE + +/obj/item/disk/nuclear/fake/obvious + name = "cheap plastic imitation of the nuclear authentication disk" + desc = "How anyone could mistake this for the real thing is beyond you." diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index 4604439fc8..d343951d53 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -23,10 +23,12 @@ /datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current update_synd_icons_added(M) + ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) /datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current update_synd_icons_removed(M) + REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) /datum/antagonist/nukeop/proc/equip_op() if(!ishuman(owner.current)) @@ -42,7 +44,6 @@ owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0) to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!") owner.announce_objectives() - return /datum/antagonist/nukeop/on_gain() give_alias() diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm index e086485a49..8e385f6674 100644 --- a/code/modules/antagonists/swarmer/swarmer_event.dm +++ b/code/modules/antagonists/swarmer/swarmer_event.dm @@ -1,8 +1,8 @@ /datum/round_event_control/spawn_swarmer name = "Spawn Swarmer Shell" typepath = /datum/round_event/spawn_swarmer - weight = 7 - max_occurrences = 1 //Only once okay fam + weight = 0 + max_occurrences = 0 earliest_start = 30 MINUTES min_players = 15 diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index ac19df3631..40d1712bc3 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -80,6 +80,8 @@ if(istype(SSticker.mode,/datum/game_mode/dynamic)) mode = SSticker.mode is_dynamic = TRUE + if(mode.storyteller.flags & NO_ASSASSIN) + is_hijacker = FALSE if(GLOB.joined_player_list.len>=GLOB.dynamic_high_pop_limit) is_hijacker = (prob(10) && mode.threat_level > CONFIG_GET(number/dynamic_hijack_high_population_requirement)) else @@ -180,7 +182,7 @@ destroy_objective.owner = owner destroy_objective.find_target() add_objective(destroy_objective) - else if(prob(30)) + else if(prob(30) || (mode.storyteller.flags & NO_ASSASSIN)) var/datum/objective/maroon/maroon_objective = new maroon_objective.owner = owner maroon_objective.find_target() diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 56954f8718..3cc3b48e50 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -505,6 +505,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( if(!is_station_level(F.z)) continue F.obj_flags |= EMAGGED + F.update_icon() to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.") owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 9b2532c71b..a88eb1e42a 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -177,6 +177,10 @@ owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null)) to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") + if(APPRENTICE_MARTIAL) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist(null)) + H.put_in_hands(new /obj/item/book/granter/martial/plasma_fist(H)) + to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned mystical martial abilities. You are also able to use the Nuclear Fist at will.") /datum/antagonist/wizard/apprentice/create_objectives() var/datum/objective/protect/new_objective = new /datum/objective/protect diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 6b87278e00..2ac3b34f60 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -39,7 +39,7 @@ if(flash) add_overlay(flashing_overlay) attached_overlays += flashing_overlay - addtimer(CALLBACK(src, .proc/update_icon), 5) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 5) if(holder) holder.update_icon() @@ -308,7 +308,7 @@ else if(flash) icon_state = "flashshield_flash" item_state = "flashshield_flash" - addtimer(CALLBACK(src, .proc/update_icon), 5) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 5) if(holder) holder.update_icon() diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 38178a4339..db8a8e90ad 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -57,10 +57,10 @@ if(item.parent) var/static/pipenetwarnings = 10 if(pipenetwarnings > 0) - warning("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) Nearby: ([item.x], [item.y], [item.z])") + log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) Nearby: ([item.x], [item.y], [item.z]).") pipenetwarnings -= 1 if(pipenetwarnings == 0) - warning("build_pipeline(): further messages about pipenets will be suppressed") + log_mapping("build_pipeline(): further messages about pipenets will be suppressed") members += item possible_expansions += item diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index d0c78d21b3..329c77ba14 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -56,7 +56,7 @@ pixel_y = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y /obj/machinery/meter/process_atmos() - if(!target) + if(!(target?.flags_1 & INITIALIZED_1)) icon_state = "meterX" return 0 diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 0d5fa6bc8a..34886c5b27 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -29,6 +29,7 @@ var/show_flavour = TRUE var/banType = "lavaland" var/ghost_usable = TRUE + var/skip_reentry_check = FALSE //Skips the ghost role blacklist time for people who ghost/suicide/cryo //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling) @@ -44,7 +45,7 @@ return if(isobserver(user)) var/mob/dead/observer/O = user - if(!O.can_reenter_round()) + if(!O.can_reenter_round() && !skip_reentry_check) return FALSE var/ghost_role = alert(latejoinercalling ? "Latejoin as [mob_name]? (This is a ghost role, and as such, it's very likely to be off-station.)" : "Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No") if(ghost_role == "No" || !loc) diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index 4f7b176691..fe3d831d81 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -22,9 +22,9 @@ if(istype(object,/turf) && left_click && !alt_click && !ctrl_click) var/turf/T = object if(isspaceturf(object)) - T.PlaceOnTop(/turf/open/floor/plating) + T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else if(isplatingturf(object)) - T.PlaceOnTop(/turf/open/floor/plasteel) + T.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR) else if(isfloorturf(object)) T.PlaceOnTop(/turf/closed/wall) else if(iswallturf(object)) @@ -35,7 +35,7 @@ log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]") if(isturf(object)) var/turf/T = object - T.ScrapeAway() + T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) else if(isobj(object)) qdel(object) return diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm index 7b78facf00..1b4ebd6c1a 100644 --- a/code/modules/cargo/gondolapod.dm +++ b/code/modules/cargo/gondolapod.dm @@ -29,7 +29,7 @@ name = linked_pod.name . = ..() -/mob/living/simple_animal/pet/gondola/gondolapod/proc/update_icon() +/mob/living/simple_animal/pet/gondola/gondolapod/update_icon_state() if(opened) icon_state = "gondolapod_open" else diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index aa680e1b1e..29133b78d2 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -13,17 +13,16 @@ //////////////////// Paperwork and Writing Supplies ////////////////////////// ////////////////////////////////////////////////////////////////////////////// -/* I did it Kevin /datum/supply_pack/misc/abandonedcrate - name = "Abandoned Crate" - desc = "Someone keeps finding these locked crates out in the boonies. How about you take a crack at it, we've had our fill. WARNING: EXPLOSIVE" + name = "Loot Box" + desc = "Try your luck with these highly secure loot boxes! Solve the lock, win great prizes! WARNING: EXPLOSIVE FAILURE." contraband = TRUE - cost = 12800 + cost = 15000 contains = list(/obj/structure/closet/crate/secure/loot) crate_name = "abandoned crate" crate_type = /obj/structure/closet/crate/large dangerous = TRUE -*/ + /datum/supply_pack/misc/artsupply name = "Art Supplies" desc = "Make some happy little accidents with six canvasses, two easels, two boxes of crayons, and a rainbow crayon!" diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index e124fea345..4a90af6fd0 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -176,6 +176,23 @@ /obj/item/storage/bag/tray) crate_name = "fruit crate" +/datum/supply_pack/organic/grill + name = "Grilling Starter Kit" + desc = "Hey dad I'm Hungry. Hi Hungry I'm THE NEW GRILLING STARTER KIT ONLY 5000 BUX GET NOW! Contains a cooking grill and five fuel coal sheets." + cost = 3000 + crate_type = /obj/structure/closet/crate + contains = list(/obj/item/stack/sheet/mineral/coal/five, + /obj/machinery/grill/unwrenched) + crate_name = "grilling starter kit crate" + +/datum/supply_pack/organic/grillfuel + name = "Grilling Fuel Kit" + desc = "Contains coal and coal accessories. (Note: only ten coal sheets.)" + cost = 1000 + crate_type = /obj/structure/closet/crate + contains = list(/obj/item/stack/sheet/mineral/coal/ten) + crate_name = "grilling fuel kit crate" + /datum/supply_pack/organic/cream_piee name = "High-yield Clown-grade Cream Pie Crate" desc = "Designed by Aussec's Advanced Warfare Research Division, these high-yield, Clown-grade cream pies are powered by a synergy of performance and efficiency. Guaranteed to provide maximum results." diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index a54584d6cc..ae9932e96f 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -79,4 +79,8 @@ var/client_keysend_amount = 0 var/next_keysend_reset = 0 var/next_keysend_trip_reset = 0 - var/keysend_tripped = FALSE \ No newline at end of file + var/keysend_tripped = FALSE + + // stops players from coming back through ghost/midround roles after suicide/cryo + // for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit) + var/reenter_round_timeout = 0 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b35e996bc6..7b7cf3413e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -14,13 +14,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - var/max_save_slots = 8 + var/max_save_slots = 16 //non-preference stuff var/muted = 0 var/last_ip var/last_id + var/icon/custom_holoform_icon + var/list/cached_holoform_icons + var/last_custom_holoform = 0 + //Cooldowns for saving/loading. These are four are all separate due to loading code calling these one after another var/saveprefcooldown var/loadprefcooldown @@ -103,6 +107,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", + "insect_markings" = "None", "mcolor2" = "FFF", "mcolor3" = "FFF", "mam_body_markings" = "Plain", @@ -194,6 +199,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/auto_fit_viewport = TRUE var/uplink_spawn_loc = UPLINK_PDA + + var/sprint_spacebar = FALSE + var/sprint_toggle = FALSE var/list/exp = list() var/list/menuoptions @@ -217,7 +225,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) load_path(C.ckey) unlock_content = C.IsByondMember() if(unlock_content) - max_save_slots = 16 + max_save_slots = 24 var/loaded_preferences_successfully = load_preferences() if(loaded_preferences_successfully) if(load_character()) @@ -244,6 +252,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Character Appearance" dat += "Loadout" dat += "Game Preferences" + dat += "Content Preferences" if(!path) dat += "
    Please create an account to save your preferences
    " @@ -620,6 +629,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[features["taur"]]" + if("insect_markings" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

    Insect markings

    " + + dat += "[features["insect_markings"]]
    " + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) dat += "" @@ -707,13 +729,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "
    " dat += "

    Clothing & Equipment

    " dat += "Underwear:[underwear]" - if(UNDIE_COLORABLE(GLOB.underwear_list[underwear])) + if(GLOB.underwear_list[underwear]?.has_color) dat += "Underwear Color:     Change
    " dat += "Undershirt:[undershirt]" - if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt])) + if(GLOB.undershirt_list[undershirt]?.has_color) dat += "Undershirt Color:     Change
    " dat += "Socks:[socks]" - if(UNDIE_COLORABLE(GLOB.socks_list[socks])) + if(GLOB.socks_list[socks]?.has_color) dat += "Socks Color:     Change
    " dat += "Backpack:[backbag]" dat += "Jumpsuit:
    [jumpsuit_style]
    " @@ -820,13 +842,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat +="
    " dat += "

    Citadel Preferences

    " //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. - dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
    " - dat += "Voracious MediHound sleepers: [(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]
    " - dat += "Hear Vore Sounds: [(cit_toggles & EATING_NOISES) ? "Yes" : "No"]
    " - dat += "Hear Vore Digestion Sounds: [(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]
    " - dat += "Lewdchem:[lewdchem == TRUE ? "Enabled" : "Disabled"]
    " dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
    " dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
    " + dat += "Auto OOC: [auto_ooc ? "Enabled" : "Disabled"]
    " dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
    " if (user && user.client && !user.client.prefs.screenshake==0) dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
    " @@ -878,6 +896,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    " dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
    " dat += "Fit Viewport: [auto_fit_viewport ? "Auto" : "Manual"]
    " + dat += "Sprint Key: [sprint_spacebar ? "Space" : "Shift"]
    " + dat += "Toggle Sprint: [sprint_toggle ? "Enabled" : "Disabled"]
    " if (CONFIG_GET(flag/maprotation) && CONFIG_GET(flag/tgstyle_maprotation)) var/p_map = preferred_map @@ -977,6 +997,26 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "
    [gear.description]
    " + if(4) // Content preferences + dat += "" + dat +="
    " + dat += "

    Fetish content prefs

    " + dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
    " + dat += "Voracious MediHound sleepers: [(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]
    " + dat += "Hear Vore Sounds: [(cit_toggles & EATING_NOISES) ? "Yes" : "No"]
    " + dat += "Hear Vore Digestion Sounds: [(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]
    " + dat += "Forced Feminization: [(cit_toggles & FORCED_FEM) ? "Allowed" : "Disallowed"]
    " + dat += "Forced Masculinization: [(cit_toggles & FORCED_MASC) ? "Allowed" : "Disallowed"]
    " + dat += "Lewd Hypno: [(cit_toggles & HYPNO) ? "Allowed" : "Disallowed"]
    " + dat += "
    " + dat += "

    Other content prefs

    " + dat += "Breast Enlargement: [(cit_toggles & BREAST_ENLARGEMENT) ? "Allowed" : "Disallowed"]
    " + dat += "Penis Enlargement: [(cit_toggles & PENIS_ENLARGEMENT) ? "Allowed" : "Disallowed"]
    " + dat += "Hypno: [(cit_toggles & NEVER_HYPNO) ? "Disallowed" : "Allowed"]
    " + dat += "Aphrodisiacs: [(cit_toggles & NO_APHRO) ? "Disallowed" : "Allowed"]
    " + dat += "Ass Slapping: [(cit_toggles & NO_ASS_SLAP) ? "Disallowed" : "Allowed"]
    " + dat += "
    " + dat += "
    " @@ -1743,6 +1783,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_insect_fluff) features["insect_fluff"] = new_insect_fluff + if("insect_markings") + var/new_insect_markings + new_insect_markings = input(user, "Choose your character's markings:", "Character Preference") as null|anything in GLOB.insect_markings_list + if(new_insect_markings) + features["insect_markings"] = new_insect_markings + if("s_tone") var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones if(new_s_tone) @@ -2016,8 +2062,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["genitals_use_skintone"] = !features["genitals_use_skintone"] if("arousable") arousable = !arousable - if("lewdchem") - lewdchem = !lewdchem if("has_cock") features["has_cock"] = !features["has_cock"] if(features["has_cock"] == FALSE) @@ -2049,6 +2093,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) user.client.change_view(CONFIG_GET(string/default_view)) if("autostand") autostand = !autostand + if("auto_ooc") + auto_ooc = !auto_ooc if ("screenshake") var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num if (!isnull(desiredshake)) @@ -2164,6 +2210,31 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("toggledigestionnoise") cit_toggles ^= DIGESTION_NOISES + + if("breast_enlargement") + cit_toggles ^= BREAST_ENLARGEMENT + + if("penis_enlargement") + cit_toggles ^= PENIS_ENLARGEMENT + + if("feminization") + cit_toggles ^= FORCED_FEM + + if("masculinization") + cit_toggles ^= FORCED_MASC + + if("hypno") + cit_toggles ^= HYPNO + + if("never_hypno") + cit_toggles ^= NEVER_HYPNO + + if("aphro") + cit_toggles ^= NO_APHRO + + if("ass_slap") + cit_toggles ^= NO_ASS_SLAP + //END CITADEL EDIT if("ambientocclusion") @@ -2177,6 +2248,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(auto_fit_viewport && parent) parent.fit_viewport() + if("sprint_key") + sprint_spacebar = !sprint_spacebar + + if("sprint_toggle") + sprint_toggle = !sprint_toggle + if("save") save_preferences() save_character() @@ -2349,3 +2426,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) return else custom_names[name_id] = sanitized_name + +/datum/preferences/proc/get_filtered_holoform(filter_type) + if(!custom_holoform_icon) + return + LAZYINITLIST(cached_holoform_icons) + if(!cached_holoform_icons[filter_type]) + cached_holoform_icons[filter_type] = process_holoform_icon_filter(custom_holoform_icon, filter_type) + return cached_holoform_icons[filter_type] diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index f7f49a66af..d78b9fe6fd 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -167,6 +167,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["parallax"] >> parallax S["ambientocclusion"] >> ambientocclusion S["auto_fit_viewport"] >> auto_fit_viewport + S["sprint_spacebar"] >> sprint_spacebar + S["sprint_toggle"] >> sprint_toggle S["menuoptions"] >> menuoptions S["enable_tips"] >> enable_tips S["tip_delay"] >> tip_delay @@ -181,8 +183,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["widescreenpref"] >> widescreenpref S["autostand"] >> autostand S["cit_toggles"] >> cit_toggles - S["lewdchem"] >> lewdchem S["preferred_chaos"] >> preferred_chaos + S["auto_ooc"] >> auto_ooc //try to fix any outdated data if necessary @@ -204,6 +206,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null) ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport)) + sprint_spacebar = sanitize_integer(sprint_spacebar, 0, 1, initial(sprint_spacebar)) + sprint_toggle = sanitize_integer(sprint_toggle, 0, 1, initial(sprint_toggle)) ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) @@ -219,7 +223,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) autostand = sanitize_integer(autostand, 0, 1, initial(autostand)) cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles)) - + auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc)) return 1 @@ -264,6 +268,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["parallax"], parallax) WRITE_FILE(S["ambientocclusion"], ambientocclusion) WRITE_FILE(S["auto_fit_viewport"], auto_fit_viewport) + WRITE_FILE(S["sprint_spacebar"], sprint_spacebar) + WRITE_FILE(S["sprint_toggle"], sprint_toggle) WRITE_FILE(S["menuoptions"], menuoptions) WRITE_FILE(S["enable_tips"], enable_tips) WRITE_FILE(S["tip_delay"], tip_delay) @@ -278,8 +284,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["widescreenpref"], widescreenpref) WRITE_FILE(S["autostand"], autostand) WRITE_FILE(S["cit_toggles"], cit_toggles) - WRITE_FILE(S["lewdchem"], lewdchem) WRITE_FILE(S["preferred_chaos"], preferred_chaos) + WRITE_FILE(S["auto_ooc"], auto_ooc) return 1 @@ -366,9 +372,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_legs"] >> features["legs"] S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] + S["feature_deco_wings"] >> features["deco_wings"] S["feature_insect_wings"] >> features["insect_wings"] - S["feature_deco_wings"] >> features["deco_wings"] S["feature_insect_fluff"] >> features["insect_fluff"] + S["feature_insect_markings"] >> features["insect_markings"] //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) @@ -503,9 +510,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list) - features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list) features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None") features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list) + features["insect_markings"] = sanitize_inlist(features["insect_markings"], GLOB.insect_markings_list, "None") + features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list) joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) //Validate job prefs @@ -515,6 +523,21 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car all_quirks = SANITIZE_LIST(all_quirks) + for(var/V in all_quirks) // quirk migration + switch(V) + if("Acute hepatic pharmacokinesis") + DISABLE_BITFIELD(cit_toggles, PENIS_ENLARGEMENT) + DISABLE_BITFIELD(cit_toggles, BREAST_ENLARGEMENT) + ENABLE_BITFIELD(cit_toggles,FORCED_FEM) + ENABLE_BITFIELD(cit_toggles,FORCED_MASC) + all_quirks -= V + if("Crocin Immunity") + ENABLE_BITFIELD(cit_toggles,NO_APHRO) + all_quirks -= V + if("Buns of Steel") + ENABLE_BITFIELD(cit_toggles,NO_ASS_SLAP) + all_quirks -= V + cit_character_pref_load(S) return 1 @@ -570,11 +593,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) - WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"]) WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"]) + WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"]) WRITE_FILE(S["feature_insect_fluff"] , features["insect_fluff"]) + WRITE_FILE(S["feature_insect_markings"] , features["insect_markings"]) WRITE_FILE(S["feature_meat"] , features["meat_type"]) + //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index dc9e46c4b4..6fd1584e75 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -22,7 +22,6 @@ var/cooldown = 0 var/obj/item/flashlight/F = null var/can_flashlight = 0 - var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? var/blocks_shove_knockdown = FALSE //Whether wearing the clothing item blocks the ability for shove to knock down. @@ -47,6 +46,16 @@ //Add a "exclude" string to do the opposite, making it only only species listed that can't wear it. //You append this to clothing objects. + //Polychrome stuff: + var/hasprimary = FALSE //These vars allow you to choose which overlays a clothing has + var/hassecondary = FALSE + var/hastertiary = FALSE + var/primary_color = "#FFFFFF" //RGB in hexcode + var/secondary_color = "#FFFFFF" + var/tertiary_color = "#808080" + + //No idea what this is but eh -tori + var/force_alternate_icon = FALSE /obj/item/clothing/Initialize() . = ..() @@ -54,6 +63,8 @@ actions_types += /datum/action/item_action/toggle_voice_box if(ispath(pocket_storage_component_path)) LoadComponent(pocket_storage_component_path) + if(hasprimary | hassecondary | hastertiary) //Checks if polychrome is enabled + update_icon() //Applies the overlays and default colors onto the clothes on spawn. /obj/item/clothing/MouseDrop(atom/over_object) . = ..() @@ -138,6 +149,8 @@ how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" . += how_cool_are_your_threads.Join() + if(hasprimary | hassecondary | hastertiary) //Checks if polychrome is enabled + . += "Alt-click to recolor it." /obj/item/clothing/obj_break(damage_flag) if(!damaged_clothes) @@ -260,6 +273,56 @@ BLIND // can't see anything remove_accessory(user) else rolldown() + // Polychrome stuff: + if(hasprimary | hassecondary | hastertiary) + var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays + switch(choice) //Lets the list's options actually lead to something + if("Primary Color") + var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. + if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. + primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly + update_icon() //updates the item icon + user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works. + if("Secondary Color") + var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null + if(secondary_color_input) + secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.regenerate_icons() + if("Tertiary Color") + var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null + if(tertiary_color_input) + tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.regenerate_icons() + return TRUE + +/obj/item/clothing/neck/AltClick(mob/user) + . = ..() + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + // Polychrome stuff: + if(hasprimary | hassecondary | hastertiary) + var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays + switch(choice) //Lets the list's options actually lead to something + if("Primary Color") + var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. + if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. + primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly + update_icon() //updates the item icon + user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works. + if("Secondary Color") + var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null + if(secondary_color_input) + secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.regenerate_icons() + if("Tertiary Color") + var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null + if(tertiary_color_input) + tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.regenerate_icons() return TRUE /obj/item/clothing/under/verb/jumpsuit_adjust() @@ -377,3 +440,18 @@ BLIND // can't see anything return FALSE return TRUE + +/obj/item/clothing/update_icon() // Polychrome stuff + ..() + if(hasprimary) //Checks if the overlay is enabled + var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary") //Automagically picks overlays + primary_overlay.color = primary_color //Colors the greyscaled overlay + add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite. + if(hassecondary) + var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary") + secondary_overlay.color = secondary_color + add_overlay(secondary_overlay) + if(hastertiary) + var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary") + tertiary_overlay.color = tertiary_color + add_overlay(tertiary_overlay) \ No newline at end of file diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 206165a495..a80cf6fba3 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -54,6 +54,9 @@ H.blur_eyes(5) eyes.applyOrganDamage(5) +/obj/item/clothing/glasses/proc/ranged_attack(mob/living/carbon/human/user,atom/A, params) + return FALSE + /obj/item/clothing/glasses/meson name = "optical meson scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions." @@ -99,7 +102,7 @@ desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents." icon_state = "purple" item_state = "glasses" - scan_reagents = TRUE //You can see reagents while wearing science goggles + clothing_flags = SCAN_REAGENTS //You can see reagents while wearing science goggles actions_types = list(/datum/action/item_action/toggle_research_scanner) glass_colour_type = /datum/client_colour/glass_colour/purple resistance_flags = ACID_PROOF @@ -203,7 +206,7 @@ /obj/item/clothing/glasses/sunglasses/reagent name = "beer goggles" desc = "A pair of sunglasses outfitted with apparatus to scan reagents." - scan_reagents = TRUE + clothing_flags = SCAN_REAGENTS /obj/item/clothing/glasses/sunglasses/garb name = "black gar glasses" @@ -405,7 +408,7 @@ item_state = "godeye" vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS darkness_view = 8 - scan_reagents = TRUE + clothing_flags = SCAN_REAGENTS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE resistance_flags = LAVA_PROOF | FIRE_PROOF diff --git a/code/modules/clothing/glasses/disablerglasses.dm b/code/modules/clothing/glasses/disablerglasses.dm new file mode 100644 index 0000000000..a46e4c8339 --- /dev/null +++ b/code/modules/clothing/glasses/disablerglasses.dm @@ -0,0 +1,15 @@ +/obj/item/clothing/glasses/hud/security/sunglasses/disablers + name = "true stunglasses" + desc = "Made for only the best of shitsec. Wear 'em like you're gonna robust all of those fuckers." + var/beamtype = /obj/item/projectile/beam/disabler //change for adminbus + +/obj/item/clothing/glasses/hud/security/sunglasses/disablers/ranged_attack(mob/living/carbon/human/user,atom/A, params) + user.changeNext_move(CLICK_CD_RANGE) + var/obj/item/projectile/beam/disabler/LE = new beamtype( loc ) + playsound(usr.loc, 'sound/weapons/taser2.ogg', 75, 1) + LE.firer = src + LE.def_zone = user.get_organ_target() + LE.preparePixelProjectile(A, src, params) + LE.fire() + return TRUE + //shamelessly copied \ No newline at end of file diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index 47706a3e1e..0132fa8596 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -90,7 +90,7 @@ for(var/i in rad_places) var/turf/place = i - if(get_dist(user, place) >= range*2) //Rads are easier to see than wires under the floor + if(get_dist(user, place) >= range*8) //Rads are easier to see than wires under the floor continue var/strength = round(rad_places[i] / 1000, 0.1) var/image/pic = new(loc = place) @@ -139,7 +139,6 @@ item_state = "trayson-t-ray" desc = "Used by engineering staff to see underfloor objects such as cables and pipes." range = 2 - modes = list(MODE_NONE = MODE_TRAY, MODE_TRAY = MODE_NONE) /obj/item/clothing/glasses/meson/engine/tray/prescription @@ -152,7 +151,6 @@ icon_state = "trayson-shuttle" item_state = "trayson-shuttle" desc = "Used to see the boundaries of shuttle regions." - modes = list(MODE_NONE = MODE_SHUTTLE, MODE_SHUTTLE = MODE_NONE) #undef MODE_NONE diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index fc82d038ce..127bf4c773 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -309,4 +309,4 @@ //The "pocket" for the M1 helmet so you can tuck things into the elastic band /datum/component/storage/concrete/pockets/tiny/spacenam - attack_hand_interact = TRUE //So you can actually see what you stuff in there \ No newline at end of file + attack_hand_interact = TRUE //So you can actually see what you stuff in there diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 3d318db761..43c99fe7fd 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -89,12 +89,12 @@ /obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) . = ..() - if(user.mind && user.mind.assigned_role == "Clown") + if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)) SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "noshoes") /obj/item/clothing/shoes/clown_shoes/dropped(mob/user) . = ..() - if(user.mind && user.mind.assigned_role == "Clown") + if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)) SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes) /obj/item/clothing/shoes/clown_shoes/jester diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm index f2bbdf0ceb..7c891dbde4 100644 --- a/code/modules/clothing/shoes/taeclowndo.dm +++ b/code/modules/clothing/shoes/taeclowndo.dm @@ -13,7 +13,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown")) + if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY))) return if(slot == SLOT_SHOES) spells = new diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index c6eac4ac56..bf52b26ae9 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -212,7 +212,7 @@ icon_state = "hardsuit0-white" item_state = "ce_helm" item_color = "white" - armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 90, "fire" = 100, "acid" = 90) + armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -221,7 +221,7 @@ name = "advanced hardsuit" desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." item_state = "ce_hardsuit" - armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 90, "fire" = 100, "acid" = 90) + armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 95, "fire" = 100, "acid" = 90) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite @@ -445,7 +445,7 @@ flash_protect = 0 armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - scan_reagents = TRUE + clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS /obj/item/clothing/suit/space/hardsuit/medical icon_state = "hardsuit-medical" @@ -467,7 +467,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) var/obj/machinery/doppler_array/integrated/bomb_radar - scan_reagents = TRUE + clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_research_scanner) /obj/item/clothing/head/helmet/space/hardsuit/rd/Initialize() @@ -590,8 +590,7 @@ /obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, slot) if(!..() || !ishuman(M)) return FALSE - var/mob/living/carbon/human/H = M - if(H.mind.assigned_role == "Clown") + if(M.mind && HAS_TRAIT(M.mind, TRAIT_CLOWN_MENTALITY)) return TRUE else return FALSE @@ -638,7 +637,7 @@ armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) item_color = "ancient" brightness_on = 16 - scan_reagents = TRUE + clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS flash_protect = 5 //We will not be flash by bombs tint = 1 var/obj/machinery/doppler_array/integrated/bomb_radar diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 6548b4e7fe..4e155cd341 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -742,6 +742,7 @@ name = "assistant's formal winter coat" icon_state = "coataformal" item_state = "coataformal" + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter,/obj/item/clothing/gloves/color/yellow) hoodtype = /obj/item/clothing/head/hooded/winterhood/aformal /obj/item/clothing/head/hooded/winterhood/aformal @@ -762,7 +763,10 @@ name = "ratvarian winter coat" icon_state = "coatratvar" item_state = "coatratvar" + armor = list("melee" = 30, "bullet" = 45, "laser" = -10, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/clockwork/replica_fabricator, /obj/item/clockwork/integration_cog, /obj/item/clockwork/slab, /obj/item/clockwork/weapon/ratvarian_spear) hoodtype = /obj/item/clothing/head/hooded/winterhood/ratvar + var/real = TRUE /obj/item/clothing/head/hooded/winterhood/ratvar icon_state = "winterhood_ratvar" @@ -770,15 +774,59 @@ light_power = 1 light_color = "#B18B25" //clockwork slab background top color +/obj/item/clothing/suit/hooded/wintercoat/ratvar/equipped(mob/living/user,slot) + ..() + if (slot != SLOT_WEAR_SUIT || !real) + return + if (is_servant_of_ratvar(user)) + return + else + user.dropItemToGround(src) + to_chat(user,"\"Amusing that you think you are fit to wear this.\"") + to_chat(user,"Your skin burns where the coat touched your skin!") + user.adjustFireLoss(rand(10,16)) + /obj/item/clothing/suit/hooded/wintercoat/narsie name = "narsian winter coat" icon_state = "coatnarsie" item_state = "coatnarsie" + armor = list("melee" = 30, "bullet" = 20, "laser" = 30,"energy" = 10, "bomb" = 30, "bio" = 10, "rad" = 10, "fire" = 30, "acid" = 30) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/restraints/legcuffs/bola/cult,/obj/item/melee/cultblade,/obj/item/melee/cultblade/dagger,/obj/item/reagent_containers/glass/beaker/unholywater,/obj/item/cult_shift,/obj/item/flashlight/flare/culttorch,/obj/item/twohanded/cult_spear) hoodtype = /obj/item/clothing/head/hooded/winterhood/narsie + var/real = TRUE + +/obj/item/clothing/suit/hooded/wintercoat/narsie/equipped(mob/living/user,slot) + ..() + if (slot != SLOT_WEAR_SUIT || !real) + return + if (iscultist(user)) + return + else + user.dropItemToGround(src) + to_chat(user,"\"You are not fit to wear my follower's coat!\"") + to_chat(user,"Sharp spines jab you from within the coat!") + user.adjustBruteLoss(rand(10,16)) /obj/item/clothing/head/hooded/winterhood/narsie icon_state = "winterhood_narsie" +/obj/item/clothing/suit/hooded/wintercoat/ratvar/fake + name = "brass winter coat" + icon_state = "coatratvar" + item_state = "coatratvar" + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + real = FALSE + +/obj/item/clothing/suit/hooded/wintercoat/narsie/fake + name = "runed winter coat" + icon_state = "coatnarsie" + item_state = "coatnarsie" + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + real = FALSE + + /obj/item/clothing/suit/spookyghost name = "spooky ghost" desc = "This is obviously just a bedsheet, but maybe try it on?" diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index 5b2291e59c..0d2f68f580 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -50,7 +50,8 @@ icon_state = "reactiveoff" item_state = "reactiveoff" add_fingerprint(user) - return + if(user.get_item_by_slot(SLOT_WEAR_SUIT) == src) + user.update_inv_wear_suit() /obj/item/clothing/suit/armor/reactive/emp_act(severity) . = ..() @@ -71,8 +72,9 @@ reactivearmor_cooldown_duration = 100 /obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + . = FALSE if(!active) - return 0 + return if(prob(hit_reaction_chance)) var/mob/living/carbon/human/H = owner if(world.time < reactivearmor_cooldown) @@ -95,12 +97,11 @@ var/turf/picked = pick(turfs) if(!isturf(picked)) return - H.forceMove(picked) + do_teleport(H, picked, no_effects = TRUE, channel = TELEPORT_CHANNEL_WORMHOLE) radiation_pulse(old, rad_amount_before) radiation_pulse(src, rad_amount) reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - return 0 + return TRUE //Fire diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 58df911412..177bce672f 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -467,6 +467,33 @@ fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE +/obj/item/clothing/under/sundresswhite + name = "white sundress" + desc = "Makes you want to frolic in a field of lillies." + icon_state = "sundress_white" + item_color = "sundress_white" + body_parts_covered = CHEST|GROIN + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + +/obj/item/clothing/under/greendress + name = "green dress" + desc = "A tight green dress" + icon_state = "dress_green" + item_color = "dress_green" + body_parts_covered = CHEST|GROIN + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + +/obj/item/clothing/under/pinkdress + name = "pink dress" + desc = "A tight pink dress" + icon_state = "dress_pink" + item_color = "dress_pink" + body_parts_covered = CHEST|GROIN + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + /obj/item/clothing/under/captainparade name = "captain's parade uniform" desc = "A captain's luxury-wear, for special occasions." @@ -509,6 +536,24 @@ fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE +/obj/item/clothing/under/westernbustle + name = "western bustle dress" + desc = "Filled with Western fire." + icon_state = "western_bustle" + item_state = "wcoat" + item_color = "western_bustle" + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + +/obj/item/clothing/under/flamenco + name = "flamenco dress" + desc = "Filled with Latin fire." + icon_state = "flamenco" + item_state = "wcoat" + item_color = "flamenco" + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + /obj/item/clothing/under/stripeddress name = "striped dress" desc = "Fashion in space." @@ -529,6 +574,44 @@ fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE +/obj/item/clothing/under/flowerdress + name = "flower dress" + desc = "Lovely dress" + icon_state = "flower_dress" + item_state = "sailordress" + item_color = "flower_dress" + body_parts_covered = CHEST|GROIN + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + +/obj/item/clothing/under/sweptskirt + name = "swept skirt" + desc = "Formal skirt" + icon_state = "skirt_swept" + item_color = "skirt_swept" + body_parts_covered = GROIN + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + +/obj/item/clothing/under/corset + name = "black corset" + desc = "Nanotrasen is not resposible for any organ damage" + icon_state = "corset" + item_color = "corset" + body_parts_covered = CHEST|GROIN + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + +/obj/item/clothing/under/croptop + name = "crop top" + desc = "We've saved money by giving you half a shirt!" + icon_state = "sailor_dress" + item_state = "sailordress" + item_color = "sailor_dress" + body_parts_covered = CHEST|GROIN|ARMS + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE + /obj/item/clothing/under/redeveninggown name = "red evening gown" desc = "Fancy dress for space bar singers." diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 05616337db..97bb4c48bc 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -75,3 +75,34 @@ desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station." icon_state = "camopants" item_color = "camopants" + +/obj/item/clothing/under/pants/jeanripped + name = "ripped jeans" + desc = "If you're wearing this you're poor or a rebel" + icon_state = "jean_ripped" + item_color = "jean_ripped" + +/obj/item/clothing/under/pants/jeanshort + name = "jean shorts" + desc = "These are really just jeans cut in half" + icon_state = "jean_shorts" + item_color = "jean_shorts" + +/obj/item/clothing/under/pants/denimskirt + name = "denim skirt" + desc = "These are really just a jean leg hole cut from a pair" + icon_state = "denim_skirt" + item_color = "denim_skirt" + +/obj/item/clothing/under/pants/chaps + name = "black chaps" + body_parts_covered = LEGS + desc = "Yeehaw" + icon_state = "chaps" + item_color = "chaps" + +/obj/item/clothing/under/pants/yoga + name = "yoga pants" + desc = "Comfy!" + icon_state = "yoga_pants" + item_color = "yoga_pants" diff --git a/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm b/code/modules/clothing/under/polychromic_clothes.dm similarity index 86% rename from modular_citadel/code/modules/clothing/under/polychromic_clothes.dm rename to code/modules/clothing/under/polychromic_clothes.dm index c0f7a5d639..9649d93eed 100644 --- a/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm +++ b/code/modules/clothing/under/polychromic_clothes.dm @@ -4,7 +4,7 @@ // Polychromic clothes simply consist of 4 sprites: A base, unrecoloured sprite, and up to 3 greyscaled sprites. // // In order to add more polychromic clothes, simply create a base sprite, and up to 3 recolourable overlays for it, // // and then name them as follows: [name], [name]-primary, [name]-secondary, [name]-tertiary. The sprites should // -// ideally be in 'modular_citadel/icons/polyclothes/item/uniform.dmi' and 'modular_citadel/icons/polyclothes/mob/uniform.dmi' for the // +// ideally be in 'icons/obj/clothing/uniform.dmi' and 'icons/mob/uniform.dmi' for the // // worn sprites. After that, copy paste the code from any of the example clothes and // // change the names around. [name] should go in BOTH icon_state and item_color. You can preset colors and disable // // any overlays using the self-explainatory vars. // @@ -15,8 +15,6 @@ /obj/item/clothing/under/polychromic //enables all three overlays to reduce copypasta and defines basic stuff name = "polychromic suit" desc = "For when you want to show off your horrible colour coordination skills." - icon = 'modular_citadel/icons/polyclothes/item/uniform.dmi' - alternate_worn_icon = 'modular_citadel/icons/polyclothes/mob/uniform.dmi' icon_state = "polysuit" item_color = "polysuit" item_state = "sl_suit" @@ -27,23 +25,22 @@ secondary_color = "#FFFFFF" tertiary_color = "#808080" can_adjust = FALSE - mutantrace_variation = NO_MUTANTRACE_VARIATION // because I'm too lazy to port these to digi-compatible and to prove a point from /tg/ whining - Pooj - suit_style = NORMAL_SUIT_STYLE + mutantrace_variation = NO_MUTANTRACE_VARIATION //Not all clothes are currently digi-compatible (only the shorts are as of time of writing) -/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon +/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens. . = ..() if(hasprimary | hassecondary | hastertiary) if(!isinhands) //prevents the worn sprites from showing up if you're just holding them if(hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection + var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[item_color]-primary") //automagical sprite selection primary_worn.color = primary_color //colors the overlay . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. if(hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary") + var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[item_color]-secondary") secondary_worn.color = secondary_color . += secondary_worn if(hastertiary) - var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary") + var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[item_color]-tertiary") tertiary_worn.color = tertiary_color . += tertiary_worn @@ -89,6 +86,7 @@ secondary_color = "#808080" tertiary_color = "#808080" body_parts_covered = CHEST|GROIN|ARMS + mutantrace_variation = MUTANTRACE_VARIATION //to enable digitigrade wearing /obj/item/clothing/under/polychromic/jumpsuit name = "polychromic tri-tone jumpsuit" diff --git a/code/modules/crafting/recipes/recipes_clothing.dm b/code/modules/crafting/recipes/recipes_clothing.dm index 4f06a44811..8cb35df9d1 100644 --- a/code/modules/crafting/recipes/recipes_clothing.dm +++ b/code/modules/crafting/recipes/recipes_clothing.dm @@ -163,26 +163,7 @@ name = "Cosmic Winter Coat" result = /obj/item/clothing/suit/hooded/wintercoat/cosmic reqs = list(/obj/item/clothing/suit/hooded/wintercoat = 1, - /obj/item/clothing/suit/hooded/wintercoat/captain = 1, - /obj/item/clothing/suit/hooded/wintercoat/hop = 1, - /obj/item/clothing/suit/hooded/wintercoat/hos = 1, - /obj/item/clothing/suit/hooded/wintercoat/rd = 1, - /obj/item/clothing/suit/hooded/wintercoat/ce = 1, - /obj/item/clothing/suit/hooded/wintercoat/cmo = 1, - /obj/item/clothing/suit/hooded/wintercoat/qm = 1, - /obj/item/clothing/suit/hooded/wintercoat/robotics = 1, - /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 1, - /obj/item/clothing/suit/hooded/wintercoat/engineering = 1, - /obj/item/clothing/suit/hooded/wintercoat/science = 1, - /obj/item/clothing/suit/hooded/wintercoat/genetics = 1, - /obj/item/clothing/suit/hooded/wintercoat/chemistry = 1, - /obj/item/clothing/suit/hooded/wintercoat/medical = 1, - /obj/item/clothing/suit/hooded/wintercoat/viro = 1, - /obj/item/clothing/suit/hooded/wintercoat/janitor = 1, - /obj/item/clothing/suit/hooded/wintercoat/security = 1, - /obj/item/clothing/suit/hooded/wintercoat/cargo = 1, - /obj/item/clothing/suit/hooded/wintercoat/hydro = 1, - /obj/item/clothing/suit/hooded/wintercoat/miner = 1) + /obj/item/bedsheet/cosmos = 1) time = 60 always_availible = TRUE category = CAT_CLOTHING diff --git a/code/modules/crafting/recipes/recipes_misc.dm b/code/modules/crafting/recipes/recipes_misc.dm index 70dd4d1370..38ae3560e5 100644 --- a/code/modules/crafting/recipes/recipes_misc.dm +++ b/code/modules/crafting/recipes/recipes_misc.dm @@ -358,3 +358,11 @@ time = 100 category = CAT_MISC always_availible = FALSE // Disabled til learned + +/datum/crafting_recipe/coconut_bong + name = "Coconut Bong" + result = /obj/item/bong/coconut + reqs = list(/obj/item/stack/sheet/mineral/bamboo = 2, + /obj/item/reagent_containers/food/snacks/grown/coconut = 1) + time = 70 + category = CAT_MISC \ No newline at end of file diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 07a399a1b6..00e3698e1e 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -37,6 +37,8 @@ continue if(!H.client) continue + if(HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS)) + continue if(H.stat == DEAD) continue if(HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) //Don't pick someone who's virus immune, only for it to not do anything. diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index 8db2d98bf0..a47a8b81b4 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -9,7 +9,7 @@ /datum/round_event/heart_attack/start() var/list/heart_attack_contestants = list() for(var/mob/living/carbon/human/H in shuffle(GLOB.player_list)) - if(!H.client || H.stat == DEAD || H.InCritical() || !H.can_heartattack() || H.has_status_effect(STATUS_EFFECT_EXERCISED) || (/datum/disease/heart_failure in H.diseases) || H.undergoing_cardiac_arrest()) + if(!H.client || H.stat == DEAD || H.InCritical() || !H.can_heartattack() || H.has_status_effect(STATUS_EFFECT_EXERCISED) || (/datum/disease/heart_failure in H.diseases) || H.undergoing_cardiac_arrest() || HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS)) continue if(H.satiety <= -60) //Multiple junk food items recently heart_attack_contestants[H] = 3 diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index 2b0c16ebfc..0553f69b5b 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -35,4 +35,6 @@ /datum/hallucination/delusion, /datum/hallucination/oh_yeah) for(var/mob/living/carbon/C in GLOB.alive_mob_list) + if (HAS_TRAIT(C,TRAIT_EXEMPT_HEALTH_EVENTS)) + continue new picked_hallucination(C, TRUE) \ No newline at end of file diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm index 901337cd52..8ee943beb9 100644 --- a/code/modules/events/spontaneous_appendicitis.dm +++ b/code/modules/events/spontaneous_appendicitis.dm @@ -15,6 +15,8 @@ continue if(H.stat == DEAD) continue + if (HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS)) + continue if(!H.getorgan(/obj/item/organ/appendix)) //Don't give the disease to some who lacks it, only for it to be auto-cured continue if(!(MOB_ORGANIC in H.mob_biotypes)) //biotype sleeper bugs strike again, once again making appendicitis pick a target that can't take it diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 67beb393f0..b33be2fa02 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -132,14 +132,10 @@ transfer_fingerprints_to(B) qdel(src) - - - //////////////////////////////////////////////////////////////////////////////// /// Drinks. END //////////////////////////////////////////////////////////////////////////////// - /obj/item/reagent_containers/food/drinks/trophy name = "pewter cup" desc = "Everyone gets a trophy." @@ -178,7 +174,6 @@ materials = list(MAT_SILVER=800) volume = 100 - /obj/item/reagent_containers/food/drinks/trophy/bronze_cup name = "bronze cup" desc = "At least you ranked!" @@ -190,7 +185,7 @@ materials = list(MAT_METAL=400) volume = 25 -///////////////////////////////////////////////Drinks +///////////////////////////////////////////////Drinks///////////////////////////////////////// //Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly // rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50. // Formatting is the same as food. @@ -203,6 +198,7 @@ spillable = TRUE resistance_flags = FREEZE_PROOF isGlass = FALSE + foodtype = BREAKFAST //Used by MREs /obj/item/reagent_containers/food/drinks/coffee/type2 @@ -211,7 +207,6 @@ icon = 'icons/obj/food/containers.dmi' icon_state = "condi_cornoil" - /obj/item/reagent_containers/food/drinks/ice name = "ice cup" desc = "Careful, cold ice, do not chew." @@ -243,10 +238,8 @@ desc = "Made in Space South America." list_reagents = list("hot_coco" = 30, "sugar" = 5) foodtype = SUGAR - resistance_flags = FREEZE_PROOF - /obj/item/reagent_containers/food/drinks/dry_ramen name = "cup ramen" desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years." @@ -325,27 +318,27 @@ icon_state = "orangebox" name = "orange juice box" desc = "A great source of vitamins. Stay healthy!" - foodtype = FRUIT + foodtype = FRUIT | BREAKFAST if("milk") icon_state = "milkbox" name = "carton of milk" desc = "An excellent source of calcium for growing space explorers." - foodtype = DAIRY + foodtype = DAIRY | BREAKFAST if("applejuice") icon_state = "juicebox" name = "apple juice box" desc = "Sweet apple juice. Don't be late for school!" - foodtype = FRUIT + foodtype = FRUIT | BREAKFAST if("grapejuice") icon_state = "grapebox" name = "grape juice box" desc = "Tasty grape juice in a fun little container. Non-alcoholic!" - foodtype = FRUIT + foodtype = FRUIT | BREAKFAST if("chocolate_milk") icon_state = "chocolatebox" name = "carton of chocolate milk" desc = "Milk for cool kids!" - foodtype = SUGAR + foodtype = SUGAR | BREAKFAST if("eggnog") icon_state = "nog2" name = "carton of eggnog" @@ -357,8 +350,7 @@ desc = "A small carton, intended for holding drinks." - -//////////////////////////drinkingglass and shaker// +//////////////////////////drinkingglass and shaker///////////////////////////////////////////////////////////////////////////////////// //Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink // itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass // icon states. @@ -399,8 +391,8 @@ volume = 30 spillable = TRUE -//////////////////////////soda_cans// -//These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm +//////////////////////////soda_cans//////////////////////////////////////////////////// +//These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm// /obj/item/reagent_containers/food/drinks/soda_cans name = "soda can" @@ -426,7 +418,6 @@ qdel(src) ..() - /obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user) if(!is_drainable()) to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh @@ -514,6 +505,13 @@ list_reagents = list("shamblers" = 30) foodtype = SUGAR | JUNKFOOD +/obj/item/reagent_containers/food/drinks/soda_cans/buzz_fuzz + name = "Buzz Fuzz" + desc = "The sister drink of Shambler's Juice! Uses real honey, making it a sweet tooth's dream drink. The slogan reads ''A Hive of Flavour'', there's also a label about how it is adddicting." + icon_state = "honeysoda_can" + list_reagents = list("buzz_fuzz" = 25, "honey" = 5) + foodtype = SUGAR | JUNKFOOD + /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull name = "Grey Bull" desc = "Grey Bull, it gives you gloves!" @@ -526,3 +524,10 @@ desc = "There is no air shortage. Do not drink." icon_state = "air" list_reagents = list("nitrogen" = 24, "oxygen" = 6) + +/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy + name = "Monkey Energy" + desc = "Unleash the ape!" + icon_state = "monkey_energy" + list_reagents = list("monkey_energy" = 50) + foodtype = SUGAR | JUNKFOOD diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 6a69721cef..271ff93b15 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -429,7 +429,7 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' isGlass = FALSE list_reagents = list("orangejuice" = 100) - foodtype = FRUIT + foodtype = FRUIT| BREAKFAST /obj/item/reagent_containers/food/drinks/bottle/cream name = "milk cream" diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 132e000893..6d3f007fd9 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -5,6 +5,9 @@ /// the parent to the exclusion list in code/__HELPERS/unsorted.dm's /// get_random_food proc. //////////////////////////////////////////////////////////////////////////////// + +#define STOP_SERVING_BREAKFAST (15 MINUTES) + /obj/item/reagent_containers/food possible_transfer_amounts = list() volume = 50 //Sets the default container amount for all food items. @@ -40,4 +43,8 @@ if(foodtype & H.dna.species.toxic_food) to_chat(H, "You don't feel so good...") H.adjust_disgust(25 + 30 * fraction) + if((foodtype & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) last_check_time = world.time + +#undef STOP_SERVING_BREAKFAST \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 1d0b626d98..7288d91f2d 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -26,6 +26,7 @@ "cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"), "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"), "mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks."), + "bbqsauce" = list("condi_bbq", "BBQ sauce", "Hand wipes not included."), "peanut_butter" = list("peanutbutter", "peanut butter jar", "A deliciously and sticky spread made from peanuts.")) var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters. @@ -299,3 +300,8 @@ name = "astrotame pack" originalname = "astrotame" list_reagents = list("astrotame" = 5) + +/obj/item/reagent_containers/food/condiment/pack/bbqsauce + name = "bbq sauce pack" + originalname = "bbq sauce" + list_reagents = list("bbqsauce" = 10) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 8724841643..239273e421 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -55,7 +55,7 @@ mix_filling_color(S) S.reagents.trans_to(src,min(S.reagents.total_volume, 15)) //limit of 15, we don't want our custom food to be completely filled by just one ingredient with large reagent volume. foodtype |= S.foodtype - update_overlays(S) + update_snack_overlays(S) to_chat(user, "You add the [I.name] to the [name].") update_name(S) else @@ -103,7 +103,7 @@ rgbcolor[4] = (customcolor[4]+ingcolor[4])/2 filling_color = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4]) -/obj/item/reagent_containers/food/snacks/customizable/update_overlays(obj/item/reagent_containers/food/snacks/S) +/obj/item/reagent_containers/food/snacks/customizable/update_snack_overlays(obj/item/reagent_containers/food/snacks/S) var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00") @@ -139,7 +139,7 @@ /obj/item/reagent_containers/food/snacks/customizable/initialize_slice(obj/item/reagent_containers/food/snacks/slice, reagents_per_slice) ..() slice.filling_color = filling_color - slice.update_overlays(src) + slice.update_snack_overlays(src) /obj/item/reagent_containers/food/snacks/customizable/Destroy() diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index b8a63afb7f..97e8423e78 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -52,6 +52,8 @@ All foods are distributed among various categories. Use common sense. var/list/bonus_reagents //the amount of reagents (usually nutriment and vitamin) added to crafted/cooked snacks, on top of the ingredients reagents. var/customfoodfilling = 1 // whether it can be used as filling in custom food var/list/tastes // for example list("crisps" = 2, "salt" = 1) + var/dunkable = FALSE // for dunkable food, make true + var/dunk_amount = 10 // how much reagent is transferred per dunk //Placeholder for effect that trigger on eating that aren't tied to reagents. @@ -267,7 +269,7 @@ All foods are distributed among various categories. Use common sense. trash = null return -/obj/item/reagent_containers/food/snacks/proc/update_overlays(obj/item/reagent_containers/food/snacks/S) +/obj/item/reagent_containers/food/snacks/proc/update_snack_overlays(obj/item/reagent_containers/food/snacks/S) cut_overlays() var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") @@ -328,6 +330,24 @@ All foods are distributed among various categories. Use common sense. M.emote("me", EMOTE_VISIBLE, "[sattisfaction_text]") qdel(src) +//////////////////////////////////////////Dunking/////////////////////////////////////////// + +/obj/item/reagent_containers/food/snacks/afterattack(obj/item/reagent_containers/M, mob/user, proximity) + . = ..() + if(!dunkable || !proximity) + return + if(istype(M, /obj/item/reagent_containers/glass) || istype(M, /obj/item/reagent_containers/food/drinks)) //you can dunk dunkable snacks into beakers or drinks + if(!M.is_drainable()) + to_chat(user, "[M] is unable to be dunked in!") + return + if(M.reagents.trans_to(src, dunk_amount)) //if reagents were transfered, show the message + to_chat(user, "You dunk the [M].") + return + if(!M.reagents.total_volume) + to_chat(user, "[M] is empty!") + else + to_chat(user, "[src] is full!") + // //////////////////////////////////////////////Store//////////////////////////////////////// /// All the food items that can store an item inside itself, like bread or cake. /obj/item/reagent_containers/food/snacks/store diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index ea573a2cf0..8f02cd81b4 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -57,6 +57,33 @@ else if(subjectjob) S.name = "[subjectjob] meatsteak" +/obj/item/reagent_containers/food/snacks/meat/rawcrab + name = "raw crab meat" + desc = "A pile of raw crab meat." + icon_state = "crabmeatraw" + cooked_type = /obj/item/reagent_containers/food/snacks/meat/crab + bitesize = 3 + list_reagents = list("nutriment" = 1, "cooking_oil" = 3) + filling_color = "#EAD079" + tastes = list("raw crab" = 1) + foodtype = RAW | MEAT + +/obj/item/reagent_containers/food/snacks/meat/crab + name = "crab meat" + desc = "Some deliciously cooked crab meat." + icon_state = "crabmeat" + list_reagents = list("nutriment" = 2) + bonus_reagents = list("nutriment" = 3, "vitamin" = 2, "cooking_oil" = 2) + filling_color = "#DFB73A" + tastes = list("crab" = 1) + foodtype = MEAT + +/obj/item/reagent_containers/food/snacks/meat/slab/chicken + name = "chicken meat" + desc = "A slab of raw chicken. Remember to wash your hands!" + cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/chicken + slice_path = /obj/item/reagent_containers/food/snacks/meat/rawcutlet/chicken + tastes = list("chicken" = 1) /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime icon_state = "slimemeat" @@ -132,6 +159,28 @@ tastes = list("brains" = 1, "meat" = 1) foodtype = RAW | MEAT | TOXIC +/obj/item/reagent_containers/food/snacks/carpmeat/aquatic + name = "fillet" + desc = "A fillet of one of the local water dwelling species." + +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc + icon_state = "ipcmeat" + desc = "Gross robot meat." + filling_color = "#000000" + tastes = list("metal" = 1) + +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian + desc = "Tastes like chicken, that's because it is!" + icon_state = "birdmeat" + filling_color = "#BF896B" + tastes = list("chicken" = 1) + +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal + desc = "Tastes sweet... reminds you vaguely of chicken." + filling_color = "#6B8E23" + tastes = list("brains" = 1, "meat" = 1) + + ////////////////////////////////////// OTHER MEATS //////////////////////////////////////////////////////// @@ -183,7 +232,6 @@ tastes = list("meat" = 1, "salmon" = 1) foodtype = RAW | MEAT - /obj/item/reagent_containers/food/snacks/meat/slab/xeno name = "xeno meat" desc = "A slab of meat." @@ -207,7 +255,6 @@ tastes = list("cobwebs" = 1) foodtype = RAW | MEAT | TOXIC - /obj/item/reagent_containers/food/snacks/meat/slab/goliath name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." @@ -255,7 +302,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1, "cooking_oil" = 2) filling_color = "#854817" tastes = list("bacon" = 1) - foodtype = MEAT + foodtype = MEAT | BREAKFAST /obj/item/reagent_containers/food/snacks/meat/slab/gondola name = "gondola meat" @@ -281,6 +328,10 @@ foodtype = MEAT tastes = list("meat" = 1) +/obj/item/reagent_containers/food/snacks/meat/steak/chicken + name = "chicken steak" //Can you have chicken steaks? Maybe this should be renamed once it gets new sprites. + tastes = list("chicken" = 1) + /obj/item/reagent_containers/food/snacks/meat/steak/plain foodtype = MEAT @@ -288,6 +339,10 @@ tastes = list("tender meat" = 1) foodtype = MEAT | GROSS +/obj/item/reagent_containers/food/snacks/meat/steak/penguin + name = "penguin steak" + tastes = list("beef" = 1, "cod fish" = 1) + /obj/item/reagent_containers/food/snacks/meat/steak/killertomato name = "killer tomato steak" tastes = list("tomato" = 1) @@ -354,6 +409,11 @@ else if(subjectjob) S.name = "[subjectjob] [initial(S.name)]" +/obj/item/reagent_containers/food/snacks/meat/rawcutlet/chicken + name = "raw chicken cutlet" + cooked_type = /obj/item/reagent_containers/food/snacks/meat/cutlet/chicken + tastes = list("chicken" = 1) + /obj/item/reagent_containers/food/snacks/meat/rawcutlet/killertomato name = "raw killer tomato cutlet" cooked_type = /obj/item/reagent_containers/food/snacks/meat/cutlet/killertomato @@ -419,3 +479,11 @@ /obj/item/reagent_containers/food/snacks/meat/cutlet/gondola name = "gondola cutlet" tastes = list("meat" = 1, "tranquility" = 1) + +/obj/item/reagent_containers/food/snacks/meat/cutlet/penguin + name = "penguin cutlet" + tastes = list("beef" = 1, "cod fish" = 1) + +/obj/item/reagent_containers/food/snacks/meat/cutlet/chicken + name = "chicken cutlet" + tastes = list("chicken" = 1) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 0f11fc8ed2..628b883e73 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -5,7 +5,7 @@ slices_num = 5 tastes = list("bread" = 10) foodtype = GRAIN - + dunkable = TRUE /obj/item/reagent_containers/food/snacks/breadslice icon = 'icons/obj/food/burgerbread.dmi' @@ -16,6 +16,7 @@ slot_flags = ITEM_SLOT_HEAD customfoodfilling = 0 //to avoid infinite bread-ception foodtype = GRAIN + dunkable = TRUE /obj/item/reagent_containers/food/snacks/store/bread/plain name = "bread" @@ -270,6 +271,7 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( list_reagents = list("nutriment" = 4) bonus_reagents = list("nutriment" = 1, "vitamin" = 1) tastes = list("butter" = 1, "toast" = 1) + foodtype = GRAIN | BREAKFAST /obj/item/reagent_containers/food/snacks/butterbiscuit name = "butter biscuit" @@ -280,6 +282,7 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( list_reagents = list("nutriment" = 5) bonus_reagents = list("nutriment" = 1, "vitamin" = 1) tastes = list("butter" = 1, "biscuit" = 1) + foodtype = GRAIN | BREAKFAST /obj/item/reagent_containers/food/snacks/butterdog name = "butterdog" diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm index 814875d2da..8b6d6212f1 100644 --- a/code/modules/food_and_drinks/food/snacks_burgers.dm +++ b/code/modules/food_and_drinks/food/snacks_burgers.dm @@ -134,13 +134,54 @@ tastes = list("bun" = 4, "brains" = 2) foodtype = GRAIN | MEAT | GROSS +////////////////////////////////////////////////////////////////////////////////////////////////////////////// /obj/item/reagent_containers/food/snacks/burger/ghost name = "ghost burger" desc = "Too Spooky!" - alpha = 125 + icon_state = "ghostburger" bonus_reagents = list("nutriment" = 5, "vitamin" = 12) tastes = list("bun" = 4, "ectoplasm" = 2) foodtype = GRAIN + alpha = 170 + verb_say = "moans" + verb_yell = "wails" + +/obj/item/reagent_containers/food/snacks/burger/ghost/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/reagent_containers/food/snacks/burger/ghost/process() + if(!isturf(loc)) //no floating out of bags + return + var/paranormal_activity = rand(100) + switch(paranormal_activity) + if(97 to 100) + audible_message("[src] rattles a length of chain.") + playsound(loc,'sound/spookoween/chain_rattling.ogg', 300, TRUE) + if(91 to 96) + say(pick("OoOoOoo.", "OoooOOooOoo!!")) + if(84 to 90) + dir = pick(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) + step(src, dir) + if(71 to 83) + step(src, dir) + if(65 to 70) + var/obj/machinery/light/L = locate(/obj/machinery/light) in view(4, src) + if(L) + L.flicker() + if(62 to 64) + playsound(loc,pick('sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) + if(61) + visible_message("[src] spews out a glob of ectoplasm!") + new /obj/effect/decal/cleanable/greenglow/ecto(loc) + playsound(loc,'sound/effects/splat.ogg', 200, TRUE) + + //If i was less lazy i would make the burger forcefeed itself to a nearby mob here. + +/obj/item/reagent_containers/food/snacks/burger/ghost/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() +////////////////////////////////////////////////////////////////////////////////////////////////////////// /obj/item/reagent_containers/food/snacks/burger/red name = "red burger" @@ -281,3 +322,49 @@ bonus_reagents = list("nutriment" = 8, "vitamin" = 1) tastes = list("bun" = 4, "bacon" = 2) foodtype = GRAIN | MEAT + +/obj/item/reagent_containers/food/snacks/burger/soylent + name = "soylent burger" + desc = "A eco-friendly burger made using upcycled low value biomass." + icon_state = "soylentburger" + bonus_reagents = list("nutriment" = 5, "vitamin" = 3) + tastes = list("bun" = 2, "assistant" = 4) + foodtype = GRAIN | MEAT | DAIRY + +/obj/item/reagent_containers/food/snacks/burger/rib + name = "mcrib" + desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it." + icon_state = "mcrib" + bonus_reagents = list("bbqsauce" = 5, "vitamin" = 3) + tastes = list("bun" = 2, "pork patty" = 4) + foodtype = GRAIN | MEAT + +/obj/item/reagent_containers/food/snacks/burger/mcguffin + name = "mcguffin" + desc = "A cheap and greasy imitation of an eggs benedict." + icon_state = "mcguffin" + tastes = list("muffin" = 2, "bacon" = 3) + bonus_reagents = list("eggyolk" = 3, "nutriment" = 1) + foodtype = GRAIN | MEAT | BREAKFAST + +/obj/item/reagent_containers/food/snacks/burger/chicken + name = "chicken sandwich" //Apparently the proud people of Americlapstan object to this thing being called a burger. Apparently McDonald's just calls it a burger in Europe as to not scare and confuse us. + desc = "A delicious chicken sandwich, it is said the proceeds from this treat helps criminalize homosexuality on the space frontier." + icon_state = "chickenburger" + tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1) + bonus_reagents = list("mayonnaise" = 3, "cooking_oil" = 2, "nutriment" = 2) + foodtype = GRAIN | MEAT | FRIED + +/obj/item/reagent_containers/food/snacks/burger/cheese + name = "cheese burger" + desc = "This noble burger stands proudly clad in golden cheese." + icon_state = "cheeseburger" + tastes = list("bun" = 2, "beef patty" = 4, "cheese" = 3) + bonus_reagents = list("nutriment" = 1) + foodtype = GRAIN | MEAT | DAIRY + +/obj/item/reagent_containers/food/snacks/burger/cheese/Initialize() + . = ..() + if(prob(33)) + icon_state = "cheeseburgeralt" + diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm index 7dadd2b12e..dd4dad4d9b 100644 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ b/code/modules/food_and_drinks/food/snacks_cake.dm @@ -379,3 +379,21 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake filling_color = "#00FFFF" tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10) foodtype = GRAIN | SUGAR | DAIRY + +/obj/item/reagent_containers/food/snacks/store/cake/trumpet + name = "spaceman's cake" + desc = "A spaceman's trumpet frosted cake." + icon_state = "trumpetcake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/trumpet + bonus_reagents = list("polypyr" = 15, "cream" = 5, "vitamin" = 5, "berryjuice" = 5) + filling_color = "#7A3D80" + tastes = list("cake" = 4, "violets" = 2, "jam" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/reagent_containers/food/snacks/cakeslice/trumpet + name = "spaceman's cake" + desc = "A spaceman's trumpet frosted cake." + icon_state = "trumpetcakeslice" + filling_color = "#7A3D80" + tastes = list("cake" = 4, "violets" = 2, "jam" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm index 510783479e..0d51db04ce 100644 --- a/code/modules/food_and_drinks/food/snacks_egg.dm +++ b/code/modules/food_and_drinks/food/snacks_egg.dm @@ -94,7 +94,7 @@ filling_color = "#FFFFF0" list_reagents = list("nutriment" = 3) tastes = list("egg" = 4, "salt" = 1, "pepper" = 1) - foodtype = MEAT | FRIED + foodtype = MEAT | FRIED | BREAKFAST /obj/item/reagent_containers/food/snacks/boiledegg name = "boiled egg" @@ -104,7 +104,7 @@ filling_color = "#FFFFF0" list_reagents = list("nutriment" = 2, "vitamin" = 1) tastes = list("egg" = 1) - foodtype = MEAT + foodtype = MEAT | BREAKFAST /obj/item/reagent_containers/food/snacks/omelette //FUCK THIS name = "omelette du fromage" @@ -116,7 +116,7 @@ bitesize = 1 w_class = WEIGHT_CLASS_NORMAL tastes = list("egg" = 1, "cheese" = 1) - foodtype = MEAT + foodtype = MEAT | BREAKFAST /obj/item/reagent_containers/food/snacks/omelette/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/kitchen/fork)) @@ -145,5 +145,4 @@ w_class = WEIGHT_CLASS_NORMAL list_reagents = list("nutriment" = 6, "vitamin" = 4) tastes = list("egg" = 1, "bacon" = 1, "bun" = 1) - - foodtype = MEAT + foodtype = MEAT | BREAKFAST diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm index 3988909b30..fb7bcf33b4 100644 --- a/code/modules/food_and_drinks/food/snacks_frozen.dm +++ b/code/modules/food_and_drinks/food/snacks_frozen.dm @@ -81,16 +81,15 @@ filling_color = "#87CEFA" tastes = list("blue cherries" = 2, "ice cream" = 2) foodtype = FRUIT | DAIRY - ///////////// //SNOWCONES// ///////////// /obj/item/reagent_containers/food/snacks/snowcones //We use this as a base for all other snowcones - name = "flaverless snowcone" - desc = "Its just harden water slivers. Still fun to chew on." + name = "flavorless snowcone" + desc = "It's just shaved ice. Still fun to chew on." icon = 'icons/obj/food/snowcones.dmi' - icon_state = "flaverless_sc" + icon_state = "flavorless_sc" trash = /obj/item/reagent_containers/food/drinks/sillycup //We dont eat paper cups bonus_reagents = list("water" = 10) //Base line will allways give water list_reagents = list("water" = 1) // We dont get food for water/juices @@ -99,106 +98,106 @@ foodtype = SUGAR //We use SUGAR as a base line to act in as junkfood, other wise we use fruit /obj/item/reagent_containers/food/snacks/snowcones/lime - name = "lime flavored snowcone" - desc = "A lime flavord snowball in a paper cup." + name = "lime snowcone" + desc = "Lime syrup drizzled over a snowball in a paper cup." icon_state = "lime_sc" list_reagents = list("nutriment" = 1, "limejuice" = 5) tastes = list("ice" = 1, "water" = 1, "limes" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/lemon - name = "lemon flavored snowcone" - desc = "A lemon flavord snowball in a paper cup." + name = "lemon snowcone" + desc = "Lemon syrup drizzled over a snowball in a paper cup." icon_state = "lemon_sc" list_reagents = list("nutriment" = 1, "lemonjuice" = 5) tastes = list("ice" = 1, "water" = 1, "lemons" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/apple - name = "apple flavored snowcone" - desc = "A apple flavord snowball in a paper cup." - icon_state = "blue_sc" + name = "apple snowcone" + desc = "Apple syrup drizzled over a snowball in a paper cup." + icon_state = "amber_sc" list_reagents = list("nutriment" = 1, "applejuice" = 5) tastes = list("ice" = 1, "water" = 1, "apples" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/grape - name = "grape flavored snowcone" - desc = "A grape flavord snowball in a paper cup." + name = "grape snowcone" + desc = "Grape syrup drizzled over a snowball in a paper cup." icon_state = "grape_sc" - list_reagents = list("nutriment" = 1, "berryjuice" = 5) + list_reagents = list("nutriment" = 1, "grapejuice" = 5) tastes = list("ice" = 1, "water" = 1, "grape" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/orange - name = "orange flavored snowcone" - desc = "A orange flavor dizzled on a snowball in a paper cup." + name = "orange snowcone" + desc = "Orange syrup drizzled over a snowball in a paper cup." icon_state = "orange_sc" - list_reagents = list("nutriment" = 1, "orangejuice" = 10) - tastes = list("ice" = 1, "water" = 1, "berries" = 5) + list_reagents = list("nutriment" = 1, "orangejuice" = 5) + tastes = list("ice" = 1, "water" = 1, "orange" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/blue - name = "bluecherry flavored snowcone" - desc = "A bluecharry flavord snowball in a paper cup, how rare!" - icon_state = "red_sc" + name = "bluecherry snowcone" + desc = "Bluecherry syrup drizzled over a snowball in a paper cup, how rare!" + icon_state = "blue_sc" list_reagents = list("nutriment" = 1, "bluecherryjelly" = 5) - tastes = list("ice" = 1, "water" = 1, "blue" = 5) + tastes = list("ice" = 1, "water" = 1, "blue" = 5, "cherries" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/red - name = "cherry flavored snowcone" - desc = "A cherry flavord snowball in a paper cup." - icon_state = "blue_sc" + name = "cherry snowcone" + desc = "Cherry syrup drizzled over a snowball in a paper cup." + icon_state = "red_sc" list_reagents = list("nutriment" = 1, "cherryjelly" = 5) - tastes = list("ice" = 1, "water" = 1, "red" = 5) + tastes = list("ice" = 1, "water" = 1, "red" = 5, "cherries" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/kiwi - name = "kiwi flavored snowcone" - desc = "A kiwi flavord snowball in a paper cup." + name = "kiwi snowcone" + desc = "A kiwi snowball in a paper cup." icon_state = "kiwi_sc" list_reagents = list("nutriment" = 3, "vitamin" = 6) tastes = list("ice" = 1, "space" = 3, "kiwi" = 5) foodtype = FRUIT -/obj/item/reagent_containers/food/snacks/snowcones/mix - name = "mixed berry flavored snowcone" - desc = "A mix of different flavors dizzled on a snowball in a paper cup." - icon_state = "berry_sc" - list_reagents = list("nutriment" = 1, "berryjuice" = 10) - tastes = list("ice" = 1, "water" = 1, "berries" = 5) - foodtype = FRUIT - /obj/item/reagent_containers/food/snacks/snowcones/peach - name = "peach flavored snowcone" - desc = "A peach flavord snowball in a paper cup." + name = "peach snowcone" + desc = "A peach snowball in a paper cup." icon_state = "peach_sc" list_reagents = list("nutriment" = 1, "peachjuice" = 10) tastes = list("ice" = 1, "water" = 1, " peach" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/strawberry - name = "strawberry flavored snowcone" - desc = "A strawberry flavord snowball in a paper cup." + name = "strawberry snowcone" + desc = "A strawberry snowball in a paper cup." icon_state = "blue_sc" list_reagents = list("nutriment" = 1, "berryjuice" = 10) tastes = list("ice" = 1, "water" = 1, " strawberry" = 5) foodtype = FRUIT +/obj/item/reagent_containers/food/snacks/snowcones/berry + name = "berry snowcone" + desc = "Berry syrup drizzled over a snowball in a paper cup." + icon_state = "berry_sc" + list_reagents = list("nutriment" = 1, "berryjuice" = 5) + tastes = list("ice" = 1, "water" = 1, "berries" = 5) + foodtype = FRUIT + /obj/item/reagent_containers/food/snacks/snowcones/fruitsalad - name = "mixed fruit flavored snowcone" - desc = "A mix of different flavors dizzled on a snowball in a paper cup." + name = "fruit salad snowcone" + desc = "A delightful mix of citrus syrups drizzled over a snowball in a paper cup." icon_state = "fruitsalad_sc" - list_reagents = list("nutriment" = 1, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5) - tastes = list("ice" = 1, "water" = 1, "fruits" = 25) + list_reagents = list("nutriment" = 1, "lemonjuice" = 5, "limejuice" = 5, "orangejuice" = 5) + tastes = list("ice" = 1, "water" = 1, "oranges" = 5, "limes" = 5, "lemons" = 5, "citrus" = 5, "salad" = 5) foodtype = FRUIT /obj/item/reagent_containers/food/snacks/snowcones/pineapple - name = "pineapple flavored snowcone" - desc = "A pineapple flavord snowball in a paper cup." + name = "pineapple snowcone" + desc = "Pineapple syrup drizzled over a snowball in a paper cup." icon_state = "pineapple_sc" - list_reagents = list("nutriment" = 1, "water" = 1) + list_reagents = list("nutriment" = 1, "water" = 10) tastes = list("ice" = 1, "water" = 1, "pineapples" = 5) foodtype = PINEAPPLE //Pineapple to allow all that like pineapple to enjoy @@ -207,41 +206,46 @@ desc = "..." icon_state = "mime_sc" list_reagents = list("nutriment" = 1, "nothing" = 5) - tastes = list("nothing" = 5) + tastes = list("ice" = 1, "water" = 1, "nothing" = 5) /obj/item/reagent_containers/food/snacks/snowcones/clown - name = "joke flavored snowcone" - desc = "A waterd down jokeful flavord snowball in a paper cup." + name = "clown snowcone" + desc = "Laughter drizzled over a snowball in a paper cup." icon_state = "clown_sc" list_reagents = list("nutriment" = 1, "laughter" = 5) - tastes = list("jokes" = 5, "brainfreeze" = 5, "joy" = 5) + tastes = list("ice" = 1, "water" = 1, "jokes" = 5, "brainfreeze" = 5, "joy" = 5) /obj/item/reagent_containers/food/snacks/snowcones/soda - name = "sodawater flavored snowcone" - desc = "A waterd down sodawater flavored snowcone snowball in a paper cup." + name = "space cola snowcone" + desc = "Space Cola drizzled over a snowball in a paper cup." icon_state = "soda_sc" - list_reagents = list("nutriment" = 1, "sodawater" = 5) - tastes = list("surgar" = 1, "water" = 5, "soda" = 5) - foodtype = JUNKFOOD | SUGAR + list_reagents = list("nutriment" = 1, "cola" = 5) + tastes = list("ice" = 1, "water" = 1, "cola" = 5) -/obj/item/reagent_containers/food/snacks/snowcones/pwgrmer - name = "pwergamer flavored snowcone" - desc = "A waterd down pwergamer soda flavord snowball in a paper cup." - icon_state = "pwergamer_sc" - list_reagents = list("nutriment" = 1, "laughter" = 1) - tastes = list("vaild" = 5, "salt" = 5, "wats" = 5) - foodtype = JUNKFOOD | SUGAR +/obj/item/reagent_containers/food/snacks/snowcones/spacemountainwind + name = "Space Mountain Wind snowcone" + desc = "Space Mountain Wind drizzled over a snowball in a paper cup." + icon_state = "kiwi_sc" + list_reagents = list("nutriment" = 1, "spacemountainwind" = 5) + tastes = list("ice" = 1, "water" = 1, "mountain wind" = 5) + +/obj/item/reagent_containers/food/snacks/snowcones/pwrgame + name = "pwrgame snowcone" + desc = "Pwrgame soda drizzled over a snowball in a paper cup." + icon_state = "pwrgame_sc" + list_reagents = list("nutriment" = 1, "pwr_game" = 5) + tastes = list("ice" = 1, "water" = 1, "valid" = 5, "salt" = 5, "wats" = 5) /obj/item/reagent_containers/food/snacks/snowcones/honey - name = "honey flavored snowcone" - desc = "A honey flavord snowball in a paper cup." - icon_state = "honey_sc" + name = "honey snowcone" + desc = "Honey drizzled over a snowball in a paper cup." + icon_state = "amber_sc" list_reagents = list("nutriment" = 1, "honey" = 5) - tastes = list("pollen" = 5, "sweetness" = 5, "wax" = 1) + tastes = list("ice" = 1, "water" = 1, "flowers" = 5, "sweetness" = 5, "wax" = 1) /obj/item/reagent_containers/food/snacks/snowcones/rainbow - name = "rainbow color snowcone" - desc = "A rainbow color snowball in a paper cup." + name = "rainbow snowcone" + desc = "A very colorful snowball in a paper cup." icon_state = "rainbow_sc" list_reagents = list("nutriment" = 5, "laughter" = 25) - tastes = list("sunlight" = 5, "light" = 5, "slime" = 5, "paint" = 3, "clouds" = 3) + tastes = list("ice" = 1, "water" = 1, "sunlight" = 5, "light" = 5, "slime" = 5, "paint" = 3, "clouds" = 3) diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 0b53ec8822..cf499c9d15 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -149,7 +149,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("meat" = 1) - foodtype = MEAT + foodtype = MEAT | BREAKFAST var/roasted = FALSE /obj/item/reagent_containers/food/snacks/sausage/Initialize() @@ -344,3 +344,19 @@ icon_state = "doubleratkebab" tastes = list("rat meat" = 2, "metal" = 1) bonus_reagents = list("nutriment" = 6, "vitamin" = 2) + +/obj/item/reagent_containers/food/snacks/kebab/fiesta + name = "fiesta skewer" + icon_state = "fiestaskewer" + tastes = list("tex-mex" = 3, "cumin" = 2) + bonus_reagents = list("vitamin" = 5, "capsaicin" = 3) + +/obj/item/reagent_containers/food/snacks/bbqribs + name = "bbq ribs" + desc = "BBQ ribs, slathered in a healthy coating of BBQ sauce. The least vegan thing to ever exist." + icon_state = "ribs" + w_class = WEIGHT_CLASS_NORMAL + list_reagents = list("nutriment" = 8, "vitamin" = 2, "bbqsauce" = 5) + bonus_reagents = list("nutriment" = 1, "vitamin" = 1) + tastes = list("meat" = 3, "smokey sauce" = 1) + foodtype = MEAT \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index ad0824dd79..de22537063 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -47,6 +47,7 @@ filling_color = "#A0522D" tastes = list("chocolate" = 1) foodtype = JUNKFOOD | SUGAR + dunkable = TRUE /obj/item/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" @@ -90,6 +91,7 @@ filling_color = "#FFD700" tastes = list("fries" = 3, "salt" = 1) foodtype = VEGETABLES | GRAIN | FRIED + dunkable = TRUE /obj/item/reagent_containers/food/snacks/tatortot name = "tator tot" @@ -99,6 +101,7 @@ filling_color = "FFD700" tastes = list("potato" = 3, "valids" = 1) foodtype = FRIED | VEGETABLES + dunkable = TRUE /obj/item/reagent_containers/food/snacks/soydope name = "soy dope" @@ -109,6 +112,7 @@ filling_color = "#DEB887" tastes = list("soy" = 1) foodtype = VEGETABLES + dunkable = TRUE /obj/item/reagent_containers/food/snacks/cheesyfries name = "cheesy fries" @@ -128,6 +132,7 @@ list_reagents = list("bad_food" = 30) filling_color = "#8B4513" foodtype = GROSS + dunkable = TRUE /obj/item/reagent_containers/food/snacks/carrotfries name = "carrot fries" @@ -401,7 +406,6 @@ tastes = list("death" = 2, "rock" = 1, "meat" = 1, "hot peppers" = 1) foodtype = MEAT - /obj/item/reagent_containers/food/snacks/powercrepe name = "Powercrepe" desc = "With great power, comes great crepes. It looks like a pancake filled with jelly but packs quite a punch." @@ -583,6 +587,7 @@ filling_color = "#ffdf26" tastes = list("strawberries" = 5, "chocolate" = 3) foodtype = FRUIT | SUGAR + dunkable = TRUE /obj/item/reagent_containers/food/snacks/chocolatebanana name = "Chocolate dipped banana" @@ -591,4 +596,81 @@ list_reagents = list("sugar" = 5, "nutriment" = 3, "vitamin" = 1) filling_color = "#ffdf26" tastes = list("banana" = 5, "chocolate" = 3) - foodtype = FRUIT | SUGAR \ No newline at end of file + foodtype = FRUIT | SUGAR + dunkable = TRUE + +/obj/item/reagent_containers/food/snacks/cornchips + name = "boritos corn chips" + desc = "Triangular corn chips. They do seem a bit bland but would probably go well with some kind of dipping sauce." + icon_state = "boritos" + trash = /obj/item/trash/boritos + bitesize = 2 + list_reagents = list("nutriment" = 3, "cooking_oil" = 2, "sodiumchloride" = 3) + filling_color = "#ECA735" + tastes = list("fried corn" = 1) + foodtype = JUNKFOOD | FRIED + dunkable = TRUE + +/obj/item/reagent_containers/food/snacks/marshmallow + name = "marshmallow" + desc = "A marshmallow filled with fluffy marshmallow fluff." + icon_state = "marshmallow" + list_reagents = list("sugar" = 5, "nutriment" = 2) + filling_color = "#fafafa" + w_class = WEIGHT_CLASS_TINY + tastes = list("marshmallow" = 2) + foodtype = SUGAR | JUNKFOOD + var/burned = 0 + +/obj/item/reagent_containers/food/snacks/marshmallow/attackby(obj/item/I, mob/user) + switch (I.get_temperature()) + if (355 to 1500) + if (prob(30)) + burnmallow() + if (1500 to 2000) + if (prob(50)) + burnmallow() + else + burnmallow(TRUE) + if (2000 to 3000) + if (prob(10)) + burnmallow() + else + burnmallow(TRUE) + if (3000 to INFINITY) + burnmallow(TRUE) + return ..() + +/obj/item/reagent_containers/food/snacks/marshmallow/proc/burnmallow(reallyburned = FALSE) + if (reallyburned && burned == 1) + icon_state = "marshmallowrburned" + else if (burned == 0) + icon_state = "marshmallowburned" + +/obj/item/reagent_containers/food/snacks/marshmallow/examine(mob/user) + . = ..() + if (burned == 2) + . += "It looks very burned." + if (burned == 1) + . += "It looks just right for eating!" + +/obj/item/reagent_containers/food/snacks/marshmallow/fire_act(temp,volume) + switch (temp) + if (355 to 1500) + if (prob(30)) + burnmallow() + if (1500 to 2000) + if (prob(50)) + burnmallow() + else + burnmallow(TRUE) + if (2000 to 3000) + if (prob(10)) + burnmallow() + else + burnmallow(TRUE) + if (3000 to 7000) + burnmallow(TRUE) + if (7000 to INFINITY) + burn() + ..() diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index baf8e150c5..de5d577193 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -5,28 +5,31 @@ /obj/item/reagent_containers/food/snacks/donut name = "donut" desc = "Goes great with robust coffee." - icon_state = "donut1" + icon = 'icons/obj/food/donut.dmi' + icon_state = "donut" bitesize = 5 bonus_reagents = list("sugar" = 1) list_reagents = list("nutriment" = 3, "sprinkles" = 1, "sugar" = 2) filling_color = "#D2691E" tastes = list("donut" = 1) - foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR - var/frosted_icon = "donut2" - var/is_frosted = FALSE + foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR | BREAKFAST + dunkable = TRUE + var/decorated_icon = "donut_homer" + var/is_decorated = FALSE var/extra_reagent = null + var/decorated_adjective = "sprinkled" /obj/item/reagent_containers/food/snacks/donut/Initialize() . = ..() if(prob(30)) - frost_donut() + decorate_donut() -/obj/item/reagent_containers/food/snacks/donut/proc/frost_donut() - if(is_frosted || !frosted_icon) +/obj/item/reagent_containers/food/snacks/donut/proc/decorate_donut() + if(is_decorated || !decorated_icon) return - is_frosted = TRUE - name = "frosted [name]" - icon_state = frosted_icon //delish~! + is_decorated = TRUE + name = "[decorated_adjective] [name]" + icon_state = decorated_icon //delish~! reagents.add_reagent("sprinkles", 1) filling_color = "#FF69B4" return TRUE @@ -43,64 +46,283 @@ return ..() +/obj/item/reagent_containers/food/snacks/donut/plain + //Use this donut ingame + /obj/item/reagent_containers/food/snacks/donut/chaos name = "chaos donut" desc = "Like life, it never quite tastes the same." + icon_state = "donut_chaos" bitesize = 10 tastes = list("donut" = 3, "chaos" = 1) /obj/item/reagent_containers/food/snacks/donut/chaos/Initialize() . = ..() extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "cocoa", "slimejelly", "banana", "berryjuice", "omnizine") - reagents.add_reagent("[extra_reagent]", 3) + reagents.add_reagent(extra_reagent, 3) + +/obj/item/reagent_containers/food/snacks/donut/meat + name = "Meat Donut" + desc = "Tastes as gross as it looks." + icon_state = "donut_meat" + bonus_reagents = list("ketchup" = 1) + list_reagents = list("nutriment" = 3, "ketchup" = 2) + tastes = list("meat" = 1) + foodtype = JUNKFOOD | MEAT | GROSS | FRIED | BREAKFAST + +/obj/item/reagent_containers/food/snacks/donut/berry + name = "pink donut" + desc = "Goes great with a soy latte." + icon_state = "donut_pink" + bonus_reagents = list("berryjuice" = 3, "sprinkles" = 1) //Extra sprinkles to reward frosting + filling_color = "#E57d9A" + decorated_icon = "donut_homer" + +/obj/item/reagent_containers/food/snacks/donut/trumpet + name = "spaceman's donut" + desc = "Goes great with a cold beaker of malk." + icon_state = "donut_purple" + bonus_reagents = list("polypyr" = 3, "sprinkles" = 1) + tastes = list("donut" = 3, "violets" = 1) + is_decorated = TRUE + filling_color = "#8739BF" + +/obj/item/reagent_containers/food/snacks/donut/apple + name = "apple donut" + desc = "Goes great with a shot of cinnamon schnapps." + icon_state = "donut_green" + bonus_reagents = list("applejuice" = 3, "sprinkles" = 1) + tastes = list("donut" = 3, "green apples" = 1) + is_decorated = TRUE + filling_color = "#6ABE30" + +/obj/item/reagent_containers/food/snacks/donut/caramel + name = "caramel donut" + desc = "Goes great with a mug of hot coco." + icon_state = "donut_beige" + bonus_reagents = list("caramel" = 3, "sprinkles" = 1) + tastes = list("donut" = 3, "buttery sweetness" = 1) + is_decorated = TRUE + filling_color = "#D4AD5B" + +/obj/item/reagent_containers/food/snacks/donut/choco + name = "chocolate donut" + desc = "Goes great with a glass of warm milk." + icon_state = "donut_choc" + bonus_reagents = list("hot_coco" = 3, "sprinkles" = 1) //the coco reagent is just bitter. + tastes = list("donut" = 4, "bitterness" = 1) + decorated_icon = "donut_choc_sprinkles" + filling_color = "#4F230D" + +/obj/item/reagent_containers/food/snacks/donut/blumpkin + name = "blumpkin donut" + desc = "Goes great with a mug of soothing drunken blumpkin." + icon_state = "donut_blue" + bonus_reagents = list("blumpkinjuice" = 3, "sprinkles" = 1) + tastes = list("donut" = 2, "blumpkin" = 1) + is_decorated = TRUE + filling_color = "#2788C4" + +/obj/item/reagent_containers/food/snacks/donut/bungo + name = "bungo donut" + desc = "Goes great with a mason jar of hippie's delight." + icon_state = "donut_yellow" + bonus_reagents = list("bungojuice" = 3, "sprinkles" = 1) + tastes = list("donut" = 3, "tropical sweetness" = 1) + is_decorated = TRUE + filling_color = "#DEC128" + +/obj/item/reagent_containers/food/snacks/donut/matcha + name = "matcha donut" + desc = "Goes great with a cup of tea." + icon_state = "donut_olive" + bonus_reagents = list("teapowder = 3", "sprinkles" = 1) + tastes = list("donut" = 3, "matcha" = 1) + is_decorated = TRUE + filling_color = "#879630" + +//////////////////////JELLY DONUTS///////////////////////// /obj/item/reagent_containers/food/snacks/donut/jelly name = "jelly donut" desc = "You jelly?" - icon_state = "jdonut1" - frosted_icon = "jdonut2" + icon_state = "jelly" + decorated_icon = "jelly_homer" bonus_reagents = list("sugar" = 1, "vitamin" = 1) extra_reagent = "berryjuice" tastes = list("jelly" = 1, "donut" = 3) - foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR + foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR | BREAKFAST /obj/item/reagent_containers/food/snacks/donut/jelly/Initialize() . = ..() if(extra_reagent) reagents.add_reagent("[extra_reagent]", 3) +/obj/item/reagent_containers/food/snacks/donut/jelly/plain //use this ingame to avoid inheritance related crafting issues. + +/obj/item/reagent_containers/food/snacks/donut/jelly/berry + name = "pink jelly donut" + desc = "Goes great with a soy latte." + icon_state = "jelly_pink" + bonus_reagents = list("berryjuice" = 3, "sprinkles" = 1, "vitamin" = 1) //Extra sprinkles to reward frosting. + filling_color = "#E57d9A" + decorated_icon = "jelly_homer" + +/obj/item/reagent_containers/food/snacks/donut/jelly/trumpet + name = "spaceman's jelly donut" + desc = "Goes great with a cold beaker of malk." + icon_state = "jelly_purple" + bonus_reagents = list("polypyr" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "violets" = 1) + is_decorated = TRUE + filling_color = "#8739BF" + +/obj/item/reagent_containers/food/snacks/donut/jelly/apple + name = "apple jelly donut" + desc = "Goes great with a shot of cinnamon schnapps." + icon_state = "jelly_green" + bonus_reagents = list("applejuice" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "green apples" = 1) + is_decorated = TRUE + filling_color = "#6ABE30" + +/obj/item/reagent_containers/food/snacks/donut/jelly/caramel + name = "caramel jelly donut" + desc = "Goes great with a mug of hot coco." + icon_state = "jelly_beige" + bonus_reagents = list("caramel" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "buttery sweetness" = 1) + is_decorated = TRUE + filling_color = "#D4AD5B" + +/obj/item/reagent_containers/food/snacks/donut/jelly/choco + name = "chocolate jelly donut" + desc = "Goes great with a glass of warm milk." + icon_state = "jelly_choc" + bonus_reagents = list("hot_coco" = 3, "sprinkles" = 1, "vitamin" = 1) //the coco reagent is just bitter. + tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1) + decorated_icon = "jelly_choc_sprinkles" + filling_color = "#4F230D" + +/obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin + name = "blumpkin jelly donut" + desc = "Goes great with a mug of soothing drunken blumpkin." + icon_state = "jelly_blue" + bonus_reagents = list("blumpkinjuice" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 2, "blumpkin" = 1) + is_decorated = TRUE + filling_color = "#2788C4" + +/obj/item/reagent_containers/food/snacks/donut/jelly/bungo + name = "bungo jelly donut" + desc = "Goes great with a mason jar of hippie's delight." + icon_state = "jelly_yellow" + bonus_reagents = list("bungojuice" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "tropical sweetness" = 1) + is_decorated = TRUE + filling_color = "#DEC128" + +/obj/item/reagent_containers/food/snacks/donut/jelly/matcha + name = "matcha jelly donut" + desc = "Goes great with a cup of tea." + icon_state = "jelly_olive" + bonus_reagents = list("teapowder" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "matcha" = 1) + is_decorated = TRUE + filling_color = "#879630" + +//////////////////////////SLIME DONUTS///////////////////////// + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly name = "jelly donut" desc = "You jelly?" - icon_state = "jdonut1" + icon_state = "jelly" extra_reagent = "slimejelly" - foodtype = JUNKFOOD | GRAIN | FRIED | TOXIC | SUGAR + foodtype = JUNKFOOD | GRAIN | FRIED | TOXIC | SUGAR | BREAKFAST -/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - extra_reagent = "cherryjelly" - foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain -/obj/item/reagent_containers/food/snacks/donut/meat - bonus_reagents = list("ketchup" = 1) - list_reagents = list("nutriment" = 3, "ketchup" = 2) - tastes = list("meat" = 1) - foodtype = JUNKFOOD | MEAT | GROSS | FRIED +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry + name = "pink jelly donut" + desc = "Goes great with a soy latte." + icon_state = "jelly_pink" + bonus_reagents = list("berryjuice" = 3, "sprinkles" = 1, "vitamin" = 1) //Extra sprinkles to reward frosting + filling_color = "#E57d9A" -/obj/item/reagent_containers/food/snacks/donut/semen - name = "\"cream\" donut" - desc = "That cream looks a little runny..." - icon_state = "donut3" +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet + name = "spaceman's jelly donut" + desc = "Goes great with a cold beaker of malk." + icon_state = "jelly_purple" + bonus_reagents = list("polypyr" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "violets" = 1) + is_decorated = TRUE + filling_color = "#8739BF" + +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple + name = "apple jelly donut" + desc = "Goes great with a shot of cinnamon schnapps." + icon_state = "jelly_green" + bonus_reagents = list("applejuice" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "green apples" = 1) + is_decorated = TRUE + filling_color = "#6ABE30" + +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel + name = "caramel jelly donut" + desc = "Goes great with a mug of hot coco." + icon_state = "jelly_beige" + bonus_reagents = list("caramel" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "buttery sweetness" = 1) + is_decorated = TRUE + filling_color = "#D4AD5B" + +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco + name = "chocolate jelly donut" + desc = "Goes great with a glass of warm milk." + icon_state = "jelly_choc" + bonus_reagents = list("hot_coco" = 3, "sprinkles" = 1, "vitamin" = 1) //the coco reagent is just bitter. + tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1) + decorated_icon = "jelly_choc_sprinkles" + filling_color = "#4F230D" + +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin + name = "blumpkin jelly donut" + desc = "Goes great with a mug of soothing drunken blumpkin." + icon_state = "jelly_blue" + bonus_reagents = list("blumpkinjuice" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 2, "blumpkin" = 1) + is_decorated = TRUE + filling_color = "#2788C4" + +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo + name = "bungo jelly donut" + desc = "Goes great with a mason jar of hippie's delight." + icon_state = "jelly_yellow" + bonus_reagents = list("bungojuice" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "tropical sweetness" = 1) + is_decorated = TRUE + filling_color = "#DEC128" + +/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha + name = "matcha jelly donut" + desc = "Goes great with a cup of tea." + icon_state = "jelly_olive" + bonus_reagents = list("teapowder" = 3, "sprinkles" = 1, "vitamin" = 1) + tastes = list("jelly" = 1, "donut" = 3, "matcha" = 1) + is_decorated = TRUE + filling_color = "#879630" + +/obj/item/reagent_containers/food/snacks/donut/glaze + name = "glazed donut" + desc = "A sugar glazed donut." + icon_state = "donut_glaze" bitesize = 10 - bonus_reagents = list("semen" = 1) - list_reagents = list("nutriment" = 3, "sugar" = 2, "semen" = 5) + bonus_reagents = list("sugar" = 3) + list_reagents = list("nutriment" = 3, "sugar" = 8) filling_color = "#FFFFFF" tastes = list("donut" = 1, "salt" = 3) foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR - ////////////////////////////////////////////MUFFINS//////////////////////////////////////////// /obj/item/reagent_containers/food/snacks/muffin @@ -111,14 +333,14 @@ list_reagents = list("nutriment" = 6) filling_color = "#F4A460" tastes = list("muffin" = 1) - foodtype = GRAIN | SUGAR + foodtype = GRAIN | SUGAR | BREAKFAST /obj/item/reagent_containers/food/snacks/muffin/berry name = "berry muffin" icon_state = "berrymuffin" desc = "A delicious and spongy little cake, with berries." tastes = list("muffin" = 3, "berry" = 1) - foodtype = GRAIN | FRUIT | SUGAR + foodtype = GRAIN | FRUIT | SUGAR | BREAKFAST /obj/item/reagent_containers/food/snacks/muffin/booberry name = "booberry muffin" @@ -126,7 +348,7 @@ alpha = 125 desc = "My stomach is a graveyard! No living being can quench my bloodthirst!" tastes = list("muffin" = 3, "spookiness" = 1) - foodtype = GRAIN | FRUIT | SUGAR + foodtype = GRAIN | FRUIT | SUGAR | BREAKFAST /obj/item/reagent_containers/food/snacks/chawanmushi name = "chawanmushi" @@ -149,7 +371,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 1) filling_color = "#D2691E" tastes = list("waffles" = 1) - foodtype = GRAIN | SUGAR + foodtype = GRAIN | SUGAR | BREAKFAST /obj/item/reagent_containers/food/snacks/soylentgreen name = "\improper Soylent Green" @@ -160,7 +382,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) filling_color = "#9ACD32" tastes = list("waffles" = 7, "people" = 1) - foodtype = GRAIN | GROSS | MEAT + foodtype = GRAIN | MEAT /obj/item/reagent_containers/food/snacks/soylenviridians name = "\improper Soylent Virdians" @@ -183,7 +405,7 @@ list_reagents = list("nutriment" = 8, "mushroomhallucinogen" = 2, "vitamin" = 2) filling_color = "#00BFFF" tastes = list("waffle" = 1, "mushrooms" = 1) - foodtype = GRAIN | VEGETABLES | TOXIC | SUGAR + foodtype = GRAIN | VEGETABLES | SUGAR | BREAKFAST ////////////////////////////////////////////OTHER//////////////////////////////////////////// @@ -196,7 +418,8 @@ list_reagents = list("nutriment" = 1) filling_color = "#F0E68C" tastes = list("cookie" = 1) - foodtype = SUGAR + foodtype = GRAIN | SUGAR + dunkable = TRUE /obj/item/reagent_containers/food/snacks/donkpocket name = "\improper Donk-pocket" @@ -213,6 +436,7 @@ desc = "The heated food of choice for the seasoned traitor." bonus_reagents = list("omnizine" = 3) list_reagents = list("nutriment" = 4, "omnizine" = 3) + cooked_type = null tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) foodtype = GRAIN @@ -315,6 +539,7 @@ filling_color = "#CD853F" tastes = list("sweetness" = 1) foodtype = GRAIN | JUNKFOOD | SUGAR + dunkable = TRUE /obj/item/reagent_containers/food/snacks/chococornet name = "chocolate cornet" @@ -335,6 +560,7 @@ filling_color = "#D2691E" tastes = list("cookie" = 2, "oat" = 1) foodtype = GRAIN + dunkable = TRUE /obj/item/reagent_containers/food/snacks/raisincookie name = "raisin cookie" @@ -345,6 +571,7 @@ filling_color = "#F0E68C" tastes = list("cookie" = 1, "raisins" = 1) foodtype = GRAIN | FRUIT + dunkable = TRUE /obj/item/reagent_containers/food/snacks/cherrycupcake name = "cherry cupcake" @@ -367,7 +594,7 @@ foodtype = GRAIN | FRUIT | SUGAR /obj/item/reagent_containers/food/snacks/strawberrycupcake - name = "Strawberry cupcake" + name = "strawberry cupcake" desc = "Strawberry inside a delicious cupcake." icon_state = "strawberrycupcake" bonus_reagents = list("nutriment" = 1, "vitamin" = 3) @@ -384,9 +611,9 @@ list_reagents = list("nutriment" = 5, "honey" = 5) filling_color = "#F2CE91" tastes = list("pastry" = 1, "sweetness" = 1) - foodtype = GRAIN + foodtype = GRAIN | SUGAR -#define PANCAKE_MAX_STACK 30 +#define PANCAKE_MAX_STACK 10 /obj/item/reagent_containers/food/snacks/pancakes name = "pancake" @@ -397,7 +624,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) filling_color = "#D2691E" tastes = list("pancakes" = 1) - foodtype = GRAIN | SUGAR + foodtype = GRAIN | SUGAR | BREAKFAST /obj/item/reagent_containers/food/snacks/pancakes/blueberry name = "blueberry pancake" @@ -465,13 +692,13 @@ to_chat(user, "You add the [I] to the [name].") P.name = initial(P.name) contents += P - update_overlays(P) + update_snack_overlays(P) if (P.contents.len) for(var/V in P.contents) P = V P.name = initial(P.name) contents += P - update_overlays(P) + update_snack_overlays(P) P = I clearlist(P.contents) return @@ -480,7 +707,7 @@ return O.attackby(I, user, params) ..() -/obj/item/reagent_containers/food/snacks/pancakes/update_overlays(obj/item/reagent_containers/food/snacks/P) +/obj/item/reagent_containers/food/snacks/pancakes/update_snack_overlays(obj/item/reagent_containers/food/snacks/P) var/mutable_appearance/pancake = mutable_appearance(icon, "[P.item_state]_[rand(1,3)]") pancake.pixel_x = rand(-1,1) pancake.pixel_y = 3 * contents.len - 1 diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm index 65ff4d2eb9..f5fcec0ac5 100644 --- a/code/modules/food_and_drinks/food/snacks_salad.dm +++ b/code/modules/food_and_drinks/food/snacks_salad.dm @@ -47,7 +47,7 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 4) list_reagents = list("nutriment" = 7, "milk" = 10, "vitamin" = 2) tastes = list("oats" = 1, "milk" = 1) - foodtype = DAIRY | GRAIN + foodtype = DAIRY | GRAIN | BREAKFAST /obj/item/reagent_containers/food/snacks/salad/fruit name = "fruit salad" @@ -55,7 +55,7 @@ icon_state = "fruitsalad" bonus_reagents = list("nutriment" = 2, "vitamin" = 4) tastes = list("fruit" = 1) - foodtype = FRUIT + foodtype = FRUIT | BREAKFAST /obj/item/reagent_containers/food/snacks/salad/jungle name = "jungle salad" @@ -64,7 +64,7 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 4) list_reagents = list("nutriment" = 7, "banana" = 5, "vitamin" = 4) tastes = list("fruit" = 1, "the jungle" = 1) - foodtype = FRUIT + foodtype = FRUIT | BREAKFAST /obj/item/reagent_containers/food/snacks/salad/citrusdelight name = "citrus delight" @@ -73,7 +73,7 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 4) list_reagents = list("nutriment" = 7, "vitamin" = 5) tastes = list("sourness" = 1, "leaves" = 1) - foodtype = FRUIT + foodtype = FRUIT | BREAKFAST /obj/item/reagent_containers/food/snacks/salad/ricebowl name = "ricebowl" @@ -91,7 +91,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) list_reagents = list("nutriment" = 5, "vitamin" = 1) tastes = list("rice" = 1) - foodtype = GRAIN + foodtype = GRAIN | BREAKFAST /obj/item/reagent_containers/food/snacks/salad/ricepudding name = "rice pudding" diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm index 5f01d3170e..47c9f02fb9 100644 --- a/code/modules/food_and_drinks/food/snacks_soup.dm +++ b/code/modules/food_and_drinks/food/snacks_soup.dm @@ -225,3 +225,22 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 6) tastes = list("beet" = 1) foodtype = VEGETABLES + +/obj/item/reagent_containers/food/snacks/soup/electron + name = "electron soup" + desc = "A gastronomic curiosity of ethereal origin. It is famed for the minature weather system formed over a properly prepared soup." + icon_state = "electronsoup" + list_reagents = list("nutriment" = 3, "liquidelectricity" = 5) + tastes = list("mushroom" = 1, "electrons" = 4, "shockingly good") + filling_color = "#CC2B52" + foodtype = VEGETABLES | TOXIC + +/obj/item/reagent_containers/food/snacks/soup/bungocurry + name = "bungo curry" + desc = "A spicy vegetable curry made with the humble bungo fruit, Exotic!" + icon_state = "bungocurry" + bonus_reagents = list("vitamin" = 11) + list_reagents = list("nutriment" = 6, "capsaicin" = 5) + tastes = list("bungo" = 2, "hot curry" = 4, "tropical sweetness" = 1) + filling_color = "#E6A625" + foodtype = VEGETABLES | FRUIT | DAIRY diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 3183b3b2b4..1bc2e4bb89 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -80,6 +80,9 @@ God bless America. I.reagents.trans_to(src, I.reagents.total_volume) qdel(I) return + if(istype(I,/obj/item/clothing/head/mob_holder)) + to_chat(user, "This does not fit in the fryer.") // TODO: Deepfrying instakills mobs, spawns a whole deep-fried mob. + return if(!reagents.has_reagent("cooking_oil")) to_chat(user, "[src] has no cooking oil to fry with!") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm new file mode 100644 index 0000000000..449da2afe3 --- /dev/null +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -0,0 +1,139 @@ +/obj/machinery/grill + name = "grill" + desc = "Just like the old days." + icon = 'icons/obj/kitchen.dmi' + icon_state = "grill_open" + density = TRUE + layer = BELOW_OBJ_LAYER + use_power = NO_POWER_USE + var/grill_fuel = 0 + var/obj/item/reagent_containers/food/grilled_item + var/grill_time = 0 + var/datum/looping_sound/grill/grill_loop + +/obj/machinery/grill/Initialize() + . = ..() + grill_loop = new(list(src), FALSE) + +/obj/machinery/grill/update_icon() + if(grilled_item) + icon_state = "grill" + else if(grill_fuel) + icon_state = "grill_on" + else + icon_state = "grill_open" + +/obj/machinery/grill/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/mineral/wood)) + var/obj/item/stack/S = I + var/stackamount = S.get_amount() + to_chat(user, "You put [stackamount] [I]s in [src].") + if(istype(I, /obj/item/stack/sheet/mineral/coal)) + grill_fuel += (500 * stackamount) + else + grill_fuel += (50 * stackamount) + S.use(stackamount) + update_icon() + return + if(I.resistance_flags & INDESTRUCTIBLE) + to_chat(user, "You don't feel it would be wise to grill [I]...") + return ..() + if(istype(I, /obj/item/reagent_containers)) + if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks)) + if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL))) + return ..() + else if(!grill_fuel) + to_chat(user, "There is not enough fuel.") + return + else if(!grilled_item && user.transferItemToLoc(I, src)) + grilled_item = I + to_chat(user, "You put the [grilled_item] on [src].") + update_icon() + grill_loop.start() + return + else + if(I.reagents.has_reagent("monkey_energy")) + grill_fuel += (20 * (I.reagents.get_reagent_amount("monkey_energy"))) + to_chat(user, "You pour the Monkey Energy in [src].") + I.reagents.remove_reagent("monkey_energy", I.reagents.get_reagent_amount("monkey_energy")) + update_icon() + return + ..() + +/obj/machinery/grill/process() + ..() + update_icon() + if(!grill_fuel) + return + else + grill_fuel -= 1 + if(prob(1)) + var/datum/effect_system/smoke_spread/bad/smoke = new + smoke.set_up(1, loc) + smoke.start() + if(grilled_item) + grill_time += 1 + grilled_item.reagents.add_reagent("char", 1) + grill_fuel -= 10 + grilled_item.AddComponent(/datum/component/sizzle) + +/obj/machinery/grill/Exited(atom/movable/AM) + if(AM == grilled_item) + finish_grill() + grilled_item = null + ..() + +/obj/machinery/grill/Destroy() + grilled_item = null + . = ..() + +/obj/machinery/grill/handle_atom_del(atom/A) + if(A == grilled_item) + grilled_item = null + . = ..() + +/obj/machinery/grill/wrench_act(mob/living/user, obj/item/I) + . = ..() + if(default_unfasten_wrench(user, I) != CANT_UNFASTEN) + return TRUE + +/obj/machinery/grill/deconstruct(disassembled = TRUE) + finish_grill() + if(!(flags_1 & NODECONSTRUCT_1)) + new /obj/item/stack/sheet/metal(loc, 5) + new /obj/item/stack/rods(loc, 5) + ..() + +/obj/machinery/grill/attack_ai(mob/user) + return + +/obj/machinery/grill/attack_hand(mob/user) + if(grilled_item) + to_chat(user, "You take out [grilled_item] from [src].") + grilled_item.forceMove(drop_location()) + update_icon() + return + return ..() + +/obj/machinery/grill/proc/finish_grill() + switch(grill_time) //no 0-9 to prevent spam + if(10 to 15) + grilled_item.name = "lightly-grilled [grilled_item.name]" + grilled_item.desc = "[grilled_item.desc] It's been lightly grilled." + if(16 to 39) + grilled_item.name = "grilled [grilled_item.name]" + grilled_item.desc = "[grilled_item.desc] It's been grilled." + grilled_item.foodtype |= FRIED + if(40 to 50) + grilled_item.name = "heavily grilled [grilled_item.name]" + grilled_item.desc = "[grilled_item.desc] It's been heavily grilled." + grilled_item.foodtype |= FRIED + if(51 to INFINITY) //grill marks reach max alpha + grilled_item.name = "Powerfully Grilled [grilled_item.name]" + grilled_item.desc = "A [grilled_item.name]. Reminds you of your deepfryer skills, wait, no, it's better!" + grilled_item.foodtype |= FRIED + grill_time = 0 + grill_loop.stop() + +/obj/machinery/grill/unwrenched + anchored = FALSE diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index d10286d21a..404f3a6061 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -76,6 +76,22 @@ required_reagents = list("corn_starch" = 1, "sacid" = 1) required_temp = 374 +/datum/chemical_reaction/caramel + name = "Caramel" + id = "caramel" + results = list("caramel" = 1) + required_reagents = list("sugar" = 1) + required_temp = 413 + mob_react = FALSE + +/datum/chemical_reaction/caramel_burned + name = "Caramel burned" + id = "caramel_burned" + results = list("carbon" = 1) + required_reagents = list("caramel" = 1) + required_temp = 483 + mob_react = FALSE + /datum/chemical_reaction/cheesewheel name = "Cheesewheel" id = "cheesewheel" @@ -161,3 +177,9 @@ new /obj/item/reagent_containers/food/snacks/salad/ricebowl(location) if(holder && holder.my_atom) qdel(holder.my_atom) + +/datum/chemical_reaction/bbqsauce + name = "BBQ Sauce" + id = "bbqsauce" + results = list("bbqsauce" = 5) + required_reagents = list("ash" = 1, "tomatojuice" = 1, "salglu_solution" = 3, "blackpepper" = 1) \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index 1da81b99ec..fbd3f57323 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -44,6 +44,10 @@ input = /obj/item/reagent_containers/food/snacks/grown/parsnip output = /obj/item/reagent_containers/food/snacks/roastparsnip +/datum/food_processor_process/tortilla + input = /obj/item/reagent_containers/food/snacks/tortilla + output = /obj/item/reagent_containers/food/snacks/cornchips + /datum/food_processor_process/mob/slime input = /mob/living/simple_animal/slime output = null diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index d7beebf461..ffa8709245 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -76,6 +76,7 @@ name = "Fish burger" reqs = list( /obj/item/reagent_containers/food/snacks/carpmeat = 1, + /obj/item/reagent_containers/food/snacks/cheesewedge = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) result = /obj/item/reagent_containers/food/snacks/burger/fish @@ -94,6 +95,7 @@ name = "Ghost burger" reqs = list( /obj/item/ectoplasm = 1, + /datum/reagent/consumable/sodiumchloride = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) result = /obj/item/reagent_containers/food/snacks/burger/ghost @@ -176,7 +178,7 @@ ) result = /obj/item/reagent_containers/food/snacks/burger/purple subcategory = CAT_BURGER - + /datum/crafting_recipe/food/blackburger name = "Black burger" reqs = list( @@ -186,7 +188,7 @@ ) result = /obj/item/reagent_containers/food/snacks/burger/black subcategory = CAT_BURGER - + /datum/crafting_recipe/food/whiteburger name = "White burger" reqs = list( @@ -218,6 +220,7 @@ name = "Big bite burger" reqs = list( /obj/item/reagent_containers/food/snacks/meat/steak/plain = 3, + /obj/item/reagent_containers/food/snacks/cheesewedge = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) result = /obj/item/reagent_containers/food/snacks/burger/bigbite @@ -231,7 +234,8 @@ /obj/item/reagent_containers/food/snacks/meat/steak/plain = 5, /obj/item/reagent_containers/food/snacks/grown/tomato = 4, /obj/item/reagent_containers/food/snacks/cheesewedge = 3, - /obj/item/reagent_containers/food/snacks/boiledegg = 2, + /obj/item/reagent_containers/food/snacks/boiledegg = 1, + /obj/item/reagent_containers/food/snacks/meat/bacon = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) @@ -260,6 +264,7 @@ name = "Five alarm burger" reqs = list( /obj/item/reagent_containers/food/snacks/grown/ghost_chili = 2, + /obj/item/reagent_containers/food/snacks/meat/steak/plain = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) result = /obj/item/reagent_containers/food/snacks/burger/fivealarm @@ -293,3 +298,53 @@ result = /obj/item/reagent_containers/food/snacks/burger/baconburger subcategory = CAT_BURGER + +/datum/crafting_recipe/food/cheeseburger + name = "Cheese Burger" + reqs = list( + /obj/item/reagent_containers/food/snacks/meat/steak/plain = 1, + /obj/item/reagent_containers/food/snacks/cheesewedge = 1, + /obj/item/reagent_containers/food/snacks/bun = 1 + ) + result = /obj/item/reagent_containers/food/snacks/burger/cheese + subcategory = CAT_BURGER + +/datum/crafting_recipe/food/soylentburger + name = "Soylent Burger" + reqs = list( + /obj/item/reagent_containers/food/snacks/soylentgreen = 1, //two full meats worth. + /obj/item/reagent_containers/food/snacks/cheesewedge = 2, + /obj/item/reagent_containers/food/snacks/bun = 1 + ) + result = /obj/item/reagent_containers/food/snacks/burger/soylent + subcategory = CAT_BURGER + +/datum/crafting_recipe/food/ribburger + name = "McRib" + reqs = list( + /obj/item/reagent_containers/food/snacks/bbqribs = 1, //The sauce is already included in the ribs + /obj/item/reagent_containers/food/snacks/onion_slice = 1, //feel free to remove if too burdensome. + /obj/item/reagent_containers/food/snacks/bun = 1 + ) + result = /obj/item/reagent_containers/food/snacks/burger/rib + subcategory = CAT_BURGER + +/datum/crafting_recipe/food/mcguffin + name = "McGuffin" + reqs = list( + /obj/item/reagent_containers/food/snacks/friedegg = 1, + /obj/item/reagent_containers/food/snacks/meat/bacon = 2, + /obj/item/reagent_containers/food/snacks/bun = 1 + ) + result = /obj/item/reagent_containers/food/snacks/burger/mcguffin + subcategory = CAT_BURGER + +/datum/crafting_recipe/food/chickenburger + name = "Chicken Sandwich" + reqs = list( + /obj/item/reagent_containers/food/snacks/meat/steak/chicken = 1, + /datum/reagent/consumable/mayonnaise = 5, + /obj/item/reagent_containers/food/snacks/bun = 1 + ) + result = /obj/item/reagent_containers/food/snacks/burger/chicken + subcategory = CAT_BURGER \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index 9c14badb23..c25cd9bed6 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -180,6 +180,17 @@ result = /obj/item/reagent_containers/food/snacks/store/cake/peach_cake subcategory = CAT_CAKE +/datum/crafting_recipe/food/trumpetcake + name = "Spaceman's Cake" + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/reagent_containers/food/snacks/grown/trumpet = 2, + /datum/reagent/consumable/cream = 5, + /datum/reagent/consumable/berryjuice = 5 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/trumpet + subcategory = CAT_CAKE + /datum/crafting_recipe/food/cak name = "Living cat/cake hybrid" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm index 8f4c5d05f1..a42db0b2b5 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm @@ -1,4 +1,8 @@ +///////////////// +//Misc. Frozen.// +///////////////// + /datum/crafting_recipe/food/icecreamsandwich name = "Icecream sandwich" reqs = list( @@ -90,11 +94,10 @@ //////////////////////////SNOW CONES/////////////////////// -/datum/crafting_recipe/food/flaverless_sc - name = "Flaverless snowcone" +/datum/crafting_recipe/food/flavorless_sc + name = "Flavorless snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15 ) result = /obj/item/reagent_containers/food/snacks/snowcones @@ -104,7 +107,6 @@ name = "Pineapple snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /obj/item/reagent_containers/food/snacks/pineappleslice = 2 ) @@ -115,7 +117,6 @@ name = "Lime snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/limejuice = 5 ) @@ -126,7 +127,6 @@ name = "Lemon snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/lemonjuice = 5 ) @@ -137,7 +137,6 @@ name = "Apple snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/applejuice = 5 ) @@ -148,9 +147,8 @@ name = "Grape snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, - /datum/reagent/consumable/berryjuice = 5 + /datum/reagent/consumable/grapejuice = 5 ) result = /obj/item/reagent_containers/food/snacks/snowcones/grape subcategory = CAT_ICE @@ -159,7 +157,6 @@ name = "Orange snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/orangejuice = 5 ) @@ -170,7 +167,6 @@ name = "Bluecherry snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/bluecherryjelly= 5 ) @@ -181,22 +177,20 @@ name = "Cherry snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/cherryjelly= 5 ) result = /obj/item/reagent_containers/food/snacks/snowcones/red subcategory = CAT_ICE -/datum/crafting_recipe/food/mix_sc - name = "Mixed berrie snowcone" +/datum/crafting_recipe/food/berry_sc + name = "Berry snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, - /datum/reagent/consumable/berryjuice = 15 + /datum/reagent/consumable/berryjuice = 5 ) - result = /obj/item/reagent_containers/food/snacks/snowcones/mix + result = /obj/item/reagent_containers/food/snacks/snowcones/berry subcategory = CAT_ICE /datum/crafting_recipe/food/fruitsalad_sc @@ -216,7 +210,6 @@ name = "Mime snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/nothing = 5 ) @@ -227,86 +220,57 @@ name = "Clown snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, - /datum/reagent/consumable/clownstears = 5 + /datum/reagent/consumable/laughter = 5 ) result = /obj/item/reagent_containers/food/snacks/snowcones/clown subcategory = CAT_ICE /datum/crafting_recipe/food/soda_sc - name = "Soda water snowcone" + name = "Space Cola snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, - /datum/reagent/consumable/sodawater = 15 + /datum/reagent/consumable/space_cola = 5 ) result = /obj/item/reagent_containers/food/snacks/snowcones/soda subcategory = CAT_ICE -/datum/crafting_recipe/food/pwgrmer_sc - name = "Pwergamer snowcone" +/datum/crafting_recipe/food/spacemountainwind_sc + name = "Space Mountain Wind snowcone" + reqs = list( + /obj/item/reagent_containers/food/drinks/sillycup = 1, + /datum/reagent/consumable/ice = 15, + /datum/reagent/consumable/spacemountainwind = 5 + ) + result = /obj/item/reagent_containers/food/snacks/snowcones/spacemountainwind + +/datum/crafting_recipe/food/pwrgame_sc + name = "Pwrgame snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/pwr_game = 15 ) - result = /obj/item/reagent_containers/food/snacks/snowcones/pwgrmer - subcategory = CAT_ICE - -/datum/crafting_recipe/food/kiwi_sc - name = "Kiwi snowcone" - reqs = list( - /obj/item/reagent_containers/food/drinks/sillycup = 1, - /obj/item/reagent_containers/food/snacks/egg/kiwiEgg = 1, - /datum/reagent/water = 5, - /datum/reagent/consumable/ice = 15 - ) - result = /obj/item/reagent_containers/food/snacks/snowcones/kiwi + result = /obj/item/reagent_containers/food/snacks/snowcones/pwrgame subcategory = CAT_ICE /datum/crafting_recipe/food/honey_sc name = "Honey snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, /datum/reagent/consumable/honey = 5 ) result = /obj/item/reagent_containers/food/snacks/snowcones/honey subcategory = CAT_ICE -/datum/crafting_recipe/food/peach_sc - name = "Peach snowcone" - reqs = list( - /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, - /datum/reagent/consumable/ice = 15, - /obj/item/reagent_containers/food/snacks/grown/peach = 1 - ) - result = /obj/item/reagent_containers/food/snacks/snowcones/peach - subcategory = CAT_ICE - -/datum/crafting_recipe/food/strawberry_sc - name = "Strawberry snowcone" - reqs = list( - /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, - /datum/reagent/consumable/ice = 15, - /obj/item/reagent_containers/food/snacks/grown/strawberry = 2 - ) - result = /obj/item/reagent_containers/food/snacks/snowcones/strawberry - subcategory = CAT_ICE - -/datum/crafting_recipe/food/honey_sc +/datum/crafting_recipe/food/rainbow_sc name = "Rainbow snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/water = 5, /datum/reagent/consumable/ice = 15, - /datum/reagent/colorful_reagent = 1 //Hard to make + /datum/reagent/colorful_reagent = 1 //Harder to make ) result = /obj/item/reagent_containers/food/snacks/snowcones/rainbow - subcategory = CAT_ICE + subcategory = CAT_ICE \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index d17ccf585e..d8145410cd 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -166,3 +166,25 @@ ) result = /obj/item/reagent_containers/food/snacks/salad/ricepork subcategory = CAT_MEAT + +/datum/crafting_recipe/food/fiestaskewer + name = "Fiesta Skewer" + reqs = list( + /obj/item/stack/rods = 1, + /obj/item/reagent_containers/food/snacks/grown/chili = 1, + /obj/item/reagent_containers/food/snacks/meat/cutlet = 1, + /obj/item/reagent_containers/food/snacks/grown/corn = 1, + /obj/item/reagent_containers/food/snacks/grown/tomato = 1 + ) + result = /obj/item/reagent_containers/food/snacks/kebab/fiesta + subcategory = CAT_MEAT + +/datum/crafting_recipe/food/ribs + name = "BBQ Ribs" + reqs = list( + /datum/reagent/consumable/bbqsauce = 5, + /obj/item/reagent_containers/food/snacks/meat/steak/plain = 2, + /obj/item/stack/rods = 2 + ) + result = /obj/item/reagent_containers/food/snacks/bbqribs + subcategory = CAT_MEAT \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 365cf499bb..7977a715d8 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -1,18 +1,7 @@ - // see code/module/crafting/table.dm ////////////////////////////////////////////////DONUTS//////////////////////////////////////////////// -/datum/crafting_recipe/food/chaosdonut - name = "Chaos donut" - reqs = list( - /datum/reagent/consumable/frostoil = 5, - /datum/reagent/consumable/capsaicin = 5, - /obj/item/reagent_containers/food/snacks/pastrybase = 1 - ) - result = /obj/item/reagent_containers/food/snacks/donut/chaos - subcategory = CAT_PASTRY - /datum/crafting_recipe/food/donut time = 15 name = "Donut" @@ -20,18 +9,17 @@ /datum/reagent/consumable/sugar = 1, /obj/item/reagent_containers/food/snacks/pastrybase = 1 ) - result = /obj/item/reagent_containers/food/snacks/donut + result = /obj/item/reagent_containers/food/snacks/donut/plain subcategory = CAT_PASTRY -/datum/crafting_recipe/food/donut/semen - time = 15 - name = "Semen donut" +/datum/crafting_recipe/food/donut/chaos + name = "Chaos donut" reqs = list( - /datum/reagent/consumable/semen = 10, + /datum/reagent/consumable/frostoil = 5, + /datum/reagent/consumable/capsaicin = 5, /obj/item/reagent_containers/food/snacks/pastrybase = 1 ) - result = /obj/item/reagent_containers/food/snacks/donut/semen - subcategory = CAT_PASTRY + result = /obj/item/reagent_containers/food/snacks/donut/chaos datum/crafting_recipe/food/donut/meat time = 15 @@ -41,35 +29,232 @@ datum/crafting_recipe/food/donut/meat /obj/item/reagent_containers/food/snacks/pastrybase = 1 ) result = /obj/item/reagent_containers/food/snacks/donut/meat - subcategory = CAT_PASTRY -/datum/crafting_recipe/food/jellydonut +/datum/crafting_recipe/food/donut/jelly name = "Jelly donut" reqs = list( /datum/reagent/consumable/berryjuice = 5, /obj/item/reagent_containers/food/snacks/pastrybase = 1 ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly - subcategory = CAT_PASTRY + result = /obj/item/reagent_containers/food/snacks/donut/jelly/plain -/datum/crafting_recipe/food/cherryjellydonut - name = "Cherry jelly donut" - reqs = list( - /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/pastrybase = 1 - ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly - subcategory = CAT_PASTRY - -/datum/crafting_recipe/food/slimejellydonut +/datum/crafting_recipe/food/donut/slimejelly name = "Slime jelly donut" reqs = list( /datum/reagent/toxin/slimejelly = 5, /obj/item/reagent_containers/food/snacks/pastrybase = 1 ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain + +/datum/crafting_recipe/food/donut/glaze + time = 15 + name = "glaze donut" + reqs = list( + /datum/reagent/consumable/sugar = 10, + /obj/item/reagent_containers/food/snacks/pastrybase = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/glaze subcategory = CAT_PASTRY +/datum/crafting_recipe/food/donut/berry + name = "Berry Donut" + reqs = list( + /datum/reagent/consumable/berryjuice = 3, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/berry + +/datum/crafting_recipe/food/donut/trumpet + name = "Spaceman's Donut" + reqs = list( + /datum/reagent/medicine/polypyr = 3, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + + result = /obj/item/reagent_containers/food/snacks/donut/trumpet + +/datum/crafting_recipe/food/donut/apple + name = "Apple Donut" + reqs = list( + /datum/reagent/consumable/applejuice = 3, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/apple + +/datum/crafting_recipe/food/donut/caramel + name = "Caramel Donut" + reqs = list( + /datum/reagent/consumable/caramel = 3, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/caramel + +/datum/crafting_recipe/food/donut/choco + name = "Chocolate Donut" + reqs = list( + /obj/item/reagent_containers/food/snacks/chocolatebar = 1, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/choco + +/datum/crafting_recipe/food/donut/blumpkin + name = "Blumpkin Donut" + reqs = list( + /datum/reagent/consumable/blumpkinjuice = 3, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/blumpkin + +/datum/crafting_recipe/food/donut/bungo + name = "Bungo Donut" + reqs = list( + /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/bungo + +/datum/crafting_recipe/food/donut/matcha + name = "Matcha Donut" + reqs = list( + /datum/reagent/toxin/teapowder = 3, + /obj/item/reagent_containers/food/snacks/donut/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/matcha + +////////////////////////////////////////////////////JELLY DONUTS/////////////////////////////////////////////////////// + +/datum/crafting_recipe/food/donut/jelly/berry + name = "Berry Jelly Donut" + reqs = list( + /datum/reagent/consumable/berryjuice = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/berry + +/datum/crafting_recipe/food/donut/jelly/trumpet + name = "Spaceman's Jelly Donut" + reqs = list( + /datum/reagent/medicine/polypyr = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + + result = /obj/item/reagent_containers/food/snacks/donut/jelly/trumpet + +/datum/crafting_recipe/food/donut/jelly/apple + name = "Apple Jelly Donut" + reqs = list( + /datum/reagent/consumable/applejuice = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/apple + +/datum/crafting_recipe/food/donut/jelly/caramel + name = "Caramel Jelly Donut" + reqs = list( + /datum/reagent/consumable/caramel = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/caramel + +/datum/crafting_recipe/food/donut/jelly/choco + name = "Chocolate Jelly Donut" + reqs = list( + /obj/item/reagent_containers/food/snacks/chocolatebar = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/choco + +/datum/crafting_recipe/food/donut/jelly/blumpkin + name = "Blumpkin Jelly Donut" + reqs = list( + /datum/reagent/consumable/blumpkinjuice = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin + +/datum/crafting_recipe/food/donut/jelly/bungo + name = "Bungo Jelly Donut" + reqs = list( + /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/bungo + +/datum/crafting_recipe/food/donut/jelly/matcha + name = "Matcha Jelly Donut" + reqs = list( + /datum/reagent/toxin/teapowder = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/matcha + +////////////////////////////////////////////////////SLIME DONUTS/////////////////////////////////////////////////////// + +/datum/crafting_recipe/food/donut/slimejelly/berry + name = "Berry Slime Donut" + reqs = list( + /datum/reagent/consumable/berryjuice = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry + +/datum/crafting_recipe/food/donut/slimejelly/trumpet + name = "Spaceman's Slime Donut" + reqs = list( + /datum/reagent/medicine/polypyr = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet + +/datum/crafting_recipe/food/donut/slimejelly/apple + name = "Apple Slime Donut" + reqs = list( + /datum/reagent/consumable/applejuice = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple + +/datum/crafting_recipe/food/donut/slimejelly/caramel + name = "Caramel Slime Donut" + reqs = list( + /datum/reagent/consumable/caramel = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel + +/datum/crafting_recipe/food/donut/slimejelly/choco + name = "Chocolate Slime Donut" + reqs = list( + /obj/item/reagent_containers/food/snacks/chocolatebar = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco + +/datum/crafting_recipe/food/donut/slimejelly/blumpkin + name = "Blumpkin Slime Donut" + reqs = list( + /datum/reagent/consumable/blumpkinjuice = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin + +/datum/crafting_recipe/food/donut/slimejelly/bungo + name = "Bungo Slime Donut" + reqs = list( + /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo + +/datum/crafting_recipe/food/donut/slimejelly/matcha + name = "Matcha Slime Donut" + reqs = list( + /datum/reagent/toxin/teapowder = 3, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha + ////////////////////////////////////////////////WAFFLES AND PANCAKES//////////////////////////////////////////////// /datum/crafting_recipe/food/waffles @@ -341,4 +526,4 @@ datum/crafting_recipe/food/donut/meat /datum/reagent/consumable/honey = 5 ) result = /obj/item/reagent_containers/food/snacks/honeybun - subcategory = CAT_PASTRY + subcategory = CAT_PASTRY \ No newline at end of file diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index c273690571..6f1e19d5e0 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -8,6 +8,8 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico //On client, created on login /datum/chatOutput var/client/owner //client ref + var/total_checks = 0 + var/last_check = 0 var/loaded = FALSE // Has the client loaded the browser output area? var/list/messageQueue //If they haven't loaded chat, this is where messages will go until they do var/cookieSent = FALSE // Has the client sent a cookie for analysis @@ -150,6 +152,18 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico //Called by client, sent data to investigate (cookie history so far) /datum/chatOutput/proc/analyzeClientData(cookie = "") + //Spam check + if(world.time > last_check + (3 SECONDS)) + last_check = world.time + total_checks = 0 + + total_checks += 1 + + if(total_checks > SPAM_TRIGGER_AUTOMUTE) + message_admins("[key_name(owner)] kicked for goonchat topic spam") + qdel(owner) + return + if(!cookie) return @@ -158,13 +172,22 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico if (connData && islist(connData) && connData.len > 0 && connData["connData"]) connectionHistory = connData["connData"] //lol fuck var/list/found = new() - for(var/i in connectionHistory.len to 1 step -1) + if(connectionHistory.len > 5) + message_admins("[key_name(src.owner)] was kicked for an invalid ban cookie)") + qdel(owner) + return + + for(var/i in min(connectionHistory.len, 5) to 1 step -1) + if(QDELETED(owner)) + //he got cleaned up before we were done + return var/list/row = src.connectionHistory[i] if (!row || row.len < 3 || (!row["ckey"] || !row["compid"] || !row["ip"])) //Passed malformed history object return if (world.IsBanned(row["ckey"], row["ip"], row["compid"], real_bans_only=TRUE)) found = row break + CHECK_TICK //Uh oh this fucker has a history of playing on a banned account!! if (found.len > 0) diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index abd05d29ed..823ad107d2 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -421,8 +421,8 @@ function handleClientData(ckey, ip, compid) { return; //Record already exists } } - - if (opts.clientData.length >= opts.clientDataLimit) { + //Lets make sure we obey our limit (can connect from server with higher limit) + while (opts.clientData.length >= opts.clientDataLimit) { opts.clientData.shift(); } } else { diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 889706744a..d551222836 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -59,9 +59,7 @@ return var/area/AS = get_area(src) if(istype(AS, /area/holodeck)) - log_world("### MAPPING ERROR") - log_world("Holodeck computer cannot be in a holodeck.") - log_world("This would cause circular power dependency.") + log_mapping("Holodeck computer cannot be in a holodeck, This would cause circular power dependency.") qdel(src) return else diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 3574f8a9c1..7b5b0586d1 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -111,11 +111,10 @@ /turf/open/floor/holofloor/carpet/Initialize() . = ..() - addtimer(CALLBACK(src, .proc/update_icon), 1) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 1) /turf/open/floor/holofloor/carpet/update_icon() - if(!..()) - return 0 + . = ..() if(intact) queue_smooth(src) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 3376bac1cc..77199b3496 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -240,7 +240,7 @@ dat += "
    " else dat += "No trait-related genes detected in sample.
    " - if(can_insert && istype(disk.gene, /datum/plant_gene/trait)) + if(can_insert && istype(disk.gene, /datum/plant_gene/trait) && !seed.is_gene_forbidden(disk.gene.type)) dat += "Insert: [disk.gene.get_name()]" dat += "" else diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index beecb258a7..b7c9550bb9 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -148,7 +148,7 @@ icon_grow = "sunflower-grow" icon_dead = "sunflower-dead" mutatelist = list(/obj/item/seeds/sunflower/moonflower, /obj/item/seeds/sunflower/novaflower) - reagents_add = list("cornoil" = 0.08, "nutriment" = 0.04) + reagents_add = list("cooking_oil" = 0.08, "nutriment" = 0.04) /obj/item/grown/sunflower // FLOWER POWER! seed = /obj/item/seeds/sunflower @@ -316,4 +316,4 @@ filling_color = "#FF6347" bitesize_mod = 8 tastes = list("wax" = 1) - foodtype = SUGAR \ No newline at end of file + foodtype = SUGAR diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index 8fc141e152..02b36d6a3f 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -27,7 +27,7 @@ bitesize_mod = 2 var/stacktype = /obj/item/stack/tile/grass var/tile_coefficient = 0.02 // 1/50 - wine_power = 15 + distill_reagent = /datum/reagent/consumable/ethanol/beer/light /obj/item/reagent_containers/food/snacks/grown/grass/attack_self(mob/user) to_chat(user, "You prepare the astroturf.") diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index b37e494233..3af284974e 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -232,7 +232,7 @@ /obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/detonate() reagents.chem_temp = 1000 //Sets off the black powder reagents.handle_reactions() - + // Lavaland cactus /obj/item/seeds/lavaland/cactus @@ -244,3 +244,279 @@ product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' growthstages = 2 + + +// Coconut +/obj/item/seeds/coconut + name = "pack of coconut seeds" + desc = "They're seeds that grow into coconut palm trees." + icon_state = "seed-coconut" + species = "coconut" + plantname = "Coconut Palm Tree" + product = /obj/item/reagent_containers/food/snacks/grown/coconut + lifespan = 50 + endurance = 30 + potency = 35 + growing_icon = 'icons/obj/hydroponics/growing.dmi' + icon_dead = "coconut-dead" + genes = list(/datum/plant_gene/trait/repeated_harvest) + forbiddengenes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/stinging) + reagents_add = list("coconutmilk" = 0.3) + +/obj/item/reagent_containers/food/snacks/grown/coconut + seed = /obj/item/seeds/coconut + name = "coconut" + desc = "Hard shell of a nut containing delicious milk inside. Perhaps try using something sharp?" + icon_state = "coconut" + item_state = "coconut" + possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50) + spillable = FALSE + resistance_flags = ACID_PROOF + volume = 150 //so it won't cut reagents despite having the capacity for them + w_class = WEIGHT_CLASS_SMALL + force = 5 + throwforce = 5 + hitsound = 'sound/weapons/klonk.ogg' + attack_verb = list("klonked", "donked", "bonked") + var/opened = FALSE + var/carved = FALSE + var/chopped = FALSE + var/straw = FALSE + var/fused = FALSE + var/fusedactive = FALSE + var/defused = FALSE + +/obj/item/reagent_containers/food/snacks/grown/coconut/Initialize(mapload, obj/item/seeds/new_seed) + . = ..() + var/newvolume = 50 + round(seed.potency,10) + if (seed.get_gene(/datum/plant_gene/trait/maxchem)) + newvolume = newvolume + 50 + volume = newvolume + reagents.maximum_volume = newvolume + reagents.update_total() + + transform *= TRANSFORM_USING_VARIABLE(40, 100) + 0.5 //temporary fix for size? + +/obj/item/reagent_containers/food/snacks/grown/coconut/attack_self(mob/user) + if (!opened) + return + + if(!possible_transfer_amounts.len) + return + var/i=0 + for(var/A in possible_transfer_amounts) + i++ + if(A != amount_per_transfer_from_this) + continue + if(i[src]'s transfer amount is now [amount_per_transfer_from_this] units.") + return + +/obj/item/reagent_containers/food/snacks/grown/coconut/attackby(obj/item/W, mob/user, params) + //DEFUSING NADE LOGIC + if (W.tool_behaviour == TOOL_WIRECUTTER && fused) + user.show_message("You cut the fuse!", MSG_VISUAL) + playsound(user, W.hitsound, 50, 1, -1) + icon_state = "coconut_carved" + desc = "A coconut. This one's got a hole in it." + name = "coconut" + defused = TRUE + fused = FALSE + fusedactive = FALSE + if(!seed.get_gene(/datum/plant_gene/trait/glow)) + set_light(0, 0.0) + return + //IGNITING NADE LOGIC + if(!fusedactive && fused) + var/lighting_text = W.ignition_effect(src, user) + if(lighting_text) + user.visible_message("[user] ignites [src]'s fuse!", "You ignite the [src]'s fuse!") + fusedactive = TRUE + defused = FALSE + playsound(src, 'sound/effects/fuse.ogg', 100, 0) + message_admins("[ADMIN_LOOKUPFLW(user)] ignited a coconut bomb for detonation at [ADMIN_VERBOSEJMP(user)] [pretty_string_from_reagent_list(reagents.reagent_list)]") + log_game("[key_name(user)] primed a coconut grenade for detonation at [AREACOORD(user)].") + addtimer(CALLBACK(src, .proc/prime), 5 SECONDS) + icon_state = "coconut_grenade_active" + desc = "RUN!" + if(!seed.get_gene(/datum/plant_gene/trait/glow)) + light_color = "#FFCC66" //for the fuse + set_light(3, 0.8) + return + + //ADDING A FUSE, NADE LOGIC + if (istype(W,/obj/item/stack/sheet/cloth) || istype(W,/obj/item/stack/sheet/durathread)) + if (carved && !straw && !fused) + user.show_message("You add a fuse to the coconut!", 1) + W.use(1) + fused = TRUE + icon_state = "coconut_grenade" + desc = "A makeshift bomb made out of a coconut. You estimate the fuse is long enough for 5 seconds." + name = "coconut bomb" + return + //ADDING STRAW LOGIC + if (istype(W,/obj/item/stack/sheet/mineral/bamboo) && opened && !straw && fused) + user.show_message("You add a bamboo straw to the coconut!", 1) + straw = TRUE + W.use(1) + icon_state += "_straw" + desc = "You can already feel like you're on a tropical vacation." + return + //OPENING THE NUT LOGIC + if (!carved && !chopped) + var/screwdrivered = W.tool_behaviour == TOOL_SCREWDRIVER + if(screwdrivered || W.sharpness) + user.show_message("You [screwdrivered ? "make a hole in the coconut" : "slice the coconut open"]!", 1) + carved = TRUE + opened = TRUE + spillable = !screwdrivered + reagent_flags = OPENCONTAINER + ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER) + icon_state = screwdrivered ? "coconut_carved" : "coconut_chopped" + desc = "A coconut. [screwdrivered ? "This one's got a hole in it" : "This one's sliced open, with all its delicious contents for your eyes to savour"]." + playsound(user, W.hitsound, 50, 1, -1) + return + return ..() + +/obj/item/reagent_containers/food/snacks/grown/coconut/attack(mob/living/M, mob/user, obj/target) + if(M && user.a_intent == INTENT_HARM && !spillable) + var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at + if (affecting == BODY_ZONE_HEAD && prob(15)) + //smash the nut open + var/armor_block = min(90, M.run_armor_check(affecting, "melee", null, null,armour_penetration)) // For normal attack damage + M.apply_damage(force, BRUTE, affecting, armor_block) + + //Sound + playsound(user, hitsound, 100, 1, -1) + + //Attack logs + log_combat(user, M, "attacked", src) + + //Display an attack message. + if(M != user) + M.visible_message("[user] has cracked open a [name] on [M]'s head!", \ + "[user] has cracked open a [name] on [M]'s head!") + else + user.visible_message("[M] cracks open a [name] on their [M.p_them()] head!", \ + "[M] cracks open a [name] on [M.p_their()] head!") + + //The coconut breaks open so splash its reagents + spillable = TRUE + SplashReagents(M) + + //Lastly we remove the nut + qdel(src) + else + . = ..() + return + + if(fusedactive) + return + + if(!opened) + return + + if(!canconsume(M, user)) + return + + if(!reagents || !reagents.total_volume) + to_chat(user, "[src] is empty!") + return + + if(user.a_intent == INTENT_HARM && spillable) + var/R + M.visible_message("[user] splashes the contents of [src] onto [M]!", \ + "[user] splashes the contents of [src] onto [M]!") + if(reagents) + for(var/datum/reagent/A in reagents.reagent_list) + R += A.id + " (" + R += num2text(A.volume) + ")," + if(isturf(target) && reagents.reagent_list.len && thrownby) + log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]") + message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] at [ADMIN_VERBOSEJMP(target)].") + reagents.reaction(M, TOUCH) + log_combat(user, M, "splashed", R) + reagents.clear_reagents() + else + if(M != user) + M.visible_message("[user] attempts to feed something to [M].", \ + "[user] attempts to feed something to you.") + if(!do_mob(user, M)) + return + if(!reagents || !reagents.total_volume) + return // The drink might be empty after the delay, such as by spam-feeding + M.visible_message("[user] feeds something to [M].", "[user] feeds something to you.") + log_combat(user, M, "fed", reagents.log_list()) + else + to_chat(user, "You swallow a gulp of [src].") + var/fraction = min(5/reagents.total_volume, 1) + reagents.reaction(M, INGEST, fraction) + addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5), 5) + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + +/obj/item/reagent_containers/food/snacks/grown/coconut/afterattack(obj/target, mob/user, proximity) + . = ..() + if(fusedactive) + return + + if((!proximity) || !check_allowed_items(target,target_self=1)) + return + + if(target.is_refillable()) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) + to_chat(user, "[src] is empty!") + return + + if(target.reagents.holder_full()) + to_chat(user, "[target] is full.") + return + + var/trans = reagents.trans_to(target, amount_per_transfer_from_this) + to_chat(user, "You transfer [trans] unit\s of the solution to [target].") + + else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. + if(!target.reagents.total_volume) + to_chat(user, "[target] is empty and can't be refilled!") + return + + if(reagents.holder_full()) + to_chat(user, "[src] is full.") + return + + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) + to_chat(user, "You fill [src] with [trans] unit\s of the contents of [target].") + + else if(reagents.total_volume) + if(user.a_intent == INTENT_HARM && spillable == TRUE) + user.visible_message("[user] splashes the contents of [src] onto [target]!", \ + "You splash the contents of [src] onto [target].") + reagents.reaction(target, TOUCH) + reagents.clear_reagents() + +/obj/item/reagent_containers/food/snacks/grown/coconut/dropped(mob/user) + . = ..() + transform *= TRANSFORM_USING_VARIABLE(40, 100) + 0.5 //temporary fix for size? + +/obj/item/reagent_containers/food/snacks/grown/coconut/proc/prime() + if (defused) + return + var/turf/T = get_turf(src) + reagents.chem_temp = 1000 + //Disable seperated contents when the grenade primes + if (seed.get_gene(/datum/plant_gene/trait/noreact)) + DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT) + reagents.handle_reactions() + log_game("Coconut bomb detonation at [AREACOORD(T)], location [loc]") + qdel(src) + +/obj/item/reagent_containers/food/snacks/grown/coconut/ex_act(severity) + qdel(src) + +/obj/item/reagent_containers/food/snacks/grown/coconut/deconstruct(disassembled = TRUE) + if(!disassembled && fused) + prime() + if(!QDELETED(src)) + qdel(src) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index f45b6bc517..59a9725383 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -380,7 +380,11 @@ pestlevel = 0 // Reset update_icon() visible_message("The [oldPlantName] is overtaken by some [myseed.plantname]!") - + name = "hydroponics tray ([myseed.plantname])" + if(myseed.product) + desc = initial(myseed.product.desc) + else + desc = initial(desc) /obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) // Mutates the current seed if(!myseed) @@ -414,7 +418,11 @@ sleep(5) // Wait a while update_icon() visible_message("[oldPlantName] suddenly mutates into [myseed.plantname]!") - + name = "hydroponics tray ([myseed.plantname])" + if(myseed.product) + desc = initial(myseed.product.desc) + else + desc = initial(desc) /obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant if( weedlevel > 5 ) @@ -524,7 +532,7 @@ if(S.has_reagent("charcoal", 1)) adjustToxic(-round(S.get_reagent_amount("charcoal") * 2)) - // NIGGA, YOU JUST WENT ON FULL RETARD. + // Toxins, not good for anything if(S.has_reagent("toxin", 1)) adjustToxic(round(S.get_reagent_amount("toxin") * 2)) @@ -539,14 +547,14 @@ adjustNutri(round(S.get_reagent_amount("beer") * 0.25)) adjustWater(round(S.get_reagent_amount("beer") * 0.7)) - // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial + // Fluorine one of the most corrosive and deadly gasses if(S.has_reagent("fluorine", 1)) adjustHealth(-round(S.get_reagent_amount("fluorine") * 2)) adjustToxic(round(S.get_reagent_amount("fluorine") * 2.5)) adjustWater(-round(S.get_reagent_amount("fluorine") * 0.5)) adjustWeeds(-rand(1,4)) - // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial + // Chlorine one of the most corrosive and deadly gasses if(S.has_reagent("chlorine", 1)) adjustHealth(-round(S.get_reagent_amount("chlorine") * 1)) adjustToxic(round(S.get_reagent_amount("chlorine") * 1.5)) @@ -561,7 +569,7 @@ adjustWater(-round(S.get_reagent_amount("phosphorus") * 0.5)) adjustWeeds(-rand(1,2)) - // Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though... + // Plants should not have sugar, they can't use it and it prevents them getting water/nutients, it is good for mold though... if(S.has_reagent("sugar", 1)) adjustWeeds(rand(1,2)) adjustPests(rand(1,2)) @@ -583,13 +591,13 @@ adjustHealth(round(S.get_reagent_amount("sodawater") * 0.1)) adjustNutri(round(S.get_reagent_amount("sodawater") * 0.1)) - // Man, you guys are retards + // Sulphuric Acid if(S.has_reagent("sacid", 1)) adjustHealth(-round(S.get_reagent_amount("sacid") * 1)) adjustToxic(round(S.get_reagent_amount("sacid") * 1.5)) adjustWeeds(-rand(1,2)) - // SERIOUSLY + // Acid if(S.has_reagent("facid", 1)) adjustHealth(-round(S.get_reagent_amount("facid") * 2)) adjustToxic(round(S.get_reagent_amount("facid") * 3)) @@ -601,7 +609,7 @@ adjustToxic(round(S.get_reagent_amount("plantbgone") * 6)) adjustWeeds(-rand(4,8)) - // why, just why + // Napalm, not known for being good for anything organic if(S.has_reagent("napalm", 1)) if(!(myseed.resistance_flags & FIRE_PROOF)) adjustHealth(-round(S.get_reagent_amount("napalm") * 6)) @@ -638,13 +646,14 @@ if (myseed) myseed.adjust_production(-round(salt/100)-prob(salt%100)) myseed.adjust_potency(round(salt*0.5)) + // Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer if(S.has_reagent("ash", 1)) adjustHealth(round(S.get_reagent_amount("ash") * 0.25)) adjustNutri(round(S.get_reagent_amount("ash") * 0.5)) adjustWeeds(-1) - // This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. + // Diethylamine is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. if(S.has_reagent("diethylamine", 1)) adjustHealth(round(S.get_reagent_amount("diethylamine") * 1)) adjustNutri(round(S.get_reagent_amount("diethylamine") * 2)) @@ -652,26 +661,37 @@ myseed.adjust_yield(round(S.get_reagent_amount("diethylamine") * 0.02)) adjustPests(-rand(1,2)) - // Compost, effectively + // Nutriment Compost, effectively if(S.has_reagent("nutriment", 1)) adjustHealth(round(S.get_reagent_amount("nutriment") * 0.5)) adjustNutri(round(S.get_reagent_amount("nutriment") * 1)) - // Compost for EVERYTHING + // Virusfood Compost for EVERYTHING if(S.has_reagent("virusfood", 1)) adjustNutri(round(S.get_reagent_amount("virusfood") * 0.5)) adjustHealth(-round(S.get_reagent_amount("virusfood") * 0.5)) - // FEED ME + // Blood if(S.has_reagent("blood", 1)) adjustNutri(round(S.get_reagent_amount("blood") * 1)) adjustPests(rand(2,4)) - // FEED ME SEYMOUR + // Strange reagent if(S.has_reagent("strangereagent", 1)) spawnplant() - // The best stuff there is. For testing/debugging. + // Honey, Pests are dieing of sugar, so is the plant + if(S.has_reagent("honey", 1)) + adjustPests(-rand(2,5)) + adjustHealth(-round(S.get_reagent_amount("honey") * 1)) + + // Buzz Fuzz, a drink seemingly made for plants... + if(S.has_reagent("buzz_fuzz", 1)) + adjustPests(-rand(2,5)) + adjustHealth(round(S.get_reagent_amount("buzz_fuzz") * 0.1)) + adjustNutri(round(S.get_reagent_amount("buzz_fuzz") * 0.5)) + + // Adminordrazine the best stuff there is. For testing/debugging. if(S.has_reagent("adminordrazine", 1)) adjustWater(round(S.get_reagent_amount("adminordrazine") * 1)) adjustHealth(round(S.get_reagent_amount("adminordrazine") * 1)) @@ -769,6 +789,15 @@ to_chat(user, "You plant [O].") dead = 0 myseed = O + name = "hydroponics tray ([myseed.plantname])" + if(!myseed.productdesc) //we haven't changed our produce's description + if(myseed.product) + myseed.productdesc = initial(myseed.product.desc) + else if(myseed.desc) + myseed.productdesc = myseed.desc + else + myseed.productdesc = "A fascinating specimen." + desc = myseed.productdesc age = 1 plant_health = myseed.endurance lastcycle = world.time @@ -834,6 +863,8 @@ harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it qdel(myseed) myseed = null + name = initial(name) + desc = initial(desc) weedlevel = 0 //Has a side effect of cleaning up those nasty weeds update_icon() @@ -866,6 +897,8 @@ qdel(myseed) myseed = null update_icon() + name = initial(name) + desc = initial(desc) else if(user) examine(user) @@ -883,6 +916,8 @@ qdel(myseed) myseed = null dead = 0 + name = initial(name) + desc = initial(desc) update_icon() /// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds./// diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 16863b0aa4..39e97e3801 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -8,7 +8,8 @@ w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE var/plantname = "Plants" // Name of plant when planted. - var/product // A type path. The thing that is created when the plant is harvested. + var/obj/item/product // A type path. The thing that is created when the plant is harvested. + var/productdesc var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden. var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed. @@ -26,6 +27,7 @@ var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to CentCom. var/list/mutatelist = list() // The type of plants that this plant can mutate into. var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info. + var/list/forbiddengenes = list() var/list/reagents_add = list() // A list of reagents to add to product. // Format: "reagent_id" = potency multiplier @@ -69,6 +71,10 @@ genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) reagents_from_genes() //quality coding +/obj/item/seeds/examine(mob/user) + . = ..() + . += "Use a pen on it to rename it or change its description." + /obj/item/seeds/proc/Copy() var/obj/item/seeds/S = new type(null, 1) // Copy all the stats @@ -80,6 +86,10 @@ S.potency = potency S.weed_rate = weed_rate S.weed_chance = weed_chance + S.name = name + S.plantname = plantname + S.desc = desc + S.productdesc = productdesc S.genes = list() for(var/g in genes) var/datum/plant_gene/G = g @@ -87,6 +97,10 @@ S.reagents_add = reagents_add.Copy() // Faster than grabbing the list from genes. return S +obj/item/seeds/proc/is_gene_forbidden(typepath) + return (typepath in forbiddengenes) + + /obj/item/seeds/proc/get_gene(typepath) return (locate(typepath) in genes) @@ -157,11 +171,18 @@ var/product_name while(t_amount < getYield()) var/obj/item/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src) + if(parent.myseed.plantname != initial(parent.myseed.plantname)) + t_prod.name = lowertext(parent.myseed.plantname) + if(productdesc) + t_prod.desc = productdesc + t_prod.seed.name = parent.myseed.name + t_prod.seed.desc = parent.myseed.desc + t_prod.seed.plantname = parent.myseed.plantname result.Add(t_prod) // User gets a consumable if(!t_prod) return t_amount++ - product_name = t_prod.name + product_name = parent.myseed.plantname if(getYield() >= 1) SSblackbox.record_feedback("tally", "food_harvested", getYield(), product_name) parent.update_tray(user) @@ -331,14 +352,56 @@ to_chat(user, "[text]") return + + if(istype(O, /obj/item/pen)) + var/choice = input("What would you like to change?") in list("Plant Name", "Seed Description", "Product Description", "Cancel") + if(!user.canUseTopic(src, BE_CLOSE)) + return + switch(choice) + if("Plant Name") + var/newplantname = reject_bad_text(stripped_input(user, "Write a new plant name:", name, plantname)) + if(!user.canUseTopic(src, BE_CLOSE)) + return + if (length(newplantname) > 20) + to_chat(user, "That name is too long!") + return + if(!newplantname) + to_chat(user, "That name is invalid.") + return + else + name = "[lowertext(newplantname)]" + plantname = newplantname + if("Seed Description") + var/newdesc = stripped_input(user, "Write a new description:", name, desc) + if(!user.canUseTopic(src, BE_CLOSE)) + return + if (length(newdesc) > 180) + to_chat(user, "That description is too long!") + return + if(!newdesc) + to_chat(user, "That description is invalid.") + return + else + desc = newdesc + if("Product Description") + if(product && !productdesc) + productdesc = initial(product.desc) + var/newproductdesc = stripped_input(user, "Write a new description:", name, productdesc) + if(!user.canUseTopic(src, BE_CLOSE)) + return + if (length(newproductdesc) > 180) + to_chat(user, "That description is too long!") + return + if(!newproductdesc) + to_chat(user, "That description is invalid.") + return + else + productdesc = newproductdesc + else + return + ..() // Fallthrough to item/attackby() so that bags can pick seeds up - - - - - - // Checks plants for broken tray icons. Use Advanced Proc Call to activate. // Maybe some day it would be used as unit test. /proc/check_plants_growth_stages_icons() @@ -390,7 +453,7 @@ for(var/i in 1 to amount_random_traits) var/random_trait = pick((subtypesof(/datum/plant_gene/trait)-typesof(/datum/plant_gene/trait/plant_type))) var/datum/plant_gene/trait/T = new random_trait - if(T.can_add(src)) + if(T.can_add(src) && !is_gene_forbidden(random_trait)) genes += T else qdel(T) diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index c6342e2154..40bfa0bbfa 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -20,8 +20,7 @@ access = list() //See get_access() minimal_access = list() //See get_access() - mind_traits = list(TRAIT_CAPTAIN_METABOLISM) -// mind_traits = list(TRAIT_DISK_VERIFIER) + mind_traits = list(TRAIT_CAPTAIN_METABOLISM, TRAIT_DISK_VERIFIER) display_order = JOB_DISPLAY_ORDER_CAPTAIN diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 922b335a39..f8a7e70473 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -14,6 +14,8 @@ access = list(ACCESS_THEATRE) minimal_access = list(ACCESS_THEATRE) + mind_traits = list(TRAIT_CLOWN_MENTALITY) + display_order = JOB_DISPLAY_ORDER_CLOWN /datum/outfit/job/clown diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index 23d20cd27a..ca4280a2a1 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(exp_jobsmap, list( GLOBAL_LIST_INIT(exp_specialmap, list( EXP_TYPE_LIVING = list(), // all living mobs EXP_TYPE_ANTAG = list(), - EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role"), // Ghost roles + EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role", "Ghost Cafe Visitor"), // Ghost roles EXP_TYPE_GHOST = list() // dead people, observers )) GLOBAL_PROTECT(exp_jobsmap) diff --git a/code/modules/keybindings/bindings_carbon.dm b/code/modules/keybindings/bindings_carbon.dm index a982273c86..eef170cea9 100644 --- a/code/modules/keybindings/bindings_carbon.dm +++ b/code/modules/keybindings/bindings_carbon.dm @@ -3,18 +3,6 @@ if("R", "Southwest") // Southwest is End toggle_throw_mode() return - if("1") - a_intent_change("help") - return - if("2") - a_intent_change("disarm") - return - if("3") - a_intent_change("grab") - return - if("4") - a_intent_change("harm") - return if("C") toggle_combat_mode() return diff --git a/code/modules/keybindings/bindings_human.dm b/code/modules/keybindings/bindings_human.dm index a9eafacef6..ed033935b2 100644 --- a/code/modules/keybindings/bindings_human.dm +++ b/code/modules/keybindings/bindings_human.dm @@ -58,13 +58,23 @@ return switch(_key) if("Shift") - sprint_hotkey(TRUE) + if(!user.prefs.sprint_spacebar) + user.prefs.sprint_toggle ? togglesprint() : sprint_hotkey(TRUE) //Yes, this looks hacky. Yes, this works. + return + if("Space") + if(user.prefs.sprint_spacebar) + user.prefs.sprint_toggle ? togglesprint() : sprint_hotkey(TRUE) return return ..() /mob/living/carbon/human/key_up(_key, client/user) switch(_key) if("Shift") - sprint_hotkey(FALSE) + if(!user.prefs.sprint_spacebar && !user.prefs.sprint_toggle) + sprint_hotkey(FALSE) + return + if("Space") + if(user.prefs.sprint_spacebar && !user.prefs.sprint_toggle) + sprint_hotkey(FALSE) return return ..() diff --git a/code/modules/keybindings/bindings_living.dm b/code/modules/keybindings/bindings_living.dm index 241bc15b60..8e9c787b6b 100644 --- a/code/modules/keybindings/bindings_living.dm +++ b/code/modules/keybindings/bindings_living.dm @@ -3,5 +3,22 @@ if("B") resist() return + if("1") + if(possible_a_intents) + a_intent_change(INTENT_HELP) + return + if("2") + if(possible_a_intents) + a_intent_change(INTENT_DISARM) + return + if("3") + if(possible_a_intents) + a_intent_change(INTENT_GRAB) + return + if("4") + if(possible_a_intents) + a_intent_change(INTENT_HARM) + return + return ..() \ No newline at end of file diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index c1a336eb69..00f63510b6 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -134,7 +134,7 @@ /datum/language_holder/synthetic languages = list(/datum/language/common) - shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic) + shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic, /datum/language/slime) /datum/language_holder/empty languages = list() diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index 295fc816e2..0d7ae7107b 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -117,6 +117,7 @@ anchored = TRUE max_integrity = 30 layer = LATTICE_LAYER + light_power = 0.3 var/hidden_message var/creator_key diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 1f55f18823..3e361179de 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -70,7 +70,7 @@ //initialize things that are normally initialized after map load parsed.initTemplateBounds() smooth_zlevel(world.maxz) - log_game("Z-level [name] loaded at at [x],[y],[world.maxz]") + log_game("Z-level [name] loaded at [x],[y],[world.maxz]") return level @@ -84,6 +84,13 @@ if(T.y+height > world.maxy) return + var/list/border = block(locate(max(T.x-1, 1), max(T.y-1, 1), T.z), + locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z)) + for(var/L in border) + var/turf/turf_to_disable = L + SSair.remove_from_active(turf_to_disable) //stop processing turfs along the border to prevent runtimes, we return it in initTemplateBounds() + turf_to_disable.atmos_adjacent_turfs?.Cut() + // Accept cached maps, but don't save them automatically - we don't want // ruins clogging up memory for the whole round. var/datum/parsed_map/parsed = cached_map || new(file(mappath)) @@ -100,7 +107,7 @@ //initialize things that are normally initialized after map load parsed.initTemplateBounds() - log_game("[name] loaded at at [T.x],[T.y],[T.z]") + log_game("[name] loaded at [T.x],[T.y],[T.z]") return bounds /datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index e2459d780a..a7f84fd71f 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -18,7 +18,7 @@ /obj/effect/baseturf_helper/LateInitialize() if(!baseturf_to_replace) - baseturf_to_replace = typecacheof(/turf/open/space) + baseturf_to_replace = typecacheof(list(/turf/open/space,/turf/baseturf_bottom)) else if(!length(baseturf_to_replace)) baseturf_to_replace = list(baseturf_to_replace = TRUE) else if(baseturf_to_replace[baseturf_to_replace[1]] != TRUE) // It's not associative @@ -45,7 +45,6 @@ thing.PlaceOnBottom(null, baseturf) else if(baseturf_to_replace[thing.baseturfs]) thing.assemble_baseturfs(baseturf) - return else thing.PlaceOnBottom(null, baseturf) @@ -107,16 +106,16 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper/Initialize(mapload) . = ..() if(!mapload) - log_world("### MAP WARNING, [src] spawned outside of mapload!") + log_mapping("[src] spawned outside of mapload!") return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(airlock) if(airlock.cyclelinkeddir) - log_world("### MAP WARNING, [src] at [AREACOORD(src)] tried to set [airlock] cyclelinkeddir, but it's already set!") + log_mapping("[src] at [AREACOORD(src)] tried to set [airlock] cyclelinkeddir, but it's already set!") else airlock.cyclelinkeddir = dir else - log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + log_mapping("[src] failed to find an airlock at [AREACOORD(src)]") /obj/effect/mapping_helpers/airlock/locked @@ -126,16 +125,16 @@ /obj/effect/mapping_helpers/airlock/locked/Initialize(mapload) . = ..() if(!mapload) - log_world("### MAP WARNING, [src] spawned outside of mapload!") + log_mapping("[src] spawned outside of mapload!") return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(airlock) if(airlock.locked) - log_world("### MAP WARNING, [src] at [AREACOORD(src)] tried to bolt [airlock] but it's already locked!") + log_mapping("[src] at [AREACOORD(src)] tried to bolt [airlock] but it's already locked!") else airlock.locked = TRUE else - log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + log_mapping("[src] failed to find an airlock at [AREACOORD(src)]") /obj/effect/mapping_helpers/airlock/unres name = "airlock unresctricted side helper" @@ -144,13 +143,13 @@ /obj/effect/mapping_helpers/airlock/unres/Initialize(mapload) . = ..() if(!mapload) - log_world("### MAP WARNING, [src] spawned outside of mapload!") + log_mapping("[src] spawned outside of mapload!") return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in loc if(airlock) airlock.unres_sides ^= dir else - log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + log_mapping("[src] failed to find an airlock at [AREACOORD(src)]") //needs to do its thing before spawn_rivers() is called @@ -164,17 +163,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/turf/T = get_turf(src) T.flags_1 |= NO_LAVA_GEN_1 -/// Adds the map it is on to the z_is_planet list -/obj/effect/mapping_helpers/planet_z - name = "planet z helper" - layer = POINT_LAYER - -/obj/effect/mapping_helpers/planet_z/Initialize() - . = ..() - var/datum/space_level/S = SSmapping.get_level(z) - S.traits[ZTRAIT_PLANET] = TRUE - - //This helper applies components to things on the map directly. /obj/effect/mapping_helpers/component_injector name = "Component Injector" diff --git a/code/modules/mapping/preloader.dm b/code/modules/mapping/preloader.dm index e6fa2421a0..4b61663f66 100644 --- a/code/modules/mapping/preloader.dm +++ b/code/modules/mapping/preloader.dm @@ -8,18 +8,26 @@ GLOBAL_DATUM_INIT(_preloader, /datum/map_preloader, new) var/list/attributes var/target_path -/datum/map_preloader/proc/setup(list/the_attributes, path) +/world/proc/preloader_setup(list/the_attributes, path) if(the_attributes.len) GLOB.use_preloader = TRUE - attributes = the_attributes - target_path = path + var/datum/map_preloader/preloader_local = GLOB._preloader + preloader_local.attributes = the_attributes + preloader_local.target_path = path -/datum/map_preloader/proc/load(atom/what) +/world/proc/preloader_load(atom/what) GLOB.use_preloader = FALSE - for(var/attribute in attributes) - var/value = attributes[attribute] + var/datum/map_preloader/preloader_local = GLOB._preloader + for(var/attribute in preloader_local.attributes) + var/value = preloader_local.attributes[attribute] if(islist(value)) value = deepCopyList(value) + #ifdef TESTING + if(what.vars[attribute] == value) + var/message = "[what.type] at [AREACOORD(what)] - VAR: [attribute] = [isnull(value) ? "null" : (isnum(value) ? value : "\"[value]\"")]" + log_mapping("DIRTY VAR: [message]") + GLOB.dirty_vars += message + #endif what.vars[attribute] = value /area/template_noop diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 22be4aa246..9b27691dd3 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -306,8 +306,8 @@ //first instance the /area and remove it from the members list index = members.len if(members[index] != /area/template_noop) - GLOB._preloader.setup(members_attributes[index])//preloader for assigning set variables on atom creation var/atype = members[index] + world.preloader_setup(members_attributes[index], atype)//preloader for assigning set variables on atom creation var/atom/instance = areaCache[atype] if (!instance) instance = GLOB.areas_by_type[atype] @@ -318,7 +318,7 @@ instance.contents.Add(crds) if(GLOB.use_preloader && instance) - GLOB._preloader.load(instance) + world.preloader_load(instance) //then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect @@ -354,7 +354,7 @@ //Instance an atom at (x,y,z) and gives it the variables in attributes /datum/parsed_map/proc/instance_atom(path,list/attributes, turf/crds, no_changeturf, placeOnTop) - GLOB._preloader.setup(attributes, path) + world.preloader_setup(attributes, path) if(crds) if(ispath(path, /turf)) @@ -368,7 +368,7 @@ . = create_atom(path, crds)//first preloader pass if(GLOB.use_preloader && .)//second preloader pass, for those atoms that don't ..() in New() - GLOB._preloader.load(.) + world.preloader_load(.) //custom CHECK_TICK here because we don't want things created while we're sleeping to not initialize if(TICK_CHECK) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 356c4913b9..10b33cd473 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -67,11 +67,18 @@ new /obj/effect/particle_effect/smoke(get_turf(src)) qdel(src) +//Non-default pods + /obj/item/survivalcapsule/luxury name = "luxury bluespace shelter capsule" desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace." template_id = "shelter_beta" +/obj/item/survivalcapsule/luxuryelite + name = "luxury elite bar capsule" + desc = "A luxury bar in a capsule. Bartender required and not included." + template_id = "shelter_charlie" + //Pod objects //Window diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index ab3b20ac9f..7bef9b652a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -926,7 +926,7 @@ timer = world.time + create_delay + 1 if(do_after(user, create_delay, target = T)) var/old_name = T.name - if(T.TerraformTurf(turf_type)) + if(T.TerraformTurf(turf_type, flags = CHANGETURF_INHERIT_AIR)) user.visible_message("[user] turns \the [old_name] into [transform_string]!") message_admins("[ADMIN_LOOKUPFLW(user)] fired the lava staff at [ADMIN_VERBOSEJMP(T)]") log_game("[key_name(user)] fired the lava staff at [AREACOORD(T)].") @@ -937,7 +937,7 @@ qdel(L) else var/old_name = T.name - if(T.TerraformTurf(reset_turf_type)) + if(T.TerraformTurf(reset_turf_type, flags = CHANGETURF_INHERIT_AIR)) user.visible_message("[user] turns \the [old_name] into [reset_string]!") timer = world.time + reset_cooldown playsound(T,'sound/magic/fireball.ogg', 200, 1) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 79da476719..b5f7bbf8ab 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -50,7 +50,7 @@ /obj/machinery/mineral/ore_redemption/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Smelting [sheet_per_ore] sheet(s) per piece of ore.
    Ore pickup speed at [ore_pickup_rate].
    " + . += "The status display reads: Smelting [sheet_per_ore] sheet(s) per piece of ore.
    Reward point generation at [point_upgrade*100]%.
    Ore pickup speed at [ore_pickup_rate].
    " /obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O) var/datum/component/material_container/mat_container = materials.mat_container @@ -63,7 +63,7 @@ ore_buffer -= O if(O && O.refined_type) - points += O.points * O.amount + points += O.points * point_upgrade * O.amount var/material_amount = mat_container.get_item_material_amount(O) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index a8e867cef0..e5cab4438a 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -54,6 +54,7 @@ new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), + new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxuryelite, 10000), new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800), new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400), new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400), diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index a8b4eab8d2..3e0968eebb 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -58,3 +58,18 @@ . = ..() whitelisted_turfs = typecacheof(/turf/closed/mineral) banned_objects = typecacheof(/obj/structure/stone_tile) + +/datum/map_template/shelter/charlie + name = "Shelter Charlie" + shelter_id = "shelter_charlie" + description = "A luxury elite bar which holds an entire bar \ + along with two vending machines, tables, and a restroom that \ + also has a sink. This isn't a survival capsule and so you can \ + expect that this won't save you if you're bleeding out to \ + death." + mappath = "_maps/templates/shelter_3.dmm" + +/datum/map_template/shelter/charlie/New() + . = ..() + whitelisted_turfs = typecacheof(/turf/closed/mineral) + banned_objects = typecacheof(/obj/structure/stone_tile) \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 7aae26526e..5b664dc01a 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -27,12 +27,7 @@ /datum/preferences/proc/update_preview_icon(equip_job = TRUE) // Determine what job is marked as 'High' priority, and dress them up as such. - var/datum/job/previewJob - var/highest_pref = 0 - for(var/job in job_preferences) - if(job_preferences["[job]"] > highest_pref) - previewJob = SSjob.GetJob(job) - highest_pref = job_preferences["[job]"] + var/datum/job/previewJob = get_highest_job() if(previewJob) // Silicons only need a very basic preview since there is no customization for them. @@ -57,3 +52,11 @@ parent.show_character_previews(new /mutable_appearance(mannequin)) unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) +/datum/preferences/proc/get_highest_job() + var/highest_pref = 0 + var/datum/job/highest_job + for(var/job in job_preferences) + if(job_preferences["[job]"] > highest_pref) + highest_job = SSjob.GetJob(job) + highest_pref = job_preferences["[job]"] + return highest_job diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm index dd66f68e5d..241ec8118e 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -74,4 +74,5 @@ /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' - var/has_color = FALSE \ No newline at end of file + var/has_color = FALSE + var/has_digitigrade = FALSE \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 156cc304a6..a5437aaf39 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -275,6 +275,18 @@ name = "Snow" icon_state = "snow" +/datum/sprite_accessory/insect_fluff/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/insect_fluff/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/insect_fluff/witchwing + name = "Witch Wing" + icon_state = "witchwing" + /datum/sprite_accessory/insect_fluff/colored name = "Colored (Hair)" icon_state = "snow" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/socks.dm b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm index 0a35f0cd26..19ec677a72 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/socks.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm @@ -2,6 +2,9 @@ // Socks Definitions // /////////////////////// +/datum/sprite_accessory/underwear/socks + has_digitigrade = TRUE + /datum/sprite_accessory/underwear/socks/nude name = "Nude" icon_state = null diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm index 3356804cb3..9441b5120a 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm @@ -28,41 +28,49 @@ name = "Boxers" icon_state = "boxers" has_color = TRUE + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/male_bee name = "Boxers - Bee" icon_state = "bee_shorts" + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/male_hearts name = "Boxers - Heart" icon_state = "boxers_heart" + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/male_stripe name = "Boxers - Striped" icon_state = "boxers_striped" + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/male_commie name = "Boxers - Striped Communist" icon_state = "boxers_commie" + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/male_usastripe name = "Boxers - Striped Freedom" icon_state = "boxers_assblastusa" + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/male_uk name = "Boxers - Striped UK" icon_state = "boxers_uk" + has_digitigrade = TRUE gender = MALE /datum/sprite_accessory/underwear/bottom/boxer_briefs name = "Boxer Briefs" icon_state = "boxer_briefs" + has_digitigrade = TRUE has_color = TRUE /datum/sprite_accessory/underwear/bottom/panties @@ -140,6 +148,7 @@ /datum/sprite_accessory/underwear/bottom/longjon name = "Long John Bottoms" icon_state = "ljonb" + has_digitigrade = TRUE has_color = TRUE /datum/sprite_accessory/underwear/bottom/swimsuit_red diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm index 46a123c6bb..9c1eb6a3fa 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -213,4 +213,81 @@ /datum/sprite_accessory/insect_wings/whitefly name = "White Fly" - icon_state = "whitefly" \ No newline at end of file + icon_state = "whitefly" + +/datum/sprite_accessory/insect_wings/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/insect_wings/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/insect_wings/witchwing + name = "Witch Wing" + icon_state = "witchwing" + +//insect markings +/datum/sprite_accessory/insect_markings // Extra markings for insects ported from tg. + icon = 'icons/mob/insect_markings.dmi' + color_src = null + +/datum/sprite_accessory/insect_markings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/insect_markings/reddish + name = "Reddish" + icon_state = "reddish" + +/datum/sprite_accessory/insect_markings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/insect_markings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/insect_markings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/insect_markings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/insect_markings/punished + name = "Punished" + icon_state = "punished" + +/datum/sprite_accessory/insect_markings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/insect_markings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/insect_markings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/insect_markings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/insect_markings/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/insect_markings/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/insect_markings/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/insect_markings/witchwing + name = "Witch Wing" + icon_state = "witchwing" \ No newline at end of file diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index 1b328dbc69..bf86a97574 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -18,3 +18,6 @@ update_icon(preferred_form) updateghostimages() + + client.reenter_round_timeout = max(client.reenter_round_timeout, clientless_round_timeout) + clientless_round_timeout = client.reenter_round_timeout diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 5bdfd174b5..0846cf1ea1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -3,8 +3,6 @@ GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as t GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) -#define CANT_REENTER_ROUND -1 - /mob/dead/observer name = "ghost" desc = "It's a g-g-g-g-ghooooost!" //jinkies! @@ -21,7 +19,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) hud_type = /datum/hud/ghost movement_type = GROUND | FLYING var/can_reenter_corpse - var/reenter_round_timeout = 0 // used to prevent people from coming back through ghost roles/midround antags as they suicide/cryo for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit) + var/clientless_round_timeout = 0 //mobs will lack a client as long as their player is disconnected. See client_defines.dm "reenter_round_timeout" var/datum/hud/living/carbon/hud = null // hud var/bootime = 0 var/started_as_observer //This variable is set to 1 when you enter the game as an observer. @@ -178,7 +176,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) * Hair will always update its dir, so if your sprite has no dirs the haircut will go all over the place. * |- Ricotez */ -/mob/dead/observer/proc/update_icon(new_form) +/mob/dead/observer/update_icon(new_form) + . = ..() if(client) //We update our preferences in case they changed right before update_icon was called. ghost_accs = client.prefs.ghost_accs ghost_others = client.prefs.ghost_others @@ -277,9 +276,16 @@ Works together with spawning an observer, noted above. if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed. penalty += roundstart_quit_limit - world.time if(penalty) - ghost.reenter_round_timeout = world.realtime + penalty - if(ghost.reenter_round_timeout - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) - ghost.reenter_round_timeout = CANT_REENTER_ROUND + penalty += world.realtime + if(penalty - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) + penalty = CANT_REENTER_ROUND + if(client) + client.reenter_round_timeout = penalty + else //A disconnected player (quite likely for cryopods) + ghost.clientless_round_timeout = penalty + if (client && client.prefs && client.prefs.auto_ooc) + if (!(client.prefs.chat_toggles & CHAT_OOC)) + client.prefs.chat_toggles ^= CHAT_OOC transfer_ckey(ghost, FALSE) return ghost @@ -338,10 +344,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ghostize(0, penalize = TRUE) /mob/dead/observer/proc/can_reenter_round(silent = FALSE) - if(reenter_round_timeout != CANT_REENTER_ROUND && reenter_round_timeout <= world.realtime) + var/timeout = clientless_round_timeout + if(client) + timeout = client.reenter_round_timeout + if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime) return TRUE - if(!silent) - to_chat(src, "You are unable to reenter the round[reenter_round_timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(reenter_round_timeout - world.realtime)]" : ""].") + if(!silent && client) + to_chat(src, "You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].") return FALSE /mob/dead/observer/Move(NewLoc, direct) @@ -897,5 +906,3 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp spawners_menu = new(src) spawners_menu.ui_interact(src) - -#undef CANT_REENTER_ROUND \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index b9e27c0637..bdc691ce49 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -6,21 +6,21 @@ return 2 //no ears /mob/living/carbon/alien/hitby(atom/movable/AM, skipcatch, hitpush) - ..(AM, skipcatch = TRUE, hitpush = FALSE) + return ..(AM, skipcatch = TRUE, hitpush = FALSE) +/mob/living/carbon/alien/can_embed(obj/item/I) + return FALSE /*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other. As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble. In all, this is a lot like the monkey code. /N */ /mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M) - if(isturf(loc) && istype(loc.loc, /area/start)) - to_chat(M, "No attacking people at spawn, you jackass.") + . = ..() + if(!.) // the attack was blocked or was help/grab intent return - switch(M.a_intent) - - if ("help") + if (INTENT_HELP) if(!recoveringstam) resting = 0 AdjustStun(-60) @@ -28,11 +28,7 @@ In all, this is a lot like the monkey code. /N AdjustUnconscious(-60) AdjustSleeping(-100) visible_message("[M.name] nuzzles [src] trying to wake [p_them()] up!") - - if ("grab") - grabbedby(M) - - else + if(INTENT_DISARM, INTENT_HARM) if(health > 0) M.do_attack_animation(src, ATTACK_EFFECT_BITE) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) @@ -50,28 +46,31 @@ In all, this is a lot like the monkey code. /N /mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M) - if(..()) //to allow surgery to return properly. - return 0 - + . = ..() + if(.) //To allow surgery to return properly. + return switch(M.a_intent) - if("help") + if(INTENT_HELP) help_shake_act(M) - if("grab") + if(INTENT_GRAB) grabbedby(M) - if ("harm") + if (INTENT_HARM) + if(HAS_TRAIT(M, TRAIT_PACIFISM)) + to_chat(M, "You don't want to hurt [src]!") + return TRUE M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - return 1 - if("disarm") + if(INTENT_DISARM) + if(HAS_TRAIT(M, TRAIT_PACIFISM)) + to_chat(M, "You don't want to hurt [src]!") + return TRUE M.do_attack_animation(src, ATTACK_EFFECT_DISARM) - return 1 - return 0 /mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M) - if(..()) - if (stat != DEAD) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - apply_damage(rand(1, 3), BRUTE, affecting) + . = ..() + if(.) //successful monkey bite. + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + apply_damage(rand(1, 3), BRUTE, affecting) /mob/living/carbon/alien/attack_animal(mob/living/simple_animal/M) @@ -93,13 +92,15 @@ In all, this is a lot like the monkey code. /N adjustStaminaLoss(damage) /mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - var/damage = rand(5, 35) - if(M.is_adult) - damage = rand(10, 40) - adjustBruteLoss(damage) - log_combat(M, src, "attacked") - updatehealth() + . = ..() + if(!.) //unsuccessful slime attack + return + var/damage = rand(5, 35) + if(M.is_adult) + damage = rand(10, 40) + adjustBruteLoss(damage) + log_combat(M, src, "attacked") + updatehealth() /mob/living/carbon/alien/ex_act(severity, target, origin) if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index fe682b5c99..d1ed09665b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -63,12 +63,7 @@ if(A) if(isliving(A)) var/mob/living/L = A - var/blocked = FALSE - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(H.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) - blocked = TRUE - if(!blocked) + if(!L.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") L.Knockdown(100) sleep(2)//Runtime prevention (infinite bump() calls on hulks) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index b3839a6033..1d613db07a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -5,9 +5,11 @@ else ..() -/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) +/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) - ..(user, 1) + . = ..(user, TRUE) + if(.) + return adjustBruteLoss(15) var/hitverb = "punched" if(mob_size < MOB_SIZE_LARGE) @@ -21,46 +23,46 @@ return 1 /mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M) - if(..()) - switch(M.a_intent) - if ("harm") - var/damage = rand(1, 9) - if (prob(90)) - playsound(loc, "punch", 25, 1, -1) - visible_message("[M] has punched [src]!", \ - "[M] has punched [src]!", null, COMBAT_MESSAGE_RANGE) - if ((stat != DEAD) && (damage > 9 || prob(5)))//Regular humans have a very small chance of knocking an alien down. - Unconscious(40) - visible_message("[M] has knocked [src] down!", \ - "[M] has knocked [src] down!") - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - apply_damage(damage, BRUTE, affecting) - log_combat(M, src, "attacked") + . = ..() + if(.) //To allow surgery to return properly. + return + switch(M.a_intent) + if (INTENT_HARM) + var/damage = rand(1, 9) + if (prob(90)) + playsound(loc, "punch", 25, 1, -1) + visible_message("[M] has punched [src]!", \ + "[M] has punched [src]!", null, COMBAT_MESSAGE_RANGE) + if ((stat != DEAD) && (damage > 9 || prob(5)))//Regular humans have a very small chance of knocking an alien down. + Unconscious(40) + visible_message("[M] has knocked [src] down!", \ + "[M] has knocked [src] down!") + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + apply_damage(damage, BRUTE, affecting) + log_combat(M, src, "attacked") + else + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message("[M] has attempted to punch [src]!", \ + "[M] has attempted to punch [src]!", null, COMBAT_MESSAGE_RANGE) + + if (INTENT_DISARM) + if (!lying) + if (prob(5)) + Unconscious(40) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + log_combat(M, src, "pushed") + visible_message("[M] has pushed down [src]!", \ + "[M] has pushed down [src]!") else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to punch [src]!", \ - "[M] has attempted to punch [src]!", null, COMBAT_MESSAGE_RANGE) - - if ("disarm") - if (!lying) - if (prob(5)) - Unconscious(40) + if (prob(50)) + dropItemToGround(get_active_held_item()) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - log_combat(M, src, "pushed") - visible_message("[M] has pushed down [src]!", \ - "[M] has pushed down [src]!") + visible_message("[M] has disarmed [src]!", \ + "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) else - if (prob(50)) - dropItemToGround(get_active_held_item()) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - visible_message("[M] has disarmed [src]!", \ - "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to disarm [src]!",\ - "[M] has attempted to disarm [src]!", null, COMBAT_MESSAGE_RANGE) - - + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message("[M] has attempted to disarm [src]!",\ + "[M] has attempted to disarm [src]!", null, COMBAT_MESSAGE_RANGE) /mob/living/carbon/alien/humanoid/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!no_effect && !visual_effect_icon) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index e1e079cbae..8e1e5aab8d 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -14,10 +14,9 @@ var/max_grown = 100 var/time_of_birth - rotate_on_lying = 0 + rotate_on_lying = FALSE bodyparts = list(/obj/item/bodypart/chest/larva, /obj/item/bodypart/head/larva) - //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/Initialize() diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index 69c1be707d..7dabcf5abf 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -1,26 +1,33 @@ /mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/M) - if(..()) - var/damage = rand(1, 9) - if (prob(90)) - playsound(loc, "punch", 25, 1, -1) - log_combat(M, src, "attacked") - visible_message("[M] has kicked [src]!", \ - "[M] has kicked [src]!", null, COMBAT_MESSAGE_RANGE) - if ((stat != DEAD) && (damage > 4.9)) - Unconscious(rand(100,200)) + . = ..() + if(. || M.a_intent == INTENT_HELP || M.a_intent == INTENT_GRAB) + return + var/damage = rand(1, 9) + if (prob(90)) + playsound(loc, "punch", 25, 1, -1) + log_combat(M, src, "attacked") + visible_message("[M] has kicked [src]!", \ + "[M] has kicked [src]!", null, COMBAT_MESSAGE_RANGE) + if ((stat != DEAD) && (damage > 4.9)) + Unconscious(rand(100,200)) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - apply_damage(damage, BRUTE, affecting) - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to kick [src]!", \ - "[M] has attempted to kick [src]!", null, COMBAT_MESSAGE_RANGE) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + apply_damage(damage, BRUTE, affecting) + else + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message("[M] has attempted to kick [src]!", \ + "[M] has attempted to kick [src]!", null, COMBAT_MESSAGE_RANGE) -/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) +/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) - ..(user, 1) + . = ..(user, TRUE) + if(.) + return + playsound(loc, "punch", 25, 1, -1) + visible_message("[user] has pummeled [src]!", \ + "[user] has pummeled [src]!", null, COMBAT_MESSAGE_RANGE) adjustBruteLoss(5 + rand(1,9)) new /datum/forced_movement(src, get_step_away(user,src, 30), 1) return 1 diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 0bfd23cbff..c08fe4f582 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -103,15 +103,17 @@ new_xeno.notransform = 0 new_xeno.invisibility = 0 + var/mob/living/carbon/old_owner = owner if(kill_on_sucess) //ITS TOO LATE new_xeno.visible_message("[new_xeno] bursts out of [owner]!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!") owner.apply_damage(rand(100,300),BRUTE,zone,FALSE) //Random high damage to torso so health sensors don't metagame. - owner.spill_organs(TRUE,FALSE,TRUE) //Lets still make the death gruesome and impossible to just simply defib someone. + var/obj/item/bodypart/B = owner.get_bodypart(zone) + B.drop_organs(owner) //Lets still make the death gruesome and impossible to just simply defib someone. owner.death(FALSE) //Just in case some freak occurance occurs where you somehow survive all your organs being removed from you and the 100-300 brute damage. else //When it is removed via surgery at a late stage, rather than forced. new_xeno.visible_message("[new_xeno] wriggles out of [owner]!", "You exit [owner], your previous host.") owner.adjustBruteLoss(40) - owner.cut_overlay(overlay) + old_owner.cut_overlay(overlay) qdel(src) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3a9495a5cb..102bc6fc3d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1,963 +1,991 @@ -/mob/living/carbon - blood_volume = BLOOD_VOLUME_NORMAL - -/mob/living/carbon/Initialize() - . = ..() - create_reagents(1000) - update_body_parts() //to update the carbon's new bodyparts appearance - GLOB.carbon_list += src - blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio) - -/mob/living/carbon/Destroy() - //This must be done first, so the mob ghosts correctly before DNA etc is nulled - . = ..() - - QDEL_LIST(internal_organs) - QDEL_LIST(stomach_contents) - QDEL_LIST(bodyparts) - QDEL_LIST(implants) - remove_from_all_data_huds() - QDEL_NULL(dna) - GLOB.carbon_list -= src - -/mob/living/carbon/initialize_footstep() - AddComponent(/datum/component/footstep, 0.6, 2) - -/mob/living/carbon/relaymove(mob/user, direction) - if(user in src.stomach_contents) - if(prob(40)) - if(prob(25)) - audible_message("You hear something rumbling inside [src]'s stomach...", \ - "You hear something rumbling.", 4,\ - "Something is rumbling inside your stomach!") - var/obj/item/I = user.get_active_held_item() - if(I && I.force) - var/d = rand(round(I.force / 4), I.force) - var/obj/item/bodypart/BP = get_bodypart(BODY_ZONE_CHEST) - if(BP.receive_damage(d, 0)) - update_damage_overlays() - visible_message("[user] attacks [src]'s stomach wall with the [I.name]!", \ - "[user] attacks your stomach wall with the [I.name]!") - playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) - - if(prob(src.getBruteLoss() - 50)) - for(var/atom/movable/A in stomach_contents) - A.forceMove(drop_location()) - stomach_contents.Remove(A) - src.gib() - - -/mob/living/carbon/swap_hand(held_index) - if(!held_index) - held_index = (active_hand_index % held_items.len)+1 - - var/obj/item/item_in_hand = src.get_active_held_item() - if(item_in_hand) //this segment checks if the item in your hand is twohanded. - var/obj/item/twohanded/TH = item_in_hand - if(istype(TH)) - if(TH.wielded == 1) - to_chat(usr, "Your other hand is too busy holding [TH]") - return - var/oindex = active_hand_index - active_hand_index = held_index - if(hud_used) - var/obj/screen/inventory/hand/H - H = hud_used.hand_slots["[oindex]"] - if(H) - H.update_icon() - H = hud_used.hand_slots["[held_index]"] - if(H) - H.update_icon() - - -/mob/living/carbon/activate_hand(selhand) //l/r OR 1-held_items.len - if(!selhand) - selhand = (active_hand_index % held_items.len)+1 - - if(istext(selhand)) - selhand = lowertext(selhand) - if(selhand == "right" || selhand == "r") - selhand = 2 - if(selhand == "left" || selhand == "l") - selhand = 1 - - if(selhand != active_hand_index) - swap_hand(selhand) - else - mode() // Activate held item - -/mob/living/carbon/attackby(obj/item/I, mob/user, params) - if(lying && surgeries.len) - if(user != src && (user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM)) - for(var/datum/surgery/S in surgeries) - if(S.next_step(user,user.a_intent)) - return 1 - return ..() - -/mob/living/carbon/throw_impact(atom/hit_atom, throwingdatum) - . = ..() - var/hurt = TRUE - if(istype(throwingdatum, /datum/thrownthing)) - var/datum/thrownthing/D = throwingdatum - if(iscyborg(D.thrower)) - var/mob/living/silicon/robot/R = D.thrower - if(!R.emagged) - hurt = FALSE - if(hit_atom.density && isturf(hit_atom)) - if(hurt) - Knockdown(20) - take_bodypart_damage(10) - if(iscarbon(hit_atom) && hit_atom != src) - var/mob/living/carbon/victim = hit_atom - if(victim.movement_type & FLYING) - return - if(hurt) - victim.take_bodypart_damage(10) - take_bodypart_damage(10) - victim.Knockdown(20) - Knockdown(20) - visible_message("[src] crashes into [victim], knocking them both over!",\ - "You violently crash into [victim]!") - playsound(src,'sound/weapons/punch1.ogg',50,1) - - -//Throwing stuff -/mob/living/carbon/proc/toggle_throw_mode() - if(stat) - return - if(in_throw_mode) - throw_mode_off() - else - throw_mode_on() - - -/mob/living/carbon/proc/throw_mode_off() - in_throw_mode = 0 - if(client && hud_used) - hud_used.throw_icon.icon_state = "act_throw_off" - - -/mob/living/carbon/proc/throw_mode_on() - in_throw_mode = 1 - if(client && hud_used) - hud_used.throw_icon.icon_state = "act_throw_on" - -/mob/proc/throw_item(atom/target) - SEND_SIGNAL(src, COMSIG_MOB_THROW, target) - return - -/mob/living/carbon/throw_item(atom/target) - throw_mode_off() - if(!target || !isturf(loc)) - return - if(istype(target, /obj/screen)) - return - - //CIT CHANGES - makes it impossible to throw while in stamina softcrit - if(getStaminaLoss() >= STAMINA_SOFTCRIT) - to_chat(src, "You're too exhausted.") - return - //END OF CIT CHANGES - - var/atom/movable/thrown_thing - var/obj/item/I = src.get_active_held_item() - - if(!I) - if(pulling && isliving(pulling) && grab_state >= GRAB_AGGRESSIVE) - var/mob/living/throwable_mob = pulling - if(!throwable_mob.buckled) - thrown_thing = throwable_mob - stop_pulling() - if(HAS_TRAIT(src, TRAIT_PACIFISM)) - to_chat(src, "You gently let go of [throwable_mob].") - return - adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring - var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors - var/turf/end_T = get_turf(target) - if(start_T && end_T) - log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]") - - else if(!CHECK_BITFIELD(I.item_flags, ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP)) - thrown_thing = I - dropItemToGround(I) - - if(HAS_TRAIT(src, TRAIT_PACIFISM) && I.throwforce) - to_chat(src, "You set [I] down gently on the ground.") - return - - adjustStaminaLossBuffered(I.getweight()*2)//CIT CHANGE - throwing items shall be more tiring than swinging em. Doubly so. - - if(thrown_thing) - visible_message("[src] has thrown [thrown_thing].") - src.log_message("has thrown [thrown_thing]", LOG_ATTACK) - do_attack_animation(target, no_effect = 1) - playsound(loc, 'sound/weapons/punchmiss.ogg', 50, 1, -1) - newtonian_move(get_dir(target, src)) - thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src) - -/mob/living/carbon/restrained(ignore_grab) - . = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE)) - -/mob/living/carbon/proc/canBeHandcuffed() - return 0 - - -/mob/living/carbon/show_inv(mob/user) - user.set_machine(src) - var/dat = {" -
    - [name] -
    -
    Head: [(head && !(head.item_flags & ABSTRACT)) ? head : "Nothing"] -
    Mask: [(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Nothing"] -
    Neck: [(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Nothing"]"} - - for(var/i in 1 to held_items.len) - var/obj/item/I = get_item_for_held_index(i) - dat += "
    [get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Nothing"]" - - dat += "
    Back: [back ? back : "Nothing"]" - - if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank)) - dat += "
    [internal ? "Disable Internals" : "Set Internals"]" - - if(handcuffed) - dat += "
    Handcuffed" - if(legcuffed) - dat += "
    Legcuffed" - - dat += {" -
    -
    Close - "} - user << browse(dat, "window=mob[REF(src)];size=325x500") - onclose(user, "mob[REF(src)]") - -/mob/living/carbon/Topic(href, href_list) - ..() - //strip panel - if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - if(href_list["internal"]) - var/slot = text2num(href_list["internal"]) - var/obj/item/ITEM = get_item_by_slot(slot) - if(ITEM && istype(ITEM, /obj/item/tank) && wear_mask && (wear_mask.clothing_flags & ALLOWINTERNALS)) - visible_message("[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].", \ - "[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].") - if(do_mob(usr, src, POCKET_STRIP_DELAY)) - if(internal) - internal = null - update_internals_hud_icon(0) - else if(ITEM && istype(ITEM, /obj/item/tank)) - if((wear_mask && (wear_mask.clothing_flags & ALLOWINTERNALS)) || getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - internal = ITEM - update_internals_hud_icon(1) - - visible_message("[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].", \ - "[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].") - - -/mob/living/carbon/fall(forced) - loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing - -/mob/living/carbon/is_muzzled() - return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) - -/mob/living/carbon/hallucinating() - if(hallucination) - return TRUE - else - return FALSE - -/mob/living/carbon/resist_buckle() - if(restrained()) - changeNext_move(CLICK_CD_BREAKOUT) - last_special = world.time + CLICK_CD_BREAKOUT - var/buckle_cd = 600 - if(handcuffed) - var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED) - buckle_cd = O.breakouttime - visible_message("[src] attempts to unbuckle [p_them()]self!", \ - "You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)") - if(do_after(src, buckle_cd, 0, target = src)) - if(!buckled) - return - buckled.user_unbuckle_mob(src,src) - else - if(src && buckled) - to_chat(src, "You fail to unbuckle yourself!") - else - buckled.user_unbuckle_mob(src,src) - -/mob/living/carbon/resist_fire() - fire_stacks -= 5 - Knockdown(60, TRUE, TRUE) - spin(32,2) - visible_message("[src] rolls on the floor, trying to put [p_them()]self out!", \ - "You stop, drop, and roll!") - sleep(30) - if(fire_stacks <= 0) - visible_message("[src] has successfully extinguished [p_them()]self!", \ - "You extinguish yourself.") - ExtinguishMob() - return - -/mob/living/carbon/resist_restraints() - var/obj/item/I = null - var/type = 0 - if(handcuffed) - I = handcuffed - type = 1 - else if(legcuffed) - I = legcuffed - type = 2 - if(I) - if(type == 1) - changeNext_move(CLICK_CD_BREAKOUT) - last_special = world.time + CLICK_CD_BREAKOUT - if(type == 2) - changeNext_move(CLICK_CD_RANGE) - last_special = world.time + CLICK_CD_RANGE - cuff_resist(I) - - -/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0) - if(I.item_flags & BEING_REMOVED) - to_chat(src, "You're already attempting to remove [I]!") - return - I.item_flags |= BEING_REMOVED - breakouttime = I.breakouttime - if(!cuff_break) - visible_message("[src] attempts to remove [I]!") - to_chat(src, "You attempt to remove [I]... (This will take around [DisplayTimeText(breakouttime)] and you need to stand still.)") - if(do_after(src, breakouttime, 0, target = src)) - clear_cuffs(I, cuff_break) - else - to_chat(src, "You fail to remove [I]!") - - else if(cuff_break == FAST_CUFFBREAK) - breakouttime = 50 - visible_message("[src] is trying to break [I]!") - to_chat(src, "You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)") - if(do_after(src, breakouttime, 0, target = src)) - clear_cuffs(I, cuff_break) - else - to_chat(src, "You fail to break [I]!") - - else if(cuff_break == INSTANT_CUFFBREAK) - clear_cuffs(I, cuff_break) - I.item_flags &= ~BEING_REMOVED - -/mob/living/carbon/proc/uncuff() - if (handcuffed) - var/obj/item/W = handcuffed - handcuffed = null - if (buckled && buckled.buckle_requires_restraints) - buckled.unbuckle_mob(src) - update_handcuffed() - if (client) - client.screen -= W - if (W) - W.forceMove(drop_location()) - W.dropped(src) - if (W) - W.layer = initial(W.layer) - W.plane = initial(W.plane) - changeNext_move(0) - if (legcuffed) - var/obj/item/W = legcuffed - legcuffed = null - update_inv_legcuffed() - if (client) - client.screen -= W - if (W) - W.forceMove(drop_location()) - W.dropped(src) - if (W) - W.layer = initial(W.layer) - W.plane = initial(W.plane) - changeNext_move(0) - -/mob/living/carbon/proc/clear_cuffs(obj/item/I, cuff_break) - if(!I.loc || buckled) - return - visible_message("[src] manages to [cuff_break ? "break" : "remove"] [I]!") - to_chat(src, "You successfully [cuff_break ? "break" : "remove"] [I].") - - if(cuff_break) - . = !((I == handcuffed) || (I == legcuffed)) - qdel(I) - return - - else - if(I == handcuffed) - handcuffed.forceMove(drop_location()) - handcuffed.dropped(src) - handcuffed = null - if(buckled && buckled.buckle_requires_restraints) - buckled.unbuckle_mob(src) - update_handcuffed() - return - if(I == legcuffed) - legcuffed.forceMove(drop_location()) - legcuffed.dropped() - legcuffed = null - update_inv_legcuffed() - return - else - dropItemToGround(I) - return - return TRUE - -/mob/living/carbon/get_standard_pixel_y_offset(lying = 0) - if(lying) - return -6 - else - return initial(pixel_y) - -/mob/living/carbon/proc/accident(obj/item/I) - if(!I || (I.item_flags & ABSTRACT) || HAS_TRAIT(I, TRAIT_NODROP)) - return - - //dropItemToGround(I) CIT CHANGE - makes it so the item doesn't drop if the modifier rolls above 100 - - var/modifier = 0 - - if(HAS_TRAIT(src, TRAIT_CLUMSY)) - modifier -= 40 //Clumsy people are more likely to hit themselves -Honk! - - //CIT CHANGES START HERE - else if(combatmode) - modifier += 50 - - if(modifier < 100) - dropItemToGround(I) - //END OF CIT CHANGES - - switch(rand(1,100)+modifier) //91-100=Nothing special happens - if(-INFINITY to 0) //attack yourself - I.attack(src,src) - if(1 to 30) //throw it at yourself - I.throw_impact(src) - if(31 to 60) //Throw object in facing direction - var/turf/target = get_turf(loc) - var/range = rand(2,I.throw_range) - for(var/i = 1; i < range; i++) - var/turf/new_turf = get_step(target, dir) - target = new_turf - if(new_turf.density) - break - I.throw_at(target,I.throw_range,I.throw_speed,src) - if(61 to 90) //throw it down to the floor - var/turf/target = get_turf(loc) - I.throw_at(target,I.throw_range,I.throw_speed,src) - -/mob/living/carbon/Stat() - ..() - if(statpanel("Status")) - var/obj/item/organ/alien/plasmavessel/vessel = getorgan(/obj/item/organ/alien/plasmavessel) - if(vessel) - stat(null, "Plasma Stored: [vessel.storedPlasma]/[vessel.max_plasma]") - if(locate(/obj/item/assembly/health) in src) - stat(null, "Health: [health]") - - add_abilities_to_panel() - -/mob/living/carbon/attack_ui(slot) - if(!has_hand_for_held_index(active_hand_index)) - return 0 - return ..() - -/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE) - if(HAS_TRAIT(src, TRAIT_NOHUNGER)) - return 1 - - if(nutrition < 100 && !blood) - if(message) - visible_message("[src] dry heaves!", \ - "You try to throw up, but there's nothing in your stomach!") - if(stun) - Knockdown(200) - return 1 - - if(is_mouth_covered()) //make this add a blood/vomit overlay later it'll be hilarious - if(message) - visible_message("[src] throws up all over [p_them()]self!", \ - "You throw up all over yourself!") - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomitself) - distance = 0 - else - if(message) - visible_message("[src] throws up!", "You throw up!") - if(!isflyperson(src)) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomit) - if(stun) - Stun(80) - - playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1) - var/turf/T = get_turf(src) - if(!blood) - nutrition -= lost_nutrition - adjustToxLoss(-3) - for(var/i=0 to distance) - if(blood) - if(T) - add_splatter_floor(T) - if(stun) - adjustBruteLoss(3) - else if(src.reagents.has_reagent("blazaam")) - if(T) - T.add_vomit_floor(src, VOMIT_PURPLE) - else - if(T) - T.add_vomit_floor(src, VOMIT_TOXIC)//toxic barf looks different - T = get_step(T, dir) - if (is_blocked_turf(T)) - break - return 1 - -/mob/living/carbon/proc/spew_organ(power = 5, amt = 1) - for(var/i in 1 to amt) - if(!internal_organs.len) - break //Guess we're out of organs! - var/obj/item/organ/guts = pick(internal_organs) - var/turf/T = get_turf(src) - guts.Remove(src) - guts.forceMove(T) - var/atom/throw_target = get_edge_target_turf(guts, dir) - guts.throw_at(throw_target, power, 4, src) - - -/mob/living/carbon/fully_replace_character_name(oldname,newname) - ..() - if(dna) - dna.real_name = real_name - -//Updates the mob's health from bodyparts and mob damage variables -/mob/living/carbon/updatehealth() - if(status_flags & GODMODE) - return - var/total_burn = 0 - var/total_brute = 0 - var/total_stamina = 0 - for(var/X in bodyparts) //hardcoded to streamline things a bit - var/obj/item/bodypart/BP = X - total_brute += (BP.brute_dam * BP.body_damage_coeff) - total_burn += (BP.burn_dam * BP.body_damage_coeff) - total_stamina += (BP.stamina_dam * BP.stam_damage_coeff) - health = round(maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute, DAMAGE_PRECISION) - staminaloss = round(total_stamina, DAMAGE_PRECISION) - update_stat() - if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD) && stat == DEAD ) - become_husk("burn") - med_hud_set_health() - if(stat == SOFT_CRIT) - add_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE, multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN) - else - remove_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE) - -/mob/living/carbon/update_stamina() - var/stam = getStaminaLoss() - if(stam > DAMAGE_PRECISION) - var/total_health = (health - stam) - if(total_health <= crit_threshold && !stat) - if(!IsKnockdown()) - to_chat(src, "You're too exhausted to keep going...") - Knockdown(100) - update_health_hud() - -/mob/living/carbon/update_sight() - if(!client) - return - if(stat == DEAD) - sight = (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_OBSERVER - return - - sight = initial(sight) - lighting_alpha = initial(lighting_alpha) - var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) - if(!E) - update_tint() - else - see_invisible = E.see_invisible - see_in_dark = E.see_in_dark - sight |= E.sight_flags - if(!isnull(E.lighting_alpha)) - lighting_alpha = E.lighting_alpha - - if(client.eye && client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - if(glasses) - var/obj/item/clothing/glasses/G = glasses - sight |= G.vision_flags - see_in_dark = max(G.darkness_view, see_in_dark) - if(G.invis_override) - see_invisible = G.invis_override - else - see_invisible = min(G.invis_view, see_invisible) - if(!isnull(G.lighting_alpha)) - lighting_alpha = min(lighting_alpha, G.lighting_alpha) - if(dna) - for(var/X in dna.mutations) - var/datum/mutation/M = X - if(M.name == XRAY) - sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_in_dark = max(see_in_dark, 8) - - if(see_override) - see_invisible = see_override - . = ..() - - -//to recalculate and update the mob's total tint from tinted equipment it's wearing. -/mob/living/carbon/proc/update_tint() - if(!GLOB.tinted_weldhelh) - return - tinttotal = get_total_tint() - if(tinttotal >= TINT_BLIND) - become_blind(EYES_COVERED) - else if(tinttotal >= TINT_DARKENED) - cure_blind(EYES_COVERED) - overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2) - else - cure_blind(EYES_COVERED) - clear_fullscreen("tint", 0) - -/mob/living/carbon/proc/get_total_tint() - . = 0 - if(istype(head, /obj/item/clothing/head)) - var/obj/item/clothing/head/HT = head - . += HT.tint - if(wear_mask) - . += wear_mask.tint - - var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) - if(E) - . += E.tint - - else - . += INFINITY - -/mob/living/carbon/get_permeability_protection(list/target_zones = list(HANDS,CHEST,GROIN,LEGS,FEET,ARMS,HEAD)) - var/list/tally = list() - for(var/obj/item/I in get_equipped_items()) - for(var/zone in target_zones) - if(I.body_parts_covered & zone) - tally["[zone]"] = max(1 - I.permeability_coefficient, target_zones["[zone]"]) - var/protection = 0 - for(var/key in tally) - protection += tally[key] - protection *= INVERSE(target_zones.len) - return protection - -//this handles hud updates -/mob/living/carbon/update_damage_hud() - - if(!client) - return - - if(health <= crit_threshold) - var/severity = 0 - switch(health) - if(-20 to -10) - severity = 1 - if(-30 to -20) - severity = 2 - if(-40 to -30) - severity = 3 - if(-50 to -40) - severity = 4 - if(-50 to -40) - severity = 5 - if(-60 to -50) - severity = 6 - if(-70 to -60) - severity = 7 - if(-90 to -70) - severity = 8 - if(-95 to -90) - severity = 9 - if(-INFINITY to -95) - severity = 10 - if(!InFullCritical()) - var/visionseverity = 4 - switch(health) - if(-8 to -4) - visionseverity = 5 - if(-12 to -8) - visionseverity = 6 - if(-16 to -12) - visionseverity = 7 - if(-20 to -16) - visionseverity = 8 - if(-24 to -20) - visionseverity = 9 - if(-INFINITY to -24) - visionseverity = 10 - overlay_fullscreen("critvision", /obj/screen/fullscreen/crit/vision, visionseverity) - else - clear_fullscreen("critvision") - overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity) - else - clear_fullscreen("crit") - clear_fullscreen("critvision") - - //Oxygen damage overlay - var/windedup = getOxyLoss() + getStaminaLoss() * 0.2 - if(windedup) - var/severity = 0 - switch(windedup) - if(10 to 20) - severity = 1 - if(20 to 25) - severity = 2 - if(25 to 30) - severity = 3 - if(30 to 35) - severity = 4 - if(35 to 40) - severity = 5 - if(40 to 45) - severity = 6 - if(45 to INFINITY) - severity = 7 - overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity) - else - clear_fullscreen("oxy") - - //Fire and Brute damage overlay (BSSR) - var/hurtdamage = getBruteLoss() + getFireLoss() + damageoverlaytemp - if(hurtdamage) - var/severity = 0 - switch(hurtdamage) - if(5 to 15) - severity = 1 - if(15 to 30) - severity = 2 - if(30 to 45) - severity = 3 - if(45 to 70) - severity = 4 - if(70 to 85) - severity = 5 - if(85 to INFINITY) - severity = 6 - overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) - else - clear_fullscreen("brute") - -/mob/living/carbon/update_health_hud(shown_health_amount) - if(!client || !hud_used) - return - if(hud_used.healths) - if(stat != DEAD) - . = 1 - if(!shown_health_amount) - shown_health_amount = health - if(shown_health_amount >= maxHealth) - hud_used.healths.icon_state = "health0" - else if(shown_health_amount > maxHealth*0.8) - hud_used.healths.icon_state = "health1" - else if(shown_health_amount > maxHealth*0.6) - hud_used.healths.icon_state = "health2" - else if(shown_health_amount > maxHealth*0.4) - hud_used.healths.icon_state = "health3" - else if(shown_health_amount > maxHealth*0.2) - hud_used.healths.icon_state = "health4" - else if(shown_health_amount > 0) - hud_used.healths.icon_state = "health5" - else - hud_used.healths.icon_state = "health6" - else - hud_used.healths.icon_state = "health7" - -/mob/living/carbon/proc/update_internals_hud_icon(internal_state = 0) - if(hud_used && hud_used.internals) - hud_used.internals.icon_state = "internal[internal_state]" - -/mob/living/carbon/update_stat() - if(status_flags & GODMODE) - return - if(stat != DEAD) - if(health <= HEALTH_THRESHOLD_DEAD && !HAS_TRAIT(src, TRAIT_NODEATH)) - death() - return - if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (HAS_TRAIT(src, TRAIT_DEATHCOMA)) || (health <= HEALTH_THRESHOLD_FULLCRIT && !HAS_TRAIT(src, TRAIT_NOHARDCRIT))) - stat = UNCONSCIOUS - blind_eyes(1) - if(combatmode) - toggle_combat_mode(TRUE, TRUE) - else - if(health <= crit_threshold && !HAS_TRAIT(src, TRAIT_NOSOFTCRIT)) - stat = SOFT_CRIT - if(combatmode) - toggle_combat_mode(TRUE, TRUE) - else - stat = CONSCIOUS - adjust_blindness(-1) - update_canmove() - update_damage_hud() - update_health_hud() - med_hud_set_status() - -//called when we get cuffed/uncuffed -/mob/living/carbon/proc/update_handcuffed() - if(handcuffed) - drop_all_held_items() - stop_pulling() - throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) - if(handcuffed.demoralize_criminals) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) - else - clear_alert("handcuffed") - SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed") - update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. - update_inv_handcuffed() - update_hud_handcuffed() - -/mob/living/carbon/fully_heal(admin_revive = FALSE) - if(reagents) - reagents.clear_reagents() - var/obj/item/organ/brain/B = getorgan(/obj/item/organ/brain) - if(B) - B.brain_death = FALSE - for(var/thing in diseases) - var/datum/disease/D = thing - if(D.severity != DISEASE_SEVERITY_POSITIVE) - D.cure(FALSE) - if(admin_revive) - regenerate_limbs() - regenerate_organs() - handcuffed = initial(handcuffed) - for(var/obj/item/restraints/R in contents) //actually remove cuffs from inventory - qdel(R) - update_handcuffed() - if(reagents) - reagents.addiction_list = list() - cure_all_traumas(TRAUMA_RESILIENCE_MAGIC) - ..() - // heal ears after healing traits, since ears check TRAIT_DEAF trait - // when healing. - restoreEars() - -/mob/living/carbon/can_be_revived() - . = ..() - if(!getorgan(/obj/item/organ/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling))) - return 0 - -/mob/living/carbon/harvest(mob/living/user) - if(QDELETED(src)) - return - var/organs_amt = 0 - for(var/X in internal_organs) - var/obj/item/organ/O = X - if(prob(50)) - organs_amt++ - O.Remove(src) - O.forceMove(drop_location()) - if(organs_amt) - to_chat(user, "You retrieve some of [src]\'s internal organs!") - -/mob/living/carbon/ExtinguishMob() - for(var/X in get_equipped_items()) - var/obj/item/I = X - I.acid_level = 0 //washes off the acid on our clothes - I.extinguish() //extinguishes our clothes - ..() - -/mob/living/carbon/fakefire(var/fire_icon = "Generic_mob_burning") - var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) - new_fire_overlay.appearance_flags = RESET_COLOR - overlays_standing[FIRE_LAYER] = new_fire_overlay - apply_overlay(FIRE_LAYER) - -/mob/living/carbon/fakefireextinguish() - remove_overlay(FIRE_LAYER) - - -/mob/living/carbon/proc/devour_mob(mob/living/carbon/C, devour_time = 130) - C.visible_message("[src] is attempting to devour [C]!", \ - "[src] is attempting to devour you!") - if(!do_mob(src, C, devour_time)) - return - if(pulling && pulling == C && grab_state >= GRAB_AGGRESSIVE && a_intent == INTENT_GRAB) - C.visible_message("[src] devours [C]!", \ - "[src] devours you!") - C.forceMove(src) - stomach_contents.Add(C) - log_combat(src, C, "devoured") - -/mob/living/carbon/proc/create_bodyparts() - var/l_arm_index_next = -1 - var/r_arm_index_next = 0 - for(var/X in bodyparts) - var/obj/item/bodypart/O = new X() - O.owner = src - bodyparts.Remove(X) - bodyparts.Add(O) - if(O.body_part == ARM_LEFT) - l_arm_index_next += 2 - O.held_index = l_arm_index_next //1, 3, 5, 7... - hand_bodyparts += O - else if(O.body_part == ARM_RIGHT) - r_arm_index_next += 2 - O.held_index = r_arm_index_next //2, 4, 6, 8... - hand_bodyparts += O - -/mob/living/carbon/do_after_coefficent() - . = ..() - var/datum/component/mood/mood = src.GetComponent(/datum/component/mood) //Currently, only carbons or higher use mood, move this once that changes. - if(mood) - switch(mood.sanity) //Alters do_after delay based on how sane you are - if(SANITY_INSANE to SANITY_DISTURBED) - . *= 1.25 - if(SANITY_NEUTRAL to SANITY_GREAT) - . *= 0.90 - - -/mob/living/carbon/proc/create_internal_organs() - for(var/X in internal_organs) - var/obj/item/organ/I = X - I.Insert(src) - -/mob/living/carbon/proc/update_disabled_bodyparts() - for(var/B in bodyparts) - var/obj/item/bodypart/BP = B - BP.update_disabled() - -/mob/living/carbon/vv_get_dropdown() - . = ..() - . += "---" - .["Make AI"] = "?_src_=vars;[HrefToken()];makeai=[REF(src)]" - .["Modify bodypart"] = "?_src_=vars;[HrefToken()];editbodypart=[REF(src)]" - .["Modify organs"] = "?_src_=vars;[HrefToken()];editorgans=[REF(src)]" - .["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=[REF(src)]" - .["Give martial arts"] = "?_src_=vars;[HrefToken()];givemartialart=[REF(src)]" - .["Give brain trauma"] = "?_src_=vars;[HrefToken()];givetrauma=[REF(src)]" - .["Cure brain traumas"] = "?_src_=vars;[HrefToken()];curetraumas=[REF(src)]" - -/mob/living/carbon/can_resist() - return bodyparts.len > 2 && ..() - -/mob/living/carbon/proc/hypnosis_vulnerable()//unused atm, but added in case - if(HAS_TRAIT(src, TRAIT_MINDSHIELD)) - return FALSE - if(hallucinating()) - return TRUE - if(IsSleeping()) - return TRUE - if(HAS_TRAIT(src, TRAIT_DUMB)) - return TRUE - var/datum/component/mood/mood = src.GetComponent(/datum/component/mood) - if(mood) - if(mood.sanity < SANITY_UNSTABLE) - return TRUE - -/mob/living/carbon/transfer_ckey(mob/new_mob, send_signal = TRUE) - if(combatmode) - toggle_combat_mode(TRUE, TRUE) - return ..() \ No newline at end of file +/mob/living/carbon + blood_volume = BLOOD_VOLUME_NORMAL + +/mob/living/carbon/Initialize() + . = ..() + create_reagents(1000) + update_body_parts() //to update the carbon's new bodyparts appearance + GLOB.carbon_list += src + blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio) + +/mob/living/carbon/Destroy() + //This must be done first, so the mob ghosts correctly before DNA etc is nulled + . = ..() + + QDEL_LIST(internal_organs) + QDEL_LIST(stomach_contents) + QDEL_LIST(bodyparts) + QDEL_LIST(implants) + remove_from_all_data_huds() + QDEL_NULL(dna) + GLOB.carbon_list -= src + +/mob/living/carbon/initialize_footstep() + AddComponent(/datum/component/footstep, 0.6, 2) + +/mob/living/carbon/relaymove(mob/user, direction) + if(user in src.stomach_contents) + if(prob(40)) + if(prob(25)) + audible_message("You hear something rumbling inside [src]'s stomach...", \ + "You hear something rumbling.", 4,\ + "Something is rumbling inside your stomach!") + var/obj/item/I = user.get_active_held_item() + if(I && I.force) + var/d = rand(round(I.force / 4), I.force) + var/obj/item/bodypart/BP = get_bodypart(BODY_ZONE_CHEST) + if(BP.receive_damage(d, 0)) + update_damage_overlays() + visible_message("[user] attacks [src]'s stomach wall with the [I.name]!", \ + "[user] attacks your stomach wall with the [I.name]!") + playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) + + if(prob(src.getBruteLoss() - 50)) + for(var/atom/movable/A in stomach_contents) + A.forceMove(drop_location()) + stomach_contents.Remove(A) + src.gib() + + +/mob/living/carbon/swap_hand(held_index) + if(!held_index) + held_index = (active_hand_index % held_items.len)+1 + + var/obj/item/item_in_hand = src.get_active_held_item() + if(item_in_hand) //this segment checks if the item in your hand is twohanded. + var/obj/item/twohanded/TH = item_in_hand + if(istype(TH)) + if(TH.wielded == 1) + to_chat(usr, "Your other hand is too busy holding [TH]") + return + var/oindex = active_hand_index + active_hand_index = held_index + if(hud_used) + var/obj/screen/inventory/hand/H + H = hud_used.hand_slots["[oindex]"] + if(H) + H.update_icon() + H = hud_used.hand_slots["[held_index]"] + if(H) + H.update_icon() + + +/mob/living/carbon/activate_hand(selhand) //l/r OR 1-held_items.len + if(!selhand) + selhand = (active_hand_index % held_items.len)+1 + + if(istext(selhand)) + selhand = lowertext(selhand) + if(selhand == "right" || selhand == "r") + selhand = 2 + if(selhand == "left" || selhand == "l") + selhand = 1 + + if(selhand != active_hand_index) + swap_hand(selhand) + else + mode() // Activate held item + +/mob/living/carbon/attackby(obj/item/I, mob/user, params) + if(lying && surgeries.len) + if(user != src && (user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM)) + for(var/datum/surgery/S in surgeries) + if(S.next_step(user,user.a_intent)) + return 1 + return ..() + +/mob/living/carbon/throw_impact(atom/hit_atom, throwingdatum) + . = ..() + var/hurt = TRUE + if(istype(throwingdatum, /datum/thrownthing)) + var/datum/thrownthing/D = throwingdatum + if(iscyborg(D.thrower)) + var/mob/living/silicon/robot/R = D.thrower + if(!R.emagged) + hurt = FALSE + if(hit_atom.density && isturf(hit_atom)) + if(hurt) + Knockdown(20) + take_bodypart_damage(10) + if(iscarbon(hit_atom) && hit_atom != src) + var/mob/living/carbon/victim = hit_atom + if(victim.movement_type & FLYING) + return + if(hurt) + victim.take_bodypart_damage(10) + take_bodypart_damage(10) + victim.Knockdown(20) + Knockdown(20) + visible_message("[src] crashes into [victim], knocking them both over!",\ + "You violently crash into [victim]!") + playsound(src,'sound/weapons/punch1.ogg',50,1) + + +//Throwing stuff +/mob/living/carbon/proc/toggle_throw_mode() + if(stat) + return + if(in_throw_mode) + throw_mode_off() + else + throw_mode_on() + + +/mob/living/carbon/proc/throw_mode_off() + in_throw_mode = 0 + if(client && hud_used) + hud_used.throw_icon.icon_state = "act_throw_off" + + +/mob/living/carbon/proc/throw_mode_on() + in_throw_mode = 1 + if(client && hud_used) + hud_used.throw_icon.icon_state = "act_throw_on" + +/mob/proc/throw_item(atom/target) + SEND_SIGNAL(src, COMSIG_MOB_THROW, target) + return + +/mob/living/carbon/throw_item(atom/target) + throw_mode_off() + if(!target || !isturf(loc)) + return + if(istype(target, /obj/screen)) + return + + //CIT CHANGES - makes it impossible to throw while in stamina softcrit + if(getStaminaLoss() >= STAMINA_SOFTCRIT) + to_chat(src, "You're too exhausted.") + return + var/random_turn = a_intent == INTENT_HARM + //END OF CIT CHANGES + + var/obj/item/I = src.get_active_held_item() + + var/atom/movable/thrown_thing + var/mob/living/throwable_mob + + if(istype(I, /obj/item/clothing/head/mob_holder)) + var/obj/item/clothing/head/mob_holder/holder = I + if(holder.held_mob) + throwable_mob = holder.held_mob + holder.release() + + if(!I || throwable_mob) + if(!throwable_mob && pulling && isliving(pulling) && grab_state >= GRAB_AGGRESSIVE) + throwable_mob = pulling + + if(throwable_mob && !throwable_mob.buckled) + thrown_thing = throwable_mob + if(pulling) + stop_pulling() + if(HAS_TRAIT(src, TRAIT_PACIFISM)) + to_chat(src, "You gently let go of [throwable_mob].") + return + + adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring + var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors + var/turf/end_T = get_turf(target) + if(start_T && end_T) + log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]") + + else if(!CHECK_BITFIELD(I.item_flags, ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP)) + thrown_thing = I + dropItemToGround(I) + + if(HAS_TRAIT(src, TRAIT_PACIFISM) && I.throwforce) + to_chat(src, "You set [I] down gently on the ground.") + return + + adjustStaminaLossBuffered(I.getweight()*2)//CIT CHANGE - throwing items shall be more tiring than swinging em. Doubly so. + + if(thrown_thing) + visible_message("[src] has thrown [thrown_thing].") + src.log_message("has thrown [thrown_thing]", LOG_ATTACK) + do_attack_animation(target, no_effect = 1) + playsound(loc, 'sound/weapons/punchmiss.ogg', 50, 1, -1) + newtonian_move(get_dir(target, src)) + thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src, null, null, null, random_turn) + + + +/mob/living/carbon/restrained(ignore_grab) + . = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE)) + +/mob/living/carbon/proc/canBeHandcuffed() + return 0 + + +/mob/living/carbon/show_inv(mob/user) + user.set_machine(src) + var/dat = {" +
    + [name] +
    +
    Head: [(head && !(head.item_flags & ABSTRACT)) ? head : "Nothing"] +
    Mask: [(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Nothing"] +
    Neck: [(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Nothing"]"} + + for(var/i in 1 to held_items.len) + var/obj/item/I = get_item_for_held_index(i) + dat += "
    [get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Nothing"]" + + dat += "
    Back: [back ? back : "Nothing"]" + + if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank)) + dat += "
    [internal ? "Disable Internals" : "Set Internals"]" + + if(handcuffed) + dat += "
    Handcuffed" + if(legcuffed) + dat += "
    Legcuffed" + + dat += {" +
    +
    Close + "} + user << browse(dat, "window=mob[REF(src)];size=325x500") + onclose(user, "mob[REF(src)]") + +/mob/living/carbon/Topic(href, href_list) + ..() + //strip panel + if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + if(href_list["internal"]) + var/slot = text2num(href_list["internal"]) + var/obj/item/ITEM = get_item_by_slot(slot) + if(ITEM && istype(ITEM, /obj/item/tank) && wear_mask && (wear_mask.clothing_flags & ALLOWINTERNALS)) + visible_message("[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].", \ + "[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].") + if(do_mob(usr, src, POCKET_STRIP_DELAY)) + if(internal) + internal = null + update_internals_hud_icon(0) + else if(ITEM && istype(ITEM, /obj/item/tank)) + if((wear_mask && (wear_mask.clothing_flags & ALLOWINTERNALS)) || getorganslot(ORGAN_SLOT_BREATHING_TUBE)) + internal = ITEM + update_internals_hud_icon(1) + + visible_message("[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].", \ + "[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].") + + +/mob/living/carbon/fall(forced) + loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing + +/mob/living/carbon/is_muzzled() + return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) + +/mob/living/carbon/hallucinating() + if(hallucination) + return TRUE + else + return FALSE + +/mob/living/carbon/resist_buckle() + if(restrained()) + changeNext_move(CLICK_CD_BREAKOUT) + last_special = world.time + CLICK_CD_BREAKOUT + var/buckle_cd = 600 + if(handcuffed) + var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED) + buckle_cd = O.breakouttime + visible_message("[src] attempts to unbuckle [p_them()]self!", \ + "You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)") + if(do_after(src, buckle_cd, 0, target = src)) + if(!buckled) + return + buckled.user_unbuckle_mob(src,src) + else + if(src && buckled) + to_chat(src, "You fail to unbuckle yourself!") + else + buckled.user_unbuckle_mob(src,src) + +/mob/living/carbon/resist_fire() + fire_stacks -= 5 + Knockdown(60, TRUE, TRUE) + spin(32,2) + visible_message("[src] rolls on the floor, trying to put [p_them()]self out!", \ + "You stop, drop, and roll!") + sleep(30) + if(fire_stacks <= 0) + visible_message("[src] has successfully extinguished [p_them()]self!", \ + "You extinguish yourself.") + ExtinguishMob() + return + +/mob/living/carbon/resist_restraints() + var/obj/item/I = null + var/type = 0 + if(handcuffed) + I = handcuffed + type = 1 + else if(legcuffed) + I = legcuffed + type = 2 + if(I) + if(type == 1) + changeNext_move(CLICK_CD_BREAKOUT) + last_special = world.time + CLICK_CD_BREAKOUT + if(type == 2) + changeNext_move(CLICK_CD_RANGE) + last_special = world.time + CLICK_CD_RANGE + cuff_resist(I) + + +/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0) + if(I.item_flags & BEING_REMOVED) + to_chat(src, "You're already attempting to remove [I]!") + return + I.item_flags |= BEING_REMOVED + breakouttime = I.breakouttime + if(!cuff_break) + visible_message("[src] attempts to remove [I]!") + to_chat(src, "You attempt to remove [I]... (This will take around [DisplayTimeText(breakouttime)] and you need to stand still.)") + if(do_after(src, breakouttime, 0, target = src)) + clear_cuffs(I, cuff_break) + else + to_chat(src, "You fail to remove [I]!") + + else if(cuff_break == FAST_CUFFBREAK) + breakouttime = 50 + visible_message("[src] is trying to break [I]!") + to_chat(src, "You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)") + if(do_after(src, breakouttime, 0, target = src)) + clear_cuffs(I, cuff_break) + else + to_chat(src, "You fail to break [I]!") + + else if(cuff_break == INSTANT_CUFFBREAK) + clear_cuffs(I, cuff_break) + I.item_flags &= ~BEING_REMOVED + +/mob/living/carbon/proc/uncuff() + if (handcuffed) + var/obj/item/W = handcuffed + handcuffed = null + if (buckled && buckled.buckle_requires_restraints) + buckled.unbuckle_mob(src) + update_handcuffed() + if (client) + client.screen -= W + if (W) + W.forceMove(drop_location()) + W.dropped(src) + if (W) + W.layer = initial(W.layer) + W.plane = initial(W.plane) + changeNext_move(0) + if (legcuffed) + var/obj/item/W = legcuffed + legcuffed = null + update_inv_legcuffed() + if (client) + client.screen -= W + if (W) + W.forceMove(drop_location()) + W.dropped(src) + if (W) + W.layer = initial(W.layer) + W.plane = initial(W.plane) + changeNext_move(0) + +/mob/living/carbon/proc/clear_cuffs(obj/item/I, cuff_break) + if(!I.loc || buckled) + return + visible_message("[src] manages to [cuff_break ? "break" : "remove"] [I]!") + to_chat(src, "You successfully [cuff_break ? "break" : "remove"] [I].") + + if(cuff_break) + . = !((I == handcuffed) || (I == legcuffed)) + qdel(I) + return + + else + if(I == handcuffed) + handcuffed.forceMove(drop_location()) + handcuffed.dropped(src) + handcuffed = null + if(buckled && buckled.buckle_requires_restraints) + buckled.unbuckle_mob(src) + update_handcuffed() + return + if(I == legcuffed) + legcuffed.forceMove(drop_location()) + legcuffed.dropped() + legcuffed = null + update_inv_legcuffed() + return + else + dropItemToGround(I) + return + return TRUE + +/mob/living/carbon/get_standard_pixel_y_offset(lying = 0) + if(lying) + return -6 + else + return initial(pixel_y) + +/mob/living/carbon/proc/accident(obj/item/I) + if(!I || (I.item_flags & ABSTRACT) || HAS_TRAIT(I, TRAIT_NODROP)) + return + + //dropItemToGround(I) CIT CHANGE - makes it so the item doesn't drop if the modifier rolls above 100 + + var/modifier = 0 + + if(HAS_TRAIT(src, TRAIT_CLUMSY)) + modifier -= 40 //Clumsy people are more likely to hit themselves -Honk! + + //CIT CHANGES START HERE + else if(combatmode) + modifier += 50 + + if(modifier < 100) + dropItemToGround(I) + //END OF CIT CHANGES + + switch(rand(1,100)+modifier) //91-100=Nothing special happens + if(-INFINITY to 0) //attack yourself + I.attack(src,src) + if(1 to 30) //throw it at yourself + I.throw_impact(src) + if(31 to 60) //Throw object in facing direction + var/turf/target = get_turf(loc) + var/range = rand(2,I.throw_range) + for(var/i = 1; i < range; i++) + var/turf/new_turf = get_step(target, dir) + target = new_turf + if(new_turf.density) + break + I.throw_at(target,I.throw_range,I.throw_speed,src) + if(61 to 90) //throw it down to the floor + var/turf/target = get_turf(loc) + I.throw_at(target,I.throw_range,I.throw_speed,src) + +/mob/living/carbon/Stat() + ..() + if(statpanel("Status")) + var/obj/item/organ/alien/plasmavessel/vessel = getorgan(/obj/item/organ/alien/plasmavessel) + if(vessel) + stat(null, "Plasma Stored: [vessel.storedPlasma]/[vessel.max_plasma]") + if(locate(/obj/item/assembly/health) in src) + stat(null, "Health: [health]") + + add_abilities_to_panel() + +/mob/living/carbon/attack_ui(slot) + if(!has_hand_for_held_index(active_hand_index)) + return 0 + return ..() + +/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE) + if(HAS_TRAIT(src, TRAIT_NOHUNGER)) + return 1 + + if(nutrition < 100 && !blood) + if(message) + visible_message("[src] dry heaves!", \ + "You try to throw up, but there's nothing in your stomach!") + if(stun) + Knockdown(200) + return 1 + + if(is_mouth_covered()) //make this add a blood/vomit overlay later it'll be hilarious + if(message) + visible_message("[src] throws up all over [p_them()]self!", \ + "You throw up all over yourself!") + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomitself) + distance = 0 + else + if(message) + visible_message("[src] throws up!", "You throw up!") + if(!isflyperson(src)) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomit) + if(stun) + Stun(80) + + playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1) + var/turf/T = get_turf(src) + if(!blood) + nutrition -= lost_nutrition + adjustToxLoss(-3) + for(var/i=0 to distance) + if(blood) + if(T) + add_splatter_floor(T) + if(stun) + adjustBruteLoss(3) + else if(src.reagents.has_reagent("blazaam")) + if(T) + T.add_vomit_floor(src, VOMIT_PURPLE) + else + if(T) + T.add_vomit_floor(src, VOMIT_TOXIC)//toxic barf looks different + T = get_step(T, dir) + if (is_blocked_turf(T)) + break + return 1 + +/mob/living/carbon/proc/spew_organ(power = 5, amt = 1) + for(var/i in 1 to amt) + if(!internal_organs.len) + break //Guess we're out of organs! + var/obj/item/organ/guts = pick(internal_organs) + var/turf/T = get_turf(src) + guts.Remove(src) + guts.forceMove(T) + var/atom/throw_target = get_edge_target_turf(guts, dir) + guts.throw_at(throw_target, power, 4, src) + + +/mob/living/carbon/fully_replace_character_name(oldname,newname) + ..() + if(dna) + dna.real_name = real_name + +//Updates the mob's health from bodyparts and mob damage variables +/mob/living/carbon/updatehealth() + if(status_flags & GODMODE) + return + var/total_burn = 0 + var/total_brute = 0 + var/total_stamina = 0 + for(var/X in bodyparts) //hardcoded to streamline things a bit + var/obj/item/bodypart/BP = X + total_brute += (BP.brute_dam * BP.body_damage_coeff) + total_burn += (BP.burn_dam * BP.body_damage_coeff) + total_stamina += (BP.stamina_dam * BP.stam_damage_coeff) + health = round(maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute, DAMAGE_PRECISION) + staminaloss = round(total_stamina, DAMAGE_PRECISION) + update_stat() + if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD) && stat == DEAD ) + become_husk("burn") + med_hud_set_health() + if(stat == SOFT_CRIT) + add_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE, multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN) + else + remove_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE) + +/mob/living/carbon/update_stamina() + var/stam = getStaminaLoss() + if(stam > DAMAGE_PRECISION) + var/total_health = (health - stam) + if(total_health <= crit_threshold && !stat) + if(!IsKnockdown()) + to_chat(src, "You're too exhausted to keep going...") + Knockdown(100) + update_health_hud() + +/mob/living/carbon/update_sight() + if(!client) + return + if(stat == DEAD) + sight = (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_OBSERVER + return + + sight = initial(sight) + lighting_alpha = initial(lighting_alpha) + var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) + if(!E) + update_tint() + else + see_invisible = E.see_invisible + see_in_dark = E.see_in_dark + sight |= E.sight_flags + if(!isnull(E.lighting_alpha)) + lighting_alpha = E.lighting_alpha + if(HAS_TRAIT(src, TRAIT_NIGHT_VISION)) + lighting_alpha = min(LIGHTING_PLANE_ALPHA_NV_TRAIT, lighting_alpha) + see_in_dark = max(NIGHT_VISION_DARKSIGHT_RANGE, see_in_dark) + + if(client.eye && client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + if(glasses) + var/obj/item/clothing/glasses/G = glasses + sight |= G.vision_flags + see_in_dark = max(G.darkness_view, see_in_dark) + if(G.invis_override) + see_invisible = G.invis_override + else + see_invisible = min(G.invis_view, see_invisible) + if(!isnull(G.lighting_alpha)) + lighting_alpha = min(lighting_alpha, G.lighting_alpha) + if(dna) + for(var/X in dna.mutations) + var/datum/mutation/M = X + if(M.name == XRAY) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_in_dark = max(see_in_dark, 8) + + if(see_override) + see_invisible = see_override + . = ..() + + +//to recalculate and update the mob's total tint from tinted equipment it's wearing. +/mob/living/carbon/proc/update_tint() + if(!GLOB.tinted_weldhelh) + return + tinttotal = get_total_tint() + if(tinttotal >= TINT_BLIND) + become_blind(EYES_COVERED) + else if(tinttotal >= TINT_DARKENED) + cure_blind(EYES_COVERED) + overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2) + else + cure_blind(EYES_COVERED) + clear_fullscreen("tint", 0) + +/mob/living/carbon/proc/get_total_tint() + . = 0 + if(istype(head, /obj/item/clothing/head)) + var/obj/item/clothing/head/HT = head + . += HT.tint + if(wear_mask) + . += wear_mask.tint + + var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES) + if(E) + . += E.tint + + else + . += INFINITY + +/mob/living/carbon/get_permeability_protection(list/target_zones = list(HANDS,CHEST,GROIN,LEGS,FEET,ARMS,HEAD)) + var/list/tally = list() + for(var/obj/item/I in get_equipped_items()) + for(var/zone in target_zones) + if(I.body_parts_covered & zone) + tally["[zone]"] = max(1 - I.permeability_coefficient, target_zones["[zone]"]) + var/protection = 0 + for(var/key in tally) + protection += tally[key] + protection *= INVERSE(target_zones.len) + return protection + +//this handles hud updates +/mob/living/carbon/update_damage_hud() + + if(!client) + return + + if(health <= crit_threshold) + var/severity = 0 + switch(health) + if(-20 to -10) + severity = 1 + if(-30 to -20) + severity = 2 + if(-40 to -30) + severity = 3 + if(-50 to -40) + severity = 4 + if(-50 to -40) + severity = 5 + if(-60 to -50) + severity = 6 + if(-70 to -60) + severity = 7 + if(-90 to -70) + severity = 8 + if(-95 to -90) + severity = 9 + if(-INFINITY to -95) + severity = 10 + if(!InFullCritical()) + var/visionseverity = 4 + switch(health) + if(-8 to -4) + visionseverity = 5 + if(-12 to -8) + visionseverity = 6 + if(-16 to -12) + visionseverity = 7 + if(-20 to -16) + visionseverity = 8 + if(-24 to -20) + visionseverity = 9 + if(-INFINITY to -24) + visionseverity = 10 + overlay_fullscreen("critvision", /obj/screen/fullscreen/crit/vision, visionseverity) + else + clear_fullscreen("critvision") + overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity) + else + clear_fullscreen("crit") + clear_fullscreen("critvision") + + //Oxygen damage overlay + var/windedup = getOxyLoss() + getStaminaLoss() * 0.2 + if(windedup) + var/severity = 0 + switch(windedup) + if(10 to 20) + severity = 1 + if(20 to 25) + severity = 2 + if(25 to 30) + severity = 3 + if(30 to 35) + severity = 4 + if(35 to 40) + severity = 5 + if(40 to 45) + severity = 6 + if(45 to INFINITY) + severity = 7 + overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity) + else + clear_fullscreen("oxy") + + //Fire and Brute damage overlay (BSSR) + var/hurtdamage = getBruteLoss() + getFireLoss() + damageoverlaytemp + if(hurtdamage) + var/severity = 0 + switch(hurtdamage) + if(5 to 15) + severity = 1 + if(15 to 30) + severity = 2 + if(30 to 45) + severity = 3 + if(45 to 70) + severity = 4 + if(70 to 85) + severity = 5 + if(85 to INFINITY) + severity = 6 + overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + else + clear_fullscreen("brute") + +/mob/living/carbon/update_health_hud(shown_health_amount) + if(!client || !hud_used) + return + if(hud_used.healths) + if(stat != DEAD) + . = 1 + if(!shown_health_amount) + shown_health_amount = health + if(shown_health_amount >= maxHealth) + hud_used.healths.icon_state = "health0" + else if(shown_health_amount > maxHealth*0.8) + hud_used.healths.icon_state = "health1" + else if(shown_health_amount > maxHealth*0.6) + hud_used.healths.icon_state = "health2" + else if(shown_health_amount > maxHealth*0.4) + hud_used.healths.icon_state = "health3" + else if(shown_health_amount > maxHealth*0.2) + hud_used.healths.icon_state = "health4" + else if(shown_health_amount > 0) + hud_used.healths.icon_state = "health5" + else + hud_used.healths.icon_state = "health6" + else + hud_used.healths.icon_state = "health7" + +/mob/living/carbon/proc/update_internals_hud_icon(internal_state = 0) + if(hud_used && hud_used.internals) + hud_used.internals.icon_state = "internal[internal_state]" + +/mob/living/carbon/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) + if(health <= HEALTH_THRESHOLD_DEAD && !HAS_TRAIT(src, TRAIT_NODEATH)) + death() + return + if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (HAS_TRAIT(src, TRAIT_DEATHCOMA)) || (health <= HEALTH_THRESHOLD_FULLCRIT && !HAS_TRAIT(src, TRAIT_NOHARDCRIT))) + stat = UNCONSCIOUS + blind_eyes(1) + if(combatmode) + toggle_combat_mode(TRUE, TRUE) + else + if(health <= crit_threshold && !HAS_TRAIT(src, TRAIT_NOSOFTCRIT)) + stat = SOFT_CRIT + if(combatmode) + toggle_combat_mode(TRUE, TRUE) + else + stat = CONSCIOUS + adjust_blindness(-1) + update_canmove() + update_damage_hud() + update_health_hud() + med_hud_set_status() + +//called when we get cuffed/uncuffed +/mob/living/carbon/proc/update_handcuffed() + if(handcuffed) + drop_all_held_items() + stop_pulling() + throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) + if(handcuffed.demoralize_criminals) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) + else + clear_alert("handcuffed") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed") + update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. + update_inv_handcuffed() + update_hud_handcuffed() + +/mob/living/carbon/fully_heal(admin_revive = FALSE) + if(reagents) + reagents.clear_reagents() + var/obj/item/organ/brain/B = getorgan(/obj/item/organ/brain) + if(B) + B.brain_death = FALSE + for(var/thing in diseases) + var/datum/disease/D = thing + if(D.severity != DISEASE_SEVERITY_POSITIVE) + D.cure(FALSE) + if(admin_revive) + regenerate_limbs() + regenerate_organs() + handcuffed = initial(handcuffed) + for(var/obj/item/restraints/R in contents) //actually remove cuffs from inventory + qdel(R) + update_handcuffed() + if(reagents) + reagents.addiction_list = list() + cure_all_traumas(TRAUMA_RESILIENCE_MAGIC) + ..() + // heal ears after healing traits, since ears check TRAIT_DEAF trait + // when healing. + restoreEars() + +/mob/living/carbon/can_be_revived() + . = ..() + if(!getorgan(/obj/item/organ/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling))) + return 0 + +/mob/living/carbon/harvest(mob/living/user) + if(QDELETED(src)) + return + var/organs_amt = 0 + for(var/X in internal_organs) + var/obj/item/organ/O = X + if(prob(50)) + organs_amt++ + O.Remove(src) + O.forceMove(drop_location()) + if(organs_amt) + to_chat(user, "You retrieve some of [src]\'s internal organs!") + +/mob/living/carbon/ExtinguishMob() + for(var/X in get_equipped_items()) + var/obj/item/I = X + I.acid_level = 0 //washes off the acid on our clothes + I.extinguish() //extinguishes our clothes + ..() + +/mob/living/carbon/fakefire(var/fire_icon = "Generic_mob_burning") + var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) + new_fire_overlay.appearance_flags = RESET_COLOR + overlays_standing[FIRE_LAYER] = new_fire_overlay + apply_overlay(FIRE_LAYER) + +/mob/living/carbon/fakefireextinguish() + remove_overlay(FIRE_LAYER) + + +/mob/living/carbon/proc/devour_mob(mob/living/carbon/C, devour_time = 130) + C.visible_message("[src] is attempting to devour [C]!", \ + "[src] is attempting to devour you!") + if(!do_mob(src, C, devour_time)) + return + if(pulling && pulling == C && grab_state >= GRAB_AGGRESSIVE && a_intent == INTENT_GRAB) + C.visible_message("[src] devours [C]!", \ + "[src] devours you!") + C.forceMove(src) + stomach_contents.Add(C) + log_combat(src, C, "devoured") + +/mob/living/carbon/proc/create_bodyparts() + var/l_arm_index_next = -1 + var/r_arm_index_next = 0 + for(var/X in bodyparts) + var/obj/item/bodypart/O = new X() + O.owner = src + bodyparts.Remove(X) + bodyparts.Add(O) + if(O.body_part == ARM_LEFT) + l_arm_index_next += 2 + O.held_index = l_arm_index_next //1, 3, 5, 7... + hand_bodyparts += O + else if(O.body_part == ARM_RIGHT) + r_arm_index_next += 2 + O.held_index = r_arm_index_next //2, 4, 6, 8... + hand_bodyparts += O + +/mob/living/carbon/do_after_coefficent() + . = ..() + var/datum/component/mood/mood = src.GetComponent(/datum/component/mood) //Currently, only carbons or higher use mood, move this once that changes. + if(mood) + switch(mood.sanity) //Alters do_after delay based on how sane you are + if(SANITY_INSANE to SANITY_DISTURBED) + . *= 1.25 + if(SANITY_NEUTRAL to SANITY_GREAT) + . *= 0.90 + + +/mob/living/carbon/proc/create_internal_organs() + for(var/X in internal_organs) + var/obj/item/organ/I = X + I.Insert(src) + +/mob/living/carbon/proc/update_disabled_bodyparts() + for(var/B in bodyparts) + var/obj/item/bodypart/BP = B + BP.update_disabled() + +/mob/living/carbon/vv_get_dropdown() + . = ..() + . += "---" + .["Make AI"] = "?_src_=vars;[HrefToken()];makeai=[REF(src)]" + .["Modify bodypart"] = "?_src_=vars;[HrefToken()];editbodypart=[REF(src)]" + .["Modify organs"] = "?_src_=vars;[HrefToken()];editorgans=[REF(src)]" + .["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=[REF(src)]" + .["Give martial arts"] = "?_src_=vars;[HrefToken()];givemartialart=[REF(src)]" + .["Give brain trauma"] = "?_src_=vars;[HrefToken()];givetrauma=[REF(src)]" + .["Cure brain traumas"] = "?_src_=vars;[HrefToken()];curetraumas=[REF(src)]" + +/mob/living/carbon/can_resist() + return bodyparts.len > 2 && ..() + +/mob/living/carbon/proc/hypnosis_vulnerable()//unused atm, but added in case + if(HAS_TRAIT(src, TRAIT_MINDSHIELD)) + return FALSE + if(hallucinating()) + return TRUE + if(IsSleeping()) + return TRUE + if(HAS_TRAIT(src, TRAIT_DUMB)) + return TRUE + var/datum/component/mood/mood = src.GetComponent(/datum/component/mood) + if(mood) + if(mood.sanity < SANITY_UNSTABLE) + return TRUE + +/mob/living/carbon/transfer_ckey(mob/new_mob, send_signal = TRUE) + if(combatmode) + toggle_combat_mode(TRUE, TRUE) + return ..() + +/mob/living/carbon/can_see_reagents() + . = ..() + if(.) //No need to run through all of this if it's already true. + return + if(isclothing(head)) + var/obj/item/clothing/H = head + if(H.clothing_flags & SCAN_REAGENTS) + return TRUE + if(isclothing(wear_mask) && (wear_mask.clothing_flags & SCAN_REAGENTS)) + return TRUE diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index c5aeb2c1c7..ba40ae8e5f 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -48,31 +48,42 @@ if(affecting && affecting.dismemberable && affecting.get_damage() >= (affecting.max_damage - P.dismemberment)) affecting.dismember(P.damtype) -/mob/living/carbon/proc/can_catch_item(skip_throw_mode_check) - . = FALSE - if(!skip_throw_mode_check && !in_throw_mode) +/mob/living/carbon/catch_item(obj/item/I, skip_throw_mode_check = FALSE) + . = ..() + if(!HAS_TRAIT(src, TRAIT_AUTO_CATCH_ITEM) && !skip_throw_mode_check && !in_throw_mode) return - if(get_active_held_item()) + if(get_active_held_item() || restrained()) return - if(restrained()) - return - return TRUE - -/mob/living/carbon/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE) - if(!skipcatch) //ugly, but easy - if(can_catch_item()) - if(istype(AM, /obj/item)) - var/obj/item/I = AM - if(isturf(I.loc)) - I.attack_hand(src) - if(get_active_held_item() == I) //if our attack_hand() picks up the item... - visible_message("[src] catches [I]!") //catch that sucker! - throw_mode_off() - return 1 - ..() + I.attack_hand(src) + if(get_active_held_item() == I) //if our attack_hand() picks up the item... + visible_message("[src] catches [I]!") //catch that sucker! + throw_mode_off() + return TRUE +/mob/living/carbon/embed_item(obj/item/I) + throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) + var/obj/item/bodypart/L = pick(bodyparts) + L.embedded_objects |= I + I.add_mob_blood(src)//it embedded itself in you, of course it's bloody! + I.forceMove(src) + L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier) + visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) /mob/living/carbon/attacked_by(obj/item/I, mob/living/user) + //CIT CHANGES START HERE - combatmode and resting checks + var/totitemdamage = I.force + if(iscarbon(user)) + var/mob/living/carbon/tempcarb = user + if(!tempcarb.combatmode) + totitemdamage *= 0.5 + if(user.resting) + totitemdamage *= 0.5 + if(!combatmode) + totitemdamage *= 1.5 + //CIT CHANGES END HERE + if(user != src && check_shields(I, totitemdamage, "the [I.name]", MELEE_ATTACK, I.armour_penetration)) + return FALSE var/obj/item/bodypart/affecting if(user == src) affecting = get_bodypart(check_zone(user.zone_selected)) //we're self-mutilating! yay! @@ -83,17 +94,6 @@ SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) send_item_attack_message(I, user, affecting.name) if(I.force) - //CIT CHANGES START HERE - combatmode and resting checks - var/totitemdamage = I.force - if(iscarbon(user)) - var/mob/living/carbon/tempcarb = user - if(!tempcarb.combatmode) - totitemdamage *= 0.5 - if(user.resting) - totitemdamage *= 0.5 - if(!combatmode) - totitemdamage *= 1.5 - //CIT CHANGES END HERE apply_damage(totitemdamage, I.damtype, affecting) //CIT CHANGE - replaces I.force with totitemdamage if(I.damtype == BRUTE && affecting.status == BODYPART_ORGANIC) var/basebloodychance = affecting.brute_dam + totitemdamage @@ -127,7 +127,9 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/carbon/attack_hand(mob/living/carbon/human/user) - + . = ..() + if(.) //was the attack blocked? + return for(var/thing in diseases) var/datum/disease/D = thing if(D.spread_flags & DISEASE_SPREAD_CONTACT_SKIN) @@ -142,8 +144,7 @@ if(user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM) for(var/datum/surgery/S in surgeries) if(S.next_step(user, user.a_intent)) - return 1 - return 0 + return TRUE /mob/living/carbon/attack_paw(mob/living/carbon/monkey/M) @@ -163,7 +164,8 @@ help_shake_act(M) return 0 - if(..()) //successful monkey bite. + . = ..() + if(.) //successful monkey bite. for(var/thing in M.diseases) var/datum/disease/D = thing ForceContractDisease(D) @@ -171,26 +173,27 @@ /mob/living/carbon/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - if(M.powerlevel > 0) - var/stunprob = M.powerlevel * 7 + 10 // 17 at level 1, 80 at level 10 - if(prob(stunprob)) - M.powerlevel -= 3 - if(M.powerlevel < 0) - M.powerlevel = 0 + . = ..() + if(!.) + return + if(M.powerlevel > 0) + var/stunprob = M.powerlevel * 7 + 10 // 17 at level 1, 80 at level 10 + if(prob(stunprob)) + M.powerlevel -= 3 + if(M.powerlevel < 0) + M.powerlevel = 0 - visible_message("The [M.name] has shocked [src]!", \ - "The [M.name] has shocked [src]!") + visible_message("The [M.name] has shocked [src]!", \ + "The [M.name] has shocked [src]!") - do_sparks(5, TRUE, src) - var/power = M.powerlevel + rand(0,3) - Knockdown(power*20) - if(stuttering < power) - stuttering = power - if (prob(stunprob) && M.powerlevel >= 8) - adjustFireLoss(M.powerlevel * rand(6,10)) - updatehealth() - return 1 + do_sparks(5, TRUE, src) + var/power = M.powerlevel + rand(0,3) + Knockdown(power*20) + if(stuttering < power) + stuttering = power + if (prob(stunprob) && M.powerlevel >= 8) + adjustFireLoss(M.powerlevel * rand(6,10)) + updatehealth() /mob/living/carbon/proc/dismembering_strike(mob/living/attacker, dam_zone) if(!attacker.limb_destroyer) @@ -279,6 +282,12 @@ M.visible_message("[M] shakes [src] trying to get [p_them()] up!", \ "You shake [src] trying to get [p_them()] up!") + else if(check_zone(M.zone_selected) == "mouth") // I ADDED BOOP-EH-DEH-NOSEH - Jon + M.visible_message( \ + "[M] boops [src]'s nose.", \ + "You boop [src] on the nose.", ) + playsound(src, 'sound/items/Nose_boop.ogg', 50, 0) + else if(check_zone(M.zone_selected) == "head") var/mob/living/carbon/human/H = src var/datum/species/pref_species = H.dna.species @@ -317,6 +326,11 @@ else return + else if(check_zone(M.zone_selected) == "r_arm" || check_zone(M.zone_selected) == "l_arm") + M.visible_message( \ + "[M] shakes [src]'s hand.", \ + "You shake [src]'s hand.", ) + else M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \ "You hug [src] to make [p_them()] feel better!") diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index a1184613fe..9629dc3484 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -40,7 +40,7 @@ var/gib_type = /obj/effect/decal/cleanable/blood/gibs - var/rotate_on_lying = 1 + rotate_on_lying = TRUE var/tinttotal = 0 // Total level of visualy impairing items diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 345279df29..559c2ebcdd 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -22,6 +22,7 @@ muzzle_ignore = TRUE restraint_check = TRUE emote_type = EMOTE_AUDIBLE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/carbon/clap/run_emote(mob/living/user, params) . = ..() diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 9e87e7626d..34c268578c 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -15,7 +15,11 @@ if (wear_mask) . += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face." if (wear_neck) - . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." + . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" + if(can_be_held) + . += "[t_He] looks small enough to be picked up with Alt+Click!\n" + + for(var/obj/item/I in held_items) if(!(I.item_flags & ABSTRACT)) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 310ab6beeb..3a6f0e6724 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -308,7 +308,7 @@ var/obj/item/organ/vocal_cords/Vc = user.getorganslot(ORGAN_SLOT_VOICE) if(Vc) if(istype(Vc, /obj/item/organ/vocal_cords/velvet)) - if(client?.prefs.lewdchem) + if(client.prefs.cit_toggles & HYPNO) msg += "You feel your chords resonate looking at them.\n" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 45211f7f44..0007233975 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -803,10 +803,8 @@ else hud_used.healthdoll.icon_state = "healthdoll_DEAD" - if(hud_used.staminas) - hud_used.staminas.icon_state = staminahudamount() - if(hud_used.staminabuffer) - hud_used.staminabuffer.icon_state = staminabufferhudamount() + hud_used.staminas?.update_icon_state() + hud_used.staminabuffer?.update_icon_state() /mob/living/carbon/human/fully_heal(admin_revive = 0) if(admin_revive) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 042b4af4fe..2b1d6afc4f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -46,6 +46,12 @@ return spec_return if(mind) + if (mind.martial_art && mind.martial_art.dodge_chance) + if(!lying && dna && !dna.check_mutation(HULK)) + if(prob(mind.martial_art.dodge_chance)) + var/dodgemessage = pick("dodges under the projectile!","dodges to the right of the projectile!","jumps over the projectile!") + visible_message("[src] [dodgemessage]", "You dodge the projectile!") + return -1 if(mind.martial_art && !incapacitated(FALSE, TRUE) && mind.martial_art.can_use(src) && mind.martial_art.deflection_chance) //Some martial arts users can deflect projectiles! if(prob(mind.martial_art.deflection_chance)) if(!lying && dna && !dna.check_mutation(HULK)) //But only if they're not lying down, and hulks can't do it @@ -61,66 +67,36 @@ P.setAngle(rand(0, 360))//SHING return FALSE - if(!(P.original == src && P.firer == src)) //can't block or reflect when shooting yourself - if(P.is_reflectable) - if(check_reflect(def_zone)) // Checks if you've passed a reflection% check - visible_message("The [P.name] gets reflected by [src]!", \ - "The [P.name] gets reflected by [src]!") - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) + return ..() - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - var/new_angle_s = P.Angle + rand(120,240) - while(new_angle_s > 180) // Translate to regular projectile degrees - new_angle_s -= 360 - P.setAngle(new_angle_s) +/mob/living/carbon/human/check_reflect(def_zone) + if(wear_suit?.IsReflect(def_zone)) + return TRUE + return ..() - return -1 // complete projectile permutation - - if(check_shields(P, P.damage, "the [P.name]", PROJECTILE_ATTACK, P.armour_penetration)) - P.on_hit(src, 100, def_zone) - return 2 - - return (..(P , def_zone)) - -/mob/living/carbon/human/proc/check_reflect(def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on the reflection chance of the object - if(wear_suit) - if(wear_suit.IsReflect(def_zone) == 1) - return 1 - for(var/obj/item/I in held_items) - if(I.IsReflect(def_zone) == 1) - return 1 - return 0 - -/mob/living/carbon/human/proc/check_shields(atom/AM, var/damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0) +/mob/living/carbon/human/check_shields(atom/AM, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0) + . = ..() + if(.) + return var/block_chance_modifier = round(damage / -3) - - for(var/obj/item/I in held_items) - if(!istype(I, /obj/item/clothing)) - var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example - if(I.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) - return 1 if(wear_suit) var/final_block_chance = wear_suit.block_chance - (CLAMP((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier if(wear_suit.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) - return 1 + return TRUE if(w_uniform) var/final_block_chance = w_uniform.block_chance - (CLAMP((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier if(w_uniform.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) - return 1 + return TRUE if(wear_neck) var/final_block_chance = wear_neck.block_chance - (CLAMP((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) - return 1 - return 0 + return TRUE + return FALSE + +/mob/living/carbon/human/can_embed(obj/item/I) + if(I.get_sharpness() || is_pointed(I) || is_type_in_typecache(I, GLOB.can_embed_types)) + return TRUE + return FALSE /mob/living/carbon/human/proc/check_block() if(mind) @@ -129,37 +105,7 @@ return FALSE /mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE) - if(dna && dna.species) - var/spec_return = dna.species.spec_hitby(AM, src) - if(spec_return) - return spec_return - var/obj/item/I - var/throwpower = 30 - if(istype(AM, /obj/item)) - I = AM - throwpower = I.throwforce - if(I.thrownby == src) //No throwing stuff at yourself to trigger hit reactions - return ..() - if(check_shields(AM, throwpower, "\the [AM.name]", THROWN_PROJECTILE_ATTACK)) - hitpush = FALSE - skipcatch = TRUE - blocked = TRUE - else if(I) - if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD) - if(can_embed(I)) - if(prob(I.embedding.embed_chance) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE)) - throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) - var/obj/item/bodypart/L = pick(bodyparts) - L.embedded_objects |= I - I.add_mob_blood(src)//it embedded itself in you, of course it's bloody! - I.forceMove(src) - L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier) - visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) - hitpush = FALSE - skipcatch = TRUE //can't catch the now embedded item - - return ..() + return dna?.species?.spec_hitby(AM, src) || ..() /mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (HAS_TRAIT(src, TRAIT_FAT)) && ismonkey(pulling)) @@ -193,12 +139,12 @@ return dna.species.spec_attacked_by(I, user, affecting, a_intent, src) -/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) +/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) - var/hulk_verb = pick("smash","pummel") - if(check_shields(user, 15, "the [hulk_verb]ing")) + . = ..(user, TRUE) + if(.) return - ..(user, 1) + var/hulk_verb = pick("smash","pummel") playsound(loc, user.dna.species.attack_sound, 25, 1, -1) var/message = "[user] has [hulk_verb]ed [src]!" visible_message("[message]", \ @@ -207,7 +153,8 @@ return 1 /mob/living/carbon/human/attack_hand(mob/user) - if(..()) //to allow surgery to return properly. + . = ..() + if(.) //To allow surgery to return properly. return if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -219,8 +166,7 @@ if(!affecting) affecting = get_bodypart(BODY_ZONE_CHEST) if(M.a_intent == INTENT_HELP) - ..() //shaking - return 0 + return ..() //shaking if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stunned instead. var/obj/item/I = get_active_held_item() @@ -241,78 +187,69 @@ if(can_inject(M, 1, affecting))//Thick suits can stop monkey bites. if(..()) //successful monkey bite, this handles disease contraction. var/damage = rand(1, 3) - if(check_shields(M, damage, "the [M.name]")) - return 0 - if(stat != DEAD) - apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee")) + apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee")) return 1 /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M) - if(check_shields(M, 0, "the M.name")) - visible_message("[M] attempted to touch [src]!") - return 0 + . = ..() + if(!.) + return + if(M.a_intent == INTENT_HARM) + if (w_uniform) + w_uniform.add_fingerprint(M) + var/damage = prob(90) ? 20 : 0 + if(!damage) + playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1) + visible_message("[M] has lunged at [src]!", \ + "[M] has lunged at [src]!") + return 0 + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor_block = run_armor_check(affecting, "melee", null, null,10) - if(..()) - if(M.a_intent == INTENT_HARM) - if (w_uniform) - w_uniform.add_fingerprint(M) - var/damage = prob(90) ? 20 : 0 - if(!damage) - playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1) - visible_message("[M] has lunged at [src]!", \ - "[M] has lunged at [src]!") - return 0 - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor_block = run_armor_check(affecting, "melee", null, null,10) + playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) + visible_message("[M] has slashed at [src]!", \ + "[M] has slashed at [src]!") + log_combat(M, src, "attacked") + if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful + return 1 + apply_damage(damage, BRUTE, affecting, armor_block) - playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) - visible_message("[M] has slashed at [src]!", \ - "[M] has slashed at [src]!") - log_combat(M, src, "attacked") - if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful - return 1 - apply_damage(damage, BRUTE, affecting, armor_block) - - if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead. - var/obj/item/I = get_active_held_item() - if(I && dropItemToGround(I)) - playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) - visible_message("[M] disarmed [src]!", \ - "[M] disarmed [src]!") + if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead. + var/obj/item/I = get_active_held_item() + if(I && dropItemToGround(I)) + playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) + visible_message("[M] disarmed [src]!", \ + "[M] disarmed [src]!") + else + playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) + if(!lying) //CITADEL EDIT + Knockdown(100, TRUE, FALSE, 30, 25) else - playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - if(!lying) //CITADEL EDIT - Knockdown(100, TRUE, FALSE, 30, 25) - else - Knockdown(100) - log_combat(M, src, "tackled") - visible_message("[M] has tackled down [src]!", \ - "[M] has tackled down [src]!") - + Knockdown(100) + log_combat(M, src, "tackled") + visible_message("[M] has tackled down [src]!", \ + "[M] has tackled down [src]!") /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L) - - if(..()) //successful larva bite. - var/damage = rand(1, 3) - if(check_shields(L, damage, "the [L.name]")) - return 0 - if(stat != DEAD) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor_block = run_armor_check(affecting, "melee") - apply_damage(damage, BRUTE, affecting, armor_block) + . = ..() + if(!.) //unsuccessful larva bite. + return + var/damage = rand(1, 3) + if(stat != DEAD) + L.amount_grown = min(L.amount_grown + damage, L.max_grown) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor_block = run_armor_check(affecting, "melee") + apply_damage(damage, BRUTE, affecting, armor_block) /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) . = ..() if(.) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(check_shields(M, damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration)) - return FALSE var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) if(!dam_zone) //Dismemberment successful return TRUE @@ -324,23 +261,22 @@ /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - var/damage = rand(5, 25) - if(M.is_adult) - damage = rand(10, 35) + . = ..() + if(!.) //unsuccessful slime attack + return + var/damage = rand(5, 25) + if(M.is_adult) + damage = rand(10, 35) - if(check_shields(M, damage, "the [M.name]")) - return 0 + var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + if(!dam_zone) //Dismemberment successful + return 1 - var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return 1 - - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor_block = run_armor_check(affecting, "melee") - apply_damage(damage, BRUTE, affecting, armor_block) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor_block = run_armor_check(affecting, "melee") + apply_damage(damage, BRUTE, affecting, armor_block) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) if(M.occupant.a_intent == INTENT_HARM) @@ -644,7 +580,7 @@ if(mind) if((mind.assigned_role == "Station Engineer") || (mind.assigned_role == "Chief Engineer") ) gain = 100 - if(mind.assigned_role == "Clown") + if(HAS_TRAIT(mind, TRAIT_CLOWN_MENTALITY)) gain = rand(-300, 300) investigate_log("([key_name(src)]) has been consumed by the singularity.", INVESTIGATE_SINGULO) //Oh that's where the clown ended up! gib() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 63d02af31a..e5e546fdf8 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -117,7 +117,8 @@ /mob/living/carbon/human/can_use_guns(obj/item/G) . = ..() - + if(!.) + return if(G.trigger_guard == TRIGGER_GUARD_NORMAL) if(HAS_TRAIT(src, TRAIT_CHUNKYFINGERS)) to_chat(src, "Your meaty finger is much too large for the trigger guard!") @@ -126,7 +127,13 @@ to_chat(src, "Your fingers don't fit in the trigger guard!") return FALSE - return . +/mob/living/carbon/human/can_see_reagents() + . = ..() + if(.) //No need to run through all of this if it's already true. + return + if(isclothing(glasses) && (glasses.clothing_flags & SCAN_REAGENTS)) + return TRUE + /* /mob/living/carbon/human/transfer_blood_dna(list/blood_dna) ..() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 67d7cb585e..2e069297b3 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -545,6 +545,20 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //Underwear, Undershirts & Socks if(!(NO_UNDERWEAR in species_traits)) + + if(H.socks && H.get_num_legs(FALSE) >= 2) + if(H.hidden_socks) + H.socks = "Nude" + else + H.socks = H.saved_socks + var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[H.socks] + if(S) + var/digilegs = ((DIGITIGRADE in species_traits) && S.has_digitigrade) ? "_d" : "" + var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER) + if(S.has_color) + MA.color = "#[H.socks_color]" + standing += MA + if(H.underwear) if(H.hidden_underwear) H.underwear = "Nude" @@ -552,8 +566,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.underwear = H.saved_underwear var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[H.underwear] if(B) - var/mutable_appearance/MA = mutable_appearance(B.icon, B.icon_state, -BODY_LAYER) - if(UNDIE_COLORABLE(B)) + var/digilegs = ((DIGITIGRADE in species_traits) && B.has_digitigrade) ? "_d" : "" + var/mutable_appearance/MA = mutable_appearance(B.icon, "[B.icon_state][digilegs]", -BODY_LAYER) + if(B.has_color) MA.color = "#[H.undie_color]" standing += MA @@ -564,28 +579,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.undershirt = H.saved_undershirt var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[H.undershirt] if(T) + var/state = "[T.icon_state][((DIGITIGRADE in species_traits) && T.has_digitigrade) ? "_d" : ""]" var/mutable_appearance/MA if(H.dna.species.sexes && H.gender == FEMALE) - MA = wear_female_version(T.icon_state, T.icon, BODY_LAYER) + MA = wear_female_version(state, T.icon, BODY_LAYER) else - MA = mutable_appearance(T.icon, T.icon_state, -BODY_LAYER) - if(UNDIE_COLORABLE(T)) + MA = mutable_appearance(T.icon, state, -BODY_LAYER) + if(T.has_color) MA.color = "#[H.shirt_color]" standing += MA - if(H.socks && H.get_num_legs(FALSE) >= 2) - if(H.hidden_socks) - H.socks = "Nude" - else - H.socks = H.saved_socks - var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[H.socks] - if(S) - var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : "" - var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER) - if(UNDIE_COLORABLE(S)) - MA.color = "#[H.socks_color]" - standing += MA - if(standing.len) H.overlays_standing[BODY_LAYER] = standing @@ -781,6 +784,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) S = GLOB.insect_wings_list[H.dna.features["insect_wings"]] if("insect_fluff") S = GLOB.insect_fluffs_list[H.dna.features["insect_fluff"]] + if("insect_markings") + S = GLOB.insect_markings_list[H.dna.features["insect_markings"]] if("caps") S = GLOB.caps_list[H.dna.features["caps"]] if("ipc_screen") @@ -1587,20 +1592,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) user.adjustStaminaLossBuffered(3) return FALSE else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin)) + if(target.client?.prefs.cit_toggles & NO_ASS_SLAP) + to_chat(user,"A force stays your hand, preventing you from slapping \the [target]'s ass!") + return FALSE user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP) user.adjustStaminaLossBuffered(3) - if(HAS_TRAIT(target, TRAIT_ASSBLASTUSA)) - var/hit_zone = (user.held_index_to_dir(user.active_hand_index) == "l" ? "l_":"r_") + "arm" - user.adjustStaminaLoss(20, affected_zone = hit_zone) - user.visible_message(\ - "\The [user] slaps \the [target]'s ass, but their hand bounces off like they hit metal!",\ - "You slap [user == target ? "your" : "\the [target]'s"] ass, but feel an intense amount of pain as you realise their buns are harder than steel!",\ - "You hear a slap." - ) - playsound(target.loc, 'sound/weapons/tap.ogg', 50, 1, -1) - user.emote("scream") - return FALSE - playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1) user.visible_message(\ "\The [user] slaps \the [target]'s ass!",\ @@ -1689,11 +1685,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) attacker_style = M.mind.martial_art if(attacker_style?.pacifism_check && HAS_TRAIT(M, TRAIT_PACIFISM)) // most martial arts are quite harmful, alas. attacker_style = null - if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK)) - log_combat(M, H, "attempted to touch") - H.visible_message("[M] attempted to touch [H]!") - return 0 - SEND_SIGNAL(M, COMSIG_MOB_ATTACK_HAND, M, H, attacker_style) switch(M.a_intent) if("help") help(M, H, attacker_style) diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index 02163eaaed..718599c550 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -4,9 +4,9 @@ default_color = "00FF00" species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) - mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns") + mutant_bodyparts = list("mam_ears","mam_tail", "taur", "insect_wings","mam_snout", "mam_snouts", "insect_fluff","insect_markings") default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", - "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None","horns" = "None") + "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 3247c96632..52ae32b23c 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -51,11 +51,7 @@ . = ..() to_chat(C, "[info_text]") - C.real_name = "[pick(GLOB.nightmare_names)]" - C.name = C.real_name - if(C.mind) - C.mind.name = C.real_name - C.dna.real_name = C.real_name + C.fully_replace_character_name("[pick(GLOB.nightmare_names)]") /datum/species/shadow/nightmare/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) var/turf/T = H.loc @@ -127,8 +123,8 @@ /obj/item/organ/heart/nightmare/Remove(mob/living/carbon/M, special = 0) respawn_progress = 0 if(blade && special != HEART_SPECIAL_SHADOWIFY) - QDEL_NULL(blade) M.visible_message("\The [blade] disintegrates!") + QDEL_NULL(blade) ..() /obj/item/organ/heart/nightmare/Stop() @@ -183,15 +179,21 @@ . = ..() if(!proximity) return - if(isopenturf(AM)) //So you can actually melee with it - return - if(isliving(AM)) + if(isopenturf(AM)) + var/turf/open/T = AM + if(T.light_range && !isspaceturf(T)) //no fairy grass or light tile can escape the fury of the darkness. + to_chat(user, "You scrape away [T] with your [name] and snuff out its lights.") + T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + else if(isliving(AM)) var/mob/living/L = AM if(iscyborg(AM)) var/mob/living/silicon/robot/borg = AM - if(!borg.lamp_cooldown) + if(borg.lamp_intensity) borg.update_headlamp(TRUE, INFINITY) to_chat(borg, "Your headlamp is fried! You'll need a human to help replace it.") + for(var/obj/item/assembly/flash/cyborg/F in borg.held_items) + if(!F.crit_fail) + F.burn_out() else for(var/obj/item/O in AM) if(O.light_range && O.light_power) diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index 25bc243f07..56ef4fe24a 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -132,6 +132,10 @@ pickupTarget = null pickupTimer = 0 else if(ismob(pickupTarget.loc)) // in someones hand + if(istype(pickupTarget, /obj/item/clothing/head/mob_holder/)) + var/obj/item/clothing/head/mob_holder/h = pickupTarget + if(h && h.held_mob==src) + return//dont let them pickpocket themselves var/mob/M = pickupTarget.loc if(!pickpocketing) pickpocketing = TRUE @@ -365,6 +369,23 @@ retaliate(L) return ..() +/mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M) + if(M.a_intent == INTENT_HARM && prob(MONKEY_RETALIATE_HARM_PROB)) + retaliate(M) + else if(M.a_intent == INTENT_DISARM && prob(MONKEY_RETALIATE_DISARM_PROB)) + retaliate(M) + return ..() + +/mob/living/carbon/monkey/attack_larva(mob/living/carbon/alien/larva/L) + if(L.a_intent == INTENT_HARM && prob(MONKEY_RETALIATE_HARM_PROB)) + retaliate(L) + return ..() + +/mob/living/carbon/monkey/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) + if(user.a_intent == INTENT_HARM && prob(MONKEY_RETALIATE_HARM_PROB)) + retaliate(user) + return ..() + /mob/living/carbon/monkey/attack_paw(mob/living/L) if(L.a_intent == INTENT_HARM && prob(MONKEY_RETALIATE_HARM_PROB)) retaliate(L) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 025c1a2f75..fe041dd0a6 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -15,6 +15,7 @@ bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey, /obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey) hud_type = /datum/hud/monkey + can_be_held = "monkey" /mob/living/carbon/monkey/Initialize(mapload, cubespawned=FALSE, mob/spawner) verbs += /mob/living/proc/mob_sleep @@ -45,6 +46,10 @@ SSmobs.cubemonkeys -= src return ..() +/mob/living/carbon/monkey/generate_mob_holder() + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "monkey", 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi', TRUE) + return holder + /mob/living/carbon/monkey/create_internal_organs() internal_organs += new /obj/item/organ/appendix internal_organs += new /obj/item/organ/lungs diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index df90dd56fd..32e3d21ee2 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -6,37 +6,55 @@ ..() /mob/living/carbon/monkey/attack_paw(mob/living/M) - if(..()) //successful monkey bite. - var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - if(M.limb_destroyer) - dismembering_strike(M, affecting.body_zone) - if(stat != DEAD) - var/dmg = rand(1, 5) - apply_damage(dmg, BRUTE, affecting) + . = ..() + if(!.) //unsuccessful monkey bite. + return + var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + if(M.limb_destroyer) + dismembering_strike(M, affecting.body_zone) + var/dmg = rand(1, 5) + apply_damage(dmg, BRUTE, affecting) /mob/living/carbon/monkey/attack_larva(mob/living/carbon/alien/larva/L) - if(..()) //successful larva bite. - var/damage = rand(1, 3) - if(stat != DEAD) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - apply_damage(damage, BRUTE, affecting) + . = ..() + if(!.) //unsuccessful larva bite + return + var/damage = rand(1, 3) + if(stat != DEAD) + L.amount_grown = min(L.amount_grown + damage, L.max_grown) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + apply_damage(damage, BRUTE, affecting) + +/mob/living/carbon/monkey/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) + . = ..(user, TRUE) + if(.) + return + var/hulk_verb = pick("smash","pummel") + playsound(loc, user.dna.species.attack_sound, 25, 1, -1) + var/message = "[user] has [hulk_verb]ed [src]!" + visible_message("[message]", \ + "[message]") + adjustBruteLoss(15) + return TRUE /mob/living/carbon/monkey/attack_hand(mob/living/carbon/human/M) - if(..()) //To allow surgery to return properly. + . = ..() + if(.) //To allow surgery to return properly. return - switch(M.a_intent) - if("help") + if(INTENT_HELP) help_shake_act(M) - if("grab") + if(INTENT_GRAB) grabbedby(M) - if("harm") + if(INTENT_HARM) + if(HAS_TRAIT(M, TRAIT_PACIFISM)) + to_chat(M, "You don't want to hurt [src]!") + return M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) if (prob(75)) visible_message("[M] has punched [name]!", \ @@ -60,7 +78,7 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [name]!", \ "[M] has attempted to punch [name]!", null, COMBAT_MESSAGE_RANGE) - if("disarm") + if(INTENT_DISARM) if(!IsUnconscious()) M.do_attack_animation(src, ATTACK_EFFECT_DISARM) if (prob(25)) @@ -74,50 +92,51 @@ visible_message("[M] has disarmed [src]!", "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) /mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent. - if (M.a_intent == INTENT_HARM) - if ((prob(95) && health > 0)) - playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) - var/damage = rand(15, 30) - if (damage >= 25) - damage = rand(20, 40) - if(AmountUnconscious() < 300) - Unconscious(rand(200, 300)) - visible_message("[M] has wounded [name]!", \ - "[M] has wounded [name]!", null, COMBAT_MESSAGE_RANGE) - else - visible_message("[M] has slashed [name]!", \ - "[M] has slashed [name]!", null, COMBAT_MESSAGE_RANGE) - - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - log_combat(M, src, "attacked") - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - if(!dismembering_strike(M, affecting.body_zone)) //Dismemberment successful - return 1 - apply_damage(damage, BRUTE, affecting) - + . = ..() + if(!.) // the attack was blocked or was help/grab intent + return + if (M.a_intent == INTENT_HARM) + if ((prob(95) && health > 0)) + playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) + var/damage = rand(15, 30) + if (damage >= 25) + damage = rand(20, 40) + if(AmountUnconscious() < 300) + Unconscious(rand(200, 300)) + visible_message("[M] has wounded [name]!", \ + "[M] has wounded [name]!", null, COMBAT_MESSAGE_RANGE) else - playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to lunge at [name]!", \ - "[M] has attempted to lunge at [name]!", null, COMBAT_MESSAGE_RANGE) + visible_message("[M] has slashed [name]!", \ + "[M] has slashed [name]!", null, COMBAT_MESSAGE_RANGE) - if (M.a_intent == INTENT_DISARM) - var/obj/item/I = null - playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - if(prob(95)) - Knockdown(20) - visible_message("[M] has tackled down [name]!", \ - "[M] has tackled down [name]!", null, COMBAT_MESSAGE_RANGE) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + log_combat(M, src, "attacked") + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + if(!dismembering_strike(M, affecting.body_zone)) //Dismemberment successful + return 1 + apply_damage(damage, BRUTE, affecting) + + else + playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) + visible_message("[M] has attempted to lunge at [name]!", \ + "[M] has attempted to lunge at [name]!", null, COMBAT_MESSAGE_RANGE) + + else + var/obj/item/I = null + playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) + if(prob(95)) + Knockdown(20) + visible_message("[M] has tackled down [name]!", \ + "[M] has tackled down [name]!", null, COMBAT_MESSAGE_RANGE) + else + I = get_active_held_item() + if(dropItemToGround(I)) + visible_message("[M] has disarmed [name]!", "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE) else - I = get_active_held_item() - if(dropItemToGround(I)) - visible_message("[M] has disarmed [name]!", "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE) - else - I = null - log_combat(M, src, "disarmed", "[I ? " removing \the [I]" : ""]") - updatehealth() - + I = null + log_combat(M, src, "disarmed", "[I ? " removing \the [I]" : ""]") + updatehealth() /mob/living/carbon/monkey/attack_animal(mob/living/simple_animal/M) . = ..() @@ -132,17 +151,19 @@ apply_damage(damage, M.melee_damage_type, affecting) /mob/living/carbon/monkey/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - var/damage = rand(5, 35) - if(M.is_adult) - damage = rand(20, 40) - var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return 1 - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - apply_damage(damage, BRUTE, affecting) + . = ..() + if(!.) //unsuccessful slime attack + return + var/damage = rand(5, 35) + if(M.is_adult) + damage = rand(20, 40) + var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + if(!dam_zone) //Dismemberment successful + return 1 + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + apply_damage(damage, BRUTE, affecting) /mob/living/carbon/monkey/acid_act(acidpwr, acid_volume, bodyzone_hit) . = 1 diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 66be8058f1..0155f2575d 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -1,31 +1,3 @@ -//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. -/mob/living/carbon/update_transform() - var/matrix/ntransform = matrix(transform) //aka transform.Copy() - var/final_pixel_y = pixel_y - var/final_dir = dir - var/changed = 0 - if(lying != lying_prev && rotate_on_lying) - changed++ - ntransform.TurnTo(lying_prev,lying) - if(lying == 0) //Lying to standing - final_pixel_y = get_standard_pixel_y_offset() - else //if(lying != 0) - if(lying_prev == 0) //Standing to lying - pixel_y = get_standard_pixel_y_offset() - final_pixel_y = get_standard_pixel_y_offset(lying) - if(dir & (EAST|WEST)) //Facing east or west - final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass - - if(resize != RESIZE_DEFAULT_SIZE) - changed++ - ntransform.Scale(resize) - resize = RESIZE_DEFAULT_SIZE - - if(changed) - animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) - setMovetype(movement_type & ~FLOATING) // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). - - /mob/living/carbon var/list/overlays_standing[TOTAL_LAYERS] diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 8345ef916d..1c6546fd83 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -91,7 +91,9 @@ if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf) && !(signal & COMPONENT_BLOCK_DEATH_BROADCAST)) var/rendered = "[mind.name] has died at [get_area_name(T)]." deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) - + if (client && client.prefs && client.prefs.auto_ooc) + if (!(client.prefs.chat_toggles & CHAT_OOC)) + client.prefs.chat_toggles ^= CHAT_OOC if (client) client.move_delay = initial(client.move_delay) diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index 420c59b22d..e57e5e2936 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -5,80 +5,126 @@ desc = "Yell at coderbrush." icon = null icon_state = "" - item_flags = DROPDEL var/mob/living/held_mob - var/can_head = TRUE - var/destroying = FALSE + var/can_head = FALSE + w_class = WEIGHT_CLASS_BULKY -/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, head_icon, lh_icon, rh_icon, _can_head = TRUE) +/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, alt_worn, lh_icon, rh_icon, _can_head_override = FALSE) . = ..() - can_head = _can_head - if(head_icon) - alternate_worn_icon = head_icon + + if(M) + M.setDir(SOUTH) + held_mob = M + M.forceMove(src) + appearance = M.appearance + name = M.name + desc = M.desc + + if(_can_head_override) + can_head = _can_head_override + if(alt_worn) + alternate_worn_icon = alt_worn if(_worn_state) item_state = _worn_state + icon_state = _worn_state if(lh_icon) lefthand_file = lh_icon if(rh_icon) righthand_file = rh_icon if(!can_head) slot_flags = NONE - deposit(M) /obj/item/clothing/head/mob_holder/Destroy() - destroying = TRUE if(held_mob) - release(FALSE) + release() return ..() -/obj/item/clothing/head/mob_holder/proc/deposit(mob/living/L) - if(!istype(L)) - return FALSE - L.setDir(SOUTH) - update_visuals(L) - held_mob = L - L.forceMove(src) - name = L.name - desc = L.desc - return TRUE +/obj/item/clothing/head/mob_holder/dropped() + ..() + if(isturf(loc))//don't release on soft-drops + release() -/obj/item/clothing/head/mob_holder/proc/update_visuals(mob/living/L) - appearance = L.appearance - -/obj/item/clothing/head/mob_holder/proc/release(del_on_release = TRUE) - if(!held_mob) - if(del_on_release && !destroying) - qdel(src) - return FALSE +/obj/item/clothing/head/mob_holder/proc/release() if(isliving(loc)) var/mob/living/L = loc - to_chat(L, "[held_mob] wriggles free!") L.dropItemToGround(src) - held_mob.forceMove(get_turf(held_mob)) - held_mob.reset_perspective() - held_mob.setDir(SOUTH) - held_mob.visible_message("[held_mob] uncurls!") - held_mob = null - if(del_on_release && !destroying) - qdel(src) - return TRUE + if(held_mob) + var/mob/living/m = held_mob + m.forceMove(get_turf(m)) + m.reset_perspective() + m.setDir(SOUTH) + held_mob = null + qdel(src) /obj/item/clothing/head/mob_holder/relaymove(mob/user) - release() + return /obj/item/clothing/head/mob_holder/container_resist() + if(isliving(loc)) + var/mob/living/L = loc + visible_message("[src] escapes [L]!") release() -/obj/item/clothing/head/mob_holder/drone/deposit(mob/living/L) - . = ..() - if(!isdrone(L)) - qdel(src) - name = "drone (hiding)" - desc = "This drone is scared and has curled up into a ball!" +/mob/living/proc/mob_pickup(mob/living/L) + var/obj/item/clothing/head/mob_holder/holder = generate_mob_holder() + if(!holder) + return + drop_all_held_items() + L.put_in_hands(holder) + return -/obj/item/clothing/head/mob_holder/drone/update_visuals(mob/living/L) - var/mob/living/simple_animal/drone/D = L - if(!D) - return ..() - icon = 'icons/mob/drone.dmi' - icon_state = "[D.visualAppearence]_hat" +/mob/living/proc/mob_try_pickup(mob/living/user) + if(!ishuman(user) || !src.Adjacent(user) || user.incapacitated() || !can_be_held) + return FALSE + if(user.get_active_held_item()) + to_chat(user, "Your hands are full!") + return FALSE + if(buckled) + to_chat(user, "[src] is buckled to something!") + return FALSE + if(src == user) + to_chat(user, "You can't pick yourself up.") + return FALSE + visible_message("[user] starts picking up [src].", \ + "[user] starts picking you up!") + if(!do_after(user, 20, target = src)) + return FALSE + + if(user.get_active_held_item()||buckled) + return FALSE + + visible_message("[user] picks up [src]!", \ + "[user] picks you up!") + to_chat(user, "You pick [src] up.") + mob_pickup(user) + return TRUE + +/mob/living/AltClick(mob/user) + . = ..() + if(mob_try_pickup(user)) + return TRUE + + +// I didn't define these for mobs, because you shouldn't be able to breathe out of mobs and using their loc isn't always the logical thing to do. + +/obj/item/clothing/head/mob_holder/assume_air(datum/gas_mixture/env) + var/atom/location = loc + if(!loc) + return //null + var/turf/T = get_turf(loc) + while(location != T) + location = location.loc + if(ismob(location)) + return location.loc.assume_air(env) + return loc.assume_air(env) + +/obj/item/clothing/head/mob_holder/remove_air(amount) + var/atom/location = loc + if(!loc) + return //null + var/turf/T = get_turf(loc) + while(location != T) + location = location.loc + if(ismob(location)) + return location.loc.remove_air(amount) + return loc.remove_air(amount) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5299618177..78542ab052 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -40,6 +40,11 @@ QDEL_LIST(diseases) return ..() + +/mob/living/proc/generate_mob_holder() + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, (istext(can_be_held) ? can_be_held : ""), 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi') + return holder + /mob/living/onZImpact(turf/T, levels) if(!isgroundlessturf(T)) ZImpactDamage(T, levels) @@ -50,6 +55,7 @@ adjustBruteLoss((levels * 5) ** 1.5) Knockdown(levels * 50) + /mob/living/proc/OpenCraftingMenu() return @@ -1153,24 +1159,6 @@ if(can_be_held) mob_try_pickup(over) -/mob/living/proc/mob_pickup(mob/living/L) - return - -/mob/living/proc/mob_try_pickup(mob/living/user) - if(!ishuman(user)) - return - if(user.get_active_held_item()) - to_chat(user, "Your hands are full!") - return FALSE - if(buckled) - to_chat(user, "[src] is buckled to something!") - return FALSE - user.visible_message("[user] starts trying to scoop up [src]!") - if(!do_after(user, 20, target = src)) - return FALSE - mob_pickup(user) - return TRUE - /mob/living/proc/get_static_viruses() //used when creating blood and other infective objects if(!LAZYLEN(diseases)) return diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 722c984309..3c5c5e3518 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -36,7 +36,50 @@ /mob/living/proc/on_hit(obj/item/projectile/P) return +/mob/living/proc/check_shields(atom/AM, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0) + var/block_chance_modifier = round(damage / -3) + for(var/obj/item/I in held_items) + if(!istype(I, /obj/item/clothing)) + var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example + if(I.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type)) + return TRUE + return FALSE + +/mob/living/proc/check_reflect(def_zone) //Reflection checks for anything in your hands, based on the reflection chance of the object(s) + for(var/obj/item/I in held_items) + if(I.IsReflect(def_zone)) + return TRUE + return FALSE + +/mob/living/proc/reflect_bullet_check(obj/item/projectile/P, def_zone) + if(P.is_reflectable && check_reflect(def_zone)) // Checks if you've passed a reflection% check + visible_message("The [P.name] gets reflected by [src]!", \ + "The [P.name] gets reflected by [src]!") + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(src) + // redirect the projectile + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.firer = src + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x + var/new_angle_s = P.Angle + rand(120,240) + while(new_angle_s > 180) // Translate to regular projectile degrees + new_angle_s -= 360 + P.setAngle(new_angle_s) + return TRUE + return FALSE + /mob/living/bullet_act(obj/item/projectile/P, def_zone) + if(P.original != src || P.firer != src) //try to block or reflect the bullet, can't do so when shooting oneself + if(reflect_bullet_check(P, def_zone)) + return -1 // complete projectile permutation + if(check_shields(P, P.damage, "the [P.name]", PROJECTILE_ATTACK, P.armour_penetration)) + P.on_hit(src, 100, def_zone) + return 2 var/armor = run_armor_check(def_zone, P.flag, null, null, P.armour_penetration, null) if(!P.nodamage) apply_damage(P.damage, P.damage_type, def_zone, armor) @@ -55,9 +98,32 @@ else return 0 +/mob/living/proc/catch_item(obj/item/I, skip_throw_mode_check = FALSE) + return FALSE + +/mob/living/proc/embed_item(obj/item/I) + return + +/mob/living/proc/can_embed(obj/item/I) + return FALSE + /mob/living/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE) - if(istype(AM, /obj/item)) - var/obj/item/I = AM + var/obj/item/I + var/throwpower = 30 + if(isitem(AM)) + I = AM + throwpower = I.throwforce + if(check_shields(AM, throwpower, "\the [AM.name]", THROWN_PROJECTILE_ATTACK)) + hitpush = FALSE + skipcatch = TRUE + blocked = TRUE + else if(I && I.throw_speed >= EMBED_THROWSPEED_THRESHOLD && can_embed(I, src) && prob(I.embedding.embed_chance) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE) && (!HAS_TRAIT(src, TRAIT_AUTO_CATCH_ITEM) || incapacitated() || get_active_held_item())) + embed_item(I) + hitpush = FALSE + skipcatch = TRUE //can't catch the now embedded item + if(I) + if(!skipcatch && isturf(I.loc) && catch_item(I)) + return TRUE var/zone = ran_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest var/dtype = BRUTE var/volume = I.get_volume_by_throwforce_and_or_w_class() @@ -214,6 +280,24 @@ Move(user.loc) return 1 +/mob/living/attack_hand(mob/user) + ..() //Ignoring parent return value here. + SEND_SIGNAL(src, COMSIG_MOB_ATTACK_HAND, user) + if((user != src) && user.a_intent != INTENT_HELP && check_shields(user, 0, user.name, attack_type = UNARMED_ATTACK)) + log_combat(user, src, "attempted to touch") + visible_message("[user] attempted to touch [src]!") + return TRUE + +/mob/living/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) + if(user.a_intent == INTENT_HARM) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, "You don't want to hurt [src]!") + return TRUE + var/hulk_verb = pick("smash","pummel") + if(user != src && check_shields(user, 15, "the [hulk_verb]ing")) + return TRUE + ..() + return FALSE /mob/living/attack_slime(mob/living/simple_animal/slime/M) if(!SSticker.HasRoundStarted()) @@ -229,6 +313,12 @@ to_chat(M, "You don't want to hurt anyone!") return FALSE + var/damage = rand(5, 35) + if(M.is_adult) + damage = rand(20, 40) + if(check_shields(M, damage, "the [M.name]")) + return FALSE + if (stat != DEAD) log_combat(M, src, "attacked") M.do_attack_animation(src) @@ -245,7 +335,8 @@ if(HAS_TRAIT(M, TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE - + if(check_shields(M, rand(M.melee_damage_lower, M.melee_damage_upper), "the [M.name]", MELEE_ATTACK, M.armour_penetration)) + return FALSE if(M.attack_sound) playsound(loc, M.attack_sound, 50, 1, 1) M.do_attack_animation(src) @@ -256,10 +347,6 @@ /mob/living/attack_paw(mob/living/carbon/monkey/M) - if(isturf(loc) && istype(loc.loc, /area/start)) - to_chat(M, "No attacking people at spawn, you jackass.") - return FALSE - if (M.a_intent == INTENT_HARM) if(HAS_TRAIT(M, TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") @@ -268,6 +355,8 @@ if(M.is_muzzled() || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSMOUTH)) to_chat(M, "You can't bite with your mouth covered!") return FALSE + if(check_shields(M, 0, "the [M.name]")) + return FALSE M.do_attack_animation(src, ATTACK_EFFECT_BITE) if (prob(75)) log_combat(M, src, "attacked") @@ -282,15 +371,16 @@ /mob/living/attack_larva(mob/living/carbon/alien/larva/L) switch(L.a_intent) - if("help") + if(INTENT_HELP) visible_message("[L.name] rubs its head against [src].") return FALSE else if(HAS_TRAIT(L, TRAIT_PACIFISM)) to_chat(L, "You don't want to hurt anyone!") - return - + return FALSE + if(L != src && check_shields(L, rand(1, 3), "the [L.name]")) + return FALSE L.do_attack_animation(src) if(prob(90)) log_combat(L, src, "attacked") @@ -301,24 +391,29 @@ else visible_message("[L.name] has attempted to bite [src]!", \ "[L.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) - return FALSE /mob/living/attack_alien(mob/living/carbon/alien/humanoid/M) + if((M != src) && M.a_intent != INTENT_HELP && check_shields(M, 0, "the [M.name]")) + visible_message("[M] attempted to touch [src]!") + return FALSE switch(M.a_intent) - if ("help") - visible_message("[M] caresses [src] with its scythe like arm.") + if (INTENT_HELP) + if(!isalien(src)) //I know it's ugly, but the alien vs alien attack_alien behaviour is a bit different. + visible_message("[M] caresses [src] with its scythe like arm.") return FALSE - if ("grab") + if (INTENT_GRAB) grabbedby(M) return FALSE - if("harm") + if(INTENT_HARM) if(HAS_TRAIT(M, TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE - M.do_attack_animation(src) + if(!isalien(src)) + M.do_attack_animation(src) return TRUE - if("disarm") - M.do_attack_animation(src, ATTACK_EFFECT_DISARM) + if(INTENT_DISARM) + if(!isalien(src)) + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) return TRUE /mob/living/ex_act(severity, target, origin) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 4d2a36907d..783e044492 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -111,4 +111,6 @@ var/list/diseases = list() // list of all diseases in a mob var/list/disease_resistances = list() - var/drag_slowdown = TRUE //Whether the mob is slowed down when dragging another prone mob \ No newline at end of file + var/drag_slowdown = TRUE //Whether the mob is slowed down when dragging another prone mob + + var/rotate_on_lying = FALSE \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4c670129c1..2cab7d4c8a 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -216,6 +216,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return 1 +/mob/living/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE, atom/movable/source) + . = ..() + if(isliving(speaker)) + var/turf/sourceturf = get_turf(source) + var/turf/T = get_turf(src) + if(sourceturf && T && !(sourceturf in get_hear(5, T))) + . = "[.]" + /mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source) . = ..() if(!client) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 0444458841..1694d04b82 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -260,15 +260,6 @@ viewalerts = 1 src << browse(dat, "window=aialerts&can_close=0") -/mob/living/silicon/ai/proc/ai_roster() - var/dat = "Crew RosterCrew Roster:

    " - - dat += GLOB.data_core.get_manifest() - dat += "" - - src << browse(dat, "window=airoster") - onclose(src, "airoster") - /mob/living/silicon/ai/proc/ai_call_shuttle() if(control_disabled) to_chat(usr, "Wireless control is disabled!") @@ -681,18 +672,23 @@ "green face" = 'icons/mob/ai.dmi', "xeno queen" = 'icons/mob/alien.dmi', "horror" = 'icons/mob/ai.dmi', - "creature" = 'icons/mob/ai.dmi' + "creature" = 'icons/mob/ai.dmi', + "custom" ) input = input("Please select a hologram:") as null|anything in icon_list if(input) qdel(holo_icon) switch(input) - if("xeno queen") + if("custom") + if(client?.prefs?.custom_holoform_icon) + holo_icon = client.prefs.get_filtered_holoform(HOLOFORM_FILTER_AI) + else + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "female")) + else if("xeno queen") holo_icon = getHologramIcon(icon(icon_list[input],"alienq")) else holo_icon = getHologramIcon(icon(icon_list[input], input)) - return /mob/living/silicon/ai/proc/corereturn() set category = "Malfunction" diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 7c59c2b791..97d26f672a 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -1,15 +1,9 @@ - /mob/living/silicon/ai/attacked_by(obj/item/I, mob/living/user, def_zone) + . = ..() + if(!.) + return FALSE if(I.force && I.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. spark_system.start() - return ..() - - -/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M) - if(!SSticker.HasRoundStarted()) - to_chat(M, "You cannot attack people before the game has started.") - return - ..() /mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user) return //immune to slimes diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 7477ba7713..38afaf8313 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -68,7 +68,7 @@ // Use this when setting the aiEye's location. // It will also stream the chunk that the new loc is in. -/mob/camera/aiEye/proc/setLoc(T, force_update = FALSE) +/mob/camera/aiEye/proc/setLoc(T, force_update = FALSE, dir) if(ai) if(!isturf(ai.loc)) return @@ -88,7 +88,7 @@ //Holopad if(istype(ai.current, /obj/machinery/holopad)) var/obj/machinery/holopad/H = ai.current - H.move_hologram(ai, T) + H.move_hologram(ai, T, dir) if(ai.camera_light_on) ai.light_cameras() if(ai.master_multicam) @@ -139,7 +139,7 @@ for(var/i = 0; i < max(user.sprint, initial); i += 20) var/turf/step = get_turf(get_step(user.eyeobj, direct)) if(step) - user.eyeobj.setLoc(step) + user.eyeobj.setLoc(step, null, direct) user.cooldown = world.timeofday + 5 if(user.acceleration) diff --git a/code/modules/mob/living/silicon/custom_holoform.dm b/code/modules/mob/living/silicon/custom_holoform.dm new file mode 100644 index 0000000000..8ce6e9a29a --- /dev/null +++ b/code/modules/mob/living/silicon/custom_holoform.dm @@ -0,0 +1,28 @@ +/mob/living/silicon/verb/clear_custom_holoform() + set name = "Clear Custom Holoform" + set desc = "Clear your current custom holoform" + set category = "OOC" + + if(!client.prefs) + to_chat(src, "No preferences datum on your client, contact an admin/coder!") + return + client.prefs.custom_holoform_icon = null + client.prefs.cached_holoform_icons = null + to_chat(src, "Holoform removed.") + +/mob/living/silicon/verb/set_custom_holoform() + set name = "Set Custom Holoform" + set desc = "Set your custom holoform using your current preferences slot and a specified set of gear." + set category = "OOC" + + if(!client.prefs) + to_chat(src, "No preferences datum on your client, contact an admin/coder!") + return + if(client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) + to_chat(src, "You are attempting to change custom holoforms too fast!") + var/icon/new_holoform = user_interface_custom_holoform(client) + if(new_holoform) + client.prefs.custom_holoform_icon = new_holoform + client.prefs.cached_holoform_icons = null + client.prefs.last_custom_holoform = world.time + to_chat(src, "Holoform set.") diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 7ec63cf415..7055838039 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -58,10 +58,12 @@ var/canholo = TRUE var/obj/item/card/id/access_card = null var/chassis = "repairbot" - var/list/possible_chassis = list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE, - "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE, "borgi" = FALSE , - "parrot" = FALSE, "bear" = FALSE , "mushroom" = FALSE, "crow" = FALSE , - "fairy" = FALSE , "spiderbot" = FALSE) //assoc value is whether it can be picked up. + var/dynamic_chassis + var/dynamic_chassis_sit = FALSE //whether we're sitting instead of resting spritewise + var/dynamic_chassis_bellyup = FALSE //whether we're lying down bellyup + var/list/possible_chassis //initialized in initialize. + var/list/dynamic_chassis_icons //ditto. + var/list/chassis_pixel_offsets_x //stupid dogborgs var/static/item_head_icon = 'icons/mob/pai_item_head.dmi' var/static/item_lh_icon = 'icons/mob/pai_item_lh.dmi' var/static/item_rh_icon = 'icons/mob/pai_item_rh.dmi' @@ -69,22 +71,20 @@ var/emitterhealth = 20 var/emittermaxhealth = 20 var/emitterregen = 0.25 + var/emitter_next_use = 0 + var/emitter_emp_cd = 300 var/emittercd = 50 var/emitteroverloadcd = 100 - var/emittersemicd = FALSE - var/overload_ventcrawl = 0 - var/overload_bulletblock = 0 //Why is this a good idea? - var/overload_maxhealth = 0 + var/radio_short = FALSE + var/radio_short_cooldown = 5 MINUTES + var/radio_short_timerid + canmove = FALSE var/silent = FALSE var/brightness_power = 5 -/mob/living/silicon/pai/can_unbuckle() - return FALSE - -/mob/living/silicon/pai/can_buckle() - return FALSE + var/icon/custom_holoform_icon /mob/living/silicon/pai/Destroy() if (loc != card) @@ -118,6 +118,13 @@ pda.owner = text("[]", src) pda.name = pda.owner + " (" + pda.ownjob + ")" + possible_chassis = typelist(NAMEOF(src, possible_chassis), list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE, + "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE, "borgi" = FALSE , + "parrot" = FALSE, "bear" = FALSE , "mushroom" = FALSE, "crow" = FALSE , + "fairy" = FALSE , "spiderbot" = FALSE)) //assoc value is whether it can be picked up. + dynamic_chassis_icons = typelist(NAMEOF(src, dynamic_chassis_icons), initialize_dynamic_chassis_icons()) + chassis_pixel_offsets_x = typelist(NAMEOF(src, chassis_pixel_offsets_x), default_chassis_pixel_offsets_x()) + . = ..() var/datum/action/innate/pai/software/SW = new @@ -133,8 +140,7 @@ AR.Grant(src) AL.Grant(src) ALM.Grant(src) - emittersemicd = TRUE - addtimer(CALLBACK(src, .proc/emittercool), 600) + emitter_next_use = world.time + 10 SECONDS /mob/living/silicon/pai/Life() if(hacking) @@ -228,7 +234,7 @@ /datum/action/innate/pai/shell/Trigger() ..() if(P.holoform) - P.fold_in(0) + P.fold_in(FALSE) else P.fold_out() @@ -292,3 +298,132 @@ /mob/living/silicon/pai/process() emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth) + +/mob/living/silicon/pai/proc/short_radio() + if(radio_short_timerid) + deltimer(radio_short_timerid) + radio_short = TRUE + to_chat(src, "Your radio shorts out!") + radio_short_timerid = addtimer(CALLBACK(src, .proc/unshort_radio), radio_short_cooldown, flags = TIMER_STOPPABLE) + +/mob/living/silicon/pai/proc/unshort_radio() + radio_short = FALSE + to_chat(src, "You feel your radio is operational once more.") + if(radio_short_timerid) + deltimer(radio_short_timerid) + +/mob/living/silicon/pai/proc/initialize_dynamic_chassis_icons() + . = list() + var/icon/curr //for inserts + + //This is a horrible system and I wish I was not as lazy and did something smarter, like just generating a new icon in memory which is probably more efficient. + + //Basic /tg/ cyborgs + .["Cyborg - Engineering (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "engineer"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (loaderborg)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "loaderborg"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (handyeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "handyeng"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (sleekeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "sleekeng"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (marinaeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "marinaeng"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Medical (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "medical"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Medical (marinamed)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "marinamed"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Medical (eyebotmed)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "eyebotmed"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Security (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "sec"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Security (sleeksec)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "sleeksec"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Security (marinasec)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "marinasec"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Clown (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "clown"), HOLOFORM_FILTER_PAI, FALSE) + + //Citadel dogborgs + //Engi + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (dog - valeeng)"] = curr + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (dog - pupdozer)"] = curr + //Med + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "medihound") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Medical (dog - medihound)"] = curr + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Medical (dog - medihounddark)"] = curr + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valemed") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Medical (dog - valemed)"] = curr + //Sec + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "k9") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Security (dog - k9)"] = curr + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Security (dog - k9dark)"] = curr + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valesec") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Security (dog - valesec)"] = curr + //Service + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Service (dog - valeserv)"] = curr + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Service (dog - valeservdark)"] = curr + //Sci + curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valesci") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-bellyup"), "bellyup") + process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Science (dog - valesci)"] = curr + //Misc + .["Cyborg - Misc (dog - blade)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/widerobot.dmi', "blade"), HOLOFORM_FILTER_PAI, FALSE) + +/mob/living/silicon/pai/proc/default_chassis_pixel_offsets_x() + . = list() + //Engi + .["Cyborg - Engineering (dog - valeeng)"] = -16 + .["Cyborg - Engineering (dog - pupdozer)"] = -16 + //Med + .["Cyborg - Medical (dog - medihound)"] = -16 + .["Cyborg - Medical (dog - medihounddark)"] = -16 + .["Cyborg - Medical (dog - valemed)"] = -16 + //Sec + .["Cyborg - Security (dog - k9)"] = -16 + .["Cyborg - Security (dog - valesec)"] = -16 + .["Cyborg - Security (dog - k9dark)"] = -16 + //Service + .["Cyborg - Service (dog - valeserv)"] = -16 + .["Cyborg - Service (dog - valeservdark)"] = -16 + //Sci + .["Cyborg - Security (dog - valesci)"] = -16 + //Misc + .["Cyborg - Misc (dog - blade)"] = -16 diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index dda8ddfebd..c727e100d8 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -8,9 +8,10 @@ return take_holo_damage(50/severity) Knockdown(400/severity) - silent = max(30/severity, silent) + silent = max((3 MINUTES)/severity, silent) if(holoform) fold_in(force = TRUE) + emitter_next_use = world.time + emitter_emp_cd //Need more effects that aren't instadeath or permanent law corruption. /mob/living/silicon/pai/ex_act(severity, target) @@ -26,13 +27,14 @@ fold_in(force = 1) Knockdown(200) +//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/silicon/pai/attack_hand(mob/living/carbon/human/user) switch(user.a_intent) - if("help") + if(INTENT_HELP) visible_message("[user] gently pats [src] on the head, eliciting an off-putting buzzing from its holographic field.") - if("disarm") + if(INTENT_DISARM) visible_message("[user] boops [src] on the head!") - if("harm") + if(INTENT_HARM) user.do_attack_animation(src) if (user.name == master) visible_message("Responding to its master's touch, [src] disengages its holochassis emitter, rapidly losing coherence.") @@ -41,14 +43,19 @@ if(user.put_in_hands(card)) user.visible_message("[user] promptly scoops up [user.p_their()] pAI's card.") else + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, "You don't want to hurt [src]!") + return visible_message("[user] stomps on [src]!.") take_holo_damage(2) + else + grabbedby(user) -/mob/living/silicon/pai/bullet_act(obj/item/projectile/Proj) - if(Proj.stun) +/mob/living/silicon/pai/bullet_act(obj/item/projectile/P, def_zone) + if(P.stun) fold_in(force = TRUE) - src.visible_message("The electrically-charged projectile disrupts [src]'s holomatrix, forcing [src] to fold in!") - . = ..(Proj) + visible_message("The electrically-charged projectile disrupts [src]'s holomatrix, forcing [src] to fold in!") + . = ..() /mob/living/silicon/pai/stripPanelUnequip(obj/item/what, mob/who, where) //prevents stripping to_chat(src, "Your holochassis stutters and warps intensely as you attempt to interact with the object, forcing you to cease lest the field fail.") @@ -63,7 +70,8 @@ emitterhealth = CLAMP((emitterhealth - amount), -50, emittermaxhealth) if(emitterhealth < 0) fold_in(force = TRUE) - to_chat(src, "The impact degrades your holochassis!") + if(amount > 0) + to_chat(src, "The impact degrades your holochassis!") return amount /mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE) diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 164a3e7389..6577c26402 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -12,12 +12,11 @@ . = fold_in(force) return - if(emittersemicd) + if(world.time < emitter_next_use) to_chat(src, "Error: Holochassis emitters recycling. Please try again later.") return FALSE - emittersemicd = TRUE - addtimer(CALLBACK(src, .proc/emittercool), emittercd) + emitter_next_use = world.time + emittercd canmove = TRUE density = TRUE if(istype(card.loc, /obj/item/pda)) @@ -46,20 +45,17 @@ visible_message("[src] folds out its holochassis emitter and forms a holoshell around itself!") holoform = TRUE -/mob/living/silicon/pai/proc/emittercool() - emittersemicd = FALSE - /mob/living/silicon/pai/proc/fold_in(force = FALSE) - emittersemicd = TRUE - if(!force) - addtimer(CALLBACK(src, .proc/emittercool), emittercd) - else - addtimer(CALLBACK(src, .proc/emittercool), emitteroverloadcd) + emitter_next_use = world.time + (force? emitteroverloadcd : emittercd) icon_state = "[chassis]" if(!holoform) . = fold_out(force) return - visible_message("[src] deactivates its holochassis emitter and folds back into a compact card!") + if(force) + short_radio() + visible_message("[src] shorts out, collapsing back into their storage card, sparks emitted from their radio antenna!") + else + visible_message("[src] deactivates its holochassis emitter and folds back into a compact card!") stop_pulling() if(client) client.perspective = EYE_PERSPECTIVE @@ -78,28 +74,39 @@ if(!isturf(loc) && loc != card) to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!") return FALSE - var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in possible_chassis - if(!choice) + var/list/choices = list("Preset - Basic", "Preset - Dynamic") + if(CONFIG_GET(flag/pai_custom_holoforms)) + choices += "Custom" + var/choicetype = input(src, "What type of chassis do you want to use?") as null|anything in choices + if(!choicetype) return FALSE - chassis = choice - icon_state = "[chassis]" - if(resting) - icon_state = "[chassis]_rest" + switch(choicetype) + if("Custom") + chassis = "custom" + if("Preset - Basic") + var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in possible_chassis + if(!choice) + return FALSE + chassis = choice + if("Preset - Dynamic") + var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in dynamic_chassis_icons + if(!choice) + return FALSE + chassis = "dynamic" + dynamic_chassis = choice + resist_a_rest(FALSE, TRUE) + update_icon() to_chat(src, "You switch your holochassis projection composite to [chassis]") /mob/living/silicon/pai/lay_down() - ..() - update_resting_icon(resting) - -/mob/living/silicon/pai/proc/update_resting_icon(rest) - if(rest) - icon_state = "[chassis]_rest" - else - icon_state = "[chassis]" + . = ..() if(loc != card) - visible_message("[src] [rest? "lays down for a moment..." : "perks up from the ground"]") + visible_message("[src] [resting? "lays down for a moment..." : "perks up from the ground"]") + update_icon() -/mob/living/silicon/pai/start_pulling(atom/movable/AM) +/mob/living/silicon/pai/start_pulling(atom/movable/AM, gs) + if(ispAI(AM)) + return ..() return FALSE /mob/living/silicon/pai/proc/toggle_integrated_light() @@ -122,3 +129,22 @@ to_chat(user, "[src]'s current form isn't able to be carried!") return FALSE return ..() + +/mob/living/silicon/pai/verb/toggle_chassis_sit() + set name = "Toggle Chassis Sit" + set category = "IC" + set desc = "Whether or not to try to use a sitting icon versus a resting icon. Takes priority over belly-up resting." + dynamic_chassis_sit = !dynamic_chassis_sit + to_chat(usr, "You are now [dynamic_chassis_sit? "sitting" : "lying down"].") + update_icon() + +/mob/living/silicon/pai/verb/toggle_chassis_bellyup() + set name = "Toggle Chassis Belly Up" + set category = "IC" + set desc = "Whether or not to try to use a belly up icon while resting. Overridden by sitting." + dynamic_chassis_bellyup = !dynamic_chassis_bellyup + to_chat(usr, "You are now lying on your [dynamic_chassis_bellyup? "back" : "front"].") + update_icon() + +/mob/living/silicon/pai/can_buckle_others(mob/living/target, atom/buckle_to) + return ispAI(target) && ..() diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm index 9f07900a25..deedaa1382 100644 --- a/code/modules/mob/living/silicon/pai/say.dm +++ b/code/modules/mob/living/silicon/pai/say.dm @@ -5,4 +5,11 @@ ..(message) /mob/living/silicon/pai/binarycheck() - return 0 + return FALSE + +/mob/living/silicon/pai/radio(message, message_mode, list/spans, language) + if((message_mode == "robot") || (message_mode in GLOB.radiochannels)) + if(radio_short) + to_chat(src, "Your radio is shorted out!") + return ITALICS | REDUCE_RANGE + return ..() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 9882d028d1..3ea018ccf6 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -283,7 +283,10 @@ dat += "Refresh
    " // Built-in dat += "Directives
    " - dat += "Radio Configuration
    " + if(radio_short) + dat += "\[RADIO SHORTED - Recalibrating!\]" + else + dat += "Radio Configuration
    " dat += "Screen Display
    " //dat += "Text Messaging
    " dat += "
    " diff --git a/code/modules/mob/living/silicon/pai/update_icon.dm b/code/modules/mob/living/silicon/pai/update_icon.dm new file mode 100644 index 0000000000..9e40b71c5d --- /dev/null +++ b/code/modules/mob/living/silicon/pai/update_icon.dm @@ -0,0 +1,27 @@ +/mob/living/silicon/pai/update_icon() + if(chassis == "custom") //Make sure custom exists if it's set to custom + custom_holoform_icon = client?.prefs?.get_filtered_holoform(HOLOFORM_FILTER_PAI) + if(!custom_holoform_icon) + chassis = pick(possible_chassis - "custom") + if(chassis == "dynamic") //handle dynamic generated icons + icon = dynamic_chassis_icons[dynamic_chassis] + var/list/states = icon_states(icon) + icon_state = "" + if(resting) //The next line is some bullshit but I can make it worse if you want and make it a single line instead of four.. :) + if(dynamic_chassis_sit && ("sit") in states) + icon_state = "sit" + else if(dynamic_chassis_bellyup && ("bellyup") in states) + icon_state = "bellyup" + else if("rest" in states) + icon_state = "rest" + rotate_on_lying = FALSE + else if(chassis == "custom") + icon = custom_holoform_icon + icon_state = "" + rotate_on_lying = TRUE + else + icon = initial(icon) + icon_state = "[chassis][resting? "_rest" : (stat == DEAD? "_dead" : "")]" + rotate_on_lying = FALSE + pixel_x = ((chassis == "dynamic") && chassis_pixel_offsets_x[dynamic_chassis]) || 0 + update_transform() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index aa710e2644..42b9fb7423 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -21,7 +21,7 @@ if(istype(O,/obj/item/gun/energy/laser/cyborg)) laser = FALSE update_icons() - else if(istype(O,/obj/item/gun/energy/disabler/cyborg)) + else if(istype(O,/obj/item/gun/energy/disabler/cyborg) || istype(O,/obj/item/gun/energy/e_gun/advtaser/cyborg)) disabler = FALSE update_icons() //PUT THE GUN AWAY else if(istype(O,/obj/item/dogborg/sleeper)) @@ -63,7 +63,7 @@ if(istype(O,/obj/item/gun/energy/laser/cyborg)) laser = TRUE update_icons() //REEEEEEACH FOR THE SKY - if(istype(O,/obj/item/gun/energy/disabler/cyborg)) + if(istype(O,/obj/item/gun/energy/disabler/cyborg) || istype(O,/obj/item/gun/energy/e_gun/advtaser/cyborg)) disabler = TRUE update_icons() //END CITADEL EDIT diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c5c2beb999..5f7d3ca243 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -242,7 +242,6 @@ modulelist["Peacekeeper"] = /obj/item/robot_module/peacekeeper if(BORG_SEC_AVAILABLE) modulelist["Security"] = /obj/item/robot_module/security - modulelist["Security K-9"] = /obj/item/robot_module/k9 var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in modulelist if(!input_module || module.type != /obj/item/robot_module) @@ -1299,4 +1298,12 @@ /mob/living/silicon/robot/adjustStaminaLossBuffered(amount, updating_health = 1) if(istype(cell)) - cell.charge -= amount*5 \ No newline at end of file + cell.charge -= amount*5 + +/mob/living/silicon/robot/verb/viewmanifest() + set category = "Robot Commands" + set name = "View Crew Manifest" + + if(usr.stat == DEAD) + return //won't work if dead + ai_roster() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 0f09b6f62a..7e06c66eff 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -13,7 +13,19 @@ spark_system.start() return ..() +/mob/living/silicon/robot/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) + . = ..() + if(.) + spark_system.start() + spawn(0) + step_away(src,user,15) + sleep(3) + step_away(src,user,15) + /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M) + . = ..() + if(!.) // the attack was blocked or was help/grab intent + return if (M.a_intent == INTENT_DISARM) if(!(lying)) M.do_attack_animation(src, ATTACK_EFFECT_DISARM) @@ -30,24 +42,19 @@ visible_message("[M] has forced back [src]!", \ "[M] has forced back [src]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1) - else - ..() - return /mob/living/silicon/robot/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime shock - flash_act() - var/stunprob = M.powerlevel * 7 + 10 - if(prob(stunprob) && M.powerlevel >= 8) - adjustBruteLoss(M.powerlevel * rand(6,10)) - - var/damage = rand(1, 3) - + . = ..() + if(!.) //unsuccessful slime shock + return + var/stunprob = M.powerlevel * 7 + 10 + var/damage = M.powerlevel * rand(6,10) + if(prob(stunprob) && M.powerlevel >= 8) + flash_act(affect_silicon = TRUE) //my borg eyes! if(M.is_adult) - damage = rand(20, 40) + damage += rand(10, 20) else - damage = rand(5, 35) - damage = round(damage / 2) // borgs receive half damage + damage += rand(2, 17) adjustBruteLoss(damage) updatehealth() @@ -56,23 +63,17 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/silicon/robot/attack_hand(mob/living/carbon/human/user) add_fingerprint(user) - if(opened && !wiresexposed && !issilicon(user)) - if(cell) - cell.update_icon() - cell.add_fingerprint(user) - user.put_in_active_hand(cell) - to_chat(user, "You remove \the [cell].") - cell = null - update_icons() - diag_hud_set_borgcell() + if(opened && !wiresexposed && cell && !issilicon(user)) + cell.update_icon() + cell.add_fingerprint(user) + user.put_in_active_hand(cell) + to_chat(user, "You remove \the [cell].") + cell = null + update_icons() + diag_hud_set_borgcell() if(!opened) - if(..()) // hulk attack - spark_system.start() - spawn(0) - step_away(src,user,15) - sleep(3) - step_away(src,user,15) + return ..() /mob/living/silicon/robot/fire_act() if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them @@ -182,9 +183,9 @@ if (stat != DEAD) adjustBruteLoss(30) -/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj) - ..(Proj) +/mob/living/silicon/robot/bullet_act(obj/item/projectile/P, def_zone) + ..() updatehealth() - if(prob(75) && Proj.damage > 0) + if(prob(75) && P.damage > 0) spark_system.start() return 2 diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ccb879870a..ece7fe9ecb 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -139,8 +139,6 @@ //Adds flavoursome dogborg items to dogborg variants without mechanical benefits /obj/item/robot_module/proc/dogborg_equip() - if(istype(src, /obj/item/robot_module/k9)) - return //Bandaid fix to prevent stacking until I merge these two modules into their base types var/obj/item/I = new /obj/item/analyzer/nose/flavour(src) basic_modules += I I = new /obj/item/soap/tongue/flavour(src) @@ -361,6 +359,7 @@ if("Medihound") cyborg_base_icon = "medihound" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + sleeper_overlay = "msleeper" moduleselect_icon = "medihound" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' has_snowflake_deadsprite = TRUE @@ -528,7 +527,10 @@ /obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module) var/mob/living/silicon/robot/R = loc - var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads", "Heavy", "Sleek", "Can", "Marina", "Spider") + var/list/secmodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Can", "Marina", "Spider", "K9", "K9 Dark", "Vale") + if(R.client && R.client.ckey in list("nezuli")) + secmodels += "Alina" + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in secmodels if(!borg_icon) return FALSE switch(borg_icon) @@ -553,60 +555,39 @@ if("Heavy") cyborg_base_icon = "heavysec" cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' - return ..() - -/obj/item/robot_module/k9 - name = "Security K-9 Unit" - basic_modules = list( - /obj/item/restraints/handcuffs/cable/zipties, - /obj/item/storage/bag/borgdelivery, - /obj/item/dogborg/jaws/big, - /obj/item/dogborg/pounce, - /obj/item/clothing/mask/gas/sechailer/cyborg, - /obj/item/soap/tongue, - /obj/item/analyzer/nose, - /obj/item/dogborg/sleeper/K9, - /obj/item/gun/energy/disabler/cyborg, - /obj/item/pinpointer/crew) - emag_modules = list(/obj/item/gun/energy/laser/cyborg) - ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security, - /obj/item/clockwork/weapon/ratvarian_spear) - cyborg_base_icon = "k9" - moduleselect_icon = "k9" - moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - hat_offset = INFINITY - sleeper_overlay = "ksleeper" - cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 - -/obj/item/robot_module/k9/do_transform_animation() - ..() - to_chat(loc,"While you have picked the Security K-9 module, you still have to follow your laws, NOT Space Law. \ - For Crewsimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") - -/obj/item/robot_module/k9/be_transformed_to(obj/item/robot_module/old_module) - var/mob/living/silicon/robot/R = loc - var/list/sechoundmodels = list("Default", "Dark", "Vale") - if(R.client && R.client.ckey in list("nezuli")) - sechoundmodels += "Alina" - var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in sechoundmodels - if(!borg_icon) - return FALSE - switch(borg_icon) - if("Default") + if("K9") cyborg_base_icon = "k9" + sleeper_overlay = "ksleeper" + hat_offset = INFINITY + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 if("Alina") cyborg_base_icon = "alina-sec" special_light_key = "alina" sleeper_overlay = "alinasleeper" - if("Dark") + hat_offset = INFINITY + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 + if("K9 Dark") cyborg_base_icon = "k9dark" sleeper_overlay = "k9darksleeper" + hat_offset = INFINITY + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 if("Vale") cyborg_base_icon = "valesec" sleeper_overlay = "valesecsleeper" + hat_offset = INFINITY + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + dogborg = TRUE + cyborg_pixel_offset = -16 return ..() /obj/item/robot_module/security/Initialize() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b9cee43138..699105ac4c 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -389,6 +389,15 @@ if (aicamera) return aicamera.selectpicture(user) +/mob/living/silicon/proc/ai_roster() + var/dat = "Crew RosterCrew Roster:

    " + + dat += GLOB.data_core.get_manifest() + dat += "" + + src << browse(dat, "window=airoster") + onclose(src, "airoster") + /mob/living/silicon/update_transform() var/matrix/ntransform = matrix(transform) //aka transform.Copy() var/changed = 0 diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 073a2eec2b..ca8ad25713 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -6,7 +6,10 @@ return 2 /mob/living/silicon/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent + . = ..() + if(!.) // the attack was blocked or was help/grab intent + return + if(M.a_intent == INTENT_HARM) var/damage = 20 if (prob(90)) log_combat(M, src, "attacked") @@ -49,34 +52,33 @@ /mob/living/silicon/attack_paw(mob/living/user) return attack_hand(user) -/mob/living/silicon/attack_larva(mob/living/carbon/alien/larva/L) - if(L.a_intent == INTENT_HELP) - visible_message("[L.name] rubs its head against [src].") - -/mob/living/silicon/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) +/mob/living/silicon/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) - ..(user, 1) + . = ..(user, TRUE) + if(.) + return adjustBruteLoss(rand(10, 15)) playsound(loc, "punch", 25, 1, -1) visible_message("[user] has punched [src]!", \ "[user] has punched [src]!") - return 1 - return 0 + return TRUE + return FALSE -//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/silicon/attack_hand(mob/living/carbon/human/M) + . = ..() + if(.) //the attack was blocked + return switch(M.a_intent) - if ("help") + if (INTENT_HELP) M.visible_message("[M] pets [src].", \ "You pet [src].") - if("grab") + if(INTENT_GRAB) grabbedby(M) else M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(src.loc, 'sound/effects/bang.ogg', 10, 1) visible_message("[M] punches [src], but doesn't leave a dent.", \ "[M] punches [src], but doesn't leave a dent.", null, COMBAT_MESSAGE_RANGE) - return 0 /mob/living/silicon/attack_drone(mob/living/simple_animal/drone/M) if(M.a_intent == INTENT_HARM) @@ -108,19 +110,25 @@ M.visible_message("[M] is thrown off of [src]!") flash_act(affect_silicon = 1) -/mob/living/silicon/bullet_act(obj/item/projectile/Proj) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - adjustBruteLoss(Proj.damage) - if(prob(Proj.damage*1.5)) +/mob/living/silicon/bullet_act(obj/item/projectile/P, def_zone) + if(P.original != src || P.firer != src) //try to block or reflect the bullet, can't do so when shooting oneself + if(reflect_bullet_check(P, def_zone)) + return -1 // complete projectile permutation + if(check_shields(P, P.damage, "the [P.name]", PROJECTILE_ATTACK, P.armour_penetration)) + P.on_hit(src, 100, def_zone) + return 2 + if((P.damage_type == BRUTE || P.damage_type == BURN)) + adjustBruteLoss(P.damage) + if(prob(P.damage*1.5)) for(var/mob/living/M in buckled_mobs) M.visible_message("[M] is knocked off of [src]!") unbuckle_mob(M) M.Knockdown(40) - if(Proj.stun || Proj.knockdown) + if(P.stun || P.knockdown) for(var/mob/living/M in buckled_mobs) unbuckle_mob(M) - M.visible_message("[M] is knocked off of [src] by the [Proj]!") - Proj.on_hit(src) + M.visible_message("[M] is knocked off of [src] by the [P]!") + P.on_hit(src) return 2 /mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash/static) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 793df63c87..0dfa126e79 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -1,20 +1,22 @@ /mob/living/simple_animal/attack_hand(mob/living/carbon/human/M) - ..() + . = ..() + if(.) //the attack was blocked + return switch(M.a_intent) - if("help") + if(INTENT_HELP) if (health > 0) visible_message("[M] [response_help] [src].") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if("grab") + if(INTENT_GRAB) if(grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) vore_attack(M, pulling) else grabbedby(M) - if("harm", "disarm") + if(INTENT_HARM, INTENT_DISARM) if(HAS_TRAIT(M, TRAIT_PACIFISM)) to_chat(M, "You don't want to hurt [src]!") return @@ -27,12 +29,11 @@ updatehealth() return TRUE -/mob/living/simple_animal/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) +/mob/living/simple_animal/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "You don't want to hurt [src]!") - return FALSE - ..(user, 1) + . = ..(user, TRUE) + if(.) + return playsound(loc, "punch", 25, 1, -1) visible_message("[user] has punched [src]!", \ "[user] has punched [src]!", null, COMBAT_MESSAGE_RANGE) @@ -40,32 +41,32 @@ return TRUE /mob/living/simple_animal/attack_paw(mob/living/carbon/monkey/M) - if(..()) //successful monkey bite. - if(stat != DEAD) - var/damage = rand(1, 3) - attack_threshold_check(damage) - return 1 + . = ..() + if(.) //successful larva bite + var/damage = rand(1, 3) + attack_threshold_check(damage) + return 1 if (M.a_intent == INTENT_HELP) if (health > 0) visible_message("[M.name] [response_help] [src].") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - /mob/living/simple_animal/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent. - if(M.a_intent == INTENT_DISARM) - playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - visible_message("[M] [response_disarm] [name]!", \ - "[M] [response_disarm] [name]!", null, COMBAT_MESSAGE_RANGE) - log_combat(M, src, "disarmed") - else - var/damage = rand(15, 30) - visible_message("[M] has slashed at [src]!", \ - "[M] has slashed at [src]!", null, COMBAT_MESSAGE_RANGE) - playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) - attack_threshold_check(damage) - log_combat(M, src, "attacked") - return 1 + . = ..() + if(!.) // the attack was blocked or was help/grab intent + return + if(M.a_intent == INTENT_DISARM) + playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) + visible_message("[M] [response_disarm] [name]!", \ + "[M] [response_disarm] [name]!", null, COMBAT_MESSAGE_RANGE) + log_combat(M, src, "disarmed") + else + var/damage = rand(15, 30) + visible_message("[M] has slashed at [src]!", \ + "[M] has slashed at [src]!", null, COMBAT_MESSAGE_RANGE) + playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) + attack_threshold_check(damage) + log_combat(M, src, "attacked") /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L) . = ..() @@ -82,7 +83,8 @@ return attack_threshold_check(damage, M.melee_damage_type) /mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack + . = ..() + if(.) //successful slime shock var/damage = rand(15, 25) if(M.is_adult) damage = rand(20, 35) diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index f2ab3e56ed..03afecc66f 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -51,7 +51,7 @@ weapon.attack(C, src) playsound(src, 'sound/weapons/blade1.ogg', 50, TRUE, -1) if(C.stat == DEAD) - addtimer(CALLBACK(src, .proc/update_icon), 2) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 2) back_to_idle() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 7a653f4aa4..3397d9f4b6 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -840,7 +840,7 @@ Pass a positive integer as an argument to override a bot's default speed. ejectpai(usr) update_controls() -/mob/living/simple_animal/bot/proc/update_icon() +/mob/living/simple_animal/bot/update_icon_state() icon_state = "[initial(icon_state)][on]" // Machinery to simplify topic and access calls diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 396c6de166..cae707ce46 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -318,9 +318,9 @@ sleep(50) if(mode == BOT_REPAIRING && src.loc == target_turf) if(autotile) //Build the floor and include a tile. - target_turf.PlaceOnTop(/turf/open/floor/plasteel) + target_turf.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR) else //Build a hull plating without a floor tile. - target_turf.PlaceOnTop(/turf/open/floor/plating) + target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else var/turf/open/floor/F = target_turf @@ -334,7 +334,7 @@ if(mode == BOT_REPAIRING && F && src.loc == F) F.broken = 0 F.burnt = 0 - F.PlaceOnTop(/turf/open/floor/plasteel) + F.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR) if(replacetiles && F.type != initial(tiletype.turf_type) && specialtiles && !isplatingturf(F)) anchored = TRUE @@ -345,7 +345,7 @@ if(mode == BOT_REPAIRING && F && src.loc == F) F.broken = 0 F.burnt = 0 - F.PlaceOnTop(initial(tiletype.turf_type)) + F.PlaceOnTop(initial(tiletype.turf_type), flags = CHANGETURF_INHERIT_AIR) specialtiles -= 1 if(specialtiles == 0) speak("Requesting refill of custom floortiles to continue replacing.") diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 724abea214..109c7b4636 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -50,7 +50,7 @@ /mob/living/simple_animal/bot/honkbot/proc/sensor_blink() icon_state = "honkbot-c" - addtimer(CALLBACK(src, .proc/update_icon), 5, TIMER_OVERRIDE|TIMER_UNIQUE) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 5, TIMER_OVERRIDE|TIMER_UNIQUE) //honkbots react with sounds. /mob/living/simple_animal/bot/honkbot/proc/react_ping() @@ -113,7 +113,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, mode = BOT_HUNT /mob/living/simple_animal/bot/honkbot/attack_hand(mob/living/carbon/human/H) - if(H.a_intent == "harm") + if(H.a_intent == INTENT_HARM) retaliate(H) addtimer(CALLBACK(src, .proc/react_buzz), 5) return ..() @@ -177,7 +177,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, playsound(src, "honkbot_e", 50, 0) spam_flag = TRUE // prevent spam icon_state = "honkbot-e" - addtimer(CALLBACK(src, .proc/update_icon), 30, TIMER_OVERRIDE|TIMER_UNIQUE) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 30, TIMER_OVERRIDE|TIMER_UNIQUE) addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index c0a9a2082f..ee770fc2ca 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -250,7 +250,7 @@ Auto Patrol: []"}, var/judgement_criteria = judgement_criteria() playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) icon_state = "secbot-c" - addtimer(CALLBACK(src, .proc/update_icon), 2) + addtimer(CALLBACK(src, /atom/.proc/update_icon), 2) var/threat = 5 if(ishuman(C)) C.stuttering = 5 diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 73fd2b5569..bda309f7c7 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -31,7 +31,7 @@ var/mob/living/simple_animal/mouse/movement_target gold_core_spawnable = FRIENDLY_SPAWN collar_type = "cat" - + can_be_held = "cat2" do_footstep = TRUE /mob/living/simple_animal/pet/cat/Initialize() @@ -80,6 +80,7 @@ pass_flags = PASSMOB mob_size = MOB_SIZE_SMALL collar_type = "kitten" + can_be_held = "cat" //RUNTIME IS ALIVE! SQUEEEEEEEE~ /mob/living/simple_animal/pet/cat/Runtime @@ -231,9 +232,9 @@ /mob/living/simple_animal/pet/cat/attack_hand(mob/living/carbon/human/M) . = ..() switch(M.a_intent) - if("help") + if(INTENT_HELP) wuv(1, M) - if("harm") + if(INTENT_HARM) wuv(-1, M) /mob/living/simple_animal/pet/cat/proc/wuv(change, mob/M) @@ -262,6 +263,7 @@ attacked_sound = 'sound/items/eatfood.ogg' deathmessage = "loses its false life and collapses!" death_sound = "bodyfall" + can_be_held = "cak" /mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts) ..() @@ -284,11 +286,13 @@ if(health < maxHealth) adjustBruteLoss(-8) //Fast life regen for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts! - if(!D.is_frosted) - D.frost_donut() + if(!D.is_decorated) + D.decorate_donut() /mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L) - ..() + . = ..() + if(.) //the attack was blocked + return if(L.a_intent == INTENT_HARM && L.reagents && !stat) L.reagents.add_reagent("nutriment", 0.4) L.reagents.add_reagent("vitamin", 0.4) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index eb7129181d..986e5c9b4d 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -15,7 +15,7 @@ turns_per_move = 10 do_footstep = TRUE - + can_be_held = TRUE //Corgis and pugs are now under one dog subtype /mob/living/simple_animal/pet/dog/corgi @@ -35,6 +35,7 @@ var/obj/item/inventory_back var/shaved = FALSE var/nofur = FALSE //Corgis that have risen past the material plane of existence. + can_be_held = "corgi" /mob/living/simple_animal/pet/dog/corgi/Destroy() QDEL_NULL(inventory_head) @@ -63,6 +64,7 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/pug = 3) gold_core_spawnable = FRIENDLY_SPAWN collar_type = "pug" + can_be_held = "pug" /mob/living/simple_animal/pet/dog/corgi/exoticcorgi name = "Exotic Corgi" @@ -360,6 +362,7 @@ icon_dead = "old_corgi_dead" desc = "At a ripe old age of [record_age] Ian's not as spry as he used to be, but he'll always be the HoP's beloved corgi." //RIP turns_per_move = 20 + can_be_held = "old_corgi" /mob/living/simple_animal/pet/dog/corgi/Ian/Life() if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) @@ -582,6 +585,7 @@ unsuitable_atmos_damage = 0 minbodytemp = TCMB maxbodytemp = T0C + 40 + can_be_held = "void_puppy" /mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0) return 1 //Void puppies can navigate space. @@ -603,6 +607,7 @@ response_harm = "kicks" var/turns_since_scan = 0 var/puppies = 0 + can_be_held = "lisa" //Lisa already has a cute bow! /mob/living/simple_animal/pet/dog/corgi/Lisa/Topic(href, href_list) @@ -638,9 +643,9 @@ /mob/living/simple_animal/pet/dog/attack_hand(mob/living/carbon/human/M) . = ..() switch(M.a_intent) - if("help") + if(INTENT_HELP) wuv(1,M) - if("harm") + if(INTENT_HARM) wuv(-1,M) /mob/living/simple_animal/pet/dog/proc/wuv(change, mob/M) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 7e0e43055f..28fb1f5a42 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -274,3 +274,16 @@ /mob/living/simple_animal/drone/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE) return 0 //So they don't die trying to fix wiring + +/mob/living/simple_animal/drone/can_see_reagents() + . = ..() + if(.) + return + if(isclothing(head)) + var/obj/item/clothing/H = head + if(H.clothing_flags & SCAN_REAGENTS) + return TRUE + +/mob/living/simple_animal/drone/generate_mob_holder() + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "[visualAppearence]_hat", null, null, null, TRUE) + return holder diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 33031fd80c..c9207fcf89 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -29,28 +29,11 @@ if("Nothing") return -//ATTACK HAND IGNORING PARENT RETURN VALUE +//picky up the drone c: /mob/living/simple_animal/drone/attack_hand(mob/user) - if(ishuman(user)) - if(stat == DEAD || status_flags & GODMODE || !can_be_held) - ..() - return - if(user.get_active_held_item()) - to_chat(user, "Your hands are full!") - return - visible_message("[user] starts picking up [src].", \ - "[user] starts picking you up!") - if(!do_after(user, 20, target = src)) - return - visible_message("[user] picks up [src]!", \ - "[user] picks you up!") - if(buckled) - to_chat(user, "[src] is buckled to [buckled] and cannot be picked up!") - return - to_chat(user, "You pick [src] up.") - drop_all_held_items() - var/obj/item/clothing/head/mob_holder/drone/DH = new(get_turf(src), src) - user.put_in_hands(DH) + if(user.a_intent != INTENT_HELP) + return ..() // TODO: convert picking up mobs into an element or component. + mob_try_pickup(user) /mob/living/simple_animal/drone/proc/try_reactivate(mob/living/user) var/mob/dead/observer/G = get_ghost() diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index b2971e8d01..2679c68b52 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -197,7 +197,7 @@ density = FALSE speak_chance = 2 turns_per_move = 2 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/chicken = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -246,7 +246,7 @@ density = FALSE speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/chicken = 2) var/egg_type = /obj/item/reagent_containers/food/snacks/egg var/food_type = /obj/item/reagent_containers/food/snacks/grown/wheat response_help = "pets" diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 28b66c26ee..3f58ca593e 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -18,7 +18,7 @@ response_disarm = "gently pushes aside" response_harm = "kicks" gold_core_spawnable = FRIENDLY_SPAWN - + can_be_held = "fox" do_footstep = TRUE //Captain fox diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 6b179ba857..1a9a4ff4d7 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -23,6 +23,7 @@ obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption. + can_be_held = "lizard" //you can hold lizards now. /mob/living/simple_animal/hostile/lizard/CanAttack(atom/the_target)//Can we actually attack a possible target? if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it @@ -39,3 +40,7 @@ return TRUE else return ..() + +/mob/living/simple_animal/hostile/lizard/generate_mob_holder() + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "lizard", 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi', TRUE) + return holder diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 5b962b2dd8..fec75e4a36 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -26,6 +26,7 @@ var/body_color //brown, gray and white, leave blank for random gold_core_spawnable = FRIENDLY_SPAWN var/chew_probability = 1 + can_be_held = TRUE /mob/living/simple_animal/mouse/Initialize() . = ..() @@ -35,7 +36,7 @@ icon_state = "mouse_[body_color]" icon_living = "mouse_[body_color]" icon_dead = "mouse_[body_color]_dead" - + can_be_held = "mouse_[body_color]" /mob/living/simple_animal/mouse/proc/splat() src.health = 0 @@ -88,14 +89,17 @@ /mob/living/simple_animal/mouse/white body_color = "white" icon_state = "mouse_white" + can_be_held = "mouse_white" /mob/living/simple_animal/mouse/gray body_color = "gray" icon_state = "mouse_gray" + can_be_held = "mouse_gray" /mob/living/simple_animal/mouse/brown body_color = "brown" icon_state = "mouse_brown" + can_be_held = "mouse_brown" //TOM IS ALIVE! SQUEEEEEEEE~K :) /mob/living/simple_animal/mouse/brown/Tom @@ -119,3 +123,8 @@ /obj/item/reagent_containers/food/snacks/deadmouse/on_grind() reagents.clear_reagents() + +/mob/living/simple_animal/mouse/generate_mob_holder() + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, (istext(can_be_held) ? can_be_held : ""), 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi') + holder.w_class = WEIGHT_CLASS_TINY + return holder diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index 324fa107fa..175cb8e838 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -22,7 +22,7 @@ maxHealth = 50 speed = 10 glide_size = 2 - + can_be_held = "sloth" //finally oranges can be held do_footstep = TRUE diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm index 49514d0d12..914d38022f 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm @@ -54,10 +54,8 @@ var/blocked = FALSE if(hasmatchingsummoner(A)) //if the summoner matches don't hurt them blocked = TRUE - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(H.check_shields(src, 90, "[name]", attack_type = THROWN_PROJECTILE_ATTACK)) - blocked = TRUE + if(L.check_shields(src, 90, "[name]", attack_type = THROWN_PROJECTILE_ATTACK)) + blocked = TRUE if(!blocked) L.drop_all_held_items() L.visible_message("[src] slams into [L]!", "[src] slams into you!") diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm index b67770fb4b..3bc8715c5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/goose.dm @@ -9,7 +9,7 @@ mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 51a9d8d62b..c2c9f5a71f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -486,10 +486,7 @@ Difficulty: Very Hard if(isturf(Stuff)) var/turf/T = Stuff if((isspaceturf(T) || isfloorturf(T)) && NewTerrainFloors) - var/turf/open/O = T.ChangeTurf(NewTerrainFloors) - if(O.air) - var/datum/gas_mixture/G = O.air - G.copy_from_turf(O) + var/turf/open/O = T.ChangeTurf(NewTerrainFloors, flags = CHANGETURF_INHERIT_AIR) if(prob(florachance) && NewFlora.len && !is_blocked_turf(O, TRUE)) var/atom/Picked = pick(NewFlora) new Picked(O) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 397d40925b..7cfae9310a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -594,12 +594,15 @@ Difficulty: Normal var/list/hit_things = list() //we hit these already, ignore them var/friendly_fire_check = FALSE var/bursting = FALSE //if we're bursting and need to hit anyone crossing us + var/list/nohurt -/obj/effect/temp_visual/hierophant/blast/Initialize(mapload, new_caster, friendly_fire, list/only_hit_once) +/obj/effect/temp_visual/hierophant/blast/Initialize(mapload, new_caster, friendly_fire, list/only_hit_once, list/donthurt = null) . = ..() if(only_hit_once) hit_things = only_hit_once friendly_fire_check = friendly_fire + if(donthurt) + hit_things += donthurt if(new_caster) hit_things += new_caster if(ismineralturf(loc)) //drill mineral turfs diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 5bfabe376e..49b56d0950 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -137,7 +137,7 @@ Difficulty: Medium if(last_legion) loot = list(/obj/item/staff/storm) elimination = 0 - else if(prob(5)) + else if(prob(20)) loot = list(/obj/structure/closet/crate/necropolis/tendril) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 8c2fbef15e..c6386540f7 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -25,7 +25,7 @@ mob_size = MOB_SIZE_LARGE layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway - flags_1 = PREVENT_CONTENTS_EXPLOSION_1 + flags_1 = PREVENT_CONTENTS_EXPLOSION_1 | HEAR_1 var/list/crusher_loot var/medal_type var/score_type = BOSS_SCORE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 04a1b4a468..0a8320788e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -24,7 +24,8 @@ var/list/attack_action_types = list() var/can_talk = FALSE var/obj/loot_drop = null - + var/owner + //Gives player-controlled variants the ability to swap attacks /mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload) . = ..() @@ -53,14 +54,14 @@ if(ismineralturf(target)) var/turf/closed/mineral/M = target M.gets_drilled() - + //Elites can't talk (normally)! /mob/living/simple_animal/hostile/asteroid/elite/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) if(can_talk) . = ..() return TRUE return FALSE - + /*Basic setup for elite attacks, based on Whoneedspace's megafauna attack setup. While using this makes the system rely on OnFire, it still gives options for timers not tied to OnFire, and it makes using attacks consistent accross the board for player-controlled elites.*/ @@ -82,11 +83,11 @@ While using this makes the system rely on OnFire, it still gives options for tim /datum/action/innate/elite_attack/Activate() M.chosen_attack = chosen_attack_num to_chat(M, chosen_message) - + /mob/living/simple_animal/hostile/asteroid/elite/updatehealth() . = ..() update_health_hud() - + /mob/living/simple_animal/hostile/asteroid/elite/update_health_hud() if(hud_used) var/severity = 0 @@ -144,7 +145,7 @@ While using this makes the system rely on OnFire, it still gives options for tim gpstag = "Menacing Signal" desc = "You're not quite sure how a signal can be menacing." invisibility = 100 - + /obj/structure/elite_tumor/attack_hand(mob/user) . = ..() if(ishuman(user)) @@ -179,7 +180,7 @@ While using this makes the system rely on OnFire, it still gives options for tim activity = TUMOR_INACTIVE activator = null - + obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind) var/selectedspawn = pick(potentialspawns) mychild = new selectedspawn(loc) @@ -199,18 +200,18 @@ obj/structure/elite_tumor/proc/return_elite() if(boosted) mychild.maxHealth = mychild.maxHealth * 2 mychild.health = mychild.maxHealth - + /obj/structure/elite_tumor/Initialize(mapload) . = ..() internal = new/obj/item/gps/internal/elite(src) START_PROCESSING(SSobj, src) - + /obj/structure/elite_tumor/Destroy() STOP_PROCESSING(SSobj, src) mychild = null activator = null return ..() - + /obj/structure/elite_tumor/process() if(isturf(loc)) for(var/mob/living/simple_animal/hostile/asteroid/elite/elitehere in loc) @@ -218,7 +219,7 @@ obj/structure/elite_tumor/proc/return_elite() mychild.adjustHealth(-mychild.maxHealth*0.05) var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(mychild)) H.color = "#FF0000" - + /obj/structure/elite_tumor/attackby(obj/item/I, mob/user, params) . = ..() if(istype(I, /obj/item/organ/regenerative_core) && activity == TUMOR_INACTIVE && !boosted) @@ -232,7 +233,7 @@ obj/structure/elite_tumor/proc/return_elite() desc = "[desc] This one seems to glow with a strong intensity." qdel(core) return TRUE - + /obj/structure/elite_tumor/proc/arena_checks() if(activity != TUMOR_ACTIVE || QDELETED(src)) return @@ -240,13 +241,13 @@ obj/structure/elite_tumor/proc/return_elite() INVOKE_ASYNC(src, .proc/arena_trap) //Gets another arena trap queued up for when this one runs out. INVOKE_ASYNC(src, .proc/border_check) //Checks to see if our fighters got out of the arena somehow. addtimer(CALLBACK(src, .proc/arena_checks), 50) - + /obj/structure/elite_tumor/proc/fighters_check() if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator)) onEliteWon() if(mychild != null && mychild.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(mychild)) onEliteLoss() - + /obj/structure/elite_tumor/proc/arena_trap() var/turf/T = get_turf(src) if(loc == null) @@ -257,7 +258,7 @@ obj/structure/elite_tumor/proc/return_elite() newwall = new /obj/effect/temp_visual/elite_tumor_wall(t, src) newwall.activator = src.activator newwall.ourelite = src.mychild - + /obj/structure/elite_tumor/proc/border_check() if(activator != null && get_dist(src, activator) >= 12) activator.forceMove(loc) @@ -267,7 +268,7 @@ obj/structure/elite_tumor/proc/return_elite() mychild.forceMove(loc) visible_message("[mychild] suddenly reappears above [src]!") playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) - + obj/structure/elite_tumor/proc/onEliteLoss() playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, TRUE, TRUE) visible_message("[src] begins to convulse violently before beginning to dissipate.") @@ -286,7 +287,7 @@ obj/structure/elite_tumor/proc/onEliteLoss() mychild = null activator = null qdel(src) - + obj/structure/elite_tumor/proc/onEliteWon() activity = TUMOR_PASSIVE activator = null @@ -300,7 +301,7 @@ obj/structure/elite_tumor/proc/onEliteWon() to_chat(mychild, "As the life in the activator's eyes fade, the forcefield around you dies out and you feel your power subside.\nDespite this inferno being your home, you feel as if you aren't welcome here anymore.\nWithout any guidance, your purpose is now for you to decide.") to_chat(mychild, "Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\nBear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\nAlso, be weary of your fellow inhabitants, they likely won't be happy to see you!") to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!") - + /obj/item/tumor_shard name = "tumor shard" desc = "A strange, sharp, crystal shard from an odd tumor on Lavaland. Stabbing the corpse of a lavaland elite with this will revive them, assuming their soul still lingers. Revived lavaland elites only have half their max health, but are completely loyal to their reviver." @@ -313,7 +314,7 @@ obj/structure/elite_tumor/proc/onEliteWon() w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - + /obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) . = ..() if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag) @@ -331,10 +332,11 @@ obj/structure/elite_tumor/proc/onEliteWon() E.health = E.maxHealth E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people." E.sentience_type = SENTIENCE_ORGANIC + E.owner = user qdel(src) else to_chat(user, "[src] only works on the corpse of a sentient lavaland elite.") - + /obj/effect/temp_visual/elite_tumor_wall name = "magic wall" icon = 'icons/turf/walls/hierophant_wall_temp.dmi' @@ -347,7 +349,7 @@ obj/structure/elite_tumor/proc/onEliteWon() color = rgb(255,0,0) light_range = MINIMUM_USEFUL_LIGHT_RANGE light_color = LIGHT_COLOR_RED - + /obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster) . = ..() queue_smooth_neighbors(src) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index c18a342206..116e2b8e45 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -201,7 +201,7 @@ mother.children_list -= src visible_message("[src] explodes!") explosion(get_turf(loc),0,0,0,flame_range = 3, adminlog = FALSE) - gib() + qdel() //Tentacles have less stun time compared to regular variant, to balance being able to use them much more often. Also, 10 more damage. /obj/effect/temp_visual/goliath_tentacle/broodmother/trip() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index 540470d505..e65c4f5b20 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -44,34 +44,34 @@ /datum/action/innate/elite_attack/magic_box, /datum/action/innate/elite_attack/pandora_teleport, /datum/action/innate/elite_attack/aoe_squares) - + var/sing_shot_length = 8 var/cooldown_time = 20 - + /datum/action/innate/elite_attack/singular_shot name = "Singular Shot" button_icon_state = "singular_shot" chosen_message = "You are now creating a single linear magic square." chosen_attack_num = SINGULAR_SHOT - + /datum/action/innate/elite_attack/magic_box name = "Magic Box" button_icon_state = "magic_box" chosen_message = "You are now attacking with a box of magic squares." chosen_attack_num = MAGIC_BOX - + /datum/action/innate/elite_attack/pandora_teleport name = "Line Teleport" button_icon_state = "pandora_teleport" chosen_message = "You will now teleport to your target." chosen_attack_num = PANDORA_TELEPORT - + /datum/action/innate/elite_attack/aoe_squares name = "AOE Blast" button_icon_state = "aoe_squares" chosen_message = "Your attacks will spawn an AOE blast at your target location." chosen_attack_num = AOE_SQUARES - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire() if(client) switch(chosen_attack) @@ -94,7 +94,7 @@ pandora_teleport(target) if(AOE_SQUARES) aoe_squares(target) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/Life() . = ..() if(health >= maxHealth * 0.5) @@ -105,28 +105,28 @@ return else cooldown_time = 10 - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target) + +/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target) ranged_cooldown = world.time + (cooldown_time * 0.5) var/dir_to_target = get_dir(get_turf(src), get_turf(target)) var/turf/T = get_step(get_turf(src), dir_to_target) singular_shot_line(sing_shot_length, dir_to_target, T) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot_line(var/procsleft, var/angleused, var/turf/T) if(procsleft <= 0) return - new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) + new /obj/effect/temp_visual/hierophant/blast/pandora(T, src, null, null, list(owner)) T = get_step(T, angleused) procsleft = procsleft - 1 addtimer(CALLBACK(src, .proc/singular_shot_line, procsleft, angleused, T), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/magic_box(target) ranged_cooldown = world.time + cooldown_time var/turf/T = get_turf(target) for(var/t in spiral_range_turfs(3, T)) if(get_dist(t, T) > 1) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) - + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner)) + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport(target) ranged_cooldown = world.time + cooldown_time var/turf/T = get_turf(target) @@ -135,45 +135,45 @@ new /obj/effect/temp_visual/hierophant/telegraph(source, src) playsound(source,'sound/machines/airlockopen.ogg', 200, 1) addtimer(CALLBACK(src, .proc/pandora_teleport_2, T, source), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(var/turf/T, var/turf/source) new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src) for(var/t in RANGE_TURFS(1, T)) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner)) for(var/t in RANGE_TURFS(1, source)) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner)) animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out visible_message("[src] fades out!") density = FALSE addtimer(CALLBACK(src, .proc/pandora_teleport_3, T), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_3(var/turf/T) forceMove(T) animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN density = TRUE visible_message("[src] fades in!") - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares(target) ranged_cooldown = world.time + cooldown_time var/turf/T = get_turf(target) - new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) + new /obj/effect/temp_visual/hierophant/blast/pandora(T, src, null, null, list(owner)) var/max_size = 2 addtimer(CALLBACK(src, .proc/aoe_squares_2, T, 0, max_size), 2) - + /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares_2(var/turf/T, var/ring, var/max_size) if(ring > max_size) return for(var/t in spiral_range_turfs(ring, T)) if(get_dist(t, T) == ring) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) + new /obj/effect/temp_visual/hierophant/blast/pandora(t, src, null, null, list(owner)) addtimer(CALLBACK(src, .proc/aoe_squares_2, T, (ring + 1), max_size), 2) - + //The specific version of hiero's squares pandora uses /obj/effect/temp_visual/hierophant/blast/pandora damage = 20 monster_damage_boost = FALSE - + //Pandora's loot: Hope /obj/item/clothing/accessory/pandora_hope name = "Hope" @@ -181,7 +181,7 @@ icon = 'icons/obj/lavaland/elite_trophies.dmi' icon_state = "hope" resistance_flags = FIRE_PROOF - + /obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user) var/mob/living/L = user if(L && L.mind) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index 05dec578bd..03d2365016 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -20,7 +20,7 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE mob_size = MOB_SIZE_LARGE var/icon_aggro = null - var/crusher_drop_mod = 5 + var/crusher_drop_mod = 25 /mob/living/simple_animal/hostile/asteroid/Initialize(mapload) . = ..() @@ -58,7 +58,7 @@ /mob/living/simple_animal/hostile/asteroid/death(gibbed) SSblackbox.record_feedback("tally", "mobs_killed_mining", 1, type) var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) - if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 20 creatures before getting the item + if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item spawn_crusher_loot() ..(gibbed) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm index e3c81b2639..27ebb71c0e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm @@ -91,5 +91,5 @@ visible_message("The tendril falls inward, the ground around it widening into a yawning chasm!") for(var/turf/T in range(2,src)) if(!T.density) - T.TerraformTurf(/turf/open/chasm/lavaland, /turf/open/chasm/lavaland) + T.TerraformTurf(/turf/open/chasm/lavaland, /turf/open/chasm/lavaland, flags = CHANGETURF_INHERIT_AIR) qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 514edf896b..a5e3cd8120 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -166,7 +166,9 @@ ..() /mob/living/simple_animal/hostile/mushroom/attack_hand(mob/living/carbon/human/M) - ..() + . = ..() + if(.) // the attack was blocked + return if(M.a_intent == INTENT_HARM) Bruise() diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index d1e10ea693..439ea5b2bf 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -253,33 +253,34 @@ return /mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - if(M == src) - return - if(buckled) - Feedstop(silent = TRUE) - visible_message("[M] pulls [src] off!") - return - attacked += 5 - if(nutrition >= 100) //steal some nutrition. negval handled in life() - nutrition -= (50 + (40 * M.is_adult)) - M.add_nutrition(50 + (40 * M.is_adult)) - if(health > 0) - M.adjustBruteLoss(-10 + (-10 * M.is_adult)) - M.updatehealth() + . = ..() + if(!. || M == src) //unsuccessful slime shock + return + if(buckled) + Feedstop(silent = TRUE) + visible_message("[M] pulls [src] off!") + return + attacked += 5 + if(nutrition >= 100) //steal some nutrition. negval handled in life() + nutrition -= (50 + (40 * M.is_adult)) + M.add_nutrition(50 + (40 * M.is_adult)) + if(health > 0) + M.adjustBruteLoss(-10 + (-10 * M.is_adult)) + M.updatehealth() /mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/M) . = ..() if(.) attacked += 10 - /mob/living/simple_animal/slime/attack_paw(mob/living/carbon/monkey/M) - if(..()) //successful monkey bite. + . = ..() + if(.)//successful monkey bite. attacked += 10 /mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L) - if(..()) //successful larva bite. + . = ..() + if(.) //successful larva bite. attacked += 10 /mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) @@ -321,9 +322,11 @@ attacked += 10 /mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent. - attacked += 10 - discipline_slime(M) + . = ..() + if(!.) // the attack was blocked or was help/grab intent + return + attacked += 10 + discipline_slime(M) /mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) diff --git a/code/modules/mob/living/update_icons.dm b/code/modules/mob/living/update_icons.dm new file mode 100644 index 0000000000..8bf0dc98a9 --- /dev/null +++ b/code/modules/mob/living/update_icons.dm @@ -0,0 +1,26 @@ +//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. +/mob/living/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = pixel_y + var/final_dir = dir + var/changed = 0 + if(lying != lying_prev && rotate_on_lying) + changed++ + ntransform.TurnTo(lying_prev,lying) + if(lying == 0) //Lying to standing + final_pixel_y = get_standard_pixel_y_offset() + else //if(lying != 0) + if(lying_prev == 0) //Standing to lying + pixel_y = get_standard_pixel_y_offset() + final_pixel_y = get_standard_pixel_y_offset(lying) + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + if(changed) + animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) + setMovetype(movement_type & ~FLOATING) // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a47ea9d5a0..fad9431b61 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -380,14 +380,10 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA spintime -= speed /mob/proc/update_pull_hud_icon() - if(hud_used) - if(hud_used.pull_icon) - hud_used.pull_icon.update_icon(src) + hud_used?.pull_icon?.update_icon() /mob/proc/update_rest_hud_icon() - if(hud_used) - if(hud_used.rest_icon) - hud_used.rest_icon.update_icon(src) + hud_used?.rest_icon?.update_icon() /mob/verb/mode() set name = "Activate Held Object" @@ -404,9 +400,6 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA if(I) I.attack_self(src) update_inv_hands() - if(!I)//CIT CHANGE - allows "using" empty hands - use_that_empty_hand() //CIT CHANGE - ditto - update_inv_hands() // CIT CHANGE - ditto. /mob/verb/memory() set name = "Notes" @@ -466,6 +459,11 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA if(!ckey || !new_mob) CRASH("transfer_ckey() called [ckey ? "" : "on a ckey-less mob[new_mob ? "" : " and "]"][new_mob ? "" : "without a valid mob target"]!") SEND_SIGNAL(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, new_mob, src) + if (client && client.prefs && client.prefs.auto_ooc) + if (client.prefs.chat_toggles & CHAT_OOC && isliving(new_mob)) + client.prefs.chat_toggles ^= CHAT_OOC + if (!(client.prefs.chat_toggles & CHAT_OOC) && isdead(new_mob)) + client.prefs.chat_toggles ^= CHAT_OOC new_mob.ckey = ckey if(send_signal) SEND_SIGNAL(src, COMSIG_MOB_KEY_CHANGE, new_mob, src) @@ -569,9 +567,9 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) /mob/proc/is_muzzled() return 0 -/mob/Stat() - ..() - +/mob/Stat(delayoverride) + . = ..() + var/statdelay = delayoverride || 10 if(statpanel("Status")) if (client) stat(null, "Ping: [round(client.lastping, 1)]ms (Average: [round(client.avgping, 1)]ms)") @@ -579,7 +577,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) var/datum/map_config/cached = SSmapping.next_map_config if(cached) stat(null, "Next Map: [cached.map_name]") - stat(null, "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]") + stat(null, "Round ID: [GLOB.round_id || "NULL"]") stat(null, "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]") stat(null, "Round Time: [WORLDTIME2TEXT("hh:mm:ss")]") stat(null, "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]") @@ -589,8 +587,9 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) if(ETA) stat(null, "[ETA] [SSshuttle.emergency.getTimerStr()]") - if(client && client.holder) + if(client?.holder) if(statpanel("MC")) + statdelay = 0 //It's assumed that if you're doing this you are doing debug stuff, don't do ioditic things. var/turf/T = get_turf(client.eye) stat("Location:", COORD(T)) stat("CPU:", "[world.cpu]") @@ -616,6 +615,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) GLOB.ahelp_tickets.stat_entry() if(length(GLOB.sdql2_queries)) if(statpanel("SDQL2")) + statdelay = 0 //It's assumed that if you're doing this you are doing debug stuff, don't do ioditic things. stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) for(var/i in GLOB.sdql2_queries) var/datum/SDQL2_query/Q = i @@ -639,14 +639,13 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) if(A.IsObscured()) continue statpanel(listed_turf.name, null, A) - - if(mind) add_spells_to_statpanel(mind.spell_list) var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) add_stings_to_statpanel(changeling.purchasedpowers) add_spells_to_statpanel(mob_spell_list) + sleep(statdelay) /mob/proc/add_spells_to_statpanel(list/spells) for(var/obj/effect/proc_holder/spell/S in spells) @@ -803,36 +802,19 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) //can the mob be buckled to something by default? /mob/proc/can_buckle() - return 1 + return TRUE //can the mob be unbuckled from something by default? /mob/proc/can_unbuckle() - return 1 + return TRUE + +/mob/proc/can_buckle_others(mob/living/target, atom/buckle_to) + return TRUE //Can the mob interact() with an atom? /mob/proc/can_interact_with(atom/A) return IsAdminGhost(src) || Adjacent(A) -//Can the mob see reagents inside of containers? -/mob/proc/can_see_reagents() - if(stat == DEAD) //Ghosts and such can always see reagents - return 1 - if(has_unlimited_silicon_privilege) //Silicons can automatically view reagents - return 1 - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.head && istype(H.head, /obj/item/clothing)) - var/obj/item/clothing/CL = H.head - if(CL.scan_reagents) - return 1 - if(H.wear_mask && H.wear_mask.scan_reagents) - return 1 - if(H.glasses && istype(H.glasses, /obj/item/clothing)) - var/obj/item/clothing/CL = H.glasses - if(CL.scan_reagents) - return 1 - return 0 - //Can the mob use Topic to interact with machines /mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) return @@ -979,4 +961,4 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) /mob/setMovetype(newval) . = ..() - update_movespeed(FALSE) \ No newline at end of file + update_movespeed(FALSE) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a9f4c94397..c7365210ab 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -22,7 +22,7 @@ I'll make some notes on where certain variable defines should probably go. Changing this around would probably require a good look-over the pre-existing code. */ - var/zone_selected = null + var/zone_selected = BODY_ZONE_CHEST var/computer_id = null var/list/logging = list() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index c18fc36e9a..18fc2bfb42 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -532,3 +532,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp if(!held_item) return return held_item.GetID() + +//Can the mob see reagents inside of containers? +/mob/proc/can_see_reagents() + return stat == DEAD || has_unlimited_silicon_privilege //Dead guys and silicons can always see reagents diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 1a836c06cf..04d47da56e 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -372,7 +372,7 @@ m_intent = MOVE_INTENT_RUN if(hud_used && hud_used.static_inventory) for(var/obj/screen/mov_intent/selector in hud_used.static_inventory) - selector.update_icon(src) + selector.update_icon() /mob/verb/up() set name = "Move Upwards" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index ecb869790c..9b8f100907 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -8,6 +8,13 @@ if(message) say(message) +/mob/say_mod(input, message_mode) + var/customsayverb = findtext(input, "*") + if(customsayverb && message_mode != MODE_WHISPER_CRIT) + message_mode = MODE_CUSTOM_SAY + return lowertext(copytext(input, 1, customsayverb)) + else + return ..() /mob/verb/whisper_verb(message as text) set name = "Whisper" diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm index 8c304d8a2b..56c50078c1 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm @@ -26,10 +26,9 @@ Contents: /obj/item/clothing/suit/space/space_ninja/proc/enable_signals() if(!affecting) return - RegisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_TELEPORTED, COMSIG_LIVING_GUN_PROCESS_FIRE), .proc/reduce_stealth) + RegisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_TELEPORTED, COMSIG_LIVING_GUN_PROCESS_FIRE), .proc/reduce_stealth) RegisterSignal(affecting, COMSIG_MOVABLE_BUMP, .proc/bumping_stealth) - /obj/item/clothing/suit/space/space_ninja/proc/reduce_stealth(datum/source) affecting.alpha = min(affecting.alpha + 40, 100) @@ -42,7 +41,7 @@ Contents: return FALSE stealth = !stealth stealth_cooldown = world.time + 5 SECONDS - UnregisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_TELEPORTED, COMSIG_LIVING_GUN_PROCESS_FIRE)) + UnregisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_TELEPORTED, COMSIG_LIVING_GUN_PROCESS_FIRE)) animate(affecting, alpha = 255, time = 3 SECONDS) affecting.visible_message("[affecting.name] appears from thin air!", \ "You are now visible.") diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 2ca6ce2611..f3f7e45378 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -102,7 +102,7 @@ /obj/item/paperplane/throw_impact(atom/hit_atom) if(iscarbon(hit_atom)) var/mob/living/carbon/C = hit_atom - if(C.can_catch_item(TRUE)) + if(!C.get_active_held_item() && !C.restrained()) var/datum/action/innate/origami/origami_action = locate() in C.actions if(origami_action?.active) //if they're a master of origami and have the ability turned on, force throwmode on so they'll automatically catch the plane. C.throw_mode_on() diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 7b4e0bfa97..2f87872710 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -67,3 +67,8 @@ fire_sound = 'sound/weapons/emitter.ogg' e_cost = 2000 //20,000 is in the cell making this 10 shots before reload projectile_type = /obj/item/projectile/beam/emitter + +/obj/item/ammo_casing/energy/shrink + projectile_type = /obj/item/projectile/beam/shrink + select_name = "shrink ray" + e_cost = 200 \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 531c6082b0..19fdfd2b7e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -37,6 +37,7 @@ var/burst_spread = 0 //Spread induced by the gun itself during burst fire per iteration. Only checked if spread is 0. var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once. var/inaccuracy_modifier = 1 + var/pb_knockback = 0 lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' @@ -125,6 +126,10 @@ if(message) if(pointblank) user.visible_message("[user] fires [src] point blank at [pbtarget]!", null, null, COMBAT_MESSAGE_RANGE) + if(pb_knockback > 0) + var/atom/throw_target = get_edge_target_turf(pbtarget, user.dir) + pbtarget.throw_at(throw_target, pb_knockback, 2) + else user.visible_message("[user] fires [src]!", null, null, COMBAT_MESSAGE_RANGE) diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index bcb212a031..7fb4a8232e 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -267,6 +267,7 @@ fire_delay = 0 pin = /obj/item/firing_pin/implant/pindicate actions_types = list() + pb_knockback = 2 /obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted pin = /obj/item/firing_pin diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index d1a5f12888..31a5131804 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -273,6 +273,7 @@ "Maple" = "dshotgun-l", "Rosewood" = "dshotgun-p" ) + pb_knockback = 3 // it's a super shotgun! /obj/item/gun/ballistic/revolver/doublebarrel/attackby(obj/item/A, mob/user, params) ..() @@ -352,7 +353,7 @@ clumsy_check = 0 /obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) + if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))) return ..() if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD)) user.visible_message("[user] somehow manages to shoot [user.p_them()]self in the face!", "You somehow shoot yourself in the face! How the hell?!") diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 571525d8f0..deec187f88 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -12,6 +12,8 @@ var/recentpump = 0 // to prevent spammage weapon_weight = WEAPON_MEDIUM + pb_knockback = 2 + /obj/item/gun/ballistic/shotgun/attackby(obj/item/A, mob/user, params) . = ..() if(.) diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 8b358832b0..8f9bc13583 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -56,6 +56,7 @@ item_flags = NONE casing_ejector = FALSE can_suppress = FALSE + pb_knockback = 0 /obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0) ..() diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 1e2070de1b..0465a611cd 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -135,7 +135,7 @@ // A gun with ultra-honk pin is useful for clown and useless for everyone else. /obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user) playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) - if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown"))) + if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)))) return FALSE return TRUE diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index ceb9b7a0fc..be73e22e6d 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -190,3 +190,21 @@ var/mob/living/carbon/M = target M.visible_message("[M] explodes into a shower of gibs!") M.gib() + +//a shrink ray that shrinks stuff, which grows back after a short while. +/obj/item/projectile/beam/shrink + name = "shrink ray" + icon_state = "blue_laser" + hitsound = 'sound/weapons/shrink_hit.ogg' + damage = 0 + damage_type = STAMINA + flag = "energy" + impact_effect_type = /obj/effect/temp_visual/impact_effect/shrink + light_color = LIGHT_COLOR_BLUE + var/shrink_time = 90 + +/obj/item/projectile/beam/shrink/on_hit(atom/target, blocked = FALSE) + . = ..() + if(isopenturf(target) || istype(target, /turf/closed/indestructible))//shrunk floors wouldnt do anything except look weird, i-walls shouldnt be bypassable + return + target.AddComponent(/datum/component/shrink, shrink_time) \ No newline at end of file diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index d7c8b8b082..a3c139bcff 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -23,6 +23,7 @@ var/mob/living/carbon/C = target SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) + C.IgniteMob() if(C.dna && C.dna.check_mutation(HULK)) C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE)) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 173d9721a9..791db320a2 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -93,7 +93,7 @@ /obj/item/projectile/magic/door/proc/CreateDoor(turf/T) var/door_type = pick(door_types) var/obj/structure/mineral_door/D = new door_type(T) - T.ChangeTurf(/turf/open/floor/plating) + T.ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) D.Open() /obj/item/projectile/magic/door/proc/OpenDoor(var/obj/machinery/door/D) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index f2c6dd2fb5..d540cd02fe 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1112,7 +1112,7 @@ if(percent < minimum_percent) continue var/intensity_desc = "a hint of" - if(percent > minimum_percent * 2 || percent == 100) + if(ISINRANGE(percent, minimum_percent * 2, minimum_percent * 3)|| percent == 100) intensity_desc = "" else if(percent > minimum_percent * 3) intensity_desc = "the strong flavor of" diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index c6aa51deda..2c5d7aa3e2 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -656,3 +656,67 @@ component_parts += new /obj/item/stack/sheet/glass(null) component_parts += new /obj/item/stock_parts/cell/bluespace(null) RefreshParts() + +/obj/machinery/chem_dispenser/abductor + name = "reagent synthesizer" + desc = "Synthesizes a variety of reagents using proto-matter." + icon = 'icons/obj/abductor.dmi' + icon_state = "chem_dispenser" + has_panel_overlay = FALSE + circuit = /obj/item/circuitboard/machine/chem_dispenser/abductor + working_state = null + nopower_state = null + dispensable_reagents = list( + "hydrogen", + "lithium", + "carbon", + "nitrogen", + "oxygen", + "fluorine", + "sodium", + "aluminium", + "silicon", + "phosphorus", + "sulfur", + "chlorine", + "potassium", + "iron", + "copper", + "mercury", + "radium", + "water", + "ethanol", + "sugar", + "sacid", + "welding_fuel", + "silver", + "iodine", + "bromine", + "stable_plasma", + "oil", + "ammonia", + "ash", + "acetone", + "phenol", + "diethylamine", + "mine_salve", + "toxin", + "space_drugs", + "plasma", + "frostoil", + "uranium", + "histamine", + "morphine" + ) + +/obj/machinery/chem_dispenser/abductor/Initialize() + . = ..() + component_parts = list() + component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null) + component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) + component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) + component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) + component_parts += new /obj/item/stock_parts/manipulator/femto(null) + component_parts += new /obj/item/stack/sheet/glass(null) + component_parts += new /obj/item/stock_parts/cell/bluespace(null) + RefreshParts() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 1ac62ba651..513626465a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -260,7 +260,7 @@ if(!amount) return vol_each = min(reagents.total_volume / amount, 50) - var/name = stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return var/obj/item/reagent_containers/pill/P @@ -287,7 +287,7 @@ adjust_item_drop_location(P) reagents.trans_to(P,vol_each) else - var/name = stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return var/obj/item/reagent_containers/food/condiment/pack/P = new/obj/item/reagent_containers/food/condiment/pack(drop_location()) @@ -313,7 +313,7 @@ if(!amount) return vol_each = min(reagents.total_volume / amount, 40) - var/name = stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return var/obj/item/reagent_containers/pill/P @@ -331,7 +331,7 @@ return if(condi) - var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return var/obj/item/reagent_containers/food/condiment/P = new(drop_location()) @@ -344,7 +344,7 @@ if(text2num(many)) amount_full = round(reagents.total_volume / 30) vol_part = ((reagents.total_volume*1000) % 30000) / 1000 //% operator doesn't support decimals. - var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return @@ -372,7 +372,7 @@ if(text2num(many)) amount_full = round(reagents.total_volume / 60) vol_part = reagents.total_volume % 60 - var/name = stripped_input(usr, "Name:","Name your hypovial!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr, "Name:","Name your hypovial!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return @@ -407,7 +407,7 @@ return vol_each = min(reagents.total_volume / amount, 20) - var/name = stripped_input(usr,"Name:","Name your SmartDart!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN) + var/name = html_decode(stripped_input(usr,"Name:","Name your SmartDart!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) return diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 08594dee5b..e8551074e7 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -247,6 +247,23 @@ . = 1 ..() +/datum/reagent/consumable/coconutmilk + name = "Coconut Milk" + id = "coconutmilk" + description = "A transparent white liquid extracted from coconuts. Rich in taste." + color = "#DFDFDF" // rgb: 223, 223, 223 + taste_description = "sweet milk" + quality = DRINK_GOOD + glass_icon_state = "glass_white" + glass_name = "glass of coconut milk" + glass_desc = "White and nutritious goodness!" + +/datum/reagent/consumable/coconutmilk/on_mob_life(mob/living/carbon/M) + if(M.getBruteLoss() && prob(20)) + M.heal_bodypart_damage(2,0, 0) + . = 1 + ..() + /datum/reagent/consumable/cream name = "Cream" id = "cream" @@ -479,7 +496,6 @@ glass_name = "glass of lemon-lime" glass_desc = "You're pretty certain a real fruit has never actually touched this." - /datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() @@ -512,6 +528,51 @@ M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() +/datum/reagent/consumable/buzz_fuzz + name = "Buzz Fuzz" + description = "~A Hive of Flavour!~ NOTICE: Addicting." + id = "buzz_fuzz" + addiction_threshold = 26 //A can and a sip + color = "#8CFF00" // rgb: 135, 255, 0 + taste_description = "carbonated honey and pollen" + glass_icon_state = "buzz_fuzz" + glass_name = "honeycomb of Buzz Fuzz" + glass_desc = "Stinging with flavour." + +/datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M) + M.reagents.add_reagent("sugar",1) + if(prob(5)) + M.reagents.add_reagent("honey",1) + ..() + +/datum/reagent/consumable/buzz_fuzz/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH))) + var/mob/living/carbon/C = M + for(var/s in C.surgeries) + var/datum/surgery/S = s + S.success_multiplier = max(0.1, S.success_multiplier) // +10% success probability on each step, compared to bacchus' blessing's ~46% + ..() + +/datum/reagent/consumable/buzz_fuzz/addiction_act_stage1(mob/living/M) + if(prob(5)) + to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "A Hive of Flavour")]") + ..() + +/datum/reagent/consumable/buzz_fuzz/addiction_act_stage2(mob/living/M) + if(prob(10)) + to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "A Hive of Flavour", "The Queen approved it!")]") + ..() + +/datum/reagent/consumable/buzz_fuzz/addiction_act_stage3(mob/living/M) + if(prob(15)) + to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "Ideal of the worker drone", "A Hive of Flavour", "The Queen approved it!")]") + ..() + +/datum/reagent/consumable/buzz_fuzz/addiction_act_stage4(mob/living/M) + if(prob(25)) + to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "Ideal of the worker drone", "A Hive of Flavour", "Sap back that missing energy!", "Got Honey?", "The Queen approved it!")]") + ..() + /datum/reagent/consumable/grey_bull name = "Grey Bull" id = "grey_bull" @@ -764,7 +825,6 @@ M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() - /datum/reagent/consumable/milk/chocolate_milk name = "Chocolate Milk" id = "chocolate_milk" @@ -908,3 +968,21 @@ to_chat(M, "[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")]") M.adjustArousalLoss(5) ..() + +/datum/reagent/consumable/monkey_energy + name = "Monkey Energy" + id = "monkey_energy" + description = "The only drink that will make you unleash the ape." + color = "#f39b03" // rgb: 243, 155, 3 + taste_description = "barbecue and nostalgia" + glass_icon_state = "monkey_energy_glass" + glass_name = "glass of Monkey Energy" + glass_desc = "You can unleash the ape, but without the pop of the can?" + +/datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M) + M.Jitter(20) + M.dizziness +=1 + M.drowsyness = 0 + M.AdjustSleeping(-40, FALSE) + M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) + ..() diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 4446b5c561..e956fcac36 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -13,6 +13,7 @@ /datum/reagent/drug/space_drugs name = "Space drugs" id = "space_drugs" + value = 6 description = "An illegal chemical compound used as drug." color = "#60A584" // rgb: 96, 165, 132 overdose_threshold = 30 @@ -40,6 +41,7 @@ /datum/reagent/drug/nicotine name = "Nicotine" id = "nicotine" + value = 0 description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage." reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 4d02706a3c..64e693a326 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -622,7 +622,7 @@ M.adjustBruteLoss(-1*REM, 0) M.adjustFireLoss(-1*REM, 0) M.adjustOxyLoss(-1*REM, 0) - M.adjustToxLoss(-1*REM, 0) + M.adjustToxLoss(-1*REM, 0, TRUE) //heals TOXINLOVERs ..() /datum/reagent/consumable/honey/reaction_mob(mob/living/M, method=TOUCH, reac_volume) @@ -767,7 +767,7 @@ /* //We don't have ethereals here, so I'll just comment it out. /datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works. if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M)) - + var/mob/living/carbon/C = M var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH) if(istype(stomach)) @@ -799,6 +799,16 @@ ..() . = TRUE +/datum/reagent/consumable/caramel + name = "Caramel" + id = "caramel" + description = "Who would have guessed that heated sugar could be so delicious?" + nutriment_factor = 10 * REAGENTS_METABOLISM + color = "#D98736" + taste_mult = 2 + taste_description = "caramel" + reagent_state = SOLID + /datum/reagent/consumable/secretsauce name = "secret sauce" id = "secret_sauce" @@ -810,3 +820,27 @@ taste_mult = 100 can_synth = FALSE pH = 6.1 + +/datum/reagent/consumable/char + name = "Char" + id = "char" + description = "Essence of the grill. Has strange properties when overdosed." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#C8C8C8" + taste_mult = 6 + taste_description = "smoke" + overdose_threshold = 25 + +/datum/reagent/consumable/char/overdose_process(mob/living/carbon/M) + if(prob(10)) + M.say(pick("I hate my grill.", "I just want to grill something right for once...", "I wish I could just go on my lawnmower and cut the grass.", "Yep, Tetris. That was a good game...")) + +/datum/reagent/consumable/bbqsauce + name = "BBQ Sauce" + id = "bbqsauce" + description = "Sweet, Smokey, Savory, and gets everywhere. Perfect for Grilling." + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#78280A" // rgb: 120 40, 10 + taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground. + taste_description = "smokey sweetness" diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 60c5cd6e71..d8ff084227 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1211,7 +1211,30 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) M.adjustToxLoss(-5*REM, 0) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM) M.adjustCloneLoss(-3*REM, 0) + M.adjustStaminaLoss(-25*REM,0) + if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) + M.blood_volume += 40 // blood fall out man bad + ..() + . = 1 + +/datum/reagent/medicine/lesser_syndicate_nanites // the one in the injector + name = "Regenerative Nanites" + id = "lesser_syndicate_nanites" + description = "Miniature medical robots that restore damage and get operatives back in the fight." + reagent_state = SOLID + color = "#555555" + pH = 11 + +/datum/reagent/medicine/lesser_syndicate_nanites/on_mob_life(mob/living/carbon/M) + M.adjustBruteLoss(-3*REM, 0) // hidden gold shh + M.adjustFireLoss(-3*REM, 0) + M.adjustOxyLoss(-15, 0) + M.adjustToxLoss(-3*REM, 0) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM) + M.adjustCloneLoss(-3*REM, 0) M.adjustStaminaLoss(-20*REM,0) + if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) + M.blood_volume += 20 // blood fall out man bad ..() . = 1 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 512b8a21a1..bd6eb4244c 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1870,133 +1870,82 @@ reagent_state = LIQUID color = "#b51d05" taste_description = "carpet" // Your tounge feels furry. + var/carpet_type = /turf/open/floor/carpet /datum/reagent/carpet/reaction_turf(turf/T, reac_volume) if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet) + F.PlaceOnTop(carpet_type, flags = CHANGETURF_INHERIT_AIR) ..() /datum/reagent/carpet/black name = "Liquid Black Carpet" id = "blackcarpet" color = "#363636" - -/datum/reagent/carpet/black/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/black) - ..() + carpet_type = /turf/open/floor/carpet/black /datum/reagent/carpet/blackred name = "Liquid Red Black Carpet" id = "blackredcarpet" color = "#342125" - -/datum/reagent/carpet/blackred/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/blackred) - ..() + carpet_type = /turf/open/floor/carpet/blackred /datum/reagent/carpet/monochrome name = "Liquid Monochrome Carpet" id = "monochromecarpet" color = "#b4b4b4" - -/datum/reagent/carpet/monochrome/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/monochrome) - ..() + carpet_type = /turf/open/floor/carpet/monochrome /datum/reagent/carpet/blue name = "Liquid Blue Carpet" id = "bluecarpet" color = "#1256ff" - -/datum/reagent/carpet/blue/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/blue) - ..() + carpet_type = /turf/open/floor/carpet/blue /datum/reagent/carpet/cyan name = "Liquid Cyan Carpet" id = "cyancarpet" color = "#3acfb9" - -/datum/reagent/carpet/cyan/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/cyan) - ..() + carpet_type = /turf/open/floor/carpet/cyan /datum/reagent/carpet/green name = "Liquid Green Carpet" id = "greencarpet" color = "#619b62" - -/datum/reagent/carpet/green/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/green) - ..() + carpet_type = /turf/open/floor/carpet/green /datum/reagent/carpet/orange name = "Liquid Orange Carpet" id = "orangecarpet" color = "#cc7900" - -/datum/reagent/carpet/orange/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/orange) - ..() + carpet_type = /turf/open/floor/carpet/orange /datum/reagent/carpet/purple name = "Liquid Purple Carpet" id = "purplecarpet" color = "#6d3392" + carpet_type = /turf/open/floor/carpet/purple -/datum/reagent/carpet/purple/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/purple) - ..() /datum/reagent/carpet/red name = "Liquid Red Carpet" id = "redcarpet" color = "#871515" + carpet_type = /turf/open/floor/carpet/red -/datum/reagent/carpet/red/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/red) - ..() /datum/reagent/carpet/royalblack name = "Liquid Royal Black Carpet" id = "royalblackcarpet" color = "#483d05" + carpet_type = /turf/open/floor/carpet/royalblack -/datum/reagent/carpet/royalblack/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/royalblack) - ..() /datum/reagent/carpet/royalblue name = "Liquid Royal Blue Carpet" id = "royalbluecarpet" color = "#24227e" - -/datum/reagent/carpet/royalblue/reaction_turf(turf/T, reac_volume) - if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) - var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/carpet/royalblue) - ..() + carpet_type = /turf/open/floor/carpet/royalblue // Virology virus food chems. diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index c170858d98..36621aa662 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -53,7 +53,7 @@ if(isplatingturf(T)) var/turf/open/floor/plating/F = T if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed - F.ScrapeAway() + F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) if(isfloorturf(T)) var/turf/open/floor/F = T if(prob(reac_volume)) diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm index 59394e6e4b..08d07b8a52 100644 --- a/code/modules/reagents/chemistry/recipes/special.dm +++ b/code/modules/reagents/chemistry/recipes/special.dm @@ -123,24 +123,11 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related /datum/chemical_reaction/randomized/proc/LoadOldRecipe(recipe_data) created = text2num(recipe_data["timestamp"]) - - var/req_reag = unwrap_reagent_list(recipe_data["required_reagents"]) - if(!req_reag) - return FALSE - required_reagents = req_reag - - var/req_catalysts = unwrap_reagent_list(recipe_data["required_catalysts"]) - if(!req_catalysts) - return FALSE - required_catalysts = req_catalysts - + required_reagents = SANITIZE_LIST(recipe_data["required_reagents"]) + required_catalysts = SANITIZE_LIST(recipe_data["required_catalysts"]) required_temp = recipe_data["required_temp"] is_cold_recipe = recipe_data["is_cold_recipe"] - - var/temp_results = unwrap_reagent_list(recipe_data["results"]) - if(!temp_results) - return FALSE - results = temp_results + results = SANITIZE_LIST(recipe_data["results"]) var/containerpath = text2path(recipe_data["required_container"]) if(!containerpath) return FALSE diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index d475b118b2..618b74fffb 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -156,6 +156,10 @@ if(beaker_weakness_bitflag & PH_WEAK) if((reagents.pH < 1.5) || (reagents.pH > 12.5)) START_PROCESSING(SSobj, src) + else if((reagents.pH < -3) || (reagents.pH > 17)) + visible_message("[icon2html(src, viewers(src))] \The [src] is damaged by the super pH and begins to deform!") + reagents.pH = CLAMP(reagents.pH, -3, 17) + container_HP -= 1 /obj/item/reagent_containers/process() diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 2bd5fb2d9f..94ad5fdb2c 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -26,12 +26,11 @@ Borg Hypospray var/bypass_protection = 0 //If the hypospray can go through armor or thick material var/list/datum/reagents/reagent_list = list() - var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "antitoxin", "epinephrine", "spaceacillin", "salglu_solution") + var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "antitoxin", "epinephrine", "spaceacillin", "salglu_solution", "insulin") var/accepts_reagent_upgrades = TRUE //If upgrades can increase number of reagents dispensed. var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values. //Used as list for input() in shakers. - /obj/item/reagent_containers/borghypo/Initialize() . = ..() @@ -40,12 +39,10 @@ Borg Hypospray START_PROCESSING(SSobj, src) - /obj/item/reagent_containers/borghypo/Destroy() STOP_PROCESSING(SSobj, src) return ..() - /obj/item/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg charge_tick++ if(charge_tick >= recharge_time) @@ -162,7 +159,7 @@ Borg Hypospray icon_state = "borghypo_s" charge_cost = 20 recharge_time = 2 - reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine") + reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine", "insulin") bypass_protection = 1 accepts_reagent_upgrades = FALSE @@ -178,7 +175,6 @@ Borg Shaker charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. recharge_time = 3 accepts_reagent_upgrades = FALSE - reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "milk", "coffee", "banana", "lemonjuice") /obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) @@ -234,23 +230,21 @@ Borg Shaker charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. recharge_time = 3 accepts_reagent_upgrades = FALSE - reagent_ids = list("fakebeer", "fernet") /obj/item/reagent_containers/borghypo/peace name = "Peace Hypospray" - - reagent_ids = list("dizzysolution","tiresolution","synthpax") + reagent_ids = list("dizzysolution", "tiresolution", "synthpax", "insulin") accepts_reagent_upgrades = FALSE /obj/item/reagent_containers/borghypo/peace/hacked desc = "Everything's peaceful in death!" icon_state = "borghypo_s" - reagent_ids = list("dizzysolution","tiresolution","synthpax","tirizene","sulfonal","sodium_thiopental","cyanide","fentanyl") + reagent_ids = list("dizzysolution", "tiresolution", "synthpax", "tirizene", "sulfonal", "sodium_thiopental", "cyanide", "fentanyl") accepts_reagent_upgrades = FALSE /obj/item/reagent_containers/borghypo/epi - name = "epinephrine injector" + name = "Stabilizer injector" desc = "An advanced chemical synthesizer and injection system, designed to stabilize patients." - reagent_ids = list("epinephrine") + reagent_ids = list("epinephrine", "insulin") accepts_reagent_upgrades = FALSE diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 3ed505c360..85248250a2 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -109,11 +109,13 @@ /obj/item/reagent_containers/glass/beaker name = "beaker" - desc = "A beaker. It can hold up to 50 units. Unable to withstand extreme pHes" + desc = "A beaker. It can hold up to 60 units. Unable to withstand extreme pHes." icon = 'icons/obj/chemical.dmi' + volume = 60 icon_state = "beaker" item_state = "beaker" materials = list(MAT_GLASS=500) + possible_transfer_amounts = list(5,10,15,20,25,30,60) beaker_weakness_bitflag = PH_WEAK /obj/item/reagent_containers/glass/beaker/Initialize() @@ -156,28 +158,28 @@ /obj/item/reagent_containers/glass/beaker/jar name = "honey jar" - desc = "A jar for honey. It can hold up to 50 units of sweet delight. Unable to withstand reagents of an extreme pH." + desc = "A jar for honey. It can hold up to 60 units of sweet delight. Unable to withstand reagents of an extreme pH." icon = 'icons/obj/chemical.dmi' icon_state = "vapour" /obj/item/reagent_containers/glass/beaker/large name = "large beaker" - desc = "A large beaker. Can hold up to 100 units. Unable to withstand reagents of an extreme pH." + desc = "A large beaker. Can hold up to 120 units. Unable to withstand reagents of an extreme pH." icon_state = "beakerlarge" materials = list(MAT_GLASS=2500) - volume = 100 + volume = 120 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100) + possible_transfer_amounts = list(5,10,15,20,25,30,40,60,120) container_HP = 3 /obj/item/reagent_containers/glass/beaker/plastic name = "x-large beaker" - desc = "An extra-large beaker. Can hold up to 150 units. Is able to resist acid and alkaline solutions, but melts at 444K" + desc = "An extra-large beaker. Can hold up to 180 units. Is able to resist acid and alkaline solutions, but melts at 444 K." icon_state = "beakerwhite" materials = list(MAT_GLASS=2500, MAT_PLASTIC=3000) - volume = 150 + volume = 180 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150) + possible_transfer_amounts = list(5,10,15,20,25,30,40,60,120,180) /obj/item/reagent_containers/glass/beaker/plastic/Initialize() beaker_weakness_bitflag &= ~PH_WEAK @@ -191,14 +193,14 @@ /obj/item/reagent_containers/glass/beaker/meta name = "metamaterial beaker" - desc = "A large beaker. Can hold up to 200 units. Is able to withstand all chemical situations." + desc = "A large beaker. Can hold up to 240 units, and is able to withstand all chemical situations." icon_state = "beakergold" materials = list(MAT_GLASS=2500, MAT_PLASTIC=3000, MAT_GOLD=1000, MAT_TITANIUM=1000) - volume = 200 + volume = 240 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100,200) + possible_transfer_amounts = list(5,10,15,20,25,30,40,60,120,200,240) -/obj/item/reagent_containers/glass/beaker/meta/Initialize() +/obj/item/reagent_containers/glass/beaker/meta/Initialize() // why the fuck can't you just set the beaker weakness bitflags to nothing? fuck you beaker_weakness_bitflag &= ~PH_WEAK . = ..() @@ -228,7 +230,7 @@ volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300) - container_HP = 4 + container_HP = 5 /obj/item/reagent_containers/glass/beaker/cryoxadone list_reagents = list("cryoxadone" = 30) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index f1a4d1554e..9232bb69b3 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -56,11 +56,16 @@ /obj/item/reagent_containers/hypospray/combat name = "combat stimulant injector" - desc = "A modified air-needle autoinjector, used by support operatives to quickly heal injuries in combat." + desc = "A modified air-needle autoinjector, used by support operatives to quickly heal injuries in combat and get people back in the fight." amount_per_transfer_from_this = 10 icon_state = "combat_hypo" - volume = 90 + volume = 100 ignore_flags = 1 // So they can heal their comrades. + list_reagents = list("epinephrine" = 30, "lesser_syndicate_nanites" = 40, "leporazine" = 15, "atropine" = 15) + +/obj/item/reagent_containers/hypospray/combat/omnizine // owned idiot + desc = "A modified air-needle autoinjector, used by underfunded support operatives to slowly heal injuries in combat and limp away from a fight." + volume = 90 list_reagents = list("epinephrine" = 30, "omnizine" = 30, "leporazine" = 15, "atropine" = 15) /obj/item/reagent_containers/hypospray/combat/nanites @@ -135,7 +140,7 @@ list_reagents = list("stimulants" = 50) /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball - name = "the reason the syndicate major league team wins." + name = "the reason the syndicate major league team wins" desc = "They say drugs never win, but look where you are now, then where they are." icon_state = "baseballstim" volume = 50 diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm index ba5ce48a4a..482877afcd 100644 --- a/code/modules/reagents/reagent_containers/hypovial.dm +++ b/code/modules/reagents/reagent_containers/hypovial.dm @@ -1,6 +1,6 @@ //hypovials used with the MkII hypospray. See hypospray.dm. -/obj/item/reagent_containers/glass/bottle/vial +/obj/item/reagent_containers/glass/bottle/vial // these have literally no fucking right to just be better beakers that you can shit out of a chemmaster name = "broken hypovial" desc = "A hypovial compatible with most hyposprays." icon_state = "hypovial" @@ -27,6 +27,8 @@ for(var/R in comes_with) reagents.add_reagent(R,comes_with[R]) update_icon() +// beaker_weakness_bitflag |= PH_WEAK // fuck you if you're using these like beakers +// beaker_weakness_bitflag |= TEMP_WEAK /obj/item/reagent_containers/glass/bottle/vial/on_reagent_change() @@ -60,11 +62,11 @@ /obj/item/reagent_containers/glass/bottle/vial/small name = "hypovial" volume = 60 - possible_transfer_amounts = list(5,10) + possible_transfer_amounts = list(1,2,5,10,20,30) /obj/item/reagent_containers/glass/bottle/vial/small/bluespace volume = 120 - possible_transfer_amounts = list(5,10) + possible_transfer_amounts = list(1,2,5,10,20,30,40) name = "bluespace hypovial" icon_state = "hypovialbs" unique_reskin = null @@ -74,7 +76,7 @@ desc = "A large hypovial, for deluxe hypospray models." icon_state = "hypoviallarge" volume = 120 - possible_transfer_amounts = list(5,10,15,20) + possible_transfer_amounts = list(1,2,5,10,20,30,40,60) unique_reskin = list("large hypovial" = "hypoviallarge", "large red hypovial" = "hypoviallarge-b", "large blue hypovial" = "hypoviallarge-d", @@ -106,7 +108,7 @@ add_overlay(filling) /obj/item/reagent_containers/glass/bottle/vial/large/bluespace - possible_transfer_amounts = list(5,10,15,20) + possible_transfer_amounts = list(1,2,5,10,20,30,40,60) name = "bluespace large hypovial" volume = 240 icon_state = "hypoviallargebs" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 7701e58616..46ddb1e2ed 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/inverted/Initialize(mapload) . = ..() if(mapload && !(dir in GLOB.diagonals)) - log_game("### MAPPING ERROR: [src] at [AREACOORD(src)] spawned without using a diagonal dir. Please replace with a normal version.") + log_mapping("[src] at [AREACOORD(src)] spawned without using a diagonal dir. Please replace with a normal version.") // Auto conveyour is always on unless unpowered diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 88c03ee7d5..7025a649e6 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -102,9 +102,17 @@ return ..() /obj/machinery/disposal/proc/place_item_in_disposal(obj/item/I, mob/user) - I.forceMove(src) - user.visible_message("[user.name] places \the [I] into \the [src].", "You place \the [I] into \the [src].") - + if(istype(I, /obj/item/clothing/head/mob_holder)) + var/obj/item/clothing/head/mob_holder/H = I + var/mob/living/m = H.held_mob + H.release() + if(m) + user.start_pulling(m, 1) + stuff_mob_in(m,user) + return//you don't want this going into disposals ever + if(user.temporarilyRemoveItemFromInventory(I)) //double-checks never hurt + I.forceMove(src) + user.visible_message("[user.name] places \the [I] into \the [src].", "You place \the [I] into \the [src].") //mouse drop another mob or self /obj/machinery/disposal/MouseDrop_T(mob/living/target, mob/living/user) if(istype(target)) diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm index e5e3a6bb4f..94599e9c32 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm @@ -130,11 +130,19 @@ category = list("hacked", "Security") /datum/design/a357 - name = "Speed Loader (.357)" + name = "Revolver Bullet (.357)" id = "a357" build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) - build_path = /obj/item/ammo_box/a357 + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/a357 + category = list("hacked", "Security") + +/datum/design/a762 + name = "Rifle Bullet (7.62mm)" + id = "a762" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000) //need seclathe for clips + build_path = /obj/item/ammo_casing/a762 category = list("hacked", "Security") /datum/design/c10mm @@ -183,4 +191,4 @@ build_type = AUTOLATHE materials = list(MAT_METAL = 5500) build_path = /obj/item/clothing/head/foilhat - category = list("hacked", "Misc") \ No newline at end of file + category = list("hacked", "Misc") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index e70362553c..f2ded3a57b 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -152,6 +152,16 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/telescopiciv + name = "Telescopic IV Drip" + desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down." + id = "telescopiciv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 3500, MAT_SILVER = 1000) + build_path = /obj/item/tele_iv + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/holobarrier_med name = "PENLITE holobarrier projector" desc = "PENLITE holobarriers, a device that halts individuals with malicious diseases." diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm index 177d7073a1..09fe1d9c9b 100644 --- a/code/modules/research/designs/nanite_designs.dm +++ b/code/modules/research/designs/nanite_designs.dm @@ -25,6 +25,20 @@ program_type = /datum/nanite_program/viral category = list("Utility Nanites") +/datum/design/nanites/research + name = "Distributed Computing" + desc = "The nanites aid the research servers by performing a portion of its calculations, increasing research point generation." + id = "research_nanites" + program_type = /datum/nanite_program/research + category = list("Utility Nanites") + +/datum/design/nanites/researchplus + name = "Neural Network" + desc = "The nanites link the host's brains together forming a neural research network, that becomes more efficient with the amount of total hosts. Can be overloaded to increase research output." + id = "researchplus_nanites" + program_type = /datum/nanite_program/researchplus + category = list("Utility Nanites") + /datum/design/nanites/monitoring name = "Monitoring" desc = "The nanites monitor the host's vitals and location, sending them to the suit sensor network." @@ -39,6 +53,13 @@ program_type = /datum/nanite_program/triggered/self_scan category = list("Utility Nanites") +/datum/design/nanites/dermal_button + name = "Dermal Button" + desc = "Displays a button on the host's skin, which can be used to send a signal to the nanites." + id = "dermal_button_nanites" + program_type = /datum/nanite_program/dermal_button + category = list("Utility Nanites") + /datum/design/nanites/stealth name = "Stealth" desc = "The nanites hide their activity and programming from superficial scans." @@ -46,6 +67,15 @@ program_type = /datum/nanite_program/stealth category = list("Utility Nanites") + +/datum/design/nanites/reduced_diagnostics + name = "Reduced Diagnostics" + desc = "Disables some high-cost diagnostics in the nanites, making them unable to communicate their program list to portable scanners. \ + Doing so saves some power, slightly increasing their replication speed." + id = "red_diag_nanites" + program_type = /datum/nanite_program/reduced_diagnostics + category = list("Utility Nanites") + /datum/design/nanites/access name = "Subdermal ID" desc = "The nanites store the host's ID access rights in a subdermal magnetic strip. Updates when triggered, copying the host's current access." diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index 44b85e4210..3db482d989 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -130,7 +130,7 @@ /datum/nanite_program/stealth name = "Stealth" - desc = "The nanites hide their activity and programming from superficial scans." + desc = "The nanites mask their activity from superficial scans, becoming undetectable by HUDs and non-specialized scanners." rogue_types = list(/datum/nanite_program/toxic) use_rate = 0.2 @@ -142,6 +142,22 @@ . = ..() nanites.stealth = FALSE +/datum/nanite_program/reduced_diagnostics + name = "Reduced Diagnostics" + desc = "Disables some high-cost diagnostics in the nanites, making them unable to communicate their program list to portable scanners. \ + Doing so saves some power, slightly increasing their replication speed." + rogue_types = list(/datum/nanite_program/toxic) + use_rate = -0.1 + +/datum/nanite_program/reduced_diagnostics/enable_passive_effect() + . = ..() + nanites.diagnostics = FALSE + +/datum/nanite_program/reduced_diagnostics/disable_passive_effect() + . = ..() + nanites.diagnostics = TRUE + + /datum/nanite_program/relay name = "Relay" desc = "The nanites receive and relay long-range nanite signals." @@ -236,10 +252,14 @@ /datum/nanite_program/spreading/active_effect() if(prob(10)) var/list/mob/living/target_hosts = list() - for(var/mob/living/L in oview(5, host_mob)) + var/turf/T = get_turf(host_mob) + for(var/mob/living/L in range(5, host_mob)) if(!(MOB_ORGANIC in L.mob_biotypes) && !(MOB_UNDEAD in L.mob_biotypes)) continue + if(!disease_air_spread_walk(T, get_turf(L))) + continue target_hosts += L + target_hosts -= host_mob if(!target_hosts.len) return var/mob/living/infectee = pick(target_hosts) @@ -267,3 +287,138 @@ if(fault == src) return fault.software_error() + +/datum/nanite_program/dermal_button + name = "Dermal Button" + desc = "Displays a button on the host's skin, which can be used to send a signal to the nanites." + extra_settings = list("Sent Code","Button Name","Icon","Color") + unique = FALSE + var/datum/action/innate/nanite_button/button + var/button_name = "Button" + var/icon = "power" + var/color = "green" + var/sent_code = 0 + +/datum/nanite_program/dermal_button/set_extra_setting(user, setting) + if(setting == "Sent Code") + var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num + if(isnull(new_code)) + return + sent_code = CLAMP(round(new_code, 1), 1, 9999) + if(setting == "Button Name") + var/new_button_name = stripped_input(user, "Choose the name for the button.", "Button Name", button_name, MAX_NAME_LEN) + if(!new_button_name) + return + button_name = new_button_name + if(setting == "Icon") + var/new_icon = input("Select the icon to display on the button:", name) as null|anything in list("one","two","three","four","five","plus","minus","power") + if(!new_icon) + return + icon = new_icon + if(setting == "Color") + var/new_color = input("Select the color of the button's icon:", name) as null|anything in list("green","red","yellow","blue") + if(!new_color) + return + color = new_color + +/datum/nanite_program/dermal_button/get_extra_setting(setting) + if(setting == "Sent Code") + return sent_code + if(setting == "Button Name") + return button_name + if(setting == "Icon") + return capitalize(icon) + if(setting == "Color") + return capitalize(color) + +/datum/nanite_program/dermal_button/copy_extra_settings_to(datum/nanite_program/dermal_button/target) + target.sent_code = sent_code + target.button_name = button_name + target.icon = icon + target.color = color + +/datum/nanite_program/dermal_button/enable_passive_effect() + . = ..() + if(!button) + button = new(src, button_name, icon, color) + button.target = host_mob + button.Grant(host_mob) + +/datum/nanite_program/dermal_button/disable_passive_effect() + . = ..() + if(button) + button.Remove(host_mob) + +/datum/nanite_program/dermal_button/on_mob_remove() + . = ..() + qdel(button) + +/datum/nanite_program/dermal_button/proc/press() + if(activated) + host_mob.visible_message("[host_mob] presses a button on [host_mob.p_their()] forearm.", + "You press the nanite button on your forearm.", null, 2) + SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, sent_code, "a [name] program") + +/datum/action/innate/nanite_button + name = "Button" + icon_icon = 'icons/mob/actions/actions_items.dmi' + check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS + button_icon_state = "power_green" + var/datum/nanite_program/dermal_button/program + +/datum/action/innate/nanite_button/New(datum/nanite_program/dermal_button/_program, _name, _icon, _color) + ..() + program = _program + name = _name + button_icon_state = "[_icon]_[_color]" + +/datum/action/innate/nanite_button/Activate() + program.press() + +/datum/nanite_program/research + name = "Distributed Computing" + desc = "The nanites aid the research servers by performing a portion of its calculations, increasing research point generation." + use_rate = 0.2 + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/research/active_effect() + if(!iscarbon(host_mob)) + return + var/points = 1 + if(!host_mob.client) //less brainpower + points *= 0.25 + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) + +/datum/nanite_program/researchplus + name = "Neural Network" + desc = "The nanites link the host's brains together forming a neural research network, that becomes more efficient with the amount of total hosts." + use_rate = 0.3 + rogue_types = list(/datum/nanite_program/brain_decay) + +/datum/nanite_program/researchplus/enable_passive_effect() + . = ..() + if(!iscarbon(host_mob)) + return + if(host_mob.client) + SSnanites.neural_network_count++ + else + SSnanites.neural_network_count += 0.25 + +/datum/nanite_program/researchplus/disable_passive_effect() + . = ..() + if(!iscarbon(host_mob)) + return + if(host_mob.client) + SSnanites.neural_network_count-- + else + SSnanites.neural_network_count -= 0.25 + +/datum/nanite_program/researchplus/active_effect() + if(!iscarbon(host_mob)) + return + var/mob/living/carbon/C = host_mob + var/points = round(SSnanites.neural_network_count / 12, 0.1) + if(!C.client) //less brainpower + points *= 0.25 + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) + diff --git a/code/modules/research/nanites/program_disks.dm b/code/modules/research/nanites/program_disks.dm index 86b7803fc9..f780f40932 100644 --- a/code/modules/research/nanites/program_disks.dm +++ b/code/modules/research/nanites/program_disks.dm @@ -130,4 +130,16 @@ program_type = /datum/nanite_program/pacifying /obj/item/disk/nanite_program/stun - program_type = /datum/nanite_program/triggered/stun \ No newline at end of file + program_type = /datum/nanite_program/triggered/stun + +/obj/item/disk/nanite_program/dermal_button + program_type = /datum/nanite_program/dermal_button + +/obj/item/disk/nanite_program/research + program_type = /datum/nanite_program/research + +/obj/item/disk/nanite_program/researchplus + program_type = /datum/nanite_program/researchplus + +/obj/item/disk/nanite_program/reduced_diagnostics + program_type = /datum/nanite_program/reduced_diagnostics \ No newline at end of file diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 7ccdb76dd9..af4148d194 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -71,7 +71,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen") + design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -960,7 +960,7 @@ prereq_ids = list("datatheory","robotics") design_ids = list("nanite_disk","nanite_remote","nanite_scanner",\ "nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\ - "relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites") + "relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","red_diag_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -969,7 +969,7 @@ display_name = "Smart Nanite Programming" description = "Nanite programs that require nanites to perform complex actions, act independently, roam or seek targets." prereq_ids = list("nanite_base","adv_robotics") - design_ids = list("purging_nanites", "metabolic_nanites", "stealth_nanites", "memleak_nanites","sensor_voice_nanites", "voice_nanites") + design_ids = list("purging_nanites", "research_nanites", "metabolic_nanites", "stealth_nanites", "memleak_nanites","sensor_voice_nanites", "voice_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 4000 @@ -978,7 +978,7 @@ display_name = "Mesh Nanite Programming" description = "Nanite programs that require static structures and membranes." prereq_ids = list("nanite_base","engineering") - design_ids = list("hardening_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites") + design_ids = list("hardening_nanites", "dermal_button_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -1015,7 +1015,7 @@ display_name = "Harmonic Nanite Programming" description = "Nanite programs that require seamless integration between nanites and biology." prereq_ids = list("nanite_bio","nanite_smart","nanite_mesh") - design_ids = list("fakedeath_nanites","aggressive_nanites","defib_nanites","regenerative_plus_nanites","brainheal_plus_nanites","purging_plus_nanites","adrenaline_nanites") + design_ids = list("fakedeath_nanites","researchplus_nanites","aggressive_nanites","defib_nanites","regenerative_plus_nanites","brainheal_plus_nanites","purging_plus_nanites","adrenaline_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) export_price = 8000 @@ -1056,7 +1056,7 @@ /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor, /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, - /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor) + /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor) /datum/techweb_node/alien_bio id = "alien_bio" @@ -1095,13 +1095,13 @@ continue boost_item_paths |= UI.item //allows deconning to unlock. -/datum/techweb_node/advanced_illegl_ballistics +/datum/techweb_node/advanced_illegal_ballistics id = "advanced_illegal_ballistics" - display_name = "Advanced Illegal Ballistics" - description = "Advanced Ballistic for Illegal weaponds." - design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip") + display_name = "Advanced Non-Standard Ballistics" + description = "Ballistic ammunition for non-standard firearms. Usually the ones you don't have nor want to be involved with." + design_ids = list("10mm","10mmap","10mminc","10mmhp","sl357","pistolm9mm","m45","bolt_clip") prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns from traitors, space, or anything in between. export_price = 7000 //Helpers for debugging/balancing the techweb in its entirety! diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index caa2ca7adf..76897b5276 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -108,7 +108,7 @@ if (levels.len) dest = locate(T.x, T.y, pick(levels)) - T.ChangeTurf(/turf/open/chasm) + T.ChangeTurf(/turf/open/chasm, flags = CHANGETURF_INHERIT_AIR) var/turf/open/chasm/C = T C.set_target(dest) C.drop(user) diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index 70b06e6438..13d1543c92 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -49,7 +49,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) else SSshuttle.emergency.modTimer(1.5) GLOB.security_level = SEC_LEVEL_BLUE - sound_to_playing_players('sound/misc/voybluealert.ogg') // Citadel change - Makes alerts play a sound + sound_to_playing_players('sound/misc/voybluealert.ogg', volume = 50) // Citadel change - Makes alerts play a sound for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) FA.update_icon() @@ -66,7 +66,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) SSshuttle.emergency.modTimer(1.6) GLOB.security_level = SEC_LEVEL_AMBER - sound_to_playing_players('sound/effects/alert.ogg') // Citadel change - Makes alerts play a sound + sound_to_playing_players('sound/effects/alert.ogg', volume = 50) // Citadel change - Makes alerts play a sound for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) FA.update_icon() @@ -83,7 +83,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) else minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!") GLOB.security_level = SEC_LEVEL_RED - sound_to_playing_players('sound/misc/voyalert.ogg') // Citadel change - Makes alerts play a sound + sound_to_playing_players('sound/misc/voyalert.ogg', volume = 50) // Citadel change - Makes alerts play a sound for(var/obj/machinery/firealarm/FA in GLOB.machines) if(is_station_level(FA.z)) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index c38cef5ea8..2ac6df7668 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -28,6 +28,11 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/item/hilbertshotel ))) +GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( + /mob/living/simple_animal/revenant, + /mob/living/simple_animal/slaughter + ))) + /obj/docking_port/mobile/supply name = "supply shuttle" id = "supply" @@ -50,16 +55,27 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/docking_port/mobile/supply/canMove() if(is_station_level(z)) - return check_blacklist(shuttle_areas) + return check_blacklist(shuttle_areas, GLOB.blacklisted_cargo_types - GLOB.cargo_shuttle_leave_behind_typecache) return ..() -/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances) +/obj/docking_port/mobile/supply/enterTransit() + var/list/leave_behind = list() + for(var/i in check_blacklist(shuttle_areas, GLOB.cargo_shuttle_leave_behind_typecache)) + var/atom/movable/AM = i + leave_behind[AM] = AM.loc + . = ..() + for(var/kicked in leave_behind) + var/atom/movable/victim = kicked + var/atom/oldloc = leave_behind[victim] + victim.forceMove(oldloc) + +/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances, list/typecache) for(var/place in areaInstances) var/area/shuttle/shuttle_area = place for(var/trf in shuttle_area) var/turf/T = trf for(var/a in T.GetAllContents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) + if(is_type_in_typecache(a, typecache)) return FALSE if(istype(a, /obj/structure/closet))//Prevents eigenlockers from ending up at CC var/obj/structure/closet/c = a diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm index 3ebded7487..38a2d5bddd 100644 --- a/code/modules/spells/spell_types/conjure.dm +++ b/code/modules/spells/spell_types/conjure.dm @@ -31,7 +31,7 @@ if(ispath(summoned_object_type, /turf)) var/turf/O = spawn_place var/N = summoned_object_type - O.ChangeTurf(N) + O.ChangeTurf(N, flags = CHANGETURF_INHERIT_AIR) else var/atom/summoned_object = new summoned_object_type(spawn_place) diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 8b8328abbe..d97d466e4d 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -234,7 +234,7 @@ dancefloor_exists = FALSE for(var/i in 1 to dancefloor_turfs.len) var/turf/T = dancefloor_turfs[i] - T.ChangeTurf(dancefloor_turfs_types[i]) + T.ChangeTurf(dancefloor_turfs_types[i], flags = CHANGETURF_INHERIT_AIR) else var/list/funky_turfs = RANGE_TURFS(1, user) for(var/turf/closed/solid in funky_turfs) @@ -248,7 +248,7 @@ var/turf/T = t dancefloor_turfs[i] = T dancefloor_turfs_types[i] = T.type - T.ChangeTurf((i % 2 == 0) ? /turf/open/floor/light/colour_cycle/dancefloor_a : /turf/open/floor/light/colour_cycle/dancefloor_b) + T.ChangeTurf((i % 2 == 0) ? /turf/open/floor/light/colour_cycle/dancefloor_a : /turf/open/floor/light/colour_cycle/dancefloor_b, flags = CHANGETURF_INHERIT_AIR) i++ /datum/effect_system/smoke_spread/transparent/dancefloor_devil diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index c61f1a8122..2ddbd672c5 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -44,13 +44,9 @@ eye_color = H.eye_color if(!special) H.dna?.species?.handle_body() //regenerate eyeballs overlays. - if(HAS_TRAIT(H, TRAIT_NIGHT_VISION) && !lighting_alpha) - lighting_alpha = LIGHTING_PLANE_ALPHA_NV_TRAIT - see_in_dark = 8 M.update_tint() owner.update_sight() - /obj/item/organ/eyes/Remove(mob/living/carbon/M, special = 0) clear_eye_trauma() . = ..() diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 0fbd8c8406..760cd97f08 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -125,6 +125,32 @@ taste_sensitivity = 101 // ayys cannot taste anything. maxHealth = 120 //Ayys probe a lot modifies_speech = TRUE + var/mothership + +/obj/item/organ/tongue/abductor/attack_self(mob/living/carbon/human/H) + if(!istype(H)) + return + + var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE) + if(!istype(T)) + return + + if(T.mothership == mothership) + to_chat(H, "[src] is already attuned to the same channel as your own.") + return + + H.visible_message("[H] holds [src] in their hands, and concentrates for a moment.", "You attempt to modify the attunation of [src].") + if(do_after(H, delay=15, target=src)) + to_chat(H, "You attune [src] to your own channel.") + mothership = T.mothership + +/obj/item/organ/tongue/abductor/examine(mob/M) + . = ..() + if(HAS_TRAIT(M, TRAIT_ABDUCTOR_TRAINING) || HAS_TRAIT(M.mind, TRAIT_ABDUCTOR_TRAINING) || isobserver(M)) + if(!mothership) + . += "It is not attuned to a specific mothership." + else + . += "It is attuned to [mothership]." /obj/item/organ/tongue/abductor/handle_speech(datum/source, list/speech_args) //Hacks diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index dedff3ae04..161461d099 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -560,7 +560,7 @@ else if((findtext(message, honk_words))) cooldown = COOLDOWN_MEME addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, get_turf(user), 'sound/items/bikehorn.ogg', 300, 1), 25) - if(user.mind && user.mind.assigned_role == "Clown") + if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)) for(var/mob/living/carbon/C in listeners) C.slip(140 * power_multiplier) cooldown = COOLDOWN_MEME @@ -807,9 +807,8 @@ E.enthrallTally += (power_multiplier*(((length(message))/200) + 1)) //encourage players to say more than one word. else E.enthrallTally += power_multiplier*1.25 //thinking about it, I don't know how this can proc - if(L.canbearoused) - if(L.client?.prefs.lewdchem) - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[E.enthrallGender] is so nice to listen to."), 5) + if(L.canbearoused && E.lewd) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[E.enthrallGender] is so nice to listen to."), 5) E.cooldown += 1 //REWARD mixable works @@ -820,7 +819,7 @@ power_multiplier *= distancelist[get_dist(user, V)+1] if(L == user) continue - if (L.client?.prefs.lewdchem) + if (E.lewd) addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[E.enthrallGender] has praised me!!"), 5) if(HAS_TRAIT(L, TRAIT_NYMPHO)) L.adjustArousalLoss(2*power_multiplier) @@ -832,7 +831,7 @@ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've been praised for doing a good job!"), 5) E.resistanceTally -= power_multiplier E.enthrallTally += power_multiplier - var/descmessage = "[(L.client?.prefs.lewdchem?"I feel so happy! I'm a good pet who [E.enthrallGender] loves!":"I did a good job!")]" + var/descmessage = "[(E.lewd?"I feel so happy! I'm a good pet who [E.enthrallGender] loves!":"I did a good job!")]" SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallpraise", /datum/mood_event/enthrallpraise, descmessage) E.cooldown += 1 @@ -841,10 +840,10 @@ for(var/V in listeners) var/mob/living/L = V var/datum/status_effect/chem/enthrall/E = L.has_status_effect(/datum/status_effect/chem/enthrall) - var/descmessage = "[(L.client?.prefs.lewdchem?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]" + var/descmessage = "[(E.lewd?"I've failed [E.enthrallGender]... What a bad, bad pet!":"I did a bad job...")]" if(L == user) continue - if (L.client?.prefs.lewdchem) + if (E.lewd) if(HAS_TRAIT(L, TRAIT_MASO)) L.adjustArousalLoss(3*power_multiplier) descmessage += "And yet, it feels so good..!" //I don't really understand masco, is this the right sort of thing they like? @@ -871,7 +870,7 @@ var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall) REMOVE_TRAIT(C, TRAIT_MUTE, "enthrall") C.silent = 0 - if(C.client?.prefs.lewdchem) + if(E.lewd) addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.enthrallGender]"), 5) else addtimer(CALLBACK(C, /atom/movable/proc/say, "[E.master]"), 5) @@ -887,7 +886,7 @@ E.phase = 3 E.status = null user.emote("snap") - if(L.client?.prefs.lewdchem) + if(E.lewd) addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "The snapping of your [E.enthrallGender]'s fingers brings you back to your enthralled state, obedient and ready to serve.
    "), 5) else addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "The snapping of [E.master]'s fingers brings you back to being under their influence.
    "), 5) @@ -910,11 +909,11 @@ addtimer(CALLBACK(H, /atom/movable/proc/say, "I feel happy being with you."), 5) continue if(2) - speaktrigger += "[(H.client?.prefs.lewdchem?"I think I'm in love with you... ":"I find you really inspirational, ")]" //' + speaktrigger += "[(E.lewd?"I think I'm in love with you... ":"I find you really inspirational, ")]" //' if(3) - speaktrigger += "[(H.client?.prefs.lewdchem?"I'm devoted to being your pet":"I'm commited to following your cause!")]! " + speaktrigger += "[(E.lewd?"I'm devoted to being your pet":"I'm commited to following your cause!")]! " if(4) - speaktrigger += "[(H.client?.prefs.lewdchem?"You are my whole world and all of my being belongs to you, ":"I cannot think of anything else but aiding your cause, ")] "//Redflags!! + speaktrigger += "[(E.lewd?"You are my whole world and all of my being belongs to you, ":"I cannot think of anything else but aiding your cause, ")] "//Redflags!! //mood var/datum/component/mood/mood = H.GetComponent(/datum/component/mood) @@ -1003,7 +1002,7 @@ speaktrigger += "I feel like I'm on the brink of losing my mind, " //horny - if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && H.client?.prefs.lewdchem) + if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && E.lewd) switch(H.getArousalLoss()) if(40 to 60) speaktrigger += "I'm feeling a little horny, " @@ -1013,10 +1012,10 @@ speaktrigger += "I'm really, really horny, " //collar - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && H.client?.prefs.lewdchem) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar) && E.lewd) speaktrigger += "I love the collar you gave me, " //End - if(H.client?.prefs.lewdchem) + if(E.lewd) speaktrigger += "[E.enthrallGender]!" else speaktrigger += "[user.first_name()]!" @@ -1044,7 +1043,7 @@ REMOVE_TRAIT(C, TRAIT_MUTE, "enthrall") C.silent = 0 E.cooldown += 3 - to_chat(user, "You [(C.client?.prefs.lewdchem?"allow [C] to speak again":"encourage [C] to speak again")].") + to_chat(user, "You [(E.lewd?"allow [C] to speak again":"encourage [C] to speak again")].") //Antiresist @@ -1074,7 +1073,7 @@ for(var/mob/living/carbon/C in listeners) var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall) if(E.phase == 4) - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You're unable to forget about [(C.client?.prefs.lewdchem?"the dominating presence of [E.enthrallGender]":"[E.master]")]!"), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You're unable to forget about [(E.lewd?"the dominating presence of [E.enthrallGender]":"[E.master]")]!"), 5) continue addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You wake up, forgetting everything that just happened. You must've dozed off..? How embarassing!"), 5) C.Sleeping(50) @@ -1086,7 +1085,7 @@ if(3) E.phase = 0 E.cooldown = 0 - if(C.client?.prefs.lewdchem) + if(E.lewd) addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You revert to yourself before being enthralled by your [E.enthrallGender], with no memory of what happened."), 5) else addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You revert to who you were before, with no memory of what happened with [E.master]."), 5) @@ -1112,7 +1111,7 @@ var/mob/living/carbon/human/H = V var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall) if(E.phase > 1) - if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && H.client?.prefs.lewdchem) // probably a redundant check but for good measure + if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && E.lewd) // probably a redundant check but for good measure addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "Your [E.enthrallGender] pushes you over the limit, overwhelming your body with pleasure."), 5) H.mob_climax(forced_climax=TRUE) H.SetStun(20) @@ -1168,7 +1167,7 @@ for(var/obj/item/W in items) if(W == H.wear_suit) H.dropItemToGround(W, TRUE) - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "Before you can even think about it, you quickly remove your clothes in response to [(H.client?.prefs.lewdchem?"your [E.enthrallGender]'s command'":"[E.master]'s directive'")]."), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "Before you can even think about it, you quickly remove your clothes in response to [(E.lewd?"your [E.enthrallGender]'s command'":"[E.master]'s directive'")]."), 5) E.cooldown += 10 //WALK @@ -1206,7 +1205,7 @@ if(2 to INFINITY) L.lay_down() E.cooldown += 10 - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[(L.client?.prefs.lewdchem?"You eagerly lie down!":"You suddenly lie down!")]"), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "[(E.lewd?"You eagerly lie down!":"You suddenly lie down!")]"), 5) to_chat(user, "You encourage [L] to lie down.") //KNOCKDOWN @@ -1237,7 +1236,7 @@ for (var/trigger in E.customTriggers) speaktrigger += "[trigger], " to_chat(user, "[C] whispers, \"[speaktrigger] are my triggers.\"")//So they don't trigger themselves! - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You whisper your triggers to [(C.client?.prefs.lewdchem?"Your [E.enthrallGender]":"[E.master]")]."), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "You whisper your triggers to [(E.lewd?"Your [E.enthrallGender]":"[E.master]")]."), 5) //CUSTOM TRIGGERS @@ -1249,7 +1248,7 @@ if (get_dist(user, H) > 1)//Requires user to be next to their pet. to_chat(user, "You need to be next to your pet to give them a new trigger!") continue - if(!H.client?.prefs.lewdchem) + if(!E.lewd) to_chat(user, "[H] seems incapable of being implanted with triggers.") continue else @@ -1272,7 +1271,7 @@ E.customTriggers[trigger] = trigger2 log_game("FERMICHEM: [H] has been implanted by [user] with [trigger], triggering [trigger2].") E.mental_capacity -= 5 - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "[(H.client?.prefs.lewdchem?"your [E.enthrallGender]":"[E.master]")] whispers you a new trigger."), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "[(E.lewd?"your [E.enthrallGender]":"[E.master]")] whispers you a new trigger."), 5) to_chat(user, "You sucessfully set the trigger word [trigger] in [H]") else to_chat(user, "Your pet looks at you confused, it seems they don't understand that effect!") @@ -1290,7 +1289,7 @@ if (get_dist(user, H) > 1)//Requires user to be next to their pet. to_chat(user, "You need to be next to your pet to give them a new echophrase!") continue - if(!H.client?.prefs.lewdchem) + if(!E.lewd) to_chat(user, "[H] seems incapable of being implanted with an echoing phrase.") continue else @@ -1334,7 +1333,7 @@ objective = replacetext(lowertext(objective), "suicide", "self-love") message_admins("[H] has been implanted by [user] with the objective [objective].") log_game("FERMICHEM: [H] has been implanted by [user] with the objective [objective] via MKUltra.") - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "[(H.client?.prefs.lewdchem?"Your [E.enthrallGender]":"[E.master]")] whispers you a new objective."), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "[(E.lewd?"Your [E.enthrallGender]":"[E.master]")] whispers you a new objective."), 5) brainwash(H, objective) E.mental_capacity -= 200 to_chat(user, "You sucessfully give an objective to [H]") @@ -1348,7 +1347,7 @@ for(var/V in listeners) var/mob/living/carbon/human/H = V var/datum/status_effect/chem/enthrall/E = H.has_status_effect(/datum/status_effect/chem/enthrall) - if(E.phase >= 3 && H.client?.prefs.lewdchem) + if(E.phase >= 3 && E.lewd) var/instill = stripped_input(user, "Instill an emotion in [H].", MAX_MESSAGE_LEN) to_chat(H, "[instill]") to_chat(user, "You sucessfully instill a feeling in [H]") @@ -1363,7 +1362,7 @@ if(E.phase > 1) if(user.ckey == E.enthrallID && user.real_name == E.master.real_name) E.master = user - addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "[(H.client?.prefs.lewdchem?"You hear the words of your [E.enthrallGender] again!! They're back!!":"You recognise the voice of [E.master].")]"), 5) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "[(E.lewd?"You hear the words of your [E.enthrallGender] again!! They're back!!":"You recognise the voice of [E.master].")]"), 5) to_chat(user, "[H] looks at you with sparkling eyes, recognising you!") //I dunno how to do state objectives without them revealing they're an antag diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index cf663e353f..97fa6041a9 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -357,9 +357,9 @@ exclude_modes = list(/datum/game_mode/nuclear/clown_ops) /datum/uplink_item/dangerous/revolver - name = "Syndicate Revolver" - desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers." - item = /obj/item/gun/ballistic/revolver + name = "Syndicate Revolver Kit" + desc = "A sleek box containing a brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers, and an extra speedloader." + item = /obj/item/storage/box/syndie_kit/revolver cost = 13 surplus = 50 exclude_modes = list(/datum/game_mode/nuclear/clown_ops) @@ -641,7 +641,7 @@ cost = 2 /datum/uplink_item/stealthy_weapons/martialarts - name = "Martial Arts Scroll" + name = "Sleeping Carp Scroll" desc = "This scroll contains the secrets of an ancient martial arts technique. You will master unarmed combat, \ deflecting all ranged weapon fire, but you also refuse to use dishonorable ranged weaponry." item = /obj/item/book/granter/martial/carp @@ -649,6 +649,15 @@ surplus = 0 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) +/datum/uplink_item/stealthy_weapons/martialartstwo + name = "Rising Bass Scroll" + desc = "This scroll contains the secrets of an ancient martial arts technique. You will become proficient in fleeing situations, \ + and dodging all ranged weapon fire, but you will refuse to use dishonorable ranged weaponry." + item = /obj/item/book/granter/martial/bass + cost = 18 + surplus = 0 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) + /datum/uplink_item/stealthy_weapons/crossbow name = "Miniature Energy Crossbow" desc = "A short bow mounted across a tiller in miniature. Small enough to \ @@ -811,12 +820,11 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes /datum/uplink_item/ammo/revolver name = ".357 Speed Loader" - desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ + desc = "A speed loader that contains seven additional .357 Magnum rounds, and can be further reloaded with individual bullets; usable with the Syndicate revolver. \ For when you really need a lot of things dead." item = /obj/item/ammo_box/a357 cost = 3 exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - illegal_tech = FALSE /datum/uplink_item/ammo/revolver/ap name = ".357 Armor Piercing Speed Loader" @@ -1572,7 +1580,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector \ for rapid healing, a medical night vision HUD for quick identification of injured personnel, \ and other supplies helpful for a field medic." - item = /obj/item/storage/firstaid/tactical + item = /obj/item/storage/firstaid/tactical/nukeop cost = 4 include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) @@ -1586,10 +1594,17 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes /datum/uplink_item/device_tools/surgerybag_adv name = "Advanced Syndicate Surgery Duffel Bag" desc = "The Syndicate surgery duffel bag is a toolkit containing all advanced surgery tools, surgical drapes, \ - a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit." + a Syndicate brand MMI, a straitjacket, a muzzle, and an outdated, yet still useful Combat Medic Kit." item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv cost = 10 +/datum/uplink_item/device_tools/brainwash_disk + name = "Brainwashing Surgery Program" + desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \ + Insert into an Operating Console to enable the procedure." + item = /obj/item/disk/surgery/brainwashing + cost = 3 + /datum/uplink_item/device_tools/encryptionkey name = "Syndicate Encryption Key" desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels \ @@ -1757,14 +1772,6 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes cost = 12 restricted_roles = list("Research Director", "Scientist", "Roboticist") -/datum/uplink_item/role_restricted/brainwash_disk - name = "Brainwashing Surgery Program" - desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \ - Insert into an Operating Console to enable the procedure." - item = /obj/item/disk/surgery/brainwashing - restricted_roles = list("Medical Doctor", "Roboticist") - cost = 3 - /datum/uplink_item/role_restricted/clown_bomb name = "Clown Bomb" desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index a2a9c37cfd..1415604aff 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -21,7 +21,7 @@ /obj/vehicle/sealed/car/clowncar/auto_assign_occupant_flags(mob/M) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.mind && H.mind.assigned_role == "Clown") //Ensures only clowns can drive the car. (Including more at once) + if(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY)) //Ensures only clowns can drive the car. (Including more at once) add_control_flags(M, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_PERMISSION) return add_control_flags(M, VEHICLE_CONTROL_KIDNAPPED) diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 626abd51ef..6144f4c57a 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -70,14 +70,22 @@ /obj/item/clothing/under/skirt/red = 3, /obj/item/clothing/under/skirt/purple = 3, /obj/item/clothing/under/sundress = 4, + /obj/item/clothing/under/sundresswhite = 4, /obj/item/clothing/under/stripeddress = 3, /obj/item/clothing/under/sailordress = 3, + /obj/item/clothing/under/sweptskirt = 3, + /obj/item/clothing/under/greendress = 3, + /obj/item/clothing/under/pinkdress = 3, /obj/item/clothing/under/redeveninggown = 3, /obj/item/clothing/under/blacktango = 3, + /obj/item/clothing/under/westernbustle = 3, + /obj/item/clothing/under/flamenco = 3, + /obj/item/clothing/under/flowerdress = 3, /obj/item/clothing/under/plaid_skirt = 3, /obj/item/clothing/under/plaid_skirt/blue = 3, /obj/item/clothing/under/plaid_skirt/purple = 3, /obj/item/clothing/under/plaid_skirt/green = 3, + /obj/item/clothing/under/croptop = 3, /obj/item/clothing/glasses/regular = 2, /obj/item/clothing/glasses/regular/jamjar = 2, /obj/item/clothing/head/sombrero = 3, diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index a242d88be4..502a25ba4e 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -17,7 +17,8 @@ /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6) premium = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1, /obj/item/reagent_containers/food/drinks/soda_cans/air = 1, - /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1) + /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1, + /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy = 1) refill_canister = /obj/item/vending_refill/cola /obj/item/vending_refill/cola @@ -82,3 +83,22 @@ /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 10) product_slogans = "~Shake me up some of that Shambler's Juice!~" product_ads = "Refreshing!;Jyrbv dv lg jfdv fw kyrk Jyrdscvi'j Alztv!;Over 1 trillion souls drank!;Thirsty? Nyp efk uizeb kyv uribevjj?;Kyv Jyrdscvi uizebj kyv ezxyk!;Drink up!;Krjkp." + +/obj/machinery/vending/cola/buzz_fuzz + name = "\improper Buzz Fuzz Vendor" + desc = "~A hive of Flavour!~" + icon_state = "honey_vender" + products = list(/obj/item/reagent_containers/food/drinks/soda_cans/cola = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/starkist = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/space_up = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 5, + /obj/item/reagent_containers/food/drinks/soda_cans/buzz_fuzz = 5,) + contraband = list(/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6) + premium = list(/obj/item/reagent_containers/food/drinks/beer/light = 1, + /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1) + product_slogans = "~A hive of Flavour!~" + product_ads = "Stinging flavour!;Ideal of the worker drone!;Buzz Buzz!;Got Honey?;The Queen approves of this drink!;Sap back that missing energy!;Bee the consumer unit!" diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm index 5c092c3659..03241c4a86 100644 --- a/code/modules/vending/megaseed.dm +++ b/code/modules/vending/megaseed.dm @@ -14,6 +14,7 @@ /obj/item/seeds/chanter = 3, /obj/item/seeds/chili = 3, /obj/item/seeds/cocoapod = 3, + /obj/item/seeds/coconut = 3, /obj/item/seeds/coffee = 3, /obj/item/seeds/cotton = 3, /obj/item/seeds/corn = 3, diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index d65a507f96..894aecc600 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -135,7 +135,6 @@ /obj/item/clothing/gloves/fingerless = 3, /obj/item/clothing/head/soft/black = 3, /obj/item/clothing/mask/bandana/skull = 2) - premium = list(/obj/item/radio/headset/headset_rob = 2) //Cit change contraband = list(/obj/item/clothing/suit/hooded/techpriest = 2) refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe diff --git a/config/dynamic_config.txt b/config/dynamic_config.txt index 18c0d7827d..2ddebdf37a 100644 --- a/config/dynamic_config.txt +++ b/config/dynamic_config.txt @@ -40,6 +40,7 @@ DYNAMIC_WEIGHT WIZARD 1 DYNAMIC_WEIGHT CULT 3 DYNAMIC_WEIGHT NUCLEAR 3 DYNAMIC_WEIGHT REVOLUTION 2 +DYNAMIC_WEIGHT BLOODSUCKER 4 # All below are impossible-by-default DYNAMIC_WEIGHT EXTENDED 3 DYNAMIC_WEIGHT CLOCKWORK_CULT 3 @@ -49,18 +50,20 @@ DYNAMIC_WEIGHT MONKEY 3 DYNAMIC_WEIGHT METEOR 3 ## Midround antags -DYNAMIC_WEIGHT MIDROUND_TRAITOR 7 -DYNAMIC_WEIGHT MIDROUND_MALF_AI 8 -DYNAMIC_WEIGHT MIDROUND_WIZARD 9 -DYNAMIC_WEIGHT MIDROUND_NUCLEAR 9 -DYNAMIC_WEIGHT BLOB 8 -DYNAMIC_WEIGHT XENOS 8 -DYNAMIC_WEIGHT NIGHTMARE 8 -DYNAMIC_WEIGHT SENTIENT_DISEASE 6 -DYNAMIC_WEIGHT REVENANT 6 -DYNAMIC_WEIGHT SLAUGHTER_DEMON 4 -DYNAMIC_WEIGHT ABDUCTORS 8 -DYNAMIC_WEIGHT SPACE_NINJA 8 +DYNAMIC_WEIGHT MIDROUND_TRAITOR 9 +DYNAMIC_WEIGHT MIDROUND_MALF_AI 5 +DYNAMIC_WEIGHT MIDROUND_WIZARD 4 +DYNAMIC_WEIGHT MIDROUND_NUCLEAR 2 +DYNAMIC_WEIGHT BLOB 2 +DYNAMIC_WEIGHT XENOS 2 +DYNAMIC_WEIGHT NIGHTMARE 3 +DYNAMIC_WEIGHT SENTIENT_DISEASE 4 +DYNAMIC_WEIGHT REVENANT 2 +DYNAMIC_WEIGHT SLAUGHTER_DEMON 1 +DYNAMIC_WEIGHT ABDUCTORS 3 +DYNAMIC_WEIGHT SPACE_NINJA 3 + +## Events DYNAMIC_WEIGHT SPIDERS 5 DYNAMIC_WEIGHT VENTCLOG_NORMAL 3 DYNAMIC_WEIGHT VENTCLOG_THREATENING 3 @@ -88,6 +91,7 @@ DYNAMIC_WEIGHT RADIATION_STORM 1 ## Latejoin antags DYNAMIC_WEIGHT LATEJOIN_TRAITOR 7 DYNAMIC_WEIGHT LATEJOIN_REVOLUTION 2 +DYNAMIC_WEIGHT LATEJOIN_BLOODSUCKER 4 ## Threat cost. This is decreased from the mode's threat when the rule is executed. DYNAMIC_COST TRAITOR 10 @@ -98,7 +102,7 @@ DYNAMIC_COST WIZARD 30 DYNAMIC_COST CULT 35 DYNAMIC_COST NUCLEAR 45 DYNAMIC_COST REVOLUTION 40 -# All below are impossible-by-default +DYNAMIC_cOST BLOODSUCKER 15 DYNAMIC_COST EXTENDED 0 DYNAMIC_COST CLOCKWORK_CULT 35 DYNAMIC_COST CLOWNOPS 40 @@ -112,13 +116,15 @@ DYNAMIC_COST MIDROUND_MALF_AI 35 DYNAMIC_COST MIDROUND_WIZARD 20 DYNAMIC_COST MIDROUND_NUCLEAR 35 DYNAMIC_COST BLOB 10 -DYNAMIC_COST XENOS 10 +DYNAMIC_COST XENOS 20 DYNAMIC_COST NIGHTMARE 10 DYNAMIC_COST SENTIENT_DISEASE 5 DYNAMIC_COST REVENANT 5 DYNAMIC_COST SLAUGHTER_DEMON 15 DYNAMIC_COST ABDUCTORS 10 DYNAMIC_COST SPACE_NINJA 15 + +## Events DYNAMIC_COST SPIDERS 10 DYNAMIC_COST VENTCLOG_NORMAL 2 DYNAMIC_COST VENTCLOG_THREATENING 5 @@ -146,6 +152,7 @@ DYNAMIC_COST RADIATION_STORM 3 ## Latejoin antags DYNAMIC_COST LATEJOIN_TRAITOR 5 DYNAMIC_COST LATEJOIN_REVOLUTION 20 +DYNAMIC_COST LATEJOIN_BLOODSUCKER 10 ## Rule will not be generated with threat levels below requirement at a pop value. Pop values are determined by dynamic's pop-per-requirement. ## By default it's 0-8, 9-17, 18-26, 27-35, 36-44, 45-53, 54-60, 61-69, 70-78, 79+. @@ -153,13 +160,12 @@ DYNAMIC_COST LATEJOIN_REVOLUTION 20 DYNAMIC_REQUIREMENTS TRAITOR 50 50 50 50 50 50 50 50 50 50 DYNAMIC_REQUIREMENTS TRAITORBRO 101 101 101 101 101 101 101 101 101 101 DYNAMIC_REQUIREMENTS CHANGELING 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS WIZARD 101 101 101 60 50 50 50 50 50 50 +DYNAMIC_REQUIREMENTS WIZARD 101 101 60 60 50 50 50 50 50 50 DYNAMIC_REQUIREMENTS CULT 101 101 101 60 50 50 50 50 50 50 DYNAMIC_REQUIREMENTS NUCLEAR 101 101 101 60 50 50 50 50 50 50 DYNAMIC_REQUIREMENTS REVOLUTION 101 101 101 60 50 50 50 50 50 50 -# All below are impossible-by-default DYNAMIC_REQUIREMENTS EXTENDED 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS CLOCKWORK_CULT 101 101 101 80 70 60 50 50 50 50 +DYNAMIC_REQUIREMENTS CLOCKWORK_CULT 101 101 101 70 60 60 50 50 50 50 DYNAMIC_REQUIREMENTS CLOWNOPS 101 101 101 101 101 101 101 101 101 101 DYNAMIC_REQUIREMENTS DEVIL 101 101 101 101 101 101 101 101 101 101 DYNAMIC_REQUIREMENTS MONKEY 101 101 101 101 101 101 101 101 101 101 @@ -168,24 +174,22 @@ DYNAMIC_REQUIREMENTS METEOR 101 101 101 101 101 101 101 101 101 101 ## Midround antags DYNAMIC_REQUIREMENTS MIDROUND_TRAITOR 30 25 20 15 15 15 15 15 15 15 DYNAMIC_REQUIREMENTS MIDROUND_MALF_AI 101 101 70 50 50 50 40 30 30 30 -DYNAMIC_REQUIREMENTS MIDROUND_WIZARD 90 90 70 50 50 50 50 40 30 30 +DYNAMIC_REQUIREMENTS MIDROUND_WIZARD 90 90 60 40 30 30 30 30 30 30 DYNAMIC_REQUIREMENTS MIDROUND_NUCLEAR 90 90 90 80 70 60 50 40 40 40 DYNAMIC_REQUIREMENTS BLOB 101 101 101 80 60 50 50 50 50 50 DYNAMIC_REQUIREMENTS XENOS 101 101 101 70 50 50 50 50 50 50 DYNAMIC_REQUIREMENTS NIGHTMARE 101 101 101 70 50 40 20 15 15 15 DYNAMIC_REQUIREMENTS SENTIENT_DISEASE 30 30 20 20 15 10 10 10 10 5 DYNAMIC_REQUIREMENTS REVENANT 30 30 30 30 20 15 15 15 15 15 -DYNAMIC_REQUIREMENTS SLAUGHTER_DEMON 101 101 101 90 80 70 60 50 40 30 +DYNAMIC_REQUIREMENTS SLAUGHTER_DEMON 101 101 101 90 80 70 60 50 50 50 DYNAMIC_REQUIREMENTS ABDUCTORS 80 80 70 50 40 30 30 20 15 15 DYNAMIC_REQUIREMENTS SPACE_NINJA 101 101 101 90 80 70 60 50 40 30 + +## Events DYNAMIC_REQUIREMENTS SPIDERS 70 60 50 50 40 40 40 30 20 15 -DYNAMIC_REQUIREMENTS VENTCLOG_NORMAL 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS VENTCLOG_THREATENING 15 15 15 15 15 15 15 15 15 15 -DYNAMIC_REQUIREMENTS VENTCLOG_CATASTROPHIC 30 30 30 30 30 30 30 30 30 30 +DYNAMIC_REQUIREMENTS VENTCLOG 5 5 5 5 5 5 5 5 5 5 DYNAMIC_REQUIREMENTS ION_STORM 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS METEOR_WAVE_NORMAL 60 50 40 30 30 30 30 30 30 30 -DYNAMIC_REQUIREMENTS METEOR_WAVE_THREATENING 80 70 60 50 40 40 40 40 40 40 -DYNAMIC_REQUIREMENTS METEOR_WAVE_CATASTROPHIC 101 100 90 80 70 60 50 50 50 50 +DYNAMIC_REQUIREMENTS METEOR_WAVE 60 50 40 30 30 30 30 30 30 30 DYNAMIC_REQUIREMENTS PIRATES 70 60 50 50 40 40 40 30 20 15 DYNAMIC_REQUIREMENTS ANOMALY_BLUESPACE 5 5 5 5 5 5 5 5 5 5 DYNAMIC_REQUIREMENTS ANOMALY_FLUX 5 5 5 5 5 5 5 5 5 5 @@ -205,6 +209,7 @@ DYNAMIC_REQUIREMENTS RADIATION_STORM 5 5 5 5 5 5 5 5 5 5 ## Latejoin antags DYNAMIC_REQUIREMENTS LATEJOIN_TRAITOR 40 30 20 15 15 15 15 15 15 15 DYNAMIC_REQUIREMENTS LATEJOIN_REVOLUTION 101 101 70 40 40 40 40 40 40 40 +DYNAMIC_REQUIREMENTS LATEJOIN_BLOODSUCKER 40 30 20 15 15 15 15 15 15 15 ## An alternative, static requirement used instead when pop is over mode's high_pop_limit. DYNAMIC_HIGH_POPULATION_REQUIREMENT TRAITOR 50 @@ -236,14 +241,12 @@ DYNAMIC_HIGH_POPULATION_REQUIREMENT REVENANT 15 DYNAMIC_HIGH_POPULATION_REQUIREMENT SLAUGHTER_DEMON 30 DYNAMIC_HIGH_POPULATION_REQUIREMENT ABDUCTORS 15 DYNAMIC_HIGH_POPULATION_REQUIREMENT SPACE_NINJA 30 + +## Events DYNAMIC_HIGH_POPULATION_REQUIREMENT SPIDERS 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG_NORMAL 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG_THREATENING 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG_CATASTROPHIC 30 +DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG 5 DYNAMIC_HIGH_POPULATION_REQUIREMENT ION_STORM 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE_NORMAL 30 -DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE_THREATENING 40 -DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE_CATASTROPHIC 50 +DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE 30 DYNAMIC_HIGH_POPULATION_REQUIREMENT PIRATES 15 DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_BLUESPACE 5 DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_FLUX 5 @@ -263,6 +266,7 @@ DYNAMIC_HIGH_POPULATION_REQUIREMENT RADIATION_STORM 5 ## Latejoin antags DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_TRAITOR 15 DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_REVOLUTION 50 +DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_BLOODSUCKER 15 ## Dynamic traitor stuff diff --git a/config/game_options.txt b/config/game_options.txt index 3b031bb5b9..34c8ca48fd 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -574,3 +574,8 @@ MONKEYCAP 64 #Replaces standard extended/secret dichotomy with extended and calm/chaotic votes for dynamic. DYNAMIC_VOTING + +## Choose which Engine to start the round with, comment to remove an Engine from the rotation +BOX_RANDOM_ENGINE Engine SM +BOX_RANDOM_ENGINE Engine Tesla +BOX_RANDOM_ENGINE Engine Singulo \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 8eabba83df..21cade10d2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,328 @@ -->
    +

    30 December 2019

    +

    AnturK updated:

    +
      +
    • Fixed ranged syndicate mobs stormtrooper training.
    • +
    +

    Arturlang updated:

    +
      +
    • Adds Bloodsuckers, beware.
    • +
    +

    BlueWildrose updated:

    +
      +
    • Fixed stargazers being unable to link to themselves if mindshielded or if holding psionic shielding devices (tinfoil hats) when the species is set.
    • +
    • Fixes non-roundstart slimes being unable to wag their tail.
    • +
    +

    Commandersand updated:

    +
      +
    • added two words to clown filter
    • +
    • Added new things to loadouts, check em
    • +
    +

    DeltaFire15 updated:

    +
      +
    • Clock cult kindle no longer cares about oxygen damage
    • +
    • changed mecha internals access for some special mechs.
    • +
    • no more mech maintenance access for engineers.
    • +
    • All heads of staff can now message CC
    • +
    • Removes a magicnumber
    • +
    • Rebalanced cult vs cult stun effects to debuff instead of stun
    • +
    +

    Detective-Google updated:

    +
      +
    • short hair 80's is no longer jank
    • +
    +

    Fermis updated:

    +
      +
    • tweaked how super bases/acids work but limiting them
    • +
    +

    Fikou updated:

    +
      +
    • the windup toolbox now has some more "realistic" sounds
    • +
    • the windup toolbox now rumbles again
    • +
    +

    Ghommie updated:

    +
      +
    • Fixed hulks, sleeping carp users, pacifists and people with chunky fingers being able to unrestrictly use gun and pneumatic cannon circuit assemblies.
    • +
    • Fixed gun circuit assemblies being only usable by human mobs.
    • +
    • Doubled the locomotion circuit external cooldown, thus halving the movable assemblies' movespeed.
    • +
    • Made wooden cabinet/closets... actually made of wood.
    • +
    • Wooden cabinets are now deconstructable with a screwdriver.
    • +
    • Deconstruction of large crates and other closet subtypes deconstructable with tools other than the welder is no longer instant.
    • +
    • You shouldn't be able to target objects you can't see (excluding darkness) with the ARCD and RLD
    • +
    • The admin RCD is ranged too, just like the ARCD.
    • +
    • Fixed welding, thirteen loko, welding and wraith spectacles not blinding people as expected. Thank you all whomst reported this issue in the suggestions box channel instead of the github repository's issues section, very smart!
    • +
    • Fixed on_mob eyes overlays not updating properly in certain cases.
    • +
    • Fixed deconversion from bloodshot eyes blood cult resetting your eyes' color to pitch black instead of their previous color, more or less.
    • +
    • Spinfusor nerf: Upped the casing and ammo box size by one step, removed the projectile's dismemberment value (explosions can still rip a limb or two off), halved the ammo box capacity, reduced the spinfusor ammo supply pack contents from 32 to 8, removed the casing's ability to explode when thrown.
    • +
    • Fixes bubblegum's death not unlocking the arena shuttle buyment.
    • +
    • Fixed alien tech node not being unlockable with subtypes of the accepted items.
    • +
    • Fixed reactive armor onmob overlays not updating when toggled and reactive teleport armor still using forceMove() instead of do_teleport()
    • +
    • Fixed space hermit asteroid rocks unintendedly spawning airless asteroid turf when mined, save for the perimeter.
    • +
    • Fixes reviver implant having been a crapshot ever since soft-crit was introduced years ago.
    • +
    • Added a "convalescence" time (about 15 seconds) after the user is out of unconsciousbess/crit to ensure they are properly stabilized.
    • +
    • Added a 15 minutes hardcap for accumulated revive cooldown (equivalent to 150 points of brute or burn healed) above which the implant starts cooling down regardless of user's conditions.
    • +
    • Fixed AI core displays I may have broken with my coding extravaganza.
    • +
    • Blue, Amber and Red security alert sounds should be half as loud now.
    • +
    • Buffed clown ops by removing their clumsiness and adding a new trait to be used in place of several clown role checks.
    • +
    • Clown ops too also suffer from not holding or wearing clown shoes now.
    • +
    • Fixed a few holo barriers lacking transparency.
    • +
    • Fixed character setup preview bodyparts not displaying correctly most of times.
    • +
    • Fixed character appearance preview displaying the mannequin in job attire instead of undergarments.
    • +
    • Fixed raven's shuttle computer not being of the emergency shuttle type.
    • +
    • Blood bank generators can now be anchored and unanchored now.
    • +
    • Ghost mentors can now orbit around the target instead of setting their view to theirs'.
    • +
    • Fixes a ghostchat eavesdropping exploit concerning VR.
    • +
    • Fixes VR deaths being broadcasted in deadchat.
    • +
    • Fixed a few pill bottle issues with the ChemMaster.
    • +
    • Fixes a few negative quirks not being properly removed when deleted.
    • +
    • Phobia and mute quirks are no longer cheesed by brain surgery grade healing or medicines.
    • +
    • Fixed double-flavour (and bland custom) ice creams.
    • +
    • Fixed Pubbystation's wall Nanomeds being inconsistent with other stations'.
    • +
    • dextrous simplemobs can now swap action intent with 1, 2, 3, 4 now. Just like humies, ayys and monkys.
    • +
    • Stops humanoids whose skin_tone variable is set to "albino" from showing up as pale when examined should their species not use skintones anyway.
    • +
    • Removed the old (almost) unused roboticist encryption key and headset.
    • +
    • Fixed goose meat.
    • +
    • Fixed a little door assembly glass dupe exploit
    • +
    • Fixed AI holopad speech text being small and whispers that in multiple exclamation marks echo through multiple areas.
    • +
    • Removed literally atrocious polka dotted accessories. They were even more atrocious than the yellow horrible tie.
    • +
    +

    Ghommie (also porting PRs by AnturK and Arkatos) updated:

    +
      +
    • Fixed light eaters not burning out borg lamplights and flashes. fix Fixed light eater not affecting open turfs emitting lights such as light tiles and fairy grass.
    • +
    • Fixed an empty reference about light eater armblade disintegration after Heart of Darkness removal.
    • +
    +

    Ghommie, Skogol updated:

    +
      +
    • refactored altclick interaction to allow alt-click interactable objects to parent call without forcing the turf contents stat menu open.
    • +
    • Alt clicking will no longer show turf contents for items inside bags etc.
    • +
    • Alt clicking the source of your turf contents stat menu will now close said menu.
    • +
    +

    GrayRachnid updated:

    +
      +
    • fixes consistency
    • +
    +

    Hatterhat updated:

    +
      +
    • Regenerative nanites, a "chemical" used in the combat stimulant injector. Actually quite stimulating, and not bad in a pinch for a nuclear operative. Check the Combat Medic Kit!
    • +
    • The Combat Medic Kit now has an advanced health analyzer and medisprays instead of patches and a chloral syringe.
    • +
    • The Advanced Syndicate Surgery Duffelbag or whatever it was doesn't get the better injector, because nobody uses it and so nobody's bothered to update it.
    • +
    • .357 speedloaders can now be printed with the Advanced Illegal Ballistics node on the tech tree!
    • +
    • okay so i may have given the .357 an extra speedloader at the same cost but it comes in a box now
    • +
    +

    ItzGabby updated:

    +
      +
    • Fixed AltClick on polychromic collars so they actually work now.
    • +
    +

    KeRSedChaplain updated:

    +
      +
    • Extends the file "deltakalaxon.ogg" to a 38 second .ogg.
    • +
    +

    Linzolle updated:

    +
      +
    • neck slice. harm intent someone's head while they are unconscious or in a neck grab to make them bleed uncontrollably.
    • +
    • officer's sabre now properly makes the unsheating and resheating noise
    • +
    • fireman failure has a different message depending on the circumstance
    • +
    • Abductor chem dispenser, and added it to the abductor console.
    • +
    • "Superlingual matrix" to the abductor console. It's the abductor's tongue. Can be used to link it to your abductor communication channel and then implanted into a test subject.
    • +
    • Shrink ray and added it to the abductor console.
    • +
    • Shrink ray sound effect (its the fucking mega man death sound)
    • +
    • special jumpsuit for abductors
    • +
    • abductor jumpsuit, including digi version if a digitigrade person somehow manages to get their hands on it. sprites for the shrink ray and chem dispenser.
    • +
    • new glands to play with, including the all-access gland, the quantum gland, and the blood type randomiser.
    • +
    • split every gland into its own file instead of all being in one file
    • +
    • cosmic coat crafting recipe changed to coat + cosmic bedsheet
    • +
    +

    Mickyan, nemvar, RaveRadbury, AnturK, SpaceManiac updated:

    +
      +
    • Certain incompatible quirks can no longer be taken together.
    • +
    • If an admin sends a ghost back to the lobby, they can now choose a different set of quirks.
    • +
    • the quirk menu went through some minor formatting changes.
    • +
    • Podcloning now lets you keep your quirks.
    • +
    • Quirks have flavor text in medical records.
    • +
    • All quirk medical records refer to "Patient", removing a few instances of "Subject".
    • +
    • Quirks no longer apply to off-station roundstart antagonists.
    • +
    • Mood quirks are now only processed by the quirk holders
    • +
    +

    Narcissisko (ported by Hatterhat) updated:

    +
      +
    • Luxury Bar Capsule, at 10,000 points. Comes with no medical supplies, a bar, and a bunch of cigars. Ported from tgstation/tgstation#45547.
    • +
    +

    Nervere and subject217, Militaires, py01, nemvar updated:

    +
      +
    • The cook's CQC now only works when in the kitchen or the kitchen backroom.
    • +
    • corrected CQC help instructions
    • +
    • CQC and Sleeping Carp are properly logged.
    • +
    • CQC can passively grab targets when not on grab intent. Passive grabs do not count towards combos for CQC or Sleeping carp.
    • +
    • Martial Art and NOGUN cleanup.
    • +
    +

    PersianXerxes updated:

    +
      +
    • Removed night vision quirk
    • +
    +

    Putnam updated:

    +
      +
    • acute hepatic pharmacokinesis now works if you already have relevant genitals
    • +
    • Contamination is no longer an infinitely spreading deadly contagion causing mass panic
    • +
    • Dynamic rulesets have lower weight if a round recently featured them (except traitor).
    • +
    +

    Putnam3145 updated:

    +
      +
    • Buffed HE pipes by making them realistically radiate away heat.
    • +
    • Dynamic has a (totally unused for any relevant purpose) roundstart report now.
    • +
    • A whole bunch of dynamic data is now available for statbus
    • +
    • Dynamic from-ghost antags no longer double dip on threat refunds when the mode fails due to not enough applications.
    • +
    • whoops broke quirks
    • +
    • quirks work
    • +
    • New tab in preferences screen: "ERP preferences"
    • +
    • New opt-outs for individual effects of incubus draught, succubus milk
    • +
    • Acute hepatic pharmacokinesis has been removed, replaced with above
    • +
    • Renamed "Toggle Lewdchem" to "Toggle Lewd MKUltra", since that's what it actually means, and made it toggle the "hypno" setting (rename it again if more hypno mechanics are added).
    • +
    • Made MKUltra's lewd messages require both people involved to have hypno opted-in.
    • +
    • Buncha dynamic config tweaks
    • +
    • Ghost cafe spawns are actual ghost roles by the game's reckoning now
    • +
    • a runtime in radioactive contamination
    • +
    • Bomb armor now acts like other armor types.
    • +
    • Devastation-level explosions on armorless people no longer destroys everything in their bags.
    • +
    +

    Seris02 updated:

    +
      +
    • the clowns headset
    • +
    • distance checks
    • +
    • the sprites
    • +
    • added the runed and brass winter coats (cosmetic ratvarian/narsian)
    • +
    • how the narsian/ratvarian coats can be made
    • +
    • fixes some ghost roles from dying of stupid shit
    • +
    • pandoras attacking their owners
    • +
    • Added Rising Bass and the shifting scroll.
    • +
    • Changes the martial arts scroll in the uplink to "Sleeping Carp Scroll"
    • +
    +

    ShizCalev updated:

    +
      +
    • Fixed floodlights not turning off properly when they're underpowered.
    • +
    • Fixed emitters not changing icons properly when they're underpowered.
    • +
    +

    Sishen1542 updated:

    +
      +
    • Clicking a pack of seeds with a pen allows you to set the plant's name, description and the pack of seeds' description. Useful for differentiating genetically modified plants. These changes will persist through different generations of the plant.
    • +
    • Hydroponics trays update their name and description to reflect the plant inside them. They revert to default when emptied.
    • +
    +

    Toriate updated:

    +
      +
    • Polychromic shorts now have a digitigrade state
    • +
    +

    Trilbyspaceclone updated:

    +
      +
    • ports all the new donuts, burgars, and chicken stuff from RG
    • +
    • ports new snowcone
    • +
    • ports grill
    • +
    • ports beakfeast tag/mood lit as TG has it
    • +
    • ports all the amazing new sprites
    • +
    • ports crafting for many things like snowcones needing water
    • +
    • ports of many craftings
    • +
    • lowers fryers sound
    • +
    • ported icons for new food/grill
    • +
    • ports the deletion of some icons and images
    • +
    • ports a spell check for the snowcones
    • +
    • ports fixes for stuff I didnt know were even broken with snowcones
    • +
    • coder cat failers to push the last commit from year(s) ago
    • +
    • Updates the changlogs
    • +
    • meat hook from HUGE to bulky
    • +
    • CE hardsuit is now more rad-proof
    • +
    • Wrong icon names, missing dog fashion with telegram hat
    • +
    • New softdrink that comes in its own vender!
    • +
    • Honey now has a reaction with plants
    • +
    • Buzz fuzz now only has a 5% to give honey and will now give 1u of sugar not 2
    • +
    • Blaster shotguns back into armory
    • +
    • Removed Lighters in thunderdomes
    • +
    • Silicons now know what a slime is saying!
    • +
    • honey now will not kill slimes. Honey slimepeople can be a thing now, go sci.
    • +
    • Added insulin into many of the borg hypo's
    • +
    +

    Useroth updated:

    +
      +
    • bamboo which can be used to build punji sticks/ blowguns available as a sugarcane mutation or in exotic seed crate
    • +
    • changed the sugar cane growth stages because fuck if I know why, but it was in the PR
    • +
    • New lavaland ruin: Pulsating tumor
    • +
    • New class of lavaland mobs, a bit weaker than megafauna but still stronger than most of what you normally see
    • +
    • Ghost cafe spawner. For letting people spawn as their own character in the ninja holding facility. It bypasses the usual check, so people who have suicided/ghosted/cryod may use it.
    • +
    • Dorms in the ninja holding facility.
    • +
    +

    Xantholne updated:

    +
      +
    • Santa Hats to Loadout and Clothesmate
    • +
    • Christmas Wintercoats to Loadout and Clothesmate
    • +
    • Christmas male and female uniforms to loadout and Clothesmate
    • +
    • Red, Green, and Traditional Santa boots to loadout and Clothesmate
    • +
    • Christmas Socks, Red candycane socks, Green candycane socks to sock selection
    • +
    +

    kappa-sama updated:

    +
      +
    • legion drops more crates now
    • +
    • .357 speedloaders in autolathes are now individual bullets instead, speedloaders are now illegal tech, costs less total metal to make 7 bullets than a previous speedloader. 7.62mm bullets in autolathe when hacked and costs more metal to make 5 7.62mm bullets than getting a clip from the seclathe.
    • +
    • mentions that you can refill speedloaders on .357 uplink description
    • +
    • you can now strip people while aggrograbbing or higher
    • +
    • plasmafist to wizard
    • +
    • modular is gone
    • +
    • martial apprentices for the local Chinese wizard
    • +
    • broodmother baby lag
    • +
    • you can no longer get 100k credits by spending 4k roundstart
    • +
    • cooking oil in sunflowers instead of corn oil
    • +
    • throats are no longer slit happy
    • +
    +

    keronshb updated:

    +
      +
    • Adds reflector blobs to shield blob upgrades
    • +
    +

    kevinz000 updated:

    +
      +
    • Launchpads can now take number inputs for offsets rather than just buttons.
    • +
    • nanites no longer spread through air blocking objects
    • +
    • Night vision readded as a darkness dampening effect rather than darksight.
    • +
    • conveyors can only stack items on tiles to 150 now.
    • +
    • added 8 character save slots
    • +
    • Cargo shuttle now silently ignores slaughter demons/revenants instead of being blocked even while they are jaunted. A drawback is that manifested ones can't block it either, any more.
    • +
    • flashbangs process light/sound separately and uses viewers(), so xray users beware.
    • +
    • Stat() slowed down for anti-lag measures.
    • +
    • sprint/stamina huds now work again
    • +
    • Combat defibs now instant stun on disarm rather than 1 second again
    • +
    • Defibs are now always emagged when emagged with an emag rather than EMP.
    • +
    • aooc toggling now only broadcasts to antagonists
    • +
    • Antag rep proc is now easier to read and supports returning a list.
    • +
    • Clockwork marauders are now on a configured summon cooldown if being summoned on station. They also rapidly bleed health while in or next to space. And they glow brighter.
    • +
    +

    lolman360 updated:

    +
      +
    • Added ability to pick up certain simplemobs.
    • +
    +

    nemvar updated:

    +
      +
    • The brains of roundstart borgs no longer decay.
    • +
    • Refactored the visibility of reagents for mobs.
    • +
    +

    nicbn, Kevinz000, ShizCalev updated:

    +
      +
    • Fire alarm is now simpler. Touch it to activate, touch it to deactivate. When activated, it will blink inconsistently if it is emagged.
    • +
    • You can no longer spam fire alarms. Also, they're logged again.
    • +
    • Fixed fire alarms not updating icons properly after being emagged and hacked by Malf AI's.
    • +
    +

    r4d6 updated:

    +
      +
    • Added a N2O pressure tank
    • +
    • Removed a AM Shielding from the crate
    • +
    • Added Handshakes
    • +
    • Added Nose booping
    • +
    • Added submaps for the SM, Tesla and Singulo
    • +
    • Added a placeholder on Boxstation for the Engines
    • +
    • fixed Nose boops not triggering
    • +
    +

    shellspeed1 updated:

    +
      +
    • Adds Insect markings
    • +
    • Adds three new moth wings.
    • +
    +

    07 December 2019

    AffectedArc07 updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f5e4fea7cb..db9c8e6d08 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -23656,3 +23656,327 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Supply ordered looms are unanchored. Bring a wrench. r4d6: - rscadd: Added Departements Winter Coats to the loadout list. +2019-12-30: + AnturK: + - bugfix: Fixed ranged syndicate mobs stormtrooper training. + Arturlang: + - rscadd: Adds Bloodsuckers, beware. + BlueWildrose: + - bugfix: Fixed stargazers being unable to link to themselves if mindshielded or + if holding psionic shielding devices (tinfoil hats) when the species is set. + - bugfix: Fixes non-roundstart slimes being unable to wag their tail. + Commandersand: + - tweak: added two words to clown filter + - rscadd: Added new things to loadouts, check em + DeltaFire15: + - balance: Clock cult kindle no longer cares about oxygen damage + - tweak: changed mecha internals access for some special mechs. + - tweak: no more mech maintenance access for engineers. + - tweak: All heads of staff can now message CC + - code_imp: Removes a magicnumber + - balance: Rebalanced cult vs cult stun effects to debuff instead of stun + Detective-Google: + - bugfix: short hair 80's is no longer jank + Fermis: + - tweak: tweaked how super bases/acids work but limiting them + Fikou: + - tweak: the windup toolbox now has some more "realistic" sounds + - bugfix: the windup toolbox now rumbles again + Ghommie: + - bugfix: Fixed hulks, sleeping carp users, pacifists and people with chunky fingers + being able to unrestrictly use gun and pneumatic cannon circuit assemblies. + - bugfix: Fixed gun circuit assemblies being only usable by human mobs. + - balance: Doubled the locomotion circuit external cooldown, thus halving the movable + assemblies' movespeed. + - tweak: Made wooden cabinet/closets... actually made of wood. + - tweak: Wooden cabinets are now deconstructable with a screwdriver. + - tweak: Deconstruction of large crates and other closet subtypes deconstructable + with tools other than the welder is no longer instant. + - tweak: You shouldn't be able to target objects you can't see (excluding darkness) + with the ARCD and RLD + - tweak: The admin RCD is ranged too, just like the ARCD. + - bugfix: Fixed welding, thirteen loko, welding and wraith spectacles not blinding + people as expected. Thank you all whomst reported this issue in the suggestions + box channel instead of the github repository's issues section, very smart! + - bugfix: Fixed on_mob eyes overlays not updating properly in certain cases. + - bugfix: Fixed deconversion from bloodshot eyes blood cult resetting your eyes' + color to pitch black instead of their previous color, more or less. + - balance: 'Spinfusor nerf: Upped the casing and ammo box size by one step, removed + the projectile''s dismemberment value (explosions can still rip a limb or two + off), halved the ammo box capacity, reduced the spinfusor ammo supply pack contents + from 32 to 8, removed the casing''s ability to explode when thrown.' + - bugfix: Fixes bubblegum's death not unlocking the arena shuttle buyment. + - bugfix: Fixed alien tech node not being unlockable with subtypes of the accepted + items. + - bugfix: Fixed reactive armor onmob overlays not updating when toggled and reactive + teleport armor still using forceMove() instead of do_teleport() + - bugfix: Fixed space hermit asteroid rocks unintendedly spawning airless asteroid + turf when mined, save for the perimeter. + - bugfix: Fixes reviver implant having been a crapshot ever since soft-crit was + introduced years ago. + - tweak: Added a "convalescence" time (about 15 seconds) after the user is out of + unconsciousbess/crit to ensure they are properly stabilized. + - tweak: Added a 15 minutes hardcap for accumulated revive cooldown (equivalent + to 150 points of brute or burn healed) above which the implant starts cooling + down regardless of user's conditions. + - bugfix: Fixed AI core displays I may have broken with my coding extravaganza. + - soundadd: Blue, Amber and Red security alert sounds should be half as loud now. + - balance: Buffed clown ops by removing their clumsiness and adding a new trait + to be used in place of several clown role checks. + - tweak: Clown ops too also suffer from not holding or wearing clown shoes now. + - bugfix: Fixed a few holo barriers lacking transparency. + - bugfix: Fixed character setup preview bodyparts not displaying correctly most + of times. + - bugfix: Fixed character appearance preview displaying the mannequin in job attire + instead of undergarments. + - bugfix: Fixed raven's shuttle computer not being of the emergency shuttle type. + - tweak: Blood bank generators can now be anchored and unanchored now. + - admin: Ghost mentors can now orbit around the target instead of setting their + view to theirs'. + - bugfix: Fixes a ghostchat eavesdropping exploit concerning VR. + - bugfix: Fixes VR deaths being broadcasted in deadchat. + - bugfix: Fixed a few pill bottle issues with the ChemMaster. + - bugfix: Fixes a few negative quirks not being properly removed when deleted. + - tweak: Phobia and mute quirks are no longer cheesed by brain surgery grade healing + or medicines. + - bugfix: Fixed double-flavour (and bland custom) ice creams. + - bugfix: Fixed Pubbystation's wall Nanomeds being inconsistent with other stations'. + - bugfix: dextrous simplemobs can now swap action intent with 1, 2, 3, 4 now. Just + like humies, ayys and monkys. + - bugfix: Stops humanoids whose skin_tone variable is set to "albino" from showing + up as pale when examined should their species not use skintones anyway. + - rscdel: Removed the old (almost) unused roboticist encryption key and headset. + - bugfix: Fixed goose meat. + - bugfix: Fixed a little door assembly glass dupe exploit + - bugfix: Fixed AI holopad speech text being small and whispers that in multiple + exclamation marks echo through multiple areas. + - rscdel: Removed literally atrocious polka dotted accessories. They were even more + atrocious than the yellow horrible tie. + Ghommie (also porting PRs by AnturK and Arkatos): + - bugfix: Fixed light eaters not burning out borg lamplights and flashes. fix Fixed + light eater not affecting open turfs emitting lights such as light tiles and + fairy grass. + - bugfix: Fixed an empty reference about light eater armblade disintegration after + Heart of Darkness removal. + Ghommie, Skogol: + - refactor: refactored altclick interaction to allow alt-click interactable objects + to parent call without forcing the turf contents stat menu open. + - tweak: Alt clicking will no longer show turf contents for items inside bags etc. + - tweak: Alt clicking the source of your turf contents stat menu will now close + said menu. + GrayRachnid: + - bugfix: fixes consistency + Hatterhat: + - rscadd: Regenerative nanites, a "chemical" used in the combat stimulant injector. + Actually quite stimulating, and not bad in a pinch for a nuclear operative. + Check the Combat Medic Kit! + - tweak: The Combat Medic Kit now has an advanced health analyzer and medisprays + instead of patches and a chloral syringe. + - balance: The Advanced Syndicate Surgery Duffelbag or whatever it was doesn't get + the better injector, because nobody uses it and so nobody's bothered to update + it. + - rscadd: .357 speedloaders can now be printed with the Advanced Illegal Ballistics + node on the tech tree! + - balance: okay so i may have given the .357 an extra speedloader at the same cost + but it comes in a box now + ItzGabby: + - bugfix: Fixed AltClick on polychromic collars so they actually work now. + KeRSedChaplain: + - soundadd: Extends the file "deltakalaxon.ogg" to a 38 second .ogg. + Linzolle: + - rscadd: neck slice. harm intent someone's head while they are unconscious or in + a neck grab to make them bleed uncontrollably. + - bugfix: officer's sabre now properly makes the unsheating and resheating noise + - bugfix: fireman failure has a different message depending on the circumstance + - rscadd: Abductor chem dispenser, and added it to the abductor console. + - rscadd: '"Superlingual matrix" to the abductor console. It''s the abductor''s + tongue. Can be used to link it to your abductor communication channel and then + implanted into a test subject.' + - rscadd: Shrink ray and added it to the abductor console. + - soundadd: Shrink ray sound effect (its the fucking mega man death sound) + - rscadd: special jumpsuit for abductors + - imageadd: abductor jumpsuit, including digi version if a digitigrade person somehow + manages to get their hands on it. sprites for the shrink ray and chem dispenser. + - rscadd: new glands to play with, including the all-access gland, the quantum gland, + and the blood type randomiser. + - code_imp: split every gland into its own file instead of all being in one file + - tweak: cosmic coat crafting recipe changed to coat + cosmic bedsheet + Mickyan, nemvar, RaveRadbury, AnturK, SpaceManiac: + - bugfix: Certain incompatible quirks can no longer be taken together. + - bugfix: If an admin sends a ghost back to the lobby, they can now choose a different + set of quirks. + - spellcheck: the quirk menu went through some minor formatting changes. + - bugfix: Podcloning now lets you keep your quirks. + - rscadd: Quirks have flavor text in medical records. + - spellcheck: All quirk medical records refer to "Patient", removing a few instances + of "Subject". + - tweak: Quirks no longer apply to off-station roundstart antagonists. + - code_imp: Mood quirks are now only processed by the quirk holders + Narcissisko (ported by Hatterhat): + - rscadd: Luxury Bar Capsule, at 10,000 points. Comes with no medical supplies, + a bar, and a bunch of cigars. Ported from tgstation/tgstation#45547. + Nervere and subject217, Militaires, py01, nemvar: + - balance: The cook's CQC now only works when in the kitchen or the kitchen backroom. + - spellcheck: corrected CQC help instructions + - bugfix: CQC and Sleeping Carp are properly logged. + - tweak: CQC can passively grab targets when not on grab intent. Passive grabs do + not count towards combos for CQC or Sleeping carp. + - code_imp: Martial Art and NOGUN cleanup. + PersianXerxes: + - rscdel: Removed night vision quirk + Putnam: + - bugfix: acute hepatic pharmacokinesis now works if you already have relevant genitals + - balance: Contamination is no longer an infinitely spreading deadly contagion causing + mass panic + - tweak: Dynamic rulesets have lower weight if a round recently featured them (except + traitor). + Putnam3145: + - balance: Buffed HE pipes by making them realistically radiate away heat. + - bugfix: Dynamic has a (totally unused for any relevant purpose) roundstart report + now. + - admin: A whole bunch of dynamic data is now available for statbus + - bugfix: Dynamic from-ghost antags no longer double dip on threat refunds when + the mode fails due to not enough applications. + - bugfix: whoops broke quirks + - bugfix: quirks work + - rscadd: 'New tab in preferences screen: "ERP preferences"' + - rscadd: New opt-outs for individual effects of incubus draught, succubus milk + - rscdel: Acute hepatic pharmacokinesis has been removed, replaced with above + - tweak: Renamed "Toggle Lewdchem" to "Toggle Lewd MKUltra", since that's what it + actually means, and made it toggle the "hypno" setting (rename it again if more + hypno mechanics are added). + - tweak: Made MKUltra's lewd messages require both people involved to have hypno + opted-in. + - config: Buncha dynamic config tweaks + - bugfix: Ghost cafe spawns are actual ghost roles by the game's reckoning now + - bugfix: a runtime in radioactive contamination + - balance: Bomb armor now acts like other armor types. + - balance: Devastation-level explosions on armorless people no longer destroys everything + in their bags. + Seris02: + - rscadd: the clowns headset + - bugfix: distance checks + - bugfix: the sprites + - rscadd: added the runed and brass winter coats (cosmetic ratvarian/narsian) + - tweak: how the narsian/ratvarian coats can be made + - bugfix: fixes some ghost roles from dying of stupid shit + - bugfix: pandoras attacking their owners + - rscadd: Added Rising Bass and the shifting scroll. + - tweak: Changes the martial arts scroll in the uplink to "Sleeping Carp Scroll" + ShizCalev: + - bugfix: Fixed floodlights not turning off properly when they're underpowered. + - bugfix: Fixed emitters not changing icons properly when they're underpowered. + Sishen1542: + - rscadd: Clicking a pack of seeds with a pen allows you to set the plant's name, + description and the pack of seeds' description. Useful for differentiating genetically + modified plants. These changes will persist through different generations of + the plant. + - rscadd: Hydroponics trays update their name and description to reflect the plant + inside them. They revert to default when emptied. + Toriate: + - rscadd: Polychromic shorts now have a digitigrade state + Trilbyspaceclone: + - rscadd: ports all the new donuts, burgars, and chicken stuff from RG + - rscadd: ports new snowcone + - rscadd: ports grill + - rscadd: ports beakfeast tag/mood lit as TG has it + - rscadd: ports all the amazing new sprites + - tweak: ports crafting for many things like snowcones needing water + - balance: ports of many craftings + - soundadd: lowers fryers sound + - imageadd: ported icons for new food/grill + - imagedel: ports the deletion of some icons and images + - spellcheck: ports a spell check for the snowcones + - code_imp: ports fixes for stuff I didnt know were even broken with snowcones + - bugfix: coder cat failers to push the last commit from year(s) ago + - admin: Updates the changlogs + - tweak: meat hook from HUGE to bulky + - tweak: CE hardsuit is now more rad-proof + - bugfix: Wrong icon names, missing dog fashion with telegram hat + - rscadd: New softdrink that comes in its own vender! + - rscadd: Honey now has a reaction with plants + - tweak: Buzz fuzz now only has a 5% to give honey and will now give 1u of sugar + not 2 + - rscadd: Blaster shotguns back into armory + - rscdel: Removed Lighters in thunderdomes + - rscadd: Silicons now know what a slime is saying! + - balance: honey now will not kill slimes. Honey slimepeople can be a thing now, + go sci. + - rscadd: Added insulin into many of the borg hypo's + Useroth: + - rscadd: bamboo which can be used to build punji sticks/ blowguns available as + a sugarcane mutation or in exotic seed crate + - tweak: changed the sugar cane growth stages because fuck if I know why, but it + was in the PR + - rscadd: 'New lavaland ruin: Pulsating tumor' + - rscadd: New class of lavaland mobs, a bit weaker than megafauna but still stronger + than most of what you normally see + - rscadd: Ghost cafe spawner. For letting people spawn as their own character in + the ninja holding facility. It bypasses the usual check, so people who have + suicided/ghosted/cryod may use it. + - rscadd: Dorms in the ninja holding facility. + Xantholne: + - rscadd: Santa Hats to Loadout and Clothesmate + - rscadd: Christmas Wintercoats to Loadout and Clothesmate + - rscadd: Christmas male and female uniforms to loadout and Clothesmate + - rscadd: Red, Green, and Traditional Santa boots to loadout and Clothesmate + - rscadd: Christmas Socks, Red candycane socks, Green candycane socks to sock selection + kappa-sama: + - balance: legion drops more crates now + - balance: .357 speedloaders in autolathes are now individual bullets instead, speedloaders + are now illegal tech, costs less total metal to make 7 bullets than a previous + speedloader. 7.62mm bullets in autolathe when hacked and costs more metal to + make 5 7.62mm bullets than getting a clip from the seclathe. + - tweak: mentions that you can refill speedloaders on .357 uplink description + - bugfix: you can now strip people while aggrograbbing or higher + - rscadd: plasmafist to wizard + - code_imp: modular is gone + - rscadd: martial apprentices for the local Chinese wizard + - bugfix: broodmother baby lag + - balance: you can no longer get 100k credits by spending 4k roundstart + - balance: cooking oil in sunflowers instead of corn oil + - bugfix: throats are no longer slit happy + keronshb: + - rscadd: Adds reflector blobs to shield blob upgrades + kevinz000: + - rscadd: Launchpads can now take number inputs for offsets rather than just buttons. + - balance: nanites no longer spread through air blocking objects + - rscadd: Night vision readded as a darkness dampening effect rather than darksight. + - rscdel: conveyors can only stack items on tiles to 150 now. + - rscadd: added 8 character save slots + - rscadd: Cargo shuttle now silently ignores slaughter demons/revenants instead + of being blocked even while they are jaunted. A drawback is that manifested + ones can't block it either, any more. + - balance: flashbangs process light/sound separately and uses viewers(), so xray + users beware. + - tweak: Stat() slowed down for anti-lag measures. + - bugfix: sprint/stamina huds now work again + - balance: Combat defibs now instant stun on disarm rather than 1 second again + - balance: Defibs are now always emagged when emagged with an emag rather than EMP. + - bugfix: aooc toggling now only broadcasts to antagonists + - code_imp: Antag rep proc is now easier to read and supports returning a list. + - balance: Clockwork marauders are now on a configured summon cooldown if being + summoned on station. They also rapidly bleed health while in or next to space. + And they glow brighter. + lolman360: + - rscadd: Added ability to pick up certain simplemobs. + nemvar: + - bugfix: The brains of roundstart borgs no longer decay. + - code_imp: Refactored the visibility of reagents for mobs. + nicbn, Kevinz000, ShizCalev: + - tweak: Fire alarm is now simpler. Touch it to activate, touch it to deactivate. + When activated, it will blink inconsistently if it is emagged. + - bugfix: You can no longer spam fire alarms. Also, they're logged again. + - bugfix: Fixed fire alarms not updating icons properly after being emagged and + hacked by Malf AI's. + r4d6: + - rscadd: Added a N2O pressure tank + - rscdel: Removed a AM Shielding from the crate + - rscadd: Added Handshakes + - rscadd: Added Nose booping + - rscadd: Added submaps for the SM, Tesla and Singulo + - rscadd: Added a placeholder on Boxstation for the Engines + - bugfix: fixed Nose boops not triggering + shellspeed1: + - rscadd: Adds Insect markings + - rscadd: Adds three new moth wings. diff --git a/html/changelogs/AutoChangeLog-pr-10026.yml b/html/changelogs/AutoChangeLog-pr-10026.yml deleted file mode 100644 index 6e8062874b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10026.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Linzolle" -delete-after: True -changes: - - rscadd: "neck slice. harm intent someone's head while they are unconscious or in a neck grab to make them bleed uncontrollably." diff --git a/html/changelogs/AutoChangeLog-pr-10037.yml b/html/changelogs/AutoChangeLog-pr-10037.yml deleted file mode 100644 index b0f0501516..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10037.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed hulks, sleeping carp users, pacifists and people with chunky fingers being able to unrestrictly use gun and pneumatic cannon circuit assemblies." - - bugfix: "Fixed gun circuit assemblies being only usable by human mobs." - - balance: "Doubled the locomotion circuit external cooldown, thus halving the movable assemblies' movespeed." diff --git a/html/changelogs/AutoChangeLog-pr-10044.yml b/html/changelogs/AutoChangeLog-pr-10044.yml deleted file mode 100644 index 8d1782c3a8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10044.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - tweak: "Made wooden cabinet/closets... actually made of wood." - - tweak: "Wooden cabinets are now deconstructable with a screwdriver." - - tweak: "Deconstruction of large crates and other closet subtypes deconstructable with tools other than the welder is no longer instant." diff --git a/html/changelogs/AutoChangeLog-pr-10050.yml b/html/changelogs/AutoChangeLog-pr-10050.yml deleted file mode 100644 index c736ded339..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10050.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - tweak: "You shouldn't be able to target objects you can't see (excluding darkness) with the ARCD and RLD" - - tweak: "The admin RCD is ranged too, just like the ARCD." diff --git a/html/changelogs/AutoChangeLog-pr-10053.yml b/html/changelogs/AutoChangeLog-pr-10053.yml deleted file mode 100644 index 36d392d8f8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10053.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed welding, thirteen loko, welding and wraith spectacles not blinding people as expected. Thank you all whomst reported this issue in the suggestions box channel instead of the github repository's issues section, very smart!" diff --git a/html/changelogs/AutoChangeLog-pr-10057.yml b/html/changelogs/AutoChangeLog-pr-10057.yml deleted file mode 100644 index be285bfc57..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10057.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed on_mob eyes overlays not updating properly in certain cases." - - bugfix: "Fixed deconversion from bloodshot eyes blood cult resetting your eyes' color to pitch black instead of their previous color, more or less." diff --git a/html/changelogs/AutoChangeLog-pr-10068.yml b/html/changelogs/AutoChangeLog-pr-10068.yml deleted file mode 100644 index 39b2c37c28..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10068.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Fikou" -delete-after: True -changes: - - tweak: "the windup toolbox now has some more \"realistic\" sounds" - - bugfix: "the windup toolbox now rumbles again" diff --git a/html/changelogs/AutoChangeLog-pr-10071.yml b/html/changelogs/AutoChangeLog-pr-10071.yml deleted file mode 100644 index 3632bdfa86..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10071.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixes bubblegum's death not unlocking the arena shuttle buyment." diff --git a/html/changelogs/AutoChangeLog-pr-10072.yml b/html/changelogs/AutoChangeLog-pr-10072.yml deleted file mode 100644 index 9a6f45e61e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10072.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Useroth" -delete-after: True -changes: - - rscadd: "bamboo which can be used to build punji sticks/ blowguns available as a sugarcane mutation or in exotic seed crate" - - tweak: "changed the sugar cane growth stages because fuck if I know why, but it was in the PR" diff --git a/html/changelogs/AutoChangeLog-pr-10076.yml b/html/changelogs/AutoChangeLog-pr-10076.yml deleted file mode 100644 index 0e04ceddbc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10076.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed alien tech node not being unlockable with subtypes of the accepted items." diff --git a/html/changelogs/AutoChangeLog-pr-10082.yml b/html/changelogs/AutoChangeLog-pr-10082.yml deleted file mode 100644 index e5c669f798..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10082.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - rscadd: "Launchpads can now take number inputs for offsets rather than just buttons." diff --git a/html/changelogs/AutoChangeLog-pr-10083.yml b/html/changelogs/AutoChangeLog-pr-10083.yml deleted file mode 100644 index c60c3fea36..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10083.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed space hermit asteroid rocks unintendedly spawning airless asteroid turf when mined, save for the perimeter." diff --git a/html/changelogs/AutoChangeLog-pr-10085.yml b/html/changelogs/AutoChangeLog-pr-10085.yml deleted file mode 100644 index a82f052fed..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10085.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixes reviver implant having been a crapshot ever since soft-crit was introduced years ago." - - tweak: "Added a \"convalescence\" time (about 15 seconds) after the user is out of unconsciousbess/crit to ensure they are properly stabilized." - - tweak: "Added a 15 minutes hardcap for accumulated revive cooldown (equivalent to 150 points of brute or burn healed) above which the implant starts cooling down regardless of user's conditions." diff --git a/html/changelogs/AutoChangeLog-pr-10086.yml b/html/changelogs/AutoChangeLog-pr-10086.yml deleted file mode 100644 index 08dff8ee5c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10086.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed AI core displays I may have broken with my coding extravaganza." diff --git a/html/changelogs/AutoChangeLog-pr-10094.yml b/html/changelogs/AutoChangeLog-pr-10094.yml deleted file mode 100644 index ee9513489d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10094.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Trilbyspaceclone" -delete-after: True -changes: - - bugfix: "coder cat failers to push the last commit from year(s) ago" diff --git a/html/changelogs/AutoChangeLog-pr-10099.yml b/html/changelogs/AutoChangeLog-pr-10099.yml deleted file mode 100644 index 9ad4bfdfc2..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10099.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed a few holo barriers lacking transparency." diff --git a/html/changelogs/AutoChangeLog-pr-10108.yml b/html/changelogs/AutoChangeLog-pr-10108.yml deleted file mode 100644 index 67c6396763..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10108.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DeltaFire15" -delete-after: True -changes: - - balance: "Clock cult kindle no longer cares about oxygen damage" diff --git a/html/changelogs/AutoChangeLog-pr-10111.yml b/html/changelogs/AutoChangeLog-pr-10111.yml deleted file mode 100644 index 0a80f01eef..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10111.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kappa-sama" -delete-after: True -changes: - - bugfix: "you can now strip people while aggrograbbing or higher" diff --git a/html/changelogs/AutoChangeLog-pr-10114.yml b/html/changelogs/AutoChangeLog-pr-10114.yml deleted file mode 100644 index f413760ff9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10114.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "r4d6" -delete-after: True -changes: - - rscadd: "Added a N2O pressure tank" diff --git a/html/changelogs/AutoChangeLog-pr-10115.yml b/html/changelogs/AutoChangeLog-pr-10115.yml deleted file mode 100644 index f7a60e4911..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10115.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Useroth" -delete-after: True -changes: - - rscadd: "New lavaland ruin: Pulsating tumor" - - rscadd: "New class of lavaland mobs, a bit weaker than megafauna but still stronger than most of what you normally see" diff --git a/html/changelogs/AutoChangeLog-pr-10116.yml b/html/changelogs/AutoChangeLog-pr-10116.yml deleted file mode 100644 index 70c1b4590d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10116.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam" -delete-after: True -changes: - - bugfix: "acute hepatic pharmacokinesis now works if you already have relevant genitals" diff --git a/html/changelogs/AutoChangeLog-pr-10122.yml b/html/changelogs/AutoChangeLog-pr-10122.yml deleted file mode 100644 index 4d503dc2be..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10122.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - rscdel: "conveyors can only stack items on tiles to 150 now." diff --git a/html/changelogs/AutoChangeLog-pr-10123.yml b/html/changelogs/AutoChangeLog-pr-10123.yml new file mode 100644 index 0000000000..208b17b930 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10123.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "throwing things no longer makes them randomly turned as long as you aren't on harm intent" diff --git a/html/changelogs/AutoChangeLog-pr-10130.yml b/html/changelogs/AutoChangeLog-pr-10130.yml deleted file mode 100644 index 1f6ba6ac6a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10130.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kappa-sama" -delete-after: True -changes: - - code_imp: "modular is gone" diff --git a/html/changelogs/AutoChangeLog-pr-10137.yml b/html/changelogs/AutoChangeLog-pr-10137.yml deleted file mode 100644 index 63678d4425..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10137.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "KeRSedChaplain" -delete-after: True -changes: - - soundadd: "Extends the file \"deltakalaxon.ogg\" to a 38 second .ogg." diff --git a/html/changelogs/AutoChangeLog-pr-10140.yml b/html/changelogs/AutoChangeLog-pr-10140.yml deleted file mode 100644 index d5e33fa02d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10140.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - bugfix: "Dynamic has a (totally unused for any relevant purpose) roundstart report now." diff --git a/html/changelogs/AutoChangeLog-pr-10143.yml b/html/changelogs/AutoChangeLog-pr-10143.yml deleted file mode 100644 index 45dfe225c4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10143.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - bugfix: "Dynamic from-ghost antags no longer double dip on threat refunds when the mode fails due to not enough applications." diff --git a/html/changelogs/AutoChangeLog-pr-10144.yml b/html/changelogs/AutoChangeLog-pr-10144.yml deleted file mode 100644 index 6b175b149b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10144.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Linzolle" -delete-after: True -changes: - - bugfix: "officer's sabre now properly makes the unsheating and resheating noise" diff --git a/html/changelogs/AutoChangeLog-pr-10150.yml b/html/changelogs/AutoChangeLog-pr-10150.yml deleted file mode 100644 index d2a2b79ff0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10150.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Trilbyspaceclone" -delete-after: True -changes: - - bugfix: "Wrong icon names, missing dog fashion with telegram hat" diff --git a/html/changelogs/AutoChangeLog-pr-10153.yml b/html/changelogs/AutoChangeLog-pr-10153.yml deleted file mode 100644 index 7196583de9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10153.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Linzolle" -delete-after: True -changes: - - bugfix: "fireman failure has a different message depending on the circumstance" diff --git a/html/changelogs/AutoChangeLog-pr-10156.yml b/html/changelogs/AutoChangeLog-pr-10156.yml deleted file mode 100644 index ec08642b3f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10156.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed character setup preview bodyparts not displaying correctly most of times." - - bugfix: "Fixed character appearance preview displaying the mannequin in job attire instead of undergarments." diff --git a/html/changelogs/AutoChangeLog-pr-10157.yml b/html/changelogs/AutoChangeLog-pr-10157.yml deleted file mode 100644 index 6ec495b7fc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10157.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Fixed floodlights not turning off properly when they're underpowered." - - bugfix: "Fixed emitters not changing icons properly when they're underpowered." diff --git a/html/changelogs/AutoChangeLog-pr-10161.yml b/html/changelogs/AutoChangeLog-pr-10161.yml deleted file mode 100644 index 7f09609b99..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10161.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed raven's shuttle computer not being of the emergency shuttle type." diff --git a/html/changelogs/AutoChangeLog-pr-10163.yml b/html/changelogs/AutoChangeLog-pr-10163.yml deleted file mode 100644 index 2818019ad7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10163.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - tweak: "Blood bank generators can now be anchored and unanchored now." diff --git a/html/changelogs/AutoChangeLog-pr-10165.yml b/html/changelogs/AutoChangeLog-pr-10165.yml new file mode 100644 index 0000000000..be6f9dedf7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10165.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed missing digi versions fishnet sprites and wrong digitigrade left dir purple stockings sprite." + - imageadd: "Add digitigrade versions for boxers and the long johns." diff --git a/html/changelogs/AutoChangeLog-pr-10166.yml b/html/changelogs/AutoChangeLog-pr-10166.yml deleted file mode 100644 index ba919010af..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10166.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "nemvar" -delete-after: True -changes: - - bugfix: "The brains of roundstart borgs no longer decay." diff --git a/html/changelogs/AutoChangeLog-pr-10171.yml b/html/changelogs/AutoChangeLog-pr-10171.yml deleted file mode 100644 index 0138d7a381..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10171.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "r4d6" -delete-after: True -changes: - - rscdel: "Removed a AM Shielding from the crate" diff --git a/html/changelogs/AutoChangeLog-pr-10172.yml b/html/changelogs/AutoChangeLog-pr-10172.yml deleted file mode 100644 index ce76e04d13..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10172.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: "Mickyan, nemvar, RaveRadbury, AnturK, SpaceManiac" -delete-after: True -changes: - - bugfix: "Certain incompatible quirks can no longer be taken together." - - bugfix: "If an admin sends a ghost back to the lobby, they can now choose a different set of quirks." - - spellcheck: "the quirk menu went through some minor formatting changes." - - bugfix: "Podcloning now lets you keep your quirks." - - rscadd: "Quirks have flavor text in medical records." - - spellcheck: "All quirk medical records refer to \"Patient\", removing a few instances of \"Subject\"." - - tweak: "Quirks no longer apply to off-station roundstart antagonists." - - code_imp: "Mood quirks are now only processed by the quirk holders" diff --git a/html/changelogs/AutoChangeLog-pr-10180.yml b/html/changelogs/AutoChangeLog-pr-10180.yml deleted file mode 100644 index 0a22910940..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10180.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixes a ghostchat eavesdropping exploit concerning VR." - - bugfix: "Fixes VR deaths being broadcasted in deadchat." diff --git a/html/changelogs/AutoChangeLog-pr-10181.yml b/html/changelogs/AutoChangeLog-pr-10181.yml deleted file mode 100644 index bb00ab1012..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10181.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed a few pill bottle issues with the ChemMaster." diff --git a/html/changelogs/AutoChangeLog-pr-10189.yml b/html/changelogs/AutoChangeLog-pr-10189.yml new file mode 100644 index 0000000000..5889e127d2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10189.yml @@ -0,0 +1,5 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "Dynamic storytellers, a new voting paradigm for dynamic" + - rscadd: "Support for approval voting and condorcet (ranked choice) voting in server votes" diff --git a/html/changelogs/AutoChangeLog-pr-10191.yml b/html/changelogs/AutoChangeLog-pr-10191.yml new file mode 100644 index 0000000000..c1366727bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10191.yml @@ -0,0 +1,5 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "Custom holoforms have been added for pAIs and AIs. oh and cyborg holograms of specific modules too." + - balance: "pais are no longer indestructible-flagged while in card form. pai radios now short out if they are forcefully collapsed from damage." diff --git a/html/changelogs/AutoChangeLog-pr-10195.yml b/html/changelogs/AutoChangeLog-pr-10195.yml deleted file mode 100644 index be8ed0ce76..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10195.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixes a few negative quirks not being properly removed when deleted." - - tweak: "Phobia and mute quirks are no longer cheesed by brain surgery grade healing or medicines." diff --git a/html/changelogs/AutoChangeLog-pr-10197.yml b/html/changelogs/AutoChangeLog-pr-10197.yml deleted file mode 100644 index 05545c066c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10197.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed double-flavour (and bland custom) ice creams." diff --git a/html/changelogs/AutoChangeLog-pr-10198.yml b/html/changelogs/AutoChangeLog-pr-10198.yml deleted file mode 100644 index 3414258d84..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10198.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "AnturK" -delete-after: True -changes: - - bugfix: "Fixed ranged syndicate mobs stormtrooper training." diff --git a/html/changelogs/AutoChangeLog-pr-10203.yml b/html/changelogs/AutoChangeLog-pr-10203.yml deleted file mode 100644 index 7cb4df817b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10203.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "DeltaFire15" -delete-after: True -changes: - - tweak: "changed mecha internals access for some special mechs." - - tweak: "no more mech maintenance access for engineers." diff --git a/html/changelogs/AutoChangeLog-pr-10216.yml b/html/changelogs/AutoChangeLog-pr-10216.yml deleted file mode 100644 index 69daa62448..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10216.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Nervere and subject217, Militaires, py01, nemvar" -delete-after: True -changes: - - balance: "The cook's CQC now only works when in the kitchen or the kitchen backroom." - - spellcheck: "corrected CQC help instructions" - - bugfix: "CQC and Sleeping Carp are properly logged." - - tweak: "CQC can passively grab targets when not on grab intent. Passive grabs do not count towards combos for CQC or Sleeping carp." - - code_imp: "Martial Art and NOGUN cleanup." diff --git a/html/changelogs/AutoChangeLog-pr-10225.yml b/html/changelogs/AutoChangeLog-pr-10225.yml deleted file mode 100644 index 964cc68223..0000000000 --- a/html/changelogs/AutoChangeLog-pr-10225.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "BlueWildrose" -delete-after: True -changes: - - bugfix: "Fixed stargazers being unable to link to themselves if mindshielded or if holding psionic shielding devices (tinfoil hats) when the species is set." - - bugfix: "Fixes non-roundstart slimes being unable to wag their tail." diff --git a/html/changelogs/AutoChangeLog-pr-10238.yml b/html/changelogs/AutoChangeLog-pr-10238.yml new file mode 100644 index 0000000000..dda40c86c9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10238.yml @@ -0,0 +1,7 @@ +author: "SpaceManiac, bobbahbrown, ShizCalev, SpaceManiac (ported by Ghommie)" +delete-after: True +changes: + - code_imp: "It is now possible to set a different most-base-turf per z-level." + - spellcheck: "Removed unlawful reference to Disney's Star Wars franchise in map logging." + - tweak: "Moved mapping related errors to their own log file." + - bugfix: "Destruction on Lavaland will no longer reveal space in rare situations." diff --git a/html/changelogs/AutoChangeLog-pr-10255.yml b/html/changelogs/AutoChangeLog-pr-10255.yml new file mode 100644 index 0000000000..ebaccd0af6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10255.yml @@ -0,0 +1,4 @@ +author: "Xantholne" +delete-after: True +changes: + - bugfix: "Christmas clothes that where missing stuff should work again" diff --git a/html/changelogs/AutoChangeLog-pr-10270.yml b/html/changelogs/AutoChangeLog-pr-10270.yml new file mode 100644 index 0000000000..b47a249f9a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10270.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed the secret sauce recipe being randomized every round." diff --git a/html/changelogs/AutoChangeLog-pr-10301.yml b/html/changelogs/AutoChangeLog-pr-10301.yml new file mode 100644 index 0000000000..2acac559e9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10301.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "range on Engi Tray scanners and Rad-Scanners" diff --git a/html/changelogs/AutoChangeLog-pr-10011.yml b/html/changelogs/AutoChangeLog-pr-10306.yml similarity index 52% rename from html/changelogs/AutoChangeLog-pr-10011.yml rename to html/changelogs/AutoChangeLog-pr-10306.yml index 70d569699f..9ab82dbda0 100644 --- a/html/changelogs/AutoChangeLog-pr-10011.yml +++ b/html/changelogs/AutoChangeLog-pr-10306.yml @@ -1,4 +1,4 @@ author: "Arturlang" delete-after: True changes: - - rscadd: "Adds Bloodsuckers, beware." + - tweak: "Vampires are no longer as tanky" diff --git a/html/changelogs/AutoChangeLog-pr-10309.yml b/html/changelogs/AutoChangeLog-pr-10309.yml new file mode 100644 index 0000000000..a59ebff156 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10309.yml @@ -0,0 +1,4 @@ +author: "Seris02" +delete-after: True +changes: + - rscadd: "disabler sechuds" diff --git a/html/changelogs/AutoChangeLog-pr-10319.yml b/html/changelogs/AutoChangeLog-pr-10319.yml new file mode 100644 index 0000000000..88235aab8e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10319.yml @@ -0,0 +1,5 @@ +author: "Seris02" +delete-after: True +changes: + - rscadd: "adds coconut" + - rscadd: "adds a coconut bong" diff --git a/html/changelogs/AutoChangeLog-pr-10330.yml b/html/changelogs/AutoChangeLog-pr-10330.yml new file mode 100644 index 0000000000..b2a46ef605 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10330.yml @@ -0,0 +1,4 @@ +author: "keronshb" +delete-after: True +changes: + - rscadd: "Adds new features for nanites" diff --git a/html/changelogs/AutoChangeLog-pr-10101.yml b/html/changelogs/AutoChangeLog-pr-10333.yml similarity index 50% rename from html/changelogs/AutoChangeLog-pr-10101.yml rename to html/changelogs/AutoChangeLog-pr-10333.yml index 059c8b2d85..b5c11a4646 100644 --- a/html/changelogs/AutoChangeLog-pr-10101.yml +++ b/html/changelogs/AutoChangeLog-pr-10333.yml @@ -1,4 +1,4 @@ author: "Trilbyspaceclone" delete-after: True changes: - - admin: "Updates the changlogs" + - rscadd: "Grass now makes light beer when distilled" diff --git a/html/changelogs/AutoChangeLog-pr-10337.yml b/html/changelogs/AutoChangeLog-pr-10337.yml new file mode 100644 index 0000000000..370a8fdc04 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10337.yml @@ -0,0 +1,5 @@ +author: "Seris02" +delete-after: True +changes: + - rscadd: "Auto ooc" + - admin: "changed \"assume direct control\" from m.ckey = src.ckey to adminmob.transfer_ckey(M) so it works with auto ooc" diff --git a/html/changelogs/AutoChangeLog-pr-10155.yml b/html/changelogs/AutoChangeLog-pr-10338.yml similarity index 61% rename from html/changelogs/AutoChangeLog-pr-10155.yml rename to html/changelogs/AutoChangeLog-pr-10338.yml index d82ea5ed43..c4816a3fbe 100644 --- a/html/changelogs/AutoChangeLog-pr-10155.yml +++ b/html/changelogs/AutoChangeLog-pr-10338.yml @@ -1,4 +1,4 @@ author: "Seris02" delete-after: True changes: - - bugfix: "distance checks" + - rscadd: "marshmallow" diff --git a/html/changelogs/AutoChangeLog-pr-10339.yml b/html/changelogs/AutoChangeLog-pr-10339.yml new file mode 100644 index 0000000000..c313c4bf80 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10339.yml @@ -0,0 +1,4 @@ +author: "Seris02" +delete-after: True +changes: + - rscadd: "telescopic IV drip" diff --git a/html/changelogs/AutoChangeLog-pr-10344.yml b/html/changelogs/AutoChangeLog-pr-10344.yml new file mode 100644 index 0000000000..e0381c6a43 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10344.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Chestbursters won't delete the host's brain somewhat anymore." diff --git a/html/changelogs/AutoChangeLog-pr-10345.yml b/html/changelogs/AutoChangeLog-pr-10345.yml new file mode 100644 index 0000000000..a95653cdda --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10345.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "allows bandoliers to hold any ammo type as long as it has a casing" diff --git a/html/changelogs/AutoChangeLog-pr-10349.yml b/html/changelogs/AutoChangeLog-pr-10349.yml new file mode 100644 index 0000000000..fad3179c6e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10349.yml @@ -0,0 +1,6 @@ +author: "KathrinBailey" +delete-after: True +changes: + - rscadd: "Empty engineering lockers for mappers." + - rscadd: "Industrial welding tools to the engineer welding locker." + - rscdel: "Removed the multitool, airlock painter, mechanical toolbox, brown sneakers, hazard vest and airlock painter from the CE's locker." diff --git a/html/changelogs/AutoChangeLog-pr-10356.yml b/html/changelogs/AutoChangeLog-pr-10356.yml new file mode 100644 index 0000000000..1016b559ee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10356.yml @@ -0,0 +1,5 @@ +author: "Bhijn" +delete-after: True +changes: + - rscadd: "Added a preference to make the sprint hotkey be a toggle instead of a hold bind" + - rscadd: "Added a preference to bind the sprint hotkey to space instead of shift." diff --git a/html/changelogs/AutoChangeLog-pr-10357.yml b/html/changelogs/AutoChangeLog-pr-10357.yml new file mode 100644 index 0000000000..048baa3041 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10357.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "You can toggle some prefs properly now." diff --git a/html/changelogs/AutoChangeLog-pr-10361.yml b/html/changelogs/AutoChangeLog-pr-10361.yml new file mode 100644 index 0000000000..0224bdcb49 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10361.yml @@ -0,0 +1,4 @@ +author: "CameronWoof" +delete-after: True +changes: + - rscadd: "Ghost Cafe patrons now spawn with chameleon kits. Dress up! Be fancy!" diff --git a/html/changelogs/AutoChangeLog-pr-10362.yml b/html/changelogs/AutoChangeLog-pr-10362.yml new file mode 100644 index 0000000000..f92e16302a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10362.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "rouge cases of #$39; in bottle/pill/patch/condiments" diff --git a/html/changelogs/AutoChangeLog-pr-10364.yml b/html/changelogs/AutoChangeLog-pr-10364.yml new file mode 100644 index 0000000000..8834c494ad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10364.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - bugfix: "telescopic iv drips now have the proper sanity checks for deployment." diff --git a/html/changelogs/AutoChangeLog-pr-10365.yml b/html/changelogs/AutoChangeLog-pr-10365.yml new file mode 100644 index 0000000000..f7ba047fc7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10365.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "no ass slap is no longer the same thing as no aphro" diff --git a/html/changelogs/AutoChangeLog-pr-10366.yml b/html/changelogs/AutoChangeLog-pr-10366.yml new file mode 100644 index 0000000000..ec8d234edd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10366.yml @@ -0,0 +1,5 @@ +author: "Hatterhat" +delete-after: True +changes: + - balance: "Beakers are generally more useful now, with slight capacity increases." + - tweak: "Transfer amounts are different now. Adjust your muscle memory to compensate." diff --git a/html/changelogs/AutoChangeLog-pr-10368.yml b/html/changelogs/AutoChangeLog-pr-10368.yml new file mode 100644 index 0000000000..e6486f2815 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10368.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - balance: "ore redemption machines actually get affected by lasers again kthx" diff --git a/html/changelogs/AutoChangeLog-pr-10369.yml b/html/changelogs/AutoChangeLog-pr-10369.yml new file mode 100644 index 0000000000..c292d948fb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10369.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "crusher trophy drop chance on mining mobs increased to 1 in 4 (from 1 in 20)" diff --git a/html/changelogs/AutoChangeLog-pr-10370.yml b/html/changelogs/AutoChangeLog-pr-10370.yml new file mode 100644 index 0000000000..6674fd2e17 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10370.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - bugfix: "Blood-drunk buff from blood-drunk eye crusher trophy is less likely to cripple its user." diff --git a/html/changelogs/AutoChangeLog-pr-10121.yml b/html/changelogs/AutoChangeLog-pr-10371.yml similarity index 52% rename from html/changelogs/AutoChangeLog-pr-10121.yml rename to html/changelogs/AutoChangeLog-pr-10371.yml index 38a91fcc01..e4322d70f1 100644 --- a/html/changelogs/AutoChangeLog-pr-10121.yml +++ b/html/changelogs/AutoChangeLog-pr-10371.yml @@ -1,4 +1,4 @@ author: "kappa-sama" delete-after: True changes: - - rscadd: "plasmafist to wizard" + - rscadd: "loot crates in cargo contraband" diff --git a/html/changelogs/AutoChangeLog-pr-10372.yml b/html/changelogs/AutoChangeLog-pr-10372.yml new file mode 100644 index 0000000000..6bb60c3d8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10372.yml @@ -0,0 +1,5 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "Forcefield projectors now fit on toolbelts." + - imageadd: "New sprites for ATMOS holofan and forcefield projectors!" diff --git a/html/changelogs/AutoChangeLog-pr-10374.yml b/html/changelogs/AutoChangeLog-pr-10374.yml new file mode 100644 index 0000000000..376f49a4d4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10374.yml @@ -0,0 +1,4 @@ +author: "Bhijn helped" +delete-after: True +changes: + - bugfix: "Fixes Dragon's Tooth Sword 50% armor penetration by making it 35%" diff --git a/html/changelogs/AutoChangeLog-pr-10378.yml b/html/changelogs/AutoChangeLog-pr-10378.yml new file mode 100644 index 0000000000..c7ab7d42c1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10378.yml @@ -0,0 +1,4 @@ +author: "EmeraldSundisk" +delete-after: True +changes: + - rscadd: "Adds a sign outside MetaStation's custodial closet" diff --git a/html/changelogs/AutoChangeLog-pr-10379.yml b/html/changelogs/AutoChangeLog-pr-10379.yml new file mode 100644 index 0000000000..9623f815d6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10379.yml @@ -0,0 +1,4 @@ +author: "Ryll/Shaps, ported by Hatterhat" +delete-after: True +changes: + - rscadd: "Point-blanking people with shotguns actually throws them backwards!" diff --git a/html/changelogs/AutoChangeLog-pr-10383.yml b/html/changelogs/AutoChangeLog-pr-10383.yml new file mode 100644 index 0000000000..c6787bbafe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10383.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - bugfix: "megafauna can hear again" diff --git a/html/changelogs/AutoChangeLog-pr-10388.yml b/html/changelogs/AutoChangeLog-pr-10388.yml new file mode 100644 index 0000000000..fd06a5db3f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10388.yml @@ -0,0 +1,4 @@ +author: "CameronWoof" +delete-after: True +changes: + - rscadd: "Robots can now check the crew manifest from anywhere with the \"View Crew Manifest\" verb." diff --git a/html/changelogs/AutoChangeLog-pr-10399.yml b/html/changelogs/AutoChangeLog-pr-10399.yml new file mode 100644 index 0000000000..cbdb00630c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10399.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - balance: "Cargo passive gen is now 500 down from 750." diff --git a/html/changelogs/AutoChangeLog-pr-10403.yml b/html/changelogs/AutoChangeLog-pr-10403.yml new file mode 100644 index 0000000000..321789a546 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10403.yml @@ -0,0 +1,5 @@ +author: "r4d6" +delete-after: True +changes: + - rscadd: "Added a way to make opaque plastic flaps +change: Change the already existing flap recipe to show that they are see-through" diff --git a/html/changelogs/AutoChangeLog-pr-10412.yml b/html/changelogs/AutoChangeLog-pr-10412.yml new file mode 100644 index 0000000000..b838dbb680 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10412.yml @@ -0,0 +1,4 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "fixes matchboxes runtiming every time they spawn" diff --git a/html/changelogs/AutoChangeLog-pr-10413.yml b/html/changelogs/AutoChangeLog-pr-10413.yml new file mode 100644 index 0000000000..6d6378675b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10413.yml @@ -0,0 +1,4 @@ +author: "nik707" +delete-after: True +changes: + - tweak: "engraving light_power from 1 to 0.3" diff --git a/html/changelogs/AutoChangeLog-pr-10132.yml b/html/changelogs/AutoChangeLog-pr-10432.yml similarity index 53% rename from html/changelogs/AutoChangeLog-pr-10132.yml rename to html/changelogs/AutoChangeLog-pr-10432.yml index d8755d2b90..a0b40baa45 100644 --- a/html/changelogs/AutoChangeLog-pr-10132.yml +++ b/html/changelogs/AutoChangeLog-pr-10432.yml @@ -1,4 +1,4 @@ author: "Trilbyspaceclone" delete-after: True changes: - - tweak: "meat hook from HUGE to bulky" + - bugfix: "missing sprites with crushed cans" diff --git a/html/changelogs/AutoChangeLog-pr-9538.yml b/html/changelogs/AutoChangeLog-pr-9538.yml deleted file mode 100644 index a036a8d24a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9538.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - balance: "Combat defibs now instant stun on disarm rather than 1 second again" - - balance: "Defibs are now always emagged when emagged with an emag rather than EMP." diff --git a/html/changelogs/AutoChangeLog-pr-9629.yml b/html/changelogs/AutoChangeLog-pr-9629.yml deleted file mode 100644 index f0419e4ce9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9629.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - bugfix: "aooc toggling now only broadcasts to antagonists" diff --git a/html/changelogs/AutoChangeLog-pr-9736.yml b/html/changelogs/AutoChangeLog-pr-9736.yml deleted file mode 100644 index 768474b8ef..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9736.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - code_imp: "Antag rep proc is now easier to read and supports returning a list." diff --git a/html/changelogs/AutoChangeLog-pr-9747.yml b/html/changelogs/AutoChangeLog-pr-9747.yml deleted file mode 100644 index 01caf36136..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9747.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed AI holopad speech text being small and whispers that in multiple exclamation marks echo through multiple areas." diff --git a/html/changelogs/AutoChangeLog-pr-9856.yml b/html/changelogs/AutoChangeLog-pr-9856.yml new file mode 100644 index 0000000000..697c1c78f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9856.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - rscadd: "Refactored code to allow all living mobs to use shields and not only humans." + - tweak: "Monkys will now retaliate against aliens attacking them (as if they even posed a threat to start with)." diff --git a/html/changelogs/AutoChangeLog-pr-9894.yml b/html/changelogs/AutoChangeLog-pr-9894.yml deleted file mode 100644 index 6e4b5c09d0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9894.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - balance: "Bomb armor now acts like other armor types." - - balance: "Devastation-level explosions on armorless people no longer destroys everything in their bags." diff --git a/html/changelogs/AutoChangeLog-pr-9903.yml b/html/changelogs/AutoChangeLog-pr-9903.yml deleted file mode 100644 index 0c21b30fd6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9903.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "PersianXerxes" -delete-after: True -changes: - - rscdel: "Removed night vision quirk" diff --git a/html/changelogs/AutoChangeLog-pr-9970.yml b/html/changelogs/AutoChangeLog-pr-9970.yml deleted file mode 100644 index ebeaa326e7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9970.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - rscdel: "Removed literally atrocious polka dotted accessories. They were even more atrocious than the yellow horrible tie." diff --git a/html/changelogs/AutoChangeLog-pr-9971.yml b/html/changelogs/AutoChangeLog-pr-9971.yml deleted file mode 100644 index 951b9dfc81..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9971.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Xantholne" -delete-after: True -changes: - - rscadd: "Santa Hats to Loadout and Clothesmate" - - rscadd: "Christmas Wintercoats to Loadout and Clothesmate" - - rscadd: "Christmas male and female uniforms to loadout and Clothesmate" - - rscadd: "Red, Green, and Traditional Santa boots to loadout and Clothesmate" - - rscadd: "Christmas Socks, Red candycane socks, Green candycane socks to sock selection" diff --git a/html/changelogs/AutoChangeLog-pr-9983.yml b/html/changelogs/AutoChangeLog-pr-9983.yml deleted file mode 100644 index b8cd4f0f5b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-9983.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie, Skogol" -delete-after: True -changes: - - refactor: "refactored altclick interaction to allow alt-click interactable objects to parent call without forcing the turf contents stat menu open." - - tweak: "Alt clicking will no longer show turf contents for items inside bags etc." - - tweak: "Alt clicking the source of your turf contents stat menu will now close said menu." diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index e13ce10347..51e9453087 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/animals_held.dmi b/icons/mob/animals_held.dmi new file mode 100644 index 0000000000..82a065d93a Binary files /dev/null and b/icons/mob/animals_held.dmi differ diff --git a/icons/mob/animals_held_lh.dmi b/icons/mob/animals_held_lh.dmi new file mode 100644 index 0000000000..6c407c850b Binary files /dev/null and b/icons/mob/animals_held_lh.dmi differ diff --git a/icons/mob/animals_held_rh.dmi b/icons/mob/animals_held_rh.dmi new file mode 100644 index 0000000000..322dad06d2 Binary files /dev/null and b/icons/mob/animals_held_rh.dmi differ diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi index b572338fc6..a73da3aa0c 100644 Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f5951e032c..365ed5afd9 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 9540599364..772a263358 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index ea185c5ad7..a166610826 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 1d380e34bc..47ed1adfee 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/insect_markings.dmi b/icons/mob/insect_markings.dmi new file mode 100644 index 0000000000..6aea140271 Binary files /dev/null and b/icons/mob/insect_markings.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 30b8eb8f9a..c1912d74cc 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index bf0df371eb..e0789a1eeb 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ diff --git a/icons/mob/underwear_old.dmi b/icons/mob/underwear_old.dmi deleted file mode 100644 index 5e16a473ba..0000000000 Binary files a/icons/mob/underwear_old.dmi and /dev/null differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index d7514c8688..fb2f4ab0d6 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/mob/uniform_digi.dmi b/icons/mob/uniform_digi.dmi index 3f1335153e..e568d70310 100644 Binary files a/icons/mob/uniform_digi.dmi and b/icons/mob/uniform_digi.dmi differ diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi index 7d95805dc5..ace37b1f17 100644 Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index d8968a107b..fd0893b300 100644 Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ diff --git a/icons/obj/bongs.dmi b/icons/obj/bongs.dmi new file mode 100644 index 0000000000..406cce3817 Binary files /dev/null and b/icons/obj/bongs.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 5d243f93b8..2e53bb24db 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 058af32b1e..2dcd8b9a06 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index bbb813d7c9..d0be1113ee 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index f467da6fbf..73eb12fd6a 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index ac898c55b2..b03a1cdeae 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi index cd7fc1742b..b1d78fa078 100644 Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ diff --git a/icons/obj/food/donut.dmi b/icons/obj/food/donut.dmi new file mode 100644 index 0000000000..fb13ab5dfa Binary files /dev/null and b/icons/obj/food/donut.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 2ea48828d2..a719150f11 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/piecake.dmi b/icons/obj/food/piecake.dmi index a74acb4e29..5638235217 100644 Binary files a/icons/obj/food/piecake.dmi and b/icons/obj/food/piecake.dmi differ diff --git a/icons/obj/food/snowcones.dmi b/icons/obj/food/snowcones.dmi index 8a06cf4e82..8f5b4f8992 100644 Binary files a/icons/obj/food/snowcones.dmi and b/icons/obj/food/snowcones.dmi differ diff --git a/icons/obj/food/soupsalad.dmi b/icons/obj/food/soupsalad.dmi index c6df0a2603..a6e492608f 100644 Binary files a/icons/obj/food/soupsalad.dmi and b/icons/obj/food/soupsalad.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index d23af6c9b4..bba3efc951 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi index 469b1e1aff..712ea11a3b 100644 Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index a57719fb3a..e746d8f43d 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 8695d03b3c..43e231cbab 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi index f530688da7..ddd22dea89 100644 Binary files a/icons/obj/iv_drip.dmi and b/icons/obj/iv_drip.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 1e1033e38e..cb3870dc61 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index e41d1fb4a1..cb67f0d6f9 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index e38760b84d..93a1908fba 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 8ede8c66ab..8fee8fcf9f 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 553336115b..143171f414 100644 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/rooms/box/engine.dmi b/icons/rooms/box/engine.dmi new file mode 100644 index 0000000000..c7b0546db2 Binary files /dev/null and b/icons/rooms/box/engine.dmi differ diff --git a/modular_citadel/code/_onclick/hud/screen_objects.dm b/modular_citadel/code/_onclick/hud/screen_objects.dm index 3a0eb364cb..6ad0603c49 100644 --- a/modular_citadel/code/_onclick/hud/screen_objects.dm +++ b/modular_citadel/code/_onclick/hud/screen_objects.dm @@ -18,10 +18,11 @@ var/mob/living/carbon/C = usr C.toggle_combat_mode() -/obj/screen/combattoggle/proc/rebasetointerbay(mob/living/carbon/C) - if(!C) +/obj/screen/combattoggle/update_icon_state() + var/mob/living/carbon/user = hud?.mymob + if(!istype(user)) return - if(C.combatmode) + if(user.combatmode) icon_state = "combat" else icon_state = "combat_off" @@ -36,10 +37,11 @@ var/mob/living/carbon/C = usr C.toggle_vore_mode() -/obj/screen/voretoggle/proc/rebaseintomygut(mob/living/carbon/C) - if(!C) +/obj/screen/voretoggle/update_icon_state() + var/mob/living/carbon/user = hud?.mymob + if(!istype(user)) return - if(C.voremode && !C.combatmode) + if(user.voremode && !user.combatmode) icon_state = "nom" else icon_state = "nom_off" diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/modular_citadel/code/_onclick/hud/sprint.dm index 290fcd368e..c1c81b6d5b 100644 --- a/modular_citadel/code/_onclick/hud/sprint.dm +++ b/modular_citadel/code/_onclick/hud/sprint.dm @@ -12,10 +12,11 @@ var/mob/living/carbon/human/H = usr H.togglesprint() -/obj/screen/sprintbutton/proc/insert_witty_toggle_joke_here(mob/living/carbon/human/H) - if(!H) +/obj/screen/sprintbutton/update_icon_state() + var/mob/living/user = hud?.mymob + if(!istype(user)) return - if(H.sprinting) + if(user.sprinting) icon_state = "act_sprint_on" else icon_state = "act_sprint" diff --git a/modular_citadel/code/_onclick/hud/stamina.dm b/modular_citadel/code/_onclick/hud/stamina.dm index 781b7cb25f..184e3add24 100644 --- a/modular_citadel/code/_onclick/hud/stamina.dm +++ b/modular_citadel/code/_onclick/hud/stamina.dm @@ -13,31 +13,16 @@ var/mob/living/L = usr to_chat(L, "You have [L.getStaminaLoss()] stamina loss.
      Your stamina buffer can take [L.stambuffer] stamina loss, and will use 50% of that stamina loss when recharging.
      Your stamina buffer is [(L.stambuffer*(100/L.stambuffer))-(L.bufferedstam*(100/L.stambuffer))]% full.
      ") -/mob/living/carbon/human/proc/staminahudamount() - if(stat == DEAD || recoveringstam) - return "staminacrit" +/obj/screen/staminas/update_icon_state() + var/mob/living/carbon/user = hud?.mymob + if(!user) + return + if(user.stat == DEAD || user.recoveringstam || (user.hal_screwyhud in 1 to 2)) + icon_state = "staminacrit" + else if(user.hal_screwyhud == 5) + icon_state = "stamina0" else - switch(hal_screwyhud) - if(1 to 2) - return "staminacrit" - if(5) - return "stamina0" - else - switch(100 - getStaminaLoss()) - if(100 to INFINITY) - return "stamina0" - if(80 to 100) - return "stamina1" - if(60 to 80) - return "stamina2" - if(40 to 60) - return "stamina3" - if(20 to 40) - return "stamina4" - if(0 to 20) - return "stamina5" - else - return "stamina6" + icon_state = "stamina[CLAMP(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]" //stam buffer /obj/screen/staminabuffer @@ -48,31 +33,29 @@ layer = ABOVE_HUD_LAYER + 0.1 mouse_opacity = 0 -/mob/living/carbon/human/proc/staminabufferhudamount() - if(stat == DEAD || recoveringstam) - return "stambuffer7" +/obj/screen/staminabuffer/update_icon_state() + var/mob/living/carbon/user = hud?.mymob + if(!user) + return + if(user.stat == DEAD || user.recoveringstam || (user.hal_screwyhud in 1 to 2)) + icon_state = "stambuffer7" + else if(user.hal_screwyhud == 5) + icon_state = "stambuffer0" else - switch(hal_screwyhud) - if(1 to 2) - return "stambuffer7" - if(5) - return "stambuffer0" + switch(user.bufferedstam / user.stambuffer) + if(0.95 to INFINITY) + icon_state = "stambuffer7" + if(0.9 to 0.95) + icon_state = "stambuffer6" + if(0.8 to 0.9) + icon_state = "stambuffer5" + if(0.6 to 0.8) + icon_state = "stambuffer4" + if(0.4 to 0.6) + icon_state = "stambuffer3" + if(0.2 to 0.4) + icon_state = "stambuffer2" + if(0.05 to 0.2) + icon_state = "stambuffer1" else - var/percentmult = 100/stambuffer - switch(stambuffer*percentmult - bufferedstam*percentmult) - if(95 to INFINITY) - return "stambuffer0" - if(90 to 95) - return "stambuffer1" - if(80 to 90) - return "stambuffer2" - if(60 to 80) - return "stambuffer3" - if(40 to 60) - return "stambuffer4" - if(20 to 40) - return "stambuffer5" - if(5 to 20) - return "stambuffer6" - else - return "stambuffer7" + icon_state = "stambuffer0" diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 5d9010a7bd..8adc7c0745 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -209,12 +209,12 @@ //Preamble -/mob/living/verb/toggle_lewd() +/mob/living/verb/toggle_hypno() set category = "IC" - set name = "Toggle Lewdchem" - set desc = "Allows you to toggle if you'd like lewd flavour messages." - client.prefs.lewdchem = !(client.prefs.lewdchem) - to_chat(usr, "You [(client.prefs.lewdchem?"will":"no longer")] receive lewdchem messages.") + set name = "Toggle Lewd MKUltra" + set desc = "Allows you to toggle if you'd like lewd flavour messages for MKUltra." + client.prefs.cit_toggles ^= HYPNO + to_chat(usr, "You [((client.prefs.cit_toggles & HYPNO) ?"will":"no longer")] receive lewd flavour messages for MKUltra.") /datum/status_effect/chem/enthrall id = "enthrall" @@ -252,6 +252,8 @@ var/customEcho //Custom looping text in owner var/customSpan //Custom spans for looping text + var/lewd = FALSE // Set on on_apply. Will only be true if both individuals involved have opted in. + /datum/status_effect/chem/enthrall/on_apply() var/mob/living/carbon/M = owner var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in M.reagents.reagent_list @@ -269,10 +271,11 @@ var/mob/living/carbon/human/H = owner if(H)//Prefs if(!H.canbearoused) - H.client?.prefs.lewdchem = FALSE - var/message = "[(owner.client?.prefs.lewdchem?"I am a good pet for [enthrallGender].":"[master] is a really inspirational person!")]" + H.client?.prefs.cit_toggles &= ~HYPNO + lewd = (owner.client?.prefs.cit_toggles & HYPNO) && (master.client?.prefs.cit_toggles & HYPNO) + var/message = "[(lewd ? "I am a good pet for [enthrallGender]." : "[master] is a really inspirational person!")]" SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "enthrall", /datum/mood_event/enthrall, message) - to_chat(owner, "You feel inexplicably drawn towards [master], their words having a demonstrable effect on you. It seems the closer you are to them, the stronger the effect is. However you aren't fully swayed yet and can resist their effects by repeatedly resisting as much as you can!") + to_chat(owner, "You feel inexplicably drawn towards [master], their words having a demonstrable effect on you. It seems the closer you are to them, the stronger the effect is. However you aren't fully swayed yet and can resist their effects by repeatedly resisting as much as you can!") log_game("FERMICHEM: MKULTRA: Status applied on [owner] ckey: [owner.key] with a master of [master] ckey: [enthrallID].") SSblackbox.record_feedback("tally", "fermi_chem", 1, "Enthrall attempts") return ..() @@ -318,7 +321,7 @@ resistanceTally /= 2 enthrallTally = 0 SSblackbox.record_feedback("tally", "fermi_chem", 1, "Enthralled to state 2") - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "Your conciousness slips, as you sink deeper into trance and servitude.") else to_chat(owner, "Your conciousness slips, as you feel more drawn to following [master].") @@ -327,11 +330,11 @@ phase = -1 to_chat(owner, "You break free of the influence in your mind, your thoughts suddenly turning lucid!") if(DistApart < 10) - to_chat(master, "[(master.client?.prefs.lewdchem?"Your pet":"Your thrall")] seems to have broken free of your enthrallment!
      ") + to_chat(master, "[(lewd?"Your pet":"Your thrall")] seems to have broken free of your enthrallment!") SSblackbox.record_feedback("tally", "fermi_chem", 1, "Thralls broken free") owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. if(prob(10)) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "[pick("It feels so good to listen to [master].", "You can't keep your eyes off [master].", "[master]'s voice is making you feel so sleepy.", "You feel so comfortable with [master]", "[master] is so dominant, it feels right to obey them.")].") if (2) //partially enthralled if(enthrallTally > 200) @@ -339,12 +342,12 @@ mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity. enthrallTally = 0 resistanceTally /= 2 - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "Your mind gives, eagerly obeying and serving [master].") to_chat(owner, "You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. ")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP. else to_chat(owner, "You are unable to put up a resistance any longer, and now are under the influence of [master]. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot follow [master] in death. ") - to_chat(master, "Your [(master.client?.prefs.lewdchem?"pet":"follower")] [owner] appears to have fully fallen under your sway.") + to_chat(master, "Your [(lewd?"pet":"follower")] [owner] appears to have fully fallen under your sway.") log_game("FERMICHEM: MKULTRA: Status on [owner] ckey: [owner.key] has been fully entrhalled (state 3) with a master of [master] ckey: [enthrallID].") SSblackbox.record_feedback("tally", "fermi_chem", 1, "thralls fully enthralled.") else if (resistanceTally > 200) @@ -353,20 +356,18 @@ resistanceTally = 0 resistGrowth = 0 to_chat(owner, "You manage to shake some of the effects from your addled mind, however you can still feel yourself drawn towards [master].") - if(prob(10)) - if(owner.client?.prefs.lewdchem) - to_chat(owner, "[pick("It feels so good to listen to [enthrallGender].", "You can't keep your eyes off [enthrallGender].", "[enthrallGender]'s voice is making you feel so sleepy.", "You feel so comfortable with [enthrallGender]", "[enthrallGender] is so dominant, it feels right to obey them.")].") + if(lewd && prob(10)) + to_chat(owner, "[pick("It feels so good to listen to [enthrallGender].", "You can't keep your eyes off [enthrallGender].", "[enthrallGender]'s voice is making you feel so sleepy.", "You feel so comfortable with [enthrallGender]", "[enthrallGender] is so dominant, it feels right to obey them.")].") if (3)//fully entranced if ((resistanceTally >= 200 && withdrawalTick >= 150) || (HAS_TRAIT(M, TRAIT_MINDSHIELD) && (resistanceTally >= 100))) enthrallTally = 0 phase -= 1 resistanceTally = 0 resistGrowth = 0 - to_chat(owner, "The separation from [(owner.client?.prefs.lewdchem?"your [enthrallGender]":"[master]")] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.") + to_chat(owner, "The separation from [(lewd?"your [enthrallGender]":"[master]")] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.") REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra") - if(prob(1)) - if(owner.client?.prefs.lewdchem && !customEcho) - to_chat(owner, "[pick("I belong to [enthrallGender].", "[enthrallGender] knows whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].") + if(lewd && prob(1) && !customEcho) + to_chat(owner, "[pick("I belong to [enthrallGender].", "[enthrallGender] knows whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].") if (4) //mindbroken if (mental_capacity >= 499 && (owner.getOrganLoss(ORGAN_SLOT_BRAIN) <=0 || HAS_TRAIT(M, TRAIT_MINDSHIELD)) && !owner.reagents.has_reagent("MKUltra")) phase = 2 @@ -382,7 +383,7 @@ cooldownMsg = FALSE else if (cooldownMsg == FALSE) if(DistApart < 10) - if(master.client?.prefs.lewdchem) + if(lewd) to_chat(master, "Your pet [owner] appears to have finished internalising your last command.") cooldownMsg = TRUE else @@ -390,7 +391,7 @@ cooldownMsg = TRUE if(get_dist(master, owner) > 10) if(prob(10)) - to_chat(owner, "You feel [(owner.client?.prefs.lewdchem?"a deep NEED to return to your [enthrallGender]":"like you have to return to [master]")].") + to_chat(owner, "You feel [(lewd ?"a deep NEED to return to your [enthrallGender]":"like you have to return to [master]")].") M.throw_at(get_step_towards(master,owner), 5, 1) return//If you break the mind of someone, you can't use status effects on them. @@ -423,29 +424,29 @@ if (withdrawal == TRUE)//Your minions are really REALLY needy. switch(withdrawalTick)//denial if(5)//To reduce spam - to_chat(owner, "You are unable to complete [(owner.client?.prefs.lewdchem?"your [enthrallGender]":"[master]")]'s orders without their presence, and any commands and objectives given to you prior are not in effect until you are back with them.") + to_chat(owner, "You are unable to complete [(lewd?"your [enthrallGender]":"[master]")]'s orders without their presence, and any commands and objectives given to you prior are not in effect until you are back with them.") ADD_TRAIT(owner, TRAIT_PACIFISM, "MKUltra") //IMPORTANT if(10 to 35)//Gives wiggle room, so you're not SUPER needy if(prob(5)) - to_chat(owner, "You're starting to miss [(owner.client?.prefs.lewdchem?"your [enthrallGender]":"[master]")].") + to_chat(owner, "You're starting to miss [(lewd?"your [enthrallGender]":"[master]")].") if(prob(5)) owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.1) - to_chat(owner, "[(owner.client?.prefs.lewdchem?"[enthrallGender]":"[master]")] will surely be back soon") //denial + to_chat(owner, "[(lewd?"[enthrallGender]":"[master]")] will surely be back soon") //denial if(36) - var/message = "[(owner.client?.prefs.lewdchem?"I feel empty when [enthrallGender]'s not around..":"I miss [master]'s presence")]" + var/message = "[(lewd?"I feel empty when [enthrallGender]'s not around..":"I miss [master]'s presence")]" SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1, message) if(37 to 65)//barganing if(prob(10)) to_chat(owner, "They are coming back, right...?") owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5) if(prob(10)) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.") owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1.5) if(66) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1") - var/message = "[(owner.client?.prefs.lewdchem?"I feel so lost in this complicated world without [enthrallGender]..":"I have to return to [master]!")]" - to_chat(owner, "You start to feel really angry about how you're not with [(owner.client?.prefs.lewdchem?"your [enthrallGender]":"[master]")]!") + var/message = "[(lewd?"I feel so lost in this complicated world without [enthrallGender]..":"I have to return to [master]!")]" + to_chat(owner, "You start to feel really angry about how you're not with [(lewd?"your [enthrallGender]":"[master]")]!") SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing2", /datum/mood_event/enthrallmissing2, message) owner.stuttering += 50 owner.jitteriness += 250 @@ -453,15 +454,15 @@ if(prob(10)) addtimer(CALLBACK(M, /mob/verb/a_intent_change, INTENT_HARM), 2) addtimer(CALLBACK(M, /mob/proc/click_random_mob), 2) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "You are overwhelmed with anger at the lack of [enthrallGender]'s presence and suddenly lash out!") else to_chat(owner, "You are overwhelmed with anger and suddenly lash out!") if(90) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") - var/message = "[(owner.client?.prefs.lewdchem?"Where are you [enthrallGender]??!":"I need to find [master]!")]" + var/message = "[(lewd?"Where are you [enthrallGender]??!":"I need to find [master]!")]" SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing3", /datum/mood_event/enthrallmissing3, message) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "You need to find your [enthrallGender] at all costs, you can't hold yourself back anymore!") else to_chat(owner, "You need to find [master] at all costs, you can't hold yourself back anymore!") @@ -474,15 +475,15 @@ M.hallucination += 10 if(101) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3") - var/message = "[(owner.client?.prefs.lewdchem?"I'm all alone, It's so hard to continute without [enthrallGender]...":"I really need to find [master]!!!")]" + var/message = "[(lewd?"I'm all alone, It's so hard to continute without [enthrallGender]...":"I really need to find [master]!!!")]" SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing4", /datum/mood_event/enthrallmissing4, message) - to_chat(owner, "You can hardly find the strength to continue without [(owner.client?.prefs.lewdchem?"your [enthrallGender]":"[master]")].") + to_chat(owner, "You can hardly find the strength to continue without [(lewd?"your [enthrallGender]":"[master]")].") M.gain_trauma_type(BRAIN_TRAUMA_SEVERE) if(102 to 140) //depression 2, revengeance if(prob(20)) owner.Stun(50) owner.emote("cry")//does this exist? - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "You're unable to hold back your tears, suddenly sobbing as the desire to see your [enthrallGender] oncemore overwhelms you.") else to_chat(owner, "You are overwheled with withdrawl from [master].") @@ -504,7 +505,7 @@ deltaResist += 5 owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1) if(prob(20)) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "Maybe you'll be okay without your [enthrallGender].") else to_chat(owner, "You feel your mental functions slowly begin to return.") @@ -537,7 +538,7 @@ else if(status == "charge") owner.add_movespeed_modifier(MOVESPEED_ID_MKULTRA, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING)) status = "charged" - if(master.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!") else to_chat(owner, "[master]'s command fills you with a burst of speed!") @@ -560,7 +561,7 @@ //adrenals? //customEcho - if(customEcho && withdrawal == FALSE && owner.client?.prefs.lewdchem) + if(customEcho && withdrawal == FALSE && lewd) if(prob(2)) if(!customSpan) //just in case! customSpan = "notice" @@ -576,7 +577,7 @@ cooldownMsg = FALSE else if (cooldownMsg == FALSE) if(DistApart < 10) - if(master.client?.prefs.lewdchem) + if(lewd) to_chat(master, "Your pet [owner] appears to have finished internalising your last command.") else to_chat(master, "Your thrall [owner] appears to have finished internalising your last command.") @@ -609,7 +610,7 @@ /datum/status_effect/chem/enthrall/proc/owner_hear(datum/source, list/hearing_args) - if(owner.client?.prefs.lewdchem == FALSE) + if(lewd == FALSE) return if (cTriggered > 0) return @@ -638,7 +639,7 @@ //Shocking truth! else if (lowertext(customTriggers[trigger]) == "shock") - if (C.canbearoused && C.client?.prefs.lewdchem) + if (C.canbearoused && lewd) C.adjustArousalLoss(5) C.jitteriness += 100 C.stuttering += 25 @@ -648,7 +649,7 @@ //wah intensifies wah-rks else if (lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - if (HAS_TRAIT(C, TRAIT_NYMPHO) && C.client?.prefs.lewdchem) + if (HAS_TRAIT(C, TRAIT_NYMPHO) && lewd) if (C.getArousalLoss() > 80) C.mob_climax(forced_climax=TRUE) C.SetStun(10)//We got your stun effects in somewhere, Kev. @@ -689,20 +690,20 @@ if (status == "Sleeper" || phase == 0) return else if (phase == 4) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "Your mind is too far gone to even entertain the thought of resisting. Unless you can fix the brain damage, you won't be able to break free of your [enthrallGender]'s control.") else to_chat(owner, "Your brain is too overwhelmed with from the high volume of chemicals in your system, rendering you unable to resist, unless you can fix the brain damage.") return else if (phase == 3 && withdrawal == FALSE) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance. If you get split up from them, then you might be able to entertain the idea of resisting.") else to_chat(owner, "You are unable to resist [master] in your current state. If you get split up from them, then you might be able to resist.") return else if (status == "Antiresist")//If ordered to not resist; resisting while ordered to not makes it last longer, and increases the rate in which you are enthralled. if (statusStrength > 0) - if(owner.client?.prefs.lewdchem) + if(lewd) to_chat(owner, "The order from your [enthrallGender] to give in is conflicting with your attempt to resist, drawing you deeper into trance! You'll have to wait a bit before attemping again, lest your attempts become frustrated again.") else to_chat(owner, "The order from your [master] to give in is conflicting with your attempt to resist. You'll have to wait a bit before attemping again, lest your attempts become frustrated again.") @@ -742,7 +743,7 @@ deltaResist *= 1.25 if (owner.reagents.has_reagent("neurine")) deltaResist *= 1.5 - if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused && owner.client?.prefs.lewdchem) + if (!(owner.client?.prefs.cit_toggles & NO_APHRO) && M.canbearoused && lewd) if (owner.reagents.has_reagent("anaphro")) deltaResist *= 1.5 if (owner.reagents.has_reagent("anaphro+")) diff --git a/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm deleted file mode 100644 index 5dfe1dfcbd..0000000000 --- a/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/round_event_control/spawn_swarmer - weight = 0 - max_occurrences = 0 \ No newline at end of file diff --git a/modular_citadel/code/game/gamemodes/revolution/revolution.dm b/modular_citadel/code/game/gamemodes/revolution/revolution.dm deleted file mode 100644 index b377fc9fbd..0000000000 --- a/modular_citadel/code/game/gamemodes/revolution/revolution.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/game_mode/revolution - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster") - false_report_weight = 10 - required_players = 20 - required_enemies = 1 diff --git a/modular_citadel/code/game/machinery/firealarm.dm b/modular_citadel/code/game/machinery/firealarm.dm deleted file mode 100644 index 7c136f4e4d..0000000000 --- a/modular_citadel/code/game/machinery/firealarm.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/machinery/firealarm/alt_attack_hand(mob/user) - if(can_interact(usr)) - var/area/A = get_area(src) - if(istype(A)) - if(A.fire) - reset() - else - alarm() - return TRUE - return FALSE diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm index 53fe6a8f56..e75ba17801 100755 --- a/modular_citadel/code/game/machinery/vending.dm +++ b/modular_citadel/code/game/machinery/vending.dm @@ -52,6 +52,7 @@ /obj/item/clothing/mask/muzzle = 4, /obj/item/clothing/under/stripper_pink = 3, /obj/item/clothing/under/stripper_green = 3, + /obj/item/clothing/under/corset = 3, /obj/item/clothing/under/gear_harness = 10, /obj/item/dildo/custom = 5, /obj/item/electropack/shockcollar = 3, @@ -71,7 +72,8 @@ ) premium = list( /obj/item/clothing/accessory/skullcodpiece/fake = 3, - /obj/item/reagent_containers/glass/bottle/hexacrocin = 10 + /obj/item/reagent_containers/glass/bottle/hexacrocin = 10, + /obj/item/clothing/under/pants/chaps = 5 ) refill_canister = /obj/item/vending_refill/kink diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm index 9fa6d66d98..8d70464a2d 100644 --- a/modular_citadel/code/modules/arousal/genitals.dm +++ b/modular_citadel/code/modules/arousal/genitals.dm @@ -132,7 +132,7 @@ amount += 0.1 var/multiplier = fluid_mult if(reagents.total_volume >= 5) - multiplier *= 0.5 + multiplier *= 0.8 if(reagents.total_volume < reagents.maximum_volume) reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally reagents.add_reagent(fluid_id, (amount * multiplier))//generate the cum diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index f4ba95d830..105f5e157d 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -7,6 +7,7 @@ slot = ORGAN_SLOT_BREASTS size = "c" //refer to the breast_values static list below for the cups associated number values fluid_id = "milk" + fluid_rate = MILK_RATE shape = "pair" genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION masturbation_verb = "massage" @@ -63,7 +64,7 @@ //Allows breasts to grow and change size, with sprite changes too. //maximum wah //Comical sizes slow you down in movement and actions. -//Rediculous sizes makes you more cumbersome. +//Ridiculous sizes makes you more cumbersome. //this is far too lewd wah /obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY) diff --git a/modular_citadel/code/modules/client/client_procs.dm b/modular_citadel/code/modules/client/client_procs.dm index 3b91deb6e5..f20dd08a51 100644 --- a/modular_citadel/code/modules/client/client_procs.dm +++ b/modular_citadel/code/modules/client/client_procs.dm @@ -19,6 +19,12 @@ mentor_follow(M) return TRUE + if(href_list["mentor_unfollow"]) + var/mob/living/M = locate(href_list["mentor_follow"]) + if(M && mentor_datum.following == M) + mentor_unfollow() + return TRUE + /client/proc/mentor_datum_set(admin) mentor_datum = GLOB.mentor_datums[ckey] if(!mentor_datum && check_rights_for(src, R_ADMIN,0)) // admin with no mentor datum?let's fix that diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index d75ffc2347..cf68666532 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -458,3 +458,33 @@ datum/gear/darksabresheath category = SLOT_NECK path = /obj/item/clothing/neck/necklace/onion ckeywhitelist = list("cdrcross") + +/datum/gear/mikubikini + name = "starlight singer bikini" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/mikubikini + ckeywhitelist = list("grandvegeta") + +/datum/gear/mikujacket + name = "starlight singer jacket" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/mikujacket + ckeywhitelist = list("grandvegeta") + +/datum/gear/mikuhair + name = "starlight singer hair" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/head/mikuhair + ckeywhitelist = list("grandvegeta") + +/datum/gear/mikugloves + name = "starlight singer gloves" + category = SLOT_GLOVES + path = /obj/item/clothing/gloves/mikugloves + ckeywhitelist = list("grandvegeta") + +/datum/gear/mikuleggings + name = "starlight singer leggings" + category = SLOT_SHOES + path = /obj/item/clothing/shoes/sneakers/mikuleggings + ckeywhitelist = list("grandvegeta") diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm index b8f3bd1cc1..d5f2e3cbd1 100644 --- a/modular_citadel/code/modules/client/loadout/suit.dm +++ b/modular_citadel/code/modules/client/loadout/suit.dm @@ -69,6 +69,16 @@ category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/aformal +/datum/gear/coat/runed + name = "Runed winter coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/wintercoat/narsie/fake + +/datum/gear/coat/brass + name = "Brass winter coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake + /* Commented out until it is "balanced" /datum/gear/coat/sec name = "Security winter coat" diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index 72709069eb..64ed0d363d 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -103,6 +103,45 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/stripeddress +/datum/gear/sundresswhite + name = "White Sundress" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/sundresswhite + +/datum/gear/sundress + name = "Sundress" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/sundress + +/datum/gear/greendress + name = "Green Dress" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/greendress + +/datum/gear/pinkdress + name = "Pink Dress" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/pinkdress +/datum/gear/flowerdress + name = "Flower Dress" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/flowerdress + +/datum/gear/sweptskirt + name = "Swept skirt" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/sweptskirt + +/datum/gear/croptop + name = "Croptop" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/croptop + +/datum/gear/yoga + name = "Yoga Pants" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/pants/yoga + /datum/gear/kilt name = "Kilt" category = SLOT_W_UNIFORM @@ -116,7 +155,7 @@ /datum/gear/athleticshorts name = "Athletic Shorts" category = SLOT_W_UNIFORM - path = /obj/item/clothing/under/shorts + path = /obj/item/clothing/under/shorts/red /datum/gear/bjeans name = "Black Jeans" @@ -153,6 +192,26 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/pants/track +/datum/gear/rippedjeans + name = "Ripped Jeans" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/pants/jeanripped + +/datum/gear/jeanshort + name = "Jean Shorts" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/pants/jeanshort + +/datum/gear/denimskirt + name = "Denim Skirt" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/pants/denimskirt + +/datum/gear/yoga + name = "Yoga Pants" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/pants/yoga + // Pantsless Sweaters /datum/gear/turtleneck @@ -362,4 +421,4 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/stripper_green cost = 3 - + diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 29f8a113e8..eef8664fbb 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -15,7 +15,7 @@ var/arousable = TRUE var/widescreenpref = TRUE var/autostand = TRUE - var/lewdchem = FALSE + var/auto_ooc = FALSE //vore prefs var/toggleeatingnoise = TRUE @@ -54,6 +54,5 @@ datum/preferences/copy_to(mob/living/carbon/human/character, icon_updates = 1) character.give_genitals(TRUE) character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially character.canbearoused = arousable - character.client?.prefs.lewdchem = lewdchem if(icon_updates) character.update_genitals() diff --git a/modular_citadel/code/modules/clothing/clothing.dm b/modular_citadel/code/modules/clothing/clothing.dm deleted file mode 100644 index 843b7a84c9..0000000000 --- a/modular_citadel/code/modules/clothing/clothing.dm +++ /dev/null @@ -1,91 +0,0 @@ -/* // -// GLOBALIZED POLYCHROME FOR ALL CLOTHING // -// // -// NOTICE: POLYCHROME STUFF MUST USE ALTERNATE_WORN_ICON AND PLACE THEIR OVERLAYS IN BOTH THE ICON AND ALTERNATE_WORN_ICON // -// // -*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// COPYPASTE THE FOLLOWING PROC TO WHATEVER CATERGORY OF CLOTHING YOU WANT TO POLYCHROME - -// THIS IS REQUIRED DUE TO EACH CLOTHING CATEGORY HAVING A SNOWFLAKE WORN_OVERLAYS() THING - -// Don't forget to append the appropriate typepath! Also, refer to polychromic_clothes.dm for example implementations - -/* -/obj/item/clothing/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon - . = ..() - if(hasprimary | hassecondary | hastertiary) - if(!isinhands) //prevents the worn sprites from showing up if you're just holding them - if(hasprimary) //checks if overlays are enabled - var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection - primary_worn.color = primary_color //colors the overlay - . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. - if(hassecondary) - var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary") - secondary_worn.color = secondary_color - . += secondary_worn - if(hastertiary) - var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary") - tertiary_worn.color = tertiary_color - . += tertiary_worn -*/ - -/obj/item/clothing/ - var/hasprimary = FALSE //These vars allow you to choose which overlays a clothing has - var/hassecondary = FALSE - var/hastertiary = FALSE - var/primary_color = "#FFFFFF" //RGB in hexcode - var/secondary_color = "#FFFFFF" - var/tertiary_color = "#808080" - - var/force_alternate_icon = FALSE - -/obj/item/clothing/update_icon() // picks the colored overlays from the ICON file - ..() - if(hasprimary) //Checks if the overlay is enabled - var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary") //Automagically picks overlays - primary_overlay.color = primary_color //Colors the greyscaled overlay - add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite. - if(hassecondary) - var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary") - secondary_overlay.color = secondary_color - add_overlay(secondary_overlay) - if(hastertiary) - var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary") - tertiary_overlay.color = tertiary_color - add_overlay(tertiary_overlay) - -/obj/item/clothing/AltClick(mob/living/user) - . = ..() - if(hasprimary | hassecondary | hastertiary) - var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays - switch(choice) //Lets the list's options actually lead to something - if("Primary Color") - var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. - if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. - primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly - update_icon() //updates the item icon - user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works. - if("Secondary Color") - var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null - if(secondary_color_input) - secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - if("Tertiary Color") - var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null - if(tertiary_color_input) - tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.regenerate_icons() - return TRUE - -/obj/item/clothing/examine(mob/user) - . = ..() - if(hasprimary | hassecondary | hastertiary) - . += "Alt-click to recolor it." - -/obj/item/clothing/Initialize() - ..() - if(hasprimary | hassecondary | hastertiary) - update_icon() //Applies the overlays and default colors onto the clothes on spawn. \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 274a345369..3d88dae26c 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -510,3 +510,49 @@ icon_state = "onion" item_state = "onion" alternate_worn_icon = 'icons/mob/custom_w.dmi' + +/obj/item/clothing/under/mikubikini + name = "starlight singer bikini" + desc = " " + icon_state = "mikubikini" + item_state = "mikubikini" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/suit/mikujacket + name = "starlight singer jacket" + desc = " " + icon_state = "mikujacket" + item_state = "mikujacket" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/head/mikuhair + name = "starlight singer hair" + desc = " " + icon_state = "mikuhair" + item_state = "mikuhair" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + flags_inv = HIDEHAIR + +/obj/item/clothing/gloves/mikugloves + name = "starlight singer gloves" + desc = " " + icon_state = "mikugloves" + item_state = "mikugloves" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/shoes/sneakers/mikuleggings + name = "starlight singer leggings" + desc = " " + icon_state = "mikuleggings" + item_state = "mikuleggings" + icon = 'icons/obj/custom.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION diff --git a/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm b/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm deleted file mode 100644 index f1b5d622bc..0000000000 --- a/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/reagent_containers/food/snacks/carpmeat/aquatic - name = "fillet" - desc = "A fillet of one of the local water dwelling species." - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc - icon = 'modular_citadel/icons/obj/foods.dmi' - icon_state = "ipcmeat" - desc = "Gross robot meat." - filling_color = "#000000" - tastes = list("metal" = 1) - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect - desc = "Tastes like chicken, that's... not what it is!" - icon = 'modular_citadel/icons/obj/foods.dmi' - icon_state = "mothmeat" - filling_color = "#BF896B" - tastes = list("insects" = 1) - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian - desc = "Tastes like chicken, that's because it is!" - icon = 'modular_citadel/icons/obj/foods.dmi' - icon_state = "birdmeat" - filling_color = "#BF896B" - tastes = list("chicken" = 1) - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal - desc = "Tastes sweet... reminds you vaguely of chicken." - filling_color = "#6B8E23" - tastes = list("brains" = 1, "meat" = 1) diff --git a/modular_citadel/code/modules/mentor/follow.dm b/modular_citadel/code/modules/mentor/follow.dm index 6695155ad0..5da3ce4726 100644 --- a/modular_citadel/code/modules/mentor/follow.dm +++ b/modular_citadel/code/modules/mentor/follow.dm @@ -1,16 +1,18 @@ /client/proc/mentor_follow(mob/living/M) if(!is_mentor()) return - if(isnull(M)) - return - if(!ismob(usr)) - return - mentor_datum.following = M - usr.reset_perspective(M) - verbs += /client/proc/mentor_unfollow - to_chat(GLOB.admins, "MENTOR: [key_name(usr)] is now following [key_name(M)]") - to_chat(usr, "Click the \"Stop Following\" button in the Mentor tab to stop following [key_name(M)].") - log_mentor("[key_name(usr)] began following [key_name(M)]") + var/orbiting = TRUE + if(!isobserver(usr)) + mentor_datum.following = M + usr.reset_perspective(M) + verbs += /client/proc/mentor_unfollow + to_chat(usr, "Click the \"Stop Following\" button here or in the Mentor tab to stop following [key_name(M)].") + orbiting = FALSE + else + var/mob/dead/observer/O = usr + O.ManualFollow(M) + to_chat(GLOB.admins, "MENTOR: [key_name(usr)] is now [orbiting ? "orbiting" : "following"] [key_name(M)][key_name(M)][orbiting ? " as a ghost" : ""].") + log_mentor("[key_name(usr)] [orbiting ? "is now orbiting" : "began following"][key_name(M)][orbiting ? " as a ghost" : ""].") /client/proc/mentor_unfollow() set category = "Mentor" @@ -21,6 +23,6 @@ return usr.reset_perspective() verbs -= /client/proc/mentor_unfollow - to_chat(GLOB.admins, "MENTOR: [key_name(usr)] is no longer following [key_name(mentor_datum.following)]") - log_mentor("[key_name(usr)] stopped following [key_name(mentor_datum.following)]") + to_chat(GLOB.admins, "MENTOR: [key_name(usr)] is no longer following [key_name(mentor_datum.following)].") + log_mentor("[key_name(usr)] stopped following [key_name(mentor_datum.following)].") mentor_datum.following = null \ No newline at end of file diff --git a/modular_citadel/code/modules/mentor/mentorhelp.dm b/modular_citadel/code/modules/mentor/mentorhelp.dm index 87b05a3f26..eb2b8546da 100644 --- a/modular_citadel/code/modules/mentor/mentorhelp.dm +++ b/modular_citadel/code/modules/mentor/mentorhelp.dm @@ -19,7 +19,7 @@ log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]") for(var/client/X in GLOB.mentors | GLOB.admins) - X << 'sound/items/bikehorn.ogg' + SEND_SOUND(X, 'sound/items/bikehorn.ogg') to_chat(X, mentor_msg) to_chat(src, "PM to-Mentors: [msg]") diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm index 7e7a77538a..d0ad0d3232 100644 --- a/modular_citadel/code/modules/mob/cit_emotes.dm +++ b/modular_citadel/code/modules/mob/cit_emotes.dm @@ -70,113 +70,124 @@ message = "makes a very loud noise." . = ..() -/datum/emote/sound/carbon/snap - key = "snap" - key_third_person = "snaps" - muzzle_ignore = TRUE - restraint_check = TRUE - emote_type = EMOTE_AUDIBLE - sound = 'sound/effects/snap01.ogg' - mob_type_allowed_typecache = list(/mob/living/carbon/) - - /datum/emote/living/snap key = "snap" key_third_person = "snaps" message = "snaps their fingers." emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + restraint_check = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/snap/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/snap.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/snap.ogg', 50, 1, -1) /datum/emote/living/snap2 key = "snap2" key_third_person = "snaps twice" message = "snaps twice." emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + restraint_check = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/snap2/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/snap2.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/snap2.ogg', 50, 1, -1) /datum/emote/living/snap3 key = "snap3" key_third_person = "snaps thrice" message = "snaps thrice." emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + restraint_check = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/snap3/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/snap3.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/snap3.ogg', 50, 1, -1) /datum/emote/living/awoo key = "awoo" key_third_person = "lets out an awoo" message = "lets out an awoo!" emote_type = EMOTE_AUDIBLE + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/awoo/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/awoo.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/awoo.ogg', 50, 1, -1) /datum/emote/living/nya key = "nya" key_third_person = "lets out a nya" message = "lets out a nya!" emote_type = EMOTE_AUDIBLE + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/nya/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/nya.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/nya.ogg', 50, 1, -1) /datum/emote/living/weh key = "weh" key_third_person = "lets out a weh" message = "lets out a weh!" emote_type = EMOTE_AUDIBLE + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/weh/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/weh.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/weh.ogg', 50, 1, -1) /datum/emote/living/peep key = "peep" key_third_person = "peeps like a bird" message = "peeps like a bird!" emote_type = EMOTE_AUDIBLE + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/peep/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/peep.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/peep.ogg', 50, 1, -1) /datum/emote/living/dab key = "dab" @@ -190,41 +201,49 @@ key_third_person = "lets out a tiny squeak" message = "lets out a tiny squeak!" emote_type = EMOTE_AUDIBLE - mob_type_allowed_typecache = list(/mob/living/carbon) + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/mothsqueak/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/mothsqueak.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/mothsqueak.ogg', 50, 1, -1) /datum/emote/living/merp key = "merp" key_third_person = "merps" message = "merps!" emote_type = EMOTE_AUDIBLE + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/merp/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - playsound(user, 'modular_citadel/sound/voice/merp.ogg', 50, 1, -1) - . = ..() + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + playsound(user, 'modular_citadel/sound/voice/merp.ogg', 50, 1, -1) /datum/emote/living/bark key = "bark" key_third_person = "barks" message = "barks!" emote_type = EMOTE_AUDIBLE + muzzle_ignore = FALSE + restraint_check = FALSE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/bark/run_emote(mob/living/user, params) - if(ishuman(user)) - if(user.nextsoundemote >= world.time) - return - user.nextsoundemote = world.time + 7 - var/sound = pick('modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg') - playsound(user, sound, 50, 1, -1) - . = ..() \ No newline at end of file + if(!(. = ..())) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 7 + var/sound = pick('modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg') + playsound(user, sound, 50, 1, -1) diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm index 1c6b957d9f..34ea0e789f 100644 --- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm +++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm @@ -41,18 +41,16 @@ playsound_local(src, 'sound/misc/ui_toggleoff.ogg', 50, FALSE, pressure_affected = FALSE) //Slightly modified version of the above! if(client) client.show_popup_menus = !combatmode // So we can right-click for alternate actions and all that other good shit. Also moves examine to shift+rightclick to make it possible to attack while sprinting - if(hud_used && hud_used.static_inventory) - for(var/obj/screen/combattoggle/selector in hud_used.static_inventory) - selector.rebasetointerbay(src) + var/obj/screen/combattoggle/T = locate() in hud_used?.static_inventory + T?.update_icon_state() combatmessagecooldown = 10 SECONDS + world.time //This is set 100% of the time to make sure squeezing regen out of process cycles doesn't result in the combat mode message getting spammed SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode) return TRUE mob/living/carbon/proc/toggle_vore_mode() voremode = !voremode - if(hud_used && hud_used.static_inventory) - for(var/obj/screen/voretoggle/selector in hud_used.static_inventory) - selector.rebaseintomygut(src) + var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory + T?.update_icon_state() if(combatmode) return FALSE //let's not override the main draw of the game these days SEND_SIGNAL(src, COMSIG_VORE_TOGGLED, src, voremode) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm index 15e08907d5..0b6903c9fe 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm @@ -1,6 +1,3 @@ -/mob/living/carbon/human - var/sprinting = FALSE - /mob/living/carbon/human/Move(NewLoc, direct) var/oldpseudoheight = pseudo_z_axis . = ..() @@ -28,9 +25,8 @@ playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE) else playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE) - if(hud_used && hud_used.static_inventory) - for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory) - selector.insert_witty_toggle_joke_here(src) + var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory + S?.update_icon_state() return TRUE /mob/living/carbon/human/proc/sprint_hotkey(targetstatus) diff --git a/modular_citadel/code/modules/mob/living/living.dm b/modular_citadel/code/modules/mob/living/living.dm index 16bf776171..513a80cae0 100644 --- a/modular_citadel/code/modules/mob/living/living.dm +++ b/modular_citadel/code/modules/mob/living/living.dm @@ -1,4 +1,5 @@ /mob/living + var/sprinting = FALSE var/recoveringstam = FALSE var/incomingstammult = 1 var/bufferedstam = 0 diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm deleted file mode 100644 index 368abc6335..0000000000 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm +++ /dev/null @@ -1,60 +0,0 @@ -/obj/item/robot_module/loader - name = "loader robot module" -/obj/item/robot_module/loader/New() - ..() - emag = new /obj/item/borg/stun(src) - modules += new /obj/item/extinguisher(src) - modules += new /obj/item/weldingtool/largetank/cyborg(src) - modules += new /obj/item/screwdriver(src) - modules += new /obj/item/wrench(src) - modules += new /obj/item/crowbar(src) - modules += new /obj/item/wirecutters(src) - modules += new /obj/item/multitool(src) - modules += new /obj/item/t_scanner(src) - modules += new /obj/item/analyzer(src) - modules += new /obj/item/assembly/signaler - modules += new /obj/item/soap/nanotrasen(src) - - fix_modules() - -/obj/item/robot_module/k9 - name = "Security K-9 Unit module" -/obj/item/robot_module/k9/New() - ..() - modules += new /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog(src) - modules += new /obj/item/dogborg/jaws/big(src) - modules += new /obj/item/dogborg/pounce(src) - modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) - modules += new /obj/item/soap/tongue(src) - modules += new /obj/item/analyzer/nose(src) - modules += new /obj/item/storage/bag/borgdelivery(src) - //modules += new /obj/item/assembly/signaler(src) - //modules += new /obj/item/detective_scanner(src) - modules += new /obj/item/gun/energy/disabler/cyborg(src) - emag = new /obj/item/gun/energy/laser/cyborg(src) - fix_modules() - -/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/gun/energy/gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/gun/advtaser/cyborg) in get_usable_modules() - if(T) - if(T.power_supply.charge < T.power_supply.maxcharge) - var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select] - T.power_supply.give(S.e_cost * coeff) - T.update_icon() - else - T.charge_tick = 0 - fix_modules() - -/obj/item/robot_module/borgi - name = "Borgi module" - -/obj/item/robot_module/borgi/New() - ..() - modules += new /obj/item/dogborg/jaws/small(src) - modules += new /obj/item/storage/bag/borgdelivery(src) - modules += new /obj/item/soap/tongue(src) - modules += new /obj/item/healthanalyzer(src) - modules += new /obj/item/analyzer/nose(src) - emag = new /obj/item/dogborg/pounce(src) - fix_modules() \ No newline at end of file diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index a1466f58d4..98de5eed14 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -424,12 +424,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! if(A) if(isliving(A)) var/mob/living/L = A - var/blocked = 0 - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(H.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK)) - blocked = 1 - if(!blocked) + if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK)) L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice. playsound(src, 'sound/weapons/Egloves.ogg', 50, 1) diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm index 59630186d1..3f88513372 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -1,6 +1,3 @@ -/mob/living/silicon/robot - var/sprinting = FALSE - /mob/living/silicon/robot/Move(NewLoc, direct) . = ..() if(. && sprinting && !(movement_type & FLYING) && canmove && !resting) @@ -24,9 +21,8 @@ if(shutdown) playsound_local(src, 'sound/effects/light_flicker.ogg', 50, FALSE, pressure_affected = FALSE) playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE) - if(hud_used && hud_used.static_inventory) - for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory) - selector.insert_witty_toggle_joke_here(src) + var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory + S?.update_icon_state() return TRUE /mob/living/silicon/robot/proc/sprint_hotkey(targetstatus) diff --git a/modular_citadel/code/modules/mob/mob.dm b/modular_citadel/code/modules/mob/mob.dm deleted file mode 100644 index 2d08299320..0000000000 --- a/modular_citadel/code/modules/mob/mob.dm +++ /dev/null @@ -1,27 +0,0 @@ -/mob/proc/use_that_empty_hand() //currently unused proc so i can implement 2-handing any item a lot easier in the future. - return - -/mob/say_mod(input, message_mode) - var/customsayverb = findtext(input, "*") - if(customsayverb && message_mode != MODE_WHISPER_CRIT) - message_mode = MODE_CUSTOM_SAY - return lowertext(copytext(input, 1, customsayverb)) - else - return ..() - -/atom/movable/proc/attach_spans(input, list/spans) - var/customsayverb = findtext(input, "*") - if(customsayverb) - input = capitalize(copytext(input, customsayverb+1)) - if(input) - return "[message_spans_start(spans)][input]" - else - return - -/mob/living/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE, atom/movable/source) - . = ..() - if(isliving(speaker)) - var/turf/sourceturf = get_turf(source) - var/turf/T = get_turf(src) - if(sourceturf && T && !(sourceturf in get_hear(5, T))) - . = "[.]" diff --git a/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm b/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm index b039eb9b42..8cb56803b1 100644 --- a/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ b/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm @@ -50,7 +50,7 @@ category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -/datum/design/m45 //Kinda NT in throey +/datum/design/m45 //Kinda NT in theory name = "handgun magazine (.45)" id = "m45" build_type = PROTOLATHE @@ -68,3 +68,13 @@ build_path = /obj/item/ammo_box/magazine/pistolm9mm category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/sl357 + name = "revolver speedloader (.357)" + desc = "A revolver speedloader." + id = "sl357" + build_type = PROTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/a357 + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm index d16df6b285..b70858c9af 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm @@ -5,7 +5,6 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state= "spinner" damage = 30 - dismemberment = 25 /obj/item/projectile/bullet/spinfusor/on_hit(atom/target, blocked = FALSE) //explosion to emulate the spinfusor's AOE ..() @@ -14,22 +13,16 @@ /obj/item/ammo_casing/caseless/spinfusor name = "spinfusor disk" - desc = "A magnetic disk designed specifically for the Stormhammer magnetic cannon. Warning: extremely volatile!" + desc = "A magnetic disk designed specifically for the Stormhammer magnetic cannon. Packs a punch." projectile_type = /obj/item/projectile/bullet/spinfusor caliber = "spinfusor" icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "disk" + w_class = WEIGHT_CLASS_SMALL throwforce = 15 //still deadly when thrown + force = 5 throw_speed = 3 -/obj/item/ammo_casing/caseless/spinfusor/throw_impact(atom/target) //disks detonate when thrown - if(!..()) // not caught in mid-air - visible_message("[src] detonates!") - playsound(src.loc, "sparks", 50, 1) - explosion(target, -1, -1, 1, 1, -1) - qdel(src) - return 1 - /obj/item/ammo_box/magazine/internal/spinfusor name = "spinfusor internal magazine" ammo_type = /obj/item/ammo_casing/caseless/spinfusor @@ -71,7 +64,8 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "spinfusorbox" ammo_type = /obj/item/ammo_casing/caseless/spinfusor - max_ammo = 8 + w_class = WEIGHT_CLASS_NORMAL + max_ammo = 4 /datum/supply_pack/security/armory/spinfusor name = "Stormhammer Spinfusor Crate" @@ -84,7 +78,5 @@ name = "Spinfusor Disk Crate" cost = 7000 contains = list(/obj/item/ammo_box/aspinfusor, - /obj/item/ammo_box/aspinfusor, - /obj/item/ammo_box/aspinfusor, /obj/item/ammo_box/aspinfusor) - crate_name = "spinfusor disk crate" \ No newline at end of file + crate_name = "spinfusor disk crate" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm index 35d13b3aa6..65c652434b 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm @@ -170,6 +170,9 @@ Creating a chem with a low purity will make you permanently fall in love with so /datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M) . = ..() + if(M.client?.prefs.cit_toggles & NEVER_HYPNO) // Just in case people are opting out of this + holder.remove_reagent(id, 10000000) + return if(!ishuman(M))//Just to make sure screwy stuff doesn't happen. return if(!creatorID) @@ -183,7 +186,7 @@ Creating a chem with a low purity will make you permanently fall in love with so E.enthrallID = creatorID E.enthrallGender = creatorGender E.master = get_mob_by_key(creatorID) - to_chat(M, to_chat(M, "Your aldled, plastic, mind bends under the chemical influence of a new [(M.client?.prefs.lewdchem?"master":"leader")]. Your highest priority is now to stay by [creatorName]'s side, following and aiding them at all costs.")) //THIS SHOULD ONLY EVER APPEAR IF YOU MINDBREAK YOURSELF AND THEN GET INJECTED FROM SOMEONE ELSE. + to_chat(M, "Your addled, plastic, mind bends under the chemical influence of a new [(E.lewd?"master":"leader")]. Your highest priority is now to stay by [creatorName]'s side, following and aiding them at all costs.") //THIS SHOULD ONLY EVER APPEAR IF YOU MINDBREAK YOURSELF AND THEN GET INJECTED FROM SOMEONE ELSE. log_game("FERMICHEM: Narcissist [M] ckey: [M.key] been rebound to [creatorName], ID: [creatorID]") return if((M.ckey == creatorID) && (creatorName == M.real_name)) //same name AND same player - same instance of the player. (should work for clones?) @@ -194,7 +197,7 @@ Creating a chem with a low purity will make you permanently fall in love with so Vc.Remove(M) nVc.Insert(M) qdel(Vc) - to_chat(M, "You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.)]") + to_chat(M, "You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.") else log_game("FERMICHEM: MKUltra: [creatorName], [creatorID], is enthralling [M.name], [M.ckey]") M.apply_status_effect(/datum/status_effect/chem/enthrall) @@ -230,7 +233,6 @@ Creating a chem with a low purity will make you permanently fall in love with so M.reagents.remove_reagent(id, volume) FallInLove(C, M) return - if (M.ckey == creatorID && creatorName == M.real_name)//If you yourself drink it, it supresses the vocal effects, for stealth. NEVERMIND ADD THIS LATER I CAN'T GET IT TO WORK return if(!M.client) @@ -261,7 +263,7 @@ Creating a chem with a low purity will make you permanently fall in love with so E.master = creator else E = M.has_status_effect(/datum/status_effect/chem/enthrall) - if(M.client?.prefs.lewdchem) + if(E.lewd) to_chat(M, "Your mind shatters under the volume of the mild altering chem inside of you, breaking all will and thought completely. Instead the only force driving you now is the instinctual desire to obey and follow [creatorName]. Your highest priority is now to stay by their side and protect them at all costs.") else to_chat(M, "The might volume of chemicals in your system overwhelms your mind, and you suddenly agree with what [creatorName] has been saying. Your highest priority is now to stay by their side and protect them at all costs.") @@ -288,6 +290,7 @@ Creating a chem with a low purity will make you permanently fall in love with so chemical_flags = REAGENT_DONOTSPLIT can_synth = FALSE var/mob/living/carbon/love + var/lewd = FALSE /datum/reagent/fermi/enthrallExplo/on_mob_life(mob/living/carbon/M)//Love gas, only affects while it's in your system,Gives a positive moodlet if close, gives brain damagea and a negative moodlet if not close enough. if(HAS_TRAIT(M, TRAIT_MINDSHIELD)) @@ -303,24 +306,25 @@ Creating a chem with a low purity will make you permanently fall in love with so if(!love) return M.apply_status_effect(STATUS_EFFECT_INLOVE, love) - to_chat(M, "[(M.client?.prefs.lewdchem?"":"")][(M.client?.prefs.lewdchem?"You develop a sudden crush on [love], your heart beginning to race as you look upon them with new eyes.":"You suddenly feel like making friends with [love].")] You feel strangely drawn towards them.") + lewd = (M.client?.prefs.cit_toggles & HYPNO) && (love.client?.prefs.cit_toggles & HYPNO) + to_chat(M, "[(lewd?"":"")][(lewd?"You develop a sudden crush on [love], your heart beginning to race as you look upon them with new eyes.":"You suddenly feel like making friends with [love].")] You feel strangely drawn towards them.") log_game("FERMICHEM: [M] ckey: [M.key] has temporarily bonded with [love] ckey: [love.key]") SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times people have bonded") else if(get_dist(M, love) < 8) if(HAS_TRAIT(M, TRAIT_NYMPHO)) //Add this back when merged/updated. M.adjustArousalLoss(5) - var/message = "[(M.client?.prefs.lewdchem?"I'm next to my crush..! Eee!":"I'm making friends with [love]!")]" + var/message = "[(lewd?"I'm next to my crush..! Eee!":"I'm making friends with [love]!")]" SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "InLove", /datum/mood_event/InLove, message) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "MissingLove") else - var/message = "[(M.client?.prefs.lewdchem?"I can't keep my crush off my mind, I need to see them again!":"I really want to make friends with [love]!")]" + var/message = "[(lewd?"I can't keep my crush off my mind, I need to see them again!":"I really want to make friends with [love]!")]" SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "MissingLove", /datum/mood_event/MissingLove, message) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "InLove") if(prob(5)) M.Stun(10) M.emote("whimper")//does this exist? - to_chat(M, "[(M.client?.prefs.lewdchem?"":"")] You're overcome with a desire to see [love].") + to_chat(M, "[(lewd?"":"")] You're overcome with a desire to see [love].") M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5)//I found out why everyone was so damaged! ..() @@ -330,7 +334,7 @@ Creating a chem with a low purity will make you permanently fall in love with so M.remove_status_effect(STATUS_EFFECT_INLOVE) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "InLove") SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "MissingLove") - to_chat(M, "[(M.client?.prefs.lewdchem?"":"")]Your feelings for [love] suddenly vanish!") + to_chat(M, "[(lewd?"":"")]Your feelings for [love] suddenly vanish!") log_game("FERMICHEM: [M] ckey: [M.key] is no longer in temp bond") ..() @@ -338,7 +342,8 @@ Creating a chem with a low purity will make you permanently fall in love with so if(Lover.has_status_effect(STATUS_EFFECT_INLOVE)) to_chat(Lover, "You are already fully devoted to someone else!") return - to_chat(Lover, "[(Lover.client?.prefs.lewdchem?"":"")]You develop a deep and sudden bond with [Love][(Lover.client?.prefs.lewdchem?", your heart beginning to race as your mind filles with thoughts about them.":".")] You are determined to keep them safe and happy, and feel drawn towards them.") + var/lewd = (Lover.client?.prefs.cit_toggles & HYPNO) && (Love.client?.prefs.cit_toggles & HYPNO) + to_chat(Lover, "[(lewd?"":"")]You develop a deep and sudden bond with [Love][(lewd?", your heart beginning to race as your mind filles with thoughts about them.":".")] You are determined to keep them safe and happy, and feel drawn towards them.") if(Lover.mind) Lover.mind.store_memory("You are in love with [Love].") Lover.faction |= "[REF(Love)]" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index d7ff42a9eb..7e094eddda 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -54,7 +54,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die /datum/reagent/fermi/astral/reaction_turf(turf/T, reac_volume) if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) var/turf/open/floor/F = T - F.PlaceOnTop(/turf/open/floor/fakespace) + F.PlaceOnTop(/turf/open/floor/fakespace, flags = CHANGETURF_INHERIT_AIR) ..() /datum/reagent/fermi/astral/reaction_obj(obj/O, reac_volume) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm index 7d358b4149..6732fb06a5 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -56,8 +56,8 @@ var/mob/living/carbon/human/H = M var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS) - //If they have Acute hepatic pharmacokinesis, then route processing though liver. - if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused) + //If they've opted out, then route processing though liver. + if(!(H.client?.prefs.cit_toggles & BREAST_ENLARGEMENT)) var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) if(L) L.swelling += 0.05 @@ -94,9 +94,7 @@ return ..() /datum/reagent/fermi/breast_enlarger/overdose_process(mob/living/carbon/M) //Turns you into a female if male and ODing, doesn't touch nonbinary and object genders. - - //Acute hepatic pharmacokinesis. - if(HAS_TRAIT(M, TRAIT_PHARMA) || !M.canbearoused) + if(!(M.client?.prefs.cit_toggles & FORCED_FEM)) var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER) L.swelling+= 0.05 return ..() @@ -133,15 +131,10 @@ /datum/reagent/fermi/BEsmaller/on_mob_life(mob/living/carbon/M) var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS) - if(!B) - //Acute hepatic pharmacokinesis. - if(HAS_TRAIT(M, TRAIT_PHARMA) || !M.canbearoused) - var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER) - L.swelling-= 0.05 - return ..() - - //otherwise proceed as normal - return..() + if(!(M.client?.prefs.cit_toggles & BREAST_ENLARGEMENT) || !B) + var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER) + L.swelling-= 0.05 + return ..() B.modify_size(-0.05) return ..() @@ -221,8 +214,7 @@ return ..() var/mob/living/carbon/human/H = M var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) - //If they have Acute hepatic pharmacokinesis, then route processing though liver. - if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused) + if(!(H.client?.prefs.cit_toggles & PENIS_ENLARGEMENT)) var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) if(L) L.swelling += 0.05 @@ -252,8 +244,7 @@ /datum/reagent/fermi/penis_enlarger/overdose_process(mob/living/carbon/human/M) //Turns you into a male if female and ODing, doesn't touch nonbinary and object genders. if(!istype(M)) return ..() - //Acute hepatic pharmacokinesis. - if(HAS_TRAIT(M, TRAIT_PHARMA) || !M.canbearoused) + if(!(M.client?.prefs.cit_toggles & FORCED_MASC)) var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER) L.swelling+= 0.05 return..() @@ -292,11 +283,9 @@ return ..() var/mob/living/carbon/human/H = M var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) - if(!P) - //Acute hepatic pharmacokinesis. - if(HAS_TRAIT(M, TRAIT_PHARMA)) - var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER) - L.swelling-= 0.05 + if(!(H.client?.prefs.cit_toggles & PENIS_ENLARGEMENT) || !P) + var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER) + L.swelling-= 0.05 return..() P.modify_size(-0.1) diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 4dea1ef12f..f6b70eb7b6 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -14,7 +14,7 @@ /datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume) if(!istype(T)) return - if(reac_volume < 3) + if(reac_volume < 10) return var/obj/effect/decal/cleanable/semen/S = locate() in T @@ -80,7 +80,7 @@ /datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) if(!istype(T)) return - if(reac_volume < 3) + if(reac_volume < 10) return var/obj/effect/decal/cleanable/femcum/S = locate() in T @@ -100,7 +100,7 @@ color = "#FFADFF"//PINK, rgb(255, 173, 255) /datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M) - if(M && M.canbearoused && !HAS_TRAIT(M, TRAIT_CROCRIN_IMMUNE)) + if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO)) if(prob(33)) M.adjustArousalLoss(2) if(prob(5)) @@ -122,7 +122,7 @@ overdose_threshold = 20 /datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M) - if(M && M.canbearoused && !HAS_TRAIT(M, TRAIT_CROCRIN_IMMUNE)) + if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO)) if(prob(33)) M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful. if(prob(5)) @@ -154,7 +154,7 @@ ..() /datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M) - if(M && M.canbearoused && !HAS_TRAIT(M, TRAIT_CROCRIN_IMMUNE) && prob(33)) + if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO) && prob(33)) if(prob(5) && M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna()) if(prob(5)) //Less spam to_chat(M, "Your libido is going haywire!") diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi index e574766d70..7e9da953c9 100644 Binary files a/modular_citadel/icons/mob/widerobot.dmi and b/modular_citadel/icons/mob/widerobot.dmi differ diff --git a/modular_citadel/icons/obj/foods.dmi b/modular_citadel/icons/obj/foods.dmi deleted file mode 100644 index 3349da8203..0000000000 Binary files a/modular_citadel/icons/obj/foods.dmi and /dev/null differ diff --git a/modular_citadel/icons/polyclothes/item/uniform.dmi b/modular_citadel/icons/polyclothes/item/uniform.dmi deleted file mode 100644 index 87c3479a6a..0000000000 Binary files a/modular_citadel/icons/polyclothes/item/uniform.dmi and /dev/null differ diff --git a/modular_citadel/icons/polyclothes/mob/uniform.dmi b/modular_citadel/icons/polyclothes/mob/uniform.dmi deleted file mode 100644 index 15b5262bab..0000000000 Binary files a/modular_citadel/icons/polyclothes/mob/uniform.dmi and /dev/null differ diff --git a/sound/effects/bonghit.ogg b/sound/effects/bonghit.ogg new file mode 100644 index 0000000000..45a0dec1b6 Binary files /dev/null and b/sound/effects/bonghit.ogg differ diff --git a/sound/items/Nose_boop.ogg b/sound/items/Nose_boop.ogg new file mode 100644 index 0000000000..6a742e95ea Binary files /dev/null and b/sound/items/Nose_boop.ogg differ diff --git a/sound/weapons/klonk.ogg b/sound/weapons/klonk.ogg new file mode 100644 index 0000000000..471f3ad8b7 Binary files /dev/null and b/sound/weapons/klonk.ogg differ diff --git a/sound/weapons/shrink_hit.ogg b/sound/weapons/shrink_hit.ogg new file mode 100644 index 0000000000..c39c2d5269 Binary files /dev/null and b/sound/weapons/shrink_hit.ogg differ diff --git a/tgstation.dme b/tgstation.dme index e13584b7e3..7e7d69d6f1 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -43,6 +43,7 @@ #include "code\__DEFINES\diseases.dm" #include "code\__DEFINES\DNA.dm" #include "code\__DEFINES\donator_groupings.dm" +#include "code\__DEFINES\dynamic.dm" #include "code\__DEFINES\events.dm" #include "code\__DEFINES\exports.dm" #include "code\__DEFINES\fantasy_affixes.dm" @@ -108,6 +109,7 @@ #include "code\__DEFINES\typeids.dm" #include "code\__DEFINES\vehicles.dm" #include "code\__DEFINES\voreconstants.dm" +#include "code\__DEFINES\vote.dm" #include "code\__DEFINES\vv.dm" #include "code\__DEFINES\wall_dents.dm" #include "code\__DEFINES\wires.dm" @@ -118,6 +120,7 @@ #include "code\__HELPERS\areas.dm" #include "code\__HELPERS\AStar.dm" #include "code\__HELPERS\cmp.dm" +#include "code\__HELPERS\custom_holoforms.dm" #include "code\__HELPERS\dates.dm" #include "code\__HELPERS\donator_groupings.dm" #include "code\__HELPERS\files.dm" @@ -199,7 +202,6 @@ #include "code\_onclick\hud\ghost.dm" #include "code\_onclick\hud\guardian.dm" #include "code\_onclick\hud\hud.dm" -#include "code\_onclick\hud\hud_cit.dm" #include "code\_onclick\hud\human.dm" #include "code\_onclick\hud\lavaland_elite.dm" #include "code\_onclick\hud\monkey.dm" @@ -384,6 +386,8 @@ #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" #include "code\datums\components\shrapnel.dm" +#include "code\datums\components\shrink.dm" +#include "code\datums\components\sizzle.dm" #include "code\datums\components\slippery.dm" #include "code\datums\components\spooky.dm" #include "code\datums\components\squeak.dm" @@ -481,6 +485,7 @@ #include "code\datums\martial\mushpunch.dm" #include "code\datums\martial\plasma_fist.dm" #include "code\datums\martial\psychotic_brawl.dm" +#include "code\datums\martial\rising_bass.dm" #include "code\datums\martial\sleeping_carp.dm" #include "code\datums\martial\wrestling.dm" #include "code\datums\mood_events\beauty_events.dm" @@ -499,6 +504,7 @@ #include "code\datums\mutations\telekinesis.dm" #include "code\datums\ruins\lavaland.dm" #include "code\datums\ruins\space.dm" +#include "code\datums\ruins\station.dm" #include "code\datums\status_effects\buffs.dm" #include "code\datums\status_effects\debuffs.dm" #include "code\datums\status_effects\gas.dm" @@ -576,7 +582,19 @@ #include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" +#include "code\game\gamemodes\dynamic\dynamic_storytellers.dm" #include "code\game\gamemodes\extended\extended.dm" +#include "code\game\gamemodes\gangs\dominator.dm" +#include "code\game\gamemodes\gangs\dominator_countdown.dm" +#include "code\game\gamemodes\gangs\gang.dm" +#include "code\game\gamemodes\gangs\gang_datums.dm" +#include "code\game\gamemodes\gangs\gang_decals.dm" +#include "code\game\gamemodes\gangs\gang_hud.dm" +#include "code\game\gamemodes\gangs\gang_items.dm" +#include "code\game\gamemodes\gangs\gang_pen.dm" +#include "code\game\gamemodes\gangs\gangs.dm" +#include "code\game\gamemodes\gangs\gangtool.dm" +#include "code\game\gamemodes\gangs\implant_gang.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" #include "code\game\gamemodes\monkey\monkey.dm" @@ -868,6 +886,7 @@ #include "code\game\objects\items\taster.dm" #include "code\game\objects\items\teleportation.dm" #include "code\game\objects\items\teleprod.dm" +#include "code\game\objects\items\telescopic_iv.dm" #include "code\game\objects\items\theft_tools.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" @@ -1200,6 +1219,21 @@ #include "code\modules\antagonists\abductor\equipment\abduction_outfits.dm" #include "code\modules\antagonists\abductor\equipment\abduction_surgery.dm" #include "code\modules\antagonists\abductor\equipment\gland.dm" +#include "code\modules\antagonists\abductor\equipment\glands\access.dm" +#include "code\modules\antagonists\abductor\equipment\glands\blood.dm" +#include "code\modules\antagonists\abductor\equipment\glands\chem.dm" +#include "code\modules\antagonists\abductor\equipment\glands\egg.dm" +#include "code\modules\antagonists\abductor\equipment\glands\electric.dm" +#include "code\modules\antagonists\abductor\equipment\glands\heal.dm" +#include "code\modules\antagonists\abductor\equipment\glands\mindshock.dm" +#include "code\modules\antagonists\abductor\equipment\glands\plasma.dm" +#include "code\modules\antagonists\abductor\equipment\glands\quantum.dm" +#include "code\modules\antagonists\abductor\equipment\glands\slime.dm" +#include "code\modules\antagonists\abductor\equipment\glands\spider.dm" +#include "code\modules\antagonists\abductor\equipment\glands\transform.dm" +#include "code\modules\antagonists\abductor\equipment\glands\trauma.dm" +#include "code\modules\antagonists\abductor\equipment\glands\ventcrawl.dm" +#include "code\modules\antagonists\abductor\equipment\glands\viral.dm" #include "code\modules\antagonists\abductor\machinery\camera.dm" #include "code\modules\antagonists\abductor\machinery\console.dm" #include "code\modules\antagonists\abductor\machinery\dispenser.dm" @@ -1569,6 +1603,7 @@ #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\ears\_ears.dm" #include "code\modules\clothing\glasses\_glasses.dm" +#include "code\modules\clothing\glasses\disablerglasses.dm" #include "code\modules\clothing\glasses\engine_goggles.dm" #include "code\modules\clothing\glasses\hud.dm" #include "code\modules\clothing\glasses\phantomthief.dm" @@ -1634,6 +1669,7 @@ #include "code\modules\clothing\under\color.dm" #include "code\modules\clothing\under\miscellaneous.dm" #include "code\modules\clothing\under\pants.dm" +#include "code\modules\clothing\under\polychromic_clothes.dm" #include "code\modules\clothing\under\shorts.dm" #include "code\modules\clothing\under\syndicate.dm" #include "code\modules\clothing\under\trek.dm" @@ -1762,6 +1798,7 @@ #include "code\modules\food_and_drinks\kitchen_machinery\deep_fryer.dm" #include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" #include "code\modules\food_and_drinks\kitchen_machinery\gibber.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\grill.dm" #include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" #include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm" #include "code\modules\food_and_drinks\kitchen_machinery\monkeyrecycler.dm" @@ -2075,6 +2112,7 @@ #include "code\modules\mob\living\say.dm" #include "code\modules\mob\living\status_procs.dm" #include "code\modules\mob\living\taste.dm" +#include "code\modules\mob\living\update_icons.dm" #include "code\modules\mob\living\ventcrawling.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_item.dm" @@ -2181,6 +2219,7 @@ #include "code\modules\mob\living\carbon\monkey\monkey_defense.dm" #include "code\modules\mob\living\carbon\monkey\punpun.dm" #include "code\modules\mob\living\carbon\monkey\update_icons.dm" +#include "code\modules\mob\living\silicon\custom_holoform.dm" #include "code\modules\mob\living\silicon\damage_procs.dm" #include "code\modules\mob\living\silicon\death.dm" #include "code\modules\mob\living\silicon\examine.dm" @@ -2212,6 +2251,7 @@ #include "code\modules\mob\living\silicon\pai\personality.dm" #include "code\modules\mob\living\silicon\pai\say.dm" #include "code\modules\mob\living\silicon\pai\software.dm" +#include "code\modules\mob\living\silicon\pai\update_icon.dm" #include "code\modules\mob\living\silicon\robot\death.dm" #include "code\modules\mob\living\silicon\robot\emote.dm" #include "code\modules\mob\living\silicon\robot\examine.dm" @@ -3025,21 +3065,7 @@ #include "modular_citadel\code\datums\status_effects\chems.dm" #include "modular_citadel\code\datums\status_effects\debuffs.dm" #include "modular_citadel\code\datums\wires\autoylathe.dm" -#include "modular_citadel\code\game\gamemodes\gangs\dominator.dm" -#include "modular_citadel\code\game\gamemodes\gangs\dominator_countdown.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_datums.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_decals.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_hud.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_items.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_pen.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gangs.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gangtool.dm" -#include "modular_citadel\code\game\gamemodes\gangs\implant_gang.dm" -#include "modular_citadel\code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" -#include "modular_citadel\code\game\gamemodes\revolution\revolution.dm" #include "modular_citadel\code\game\machinery\displaycases.dm" -#include "modular_citadel\code\game\machinery\firealarm.dm" #include "modular_citadel\code\game\machinery\Sleeper.dm" #include "modular_citadel\code\game\machinery\toylathe.dm" #include "modular_citadel\code\game\machinery\vending.dm" @@ -3094,19 +3120,16 @@ #include "modular_citadel\code\modules\client\loadout\suit.dm" #include "modular_citadel\code\modules\client\loadout\uniform.dm" #include "modular_citadel\code\modules\client\verbs\who.dm" -#include "modular_citadel\code\modules\clothing\clothing.dm" #include "modular_citadel\code\modules\clothing\neck.dm" #include "modular_citadel\code\modules\clothing\spacesuits\flightsuit.dm" #include "modular_citadel\code\modules\clothing\suits\polychromic_cloaks.dm" #include "modular_citadel\code\modules\clothing\suits\suits.dm" -#include "modular_citadel\code\modules\clothing\under\polychromic_clothes.dm" #include "modular_citadel\code\modules\clothing\under\trek_under.dm" #include "modular_citadel\code\modules\clothing\under\turtlenecks.dm" #include "modular_citadel\code\modules\clothing\under\under.dm" #include "modular_citadel\code\modules\custom_loadout\custom_items.dm" #include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm" #include "modular_citadel\code\modules\custom_loadout\read_from_file.dm" -#include "modular_citadel\code\modules\food_and_drinks\snacks\meat.dm" #include "modular_citadel\code\modules\integrated_electronics\subtypes\manipulation.dm" #include "modular_citadel\code\modules\mentor\follow.dm" #include "modular_citadel\code\modules\mentor\mentor.dm" @@ -3116,7 +3139,6 @@ #include "modular_citadel\code\modules\mentor\mentorpm.dm" #include "modular_citadel\code\modules\mentor\mentorsay.dm" #include "modular_citadel\code\modules\mob\cit_emotes.dm" -#include "modular_citadel\code\modules\mob\mob.dm" #include "modular_citadel\code\modules\mob\living\damage_procs.dm" #include "modular_citadel\code\modules\mob\living\living.dm" #include "modular_citadel\code\modules\mob\living\carbon\carbon.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 531f0ded4e..cc0b5d198f 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -6,16 +6,16 @@ try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t) return t.docFrag.appendChild(e.render())}),this.renderedFragments=this.fragments.slice(),this.fragmentsToRender=[],this.rendered=!0,this.docFrag}function Ze(t){var e,n,a=this;this.updating||(this.updating=!0,this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),this.fragmentsToCreate.length?(n={template:this.template.f||[],root:this.root,pElement:this.pElement,owner:this},this.fragmentsToCreate.forEach(function(t){var e;n.context=a.keypath.join(t),n.index=t,e=new rg(n),a.fragmentsToRender.push(a.fragments[t]=e)}),this.fragmentsToCreate.length=0):en(this,t)&&(this.bubble(),this.rendered&&bs.addView(this)),this.value=t,this.updating=!1)}function tn(t,e,n){if(e===Bu&&t.indexRefs&&t.indexRefs[0]){var a=t.indexRefs[0];(n&&"i"===a.t||!n&&"k"===a.t)&&(n||(t.length=0,t.fragmentsToUnrender=t.fragments.slice(0),t.fragmentsToUnrender.forEach(function(t){return t.unbind()}))),a.t=n?"k":"i"}t.currentSubtype=e}function en(t,e){var n={template:t.template.f||[],root:t.root,pElement:t.parentFragment.pElement,owner:t};if(t.hasContext=!0,t.subtype)switch(t.subtype){case Fu:return t.hasContext=!1,sn(t,e,!1,n);case Iu:return t.hasContext=!1,sn(t,e,!0,n);case Uu:return on(t,n);case Vu:return rn(t,e,n);case Bu:if(u(e))return tn(t,t.subtype,!0),an(t,e,n)}return t.ordered=!!o(e),t.ordered?(tn(t,Bu,!1),nn(t,e,n)):u(e)||"function"==typeof e?t.template.i?(tn(t,Bu,!0),an(t,e,n)):(tn(t,Uu,!1),on(t,n)):(tn(t,Fu,!1),t.hasContext=!1,sn(t,e,!1,n))}function nn(t,e,n){var a,r,i;if(r=e.length,r===t.length)return!1;if(rt.length)for(a=t.length;r>a;a+=1)n.context=t.keypath.join(a),n.index=a,i=new rg(n),t.fragmentsToRender.push(t.fragments[a]=i);return t.length=r,!0}function an(t,e,n){var a,r,i,o,s,p;for(i=t.hasKey||(t.hasKey={}),r=t.fragments.length;r--;)o=t.fragments[r],o.key in e||(s=!0,o.unbind(),t.fragmentsToUnrender.push(o),t.fragments.splice(r,1),i[o.key]=!1);for(r=t.fragments.length;r--;)o=t.fragments[r],o.index!==r&&(o.index=r,(p=o.registeredIndexRefs)&&p.forEach(cn));r=t.fragments.length;for(a in e)i[a]||(s=!0,n.context=t.keypath.join(a),n.key=a,n.index=r++,o=new rg(n),t.fragmentsToRender.push(o),t.fragments.push(o),i[a]=!0);return t.length=t.fragments.length,s}function rn(t,e,n){return e?on(t,n):pn(t)}function on(t,e){var n;return t.length?void 0:(e.context=t.keypath,e.index=0,n=new rg(e),t.fragmentsToRender.push(t.fragments[0]=n),t.length=1,!0)}function sn(t,e,n,a){var r,i,s,p,c;if(i=o(e)&&0===e.length,s=!1,!o(e)&&u(e)){s=!0;for(c in e){s=!1;break}}return r=n?i||s||!e:e&&!i&&!s,r?t.length?t.length>1?(t.fragmentsToUnrender=t.fragments.splice(1),t.fragmentsToUnrender.forEach(K),!0):void 0:(a.index=0,p=new rg(a),t.fragmentsToRender.push(t.fragments[0]=p),t.length=1,!0):pn(t)}function pn(t){return t.length?(t.fragmentsToUnrender=t.fragments.splice(0,t.fragments.length).filter(un),t.fragmentsToUnrender.forEach(K),t.length=t.fragmentsToRender.length=0,!0):void 0}function un(t){return t.rendered}function cn(t){t.rebind("","")}function ln(t){var e,n,a;for(e="",n=0,a=this.length,n=0;a>n;n+=1)e+=this.fragments[n].toString(t);return e}function dn(){var t=this;this.fragments.forEach(K),this.fragmentsToRender.forEach(function(e){return N(t.fragments,e)}),this.fragmentsToRender=[],_c.call(this),this.length=0,this.unbound=!0}function fn(t){this.fragments.forEach(t?hn:mn),this.renderedFragments=[],this.rendered=!1}function hn(t){t.unrender(!0)}function mn(t){t.unrender(!1)}function gn(){var t,e,n,a,r,i,o;for(n=this.renderedFragments;t=this.fragmentsToUnrender.pop();)t.unrender(!0),n.splice(n.indexOf(t),1);for(;t=this.fragmentsToRender.shift();)t.render();for(this.rendered&&(r=this.parentFragment.getNode()),o=this.fragments.length,i=0;o>i;i+=1)t=this.fragments[i],e=n.indexOf(t,i),e!==i?(this.docFrag.appendChild(t.detach()),-1!==e&&n.splice(e,1),n.splice(i,0,t)):this.docFrag.childNodes.length&&(a=t.firstNode(),r.insertBefore(this.docFrag,a));this.rendered&&this.docFrag.childNodes.length&&(a=this.parentFragment.findNextNode(this),r.insertBefore(this.docFrag,a)),this.renderedFragments=this.fragments.slice()}function vn(){var t,e;if(this.docFrag){for(t=this.nodes.length,e=0;t>e;e+=1)this.docFrag.appendChild(this.nodes[e]);return this.docFrag}}function bn(t){var e,n,a,r;for(n=this.nodes.length,e=0;n>e;e+=1)if(a=this.nodes[e],1===a.nodeType){if(lo(a,t))return a;if(r=a.querySelector(t))return r}return null}function yn(t,e){var n,a,r,i,o,s;for(a=this.nodes.length,n=0;a>n;n+=1)if(r=this.nodes[n],1===r.nodeType&&(lo(r,t)&&e.push(r),i=r.querySelectorAll(t)))for(o=i.length,s=0;o>s;s+=1)e.push(i[s])}function _n(){return this.rendered&&this.nodes[0]?this.nodes[0]:this.parentFragment.findNextNode(this)}function xn(t){return gl[t]||(gl[t]=co(t))}function wn(t){var e,n,a;t&&"select"===t.name&&t.binding&&(e=F(t.node.options).filter(kn),t.getAttribute("multiple")?a=e.map(function(t){return t.value}):(n=e[0])&&(a=n.value),void 0!==a&&t.binding.setValue(a),t.bubble())}function kn(t){return t.selected}function Sn(){if(this.rendered)throw Error("Attempted to render an item that was already rendered");return this.docFrag=document.createDocumentFragment(),this.nodes=vl(this.value,this.parentFragment.getNode(),this.docFrag),bl(this.pElement),this.rendered=!0,this.docFrag}function En(t){var e;(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),t!==this.value&&(this.value=t,this.parentFragment.bubble(),this.rendered&&bs.addView(this))}function Cn(){return void 0!=this.value?we(""+this.value):""}function Pn(t){this.rendered&&t&&(this.nodes.forEach(e),this.rendered=!1)}function An(){var t,e;if(this.rendered){for(;this.nodes&&this.nodes.length;)t=this.nodes.pop(),t.parentNode.removeChild(t);e=this.parentFragment.getNode(),this.nodes=vl(this.value,e,this.docFrag),e.insertBefore(this.docFrag,this.parentFragment.findNextNode(this)),bl(this.pElement)}}function On(){var t,e=this.node;return e?((t=e.parentNode)&&t.removeChild(e),e):void 0}function Tn(){return null}function Rn(){return this.node}function Mn(t){return this.attributes&&this.attributes[t]?this.attributes[t].value:void 0}function Ln(){var t=this.useProperty||!this.rendered?this.fragment.getValue():""+this.fragment;s(t,this.value)||("id"===this.name&&this.value&&delete this.root.nodes[this.value],this.value=t,"value"===this.name&&this.node&&(this.node._ractive.value=t),this.rendered&&bs.addView(this))}function jn(t){var e=t.fragment.items;if(1===e.length)return e[0].type===Su?e[0]:void 0}function Dn(t){return this.type=Tu,this.element=t.element,this.root=t.root,zl(this,t.name),this.isBoolean=rc.test(this.name),t.value&&"string"!=typeof t.value?(this.parentFragment=this.element.parentFragment,this.fragment=new rg({template:t.value,root:this.root,owner:this}),this.value=this.fragment.getValue(),this.interpolator=Wl(this),this.isBindable=!!this.interpolator&&!this.interpolator.isStatic,void(this.ready=!0)):void(this.value=this.isBoolean?!0:t.value||"")}function Nn(t,e){this.fragment&&this.fragment.rebind(t,e)}function Fn(t){var e;this.node=t,t.namespaceURI&&t.namespaceURI!==no.html||(e=Yl[this.name]||this.name,void 0!==t[e]&&(this.propertyName=e),(this.isBoolean||this.isTwoway)&&(this.useProperty=!0),"value"===e&&(t._ractive.value=this.value)),this.rendered=!0,this.update()}function In(){var t=this,e=t.name,n=t.namespacePrefix,a=t.value,r=t.interpolator,i=t.fragment;if(("value"!==e||"select"!==this.element.name&&"textarea"!==this.element.name)&&("value"!==e||void 0===this.element.getAttribute("contenteditable"))){if("name"===e&&"input"===this.element.name&&r)return"name={{"+(r.keypath.str||r.ref)+"}}";if(this.isBoolean)return a?e:"";if(i){if(1===i.items.length&&null==i.items[0].value)return"";a=""+i}return n&&(e=n+":"+e),a?e+'="'+Bn(a)+'"':e}}function Bn(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'")}function Un(){this.fragment&&this.fragment.unbind(),"id"===this.name&&delete this.root.nodes[this.value]}function Vn(){var t,e,n,a,r=this.value;if(!this.locked)for(this.node._ractive.value=r,t=this.node.options,a=t.length;a--;)if(e=t[a],n=e._ractive?e._ractive.value:e.value,n==r){e.selected=!0;break}}function qn(){var t,e,n,a,r=this.value;for(i(r)||(r=[r]),t=this.node.options,e=t.length;e--;)n=t[e],a=n._ractive?n._ractive.value:n.value,n.selected=M(r,a)}function Gn(){var t=this,e=t.node,n=t.value;e.checked=n==e._ractive.value}function zn(){var t,e,n,a,r=this.node;if(t=r.checked,r.value=this.element.getAttribute("value"),r.checked=this.element.getAttribute("value")===this.element.getAttribute("name"),t&&!r.checked&&this.element.binding&&(n=this.element.binding.siblings,a=n.length)){for(;a--;){if(e=n[a],!e.element.node)return;if(e.element.node.checked)return bs.addRactive(e.root),e.handleChange()}this.root.viewmodel.set(e.keypath,void 0)}}function Wn(){var t,e,n=this,a=n.element,r=n.node,o=n.value,s=a.binding;if(t=a.getAttribute("value"),i(o)){for(e=o.length;e--;)if(t==o[e])return void(s.isChecked=r.checked=!0);s.isChecked=r.checked=!1}else s.isChecked=r.checked=o==t}function Hn(){this.node.className=n(this.value)}function Kn(){var t=this,e=t.node,n=t.value;this.root.nodes[n]=e,e.id=n}function Qn(){var t,e;t=this.node,e=this.value,void 0===e&&(e=""),t.style.setAttribute("cssText",e)}function Yn(){var t=this.value;void 0===t&&(t=""),this.locked||(this.node.innerHTML=t)}function $n(){var t=this,e=t.node,n=t.value;e._ractive.value=n,this.locked||(e.value=void 0==n?"":n)}function Jn(){this.locked||(this.node[this.propertyName]=this.value)}function Xn(){var t=this,e=t.node,n=t.namespace,a=t.name,r=t.value,i=t.fragment;n?e.setAttributeNS(n,a,""+(i||r)):this.isBoolean?r?e.setAttribute(a,""):e.removeAttribute(a):null==r?e.removeAttribute(a):e.setAttribute(a,""+(i||r))}function Zn(){var t,e,n=this,a=n.name,r=n.element,i=n.node;"id"===a?e=rd:"value"===a?"select"===r.name&&"value"===a?e=r.getAttribute("multiple")?Zl:Xl:"textarea"===r.name?e=sd:null!=r.getAttribute("contenteditable")?e=od:"input"===r.name&&(t=r.getAttribute("type"),e="file"===t?ko:"radio"===t&&r.binding&&"name"===r.binding.name?ed:sd):this.isTwoway&&"name"===a?"radio"===i.type?e=td:"checkbox"===i.type&&(e=nd):"style"===a&&i.style.setAttribute?e=id:"class"!==a||i.namespaceURI&&i.namespaceURI!==no.html?this.useProperty&&(e=pd):e=ad,e||(e=ud),this.update=e,this.update()}function ta(t,e){var n=e?"svg":"div";return dd.innerHTML="<"+n+" "+t+">",F(dd.childNodes[0].attributes)}function ea(t,e){for(var n=t.length;n--;)if(t[n].name===e.name)return!1;return!0}function na(t){for(;t=t.parent;)if("form"===t.name)return t}function aa(){this._ractive.binding.handleChange()}function ra(){var t;xd.call(this),t=this._ractive.root.viewmodel.get(this._ractive.binding.keypath),this.value=void 0==t?"":t}function ia(){var t=this._ractive.binding,e=this;t._timeout&&clearTimeout(t._timeout),t._timeout=setTimeout(function(){t.rendered&&xd.call(e),t._timeout=void 0},t.element.lazy)}function oa(t,e,n){var a=t+e+n;return Cd[a]||(Cd[a]=[])}function sa(t){return t.isChecked}function pa(t){return t.element.getAttribute("value")}function ua(t){var e,n,a,r,i,o=t.attributes;return t.binding&&(t.binding.teardown(),t.binding=null),(t.getAttribute("contenteditable")||o.contenteditable&&ca(o.contenteditable))&&ca(o.value)?n=Sd:"input"===t.name?(e=t.getAttribute("type"),"radio"===e||"checkbox"===e?(a=ca(o.name),r=ca(o.checked),a&&r&&m("A radio input can have two-way binding on its name attribute, or its checked attribute - not both",{ractive:t.root}),a?n="radio"===e?Td:Md:r&&(n="radio"===e?Ad:jd)):"file"===e&&ca(o.value)?n=Ud:ca(o.value)&&(n="number"===e||"range"===e?Vd:wd)):"select"===t.name&&ca(o.value)?n=t.getAttribute("multiple")?Id:Nd:"textarea"===t.name&&ca(o.value)&&(n=wd),n&&(i=new n(t))&&i.keypath?i:void 0}function ca(t){return t&&t.isBindable}function la(){var t=this.getAction();t&&!this.hasListener?this.listen():!t&&this.hasListener&&this.unrender()}function da(t){zs(this.root,this.getAction(),{event:t})}function fa(){return(""+this.action).trim()}function ha(t,e,n){var a,r,i,o=this;this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.name=e,-1!==e.indexOf("*")&&(l('Only component proxy-events may contain "*" wildcards, <%s on-%s="..."/> is not valid',t.name,e),this.invalid=!0),n.m?(r=n.a.r,this.method=n.m,this.keypaths=[],this.fn=Mc(n.a.s,r.length),this.parentFragment=t.parentFragment,i=this.root,this.refResolvers=[],r.forEach(function(t,e){var n=void 0;(n=Kd.exec(t))?o.keypaths[e]={eventObject:!0,refinements:n[1]?n[1].split("."):[]}:o.refResolvers.push(Rc(o,t,function(t){return o.resolve(e,t)}))}),this.fire=ma):(a=n.n||n,"string"!=typeof a&&(a=new rg({template:a,root:this.root,owner:this})),this.action=a,n.d?(this.dynamicParams=new rg({template:n.d,root:this.root,owner:this.element}),this.fire=va):n.a&&(this.params=n.a,this.fire=ga))}function ma(t){var e,n,a;if(e=this.root,"function"!=typeof e[this.method])throw Error('Attempted to call a non-existent method ("'+this.method+'")');n=this.keypaths.map(function(n){var a,r,i;if(void 0!==n){if(n.eventObject){if(a=t,r=n.refinements.length)for(i=0;r>i;i+=1)a=a[n.refinements[i]]}else a=e.viewmodel.get(n);return a}}),Gs.enqueue(e,t),a=this.fn.apply(null,n),e[this.method].apply(e,a),Gs.dequeue(e)}function ga(t){zs(this.root,this.getAction(),{event:t,args:this.params})}function va(t){var e=this.dynamicParams.getArgsList();"string"==typeof e&&(e=e.substr(1,e.length-2)),zs(this.root,this.getAction(),{event:t,args:e})}function ba(t){var e,n,a,r={};e=this._ractive,n=e.events[t.type],(a=Oc(n.element.parentFragment))&&(r=Oc.resolve(a)),n.fire({node:this,original:t,index:r,keypath:e.keypath.str,context:e.root.viewmodel.get(e.keypath)})}function ya(){var t,e=this.name;if(!this.invalid){if(t=v("events",this.root,e))this.custom=t(this.node,_a(e));else{if(!("on"+e in this.node||window&&"on"+e in window||Zi))return void(Jd[e]||g(Io(e,"event"),{node:this.node}));this.node.addEventListener(e,Qd,!1)}this.hasListener=!0}}function _a(t){return $d[t]||($d[t]=function(e){var n=e.node._ractive;e.index=n.index,e.keypath=n.keypath.str,e.context=n.root.viewmodel.get(n.keypath),n.events[t].fire(e)}),$d[t]}function xa(t,e){function n(n){n&&n.rebind(t,e)}var a;return this.method?(a=this.element.parentFragment,void this.refResolvers.forEach(n)):("string"!=typeof this.action&&n(this.action),void(this.dynamicParams&&n(this.dynamicParams)))}function wa(){this.node=this.element.node,this.node._ractive.events[this.name]=this,(this.method||this.getAction())&&this.listen()}function ka(t,e){this.keypaths[t]=e}function Sa(){return this.method?void this.refResolvers.forEach(K):("string"!=typeof this.action&&this.action.unbind(),void(this.dynamicParams&&this.dynamicParams.unbind()))}function Ea(){this.custom?this.custom.teardown():this.node.removeEventListener(this.name,Qd,!1),this.hasListener=!1}function Ca(){var t=this;this.dirty||(this.dirty=!0,bs.scheduleTask(function(){Pa(t),t.dirty=!1})),this.parentFragment.bubble()}function Pa(t){var e,n,a,r,i;e=t.node,e&&(r=F(e.options),n=t.getAttribute("value"),a=t.getAttribute("multiple"),void 0!==n?(r.forEach(function(t){var e,r;e=t._ractive?t._ractive.value:t.value,r=a?Aa(n,e):n==e,r&&(i=!0),t.selected=r}),i||(r[0]&&(r[0].selected=!0),t.binding&&t.binding.forceUpdate())):t.binding&&t.binding.forceUpdate())}function Aa(t,e){for(var n=t.length;n--;)if(t[n]==e)return!0}function Oa(t,e){t.select=Ra(t.parent),t.select&&(t.select.options.push(t),e.a||(e.a={}),void 0!==e.a.value||e.a.hasOwnProperty("disabled")||(e.a.value=e.f),"selected"in e.a&&void 0!==t.select.getAttribute("value")&&delete e.a.selected)}function Ta(t){t.select&&N(t.select.options,t)}function Ra(t){if(t)do if("select"===t.name)return t;while(t=t.parent)}function Ma(t){var e,n,a,r,i,o,s;this.type=Pu,e=this.parentFragment=t.parentFragment,n=this.template=t.template,this.parent=t.pElement||e.pElement,this.root=a=e.root,this.index=t.index,this.key=t.key,this.name=Gl(n.e),"option"===this.name&&Oa(this,n),"select"===this.name&&(this.options=[],this.bubble=Ca),"form"===this.name&&(this.formBindings=[]),s=Vl(this,n),this.attributes=hd(this,n.a),this.conditionalAttributes=vd(this,n.m),n.f&&(this.fragment=new rg({template:n.f,root:a,owner:this,pElement:this,cssIds:null})),o=a.twoway,s.twoway===!1?o=!1:s.twoway===!0&&(o=!0),this.twoway=o,this.lazy=s.lazy,o&&(r=qd(this,n.a))&&(this.binding=r,i=this.root._twowayBindings[r.keypath.str]||(this.root._twowayBindings[r.keypath.str]=[]),i.push(r)),n.v&&(this.eventHandlers=of(this,n.v)),n.o&&(this.decorator=new lf(this,n.o)),this.intro=n.t0||n.t1,this.outro=n.t0||n.t2}function La(t,e){function n(n){n.rebind(t,e)}var a,r,i,o;if(this.attributes&&this.attributes.forEach(n),this.conditionalAttributes&&this.conditionalAttributes.forEach(n),this.eventHandlers&&this.eventHandlers.forEach(n),this.decorator&&n(this.decorator),this.fragment&&n(this.fragment),i=this.liveQueries)for(o=this.root,a=i.length;a--;)i[a]._makeDirty();this.node&&(r=this.node._ractive)&&w(r,"keypath",t,e)}function ja(t){var e;(t.attributes.width||t.attributes.height)&&t.node.addEventListener("load",e=function(){var n=t.getAttribute("width"),a=t.getAttribute("height");void 0!==n&&t.node.setAttribute("width",n),void 0!==a&&t.node.setAttribute("height",a),t.node.removeEventListener("load",e,!1)},!1)}function Da(t){t.node.addEventListener("reset",Fa,!1)}function Na(t){t.node.removeEventListener("reset",Fa,!1)}function Fa(){var t=this._ractive.proxy;bs.start(),t.formBindings.forEach(Ia),bs.end()}function Ia(t){t.root.viewmodel.set(t.keypath,t.resetValue)}function Ba(t,e,n){var a,r,i;this.element=t,this.root=a=t.root,this.isIntro=n,r=e.n||e,("string"==typeof r||(i=new rg({template:r,root:a,owner:t}),r=""+i,i.unbind(),""!==r))&&(this.name=r,e.a?this.params=e.a:e.d&&(i=new rg({template:e.d,root:a,owner:t}),this.params=i.getArgsList(),i.unbind()),this._fn=v("transitions",a,r),this._fn||g(Io(r,"transition"),{ractive:this.root}))}function Ua(t){return t}function Va(){Vf.hidden=document[Ff]}function qa(){Vf.hidden=!0}function Ga(){Vf.hidden=!1}function za(){var t,e,n,a=this;return t=this.node=this.element.node,e=t.getAttribute("style"),this.complete=function(r){n||(!r&&a.isIntro&&Wa(t,e),t._ractive.transition=null,a._manager.remove(a),n=!0)},this._fn?void this._fn.apply(this.root,[this].concat(this.params)):void this.complete()}function Wa(t,e){e?t.setAttribute("style",e):(t.getAttribute("style"),t.removeAttribute("style"))}function Ha(){var t,e,n,a=this,r=this.root;return t=Ka(this),e=this.node=co(this.name,t),this.parentFragment.cssIds&&this.node.setAttribute("data-ractive-css",this.parentFragment.cssIds.map(function(t){return"{"+t+"}"}).join(" ")),Eo(this.node,"_ractive",{value:{proxy:this,keypath:cs(this.parentFragment),events:So(null),root:r}}),this.attributes.forEach(function(t){return t.render(e)}),this.conditionalAttributes.forEach(function(t){return t.render(e)}),this.fragment&&("script"===this.name?(this.bubble=Xf,this.node.text=this.fragment.toString(!1),this.fragment.unrender=ko):"style"===this.name?(this.bubble=Jf,this.bubble(),this.fragment.unrender=ko):this.binding&&this.getAttribute("contenteditable")?this.fragment.unrender=ko:this.node.appendChild(this.fragment.render())),this.binding&&(this.binding.render(),this.node._ractive.binding=this.binding),this.eventHandlers&&this.eventHandlers.forEach(function(t){return t.render()}),"option"===this.name&&Qa(this),"img"===this.name?ja(this):"form"===this.name?Da(this):"input"===this.name||"textarea"===this.name?this.node.defaultValue=this.node.value:"option"===this.name&&(this.node.defaultSelected=this.node.selected),this.decorator&&this.decorator.fn&&bs.scheduleTask(function(){a.decorator.torndown||a.decorator.init()},!0),r.transitionsEnabled&&this.intro&&(n=new Zf(this,this.intro,!0),bs.registerTransition(n),bs.scheduleTask(function(){return n.start()},!0),this.transition=n),this.node.autofocus&&bs.scheduleTask(function(){return a.node.focus()},!0),Ya(this),this.node}function Ka(t){var e,n,a;return e=(n=t.getAttribute("xmlns"))?n:"svg"===t.name?no.svg:(a=t.parent)?"foreignObject"===a.name?no.html:a.node.namespaceURI:t.root.el.namespaceURI}function Qa(t){var e,n,a;if(t.select&&(n=t.select.getAttribute("value"),void 0!==n))if(e=t.getAttribute("value"),t.select.node.multiple&&i(n)){for(a=n.length;a--;)if(e==n[a]){t.node.selected=!0;break}}else t.node.selected=e==n}function Ya(t){var e,n,a,r,i;e=t.root;do for(n=e._liveQueries,a=n.length;a--;)r=n[a],i=n["_"+r],i._test(t)&&(t.liveQueries||(t.liveQueries=[])).push(i);while(e=e.parent)}function $a(t){var e,n,a;if(e=t.getAttribute("value"),void 0===e||!t.select)return!1;if(n=t.select.getAttribute("value"),n==e)return!0;if(t.select.getAttribute("multiple")&&i(n))for(a=n.length;a--;)if(n[a]==e)return!0}function Ja(t){var e,n,a,r;return e=t.attributes,n=e.type,a=e.value,r=e.name,n&&"radio"===n.value&&a&&r.interpolator&&a.value===r.interpolator.value?!0:void 0}function Xa(t){var e=""+t;return e?" "+e:""}function Za(){this.fragment&&this.fragment.unbind(),this.binding&&this.binding.unbind(),this.eventHandlers&&this.eventHandlers.forEach(K),"option"===this.name&&Ta(this),this.attributes.forEach(K),this.conditionalAttributes.forEach(K)}function tr(t){var e,n,a;(a=this.transition)&&a.complete(),"option"===this.name?this.detach():t&&bs.detachWhenReady(this),this.fragment&&this.fragment.unrender(!1),(e=this.binding)&&(this.binding.unrender(),this.node._ractive.binding=null,n=this.root._twowayBindings[e.keypath.str],n.splice(n.indexOf(e),1)),this.eventHandlers&&this.eventHandlers.forEach(Q),this.decorator&&bs.registerDecorator(this.decorator),this.root.transitionsEnabled&&this.outro&&(a=new Zf(this,this.outro,!1),bs.registerTransition(a),bs.scheduleTask(function(){return a.start()})),this.liveQueries&&er(this),"form"===this.name&&Na(this)}function er(t){var e,n,a;for(a=t.liveQueries.length;a--;)e=t.liveQueries[a],n=e.selector,e._remove(t.node)}function nr(t,e){var n=sh.exec(e)[0];return null===t||n.length%s}}) cannot contain nested inline partials",e,{ractive:t});var s=a?i:ir(i,e);s.partials[e]=r=o.t}return a&&(r._fn=a),r.v?r.t:r}}function ir(t,e){return t.partials.hasOwnProperty(e)?t:or(t.constructor,e)}function or(t,e){return t?t.partials.hasOwnProperty(e)?t:or(t._Parent,e):void 0}function sr(t,e){if(e){if(e.template&&e.template.p&&e.template.p[t])return e.template.p[t];if(e.parentFragment&&e.parentFragment.owner)return sr(t,e.parentFragment.owner)}}function pr(t,e){var n,a=b("components",t,e);if(a&&(n=a.components[e],!n._Parent)){var r=n.bind(a);if(r.isOwner=a.components.hasOwnProperty(e),n=r(),!n)return void m(Fo,e,"component","component",{ractive:t});"string"==typeof n&&(n=pr(t,n)),n._fn=r,a.components[e]=n}return n}function ur(){var t=this.instance.fragment.detach();return yh.fire(this.instance),t}function cr(t){return this.instance.fragment.find(t)}function lr(t,e){return this.instance.fragment.findAll(t,e)}function dr(t,e){e._test(this,!0),this.instance.fragment&&this.instance.fragment.findAllComponents(t,e)}function fr(t){return t&&t!==this.name?this.instance.fragment?this.instance.fragment.findComponent(t):null:this.instance}function hr(){return this.parentFragment.findNextNode(this)}function mr(){return this.rendered?this.instance.fragment.firstNode():null}function gr(t,e,n){function a(t){var n,a;t.value=e,t.updating||(a=t.ractive,n=t.keypath,t.updating=!0,bs.start(a),a.viewmodel.mark(n),bs.end(),t.updating=!1)}var r,i,o,s,p,u;if(r=t.obj,i=t.prop,n&&!n.configurable){if("length"===i)return;throw Error('Cannot use magic mode with property "'+i+'" - object is not configurable')}n&&(o=n.get,s=n.set),p=o||function(){return e},u=function(t){s&&s(t),e=o?o():t,u._ractiveWrappers.forEach(a)},u._ractiveWrappers=[t],Object.defineProperty(r,i,{get:p,set:u,enumerable:!0,configurable:!0})}function vr(t,e){var n,a,r,i;if(this.adaptors)for(n=this.adaptors.length,a=0;n>a;a+=1)if(r=this.adaptors[a],r.filter(e,t,this.ractive))return i=this.wrapped[t]=r.wrap(this.ractive,e,t,yr(t)),void(i.value=e)}function br(t,e){var n,a={};if(!e)return t;e+=".";for(n in t)t.hasOwnProperty(n)&&(a[e+n]=t[n]);return a}function yr(t){var e;return Gh[t]||(e=t?t+".":"",Gh[t]=function(n,a){var r;return"string"==typeof n?(r={},r[e+n]=a,r):"object"==typeof n?e?br(n,t):n:void 0}),Gh[t]}function _r(t){var e,n,a=[$o];for(e=t.length;e--;)for(n=t[e].parent;n&&!n.isRoot;)-1===t.indexOf(n)&&R(a,n),n=n.parent;return a}function xr(t,e,n){var a;kr(t,e),n||(a=e.wildcardMatches(),a.forEach(function(n){wr(t,n,e)}))}function wr(t,e,n){var a,r,i;e=e.str||e,a=t.depsMap.patternObservers,r=a&&a[e],r&&r.forEach(function(e){i=n.join(e.lastKey),kr(t,i),wr(t,e,i)})}function kr(t,e){t.patternObservers.forEach(function(t){t.regex.test(e.str)&&t.update(e)})}function Sr(){function t(t){var a=t.key;t.viewmodel===o?(o.clearCache(a.str),t.invalidate(),n.push(a),e(a)):t.viewmodel.mark(a)}function e(n){var a,r;o.noCascade.hasOwnProperty(n.str)||((r=o.deps.computed[n.str])&&r.forEach(t),(a=o.depsMap.computed[n.str])&&a.forEach(e))}var n,a,r,i=this,o=this,s={};return n=this.changes,n.length?(n.slice().forEach(e),a=zh(n),a.forEach(function(e){var a;-1===n.indexOf(e)&&(a=o.deps.computed[e.str])&&a.forEach(t)}),this.changes=[],this.patternObservers.length&&(a.forEach(function(t){return Wh(i,t,!0)}),n.forEach(function(t){return Wh(i,t)})),this.deps.observers&&(a.forEach(function(t){return Er(i,null,t,"observers")}),Pr(this,n,"observers")),this.deps["default"]&&(r=[],a.forEach(function(t){return Er(i,r,t,"default")}),r.length&&Cr(this,r,n),Pr(this,n,"default")),n.forEach(function(t){s[t.str]=i.get(t)}),this.implicitChanges={},this.noCascade={},s):void 0}function Er(t,e,n,a){var r,i;(r=Ar(t,n,a))&&(i=t.get(n),r.forEach(function(t){e&&t.refineValue?e.push(t):t.setValue(i)}))}function Cr(t,e,n){e.forEach(function(e){for(var a=!1,r=0,i=n.length,o=[];i>r;){var s=n[r];if(s===e.keypath){a=!0;break}s.slice(0,e.keypath.length)===e.keypath&&o.push(s),r++}a&&e.setValue(t.get(e.keypath)),o.length&&e.refineValue(o)})}function Pr(t,e,n){function a(t){t.forEach(r),t.forEach(i)}function r(e){var a=Ar(t,e,n);a&&s.push({keypath:e,deps:a})}function i(e){var r;(r=t.depsMap[n][e.str])&&a(r)}function o(e){var n=t.get(e.keypath);e.deps.forEach(function(t){return t.setValue(n)})}var s=[];a(e),s.forEach(o)}function Ar(t,e,n){var a=t.deps[n];return a?a[e.str]:null}function Or(){this.captureGroups.push([])}function Tr(t,e){var n,a;if(e||(a=this.wrapped[t])&&a.teardown()!==!1&&(this.wrapped[t]=null),this.cache[t]=void 0,n=this.cacheMap[t])for(;n.length;)this.clearCache(n.pop())}function Rr(t,e){var n=e.firstKey;return!(n in t.data||n in t.computations||n in t.mappings)}function Mr(t,e){var n=new Xh(t,e);return this.ready&&n.init(this),this.computations[t.str]=n}function Lr(t,e){var n,a,r,i,o,s=this.cache,p=t.str;if(e=e||nm,e.capture&&(i=D(this.captureGroups))&&(~i.indexOf(t)||i.push(t)),Mo.call(this.mappings,t.firstKey))return this.mappings[t.firstKey].get(t,e);if(t.isSpecial)return t.value;if(void 0===s[p]?((a=this.computations[p])&&!a.bypass?(n=a.get(),this.adapt(p,n)):(r=this.wrapped[p])?n=r.value:t.isRoot?(this.adapt("",this.data),n=this.data):n=jr(this,t),s[p]=n):n=s[p],!e.noUnwrap&&(r=this.wrapped[p])&&(n=r.get()),t.isRoot&&e.fullRootGet)for(o in this.mappings)n[o]=this.mappings[o].getValue();return n===tm?void 0:n}function jr(t,e){var n,a,r,i;return n=t.get(e.parent),(i=t.wrapped[e.parent.str])&&(n=i.get()),null!==n&&void 0!==n?((a=t.cacheMap[e.parent.str])?-1===a.indexOf(e.str)&&a.push(e.str):t.cacheMap[e.parent.str]=[e.str],"object"!=typeof n||e.lastKey in n?(r=n[e.lastKey],t.adapt(e.str,r,!1),t.cache[e.str]=r,r):t.cache[e.str]=tm):void 0}function Dr(){var t;for(t in this.computations)this.computations[t].init(this)}function Nr(t,e){var n=this.mappings[t.str]=new im(t,e);return n.initViewmodel(this),n}function Fr(t,e){var n,a=t.str;e&&(e.implicit&&(this.implicitChanges[a]=!0),e.noCascade&&(this.noCascade[a]=!0)),(n=this.computations[a])&&n.invalidate(),-1===this.changes.indexOf(t)&&this.changes.push(t);var r=e?e.keepExistingWrapper:!1;this.clearCache(a,r),this.ready&&this.onchange()}function Ir(t,e,n,a){var r,i,o,s;if(this.mark(t),a&&a.compare){o=Ur(a.compare);try{r=e.map(o),i=n.map(o)}catch(p){m('merge(): "%s" comparison failed. Falling back to identity checking',t),r=e,i=n}}else r=e,i=n;s=sm(r,i),this.smartUpdate(t,n,s,e.length!==n.length)}function Br(t){return JSON.stringify(t)}function Ur(t){if(t===!0)return Br;if("string"==typeof t)return um[t]||(um[t]=function(e){return e[t]}),um[t];if("function"==typeof t)return t;throw Error("The `compare` option must be a function, or a string representing an identifying field (or `true` to use JSON.stringify)")}function Vr(t,e){var n,a,r,i=void 0===arguments[2]?"default":arguments[2];e.isStatic||((n=this.mappings[t.firstKey])?n.register(t,e,i):(a=this.deps[i]||(this.deps[i]={}),r=a[t.str]||(a[t.str]=[]),r.push(e),this.depsMap[i]||(this.depsMap[i]={}),t.isRoot||qr(this,t,i)))}function qr(t,e,n){for(var a,r,i;!e.isRoot;)a=t.depsMap[n],r=a[e.parent.str]||(a[e.parent.str]=[]),i=e.str,void 0===r["_"+i]&&(r["_"+i]=0,r.push(e)),r["_"+i]+=1,e=e.parent}function Gr(){return this.captureGroups.pop()}function zr(t){this.data=t,this.clearCache("")}function Wr(t,e){var n,a,r,i,o=void 0===arguments[2]?{}:arguments[2];if(!o.noMapping&&(n=this.mappings[t.firstKey]))return n.set(t,e);if(a=this.computations[t.str]){if(a.setting)return;a.set(e),e=a.get()}s(this.cache[t.str],e)||(r=this.wrapped[t.str],r&&r.reset&&(i=r.reset(e)!==!1,i&&(e=r.get())),a||i||Hr(this,t,e),o.silent?this.clearCache(t.str):this.mark(t))}function Hr(t,e,n){var a,r,i,o;i=function(){a.set?a.set(e.lastKey,n):(r=a.get(),o())},o=function(){r||(r=Fh(e.lastKey),t.set(e.parent,r,{silent:!0})),r[e.lastKey]=n},a=t.wrapped[e.parent.str],a?i():(r=t.get(e.parent),(a=t.wrapped[e.parent.str])?i():o())}function Kr(t,e,n){var a,r,i,o=this;if(r=n.length,n.forEach(function(e,n){-1===e&&o.mark(t.join(n),gm)}),this.set(t,e,{silent:!0}),(a=this.deps["default"][t.str])&&a.filter(Qr).forEach(function(t){return t.shuffle(n,e)}),r!==e.length){for(this.mark(t.join("length"),mm),i=n.touchedFrom;ii;i+=1)this.mark(t.join(i),gm)}}function Qr(t){return"function"==typeof t.shuffle}function Yr(){var t,e=this;for(Object.keys(this.cache).forEach(function(t){return e.clearCache(t)});t=this.unresolvedImplicitDependencies.pop();)t.teardown()}function $r(t,e){var n,a,r,i=void 0===arguments[2]?"default":arguments[2];if(!e.isStatic){if(n=this.mappings[t.firstKey])return n.unregister(t,e,i);if(a=this.deps[i][t.str],r=a.indexOf(e),-1===r)throw Error("Attempted to remove a dependant that was no longer registered! This should not happen. If you are seeing this bug in development please raise an issue at https://github.com/RactiveJS/Ractive/issues - thanks");a.splice(r,1),t.isRoot||Jr(this,t,i)}}function Jr(t,e,n){for(var a,r;!e.isRoot;)a=t.depsMap[n],r=a[e.parent.str],r["_"+e.str]-=1,r["_"+e.str]||(N(r,e),r["_"+e.str]=void 0),e=e.parent}function Xr(t){this.hook=new is(t),this.inProcess={},this.queue={}}function Zr(t,e){return t[e._guid]||(t[e._guid]=[])}function ti(t,e){var n=Zr(t.queue,e);for(t.hook.fire(e);n.length;)ti(t,n.shift());delete t.queue[e._guid]}function ei(t,e){var n,a={};for(n in e)a[n]=ni(t,n,e[n]);return a}function ni(t,e,n){var a,r;return"function"==typeof n&&(a=ri(n,t)),"string"==typeof n&&(a=ai(t,n)),"object"==typeof n&&("string"==typeof n.get?a=ai(t,n.get):"function"==typeof n.get?a=ri(n.get,t):l("`%s` computation must have a `get()` method",e), "function"==typeof n.set&&(r=ri(n.set,t))),{getter:a,setter:r}}function ai(t,e){var n,a,r;return n="return ("+e.replace(km,function(t,e){return a=!0,'__ractive.get("'+e+'")'})+");",a&&(n="var __ractive = this; "+n),r=Function(n),a?r.bind(t):r}function ri(t,e){return/this/.test(""+t)?t.bind(e):t}function ii(e){var n,r,i=void 0===arguments[1]?{}:arguments[1],o=void 0===arguments[2]?{}:arguments[2];if(Mg.DEBUG&&Ro(),pi(e,o),Eo(e,"data",{get:ui}),Sm.fire(e,i),Am.forEach(function(t){e[t]=a(So(e.constructor[t]||null),i[t])}),r=new _m({adapt:oi(e,e.adapt,i),data:Wp.init(e.constructor,e,i),computed:wm(e,a(So(e.constructor.prototype.computed),i.computed)),mappings:o.mappings,ractive:e,onchange:function(){return bs.addRactive(e)}}),e.viewmodel=r,r.init(),uu.init(e.constructor,e,i),Em.fire(e),Cm.begin(e),e.template){var s=void 0;(o.cssIds||e.cssId)&&(s=o.cssIds?o.cssIds.slice():[],e.cssId&&s.push(e.cssId)),e.fragment=new rg({template:e.template,root:e,owner:e,cssIds:s})}if(Cm.end(e),n=t(e.el)){var p=e.render(n,e.append);Mg.DEBUG_PROMISES&&p["catch"](function(t){throw g("Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\n Ractive.DEBUG_PROMISES = false;"),m("An error happened during rendering",{ractive:e}),t.stack&&d(t.stack),t})}}function oi(t,e,n){function a(e){return"string"==typeof e&&(e=v("adaptors",t,e),e||l(Io(e,"adaptor"))),e}var r,i,o;if(e=e.map(a),r=j(n.adapt).map(a),r=si(e,r),i="magic"in n?n.magic:t.magic,o="modifyArrays"in n?n.modifyArrays:t.modifyArrays,i){if(!eo)throw Error("Getters and setters (magic mode) are not supported in this browser");o&&r.push(Vh),r.push(Uh)}return o&&r.push(Dh),r}function si(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function pi(t,e){t._guid="r-"+Pm++,t._subs=So(null),t._config={},t._twowayBindings=So(null),t._animations=[],t.nodes={},t._liveQueries=[],t._liveComponentQueries=[],t._boundFunctions=[],t._observers=[],e.component?(t.parent=e.parent,t.container=e.container||null,t.root=t.parent.root,t.component=e.component,e.component.instance=t,t._inlinePartials=e.inlinePartials):(t.root=t,t.parent=t.container=null)}function ui(){throw Error("Using `ractive.data` is no longer supported - you must use the `ractive.get()` API instead")}function ci(t,e,n){this.parentFragment=t.parentFragment,this.callback=n,this.fragment=new rg({template:e,root:t.root,owner:this}),this.update()}function li(t,e,n){var a;return e.r?a=Rc(t,e.r,n):e.x?a=new Dc(t,t.parentFragment,e.x,n):e.rx&&(a=new Bc(t,e.rx,n)),a}function di(t){return 1===t.length&&t[0].t===Su}function fi(t,e){var n;for(n in e)e.hasOwnProperty(n)&&hi(t.instance,t.root,n,e[n])}function hi(t,e,n,a){"string"!=typeof a&&l("Components currently only support simple events - you cannot include arguments. Sorry!"),t.on(n,function(){var t,n;return arguments.length&&arguments[0]&&arguments[0].node&&(t=Array.prototype.shift.call(arguments)),n=Array.prototype.slice.call(arguments),zs(e,a,{event:t,args:n}),!1})}function mi(t,e){var n,a;if(!e)throw Error('Component "'+this.name+'" not found');n=this.parentFragment=t.parentFragment,a=n.root,this.root=a,this.type=Ru,this.name=t.template.e,this.index=t.index,this.indexRefBindings={},this.yielders={},this.resolvers=[],Rm(this,e,t.template.a,t.template.f,t.template.p),Mm(this,t.template.v),(t.template.t0||t.template.t1||t.template.t2||t.template.o)&&m('The "intro", "outro" and "decorator" directives have no effect on components',{ractive:this.instance}),Lm(this)}function gi(t,e){function n(n){n.rebind(t,e)}var a;this.resolvers.forEach(n);for(var r in this.yielders)this.yielders[r][0]&&n(this.yielders[r][0]);(a=this.root._liveComponentQueries["_"+this.name])&&a._makeDirty()}function vi(){var t=this.instance;return t.render(this.parentFragment.getNode()),this.rendered=!0,t.fragment.detach()}function bi(){return""+this.instance.fragment}function yi(){var t=this.instance;this.resolvers.forEach(K),_i(this),t._observers.forEach(Y),t.fragment.unbind(),t.viewmodel.teardown(),t.fragment.rendered&&t.el.__ractive_instances__&&N(t.el.__ractive_instances__,t),Bm.fire(t)}function _i(t){var e,n;e=t.root;do(n=e._liveComponentQueries["_"+t.name])&&n._remove(t);while(e=e.parent)}function xi(t){this.shouldDestroy=t,this.instance.unrender()}function wi(t){var e=this;this.owner=t.owner,this.parent=this.owner.parentFragment,this.root=t.root,this.pElement=t.pElement,this.context=t.context,this.index=t.index,this.key=t.key,this.registeredIndexRefs=[],this.cssIds="cssIds"in t?t.cssIds:this.parent?this.parent.cssIds:null,this.items=t.template.map(function(n,a){return ki({parentFragment:e,pElement:t.pElement,template:n,index:a})}),this.value=this.argsList=null,this.dirtyArgs=this.dirtyValue=!0,this.bound=!0}function ki(t){if("string"==typeof t.template)return new yc(t);switch(t.template.t){case Mu:return new Hm(t);case Su:return new Wc(t);case Cu:return new ll(t);case Eu:return new Ol(t);case Pu:var e=void 0;return(e=vh(t.parentFragment.root,t.template.e))?new qm(t,e):new ih(t);case Au:return new gh(t);case Ou:return new zm(t);case Lu:return new Qm(t);default:throw Error("Something very strange happened. Please file an issue at https://github.com/ractivejs/ractive/issues. Thanks!")}}function Si(t,e){(!this.owner||this.owner.hasContext)&&w(this,"context",t,e),this.items.forEach(function(n){n.rebind&&n.rebind(t,e)})}function Ei(){var t;return 1===this.items.length?t=this.items[0].render():(t=document.createDocumentFragment(),this.items.forEach(function(e){t.appendChild(e.render())})),this.rendered=!0,t}function Ci(t){return this.items?this.items.map(t?Ai:Pi).join(""):""}function Pi(t){return""+t}function Ai(t){return t.toString(!0)}function Oi(){this.bound&&(this.items.forEach(Ti),this.bound=!1)}function Ti(t){t.unbind&&t.unbind()}function Ri(t){if(!this.rendered)throw Error("Attempted to unrender a fragment that was not rendered");this.items.forEach(function(e){return e.unrender(t)}),this.rendered=!1}function Mi(t){var e,n,a,r,i;if(t=t||{},"object"!=typeof t)throw Error("The reset method takes either no arguments, or an object containing new data");for((n=this.viewmodel.wrapped[""])&&n.reset?n.reset(t)===!1&&this.viewmodel.reset(t):this.viewmodel.reset(t),a=uu.reset(this),r=a.length;r--;)if(og.indexOf(a[r])>-1){i=!0;break}if(i){var o=void 0;this.viewmodel.mark($o),(o=this.component)&&(o.shouldDestroy=!0),this.unrender(),o&&(o.shouldDestroy=!1),this.fragment.template!==this.template&&(this.fragment.unbind(),this.fragment=new rg({template:this.template,root:this,owner:this})),e=this.render(this.el,this.anchor)}else e=bs.start(this,!0),this.viewmodel.mark($o),bs.end();return sg.fire(this,t),e}function Li(t){var e,n;Jp.init(null,this,{template:t}),e=this.transitionsEnabled,this.transitionsEnabled=!1,(n=this.component)&&(n.shouldDestroy=!0),this.unrender(),n&&(n.shouldDestroy=!1),this.fragment.unbind(),this.fragment=new rg({template:this.template,root:this,owner:this}),this.render(this.el,this.anchor),this.transitionsEnabled=e}function ji(t,e){var n,a;if(a=bs.start(this,!0),u(t)){n=t;for(t in n)n.hasOwnProperty(t)&&(e=n[t],Di(this,t,e))}else Di(this,t,e);return bs.end(),a}function Di(t,e,n){e=S(P(e)),e.isPattern?E(t,e).forEach(function(e){t.viewmodel.set(e,n)}):t.viewmodel.set(e,n)}function Ni(t,e){return Jo(this,t,void 0===e?-1:-e)}function Fi(){var t;return this.fragment.unbind(),this.viewmodel.teardown(),this._observers.forEach(Y),this.fragment.rendered&&this.el.__ractive_instances__&&N(this.el.__ractive_instances__,this),this.shouldDestroy=!0,t=this.fragment.rendered?this.unrender():us.resolve(),vg.fire(this),this._boundFunctions.forEach(Ii),t}function Ii(t){delete t.fn[t.prop]}function Bi(t){var e=this;if("string"!=typeof t)throw new TypeError(No);var n=void 0;return/\*/.test(t)?(n={},E(this,S(P(t))).forEach(function(t){n[t.str]=!e.viewmodel.get(t)}),this.set(n)):this.set(t,!this.get(t))}function Ui(){return this.fragment.toString(!0)}function Vi(){var t,e;if(!this.fragment.rendered)return m("ractive.unrender() was called on a Ractive instance that was not rendered"),us.resolve();for(t=bs.start(this,!0),e=!this.component||this.component.shouldDestroy||this.shouldDestroy;this._animations[0];)this._animations[0].stop();return this.fragment.unrender(e),N(this.el.__ractive_instances__,this),xg.fire(this),bs.end(),t}function qi(t){var e;return t=S(t)||$o,e=bs.start(this,!0),this.viewmodel.mark(t),bs.end(),Sg.fire(this,t),e}function Gi(t,e){var n,a,r;if("string"!=typeof t||e){r=[];for(a in this._twowayBindings)(!t||S(a).equalsOrStartsWith(t))&&r.push.apply(r,this._twowayBindings[a])}else r=this._twowayBindings[t];return n=zi(this,r),this.set(n)}function zi(t,e){var n={},a=[];return e.forEach(function(t){var e,r;if(!t.radioName||t.element.node.checked){if(t.checkboxName)return void(a[t.keypath.str]||t.changed()||(a.push(t.keypath),a[t.keypath.str]=t));e=t.attribute.value,r=t.getValue(),L(e,r)||s(e,r)||(n[t.keypath.str]=r)}}),a.length&&a.forEach(function(t){var e,r,i;e=a[t.str],r=e.attribute.value,i=e.getValue(),L(r,i)||(n[t.str]=i)}),n}function Wi(t,e){return"function"==typeof e&&/_super/.test(t)}function Hi(t){for(var e={};t;)Ki(t,e),Yi(t,e),t=t._Parent!==Mg?t._Parent:!1;return e}function Ki(t,e){ru.forEach(function(n){Qi(n.useDefaults?t.prototype:t,e,n.name)})}function Qi(t,e,n){var a,r=Object.keys(t[n]);r.length&&((a=e[n])||(a=e[n]={}),r.filter(function(t){return!(t in a)}).forEach(function(e){return a[e]=t[n][e]}))}function Yi(t,e){Object.keys(t.prototype).forEach(function(n){if("computed"!==n){var a=t.prototype[n];if(n in e){if("function"==typeof e[n]&&"function"==typeof a&&e[n]._method){var r=void 0,i=a._method;i&&(a=a._method),r=Pg(e[n]._method,a),i&&(r._method=r),e[n]=r}}else e[n]=a._method?a._method:a}})}function $i(){for(var t=arguments.length,e=Array(t),n=0;t>n;n++)e[n]=arguments[n];return e.length?e.reduce(Ji,this):Ji(this)}function Ji(t){var e,n,r=void 0===arguments[1]?{}:arguments[1];return r.prototype instanceof Mg&&(r=Ag(r)),e=function(t){return this instanceof e?void Om(this,t):new e(t)},n=So(t.prototype),n.constructor=e,Co(e,{defaults:{value:n},extend:{value:$i,writable:!0,configurable:!0},_Parent:{value:t}}),uu.extend(t,n,r),Wp.extend(t,n,r),r.computed&&(n.computed=a(So(t.prototype.computed),r.computed)),e.prototype=n,e}var Xi,Zi,to,eo,no,ao,ro,io=3,oo={el:void 0,append:!1,template:{v:io,t:[]},preserveWhitespace:!1,sanitize:!1,stripComments:!0,delimiters:["{{","}}"],tripleDelimiters:["{{{","}}}"],interpolate:!1,data:{},computed:{},magic:!1,modifyArrays:!0,adapt:[],isolated:!1,twoway:!0,lazy:!1,noIntro:!1,transitionsEnabled:!0,complete:void 0,css:null,noCssTransform:!1},so=oo,po={linear:function(t){return t},easeIn:function(t){return Math.pow(t,3)},easeOut:function(t){return Math.pow(t-1,3)+1},easeInOut:function(t){return(t/=.5)<1?.5*Math.pow(t,3):.5*(Math.pow(t-2,3)+2)}};Xi="object"==typeof document,Zi="undefined"!=typeof navigator&&/jsDom/.test(navigator.appName),to="undefined"!=typeof console&&"function"==typeof console.warn&&"function"==typeof console.warn.apply;try{Object.defineProperty({},"test",{value:0}),eo=!0}catch(uo){eo=!1}no={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},ao="undefined"==typeof document?!1:document&&document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),ro=["o","ms","moz","webkit"];var co,lo,fo,ho,mo,go,vo,bo,yo;if(co=ao?function(t,e){return e&&e!==no.html?document.createElementNS(e,t):document.createElement(t)}:function(t,e){if(e&&e!==no.html)throw"This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information";return document.createElement(t)},Xi){for(fo=co("div"),ho=["matches","matchesSelector"],yo=function(t){return function(e,n){return e[t](n)}},vo=ho.length;vo--&&!lo;)if(mo=ho[vo],fo[mo])lo=yo(mo);else for(bo=ro.length;bo--;)if(go=ro[vo]+mo.substr(0,1).toUpperCase()+mo.substring(1),fo[go]){lo=yo(go);break}lo||(lo=function(t,e){var n,a,r;for(a=t.parentNode,a||(fo.innerHTML="",a=fo,t=t.cloneNode(),fo.appendChild(t)),n=a.querySelectorAll(e),r=n.length;r--;)if(n[r]===t)return!0;return!1})}else lo=null;var _o,xo,wo,ko=function(){};"undefined"==typeof window?wo=null:(_o=window,xo=_o.document,wo={},xo||(wo=null),Date.now||(Date.now=function(){return+new Date}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length;return function(r){if("object"!=typeof r&&"function"!=typeof r||null===r)throw new TypeError("Object.keys called on non-object");var i=[];for(var o in r)t.call(r,o)&&i.push(o);if(e)for(var s=0;a>s;s++)t.call(r,n[s])&&i.push(n[s]);return i}}()),Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){var n;for(void 0===e&&(e=0),0>e&&(e+=this.length),0>e&&(e=0),n=this.length;n>e;e++)if(this.hasOwnProperty(e)&&this[e]===t)return e;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){var n,a;for(n=0,a=this.length;a>n;n+=1)this.hasOwnProperty(n)&&t.call(e,this[n],n,this)}),Array.prototype.map||(Array.prototype.map=function(t,e){var n,a,r,i=this,o=[];for(i instanceof String&&(i=""+i,r=!0),n=0,a=i.length;a>n;n+=1)(i.hasOwnProperty(n)||r)&&(o[n]=t.call(e,i[n],n,i));return o}),"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(t,e){var n,a,r,i;if("function"!=typeof t)throw new TypeError(t+" is not a function");for(r=this.length,i=!1,arguments.length>1&&(a=e,i=!0),n=0;r>n;n+=1)this.hasOwnProperty(n)?i&&(a=t(a,this[n],n,this)):(a=this[n],i=!0);if(!i)throw new TypeError("Reduce of empty array with no initial value");return a}),Array.prototype.filter||(Array.prototype.filter=function(t,e){var n,a,r=[];for(n=0,a=this.length;a>n;n+=1)this.hasOwnProperty(n)&&t.call(e,this[n],n,this)&&(r[r.length]=this[n]);return r}),Array.prototype.every||(Array.prototype.every=function(t,e){var n,a,r;if(null==this)throw new TypeError;if(n=Object(this),a=n.length>>>0,"function"!=typeof t)throw new TypeError;for(r=0;a>r;r+=1)if(r in n&&!t.call(e,n[r],r,n))return!1;return!0}),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(t){var e,n,a,r,i=[].slice;if("function"!=typeof this)throw new TypeError("Function.prototype.bind called on non-function");return e=i.call(arguments,1),n=this,a=function(){},r=function(){var r=this instanceof a&&t?this:t;return n.apply(r,e.concat(i.call(arguments)))},a.prototype=this.prototype,r.prototype=new a,r}),_o.addEventListener||!function(t,e){var n,a,r,i,o,s;t.appearsToBeIELessEqual8=!0,n=function(t,e){var n,a=this;for(n in t)a[n]=t[n];a.currentTarget=e,a.target=t.srcElement||e,a.timeStamp=+new Date,a.preventDefault=function(){t.returnValue=!1},a.stopPropagation=function(){t.cancelBubble=!0}},a=function(t,e){var a,r,i=this;a=i.listeners||(i.listeners=[]),r=a.length,a[r]=[e,function(t){e.call(i,new n(t,i))}],i.attachEvent("on"+t,a[r][1])},r=function(t,e){var n,a,r=this;if(r.listeners)for(n=r.listeners,a=n.length;a--;)n[a][0]===e&&r.detachEvent("on"+t,n[a][1])},t.addEventListener=e.addEventListener=a,t.removeEventListener=e.removeEventListener=r,"Element"in t?(t.Element.prototype.addEventListener=a,t.Element.prototype.removeEventListener=r):(s=e.createElement,e.createElement=function(t){var e=s(t);return e.addEventListener=a,e.removeEventListener=r,e},i=e.getElementsByTagName("head")[0],o=e.createElement("style"),i.insertBefore(o,i.firstChild))}(_o,xo),_o.getComputedStyle||(wo.getComputedStyle=function(){function t(n,a,r,i){var o,s=a[r],p=parseFloat(s),u=s.split(/\d/)[0];return isNaN(p)&&/^thin|medium|thick$/.test(s)&&(p=e(s),u=""),i=null!=i?i:/%|em/.test(u)&&n.parentElement?t(n.parentElement,n.parentElement.currentStyle,"fontSize",null):16,o="fontSize"==r?i:/width/i.test(r)?n.clientWidth:n.clientHeight,"em"==u?p*i:"in"==u?96*p:"pt"==u?96*p/72:"%"==u?p/100*o:p}function e(t){var e,n;return i[t]||(e=document.createElement("div"),e.style.display="block",e.style.position="fixed",e.style.width=e.style.height="0",e.style.borderRight=t+" solid black",document.getElementsByTagName("body")[0].appendChild(e),n=e.getBoundingClientRect(),i[t]=n.right-n.left),i[t]}function n(t,e){var n="border"==e?"Width":"",a=e+"Top"+n,r=e+"Right"+n,i=e+"Bottom"+n,o=e+"Left"+n;t[e]=(t[a]==t[r]==t[i]==t[o]?[t[a]]:t[a]==t[i]&&t[o]==t[r]?[t[a],t[r]]:t[o]==t[r]?[t[a],t[r],t[i]]:[t[a],t[r],t[i],t[o]]).join(" ")}function a(e){var a,r,i,s;a=e.currentStyle,r=this,i=t(e,a,"fontSize",null);for(s in a)"normal"===a[s]&&o.hasOwnProperty(s)?r[s]=o[s]:/width|height|margin.|padding.|border.+W/.test(s)?"auto"===a[s]?/^width|height/.test(s)?r[s]=("width"===s?e.clientWidth:e.clientHeight)+"px":/(?:padding)?Top|Bottom$/.test(s)&&(r[s]="0px"):r[s]=t(e,a,s,i)+"px":"styleFloat"===s?r["float"]=a[s]:r[s]=a[s];return n(r,"margin"),n(r,"padding"),n(r,"border"),r.fontSize=i+"px",r}function r(t){return new a(t)}var i={},o={fontWeight:400,lineHeight:1.2,letterSpacing:0};return a.prototype={constructor:a,getPropertyPriority:ko,getPropertyValue:function(t){return this[t]||""},item:ko,removeProperty:ko,setProperty:ko,getPropertyCSSValue:ko},r}()));var So,Eo,Co,Po=wo;try{Object.defineProperty({},"test",{value:0}),Xi&&Object.defineProperty(document.createElement("div"),"test",{value:0}),Eo=Object.defineProperty}catch(Ao){Eo=function(t,e,n){t[e]=n.value}}try{try{Object.defineProperties({},{test:{value:0}})}catch(Ao){throw Ao}Xi&&Object.defineProperties(co("div"),{test:{value:0}}),Co=Object.defineProperties}catch(Ao){Co=function(t,e){var n;for(n in e)e.hasOwnProperty(n)&&Eo(t,n,e[n])}}try{Object.create(null),So=Object.create}catch(Ao){So=function(){var t=function(){};return function(e,n){var a;return null===e?{}:(t.prototype=e,a=new t,n&&Object.defineProperties(a,n),a)}}()}var Oo,To,Ro,Mo=Object.prototype.hasOwnProperty,Lo=Object.prototype.toString,jo=/^\[object (?:Array|FileList)\]$/,Do={};to?!function(){var t=["%cRactive.js %c0.7.3 %cin debug mode, %cmore...","color: rgb(114, 157, 52); font-weight: normal;","color: rgb(85, 85, 85); font-weight: normal;","color: rgb(85, 85, 85); font-weight: normal;","color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;"],e="You're running Ractive 0.7.3 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n http://docs.ractivejs.org\n http://stackoverflow.com/questions/tagged/ractivejs\n http://groups.google.com/forum/#!forum/ractive-js\n http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n https://github.com/ractivejs/ractive/issues\n\n";Ro=function(){var n=!!console.groupCollapsed;console[n?"groupCollapsed":"log"].apply(console,t),console.log(e),n&&console.groupEnd(t),Ro=ko},To=function(t,e){if(Ro(),"object"==typeof e[e.length-1]){var n=e.pop(),a=n?n.ractive:null;if(a){var r=void 0;a.component&&(r=a.component.name)&&(t="<"+r+"> "+t);var i=void 0;(i=n.node||a.fragment&&a.fragment.rendered&&a.find("*"))&&e.push(i)}}console.warn.apply(console,["%cRactive.js: %c"+t,"color: rgb(114, 157, 52);","color: rgb(85, 85, 85);"].concat(e))},Oo=function(){console.log.apply(console,arguments)}}():To=Oo=Ro=ko;var No="Bad arguments",Fo='A function was specified for "%s" %s, but no %s was returned',Io=function(t,e){return'Missing "'+t+'" '+e+" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#"+e+"s"},Bo=function(t,e,n,a){if(t===e)return y(e);if(a){var r=v("interpolators",n,a);if(r)return r(t,e)||y(e);l(Io(a,"interpolator"))}return qo.number(t,e)||qo.array(t,e)||qo.object(t,e)||y(e)},Uo=Bo,Vo={number:function(t,e){var n;return p(t)&&p(e)?(t=+t,e=+e,n=e-t,n?function(e){return t+e*n}:function(){return t}):null},array:function(t,e){var n,a,r,o;if(!i(t)||!i(e))return null;for(n=[],a=[],o=r=Math.min(t.length,e.length);o--;)a[o]=Uo(t[o],e[o]);for(o=r;o=this.duration?(null!==i&&(bs.start(this.root),this.root.viewmodel.set(i,this.to),bs.end()),this.step&&this.step(1,this.to),this.complete(this.to),r=this.root._animations.indexOf(this),-1===r&&m("Animation was not found"),this.root._animations.splice(r,1),this.running=!1,!1):(e=this.easing?this.easing(t/this.duration):t/this.duration,null!==i&&(n=this.interpolator(e),bs.start(this.root),this.root.viewmodel.set(i,n),bs.end()),this.step&&this.step(e,n),!0)):!1},stop:function(){var t;this.running=!1,t=this.root._animations.indexOf(this),-1===t&&m("Animation was not found"),this.root._animations.splice(t,1)}};var ks=ws,Ss=nt,Es={stop:ko},Cs=rt,Ps=new is("detach"),As=it,Os=ot,Ts=function(){var t,e,n;t=this._root[this._isComponentQuery?"liveComponentQueries":"liveQueries"],e=this.selector,n=t.indexOf(e),-1!==n&&(t.splice(n,1),t[e]=null)},Rs=function(t,e){var n,a,r,i,o,s,p,u,c,l;for(n=pt(t.component||t._ractive.proxy),a=pt(e.component||e._ractive.proxy),r=D(n),i=D(a);r&&r===i;)n.pop(),a.pop(),o=r,r=D(n),i=D(a);if(r=r.component||r,i=i.component||i,c=r.parentFragment,l=i.parentFragment,c===l)return s=c.items.indexOf(r),p=l.items.indexOf(i),s-p||n.length-a.length;if(u=o.fragments)return s=u.indexOf(c),p=u.indexOf(l),s-p||n.length-a.length;throw Error("An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/RactiveJS/Ractive/issues - thanks!")},Ms=function(t,e){var n;return t.compareDocumentPosition?(n=t.compareDocumentPosition(e),2&n?1:-1):Rs(t,e)},Ls=function(){this.sort(this._isComponentQuery?Rs:Ms),this._dirty=!1},js=function(){var t=this;this._dirty||(this._dirty=!0,bs.scheduleTask(function(){t._sort()}))},Ds=function(t){var e=this.indexOf(this._isComponentQuery?t.instance:t);-1!==e&&this.splice(e,1)},Ns=ut,Fs=ct,Is=lt,Bs=dt,Us=ft,Vs=ht,qs={enqueue:function(t,e){t.event&&(t._eventQueue=t._eventQueue||[],t._eventQueue.push(t.event)),t.event=e},dequeue:function(t){t._eventQueue&&t._eventQueue.length?t.event=t._eventQueue.pop():delete t.event}},Gs=qs,zs=mt,Ws=bt,Hs=yt,Ks={capture:!0,noUnwrap:!0,fullRootGet:!0},Qs=_t,Ys=new is("insert"),$s=wt,Js=function(t,e,n,a){this.root=t,this.keypath=e,this.callback=n,this.defer=a.defer,this.context=a&&a.context?a.context:t};Js.prototype={init:function(t){this.value=this.root.get(this.keypath.str),t!==!1?this.update():this.oldValue=this.value},setValue:function(t){var e=this;s(t,this.value)||(this.value=t,this.defer&&this.ready?bs.scheduleTask(function(){return e.update()}):this.update())},update:function(){this.updating||(this.updating=!0,this.callback.call(this.context,this.value,this.oldValue,this.keypath.str),this.oldValue=this.value,this.updating=!1)}};var Xs,Zs=Js,tp=kt,ep=Array.prototype.slice;Xs=function(t,e,n,a){this.root=t,this.callback=n,this.defer=a.defer,this.keypath=e,this.regex=RegExp("^"+e.str.replace(/\./g,"\\.").replace(/\*/g,"([^\\.]+)")+"$"),this.values={},this.defer&&(this.proxies=[]),this.context=a&&a.context?a.context:t},Xs.prototype={init:function(t){var e,n;if(e=tp(this.root,this.keypath),t!==!1)for(n in e)e.hasOwnProperty(n)&&this.update(S(n));else this.values=e},update:function(t){var e,n=this;if(t.isPattern){e=tp(this.root,t);for(t in e)e.hasOwnProperty(t)&&this.update(S(t))}else if(!this.root.viewmodel.implicitChanges[t.str])return this.defer&&this.ready?void bs.scheduleTask(function(){return n.getProxy(t).update()}):void this.reallyUpdate(t)},reallyUpdate:function(t){var e,n,a,r;return e=t.str,n=this.root.viewmodel.get(t),this.updating?void(this.values[e]=n):(this.updating=!0,s(n,this.values[e])&&this.ready||(a=ep.call(this.regex.exec(e),1),r=[n,this.values[e],e].concat(a),this.values[e]=n,this.callback.apply(this.context,r)),void(this.updating=!1))},getProxy:function(t){var e=this;return this.proxies[t.str]||(this.proxies[t.str]={update:function(){return e.reallyUpdate(t)}}),this.proxies[t.str]}};var np,ap,rp,ip,op,sp,pp=Xs,up=St,cp={},lp=Et,dp=Ct,fp=function(t){return t.trim()},hp=function(t){return""!==t},mp=Pt,gp=At,vp=Ot,bp=Tt,yp=Array.prototype,_p=function(t){return function(e){for(var n=arguments.length,a=Array(n>1?n-1:0),r=1;n>r;r++)a[r-1]=arguments[r];var o,s,p,u,c=[];if(e=S(P(e)),o=this.viewmodel.get(e),s=o.length,!i(o))throw Error("Called ractive."+t+"('"+e.str+"'), but '"+e.str+"' does not refer to an array");return c=bp(o,t,a),u=yp[t].apply(o,a),p=bs.start(this,!0).then(function(){return u}),c?this.viewmodel.smartUpdate(e,o,c):this.viewmodel.mark(e),bs.end(),p}},xp=_p("pop"),wp=_p("push"),kp="/* Ractive.js component styles */\n",Sp=[],Ep=!1;Xi?(rp=document.createElement("style"),rp.type="text/css",ip=document.getElementsByTagName("head")[0],sp=!1,op=rp.styleSheet,ap=function(){var t=kp+Sp.map(function(t){return"\n/* {"+t.id+"} */\n"+t.styles}).join("\n");op?op.cssText=t:rp.innerHTML=t,sp||(ip.appendChild(rp),sp=!0)},np={add:function(t){Sp.push(t),Ep=!0},apply:function(){Ep&&(ap(),Ep=!1)}}):np={add:ko,apply:ko};var Cp,Pp,Ap,Op=np,Tp=Mt,Rp=new is("render"),Mp=new is("complete"),Lp={extend:function(t,e,n){e.adapt=jt(e.adapt,j(n.adapt))},init:function(){}},jp=Lp,Dp=Dt,Np=/(?:^|\})?\s*([^\{\}]+)\s*\{/g,Fp=/\/\*.*?\*\//g,Ip=/((?:(?:\[[^\]+]\])|(?:[^\s\+\>\~:]))+)((?::[^\s\+\>\~\(]+(?:\([^\)]+\))?)?\s*[\s\+\>\~]?)\s*/g,Bp=/^@media/,Up=/\[data-ractive-css~="\{[a-z0-9-]+\}"]/g,Vp=1,qp={ name:"css",extend:function(t,e,n){if(n.css){var a=Vp++,r=n.noCssTransform?n.css:Dp(n.css,a);e.cssId=a,Op.add({id:a,styles:r})}},init:function(){}},Gp=qp,zp={name:"data",extend:function(t,e,n){var a=void 0,r=void 0;if(n.data&&u(n.data))for(a in n.data)r=n.data[a],r&&"object"==typeof r&&(u(r)||i(r))&&m("Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n // this...\n data: function () {\n return {\n myObject: {}\n };\n })\n\n // instead of this:\n data: {\n myObject: {}\n }");e.data=Bt(e.data,n.data)},init:function(t,e,n){var a=Bt(t.prototype.data,n.data);return"function"==typeof a&&(a=a.call(e)),a||{}},reset:function(t){var e=this.init(t.constructor,t,t.viewmodel);return t.viewmodel.reset(e),!0}},Wp=zp,Hp=null,Kp=["preserveWhitespace","sanitize","stripComments","delimiters","tripleDelimiters","interpolate"],Qp={fromId:zt,isHashedId:Wt,isParsed:Ht,getParseOptions:Kt,createHelper:qt,parse:Gt},Yp=Qp,$p={name:"template",extend:function(t,e,n){var a;"template"in n&&(a=n.template,"function"==typeof a?e.template=a:e.template=Jt(a,e))},init:function(t,e,n){var a,r;a="template"in n?n.template:t.prototype.template,"function"==typeof a&&(r=a,a=Yt(e,r),e._config.template={fn:r,result:a}),a=Jt(a,e),e.template=a.t,a.p&&Xt(e.partials,a.p)},reset:function(t){var e,n=Qt(t);return n?(e=Jt(n,t),t.template=e.t,Xt(t.partials,e.p,!0),!0):void 0}},Jp=$p;Cp=["adaptors","components","computed","decorators","easing","events","interpolators","partials","transitions"],Pp=function(t,e){this.name=t,this.useDefaults=e},Pp.prototype={constructor:Pp,extend:function(t,e,n){this.configure(this.useDefaults?t.defaults:t,this.useDefaults?e:e.constructor,n)},init:function(){},configure:function(t,e,n){var a,r=this.name,i=n[r];a=So(t[r]);for(var o in i)a[o]=i[o];e[r]=a},reset:function(t){var e=t[this.name],n=!1;return Object.keys(e).forEach(function(t){var a=e[t];a._fn&&(a._fn.isOwner?e[t]=a._fn:delete e[t],n=!0)}),n}},Ap=Cp.map(function(t){return new Pp(t,"computed"===t)});var Xp,Zp,tu,eu,nu,au,ru=Ap,iu=Zt,ou=ae;eu={adapt:jp,css:Gp,data:Wp,template:Jp},tu=Object.keys(so),au=oe(tu.filter(function(t){return!eu[t]})),nu=oe(tu.concat(ru.map(function(t){return t.name}))),Zp=[].concat(tu.filter(function(t){return!ru[t]&&!eu[t]}),ru,eu.data,eu.template,eu.css),Xp={extend:function(t,e,n){return re("extend",t,e,n)},init:function(t,e,n){return re("init",t,e,n)},reset:function(t){return Zp.filter(function(e){return e.reset&&e.reset(t)}).map(function(t){return t.name})},order:Zp};var su,pu,uu=Xp,cu=se,lu=pe,du=ue,fu=ce,hu=le,mu=de,gu=fe,vu=he,bu=/^\s+/;pu=function(t){this.name="ParseError",this.message=t;try{throw Error(t)}catch(e){this.stack=e.stack}},pu.prototype=Error.prototype,su=function(t,e){var n,a,r=0;for(this.str=t,this.options=e||{},this.pos=0,this.lines=this.str.split("\n"),this.lineEnds=this.lines.map(function(t){var e=r+t.length+1;return r=e,e},0),this.init&&this.init(t,e),n=[];this.posn;n+=1)if(this.pos=e,r=t[n](this))return r;return null},getLinePos:function(t){for(var e,n=0,a=0;t>=this.lineEnds[n];)a=this.lineEnds[n],n+=1;return e=t-a,[n+1,e+1,t]},error:function(t){var e=this.getLinePos(this.pos),n=e[0],a=e[1],r=this.lines[e[0]-1],i=0,o=r.replace(/\t/g,function(t,n){return n/g,lc=/&/g;var vc=function(){return e(this.node)},bc=function(t){this.type=ku,this.text=t.template};bc.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createTextNode(this.text)),this.node},toString:function(t){return t?Se(this.text):this.text},unrender:function(t){return t?this.detach():void 0}};var yc=bc,_c=Ee,xc=Ce,wc=function(t,e,n){var a;this.ref=e,this.resolved=!1,this.root=t.root,this.parentFragment=t.parentFragment,this.callback=n,a=ls(t.root,e,t.parentFragment),void 0!=a?this.resolve(a):bs.addUnresolved(this)};wc.prototype={resolve:function(t){this.keypath&&!t&&bs.addUnresolved(this),this.resolved=!0,this.keypath=t,this.callback(t)},forceResolution:function(){this.resolve(S(this.ref))},rebind:function(t,e){var n;void 0!=this.keypath&&(n=this.keypath.replace(t,e),void 0!==n&&this.resolve(n))},unbind:function(){this.resolved||bs.removeUnresolved(this)}};var kc=wc,Sc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,this.rebind()},Ec={"@keypath":{prefix:"c",prop:["context"]},"@index":{prefix:"i",prop:["index"]},"@key":{prefix:"k",prop:["key","index"]}};Sc.prototype={rebind:function(){var t,e=this.ref,n=this.parentFragment,a=Ec[e];if(!a)throw Error('Unknown special reference "'+e+'" - valid references are @index, @key and @keypath');if(this.cached)return this.callback(S("@"+a.prefix+Pe(this.cached,a)));if(-1!==a.prop.indexOf("index")||-1!==a.prop.indexOf("key"))for(;n;){if(n.owner.currentSubtype===Bu&&void 0!==(t=Pe(n,a)))return this.cached=n,n.registerIndexRef(this),this.callback(S("@"+a.prefix+t));n=!n.parent&&n.owner&&n.owner.component&&n.owner.component.parentFragment&&!n.owner.component.instance.isolated?n.owner.component.parentFragment:n.parent}else for(;n;){if(void 0!==(t=Pe(n,a)))return this.callback(S("@"+a.prefix+t.str));n=n.parent}},unbind:function(){this.cached&&this.cached.unregisterIndexRef(this)}};var Cc=Sc,Pc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,e.ref.fragment.registerIndexRef(this),this.rebind()};Pc.prototype={rebind:function(){var t,e=this.ref.ref;t="k"===e.ref.t?"k"+e.fragment.key:"i"+e.fragment.index,void 0!==t&&this.callback(S("@"+t))},unbind:function(){this.ref.ref.fragment.unregisterIndexRef(this)}};var Ac=Pc,Oc=Ae;Ae.resolve=function(t){var e,n,a={};for(e in t.refs)n=t.refs[e],a[n.ref.n]="k"===n.ref.t?n.fragment.key:n.fragment.index;return a};var Tc,Rc=Oe,Mc=Te,Lc={},jc=Function.prototype.bind;Tc=function(t,e,n,a){var r,i=this;r=t.root,this.root=r,this.parentFragment=e,this.callback=a,this.owner=t,this.str=n.s,this.keypaths=[],this.pending=n.r.length,this.refResolvers=n.r.map(function(t,e){return Rc(i,t,function(t){i.resolve(e,t)})}),this.ready=!0,this.bubble()},Tc.prototype={bubble:function(){this.ready&&(this.uniqueString=Me(this.str,this.keypaths),this.keypath=Le(this.uniqueString),this.createEvaluator(),this.callback(this.keypath))},unbind:function(){for(var t;t=this.refResolvers.pop();)t.unbind()},resolve:function(t,e){this.keypaths[t]=e,this.bubble()},createEvaluator:function(){var t,e,n,a,r,i=this;a=this.keypath,t=this.root.viewmodel.computations[a.str],t?this.root.viewmodel.mark(a):(r=Mc(this.str,this.refResolvers.length),e=this.keypaths.map(function(t){var e;return"undefined"===t?function(){}:t.isSpecial?(e=t.value,function(){return e}):function(){var e=i.root.viewmodel.get(t,{noUnwrap:!0,fullRootGet:!0});return"function"==typeof e&&(e=De(e,i.root)),e}}),n={deps:this.keypaths.filter(je),getter:function(){var t=e.map(Re);return r.apply(null,t)}},t=this.root.viewmodel.compute(a,n))},rebind:function(t,e){this.refResolvers.forEach(function(n){return n.rebind(t,e)})}};var Dc=Tc,Nc=function(t,e,n){var a=this;this.resolver=e,this.root=e.root,this.parentFragment=n,this.viewmodel=e.root.viewmodel,"string"==typeof t?this.value=t:t.t===Nu?this.refResolver=Rc(this,t.n,function(t){a.resolve(t)}):new Dc(e,n,t,function(t){a.resolve(t)})};Nc.prototype={resolve:function(t){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.keypath=t,this.value=this.viewmodel.get(t),this.bind(),this.resolver.bubble()},bind:function(){this.viewmodel.register(this.keypath,this)},rebind:function(t,e){this.refResolver&&this.refResolver.rebind(t,e)},setValue:function(t){this.value=t,this.resolver.bubble()},unbind:function(){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.refResolver&&this.refResolver.unbind()},forceResolution:function(){this.refResolver&&this.refResolver.forceResolution()}};var Fc=Nc,Ic=function(t,e,n){var a,r,i,o,s=this;this.parentFragment=o=t.parentFragment,this.root=a=t.root,this.mustache=t,this.ref=r=e.r,this.callback=n,this.unresolved=[],(i=ls(a,r,o))?this.base=i:this.baseResolver=new kc(this,r,function(t){s.base=t,s.baseResolver=null,s.bubble()}),this.members=e.m.map(function(t){return new Fc(t,s,o)}),this.ready=!0,this.bubble()};Ic.prototype={getKeypath:function(){var t=this.members.map(Ne);return!t.every(Fe)||this.baseResolver?null:this.base.join(t.join("."))},bubble:function(){this.ready&&!this.baseResolver&&this.callback(this.getKeypath())},unbind:function(){this.members.forEach(K)},rebind:function(t,e){var n;if(this.base){var a=this.base.replace(t,e);a&&a!==this.base&&(this.base=a,n=!0)}this.members.forEach(function(a){a.rebind(t,e)&&(n=!0)}),n&&this.bubble()},forceResolution:function(){this.baseResolver&&(this.base=S(this.ref),this.baseResolver.unbind(),this.baseResolver=null),this.members.forEach(Ie),this.bubble()}};var Bc=Ic,Uc=Be,Vc=Ue,qc=Ve,Gc={getValue:xc,init:Uc,resolve:Vc,rebind:qc},zc=function(t){this.type=Su,Gc.init(this,t)};zc.prototype={update:function(){this.node.data=void 0==this.value?"":this.value},resolve:Gc.resolve,rebind:Gc.rebind,detach:vc,unbind:_c,render:function(){return this.node||(this.node=document.createTextNode(n(this.value))),this.node},unrender:function(t){t&&e(this.node)},getValue:Gc.getValue,setValue:function(t){var e;this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),s(t,this.value)||(this.value=t,this.parentFragment.bubble(),this.node&&bs.addView(this))},firstNode:function(){return this.node},toString:function(t){var e=""+n(this.value);return t?Se(e):e}};var Wc=zc,Hc=qe,Kc=Ge,Qc=ze,Yc=We,$c=He,Jc=Ke,Xc=Qe,Zc=Ye,tl=$e,el=function(t,e){Gc.rebind.call(this,t,e)},nl=Xe,al=Ze,rl=ln,il=dn,ol=fn,sl=gn,pl=function(t){this.type=Cu,this.subtype=this.currentSubtype=t.template.n,this.inverted=this.subtype===Iu,this.pElement=t.pElement,this.fragments=[],this.fragmentsToCreate=[],this.fragmentsToRender=[],this.fragmentsToUnrender=[],t.template.i&&(this.indexRefs=t.template.i.split(",").map(function(t,e){return{n:t,t:0===e?"k":"i"}})),this.renderedFragments=[],this.length=0,Gc.init(this,t)};pl.prototype={bubble:Hc,detach:Kc,find:Qc,findAll:Yc,findAllComponents:$c,findComponent:Jc,findNextNode:Xc,firstNode:Zc,getIndexRef:function(t){if(this.indexRefs)for(var e=this.indexRefs.length;e--;){var n=this.indexRefs[e];if(n.n===t)return n}},getValue:Gc.getValue,shuffle:tl,rebind:el,render:nl,resolve:Gc.resolve,setValue:al,toString:rl,unbind:il,unrender:ol,update:sl};var ul,cl,ll=pl,dl=vn,fl=bn,hl=yn,ml=_n,gl={};try{co("table").innerHTML="foo"}catch(Ao){ul=!0,cl={TABLE:['',"
      "],THEAD:['',"
      "],TBODY:['',"
      "],TR:['',"
      "],SELECT:['"]}}var vl=function(t,e,n){var a,r,i,o,s,p=[];if(null!=t&&""!==t){for(ul&&(r=cl[e.tagName])?(a=xn("DIV"),a.innerHTML=r[0]+t+r[1],a=a.querySelector(".x"),"SELECT"===a.tagName&&(i=a.options[a.selectedIndex])):e.namespaceURI===no.svg?(a=xn("DIV"),a.innerHTML=''+t+"",a=a.querySelector(".x")):(a=xn(e.tagName),a.innerHTML=t,"SELECT"===a.tagName&&(i=a.options[a.selectedIndex]));o=a.firstChild;)p.push(o),n.appendChild(o);if("SELECT"===e.tagName)for(s=p.length;s--;)p[s]!==i&&(p[s].selected=!1)}return p},bl=wn,yl=Sn,_l=En,xl=Cn,wl=Pn,kl=An,Sl=function(t){this.type=Eu,Gc.init(this,t)};Sl.prototype={detach:dl,find:fl,findAll:hl,firstNode:ml,getValue:Gc.getValue,rebind:Gc.rebind,render:yl,resolve:Gc.resolve,setValue:_l,toString:xl,unbind:_c,unrender:wl,update:kl};var El,Cl,Pl,Al,Ol=Sl,Tl=function(){this.parentFragment.bubble()},Rl=On,Ml=function(t){return this.node?lo(this.node,t)?this.node:this.fragment&&this.fragment.find?this.fragment.find(t):void 0:null},Ll=function(t,e){e._test(this,!0)&&e.live&&(this.liveQueries||(this.liveQueries=[])).push(e),this.fragment&&this.fragment.findAll(t,e)},jl=function(t,e){this.fragment&&this.fragment.findAllComponents(t,e)},Dl=function(t){return this.fragment?this.fragment.findComponent(t):void 0},Nl=Tn,Fl=Rn,Il=Mn,Bl=/^true|on|yes|1$/i,Ul=/^[0-9]+$/,Vl=function(t,e){var n,a,r;return r=e.a||{},a={},n=r.twoway,void 0!==n&&(a.twoway=0===n||Bl.test(n)),n=r.lazy,void 0!==n&&(0!==n&&Ul.test(n)?a.lazy=parseInt(n):a.lazy=0===n||Bl.test(n)),a},ql=Ln;El="altGlyph altGlyphDef altGlyphItem animateColor animateMotion animateTransform clipPath feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence foreignObject glyphRef linearGradient radialGradient textPath vkern".split(" "),Cl="attributeName attributeType baseFrequency baseProfile calcMode clipPathUnits contentScriptType contentStyleType diffuseConstant edgeMode externalResourcesRequired filterRes filterUnits glyphRef gradientTransform gradientUnits kernelMatrix kernelUnitLength keyPoints keySplines keyTimes lengthAdjust limitingConeAngle markerHeight markerUnits markerWidth maskContentUnits maskUnits numOctaves pathLength patternContentUnits patternTransform patternUnits pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits refX refY repeatCount repeatDur requiredExtensions requiredFeatures specularConstant specularExponent spreadMethod startOffset stdDeviation stitchTiles surfaceScale systemLanguage tableValues targetX targetY textLength viewBox viewTarget xChannelSelector yChannelSelector zoomAndPan".split(" "),Pl=function(t){for(var e={},n=t.length;n--;)e[t[n].toLowerCase()]=t[n];return e},Al=Pl(El.concat(Cl));var Gl=function(t){var e=t.toLowerCase();return Al[e]||e},zl=function(t,e){var n,a;if(n=e.indexOf(":"),-1===n||(a=e.substr(0,n),"xmlns"===a))t.name=t.element.namespace!==no.html?Gl(e):e;else if(e=e.substring(n+1),t.name=Gl(e),t.namespace=no[a.toLowerCase()],t.namespacePrefix=a,!t.namespace)throw'Unknown namespace ("'+a+'")'},Wl=jn,Hl=Dn,Kl=Nn,Ql=Fn,Yl={"accept-charset":"acceptCharset",accesskey:"accessKey",bgcolor:"bgColor","class":"className",codebase:"codeBase",colspan:"colSpan",contenteditable:"contentEditable",datetime:"dateTime",dirname:"dirName","for":"htmlFor","http-equiv":"httpEquiv",ismap:"isMap",maxlength:"maxLength",novalidate:"noValidate",pubdate:"pubDate",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"},$l=In,Jl=Un,Xl=Vn,Zl=qn,td=Gn,ed=zn,nd=Wn,ad=Hn,rd=Kn,id=Qn,od=Yn,sd=$n,pd=Jn,ud=Xn,cd=Zn,ld=function(t){this.init(t)};ld.prototype={bubble:ql,init:Hl,rebind:Kl,render:Ql,toString:$l,unbind:Jl,update:cd};var dd,fd=ld,hd=function(t,e){var n,a,r=[];for(n in e)"twoway"!==n&&"lazy"!==n&&e.hasOwnProperty(n)&&(a=new fd({element:t,name:n,value:e[n],root:t.root}),r[n]=a,"value"!==n&&r.push(a));return(a=r.value)&&r.push(a),r};"undefined"!=typeof document&&(dd=co("div"));var md=function(t,e){this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.attributes=[],this.fragment=new rg({root:t.root,owner:this,template:[e]})};md.prototype={bubble:function(){this.node&&this.update(),this.element.bubble()},rebind:function(t,e){this.fragment.rebind(t,e)},render:function(t){this.node=t,this.isSvg=t.namespaceURI===no.svg,this.update()},unbind:function(){this.fragment.unbind()},update:function(){var t,e,n=this;t=""+this.fragment,e=ta(t,this.isSvg),this.attributes.filter(function(t){return ea(e,t)}).forEach(function(t){n.node.removeAttribute(t.name)}),e.forEach(function(t){n.node.setAttribute(t.name,t.value)}),this.attributes=e},toString:function(){return""+this.fragment}};var gd=md,vd=function(t,e){return e?e.map(function(e){return new gd(t,e)}):[]},bd=function(t){var e,n,a,r;if(this.element=t,this.root=t.root,this.attribute=t.attributes[this.name||"value"],e=this.attribute.interpolator,e.twowayBinding=this,n=e.keypath){if("}"===n.str.slice(-1))return g("Two-way binding does not work with expressions (`%s` on <%s>)",e.resolver.uniqueString,t.name,{ractive:this.root}),!1;if(n.isSpecial)return g("Two-way binding does not work with %s",e.resolver.ref,{ractive:this.root}),!1}else{var i=e.template.r?"'"+e.template.r+"' reference":"expression";m("The %s being used for two-way binding is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity",i,{ractive:this.root}),e.resolver.forceResolution(),n=e.keypath}this.attribute.isTwoway=!0,this.keypath=n,a=this.root.viewmodel.get(n),void 0===a&&this.getInitialValue&&(a=this.getInitialValue(),void 0!==a&&this.root.viewmodel.set(n,a)),(r=na(t))&&(this.resetValue=a,r.formBindings.push(this))};bd.prototype={handleChange:function(){var t=this;bs.start(this.root),this.attribute.locked=!0,this.root.viewmodel.set(this.keypath,this.getValue()),bs.scheduleTask(function(){return t.attribute.locked=!1}),bs.end()},rebound:function(){var t,e,n;e=this.keypath,n=this.attribute.interpolator.keypath,e!==n&&(N(this.root._twowayBindings[e.str],this),this.keypath=n,t=this.root._twowayBindings[n.str]||(this.root._twowayBindings[n.str]=[]),t.push(this))},unbind:function(){}},bd.extend=function(t){var e,n=this;return e=function(t){bd.call(this,t),this.init&&this.init()},e.prototype=So(n.prototype),a(e.prototype,t),e.extend=bd.extend,e};var yd,_d=bd,xd=aa;yd=_d.extend({getInitialValue:function(){return""},getValue:function(){return this.element.node.value},render:function(){var t,e=this.element.node,n=!1;this.rendered=!0,t=this.root.lazy,this.element.lazy===!0?t=!0:this.element.lazy===!1?t=!1:p(this.element.lazy)?(t=!1,n=+this.element.lazy):p(t||"")&&(n=+t,t=!1,this.element.lazy=n),this.handler=n?ia:xd,e.addEventListener("change",xd,!1),t||(e.addEventListener("input",this.handler,!1),e.attachEvent&&e.addEventListener("keyup",this.handler,!1)),e.addEventListener("blur",ra,!1)},unrender:function(){var t=this.element.node;this.rendered=!1,t.removeEventListener("change",xd,!1),t.removeEventListener("input",this.handler,!1),t.removeEventListener("keyup",this.handler,!1),t.removeEventListener("blur",ra,!1)}});var wd=yd,kd=wd.extend({getInitialValue:function(){return this.element.fragment?""+this.element.fragment:""},getValue:function(){return this.element.node.innerHTML}}),Sd=kd,Ed=oa,Cd={},Pd=_d.extend({name:"checked",init:function(){this.siblings=Ed(this.root._guid,"radio",this.element.getAttribute("name")),this.siblings.push(this)},render:function(){var t=this.element.node;t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},handleChange:function(){bs.start(this.root),this.siblings.forEach(function(t){t.root.viewmodel.set(t.keypath,t.getValue())}),bs.end()},getValue:function(){return this.element.node.checked},unbind:function(){N(this.siblings,this)}}),Ad=Pd,Od=_d.extend({name:"name",init:function(){this.siblings=Ed(this.root._guid,"radioname",this.keypath.str),this.siblings.push(this),this.radioName=!0},getInitialValue:function(){return this.element.getAttribute("checked")?this.element.getAttribute("value"):void 0},render:function(){var t=this.element.node;t.name="{{"+this.keypath.str+"}}",t.checked=this.root.viewmodel.get(this.keypath)==this.element.getAttribute("value"),t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},getValue:function(){var t=this.element.node;return t._ractive?t._ractive.value:t.value},handleChange:function(){this.element.node.checked&&_d.prototype.handleChange.call(this)},rebound:function(t,e){var n;_d.prototype.rebound.call(this,t,e),(n=this.element.node)&&(n.name="{{"+this.keypath.str+"}}")},unbind:function(){N(this.siblings,this)}}),Td=Od,Rd=_d.extend({name:"name",getInitialValue:function(){return this.noInitialValue=!0,[]},init:function(){var t,e;this.checkboxName=!0,this.siblings=Ed(this.root._guid,"checkboxes",this.keypath.str),this.siblings.push(this),this.noInitialValue&&(this.siblings.noInitialValue=!0),this.siblings.noInitialValue&&this.element.getAttribute("checked")&&(t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),t.push(e))},unbind:function(){N(this.siblings,this)},render:function(){var t,e,n=this.element.node;t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),i(t)?this.isChecked=M(t,e):this.isChecked=t==e,n.name="{{"+this.keypath.str+"}}",n.checked=this.isChecked,n.addEventListener("change",xd,!1),n.attachEvent&&n.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},changed:function(){var t=!!this.isChecked;return this.isChecked=this.element.node.checked,this.isChecked===t},handleChange:function(){this.isChecked=this.element.node.checked,_d.prototype.handleChange.call(this)},getValue:function(){return this.siblings.filter(sa).map(pa)}}),Md=Rd,Ld=_d.extend({name:"checked",render:function(){var t=this.element.node;t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},getValue:function(){return this.element.node.checked}}),jd=Ld,Dd=_d.extend({getInitialValue:function(){var t,e,n,a,r=this.element.options;if(void 0===this.element.getAttribute("value")&&(e=t=r.length,t)){for(;e--;)if(r[e].getAttribute("selected")){n=r[e].getAttribute("value"),a=!0;break}if(!a)for(;++ee;e+=1)if(a=t[e],t[e].selected)return r=a._ractive?a._ractive.value:a.value},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))}}),Nd=Dd,Fd=Nd.extend({getInitialValue:function(){return this.element.options.filter(function(t){return t.getAttribute("selected")}).map(function(t){return t.getAttribute("value")})},render:function(){var t;this.element.node.addEventListener("change",xd,!1),t=this.root.viewmodel.get(this.keypath),void 0===t&&this.handleChange()},unrender:function(){this.element.node.removeEventListener("change",xd,!1)},setValue:function(){throw Error("TODO not implemented yet")},getValue:function(){var t,e,n,a,r,i;for(t=[],e=this.element.node.options,a=e.length,n=0;a>n;n+=1)r=e[n],r.selected&&(i=r._ractive?r._ractive.value:r.value,t.push(i));return t},handleChange:function(){var t,e,n;return t=this.attribute,e=t.value,n=this.getValue(),void 0!==e&&L(n,e)||Nd.prototype.handleChange.call(this),this},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))},updateModel:function(){void 0!==this.attribute.value&&this.attribute.value.length||this.root.viewmodel.set(this.keypath,this.initialValue)}}),Id=Fd,Bd=_d.extend({render:function(){this.element.node.addEventListener("change",xd,!1)},unrender:function(){this.element.node.removeEventListener("change",xd,!1)},getValue:function(){return this.element.node.files}}),Ud=Bd,Vd=wd.extend({getInitialValue:function(){},getValue:function(){var t=parseFloat(this.element.node.value);return isNaN(t)?void 0:t}}),qd=ua,Gd=la,zd=da,Wd=fa,Hd=ha,Kd=/^event(?:\.(.+))?/,Qd=ba,Yd=ya,$d={},Jd={touchstart:!0,touchmove:!0,touchend:!0,touchcancel:!0,touchleave:!0},Xd=xa,Zd=wa,tf=ka,ef=Sa,nf=Ea,af=function(t,e,n){this.init(t,e,n)};af.prototype={bubble:Gd,fire:zd,getAction:Wd,init:Hd,listen:Yd,rebind:Xd,render:Zd,resolve:tf,unbind:ef,unrender:nf};var rf=af,of=function(t,e){var n,a,r,i,o=[];for(a in e)if(e.hasOwnProperty(a))for(r=a.split("-"),n=r.length;n--;)i=new rf(t,r[n],e[a]),o.push(i);return o},sf=function(t,e){var n,a,r,i=this;this.element=t,this.root=n=t.root,a=e.n||e,("string"==typeof a||(r=new rg({template:a,root:n,owner:t}),a=""+r,r.unbind(),""!==a))&&(e.a?this.params=e.a:e.d&&(this.fragment=new rg({template:e.d,root:n,owner:t}),this.params=this.fragment.getArgsList(),this.fragment.bubble=function(){this.dirtyArgs=this.dirtyValue=!0,i.params=this.getArgsList(),i.ready&&i.update()}),this.fn=v("decorators",n,a),this.fn||l(Io(a,"decorator")))};sf.prototype={init:function(){var t,e,n;if(t=this.element.node,this.params?(n=[t].concat(this.params),e=this.fn.apply(this.root,n)):e=this.fn.call(this.root,t),!e||!e.teardown)throw Error("Decorator definition must return an object with a teardown method");this.actual=e,this.ready=!0},update:function(){this.actual.update?this.actual.update.apply(this.root,this.params):(this.actual.teardown(!0),this.init())},rebind:function(t,e){this.fragment&&this.fragment.rebind(t,e)},teardown:function(t){this.torndown=!0,this.ready&&this.actual.teardown(),!t&&this.fragment&&this.fragment.unbind()}};var pf,uf,cf,lf=sf,df=Ma,ff=La,hf=Ba,mf=function(t){ -return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xi?(uf={},cf=co("div").style,pf=function(t){var e,n,a;if(t=mf(t),!uf[t])if(void 0!==cf[t])uf[t]=t;else for(a=t.charAt(0).toUpperCase()+t.substring(1),e=ro.length;e--;)if(n=ro[e],void 0!==cf[n+a]){uf[t]=n+a;break}return uf[t]}):pf=null;var gf,vf,bf=pf;Xi?(vf=window.getComputedStyle||Po.getComputedStyle,gf=function(t){var e,n,a,r,o;if(e=vf(this.node),"string"==typeof t)return o=e[bf(t)],"0px"===o&&(o=0),o;if(!i(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},a=t.length;a--;)r=t[a],o=e[bf(r)],"0px"===o&&(o=0),n[r]=o;return n}):gf=null;var yf=gf,_f=function(t,e){var n;if("string"==typeof t)this.node.style[bf(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[bf(n)]=t[n]);return this},xf=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(g(Io(t.easing,"easing")),e=Ua)):e="function"==typeof t.easing?t.easing:Ua,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,xs.add(this)};xf.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wf,kf,Sf,Ef,Cf,Pf,Af,Of,Tf=xf,Rf=RegExp("^-(?:"+ro.join("|")+")-"),Mf=function(t){return t.replace(Rf,"")},Lf=RegExp("^(?:"+ro.join("|")+")([A-Z])"),jf=function(t){var e;return t?(Lf.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Df={},Nf={};Xi?(kf=co("div").style,function(){void 0!==kf.transition?(Sf="transition",Ef="transitionend",Cf=!0):void 0!==kf.webkitTransition?(Sf="webkitTransition",Ef="webkitTransitionEnd",Cf=!0):Cf=!1}(),Sf&&(Pf=Sf+"Duration",Af=Sf+"Property",Of=Sf+"TimingFunction"),wf=function(t,e,n,a,r){setTimeout(function(){var i,o,s,p,u;p=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Af]=a.map(bf).map(jf).join(","),t.node.style[Of]=jf(n.easing||"linear"),t.node.style[Pf]=n.duration/1e3+"s",u=function(e){var n;n=a.indexOf(mf(Mf(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},t.node.addEventListener(Ef,u,!1),setTimeout(function(){for(var r,c,l,d,f,h=a.length,g=[];h--;)d=a[h],r=i+d,Cf&&!Nf[r]&&(t.node.style[bf(d)]=e[d],Df[r]||(c=t.getStyle(d),Df[r]=t.getStyle(d)!=e[d],Nf[r]=!Df[r],Nf[r]&&(t.node.style[bf(d)]=c))),(!Cf||Nf[r])&&(void 0===c&&(c=t.getStyle(d)),l=a.indexOf(d),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),f=/[^\d]*$/.exec(e[d])[0],g.push({name:bf(d),interpolator:Uo(parseFloat(c),parseFloat(e[d])),suffix:f}));g.length?new Tf({root:t.root,duration:n.duration,easing:mf(n.easing||""),step:function(e){var n,a;for(a=g.length;a--;)n=g[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,p()}}):o=!0,a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},0)},n.delay||0)}):wf=null;var Ff,If,Bf,Uf,Vf,qf=wf;if("undefined"!=typeof document){if(Ff="hidden",Vf={},Ff in document)Bf="";else for(Uf=ro.length;Uf--;)If=ro[Uf],Ff=If+"Hidden",Ff in document&&(Bf=If);void 0!==Bf?(document.addEventListener(Bf+"visibilitychange",Va),Va()):("onfocusout"in document?(document.addEventListener("focusout",qa),document.addEventListener("focusin",Ga)):(window.addEventListener("pagehide",qa),window.addEventListener("blur",qa),window.addEventListener("pageshow",Ga),window.addEventListener("focus",Ga)),Vf.hidden=!1)}var Gf,zf,Wf,Hf=Vf;Xi?(zf=window.getComputedStyle||Po.getComputedStyle,Gf=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hf.hidden)return this.setStyle(t,e),Wf||(Wf=us.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(g('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new us(function(t){var e,i,o,s,p,u,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zf(r.node),p={},u=e.length;u--;)c=e[u],s=o[bf(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bf(c)]=s);return i.length?void qf(r,a,n,i,t):void t()});return i}):Gf=null;var Kf=Gf,Qf=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},Yf=za,$f=function(t,e,n){this.init(t,e,n)};$f.prototype={init:hf,start:Yf,getStyle:yf,setStyle:_f,animateStyle:Kf,processParams:Qf};var Jf,Xf,Zf=$f,th=Ha;Jf=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xf=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&$a(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Se(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Rl,find:Ml,findAll:Ll,findAllComponents:jl,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:df,rebind:ff,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,ph=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},uh=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',dh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Au,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Gc.init(this,t),this.keypath||((n=uh(this.root,this.name,e))?(_c.call(this),this.isNamed=!0,this.setTemplate(n)):g(lh,this.name))};dh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||qc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Gc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=uh(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=uh(this.root,this.name,this.parentFragment))&&(_c.call(this),this.isNamed=!0),e||g(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rg({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===ku?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||_c.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var fh,hh,mh,gh=dh,vh=pr,bh=ur,yh=new is("detach"),_h=cr,xh=lr,wh=dr,kh=fr,Sh=hr,Eh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bp(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};Eo(Ph,t,{value:e})}),fh={},fh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],Eo(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Rh,Mh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=S(n),e._ractive||(Eo(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Mh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Rh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Rh);a.splice(r,1)}}else delete t._ractive,Mh.unpatch(this.value)}},Rh="Something went wrong in a rather interesting way";var Lh,jh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Lh={filter:function(t,e,n){var a,r;return e?(e=S(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new jh(t,e,n)}},jh=function(t,e,n){var a,r,i;return n=S(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void gr(this,e,r)},jh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){Lh=!1}var Ih,Bh,Uh=Lh;Uh&&(Ih={filter:function(t,e,n){return Uh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Uh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var Vh=Ih,qh=vr,Gh={},zh=_r,Wh=xr,Hh=Sr,Kh=Or,Qh=Tr,Yh=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Yh.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var $h=Yh,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),d(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Rr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new $h(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Mr,tm={FAILED_LOOKUP:!0},em=Lr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,p;s=a,p=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&p>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},pm=Ir,um={},cm=Vr,lm=Gr,dm=zr,fm=Wr,hm=Kr,mm={implicit:!0},gm={noCascade:!0},vm=Yr,bm=$r,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=So(null),this.deps={computed:So(null),"default":So(null)},this.depsMap={computed:So(null),"default":So(null)},this.patternObservers=[],this.specials=So(null),this.wrapped=So(null),this.computations=So(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=So(null);for(e in s)this.map(S(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(S(e),o[e]);this.ready=!0};ym.prototype={adapt:qh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:pm,register:cm,release:lm,reset:dm,set:fm,smartUpdate:hm,teardown:vm,unregister:bm};var _m=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var xm=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Sm=new is("construct"),Em=new is("config"),Cm=new xm("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Rm=function(t,e,n,r,o){var s,p,u,c,l,d,f={},h={},g={},v=[];for(p=t.parentFragment,u=t.root,o=o||{},a(f,o),o.content=r||[],f[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=p;c;){if(c.owner.type===Mu){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=dc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");di(o)?(g[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?d?s.set(e,t.value):(h[e]=t.value,delete g[e]):d?s.viewmodel.mappings[e].resolve(t):g[e].keypath=t})):r=new Tm(t,o,function(t){d?s.set(e,t):h[e]=t}),v.push(r)}}),s=So(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:u.magic||e.defaults.magic,modifyArrays:u.modifyArrays,adapt:u.adapt},{parent:u,component:t,container:l,mappings:g,inlinePartials:f,cssIds:p.cssIds}),d=!0,t.resolvers=v,s},Mm=fi,Lm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},jm=mi,Dm=gi,Nm=vi,Fm=bi,Im=yi,Bm=new is("teardown"),Um=xi,Vm=function(t,e){this.init(t,e)};Vm.prototype={detach:bh,find:_h,findAll:xh,findAllComponents:wh,findComponent:kh,findNextNode:Sh,firstNode:Eh,init:jm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:Um};var qm=Vm,Gm=function(t){this.type=Ou,this.value=t.template.c};Gm.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Gm,Wm=function(t){var e,n;this.type=Mu,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rg({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,Ym=wi,$m=Si,Jm=Ei,Xm=Ci,Zm=Oi,tg=Ri,eg=function(t){this.init(t)};eg.prototype={bubble:cu,detach:lu,find:du,findAll:fu,findAllComponents:hu,findComponent:mu,findNextNode:gu,firstNode:vu,getArgsList:hc,getNode:mc,getValue:gc,init:Ym,rebind:$m,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tg};var ng,ag,rg=eg,ig=Mi,og=["template","partials","components","decorators","events"],sg=new is("reset"),pg=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Au&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Ru&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pu&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},ug=Li,cg=_p("reverse"),lg=ji,dg=_p("shift"),fg=_p("sort"),hg=_p("splice"),mg=Ni,gg=Fi,vg=new is("teardown"),bg=Bi,yg=Ui,_g=Vi,xg=new is("unrender"),wg=_p("unshift"),kg=qi,Sg=new is("update"),Eg=Gi,Cg={add:Zo,animate:Ss,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:Us,findParent:Vs,fire:Ws,get:Hs,insert:Qs,merge:$s,observe:lp,observeOnce:dp,off:mp,on:gp,once:vp,pop:xp,push:wp,render:Tp,reset:ig,resetPartial:pg,resetTemplate:ug,reverse:cg,set:lg,shift:dg,sort:fg,splice:hg,subtract:mg,teardown:gg,toggle:bg,toHTML:yg,toHtml:yg,unrender:_g,unshift:wg,update:kg,updateModel:Eg},Pg=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Ag=Hi,Og=$i,Tg=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};ng=function(t){return this instanceof ng?void Om(this,t):new ng(t)},ag={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Og},getNodeInfo:{value:Tg},parse:{value:Hp},Promise:{value:us},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:po},events:{writable:!0,value:{}},interpolators:{writable:!0,value:qo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(ng,ag),ng.prototype=a(Cg,so),ng.prototype.constructor=ng,ng.defaults=ng.prototype;var Rg="function";if(typeof Date.now!==Rg||typeof String.prototype.trim!==Rg||typeof Object.keys!==Rg||typeof Array.prototype.indexOf!==Rg||typeof Array.prototype.forEach!==Rg||typeof Array.prototype.map!==Rg||typeof Array.prototype.filter!==Rg||"undefined"!=typeof window&&typeof window.addEventListener!==Rg)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mg=ng;return Mg})},{}],342:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,293],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,313],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,333]}],style:["width: ",{t:2,r:"percentage",p:[14,48,358]},"%"]}}," ",{p:[15,3,384],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,406]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],343:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,p=/([\w\-]+)\s*(\dx)/g,u=p.exec(s),c=u[1],l=u[2];e+=''}}return e&&(e+=""),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,1950],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,1970]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2052]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2004]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2142]}],d:[]}},f:[{t:4,f:[{p:[78,5,2188],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2204]}]}}],n:50,r:"icon",p:[77,3,2171]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2255]}],n:50,r:"icon_stack",p:[80,3,2231]}," ",{t:16,p:[83,3,2301]}]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482}],344:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,42],t:7,e:"header",f:[{p:[4,7,57],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,61]}]}," ",{t:4,f:[{p:[6,9,105],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,130]}]}],n:50,r:"button",p:[5,7,82]}]}],n:50,r:"title",p:[2,3,24]}," ",{p:[10,3,193],t:7,e:"article",f:[{t:16,p:[11,5,207]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],345:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,159],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,185]}],placeholder:[{t:2,r:"placeholder",p:[12,51,209]}]}}," ",{p:[13,1,228],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{341:341}],346:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(338),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1223],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1267]}]},f:[{p:[48,3,1287],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1454],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1464]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1483]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1509]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1583],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1592]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1610]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1660]}," ",{t:2,r:"xunit",p:[53,113,1685]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1549]}],n:52,r:"xaxis",p:[50,7,1430]}," ",{t:4,f:[{p:[57,9,1764],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1781]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1796]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1815]}],stroke:"darkgray"}}," ",{p:[58,9,1858],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1873]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1925]}," ",{t:2,r:"yunit",p:[58,92,1941]}]}],n:52,r:"yaxis",p:[56,7,1740]}," ",{t:4,f:[{p:[61,9,2011],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2020]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2049]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,1980]}," ",{t:4,f:[{p:[64,9,2137],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2146]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2177]}],fill:"none"}}],n:52, -i:"curve",r:"curves",p:[63,7,2106]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2308],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2337]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2348]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2386]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2263]}],n:52,i:"curve",r:"curves",p:[66,7,2232]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2605],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2632]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2639]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2718]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2787]}," ",{t:2,r:"yunit",p:[75,43,2815]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2827]}," ",{t:2,r:"xunit",p:[75,92,2864]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2566]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2521]}],n:52,i:"curve",r:"curves",p:[71,7,2490]}," ",{t:4,f:[{p:[81,9,2983],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3007]},", 10)"]},f:[{p:[82,11,3073],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3093]}]}}," ",{p:[83,11,3124],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3155]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,2952]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1323]}]}]}]},e.exports=a.extend(r.exports)},{338:338,341:341}],347:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,23]}]}]},e.exports=a.extend(r.exports)},{341:341}],348:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,739],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,716]}]},e.exports=a.extend(r.exports)},{341:341,481:481,483:483}],349:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,82],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,130]}],r:"labelcolor",p:[3,32,109]}]},f:[{t:2,r:"label",p:[3,84,161]},":"]}],n:50,r:"label",p:[2,3,64]}," ",{t:4,f:[{t:16,p:[6,5,210]}],n:50,r:"nowrap",p:[5,3,191]},{t:4,n:51,f:[{p:[8,5,235],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,263]}]},f:[{t:16,p:[9,7,304]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{341:341}],350:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,45],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,99]}],n:50,r:"button",p:[5,7,85]}]}],n:50,r:"title",p:[2,3,27]}," ",{p:[8,3,149],t:7,e:"article",f:[{t:16,p:[9,5,163]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],351:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;p.set("shown",p.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,505],t:7,e:"header",f:[{t:4,f:[{p:[22,5,535],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,552]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,577]}]}],n:52,r:"tabs",p:[21,3,516]}]}," ",{p:[25,1,617],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,632]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(352)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,352:352}],352:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,16]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],353:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481),r=t(483);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1391],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1441],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1478]}]}}," ",{p:[52,5,1505],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1525]}]}," ",{t:4,f:[{p:[54,7,1573],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1642],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1546]}]}],n:50,r:"config.titlebar",p:[49,1,1365]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482,483:483}],354:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,636],t:7,e:"ui-notice",f:[{p:[28,5,652],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,677]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,784],t:7,e:"br"}," ",{p:[29,5,794],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,870],t:7,e:"br"}," ",{p:[30,5,880],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,997],t:7,e:"br"}," ",{p:[31,5,1007],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1124],t:7,e:"hr"}," ",{p:[33,5,1134],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1207],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1381],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1528],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1699],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1785],t:7,e:"hr"}," ",{p:[43,7,1797],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1815]}]},{p:[43,38,1828],t:7,e:"br"}," ",{p:[44,7,1840],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1858]}]}],n:50,r:"debug",p:[41,5,1765]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,596]}]},e.exports=a.extend(r.exports)},{341:341}],355:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},shockState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,327],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[23,2,362],t:7,e:"ui-section",a:{label:"Main"},f:[{p:[24,3,390],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.main"],s:"_0(_1)"},p:[24,16,403]}]},f:[{t:2,x:{r:["data.power.main"],s:'_0?"Online":"Offline"'},p:[24,49,436]}]}," ",{t:4,f:["[ ",{p:[26,6,542],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"},p:[25,3,488]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.main_timeleft",p:[29,7,646]}," seconds left ]"],n:50,x:{r:["data.power.main_timeleft"],s:"_0>0"},p:[28,4,603]}],x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"}}," ",{p:[32,3,713],t:7,e:"div",a:{style:"float:right"},f:[{p:[33,4,742],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-main",state:[{t:2,x:{r:["data.power.main"],s:'_0?null:"disabled"'},p:[33,63,801]}]},f:["Disrupt"]}]}]}," ",{p:[36,2,887],t:7,e:"ui-section",a:{label:"Backup"},f:[{p:[37,3,917],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.backup"],s:"_0(_1)"},p:[37,16,930]}]},f:[{t:2,x:{r:["data.power.backup"],s:'_0?"Online":"Offline"'},p:[37,51,965]}]}," ",{t:4,f:["[ ",{p:[39,6,1077],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"},p:[38,3,1019]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.backup_timeleft",p:[42,7,1183]}," seconds left ]"],n:50,x:{r:["data.power.backup_timeleft"],s:"_0>0"},p:[41,4,1138]}],x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"}}," ",{p:[45,3,1252],t:7,e:"div",a:{style:"float:right"},f:[{p:[46,4,1281],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-backup",state:[{t:2,x:{r:["data.power.backup"],s:'_0?null:"disabled"'},p:[46,65,1342]}]},f:["Disrupt"]}]}]}," ",{p:[49,2,1430],t:7,e:"ui-section",a:{label:"Electrify"},f:[{p:[50,3,1463],t:7,e:"span",a:{"class":[{t:2,x:{r:["shockState","data.shock"],s:"_0(_1)"},p:[50,16,1476]}]},f:[{t:2,x:{r:["data.shock"],s:'_0==2?"Safe":"Electrified"'},p:[50,44,1504]}]}," ",{t:4,f:["[ ",{p:[52,6,1589],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.shock"],s:"!_0"},p:[51,3,1558]},{t:4,n:51,f:[{t:4,f:["[ ",{p:[55,7,1688],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"data.shock_timeleft",p:[55,25,1706]}," seconds left"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0>0"},p:[54,4,1650]}," ",{t:4,f:["[ ",{p:[58,7,1806],t:7,e:"span",a:{"class":"bad"},f:["Permanent"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0==-1"},p:[57,4,1766]}],x:{r:["data.wires.shock"],s:"!_0"}}," ",{p:[61,3,1866],t:7,e:"div",a:{style:"float:right"},f:[{p:[62,4,1895],t:7,e:"ui-button",a:{icon:"wrench",action:"shock-restore",state:[{t:2,x:{r:["data.wires.shock","data.shock"],s:'_0&&_1==0?null:"disabled"'},p:[62,59,1950]}]},f:["Restore"]}," ",{p:[63,4,2032],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-temp",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[63,54,2082]}]},f:["Set (Temporary)"]}," ",{p:[64,4,2136],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-perm",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[64,53,2185]}]},f:["Set (Permanent)"]}]}]}]}," ",{p:[68,1,2274],t:7,e:"ui-display",a:{title:"Access & Door Control"},f:[{p:[69,2,2318],t:7,e:"ui-section",a:{label:"ID Scan"},f:[{t:4,f:["[ ",{p:[71,6,2385],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[70,3,2349]}," ",{p:[73,3,2444],t:7,e:"div",a:{style:"float:right"},f:[{p:[74,4,2473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[74,22,2491]}],icon:"power-off",action:"idscan-on",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"selected":""'},p:[74,93,2562]}]},f:["Enabled"]}," ",{p:[75,4,2624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[75,22,2642]}],icon:"close",action:"idscan-off",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"":"selected"'},p:[75,90,2710]}]},f:["Disabled"]}]}]}," ",{p:[78,2,2795],t:7,e:"ui-section",a:{label:"Emergency Access"},f:[{p:[79,3,2835],t:7,e:"div",a:{style:"float:right"},f:[{p:[80,4,2864],t:7,e:"ui-button",a:{icon:"power-off",action:"emergency-on",style:[{t:2,x:{r:["data.emergency"],s:'_0?"selected":""'},p:[80,61,2921]}]},f:["Enabled"]}," ",{p:[81,4,2982],t:7,e:"ui-button",a:{icon:"close",action:"emergency-off",style:[{t:2,x:{r:["data.emergency"],s:'_0?"":"selected"'},p:[81,58,3036]}]},f:["Disabled"]}]}]}," ",{p:[84,2,3120],t:7,e:"br"}," ",{p:[85,2,3128],t:7,e:"ui-section",a:{label:"Door bolts"},f:[{t:4,f:["[ ",{p:[87,6,3193],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.bolts"],s:"!_0"},p:[86,3,3162]}," ",{p:[89,3,3252],t:7,e:"div",a:{style:"float:right"},f:[{p:[90,4,3281],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[90,22,3299]}],icon:"unlock",action:"bolt-raise",style:[{t:2,x:{r:["data.locked"],s:'_0?"":"selected"'},p:[90,85,3362]}]},f:["Raised"]}," ",{p:[91,4,3419],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[91,22,3437]}],icon:"lock",action:"bolt-drop",style:[{t:2,x:{r:["data.locked"],s:'_0?"selected":""'},p:[91,82,3497]}]},f:["Dropped"]}]}]}," ",{p:[94,2,3577],t:7,e:"ui-section",a:{label:"Door bolt lights"},f:[{t:4,f:["[ ",{p:[96,6,3649],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.lights"],s:"!_0"},p:[95,3,3617]}," ",{p:[98,3,3708],t:7,e:"div",a:{style:"float:right"},f:[{p:[99,4,3737],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[99,22,3755]}],icon:"power-off",action:"light-on",style:[{t:2,x:{r:["data.lights"],s:'_0?"selected":""'},p:[99,88,3821]}]},f:["Enabled"]}," ",{p:[100,4,3879],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[100,22,3897]}],icon:"close",action:"light-off",style:[{t:2,x:{r:["data.lights"],s:'_0?"":"selected"'},p:[100,85,3960]}]},f:["Disabled"]}]}]}," ",{p:[103,2,4041],t:7,e:"ui-section",a:{label:"Door force sensors"},f:[{t:4,f:["[ ",{p:[105,6,4113],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.safe"],s:"!_0"},p:[104,3,4083]}," ",{p:[107,3,4172],t:7,e:"div",a:{style:"float:right"},f:[{p:[108,4,4201],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[108,22,4219]}],icon:"power-off",action:"safe-on",style:[{t:2,x:{r:["data.safe"],s:'_0?"selected":""'},p:[108,85,4282]}]},f:["Enabled"]}," ",{p:[109,4,4338],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[109,22,4356]}],icon:"close",action:"safe-off",style:[{t:2,x:{r:["data.safe"],s:'_0?"":"selected"'},p:[109,82,4416]}]},f:["Disabled"]}]}]}," ",{p:[112,2,4495],t:7,e:"ui-section",a:{label:"Door timing safety"},f:[{t:4,f:["[ ",{p:[114,6,4569],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.timing"],s:"!_0"},p:[113,3,4537]}," ",{p:[116,3,4628],t:7,e:"div",a:{style:"float:right"},f:[{p:[117,4,4657],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[117,22,4675]}],icon:"power-off",action:"speed-on",style:[{t:2,x:{r:["data.speed"],s:'_0?"selected":""'},p:[117,88,4741]}]},f:["Enabled"]}," ",{p:[118,4,4798],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[118,22,4816]}],icon:"close",action:"speed-off",style:[{t:2,x:{r:["data.speed"],s:'_0?"":"selected"'},p:[118,85,4879]}]},f:["Disabled"]}]}]}," ",{p:[121,2,4959],t:7,e:"br"}," ",{p:[122,2,4967],t:7,e:"ui-section",a:{label:"Door control"},f:[{t:4,f:["[ ",{p:[124,6,5043],t:7,e:"span",a:{"class":"bad"},f:["Door is ",{t:2,x:{r:["data.locked","data.welded"],s:'(_0?"bolted":"")+(_0&&_1?" and ":"")+(_1?"welded":"")'},p:[124,32,5069]}]}," ]"],n:50,x:{r:["data.locked","data.welded"],s:"_0||_1"},p:[123,3,5003]}," ",{p:[126,3,5202],t:7,e:"div",a:{style:"float:right"},f:[{p:[127,4,5231],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(_2&&"disabled")'},p:[127,22,5249]}],icon:"sign-out",action:"open-close"},f:["Open door"]}," ",{p:[128,4,5375],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(!_2&&"disabled")'},p:[128,22,5393]}],icon:"sign-in",action:"open-close"},f:["Close door"]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],356:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,261],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,304],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[10,7,346],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,363]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,414]}]}]}],n:50,r:"data.siliconUser",p:[8,3,275]},{t:4,n:51,f:[{p:[13,5,502],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,528]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,610],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,701],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,743],t:7,e:"ui-section",f:[{p:[21,11,766],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,783]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,853]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,916]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1022],t:7,e:"ui-section",f:[{p:[25,11,1045],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1062]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1130]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1211]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1295],t:7,e:"br"}," ",{p:[29,9,1309],t:7,e:"ui-section",f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1463],t:7,e:"ui-section",f:[{p:[33,11,1486],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1623],t:7,e:"ui-section",f:[{p:[36,11,1646],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1773],t:7,e:"ui-section",f:[{p:[39,11,1796],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,663]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,1990],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2045],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2100],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2156],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,620]}]},r.exports.components=r.exports.components||{};var i={vents:t(362),modes:t(358),thresholds:t(361),status:t(360),scrubbers:t(359)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,358:358,359:359,360:360,361:361,362:362}],357:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{341:341}],358:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,111],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,161],t:7,e:"ui-section",f:[{p:[9,7,180],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,197]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,258]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,351]},"}"]},f:[{t:2,r:"name",p:[11,51,362]}]}]}],n:52,r:"data.modes",p:[7,3,136]}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],359:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," ",{p:{button:[{p:[6,5,180],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[9,5,234],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[9,27,256]}]},f:[{p:[10,7,278],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,313],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[11,26,330]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[11,68,372]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[12,46,448]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[12,66,468]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[12,80,482]}]}]}," ",{p:[14,7,545],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[15,9,579],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[15,26,596]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[15,71,641]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[16,50,723]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[16,70,743]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[16,88,761]}]}]}," ",{p:[18,7,841],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[19,9,876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[19,26,893]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[19,70,937]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,1017]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[20,68,1037]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[20,84,1053]}]}]}," ",{p:[22,7,1127],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[23,9,1164],t:7,e:"filters"}]}]}],n:52,r:"data.scrubbers",p:[8,3,205]},{t:4,n:51,f:[{p:[27,5,1231],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457),back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357,457:457}],360:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,107],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,126]}]},f:[{p:[5,6,142],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,155]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,232]},{t:2,r:"unit",p:[6,29,256]}]}]}],n:52,r:"adata.environment_data",p:[3,5,68]}," ",{p:[10,5,313],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,353],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,366]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,464]}]}]}," ",{p:[15,5,605],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,644],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,657]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,728]}]}]}],n:50,r:"data.environment_data",p:[2,3,34]},{t:4,n:51,f:[{p:[21,5,856],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,891],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1015],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1050],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,990]}]}]},e.exports=a.extend(r.exports)},{341:341}],361:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" th, td {\n padding-right: 16px;\n text-align: left;\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,112],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,137],t:7,e:"table",f:[{p:[8,5,149],t:7,e:"thead",f:[{p:[8,12,156],t:7,e:"tr",f:[{p:[9,7,167],t:7,e:"th"}," ",{p:[10,7,183],t:7,e:"th",f:[{p:[10,11,187],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,228],t:7,e:"th",f:[{p:[11,11,232],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,277],t:7,e:"th",f:[{p:[12,11,281],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,326],t:7,e:"th",f:[{p:[13,11,330],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,387],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,426],t:7,e:"tr",f:[{p:[17,9,439],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,443]}]}," ",{t:4,f:[{p:[18,27,485],t:7,e:"td",f:[{p:[19,11,500],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,547]},'", "var": "',{t:2,r:"val",p:[19,76,565]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,576]}]}]}],n:52,r:"settings",p:[18,9,467]}]}],n:52,r:"data.thresholds",p:[16,7,401]}]}," ",{p:[23,3,675],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],362:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,109],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,159],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,181]}]},f:[{p:[9,7,203],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,238],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,255]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,297]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,373]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,393]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,407]}]}]}," ",{p:[13,7,470],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,504],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,510]}]}]}," ",{p:[16,7,601],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,649],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,682]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,762]},'", "val": ',{t:2,r:"checks",p:[18,68,782]},"}"]},f:["Internal"]}," ",{p:[19,9,824],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,858]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,938]},'", "val": ',{t:2,r:"checks",p:[20,68,958]},"}"]},f:["External"]}]}," ",{t:4,f:[{p:[23,9,1042],t:7,e:"ui-section",a:{label:"Internal Target Pressure"},f:[{p:[24,11,1098],t:7,e:"ui-button",a:{icon:"pencil",action:"set_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,33,1186]},'"}']},f:[{t:2,x:{r:["internal"],s:"Math.fixed(_0)"},p:[25,47,1200]}]}," ",{p:[26,11,1247],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["intdefault"],s:'_0?"disabled":null'},p:[26,44,1280]}],action:"reset_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,33,1381]},'"}']},f:["Reset"]}]}],n:50,r:"incheck",p:[22,7,1018]}," ",{t:4,f:[{p:[31,11,1481],t:7,e:"ui-section",a:{label:"External Target Pressure"},f:[{p:[32,13,1539],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,35,1629]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[33,49,1643]}]}," ",{p:[34,13,1692],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[34,46,1725]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[35,35,1828]},'"}']},f:["Reset"]}]}],n:50,r:"excheck",p:[30,7,1455]}]}],n:52,r:"data.vents",p:[7,3,134]},{t:4,n:51,f:[{p:[40,5,1934],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],363:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" table {\n width: 100%;\n border-spacing: 2px;\n }\n th {\n text-align: left;\n }\n td {\n vertical-align: top;\n }\n td .button {\n margin-top: 4px\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",f:[{p:[3,5,32],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,49]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,109]}," Required"]}," ",{p:[4,5,169],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,246],t:7,e:"hr"}," ",{p:[7,3,254],t:7,e:"table",f:[{p:[8,3,264],t:7,e:"thead",f:[{p:[9,4,275],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,306],t:7,e:"th",f:[{p:[10,9,310],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,339]}]}]}],n:52,r:"data.regions",p:[9,8,279]}]}]}," ",{p:[13,3,391],t:7,e:"tbody",f:[{p:[14,4,402],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,433],t:7,e:"td",f:[{t:4,f:[{p:[16,11,466],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,483]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,531]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,605]},'"}']},f:[{t:2,r:"name",p:[17,56,615]}]}," ",{p:[18,9,644],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,437]}]}],n:52,r:"data.regions",p:[14,8,406]}]}]}]}," ",{p:[23,2,709],t:7,e:"hr"}," ",{p:[24,2,716],t:7,e:"span",a:{"class":"highlight bold"},f:["Unrestricted Access:"]}," ",{p:[25,2,774],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"check-square-o":"square-o"'},p:[25,19,791]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"selected":null'},p:[25,88,860]}],action:"direc_set",params:'{"unres_direction": "1"}'},f:["North"]}," ",{p:[26,2,982],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"check-square-o":"square-o"'},p:[26,19,999]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"selected":null'},p:[26,88,1068]}],action:"direc_set",params:'{"unres_direction": "4"}'},f:["East"]}," ",{p:[27,2,1189],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"check-square-o":"square-o"'},p:[27,19,1206]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"selected":null' +return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xi?(uf={},cf=co("div").style,pf=function(t){var e,n,a;if(t=mf(t),!uf[t])if(void 0!==cf[t])uf[t]=t;else for(a=t.charAt(0).toUpperCase()+t.substring(1),e=ro.length;e--;)if(n=ro[e],void 0!==cf[n+a]){uf[t]=n+a;break}return uf[t]}):pf=null;var gf,vf,bf=pf;Xi?(vf=window.getComputedStyle||Po.getComputedStyle,gf=function(t){var e,n,a,r,o;if(e=vf(this.node),"string"==typeof t)return o=e[bf(t)],"0px"===o&&(o=0),o;if(!i(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},a=t.length;a--;)r=t[a],o=e[bf(r)],"0px"===o&&(o=0),n[r]=o;return n}):gf=null;var yf=gf,_f=function(t,e){var n;if("string"==typeof t)this.node.style[bf(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[bf(n)]=t[n]);return this},xf=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(g(Io(t.easing,"easing")),e=Ua)):e="function"==typeof t.easing?t.easing:Ua,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,xs.add(this)};xf.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wf,kf,Sf,Ef,Cf,Pf,Af,Of,Tf=xf,Rf=RegExp("^-(?:"+ro.join("|")+")-"),Mf=function(t){return t.replace(Rf,"")},Lf=RegExp("^(?:"+ro.join("|")+")([A-Z])"),jf=function(t){var e;return t?(Lf.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Df={},Nf={};Xi?(kf=co("div").style,function(){void 0!==kf.transition?(Sf="transition",Ef="transitionend",Cf=!0):void 0!==kf.webkitTransition?(Sf="webkitTransition",Ef="webkitTransitionEnd",Cf=!0):Cf=!1}(),Sf&&(Pf=Sf+"Duration",Af=Sf+"Property",Of=Sf+"TimingFunction"),wf=function(t,e,n,a,r){setTimeout(function(){var i,o,s,p,u;p=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Af]=a.map(bf).map(jf).join(","),t.node.style[Of]=jf(n.easing||"linear"),t.node.style[Pf]=n.duration/1e3+"s",u=function(e){var n;n=a.indexOf(mf(Mf(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},t.node.addEventListener(Ef,u,!1),setTimeout(function(){for(var r,c,l,d,f,h=a.length,g=[];h--;)d=a[h],r=i+d,Cf&&!Nf[r]&&(t.node.style[bf(d)]=e[d],Df[r]||(c=t.getStyle(d),Df[r]=t.getStyle(d)!=e[d],Nf[r]=!Df[r],Nf[r]&&(t.node.style[bf(d)]=c))),(!Cf||Nf[r])&&(void 0===c&&(c=t.getStyle(d)),l=a.indexOf(d),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),f=/[^\d]*$/.exec(e[d])[0],g.push({name:bf(d),interpolator:Uo(parseFloat(c),parseFloat(e[d])),suffix:f}));g.length?new Tf({root:t.root,duration:n.duration,easing:mf(n.easing||""),step:function(e){var n,a;for(a=g.length;a--;)n=g[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,p()}}):o=!0,a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},0)},n.delay||0)}):wf=null;var Ff,If,Bf,Uf,Vf,qf=wf;if("undefined"!=typeof document){if(Ff="hidden",Vf={},Ff in document)Bf="";else for(Uf=ro.length;Uf--;)If=ro[Uf],Ff=If+"Hidden",Ff in document&&(Bf=If);void 0!==Bf?(document.addEventListener(Bf+"visibilitychange",Va),Va()):("onfocusout"in document?(document.addEventListener("focusout",qa),document.addEventListener("focusin",Ga)):(window.addEventListener("pagehide",qa),window.addEventListener("blur",qa),window.addEventListener("pageshow",Ga),window.addEventListener("focus",Ga)),Vf.hidden=!1)}var Gf,zf,Wf,Hf=Vf;Xi?(zf=window.getComputedStyle||Po.getComputedStyle,Gf=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hf.hidden)return this.setStyle(t,e),Wf||(Wf=us.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(g('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new us(function(t){var e,i,o,s,p,u,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zf(r.node),p={},u=e.length;u--;)c=e[u],s=o[bf(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bf(c)]=s);return i.length?void qf(r,a,n,i,t):void t()});return i}):Gf=null;var Kf=Gf,Qf=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},Yf=za,$f=function(t,e,n){this.init(t,e,n)};$f.prototype={init:hf,start:Yf,getStyle:yf,setStyle:_f,animateStyle:Kf,processParams:Qf};var Jf,Xf,Zf=$f,th=Ha;Jf=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xf=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&$a(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Se(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Rl,find:Ml,findAll:Ll,findAllComponents:jl,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:df,rebind:ff,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,ph=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},uh=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',dh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Au,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Gc.init(this,t),this.keypath||((n=uh(this.root,this.name,e))?(_c.call(this),this.isNamed=!0,this.setTemplate(n)):g(lh,this.name))};dh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||qc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Gc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=uh(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=uh(this.root,this.name,this.parentFragment))&&(_c.call(this),this.isNamed=!0),e||g(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rg({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===ku?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||_c.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var fh,hh,mh,gh=dh,vh=pr,bh=ur,yh=new is("detach"),_h=cr,xh=lr,wh=dr,kh=fr,Sh=hr,Eh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bp(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};Eo(Ph,t,{value:e})}),fh={},fh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],Eo(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Rh,Mh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=S(n),e._ractive||(Eo(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Mh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Rh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Rh);a.splice(r,1)}}else delete t._ractive,Mh.unpatch(this.value)}},Rh="Something went wrong in a rather interesting way";var Lh,jh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Lh={filter:function(t,e,n){var a,r;return e?(e=S(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new jh(t,e,n)}},jh=function(t,e,n){var a,r,i;return n=S(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void gr(this,e,r)},jh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){Lh=!1}var Ih,Bh,Uh=Lh;Uh&&(Ih={filter:function(t,e,n){return Uh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Uh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var Vh=Ih,qh=vr,Gh={},zh=_r,Wh=xr,Hh=Sr,Kh=Or,Qh=Tr,Yh=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Yh.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var $h=Yh,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),d(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Rr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new $h(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Mr,tm={FAILED_LOOKUP:!0},em=Lr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,p;s=a,p=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&p>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},pm=Ir,um={},cm=Vr,lm=Gr,dm=zr,fm=Wr,hm=Kr,mm={implicit:!0},gm={noCascade:!0},vm=Yr,bm=$r,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=So(null),this.deps={computed:So(null),"default":So(null)},this.depsMap={computed:So(null),"default":So(null)},this.patternObservers=[],this.specials=So(null),this.wrapped=So(null),this.computations=So(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=So(null);for(e in s)this.map(S(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(S(e),o[e]);this.ready=!0};ym.prototype={adapt:qh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:pm,register:cm,release:lm,reset:dm,set:fm,smartUpdate:hm,teardown:vm,unregister:bm};var _m=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var xm=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Sm=new is("construct"),Em=new is("config"),Cm=new xm("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Rm=function(t,e,n,r,o){var s,p,u,c,l,d,f={},h={},g={},v=[];for(p=t.parentFragment,u=t.root,o=o||{},a(f,o),o.content=r||[],f[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=p;c;){if(c.owner.type===Mu){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=dc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");di(o)?(g[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?d?s.set(e,t.value):(h[e]=t.value,delete g[e]):d?s.viewmodel.mappings[e].resolve(t):g[e].keypath=t})):r=new Tm(t,o,function(t){d?s.set(e,t):h[e]=t}),v.push(r)}}),s=So(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:u.magic||e.defaults.magic,modifyArrays:u.modifyArrays,adapt:u.adapt},{parent:u,component:t,container:l,mappings:g,inlinePartials:f,cssIds:p.cssIds}),d=!0,t.resolvers=v,s},Mm=fi,Lm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},jm=mi,Dm=gi,Nm=vi,Fm=bi,Im=yi,Bm=new is("teardown"),Um=xi,Vm=function(t,e){this.init(t,e)};Vm.prototype={detach:bh,find:_h,findAll:xh,findAllComponents:wh,findComponent:kh,findNextNode:Sh,firstNode:Eh,init:jm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:Um};var qm=Vm,Gm=function(t){this.type=Ou,this.value=t.template.c};Gm.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Gm,Wm=function(t){var e,n;this.type=Mu,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rg({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,Ym=wi,$m=Si,Jm=Ei,Xm=Ci,Zm=Oi,tg=Ri,eg=function(t){this.init(t)};eg.prototype={bubble:cu,detach:lu,find:du,findAll:fu,findAllComponents:hu,findComponent:mu,findNextNode:gu,firstNode:vu,getArgsList:hc,getNode:mc,getValue:gc,init:Ym,rebind:$m,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tg};var ng,ag,rg=eg,ig=Mi,og=["template","partials","components","decorators","events"],sg=new is("reset"),pg=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Au&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Ru&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pu&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},ug=Li,cg=_p("reverse"),lg=ji,dg=_p("shift"),fg=_p("sort"),hg=_p("splice"),mg=Ni,gg=Fi,vg=new is("teardown"),bg=Bi,yg=Ui,_g=Vi,xg=new is("unrender"),wg=_p("unshift"),kg=qi,Sg=new is("update"),Eg=Gi,Cg={add:Zo,animate:Ss,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:Us,findParent:Vs,fire:Ws,get:Hs,insert:Qs,merge:$s,observe:lp,observeOnce:dp,off:mp,on:gp,once:vp,pop:xp,push:wp,render:Tp,reset:ig,resetPartial:pg,resetTemplate:ug,reverse:cg,set:lg,shift:dg,sort:fg,splice:hg,subtract:mg,teardown:gg,toggle:bg,toHTML:yg,toHtml:yg,unrender:_g,unshift:wg,update:kg,updateModel:Eg},Pg=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Ag=Hi,Og=$i,Tg=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};ng=function(t){return this instanceof ng?void Om(this,t):new ng(t)},ag={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Og},getNodeInfo:{value:Tg},parse:{value:Hp},Promise:{value:us},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:po},events:{writable:!0,value:{}},interpolators:{writable:!0,value:qo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(ng,ag),ng.prototype=a(Cg,so),ng.prototype.constructor=ng,ng.defaults=ng.prototype;var Rg="function";if(typeof Date.now!==Rg||typeof String.prototype.trim!==Rg||typeof Object.keys!==Rg||typeof Array.prototype.indexOf!==Rg||typeof Array.prototype.forEach!==Rg||typeof Array.prototype.map!==Rg||typeof Array.prototype.filter!==Rg||"undefined"!=typeof window&&typeof window.addEventListener!==Rg)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mg=ng;return Mg})},{}],342:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,293],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,313],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,333]}],style:["width: ",{t:2,r:"percentage",p:[14,48,358]},"%"]}}," ",{p:[15,3,384],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,406]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],343:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(480);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,p=/([\w\-]+)\s*(\dx)/g,u=p.exec(s),c=u[1],l=u[2];e+=''}}return e&&(e+=""),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,1950],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,1970]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2052]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2004]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2142]}],d:[]}},f:[{t:4,f:[{p:[78,5,2188],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2204]}]}}],n:50,r:"icon",p:[77,3,2171]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2255]}],n:50,r:"icon_stack",p:[80,3,2231]}," ",{t:16,p:[83,3,2301]}]}]},e.exports=a.extend(r.exports)},{341:341,480:480,481:481}],344:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,42],t:7,e:"header",f:[{p:[4,7,57],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,61]}]}," ",{t:4,f:[{p:[6,9,105],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,130]}]}],n:50,r:"button",p:[5,7,82]}]}],n:50,r:"title",p:[2,3,24]}," ",{p:[10,3,193],t:7,e:"article",f:[{t:16,p:[11,5,207]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],345:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,159],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,185]}],placeholder:[{t:2,r:"placeholder",p:[12,51,209]}]}}," ",{p:[13,1,228],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{341:341}],346:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(338),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1223],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1267]}]},f:[{p:[48,3,1287],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1454],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1464]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1483]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1509]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1583],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1592]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1610]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1660]}," ",{t:2,r:"xunit",p:[53,113,1685]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1549]}],n:52,r:"xaxis",p:[50,7,1430]}," ",{t:4,f:[{p:[57,9,1764],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1781]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1796]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1815]}],stroke:"darkgray"}}," ",{p:[58,9,1858],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1873]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1925]}," ",{t:2,r:"yunit",p:[58,92,1941]}]}],n:52,r:"yaxis",p:[56,7,1740]}," ",{t:4,f:[{p:[61,9,2011],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2020]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2049]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,1980]}," ",{t:4,f:[{p:[64,9,2137],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2146]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2177]}],fill:"none"}}],n:52, +i:"curve",r:"curves",p:[63,7,2106]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2308],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2337]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2348]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2386]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2263]}],n:52,i:"curve",r:"curves",p:[66,7,2232]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2605],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2632]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2639]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2718]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2787]}," ",{t:2,r:"yunit",p:[75,43,2815]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2827]}," ",{t:2,r:"xunit",p:[75,92,2864]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2566]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2521]}],n:52,i:"curve",r:"curves",p:[71,7,2490]}," ",{t:4,f:[{p:[81,9,2983],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3007]},", 10)"]},f:[{p:[82,11,3073],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3093]}]}}," ",{p:[83,11,3124],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3155]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,2952]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1323]}]}]}]},e.exports=a.extend(r.exports)},{338:338,341:341}],347:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,23]}]}]},e.exports=a.extend(r.exports)},{341:341}],348:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(480),a=t(482);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,739],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,716]}]},e.exports=a.extend(r.exports)},{341:341,480:480,482:482}],349:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,82],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,130]}],r:"labelcolor",p:[3,32,109]}]},f:[{t:2,r:"label",p:[3,84,161]},":"]}],n:50,r:"label",p:[2,3,64]}," ",{t:4,f:[{t:16,p:[6,5,210]}],n:50,r:"nowrap",p:[5,3,191]},{t:4,n:51,f:[{p:[8,5,235],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,263]}]},f:[{t:16,p:[9,7,304]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{341:341}],350:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,45],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,99]}],n:50,r:"button",p:[5,7,85]}]}],n:50,r:"title",p:[2,3,27]}," ",{p:[8,3,149],t:7,e:"article",f:[{t:16,p:[9,5,163]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],351:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;p.set("shown",p.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,505],t:7,e:"header",f:[{t:4,f:[{p:[22,5,535],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,552]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,577]}]}],n:52,r:"tabs",p:[21,3,516]}]}," ",{p:[25,1,617],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,632]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(352)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,352:352}],352:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,16]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],353:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(480),r=t(482);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1391],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1441],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1478]}]}}," ",{p:[52,5,1505],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1525]}]}," ",{t:4,f:[{p:[54,7,1573],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1642],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1546]}]}],n:50,r:"config.titlebar",p:[49,1,1365]}]},e.exports=a.extend(r.exports)},{341:341,480:480,481:481,482:482}],354:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,636],t:7,e:"ui-notice",f:[{p:[28,5,652],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,677]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,784],t:7,e:"br"}," ",{p:[29,5,794],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,870],t:7,e:"br"}," ",{p:[30,5,880],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,997],t:7,e:"br"}," ",{p:[31,5,1007],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1124],t:7,e:"hr"}," ",{p:[33,5,1134],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1207],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1381],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1528],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1699],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1785],t:7,e:"hr"}," ",{p:[43,7,1797],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1815]}]},{p:[43,38,1828],t:7,e:"br"}," ",{p:[44,7,1840],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1858]}]}],n:50,r:"debug",p:[41,5,1765]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,596]}]},e.exports=a.extend(r.exports)},{341:341}],355:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},shockState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,327],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[23,2,362],t:7,e:"ui-section",a:{label:"Main"},f:[{p:[24,3,390],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.main"],s:"_0(_1)"},p:[24,16,403]}]},f:[{t:2,x:{r:["data.power.main"],s:'_0?"Online":"Offline"'},p:[24,49,436]}]}," ",{t:4,f:["[ ",{p:[26,6,542],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"},p:[25,3,488]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.main_timeleft",p:[29,7,646]}," seconds left ]"],n:50,x:{r:["data.power.main_timeleft"],s:"_0>0"},p:[28,4,603]}],x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"}}," ",{p:[32,3,713],t:7,e:"div",a:{style:"float:right"},f:[{p:[33,4,742],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-main",state:[{t:2,x:{r:["data.power.main"],s:'_0?null:"disabled"'},p:[33,63,801]}]},f:["Disrupt"]}]}]}," ",{p:[36,2,887],t:7,e:"ui-section",a:{label:"Backup"},f:[{p:[37,3,917],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.backup"],s:"_0(_1)"},p:[37,16,930]}]},f:[{t:2,x:{r:["data.power.backup"],s:'_0?"Online":"Offline"'},p:[37,51,965]}]}," ",{t:4,f:["[ ",{p:[39,6,1077],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"},p:[38,3,1019]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.backup_timeleft",p:[42,7,1183]}," seconds left ]"],n:50,x:{r:["data.power.backup_timeleft"],s:"_0>0"},p:[41,4,1138]}],x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"}}," ",{p:[45,3,1252],t:7,e:"div",a:{style:"float:right"},f:[{p:[46,4,1281],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-backup",state:[{t:2,x:{r:["data.power.backup"],s:'_0?null:"disabled"'},p:[46,65,1342]}]},f:["Disrupt"]}]}]}," ",{p:[49,2,1430],t:7,e:"ui-section",a:{label:"Electrify"},f:[{p:[50,3,1463],t:7,e:"span",a:{"class":[{t:2,x:{r:["shockState","data.shock"],s:"_0(_1)"},p:[50,16,1476]}]},f:[{t:2,x:{r:["data.shock"],s:'_0==2?"Safe":"Electrified"'},p:[50,44,1504]}]}," ",{t:4,f:["[ ",{p:[52,6,1589],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.shock"],s:"!_0"},p:[51,3,1558]},{t:4,n:51,f:[{t:4,f:["[ ",{p:[55,7,1688],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"data.shock_timeleft",p:[55,25,1706]}," seconds left"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0>0"},p:[54,4,1650]}," ",{t:4,f:["[ ",{p:[58,7,1806],t:7,e:"span",a:{"class":"bad"},f:["Permanent"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0==-1"},p:[57,4,1766]}],x:{r:["data.wires.shock"],s:"!_0"}}," ",{p:[61,3,1866],t:7,e:"div",a:{style:"float:right"},f:[{p:[62,4,1895],t:7,e:"ui-button",a:{icon:"wrench",action:"shock-restore",state:[{t:2,x:{r:["data.wires.shock","data.shock"],s:'_0&&_1==0?null:"disabled"'},p:[62,59,1950]}]},f:["Restore"]}," ",{p:[63,4,2032],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-temp",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[63,54,2082]}]},f:["Set (Temporary)"]}," ",{p:[64,4,2136],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-perm",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[64,53,2185]}]},f:["Set (Permanent)"]}]}]}]}," ",{p:[68,1,2274],t:7,e:"ui-display",a:{title:"Access & Door Control"},f:[{p:[69,2,2318],t:7,e:"ui-section",a:{label:"ID Scan"},f:[{t:4,f:["[ ",{p:[71,6,2385],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[70,3,2349]}," ",{p:[73,3,2444],t:7,e:"div",a:{style:"float:right"},f:[{p:[74,4,2473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[74,22,2491]}],icon:"power-off",action:"idscan-on",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"selected":""'},p:[74,93,2562]}]},f:["Enabled"]}," ",{p:[75,4,2624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[75,22,2642]}],icon:"close",action:"idscan-off",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"":"selected"'},p:[75,90,2710]}]},f:["Disabled"]}]}]}," ",{p:[78,2,2795],t:7,e:"ui-section",a:{label:"Emergency Access"},f:[{p:[79,3,2835],t:7,e:"div",a:{style:"float:right"},f:[{p:[80,4,2864],t:7,e:"ui-button",a:{icon:"power-off",action:"emergency-on",style:[{t:2,x:{r:["data.emergency"],s:'_0?"selected":""'},p:[80,61,2921]}]},f:["Enabled"]}," ",{p:[81,4,2982],t:7,e:"ui-button",a:{icon:"close",action:"emergency-off",style:[{t:2,x:{r:["data.emergency"],s:'_0?"":"selected"'},p:[81,58,3036]}]},f:["Disabled"]}]}]}," ",{p:[84,2,3120],t:7,e:"br"}," ",{p:[85,2,3128],t:7,e:"ui-section",a:{label:"Door bolts"},f:[{t:4,f:["[ ",{p:[87,6,3193],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.bolts"],s:"!_0"},p:[86,3,3162]}," ",{p:[89,3,3252],t:7,e:"div",a:{style:"float:right"},f:[{p:[90,4,3281],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[90,22,3299]}],icon:"unlock",action:"bolt-raise",style:[{t:2,x:{r:["data.locked"],s:'_0?"":"selected"'},p:[90,85,3362]}]},f:["Raised"]}," ",{p:[91,4,3419],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[91,22,3437]}],icon:"lock",action:"bolt-drop",style:[{t:2,x:{r:["data.locked"],s:'_0?"selected":""'},p:[91,82,3497]}]},f:["Dropped"]}]}]}," ",{p:[94,2,3577],t:7,e:"ui-section",a:{label:"Door bolt lights"},f:[{t:4,f:["[ ",{p:[96,6,3649],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.lights"],s:"!_0"},p:[95,3,3617]}," ",{p:[98,3,3708],t:7,e:"div",a:{style:"float:right"},f:[{p:[99,4,3737],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[99,22,3755]}],icon:"power-off",action:"light-on",style:[{t:2,x:{r:["data.lights"],s:'_0?"selected":""'},p:[99,88,3821]}]},f:["Enabled"]}," ",{p:[100,4,3879],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[100,22,3897]}],icon:"close",action:"light-off",style:[{t:2,x:{r:["data.lights"],s:'_0?"":"selected"'},p:[100,85,3960]}]},f:["Disabled"]}]}]}," ",{p:[103,2,4041],t:7,e:"ui-section",a:{label:"Door force sensors"},f:[{t:4,f:["[ ",{p:[105,6,4113],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.safe"],s:"!_0"},p:[104,3,4083]}," ",{p:[107,3,4172],t:7,e:"div",a:{style:"float:right"},f:[{p:[108,4,4201],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[108,22,4219]}],icon:"power-off",action:"safe-on",style:[{t:2,x:{r:["data.safe"],s:'_0?"selected":""'},p:[108,85,4282]}]},f:["Enabled"]}," ",{p:[109,4,4338],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[109,22,4356]}],icon:"close",action:"safe-off",style:[{t:2,x:{r:["data.safe"],s:'_0?"":"selected"'},p:[109,82,4416]}]},f:["Disabled"]}]}]}," ",{p:[112,2,4495],t:7,e:"ui-section",a:{label:"Door timing safety"},f:[{t:4,f:["[ ",{p:[114,6,4569],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.timing"],s:"!_0"},p:[113,3,4537]}," ",{p:[116,3,4628],t:7,e:"div",a:{style:"float:right"},f:[{p:[117,4,4657],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[117,22,4675]}],icon:"power-off",action:"speed-on",style:[{t:2,x:{r:["data.speed"],s:'_0?"selected":""'},p:[117,88,4741]}]},f:["Enabled"]}," ",{p:[118,4,4798],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[118,22,4816]}],icon:"close",action:"speed-off",style:[{t:2,x:{r:["data.speed"],s:'_0?"":"selected"'},p:[118,85,4879]}]},f:["Disabled"]}]}]}," ",{p:[121,2,4959],t:7,e:"br"}," ",{p:[122,2,4967],t:7,e:"ui-section",a:{label:"Door control"},f:[{t:4,f:["[ ",{p:[124,6,5043],t:7,e:"span",a:{"class":"bad"},f:["Door is ",{t:2,x:{r:["data.locked","data.welded"],s:'(_0?"bolted":"")+(_0&&_1?" and ":"")+(_1?"welded":"")'},p:[124,32,5069]}]}," ]"],n:50,x:{r:["data.locked","data.welded"],s:"_0||_1"},p:[123,3,5003]}," ",{p:[126,3,5202],t:7,e:"div",a:{style:"float:right"},f:[{p:[127,4,5231],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(_2&&"disabled")'},p:[127,22,5249]}],icon:"sign-out",action:"open-close"},f:["Open door"]}," ",{p:[128,4,5375],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(!_2&&"disabled")'},p:[128,22,5393]}],icon:"sign-in",action:"open-close"},f:["Close door"]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],356:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,261],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,304],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[10,7,346],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,363]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,414]}]}]}],n:50,r:"data.siliconUser",p:[8,3,275]},{t:4,n:51,f:[{p:[13,5,502],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,528]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,610],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,701],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,743],t:7,e:"ui-section",f:[{p:[21,11,766],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,783]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,853]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,916]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1022],t:7,e:"ui-section",f:[{p:[25,11,1045],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1062]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1130]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1211]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1295],t:7,e:"br"}," ",{p:[29,9,1309],t:7,e:"ui-section",f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1463],t:7,e:"ui-section",f:[{p:[33,11,1486],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1623],t:7,e:"ui-section",f:[{p:[36,11,1646],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1773],t:7,e:"ui-section",f:[{p:[39,11,1796],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,663]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,1990],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2045],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2100],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2156],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,620]}]},r.exports.components=r.exports.components||{};var i={vents:t(362),modes:t(358),thresholds:t(361),status:t(360),scrubbers:t(359)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,358:358,359:359,360:360,361:361,362:362}],357:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{341:341}],358:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,111],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,161],t:7,e:"ui-section",f:[{p:[9,7,180],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,197]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,258]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,351]},"}"]},f:[{t:2,r:"name",p:[11,51,362]}]}]}],n:52,r:"data.modes",p:[7,3,136]}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],359:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," ",{p:{button:[{p:[6,5,180],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[9,5,234],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[9,27,256]}]},f:[{p:[10,7,278],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,313],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[11,26,330]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[11,68,372]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[12,46,448]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[12,66,468]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[12,80,482]}]}]}," ",{p:[14,7,545],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[15,9,579],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[15,26,596]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[15,71,641]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[16,50,723]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[16,70,743]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[16,88,761]}]}]}," ",{p:[18,7,841],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[19,9,876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[19,26,893]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[19,70,937]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,1017]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[20,68,1037]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[20,84,1053]}]}]}," ",{p:[22,7,1127],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[23,9,1164],t:7,e:"filters"}]}]}],n:52,r:"data.scrubbers",p:[8,3,205]},{t:4,n:51,f:[{p:[27,5,1231],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={filters:t(456),back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357,456:456}],360:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,107],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,126]}]},f:[{p:[5,6,142],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,155]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,232]},{t:2,r:"unit",p:[6,29,256]}]}]}],n:52,r:"adata.environment_data",p:[3,5,68]}," ",{p:[10,5,313],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,353],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,366]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,464]}]}]}," ",{p:[15,5,605],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,644],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,657]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,728]}]}]}],n:50,r:"data.environment_data",p:[2,3,34]},{t:4,n:51,f:[{p:[21,5,856],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,891],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1015],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1050],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,990]}]}]},e.exports=a.extend(r.exports)},{341:341}],361:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" th, td {\n padding-right: 16px;\n text-align: left;\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,112],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,137],t:7,e:"table",f:[{p:[8,5,149],t:7,e:"thead",f:[{p:[8,12,156],t:7,e:"tr",f:[{p:[9,7,167],t:7,e:"th"}," ",{p:[10,7,183],t:7,e:"th",f:[{p:[10,11,187],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,228],t:7,e:"th",f:[{p:[11,11,232],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,277],t:7,e:"th",f:[{p:[12,11,281],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,326],t:7,e:"th",f:[{p:[13,11,330],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,387],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,426],t:7,e:"tr",f:[{p:[17,9,439],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,443]}]}," ",{t:4,f:[{p:[18,27,485],t:7,e:"td",f:[{p:[19,11,500],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,547]},'", "var": "',{t:2,r:"val",p:[19,76,565]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,576]}]}]}],n:52,r:"settings",p:[18,9,467]}]}],n:52,r:"data.thresholds",p:[16,7,401]}]}," ",{p:[23,3,675],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],362:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,109],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,159],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,181]}]},f:[{p:[9,7,203],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,238],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,255]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,297]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,373]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,393]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,407]}]}]}," ",{p:[13,7,470],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,504],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,510]}]}]}," ",{p:[16,7,601],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,649],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,682]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,762]},'", "val": ',{t:2,r:"checks",p:[18,68,782]},"}"]},f:["Internal"]}," ",{p:[19,9,824],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,858]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,938]},'", "val": ',{t:2,r:"checks",p:[20,68,958]},"}"]},f:["External"]}]}," ",{t:4,f:[{p:[23,9,1042],t:7,e:"ui-section",a:{label:"Internal Target Pressure"},f:[{p:[24,11,1098],t:7,e:"ui-button",a:{icon:"pencil",action:"set_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,33,1186]},'"}']},f:[{t:2,x:{r:["internal"],s:"Math.fixed(_0)"},p:[25,47,1200]}]}," ",{p:[26,11,1247],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["intdefault"],s:'_0?"disabled":null'},p:[26,44,1280]}],action:"reset_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,33,1381]},'"}']},f:["Reset"]}]}],n:50,r:"incheck",p:[22,7,1018]}," ",{t:4,f:[{p:[31,11,1481],t:7,e:"ui-section",a:{label:"External Target Pressure"},f:[{p:[32,13,1539],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,35,1629]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[33,49,1643]}]}," ",{p:[34,13,1692],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[34,46,1725]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[35,35,1828]},'"}']},f:["Reset"]}]}],n:50,r:"excheck",p:[30,7,1455]}]}],n:52,r:"data.vents",p:[7,3,134]},{t:4,n:51,f:[{p:[40,5,1934],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],363:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" table {\n width: 100%;\n border-spacing: 2px;\n }\n th {\n text-align: left;\n }\n td {\n vertical-align: top;\n }\n td .button {\n margin-top: 4px\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",f:[{p:[3,5,32],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,49]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,109]}," Required"]}," ",{p:[4,5,169],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,246],t:7,e:"hr"}," ",{p:[7,3,254],t:7,e:"table",f:[{p:[8,3,264],t:7,e:"thead",f:[{p:[9,4,275],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,306],t:7,e:"th",f:[{p:[10,9,310],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,339]}]}]}],n:52,r:"data.regions",p:[9,8,279]}]}]}," ",{p:[13,3,391],t:7,e:"tbody",f:[{p:[14,4,402],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,433],t:7,e:"td",f:[{t:4,f:[{p:[16,11,466],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,483]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,531]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,605]},'"}']},f:[{t:2,r:"name",p:[17,56,615]}]}," ",{p:[18,9,644],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,437]}]}],n:52,r:"data.regions",p:[14,8,406]}]}]}]}," ",{p:[23,2,709],t:7,e:"hr"}," ",{p:[24,2,716],t:7,e:"span",a:{"class":"highlight bold"},f:["Unrestricted Access:"]}," ",{p:[25,2,774],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"check-square-o":"square-o"'},p:[25,19,791]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"selected":null'},p:[25,88,860]}],action:"direc_set",params:'{"unres_direction": "1"}'},f:["North"]}," ",{p:[26,2,982],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"check-square-o":"square-o"'},p:[26,19,999]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"selected":null'},p:[26,88,1068]}],action:"direc_set",params:'{"unres_direction": "4"}'},f:["East"]}," ",{p:[27,2,1189],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"check-square-o":"square-o"'},p:[27,19,1206]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"selected":null' },p:[27,88,1275]}],action:"direc_set",params:'{"unres_direction": "2"}'},f:["South"]}," ",{p:[28,2,1397],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"check-square-o":"square-o"'},p:[28,19,1414]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"selected":null'},p:[28,88,1483]}],action:"direc_set",params:'{"unres_direction": "8"}'},f:["West"]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],364:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}},computed:{malfAction:function(){switch(this.get("data.malfStatus")){case 1:return"hack";case 2:return"occupy";case 3:return"deoccupy"}},malfButton:function(){switch(this.get("data.malfStatus")){case 1:return"Override Programming";case 2:case 4:return"Shunt Core Process";case 3:return"Return to Main Core"}},malfIcon:function(){switch(this.get("data.malfStatus")){case 1:return"terminal";case 2:case 4:return"caret-square-o-down";case 3:return"caret-square-o-left"}},powerCellStatusState:function(){var t=this.get("data.powerCellStatus");return t>50?"good":t>25?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[46,2,1161],t:7,e:"ui-notice",f:[{p:[47,3,1175],t:7,e:"b",f:[{p:[47,6,1178],t:7,e:"h3",f:["SYSTEM FAILURE"]}]}," ",{p:[48,3,1208],t:7,e:"i",f:["I/O regulators malfunction detected! Waiting for system reboot..."]},{p:[48,75,1280],t:7,e:"br"}," Automatic reboot in ",{t:2,r:"data.failTime",p:[49,23,1307]}," seconds... ",{p:[50,3,1338],t:7,e:"ui-button",a:{icon:"refresh",action:"reboot"},f:["Reboot Now"]},{p:[50,67,1402],t:7,e:"br"},{p:[50,71,1406],t:7,e:"br"},{p:[50,75,1410],t:7,e:"br"}]}],n:50,r:"data.failTime",p:[45,1,1138]},{t:4,n:51,f:[{p:[53,2,1439],t:7,e:"ui-notice",f:[{t:4,f:[{p:[55,3,1481],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[56,5,1521],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[56,22,1538]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[56,73,1589]}]}]}],n:50,r:"data.siliconUser",p:[54,4,1454]},{t:4,n:51,f:[{p:[59,3,1674],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[59,29,1700]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[62,2,1785],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[63,4,1822],t:7,e:"ui-section",a:{label:"Main Breaker"},f:[{t:4,f:[{p:[65,5,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isOperating"],s:'_0?"good":"bad"'},p:[65,18,1916]}]},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[65,57,1955]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[64,3,1858]},{t:4,n:51,f:[{p:[67,5,2013],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[67,22,2030]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[67,75,2083]}],action:"breaker"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[68,21,2145]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}," ",{p:[71,4,2223],t:7,e:"ui-section",a:{label:"External Power"},f:[{p:[72,3,2261],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.externalPower"],s:"_0(_1)"},p:[72,16,2274]}]},f:[{t:2,x:{r:["data.externalPower"],s:'_0==2?"Good":_0==1?"Low":"None"'},p:[72,52,2310]}]}]}," ",{p:[74,4,2417],t:7,e:"ui-section",a:{label:"Power Cell"},f:[{t:4,f:[{p:[76,5,2492],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerCellStatus",p:[76,38,2525]}],state:[{t:2,r:"powerCellStatusState",p:[76,71,2558]}]},f:[{t:2,x:{r:["adata.powerCellStatus"],s:"Math.fixed(_0)"},p:[76,97,2584]},"%"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[75,3,2451]},{t:4,n:51,f:[{p:[78,5,2647],t:7,e:"span",a:{"class":"bad"},f:["Removed"]}],x:{r:["data.powerCellStatus"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[82,3,2749],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{t:4,f:[{p:[84,4,2830],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.chargeMode"],s:'_0?"good":"bad"'},p:[84,17,2843]}]},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[84,55,2881]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[83,5,2786]},{t:4,n:51,f:[{p:[86,4,2941],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.chargeMode"],s:'_0?"refresh":"close"'},p:[86,21,2958]}],style:[{t:2,x:{r:["data.chargeMode"],s:'_0?"selected":null'},p:[86,71,3008]}],action:"charge"},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[87,22,3070]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}," [",{p:[90,6,3147],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.chargingStatus"],s:"_0(_1)"},p:[90,19,3160]}]},f:[{t:2,x:{r:["data.chargingStatus"],s:'_0==2?"Fully Charged":_0==1?"Charging":"Not Charging"'},p:[90,56,3197]}]},"]"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[81,4,2710]}]}," ",{p:[94,2,3352],t:7,e:"ui-display",a:{title:"Power Channels"},f:[{t:4,f:[{p:[96,3,3422],t:7,e:"ui-section",a:{label:[{t:2,r:"title",p:[96,22,3441]}],nowrap:0},f:[{p:[97,5,3464],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.powerChannels",m:[{t:30,n:"@index"},"powerLoad"]},p:[97,26,3485]}]}," ",{p:[98,5,3537],t:7,e:"div",a:{"class":"content"},f:[{p:[98,26,3558],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0>=2?"good":"bad"'},p:[98,39,3571]}]},f:[{t:2,x:{r:["status"],s:'_0>=2?"On":"Off"'},p:[98,73,3605]}]}]}," ",{p:[99,5,3653],t:7,e:"div",a:{"class":"content"},f:["[",{p:[99,27,3675],t:7,e:"span",f:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"Auto":"Manual"'},p:[99,33,3681]}]},"]"]}," ",{p:[100,5,3750],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{t:4,f:[{p:[102,6,3841],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"selected":null'},p:[102,39,3874]}],action:"channel",params:[{t:2,r:"topicParams.auto",p:[103,30,3955]}]},f:["Auto"]}," ",{p:[104,6,3999],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["status"],s:'_0==2?"selected":null'},p:[104,41,4034]}],action:"channel",params:[{t:2,r:"topicParams.on",p:[105,13,4100]}]},f:["On"]}," ",{p:[106,6,4140],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["status"],s:'_0==0?"selected":null'},p:[106,37,4171]}],action:"channel",params:[{t:2,r:"topicParams.off",p:[107,13,4237]}]},f:["Off"]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[101,4,3795]}]}]}],n:52,r:"data.powerChannels",p:[95,4,3391]}," ",{p:[112,4,4328],t:7,e:"ui-section",a:{label:"Total Load"},f:[{p:[113,3,4362],t:7,e:"span",a:{"class":"bold"},f:[{t:2,r:"adata.totalLoad",p:[113,22,4381]}]}]}]}," ",{t:4,f:[{p:[117,4,4469],t:7,e:"ui-display",a:{title:"System Overrides"},f:[{p:[118,3,4509],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"overload"},f:["Overload"]}," ",{t:4,f:[{p:[120,5,4608],t:7,e:"ui-button",a:{icon:[{t:2,r:"malfIcon",p:[120,22,4625]}],state:[{t:2,x:{r:["data.malfStatus"],s:'_0==4?"disabled":null'},p:[120,43,4646]}],action:[{t:2,r:"malfAction",p:[120,97,4700]}]},f:[{t:2,r:"malfButton",p:[120,113,4716]}]}],n:50,r:"data.malfStatus",p:[119,3,4580]}]}],n:50,r:"data.siliconUser",p:[116,2,4441]}," ",{p:[124,2,4780],t:7,e:"ui-notice",f:[{p:[125,4,4795],t:7,e:"ui-section",a:{label:"Emergency Light Fallback"},f:[{t:4,f:[{p:[127,8,4894],t:7,e:"span",f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[127,14,4900]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[126,6,4846]},{t:4,n:51,f:[{p:[129,8,4978],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"emergency_lighting"},f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[129,66,5036]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[133,2,5143],t:7,e:"ui-notice",f:[{p:[134,4,5158],t:7,e:"ui-section",a:{label:"Night Shift Lighting"},f:[{t:4,f:[{p:[136,8,5253],t:7,e:"span",f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[136,14,5259]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[135,6,5205]},{t:4,n:51,f:[{p:[138,8,5338],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"toggle_nightshift"},f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[138,65,5395]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[142,2,5503],t:7,e:"ui-notice",f:[{p:[143,4,5518],t:7,e:"ui-section",a:{label:"Cover Lock"},f:[{t:4,f:[{p:[145,5,5597],t:7,e:"span",f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[145,11,5603]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[144,3,5552]},{t:4,n:51,f:[{p:[147,5,5673],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.coverLocked"],s:'_0?"lock":"unlock"'},p:[147,22,5690]}],action:"cover"},f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[147,79,5747]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}],r:"data.failTime"}]},e.exports=a.extend(r.exports)},{341:341}],365:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Alarms"},f:[{p:[2,3,30],t:7,e:"ul",f:[{t:4,f:[{p:[4,7,69],t:7,e:"li",f:[{p:[4,11,73],t:7,e:"ui-button",a:{icon:"close",style:"danger",action:"clear",params:['{"zone": "',{t:2,r:".",p:[4,83,145]},'"}']},f:[{t:2,r:".",p:[4,92,154]}]}]}],n:52,r:"data.priority",p:[3,5,39]},{t:4,n:51,f:[{p:[6,7,196],t:7,e:"li",f:[{p:[6,11,200],t:7,e:"span",a:{"class":"good"},f:["No Priority Alerts"]}]}],r:"data.priority"}," ",{t:4,f:[{p:[9,7,295],t:7,e:"li",f:[{p:[9,11,299],t:7,e:"ui-button",a:{icon:"close",style:"caution",action:"clear",params:['{"zone": "',{t:2,r:".",p:[9,84,372]},'"}']},f:[{t:2,r:".",p:[9,93,381]}]}]}],n:52,r:"data.minor",p:[8,5,268]},{t:4,n:51,f:[{p:[11,7,423],t:7,e:"li",f:[{p:[11,11,427],t:7,e:"span",a:{"class":"good"},f:["No Minor Alerts"]}]}],r:"data.minor"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],366:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.tank","data.sensors.0.long_name"],s:"_0?_1:null"},p:[1,20,19]}]},f:[{t:4,f:[{p:[3,5,100],t:7,e:"ui-subdisplay",a:{title:[{t:2,x:{r:["data.tank","long_name"],s:"!_0?_1:null"},p:[3,27,122]}]},f:[{p:[4,7,164],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[5,3,196],t:7,e:"span",f:[{t:2,x:{r:["pressure"],s:"Math.fixed(_0,2)"},p:[5,9,202]}," kPa"]}]}," ",{t:4,f:[{p:[8,9,295],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[9,11,338],t:7,e:"span",f:[{t:2,x:{r:["temperature"],s:"Math.fixed(_0,2)"},p:[9,17,344]}," K"]}]}],n:50,r:"temperature",p:[7,7,267]}," ",{t:4,f:[{p:[13,9,450],t:7,e:"ui-section",a:{label:[{t:2,r:"id",p:[13,28,469]}]},f:[{p:[14,5,482],t:7,e:"span",f:[{t:2,x:{r:["."],s:"Math.fixed(_0,2)"},p:[14,11,488]},"%"]}]}],n:52,i:"id",r:"gases",p:[12,4,423]}]}],n:52,r:"adata.sensors",p:[2,3,72]}]}," ",{t:4,f:[{p:{button:[{p:[23,5,682],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[25,5,768],t:7,e:"ui-section",a:{label:"Input Injector"},f:[{p:[26,7,810],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputting"],s:'_0?"power-off":"close"'},p:[26,24,827]}],style:[{t:2,x:{r:["data.inputting"],s:'_0?"selected":null'},p:[26,75,878]}],action:"input"},f:[{t:2,x:{r:["data.inputting"],s:'_0?"Injecting":"Off"'},p:[27,9,942]}]}]}," ",{p:[29,5,1016],t:7,e:"ui-section",a:{label:"Input Rate"},f:[{p:[30,7,1054],t:7,e:"span",f:[{t:2,x:{r:["adata.inputRate"],s:"Math.fixed(_0)"},p:[30,13,1060]}," L/s"]}]}," ",{p:[32,5,1125],t:7,e:"ui-section",a:{label:"Output Regulator"},f:[{p:[33,7,1169],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputting"],s:'_0?"power-off":"close"'},p:[33,24,1186]}],style:[{t:2,x:{r:["data.outputting"],s:'_0?"selected":null'},p:[33,76,1238]}],action:"output"},f:[{t:2,x:{r:["data.outputting"],s:'_0?"Open":"Closed"'},p:[34,9,1304]}]}]}," ",{p:[36,5,1377],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[37,7,1420],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure"},f:[{t:2,x:{r:["adata.outputPressure"],s:"Math.round(_0)"},p:[37,50,1463]}," kPa"]}]}]}],n:50,r:"data.tank",p:[20,1,599]}]},e.exports=a.extend(r.exports)},{341:341}],367:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{p:[6,3,223],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[7,5,263],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[8,5,350],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[8,35,380]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[9,5,492],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[9,11,498]}," L/s"]}]}," ",{p:[11,3,556],t:7,e:"ui-section",a:{label:"Filter"},f:[{t:4,f:[{p:[13,7,624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[13,25,642]}],action:"filter",params:['{"mode": ',{t:2,r:"id",p:[14,42,718]},"}"]},f:[{t:2,r:"name",p:[14,51,727]}]}],n:52,r:"data.filter_types",p:[12,5,589]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],368:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{p:[6,3,218],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,259],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,353],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,383]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,514],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,520]}," kPa"]}]}," ",{p:[11,3,584],t:7,e:"ui-section",a:{label:"Node 1"},f:[{p:[12,5,616],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[12,44,655]}],action:"node1",params:'{"concentration": -0.1}'}}," ",{p:[14,5,770],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[14,39,804]}],action:"node1",params:'{"concentration": -0.01}'}}," ",{p:[16,5,920],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[16,38,953]}],action:"node1",params:'{"concentration": 0.01}'}}," ",{p:[18,5,1070],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[18,43,1108]}],action:"node1",params:'{"concentration": 0.1}'}}," ",{p:[20,5,1224],t:7,e:"span",f:[{t:2,x:{r:["adata.node1_concentration"],s:"Math.round(_0)"},p:[20,11,1230]},"%"]}]}," ",{p:[22,3,1298],t:7,e:"ui-section",a:{label:"Node 2"},f:[{p:[23,5,1330],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[23,44,1369]}],action:"node2",params:'{"concentration": -0.1}'}}," ",{p:[25,5,1484],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[25,39,1518]}],action:"node2",params:'{"concentration": -0.01}'}}," ",{p:[27,5,1634],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[27,38,1667]}],action:"node2",params:'{"concentration": 0.01}'}}," ",{p:[29,5,1784],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[29,43,1822]}],action:"node2",params:'{"concentration": 0.1}'}}," ",{p:[31,5,1938],t:7,e:"span",f:[{t:2,x:{r:["adata.node2_concentration"],s:"Math.round(_0)"},p:[31,11,1944]},"%"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],369:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{t:4,f:[{p:[7,5,244],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[8,7,285],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[9,7,373],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[9,37,403]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[10,7,516],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[10,13,522]}," L/s"]}]}],n:50,r:"data.max_rate",p:[6,3,218]},{t:4,n:51,f:[{p:[13,5,593],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,636],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[15,7,732],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,762]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,891],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[16,13,897]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=a.extend(r.exports)},{341:341}],370:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"data.borg.name",p:[1,20,19]}],button:0},f:[" ",{p:[5,2,145],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[6,4,176],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"check-square-o":"square-o"'},p:[6,21,193]}],style:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"selected":null'},p:[6,83,255]}],action:"toggle_emagged"},f:["Emagged"]}," ",{p:[7,4,345],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"check-square-o":"square-o"'},p:[7,21,362]}],style:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"selected":null'},p:[7,84,425]}],action:"toggle_lockdown"},f:["Locked down"]}," ",{p:[8,4,521],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"check-square-o":"square-o"'},p:[8,21,538]}],style:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"selected":null'},p:[8,90,607]}],action:"toggle_scrambledcodes"},f:["Scrambled codes"]}]}," ",{p:[10,2,732],t:7,e:"ui-section",a:{label:"Charge"},f:[{t:4,f:[{p:[12,4,792],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.cell.maxcharge",p:[12,25,813]}],value:[{t:2,r:"data.cell.charge",p:[12,57,845]}]},f:[{t:2,x:{r:["data.cell.charge"],s:"Math.round(_0)"},p:[12,79,867]}," / ",{t:2,x:{r:["data.cell.maxcharge"],s:"Math.round(_0)"},p:[12,114,902]}]}],n:50,x:{r:["data.cell.missing"],s:"!_0"},p:[11,3,762]},{t:4,n:51,f:[{p:[14,4,961],t:7,e:"span",a:{"class":"warning"},f:["Cell missing"]},{p:[14,45,1002],t:7,e:"br"}],x:{r:["data.cell.missing"],s:"!_0"}}," ",{p:[16,3,1020],t:7,e:"ui-button",a:{icon:"pencil",action:"set_charge"},f:["Set"]},{p:[16,63,1080],t:7,e:"ui-button",a:{icon:"eject",action:"change_cell"},f:["Change"]},{p:[16,126,1143],t:7,e:"ui-button",a:{icon:"trash","class":"bad",action:"remove_cell"},f:["Remove"]}]}," ",{p:[18,2,1235],t:7,e:"ui-section",a:{label:"Radio channels"},f:[{t:4,f:[{p:[20,4,1300],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[20,21,1317]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[20,75,1371]}],action:"toggle_radio",params:['{"channel": "',{t:2,r:"name",p:[20,154,1450]},'"}']},f:[{t:2,r:"name",p:[20,166,1462]}]}],n:52,r:"data.channels",p:[19,3,1273]}]}," ",{p:[23,2,1511],t:7,e:"ui-section",a:{label:"Module"},f:[{t:4,f:[{p:[25,4,1567],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"check-square-o":"square-o"'},p:[25,21,1584]}],style:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"selected":null'},p:[25,97,1660]}],action:"setmodule",params:['{"module": "',{t:2,r:"type",p:[25,193,1756]},'"}']},f:[{t:2,r:"name",p:[25,205,1768]}]}],n:52,r:"data.modules",p:[24,3,1541]}]}," ",{p:[28,2,1817],t:7,e:"ui-section",a:{label:"Upgrades"},f:[{t:4,f:[{p:[30,4,1876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[30,21,1893]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[30,75,1947]}],action:"toggle_upgrade",params:['{"upgrade": "',{t:2,r:"type",p:[30,155,2027]},'"}']},f:[{t:2,r:"name",p:[30,167,2039]}]}],n:52,r:"data.upgrades",p:[29,3,1849]}]}," ",{p:[33,2,2088],t:7,e:"ui-section",a:{label:"Master AI"},f:[{t:4,f:[{p:[35,4,2143],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["connected"],s:'_0?"check-square-o":"square-o"'},p:[35,21,2160]}],style:[{t:2,x:{r:["connected"],s:'_0?"selected":null'},p:[35,75,2214]}],action:"slavetoai",params:['{"slavetoai": "',{t:2,r:"ref",p:[35,152,2291]},'"}']},f:[{t:2,r:"name",p:[35,163,2302]}]}],n:52,r:"data.ais",p:[34,3,2121]}]}]}," ",{p:{button:[{p:[41,3,2420],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"check-square-o":"square-o"'},p:[41,20,2437]}],style:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"selected":null'},p:[41,84,2501]}],action:"toggle_lawupdate"},f:["Lawsync"]}]},t:7,e:"ui-display",a:{title:"Laws",button:0},f:[" ",{t:4,f:[{p:[44,3,2629],t:7,e:"p",f:[{t:2,r:".",p:[44,6,2632]}]}],n:52,r:"data.laws",p:[43,2,2607]}]}]},e.exports=a.extend(r.exports)},{341:341}],371:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,5,65],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"selected":null'},p:[3,38,98]}],action:[{t:2,x:{r:["data.timing"],s:'_0?"stop":"start"'},p:[3,83,143]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"Stop":"Start"'},p:[3,119,179]}]}," ",{p:[4,5,230],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"flash",style:[{t:2,x:{r:["data.flash_charging"],s:'_0?"disabled":null'},p:[4,57,282]}]},f:[{t:2,x:{r:["data.flash_charging"],s:'_0?"Recharging":"Flash"'},p:[4,102,327]}]}]},t:7,e:"ui-display",a:{title:"Cell Timer",button:0},f:[" ",{p:[6,3,405],t:7,e:"ui-section",f:[{p:[7,5,422],t:7,e:"ui-button",a:{icon:"fast-backward",action:"time",params:'{"adjust": -600}'}}," ",{p:[8,5,511],t:7,e:"ui-button",a:{icon:"backward",action:"time",params:'{"adjust": -100}'}}," ",{p:[9,5,595],t:7,e:"span",f:[{t:2,x:{r:["text","data.minutes"],s:"_0.zeroPad(_1,2)"},p:[9,11,601]},":",{t:2,x:{r:["text","data.seconds"],s:"_0.zeroPad(_1,2)"},p:[9,45,635]}]}," ",{p:[10,5,680],t:7,e:"ui-button",a:{icon:"forward",action:"time",params:'{"adjust": 100}'}}," ",{p:[11,5,762],t:7,e:"ui-button",a:{icon:"fast-forward",action:"time",params:'{"adjust": 600}'}}]}," ",{p:[13,3,863],t:7,e:"ui-section",f:[{p:[14,7,882],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "short"}'},f:["Short"]}," ",{p:[15,7,985],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "medium"}'},f:["Medium"]}," ",{p:[16,7,1090],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "long"}'},f:["Long"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],372:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Bluespace Artillery Control",button:0},f:[{t:4,f:[{p:[8,3,160],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,5,192],t:7,e:"ui-button",a:{icon:"crosshairs",action:"recalibrate"},f:[{t:2,r:"data.target",p:[9,55,242]}]}]}," ",{p:[11,3,288],t:7,e:"ui-section",a:{label:"Controls"},f:[{t:4,f:[{p:[13,3,344],t:7,e:"ui-notice",f:[{p:[14,4,359],t:7,e:"span",f:["Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!"]}]}],n:50,x:{r:["data.unlocked"],s:"!_0"},p:[12,2,319]},{t:4,n:51,f:[{p:[17,3,509],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.ready"],s:'_0?null:"disabled"'},p:[17,36,542]}],action:"fire"},f:["FIRE!"]}],x:{r:["data.unlocked"],s:"!_0"}}]}],n:50,r:"data.connected",p:[7,3,135]}," ",{t:4,f:[{p:[22,3,673],t:7,e:"ui-section",a:{label:"Maintenance"},f:[{p:[23,7,712],t:7,e:"ui-button",a:{icon:"wrench",action:"build"},f:["Complete Deployment."]}]}],n:50,x:{r:["data.connected"],s:"!_0"},p:[21,3,647]}]}]},e.exports=a.extend(r.exports)},{341:341}],373:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,180],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,259],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,293],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,299]}," kPa"]}]}," ",{p:[11,3,363],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,393],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,406]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,451]}]}]}," ",{t:4,f:[{p:[15,3,559],t:7,e:"ui-section",a:{label:"Access"},f:[{p:[16,7,593],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.restricted"],s:'_0?"lock":"unlock"'},p:[16,24,610]}],style:[{t:2,x:{r:[],s:'"caution"'},p:[17,14,664]}],action:"restricted"},f:[{t:2,x:{r:["data.restricted"],s:'_0?"Restricted to Engineering":"Public"'},p:[18,27,705]}]}]}],n:50,r:"data.isPrototype",p:[14,3,531]}]}," ",{p:[22,1,818],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[23,3,847],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[24,5,889],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[24,18,902]}],max:[{t:2,r:"data.maxReleasePressure",p:[24,52,936]}],value:[{t:2,r:"data.releasePressure",p:[25,14,978]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[25,40,1004]}," kPa"]}]}," ",{p:[27,3,1073],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[28,5,1117],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[28,38,1150]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[30,5,1304],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[30,36,1335]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[32,5,1480],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[33,5,1574],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[33,35,1604]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[36,3,1763],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[37,5,1794],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[37,22,1811]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[38,14,1864]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[39,22,1957]}]}]}]}," ",{t:4,f:[{p:[42,1,2049],t:7,e:"ui-display",a:{title:"Valve Toggle Timer"},f:[{t:4,f:[{p:[44,5,2112],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[45,7,2152],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.timer_is_not_default"],s:'_0?null:"disabled"'},p:[45,40,2185]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[47,7,2312],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.timer_is_not_min"],s:'_0?null:"disabled"'},p:[47,38,2343]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[49,7,2472],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:[],s:'"disabled"'},p:[49,39,2504]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[51,7,2587],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.timer_is_not_max"],s:'_0?null:"disabled"'},p:[51,37,2617]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[43,3,2091]}," ",{p:[55,3,2779],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[56,6,2811],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[56,39,2844]}],action:"toggle_timer"},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[57,30,2913]}]}," ",{p:[59,2,2959],t:7,e:"ui-section",a:{label:"Time until Valve Toggle"},f:[{p:[60,2,3005],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[60,8,3011]}]}]}]}]}],n:50,r:"data.isPrototype",p:[41,1,2022]},{p:{button:[{t:4,f:[{p:[69,7,3209],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[69,38,3240]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[68,5,3175]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[73,3,3370],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[74,4,3400]}]}," ",{p:[76,3,3444],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[77,4,3477]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[72,3,3340]},{t:4,n:51,f:[{p:[80,3,3556],t:7,e:"ui-section",f:[{p:[81,4,3572],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=a.extend(r.exports)},{341:341}],374:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,158],t:7,e:"ui-display",a:{title:"Cargo"},f:[{p:[12,3,188],t:7,e:"ui-section",a:{label:"Shuttle"},f:[{t:4,f:[{p:[14,7,270],t:7,e:"ui-button",a:{action:"send"},f:[{t:2,r:"data.location",p:[14,32,295]}]}],n:50,x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"},p:[13,5,222]},{t:4,n:51,f:[{p:[16,7,346],t:7,e:"span",f:[{t:2,r:"data.location",p:[16,13,352]}]}],x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"}}]}," ",{p:[19,3,410],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[20,5,444],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[20,11,450]}]}]}," ",{p:[22,3,506],t:7,e:"ui-section",a:{label:"CentCom Message"},f:[{p:[23,7,550],t:7,e:"span",f:[{t:2,r:"data.message",p:[23,13,556]}]}]}," ",{t:4,f:[{p:[26,5,644],t:7,e:"ui-section",a:{label:"Loan"},f:[{t:4,f:[{p:[28,9,716],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.away","data.docked"],s:'_0&&_1?null:"disabled"'},p:[29,17,744]}],action:"loan"},f:["Loan Shuttle"]}],n:50,x:{r:["data.loan_dispatched"],s:"!_0"},p:[27,7,677]},{t:4,n:51,f:[{p:[32,9,868],t:7,e:"span",a:{"class":"bad"},f:["Loaned to CentCom"]}],x:{r:["data.loan_dispatched"],s:"!_0"}}]}],n:50,x:{r:["data.loan","data.requestonly"],s:"_0&&!_1"},p:[25,3,600]}]}," ",{t:4,f:[{p:{button:[{p:[40,7,1066],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.cart.length"],s:'_0?null:"disabled"'},p:[40,38,1097]}],action:"clear"},f:["Clear"]}]},t:7,e:"ui-display",a:{title:"Cart",button:0},f:[" ",{t:4,f:[{p:[43,7,1222],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[44,9,1263],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[44,31,1285]}]}," ",{p:[45,9,1307],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[45,30,1328]}]}," ",{p:[46,9,1354],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[46,30,1375]}," Credits"]}," ",{p:[47,9,1407],t:7,e:"div",a:{"class":"content"},f:[{p:[48,11,1440],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"id": "',{t:2,r:"id",p:[48,67,1496]},'"}']}}]}] }],n:52,r:"data.cart",p:[42,5,1195]},{t:4,n:51,f:[{p:[52,7,1566],t:7,e:"span",f:["Nothing in Cart"]}],r:"data.cart"}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[37,1,972]},{p:{button:[{t:4,f:[{p:[59,7,1735],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.requests.length"],s:'_0?null:"disabled"'},p:[59,38,1766]}],action:"denyall"},f:["Clear"]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[58,5,1702]}]},t:7,e:"ui-display",a:{title:"Requests",button:0},f:[" ",{t:4,f:[{p:[63,5,1908],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[64,7,1947],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[64,29,1969]}]}," ",{p:[65,7,1989],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[65,28,2010]}]}," ",{p:[66,7,2034],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[66,28,2055]}," Credits"]}," ",{p:[67,7,2085],t:7,e:"div",a:{"class":"content"},f:["By ",{t:2,r:"orderer",p:[67,31,2109]}]}," ",{p:[68,7,2134],t:7,e:"div",a:{"class":"content"},f:["Comment: ",{t:2,r:"reason",p:[68,37,2164]}]}," ",{t:4,f:[{p:[70,9,2223],t:7,e:"div",a:{"class":"content"},f:[{p:[71,11,2256],t:7,e:"ui-button",a:{icon:"check",action:"approve",params:['{"id": "',{t:2,r:"id",p:[71,68,2313]},'"}']}}," ",{p:[72,11,2336],t:7,e:"ui-button",a:{icon:"close",action:"deny",params:['{"id": "',{t:2,r:"id",p:[72,65,2390]},'"}']}}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[69,7,2188]}]}],n:52,r:"data.requests",p:[62,3,1879]},{t:4,n:51,f:[{p:[77,7,2473],t:7,e:"span",f:["No Requests"]}],r:"data.requests"}]}," ",{p:[80,1,2529],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[80,16,2544]}]},f:[{t:4,f:[{p:[82,5,2587],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[82,16,2598]}]},f:[{t:4,f:[{p:[84,9,2641],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,28,2660]}],candystripe:0,right:0},f:[{p:[85,11,2700],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"desc",p:[85,31,2720]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[85,90,2779]},'"}']},f:[{t:2,r:"cost",p:[85,100,2789]}," Credits"]}]}],n:52,r:"packs",p:[83,7,2616]}]}],n:52,r:"data.supplies",p:[81,3,2558]}]}]},e.exports=a.extend(r.exports)},{341:341}],375:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,163],t:7,e:"ui-notice",f:[{t:4,f:[{p:[14,5,207],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[15,7,249],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[15,24,266]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[15,75,317]}]}]}],n:50,r:"data.siliconUser",p:[13,3,177]},{t:4,n:51,f:[{p:[18,5,405],t:7,e:"span",f:["Swipe a QM-Level ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[18,39,439]}," this interface."]}],r:"data.siliconUser"}]}," ",{t:4,f:[{p:[23,3,546],t:7,e:"ui-display",a:{title:"Express Cargo Console"},f:[{p:[25,5,594],t:7,e:"ui-section",a:{label:"Landing Location"},f:[{p:[26,7,638],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.usingBeacon"],s:'_0?null:"selected"'},p:[26,25,656]}],action:"LZCargo"},f:["Cargo Bay"]}," ",{p:[27,7,744],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.hasBeacon","data.usingBeacon"],s:'_0?_1?"selected":null:"disabled"'},p:[27,25,762]}],action:"LZBeacon"},f:[{t:2,r:"data.beaconzone",p:[27,116,853]}," (",{t:2,r:"data.beaconName",p:[27,137,874]},")"]}," ",{p:[28,7,913],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBuyBeacon"],s:'_0?null:"disabled"'},p:[28,25,931]}],action:"printBeacon"},f:[{t:2,r:"data.printMsg",p:[28,90,996]}]}]}," ",{p:[31,5,1049],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[32,7,1084],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[32,13,1090]}]}]}," ",{p:[35,5,1149],t:7,e:"ui-section",a:{label:"Notice"},f:[{p:[36,7,1183],t:7,e:"span",f:[{t:2,r:"data.message",p:[36,13,1189]}]}]}]}," ",{p:[39,3,1249],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[39,18,1264]}]},f:[{t:4,f:[{p:[41,7,1309],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[41,18,1320]}]},f:[{t:4,f:[{p:[43,11,1365],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[43,30,1384]}],candystripe:0,right:0},f:[{p:[44,13,1425],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBeacon"],s:'_0?null:"disabled"'},p:[44,31,1443]}],tooltip:[{t:2,r:"desc",p:[44,80,1492]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[44,139,1551]},'"}']},f:[{t:2,r:"cost",p:[44,149,1561]}," Credits ",{t:2,r:"data.beaconError",p:[44,166,1578]}]}]}],n:52,r:"packs",p:[42,9,1339]}]}],n:52,r:"data.supplies",p:[40,5,1279]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[22,1,522]}]},e.exports=a.extend(r.exports)},{341:341}],376:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Cellular Emporium",button:0},f:[{p:[2,3,48],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.can_readapt"],s:'_0?null:"disabled"'},p:[2,36,81]}],action:"readapt"},f:["Readapt"]}," ",{p:[4,3,166],t:7,e:"ui-section",a:{label:"Genetic Points Remaining",right:0},f:[{t:2,r:"data.genetic_points_remaining",p:[5,5,222]}]}]}," ",{p:[8,1,286],t:7,e:"ui-display",f:[{t:4,f:[{p:[10,3,326],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[10,22,345]}],candystripe:0,right:0},f:[{p:[11,5,378],t:7,e:"span",f:[{t:2,r:"desc",p:[11,11,384]}]}," ",{p:[12,5,404],t:7,e:"span",f:[{t:2,r:"helptext",p:[12,11,410]}]}," ",{p:[13,5,434],t:7,e:"span",f:["Cost: ",{t:2,r:"dna_cost",p:[13,17,446]}]}," ",{p:[14,5,470],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["owned","can_purchase"],s:'_0?"selected":_1?null:"disabled"'},p:[15,14,494]}],action:"evolve",params:['{"name": "',{t:2,r:"name",p:[17,25,599]},'"}']},f:[{t:2,x:{r:["owned"],s:'_0?"Evolved":"Evolve"'},p:[18,7,618]}]}]}],n:52,r:"data.abilities",p:[9,1,299]},{t:4,f:[{p:[23,3,716],t:7,e:"span",a:{"class":"warning"},f:["No abilities available."]}],n:51,r:"data.abilities",p:[22,1,694]}]}]},e.exports=a.extend(r.exports)},{341:341}],377:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,17],t:7,e:"span",f:["To use this, simply spawn the atoms you want in one of the five Centcom Supplypod Bays. Items in the bay will then be launched inside your supplypod, one turf-full at a time! You can optionally use the following buttons to configure how the supplypod acts."]}]}," ",{p:[5,1,304],t:7,e:"ui-display",a:{title:"Centcom Pod Customization (to be used against helen weinstein)"},f:[{p:[8,5,397],t:7,e:"ui-section",a:{label:"Which supplypod bay will you use?"},f:[{p:[9,6,458],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==1?"selected":null'},p:[9,24,476]}],action:"bay1"},f:["Bay #1"]}," ",{p:[10,6,561],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==2?"selected":null'},p:[10,24,579]}],action:"bay2"},f:["Bay #2"]}," ",{p:[11,6,664],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==3?"selected":null'},p:[11,24,682]}],action:"bay3"},f:["Bay #3"]}," ",{p:[12,6,766],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==4?"selected":null'},p:[12,24,784]}],action:"bay4"},f:["Bay #4"]}," ",{p:[13,6,868],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==5?"selected":null'},p:[13,24,886]}],action:"bay5","tooltip-side":"left",tooltip:"This bay is located on the western edge of CentCom. Its the glass room directly west of where ERT spawn, and south of the CentCom ferry. Useful for launching ERT/Deathsquads/etc. onto the station via drop pods."},f:["ERT Bay"]}]}," ",{p:[18,5,1236],t:7,e:"ui-section",a:{label:"Teleport to:"},f:[{p:[19,9,1279],t:7,e:"ui-button",a:{action:"teleportCentcom"},f:[{t:2,r:"data.bay",p:[19,45,1315]}]}," ",{p:[20,9,1349],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.oldArea"],s:'_0?null:"disabled"'},p:[20,27,1367]}],action:"teleportBack"},f:[{t:2,x:{r:["data.oldArea"],s:'_0?_0:"where you were"'},p:[20,86,1426]}]}]}," ",{p:[25,5,1519],t:7,e:"ui-section",a:{label:"Launch the real atoms?"},f:[{p:[26,6,1570],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchClone"],s:'_0?"selected":null'},p:[26,24,1588]}],action:"launchClone","tooltip-side":"left",tooltip:"Choosing this will create a duplicate of the item to be launched in Centcom, allowing you to send one type of item multiple times. Either way, the atoms are forceMoved into the supplypod after it lands (but before it opens)."},f:["Launch Clones"]}]}," ",{p:[29,5,1958],t:7,e:"ui-section",a:{label:"Launch all at once?"},f:[{p:[30,9,2008],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==1?"selected":null'},p:[30,27,2026]}],action:"launchOrdered","tooltip-side":"left",tooltip:'Instead of launching everything in the bay at once, this will "scan" things (one turf-full at a time) in order, left to right and top to bottom. Refreshing will reset the "scanner" to the top-leftmost position.'},f:["Ordered"]}," ",{p:[32,9,2376],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==2?"selected":null'},p:[32,27,2394]}],action:"launchRandom","tooltip-side":"left",tooltip:"Instead of launching everything in the bay at once, this will launch one random turf of items at a time."},f:["Random"]}]}," ",{p:[38,5,2656],t:7,e:"ui-section",a:{label:"Add an explosion?"},f:[{p:[39,5,2700],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==1?"selected":null'},p:[39,23,2718]}],action:"explosionCustom","tooltip-side":"left",tooltip:"This will cause an explosion of whatever size you like (including flame range) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Custom Size"]}," ",{p:[41,5,3023],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==2?"selected":null'},p:[41,23,3041]}],action:"explosionBus","tooltip-side":"left",tooltip:"This will cause a maxcap explosion (dependent on server config) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Adminbus"]}]}," ",{p:[46,5,3344],t:7,e:"ui-section",a:{label:"Extra damage?","(default":"None)"},f:[{p:[47,5,3401],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==1?"selected":null'},p:[47,23,3419]}],action:"damageCustom","tooltip-side":"left",tooltip:"Anyone caught under the pod when it lands will be dealt this amount of brute damage. Sucks to be them!"},f:["Custom Damage"]}," ",{p:[49,5,3659],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==2?"selected":null'},p:[49,23,3677]}],action:"damageGib","tooltip-side":"left",tooltip:"This will attempt to gib any mob caught under the pod when it lands, as well as dealing a nice 5000 brute damage. Ya know, just to be sure!"},f:["Gib"]}]}," ",{p:[54,5,3960],t:7,e:"ui-section",a:{label:"Damaging effects?"},f:[{p:[55,5,4004],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStun"],s:'_0?"selected":null'},p:[55,23,4022]}],action:"effectStun","tooltip-side":"left",tooltip:"Anyone who is on the turf when the supplypod is launched will be stunned until the supplypod lands. They cant get away that easy!"},f:["Stun"]}," ",{p:[57,5,4271],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectLimb"],s:'_0?"selected":null'},p:[57,23,4289]}],action:"effectLimb","tooltip-side":"left",tooltip:"This will cause anyone caught under the pod to lose a limb, excluding their head."},f:["Delimb"]}," ",{p:[59,5,4492],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectOrgans"],s:'_0?"selected":null'},p:[59,23,4510]}],action:"effectOrgans","tooltip-side":"left",tooltip:"This will cause anyone caught under the pod to lose all their limbs and organs in a spectacular fashion."},f:["Yeet Organs"]}]}," ",{p:[64,5,4764],t:7,e:"ui-section",a:{label:"Movement effects?"},f:[{p:[65,5,4808],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBluespace"],s:'_0?"selected":null'},p:[65,23,4826]}],action:"effectBluespace","tooltip-side":"left",tooltip:"Gives the supplypod an advanced Bluespace Recyling Device. After opening, the supplypod will be warped directly to the surface of a nearby NT-designated trash planet (/r/ss13)."},f:["Bluespace"]}," ",{p:[67,5,5137],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStealth"],s:'_0?"selected":null'},p:[67,23,5155]}],action:"effectStealth","tooltip-side":"left",tooltip:'This hides the red target icon from appearing when you launch the supplypod. Combos well with the "Invisible" style. Sneak attack, go!'},f:["Stealth"]}," ",{p:[69,5,5418],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectQuiet"],s:'_0?"selected":null'},p:[69,23,5436]}],action:"effectQuiet","tooltip-side":"left",tooltip:"This will keep the supplypod from making any sounds, except for those specifically set by admins in the Sound section."},f:["Quiet Landing"]}," ",{p:[71,5,5685],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectReverse"],s:'_0?"selected":null'},p:[71,23,5703]}],action:"effectReverse","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, after landing, the supplypod will close (similar to a normal closet closing), and then launch back to the right centcom bay to drop off any new contents."},f:["Reverse Mode"]}," ",{p:[73,5,6033],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectMissile"],s:'_0?"selected":null'},p:[73,23,6051]}],action:"effectMissile","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, it will immediatley delete after landing (Similar visually to setting openDelay & departDelay to 0, but this looks nicer). Useful if you just wanna fuck some shit up. Combos well with the Missile style."},f:["Missile Mode"]}," ",{p:[75,5,6430],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectCircle"],s:'_0?"selected":null'},p:[75,23,6448]}],action:"effectCircle","tooltip-side":"left",tooltip:"This will make the supplypod come in from any angle. Im not sure why this feature exists, but here it is."},f:["Any Descent Angle"]}," ",{p:[77,5,6690],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBurst"],s:'_0?"selected":null'},p:[77,23,6708]}],action:"effectBurst","tooltip-side":"left",tooltip:"This will make each click launch 5 supplypods inaccuratly around the target turf (a 3x3 area). Combos well with the Missle Mode if you dont want shit lying everywhere after."},f:["Machine Gun Mode"]}," ",{p:[79,5,7015],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectTarget"],s:'_0?"selected":null'},p:[79,23,7033]}],action:"effectTarget","tooltip-side":"left",tooltip:"This will make the supplypod target a specific atom, instead of the mouses position. Smiting does this automatically!"},f:["Specific Target"]}]}," ",{p:[84,5,7304],t:7,e:"ui-section",a:{label:"Change Name/Desc?"},f:[{p:[85,5,7348],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectName"],s:'_0?"selected":null'},p:[85,23,7366]}],action:"effectName","tooltip-side":"left",tooltip:"Allows you to add a custom name and description."},f:["Custom Name/Desc"]}," ",{p:[87,5,7546],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectAnnounce"],s:'_0?"selected":null'},p:[87,23,7564]}],action:"effectAnnounce","tooltip-side":"left",tooltip:"Alerts ghosts when a pod is launched. Useful if some dumb shit is aboutta come outta the pod."},f:["Alert Ghosts"]}]}," ",{p:[92,5,7812],t:7,e:"ui-section",a:{label:"Sound?"},f:[{p:[93,5,7845],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.fallingSound"],s:'_0?"selected":null'},p:[93,23,7863]}],action:"fallingSound","tooltip-side":"left",tooltip:"Choose a sound to play as the pod falls. Note that for this to work right you should know the exact length of the sound, in seconds."},f:["Custom Falling Sound"]}," ",{p:[95,5,8135],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingSound"],s:'_0?"selected":null'},p:[95,23,8153]}],action:"landingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod lands."},f:["Custom Landing Sound"]}," ",{p:[97,5,8335],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingSound"],s:'_0?"selected":null'},p:[97,23,8353]}],action:"openingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod opens."},f:["Custom Opening Sound"]}," ",{p:[99,5,8535],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.leavingSound"],s:'_0?"selected":null'},p:[99,23,8553]}],action:"leavingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod departs (whether that be delection in the case of a bluespace pod, or leaving for centcom for a reversing pod)."},f:["Custom Leaving Sound"]}," ",{p:[101,5,8840],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.soundVolume"],s:'_0?"selected":null'},p:[101,23,8858]}],action:"soundVolume","tooltip-side":"left",tooltip:"Choose the volume for the sound to play at. Default values are between 1 and 100, but hey, do whatever. Im a tooltip, not a cop."},f:["Admin Sound Volume"]}]}," ",{p:[106,5,9141],t:7,e:"ui-section",a:{label:"Delay timers?"},f:[{p:[107,5,9181],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.fallDuration"],s:'_0!=4?"selected":null'},p:[107,23,9199]}],action:"fallDuration","tooltip-side":"left",tooltip:"Set how long the animation for the pod falling lasts. Create dramatic, slow falling pods!"},f:["Custom Falling Duration"]}," ",{p:[109,5,9436],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingDelay"],s:'_0!=20?"selected":null'},p:[109,23,9454]}],action:"landingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to hit the station. By default this value is 0.5 seconds."},f:["Custom Landing Time"]}," ",{p:[111,9,9713],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingDelay"],s:'_0!=30?"selected":null'},p:[111,27,9731]}],action:"openingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to open after landing. Useful for giving whatevers inside the pod a nice dramatic entrance! By default this value is 3 seconds."},f:["Custom Opening Time"]}," ",{p:[113,5,10056],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.departureDelay"],s:'_0!=30?"selected":null'},p:[113,23,10074]}],action:"departureDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to leave after landing. By default this value is 3 seconds."},f:["Custom Leaving Time"]}]}," ",{p:[118,5,10354],t:7,e:"ui-section",a:{label:"Style?"},f:[{p:[119,5,10387],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==1?"selected":null'},p:[119,23,10405]}],action:"styleStandard","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to your standard Nanotrasen black and orange. Same color scheme as the normal station-used supplypods."},f:["Standard"]}," ",{p:[121,5,10701],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==2?"selected":null'},p:[121,23,10719]}],action:"styleBluespace","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to the same as the stations upgraded blue-and-white Bluespace Supplypods."},f:["Advanced"]}," ",{p:[123,5,10987],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==4?"selected":null'},p:[123,23,11005]}],action:"styleSyndie","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and blood-red. Great for sending meme-ops in style!"},f:["Syndicate"]}," ",{p:[125,5,11269],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==5?"selected":null'},p:[125,23,11287]}],action:"styleBlue","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and dark blue. Great for sending deathsquads in style!"},f:["Deathsquad"]}," ",{p:[127,5,11553],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==6?"selected":null'},p:[127,23,11571]}],action:"styleCult","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a blood and rune covered cult pod!"},f:["Cult Pod"]}," ",{p:[129,5,11791],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==7?"selected":null'},p:[129,23,11809]}],action:"styleMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large missile. Combos well with a missile mode, so the missile doesnt stick around after landing."},f:["Missile"]}," ",{p:[131,5,12096],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==8?"selected":null'},p:[131,23,12114]}],action:"styleSMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large blood-red missile. Combos well with missile mode, so the missile doesnt stick around after landing."},f:["Syndicate Missile"]}," ",{p:[133,5,12420],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==9?"selected":null'},p:[133,23,12438]}],action:"styleBox","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large, dark-green military supply crate."},f:["Supply Crate"]}," ",{p:[135,5,12669],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==10?"selected":null'},p:[135,23,12687]}],action:"styleHONK","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a colorful, clown inspired look."},f:["HONK"]}," ",{p:[137,5,12909],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==11?"selected":null'},p:[137,23,12927]}],action:"styleFruit","tooltip-side":"left",tooltip:"for when an orange is angry"},f:["Fruit~"]}," ",{p:[139,5,13083],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==12?"selected":null'},p:[139,23,13101]}],action:"styleInvisible","tooltip-side":"left",tooltip:'Makes the supplypod invisible! Useful for when you want to use this feature with a gateway or something. Combos well with the "Stealth" and "Quiet Landing" effects.'},f:["Invisible"]}," ",{p:[141,5,13400],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==13?"selected":null'},p:[141,23,13418]}],action:"styleGondola","tooltip-side":"left",tooltip:"this gondola can control when he wants to deliver his supplies if he has a smart enough mind, so offer up his body to ghosts for maximum enjoyment. (Make sure to turn off bluespace and set a arbitrarily high open-time if you do!)"},f:["Gondola (alive)"]}," ",{p:[143,5,13787],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==14?"selected":null'},p:[143,23,13805]}],action:"styleSeeThrough","tooltip-side":"left",tooltip:"By selecting this, the pod will instead look like whatevers inside it (as if it were the contents falling by themselves, without a pod). Useful for launching mechs at the station and standing tall as they soar in from the heavens."},f:["Show Contents (See-Through Pod)!"]}]}]}," ",{p:[148,1,14223],t:7,e:"ui-display",f:[{p:[149,5,14241],t:7,e:"ui-section",a:{label:[{t:2,r:"data.numObjects",p:[149,24,14260]}," turfs in ",{t:2,r:"data.bay",p:[149,53,14289]}],candystripe:0,right:0},f:[{p:[150,9,14331],t:7,e:"ui-button",a:{action:"refresh","tooltip-side":"left",tooltip:"Manually refreshes the possible things to launch in the pod bay."},f:["Refresh Pod Bay"]}," ",{p:[152,9,14500],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.giveLauncher"],s:'_0?"selected":null'},p:[152,27,14518]}],action:"giveLauncher","tooltip-side":"left",tooltip:"THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN"},f:["Enter Launch Mode"]}," ",{p:[154,9,14712],t:7,e:"ui-button",a:{style:"danger",action:"clearBay","tooltip-side":"left",tooltip:"This will delete all objs and mobs from the selected bay."},f:["Clear Selected Bay"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],378:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,64],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,85]}],value:[{t:2,r:"data.energy",p:[3,53,112]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,129]}," Units"]}]}]}," ",{p:[6,1,206],t:7,e:"ui-display",a:{title:"Saved Recipes",button:0},f:[{p:[7,3,251],t:7,e:"ui-section",f:[{p:[8,5,269],t:7,e:"ui-button",a:{icon:"plus",action:"add_recipe"},f:["Add Recipe"]}," ",{p:[9,2,337],t:7,e:"ui-button",a:{icon:"minus",action:"clear_recipes"},f:["Clear Recipes"]}," ",{t:4,f:[{p:[11,7,445],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense_recipe",params:['{"recipe": "',{t:2,r:"contents",p:[11,80,518]},'"}']},f:[{t:2,r:"recipe_name",p:[11,96,534]}]}],n:52,r:"data.recipes",p:[10,5,415]}]}]}," ",{p:{button:[{t:4,f:[{p:[18,7,719],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[18,37,749]}],action:"amount",params:['{"target": ',{t:2,r:".",p:[18,114,826]},"}"]},f:[{t:2,r:".",p:[18,122,834]}]}],n:52,r:"data.beakerTransferAmounts",p:[17,5,675]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[21,3,886],t:7,e:"ui-section",f:[{t:4,f:[{p:[23,7,936],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[23,74,1003]},'"}']},f:[{t:2,r:"title",p:[23,84,1013]}]}],n:52,r:"data.chemicals",p:[22,5,904]}]}]}," ",{p:{button:[{t:4,f:[{p:[30,7,1190],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[30,66,1249]},"}"]},f:[{t:2,r:".",p:[30,74,1257]}]}],n:52,r:"data.beakerTransferAmounts",p:[29,5,1146]}," ",{p:[32,5,1295],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[32,36,1326]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[34,3,1423],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[36,7,1493],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[36,13,1499]},"/",{t:2,r:"data.beakerMaxVolume",p:[36,55,1541]}," Units"]}," ",{p:[37,4,1583],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.beakerCurrentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[37,14,1593]}]}," ",{p:[38,7,1679],t:7,e:"br"}," ",{t:4,f:[{p:[40,9,1732],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[40,52,1775]}," units of ",{t:2,r:"name",p:[40,87,1810]}]},{p:[40,102,1825],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[39,7,1692]},{t:4,n:51,f:[{p:[42,9,1856],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[35,5,1458]},{t:4,n:51,f:[{p:[45,7,1932],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],379:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,35],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,84]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,137]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,186]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,249]}]}]}," ",{p:[8,3,314],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,346],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,79,421]}," K"]}]}]}," ",{p:{button:[{p:[14,5,564],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,595]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,692],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,762],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,781]}," K"]}," ",{p:[19,4,828],t:7,e:"br"}," ",{p:[20,7,842],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.currentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[20,17,852]}]}," ",{p:[21,7,932],t:7,e:"br"}," ",{t:4,f:[{p:[23,3,980],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[23,46,1023]}," units of ",{t:2,r:"name",p:[23,81,1058]}]},{p:[23,96,1073],t:7,e:"br"}," ",{t:4,f:[{p:[25,4,1111],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["Purity: ",{t:2,x:{r:["purity"],s:"Math.fixed(_0,2)"},p:[25,55,1162]}]},{p:[25,87,1194],t:7,e:"br"}],n:50,r:"data.showPurity",p:[24,3,1083]}],n:52,r:"adata.beakerContents",p:[22,7,946]},{t:4,n:51,f:[{p:[28,9,1237],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,727]},{t:4,n:51,f:[{p:[31,7,1313],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],380:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[{p:[3,3,71],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"close"'},p:[3,20,88]}],style:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"selected":null'},p:[4,11,144]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,11,200]}],action:"eject"},f:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"No beaker"'},p:[7,5,269]}]}," ",{p:[10,3,341],t:7,e:"ui-section",f:[{t:4,f:[{t:4,f:[{p:[13,6,427],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[13,25,446]}," units of ",{t:2,r:"name",p:[13,60,481]}],nowrap:0},f:[{p:[14,7,506],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[15,8,556],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[15,61,609]},'", "amount": 1}']},f:["1"]}," ",{p:[16,8,654],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[16,61,707]},'", "amount": 5}']},f:["5"]}," ",{p:[17,8,752],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[17,61,805]},'", "amount": 10}']},f:["10"]}," ",{p:[18,8,852],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[18,61,905]},'", "amount": 1000}']},f:["All"]}," ",{p:[19,8,955],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[19,61,1008]},'", "amount": -1}']},f:["Custom"]}," ",{p:[20,8,1059],t:7,e:"ui-button",a:{action:"analyzeBeak",params:['{"id": "',{t:2,r:"id",p:[20,56,1107]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.beakerContents",p:[12,5,391]},{t:4,n:51,f:[{p:[24,5,1189],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"data.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,4,358]},{t:4,n:51,f:[{p:[27,5,1260],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}," ",{p:[32,2,1348],t:7,e:"ui-display",a:{title:"Buffer"},f:[{p:[33,3,1379],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?null:"selected"'},p:[33,41,1417]}]},f:["Destroy"]}," ",{p:[34,3,1475],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?"selected":null'},p:[34,41,1513]}]},f:["Transfer to Beaker"]}," ",{p:[35,3,1582],t:7,e:"ui-section",f:[{t:4,f:[{p:[37,5,1634],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[37,24,1653]}," units of ",{t:2,r:"name",p:[37,59,1688]}],nowrap:0},f:[{p:[38,6,1712],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[39,7,1761],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[39,62,1816]},'", "amount": 1}']},f:["1"]}," ",{p:[40,7,1860],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[40,62,1915]},'", "amount": 5}']},f:["5"]}," ",{p:[41,7,1959],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[41,62,2014]},'", "amount": 10}']},f:["10"]}," ",{p:[42,7,2060],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[42,62,2115]},'", "amount": 1000}']},f:["All"]}," ",{p:[43,7,2164],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[43,62,2219]},'", "amount": -1}']},f:["Custom"]}," ",{p:[44,7,2269],t:7,e:"ui-button",a:{action:"analyzeBuff",params:['{"id": "',{t:2,r:"id",p:[44,55,2317]},'"}']},f:["Analyze"] }]}]}],n:52,r:"data.bufferContents",p:[36,4,1599]}]}]}," ",{t:4,f:[{p:[52,3,2453],t:7,e:"ui-display",a:{title:"Pills, Bottles and Patches"},f:[{t:4,f:[{p:[54,5,2537],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["id","data.chosenPillStyle"],s:'_0==_1?"selected":null'},p:[54,23,2555]}],action:"pillStyle",params:['{"id": "',{t:2,r:"id",p:[54,108,2640]},'"}']},f:[{t:3,r:"htmltag",p:[54,118,2650]}]}],n:52,r:"data.pillStyles",p:[53,4,2506]}," ",{p:[56,4,2694],t:7,e:"br"}," ",{t:4,f:[{p:[58,5,2740],t:7,e:"ui-button",a:{action:"ejectp",state:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?null:"disabled"'},p:[58,39,2774]}]},f:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?"Eject":"No Pill bottle loaded"'},p:[58,88,2823]}]}," ",{p:[59,5,2904],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.pillBotContent",p:[59,27,2926]},"/",{t:2,r:"data.pillBotMaxContent",p:[59,51,2950]}]}],n:50,r:"data.isPillBottleLoaded",p:[57,4,2703]},{t:4,n:51,f:[{p:[61,5,3002],t:7,e:"span",a:{"class":"average"},f:["No Pillbottle"]}],r:"data.isPillBottleLoaded"}," ",{p:[64,4,3063],t:7,e:"br"}," ",{p:[65,4,3073],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[65,63,3132]}]},f:["Create Pill (max 50µ)"]}," ",{p:[66,4,3216],t:7,e:"br"}," ",{p:[67,4,3226],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[67,63,3285]}]},f:["Create Multiple Pills"]}," ",{p:[68,4,3369],t:7,e:"br"}," ",{p:[69,4,3379],t:7,e:"br"}," ",{p:[70,4,3389],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[70,64,3449]}]},f:["Create Patch (max 40µ)"]}," ",{p:[71,4,3534],t:7,e:"br"}," ",{p:[72,4,3544],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[72,64,3604]}]},f:["Create Multiple Patches"]}," ",{p:[73,4,3690],t:7,e:"br"}," ",{p:[74,4,3700],t:7,e:"br"}," ",{p:[75,4,3710],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[75,65,3771]}]},f:["Create Bottle (max 30µ)"]}," ",{p:[76,4,3857],t:7,e:"br"}," ",{p:[77,4,3867],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[77,65,3928]}]},f:["Dispense Buffer to Bottles"]}," ",{p:[78,4,4017],t:7,e:"br"}," ",{p:[79,4,4027],t:7,e:"br"}," ",{p:[80,4,4037],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[80,63,4096]}]},f:["Create Hypo Vial (max 60µ)"]}," ",{p:[81,4,4185],t:7,e:"br"}," ",{p:[82,4,4195],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[82,63,4254]}]},f:["Dispense Buffer to Hypo vials"]}," ",{p:[83,4,4347],t:7,e:"br"}," ",{p:[84,4,4357],t:7,e:"br"}," ",{p:[85,4,4367],t:7,e:"ui-button",a:{action:"createDart",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[85,63,4426]}]},f:["Create SmartDart (max 20µ)"]}," ",{p:[86,4,4515],t:7,e:"br"}," ",{p:[87,4,4525],t:7,e:"ui-button",a:{action:"createDart",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[87,63,4584]}]},f:["Create Multiple SmartDarts"]}," ",{p:[88,4,4674],t:7,e:"br"}]}],n:50,x:{r:["data.condi"],s:"!_0"},p:[51,2,2430]},{t:4,n:51,f:[{p:[93,3,4717],t:7,e:"ui-display",a:{title:"Condiments bottles and packs"},f:[{p:[94,4,4772],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[94,63,4831]}]},f:["Create Pack (max 10µ)"]}," ",{p:[95,4,4915],t:7,e:"br"}," ",{p:[96,4,4925],t:7,e:"br"}," ",{p:[97,4,4935],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[97,65,4996]}]},f:["Create Bottle (max 50µ)"]}]}],x:{r:["data.condi"],s:"!_0"}}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:'_0=="analyze"'},f:[{p:[101,2,5144],t:7,e:"ui-display",a:{title:[{t:2,r:"data.analyzeVars.name",p:[101,20,5162]}]},f:[{p:[102,3,5193],t:7,e:"span",a:{"class":"highlight"},f:["Description:"]}," ",{p:[103,3,5241],t:7,e:"span",a:{"class":"content",style:"float:center"},f:[{t:2,r:"data.analyzeVars.description",p:[103,46,5284]}]}," ",{p:[104,3,5327],t:7,e:"br"}," ",{p:[105,3,5336],t:7,e:"span",a:{"class":"highlight"},f:["Color:"]}," ",{p:[106,3,5378],t:7,e:"span",a:{style:["color: ",{t:2,r:"data.analyzeVars.color",p:[106,23,5398]},"; background-color: ",{t:2,r:"data.analyzeVars.color",p:[106,69,5444]}]},f:[{t:2,r:"data.analyzeVars.color",p:[106,97,5472]}]}," ",{p:[107,3,5509],t:7,e:"br"}," ",{p:[108,3,5518],t:7,e:"span",a:{"class":"highlight"},f:["State:"]}," ",{p:[109,3,5560],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.state",p:[109,25,5582]}]}," ",{p:[110,3,5619],t:7,e:"br"}," ",{p:[111,3,5628],t:7,e:"span",a:{"class":"highlight"},f:["Metabolization Rate:"]}," ",{p:[112,3,5684],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.metaRate",p:[112,25,5706]},"µ/minute"]}," ",{p:[113,3,5754],t:7,e:"br"}," ",{p:[114,3,5763],t:7,e:"span",a:{"class":"highlight"},f:["Overdose Threshold:"]}," ",{p:[115,3,5818],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.overD",p:[115,25,5840]}]}," ",{p:[116,3,5877],t:7,e:"br"}," ",{p:[117,3,5886],t:7,e:"span",a:{"class":"highlight"},f:["Addiction Threshold:"]}," ",{p:[118,3,5942],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.addicD",p:[118,25,5964]}]}," ",{p:[119,3,6002],t:7,e:"br"}," ",{t:4,f:[{p:[121,4,6041],t:7,e:"span",a:{"class":"highlight"},f:["Minumum Reaction Temperature:"]}," ",{p:[122,4,6107],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.minTemp",p:[122,26,6129]},"K"]}," ",{p:[123,4,6170],t:7,e:"br"}," ",{p:[124,4,6180],t:7,e:"span",a:{"class":"highlight"},f:["Optimal Reaction Temperature:"]}," ",{p:[125,4,6246],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.maxTemp",p:[125,26,6268]},"K"]}," ",{p:[126,4,6309],t:7,e:"br"}," ",{p:[127,4,6319],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Reaction Temperature:"]}," ",{p:[128,4,6387],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.eTemp",p:[128,26,6409]},"K"]}," ",{p:[129,4,6448],t:7,e:"br"}," ",{p:[130,4,6458],t:7,e:"span",a:{"class":"highlight"},f:["Optimal reaction pH:"]}," ",{p:[131,4,6515],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.pHpeak",p:[131,26,6537]}]}," ",{p:[132,4,6576],t:7,e:"br"}," ",{p:[133,4,6586],t:7,e:"span",a:{"class":"highlight"},f:["Current Purity:"]}," ",{p:[134,4,6638],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityF",p:[134,26,6660]}]}," ",{p:[135,4,6700],t:7,e:"br"}," ",{p:[136,4,6710],t:7,e:"span",a:{"class":"highlight"},f:["Inverse Purity Threshold:"]}," ",{p:[137,4,6772],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.inverseRatioF",p:[137,26,6794]}]}," ",{p:[138,4,6840],t:7,e:"br"}," ",{p:[139,4,6850],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Purity Threshold:"]}," ",{p:[140,4,6914],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityE",p:[140,26,6936]}]}," ",{p:[141,4,6976],t:7,e:"br"}],n:50,r:"data.fermianalyze",p:[120,3,6011]}," ",{p:[143,3,6996],t:7,e:"br"}," ",{p:[144,3,7005],t:7,e:"ui-button",a:{action:"goScreen",params:'{"screen": "home"}'},f:["Back"]}]}]}],x:{r:["data.screen"],s:'_0=="home"'}}]},e.exports=a.extend(r.exports)},{341:341}],381:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Recipient Contents"},f:[{p:[2,2,41],t:7,e:"ui-section",f:[{p:[3,3,56],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[3,34,87]}],action:"ejectBeaker"},f:["Eject"]}," ",{p:[4,3,173],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[4,35,205]}],action:"input"},f:["Input"]}," ",{p:[5,3,285],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,35,317]}],action:"amount"},f:[{t:2,r:"data.amount",p:[5,96,378]},"U"]}," ",{p:[6,3,409],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"disabled":null'},p:[6,33,439]}],action:"makecup"},f:["Create Beaker"]}]}]}," ",{p:[9,1,556],t:7,e:"ui-display",a:{title:"Recipient"},f:[{p:[10,2,588],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[12,4,651],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[12,10,657]},"/",{t:2,r:"data.beakerMaxVolume",p:[12,52,699]}," Units"]}," ",{t:4,f:[{p:[14,5,775],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[14,48,818]}," units of ",{t:2,r:"name",p:[14,83,853]}]},{p:[14,98,868],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[13,4,740]},{t:4,n:51,f:[{p:[16,5,890],t:7,e:"span",a:{"class":"bad"},f:["Recipient Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,3,620]},{t:4,n:51,f:[{p:[19,4,958],t:7,e:"span",a:{"class":"average"},f:["No Recipient"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],382:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-button",a:{action:"toggle"},f:[{t:2,x:{r:["data.recollection"],s:'_0?"Recital":"Recollection"'},p:[2,30,42]}]}]}," ",{t:4,f:[{p:[5,3,145],t:7,e:"ui-display",f:[{t:3,r:"data.rec_text",p:[6,3,160]}," ",{t:4,f:[{p:[8,4,224],t:7,e:"br"},{p:[8,8,228],t:7,e:"ui-button",a:{action:"rec_category",params:['{"category": "',{t:2,r:"name",p:[8,63,283]},'"}']},f:[{t:3,r:"name",p:[8,75,295]}," - ",{t:3,r:"desc",p:[8,88,308]}]}],n:52,r:"data.recollection_categories",p:[7,3,182]}," ",{t:3,r:"data.rec_section",p:[10,3,345]}," ",{t:3,r:"data.rec_binds",p:[11,3,370]}]}],n:50,r:"data.recollection",p:[4,1,117]},{t:4,n:51,f:[{p:[14,2,418],t:7,e:"ui-display",a:{title:"Power",button:0},f:[{p:[15,4,455],t:7,e:"ui-section",f:[{t:3,r:"data.power",p:[16,6,473]}]}]}," ",{p:[19,2,523],t:7,e:"ui-display",f:[{p:[20,3,538],t:7,e:"ui-section",f:[{p:[21,4,554],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Driver"?"selected":null'},p:[21,22,572]}],action:"select",params:'{"category": "Driver"}'},f:["Driver"]}," ",{p:[22,4,694],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Script"?"selected":null'},p:[22,22,712]}],action:"select",params:'{"category": "Script"}'},f:["Scripts"]}," ",{p:[23,4,835],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Application"?"selected":null'},p:[23,22,853]}],action:"select",params:'{"category": "Application"}'},f:["Applications"]}," ",{p:[24,4,991],t:7,e:"br"},{t:3,r:"data.tier_info",p:[24,8,995]}]}," ",{p:[26,3,1034],t:7,e:"ui-section",f:[{t:3,r:"data.scripturecolors",p:[27,4,1050]}]},{p:[28,16,1092],t:7,e:"hr"}," ",{p:[29,3,1099],t:7,e:"ui-section",f:[{t:4,f:[{p:[31,4,1142],t:7,e:"div",f:[{p:[31,9,1147],t:7,e:"ui-button",a:{tooltip:[{t:3,r:"tip",p:[31,29,1167]}],"tooltip-side":"right",action:"recite",params:['{"category": "',{t:2,r:"type",p:[31,99,1237]},'"}']},f:["Recite ",{t:3,r:"required",p:[31,118,1256]}]}," ",{t:4,f:[{t:4,f:[{p:[34,6,1329],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[34,53,1376]},'"}']},f:["Unbind ",{t:3,r:"bound",p:[34,72,1395]}]}],n:50,r:"bound",p:[33,5,1310]},{t:4,n:51,f:[{p:[36,6,1437],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[36,53,1484]},'"}']},f:["Quickbind"]}],r:"bound"}],n:50,r:"quickbind",p:[32,6,1288]}," ",{t:3,r:"name",p:[39,6,1548]}," ",{t:3,r:"descname",p:[39,17,1559]}," ",{t:3,r:"invokers",p:[39,32,1574]}]}],n:52,r:"data.scripture",p:[30,3,1114]}]}]}],r:"data.recollection"}]},e.exports=a.extend(r.exports)},{341:341}],383:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Codex Gigas"},f:[{p:[2,2,34],t:7,e:"ui-section",f:[{t:2,r:"data.name",p:[3,3,49]}]}," ",{p:[5,5,82],t:7,e:"ui-section",a:{label:"Prefix"},f:[{p:[6,3,112],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[6,22,131]}],action:"Dark "},f:["Dark"]}," ",{p:[7,3,215],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[7,22,234]}],action:"Hellish "},f:["Hellish"]}," ",{p:[8,3,324],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[8,22,343]}],action:"Fallen "},f:["Fallen"]}," ",{p:[9,3,431],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[9,22,450]}],action:"Fiery "},f:["Fiery"]}," ",{p:[10,3,536],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[10,22,555]}],action:"Sinful "},f:["Sinful"]}," ",{p:[11,3,643],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[11,22,662]}],action:"Blood "},f:["Blood"]}," ",{p:[12,3,748],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[12,22,767]}],action:"Fluffy "},f:["Fluffy"]}]}," ",{p:[14,5,875],t:7,e:"ui-section",a:{label:"Title"},f:[{p:[15,3,904],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[15,22,923]}],action:"Lord "},f:["Lord"]}," ",{p:[16,3,1007],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[16,22,1026]}],action:"Prelate "},f:["Prelate"]}," ",{p:[17,3,1116],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[17,22,1135]}],action:"Count "},f:["Count"]}," ",{p:[18,3,1221],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[18,22,1240]}],action:"Viscount "},f:["Viscount"]}," ",{p:[19,3,1332],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[19,22,1351]}],action:"Vizier "},f:["Vizier"]}," ",{p:[20,3,1439],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[20,22,1458]}],action:"Elder "},f:["Elder"]}," ",{p:[21,3,1544],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[21,22,1563]}],action:"Adept "},f:["Adept"]}]}," ",{p:[23,5,1669],t:7,e:"ui-section",a:{label:"Name"},f:[{p:[24,3,1697],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[24,22,1716]}],action:"hal"},f:["hal"]}," ",{p:[25,3,1797],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[25,22,1816]}],action:"ve"},f:["ve"]}," ",{p:[26,3,1895],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[26,22,1914]}],action:"odr"},f:["odr"]}," ",{p:[27,3,1995],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[27,22,2014]}],action:"neit"},f:["neit"]}," ",{p:[28,3,2097],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[28,22,2116]}],action:"ci"},f:["ci"]}," ",{p:[29,3,2195],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[29,22,2214]}],action:"quon"},f:["quon"]}," ",{p:[30,3,2297],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[30,22,2316]}],action:"mya"},f:["mya"]}," ",{p:[31,3,2397],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[31,22,2416]}],action:"folth"},f:["folth"]}," ",{p:[32,3,2501],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[32,22,2520]}],action:"wren"},f:["wren"]}," ",{p:[33,3,2603],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[33,22,2622]}],action:"geyr"},f:["geyr"]}," ",{p:[34,3,2705],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[34,22,2724]}],action:"hil"},f:["hil"]}," ",{p:[35,3,2805],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[35,22,2824]}],action:"niet"},f:["niet"]}," ",{p:[36,3,2907],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[36,22,2926]}],action:"twou"},f:["twou"]}," ",{p:[37,3,3009],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[37,22,3028]}],action:"phi"},f:["phi"]}," ",{p:[38,3,3109],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[38,22,3128]}],action:"coa"},f:["coa"]}]}," ",{p:[40,5,3229],t:7,e:"ui-section",a:{label:"suffix"},f:[{p:[41,3,3259],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[41,22,3278]}],action:" the Red"},f:["the Red"]}," ",{p:[42,3,3368],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[42,22,3387]}],action:" the Soulless"},f:["the Soulless"]}," ",{p:[43,3,3487],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[43,22,3506]}],action:" the Master"},f:["the Master"]}," ",{p:[44,3,3602],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[44,22,3621]}],action:", the Lord of all things"},f:["the Lord of all things"]}," ",{p:[45,3,3742],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[45,22,3761]}],action:", Jr."},f:["jr"]}]}," ",{p:[47,5,3863],t:7,e:"ui-section",a:{label:"submit"},f:[{p:[48,3,3894],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0>=4?null:"disabled"'},p:[48,21,3912]}],action:"search"},f:["search"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],384:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[2,1,1],t:7,e:"ui-button",a:{icon:"circle",action:"clean_order"},f:["Clear Order"]},{p:[2,70,70],t:7,e:"br"},{p:[2,74,74],t:7,e:"br"}," ",{p:[3,1,79],t:7,e:"i",f:["Your new computer device you always dreamed of is just four steps away..."]},{p:[3,81,159],t:7,e:"hr"}," ",{t:4,f:[" ",{p:[5,1,219],t:7,e:"div",a:{"class":"item"},f:[{p:[6,2,239],t:7,e:"h2",f:["Step 1: Select your device type"]}," ",{p:[7,2,281],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "1"}'},f:["Laptop"]}," ",{p:[8,2,370],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "2"}'},f:["LTablet"]}]}],n:50,x:{r:["data.state"],s:"_0==0"},p:[4,1,164]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.state"],s:"_0==1"},f:[{p:[11,1,492],t:7,e:"div",a:{"class":"item"},f:[{p:[12,2,512],t:7,e:"h2",f:["Step 2: Personalise your device"]}," ",{p:[13,2,554],t:7,e:"table",f:[{p:[14,3,564],t:7,e:"tr",f:[{p:[15,4,572],t:7,e:"td",f:[{p:[15,8,576],t:7,e:"b",f:["Current Price:"]}]},{p:[16,4,601],t:7,e:"td",f:[{t:2,r:"data.totalprice",p:[16,8,605]},"C"]}]}," ",{p:[18,3,636],t:7,e:"tr",f:[{p:[19,4,645],t:7,e:"td",f:[{p:[19,8,649],t:7,e:"b",f:["Battery:"]}]},{p:[20,4,668],t:7,e:"td",f:[{p:[20,8,672],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "1"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==1?"selected":null'},p:[20,73,737]}]},f:["Standard"]}]},{p:[21,4,807],t:7,e:"td",f:[{p:[21,8,811],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "2"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==2?"selected":null'},p:[21,73,876]}]},f:["Upgraded"]}]},{p:[22,4,946],t:7,e:"td",f:[{p:[22,8,950],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "3"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==3?"selected":null'},p:[22,73,1015]}]},f:["Advanced"]}]}]}," ",{p:[24,3,1092],t:7,e:"tr",f:[{p:[25,4,1100],t:7,e:"td",f:[{p:[25,8,1104],t:7,e:"b",f:["Hard Drive:"]}]},{p:[26,4,1126],t:7,e:"td",f:[{p:[26,8,1130],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "1"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==1?"selected":null'},p:[26,67,1189]}]},f:["Standard"]}]},{p:[27,4,1256],t:7,e:"td",f:[{p:[27,8,1260],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "2"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==2?"selected":null'},p:[27,67,1319]}]},f:["Upgraded"]}]},{p:[28,4,1386],t:7,e:"td",f:[{p:[28,8,1390],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "3"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==3?"selected":null'},p:[28,67,1449]}]},f:["Advanced"]}]}]}," ",{p:[30,3,1523],t:7,e:"tr",f:[{p:[31,4,1531],t:7,e:"td",f:[{p:[31,8,1535],t:7,e:"b",f:["Network Card:"]}]},{p:[32,4,1559],t:7,e:"td",f:[{p:[32,8,1563],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "0"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==0?"selected":null'},p:[32,73,1628]}]},f:["None"]}]},{p:[33,4,1694],t:7,e:"td",f:[{p:[33,8,1698],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "1"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==1?"selected":null'},p:[33,73,1763]}]},f:["Standard"]}]},{p:[34,4,1833],t:7,e:"td",f:[{p:[34,8,1837],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "2"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==2?"selected":null'},p:[34,73,1902]}]},f:["Advanced"]}]}]}," ",{p:[36,3,1979],t:7,e:"tr",f:[{p:[37,4,1987],t:7,e:"td",f:[{p:[37,8,1991],t:7,e:"b",f:["Nano Printer:"]}]},{p:[38,4,2015],t:7,e:"td",f:[{p:[38,8,2019],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "0"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==0?"selected":null'},p:[38,73,2084]}]},f:["None"]}]},{p:[39,4,2152],t:7,e:"td",f:[{p:[39,8,2156],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "1"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==1?"selected":null'},p:[39,73,2221]}]},f:["Standard"]}]}]}," ",{p:[41,3,2300],t:7,e:"tr",f:[{p:[42,4,2308],t:7,e:"td",f:[{p:[42,8,2312],t:7,e:"b",f:["Card Reader:"]}]},{p:[43,4,2335],t:7,e:"td",f:[{p:[43,8,2339],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "0"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==0?"selected":null'},p:[43,67,2398]}]},f:["None"]}]},{p:[44,4,2461],t:7,e:"td",f:[{p:[44,8,2465],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "1"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==1?"selected":null'},p:[44,67,2524]}]},f:["Standard"]}]}]}]}," ",{t:4,f:[" ",{p:[49,4,2658],t:7,e:"table",f:[{p:[50,5,2670],t:7,e:"tr",f:[{p:[51,6,2680],t:7,e:"td",f:[{p:[51,10,2684],t:7,e:"b",f:["Processor Unit:"]}]},{p:[52,6,2712],t:7,e:"td",f:[{p:[52,10,2716],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "1"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==1?"selected":null'},p:[52,67,2773]}]},f:["Standard"]}]},{p:[53,6,2841],t:7,e:"td",f:[{p:[53,10,2845],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "2"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==2?"selected":null'},p:[53,67,2902]}]},f:["Advanced"]}]}]}," ",{p:[55,5,2979],t:7,e:"tr",f:[{p:[56,6,2989],t:7,e:"td",f:[{p:[56,10,2993],t:7,e:"b",f:["Tesla Relay:"]}]},{p:[57,6,3018],t:7,e:"td",f:[{p:[57,10,3022],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "0"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==0?"selected":null'},p:[57,71,3083]}]},f:["None"]}]},{p:[58,6,3149],t:7,e:"td",f:[{p:[58,10,3153],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "1"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==1?"selected":null'},p:[58,71,3214]}]},f:["Standard"]}]}]}]}],n:50,x:{r:["data.devtype"],s:"_0!=2"},p:[48,3,2612]}," ",{p:[62,3,3313],t:7,e:"table",f:[{p:[63,4,3324],t:7,e:"tr",f:[{p:[64,5,3333],t:7,e:"td",f:[{p:[64,9,3337],t:7,e:"b",f:["Confirm Order:"]}]},{p:[65,5,3363],t:7,e:"td",f:[{p:[65,9,3367],t:7,e:"ui-button",a:{action:"confirm_order"},f:["CONFIRM"]}]}]}]}," ",{p:[69,2,3444],t:7,e:"hr"}," ",{p:[70,2,3450],t:7,e:"b",f:["Battery"]}," allows your device to operate without external utility power source. Advanced batteries increase battery life.",{p:[70,127,3575],t:7,e:"br"}," ",{p:[71,2,3581],t:7,e:"b",f:["Hard Drive"]}," stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.",{p:[71,130,3709],t:7,e:"br"}," ",{p:[72,2,3715],t:7,e:"b",f:["Network Card"]}," allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.",{p:[72,233,3946],t:7,e:"br"}," ",{p:[73,2,3952],t:7,e:"b",f:["Processor Unit"]}," is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.",{p:[73,208,4158],t:7,e:"br"}," ",{p:[74,2,4164],t:7,e:"b",f:["Tesla Relay"]}," is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.",{p:[74,246,4408],t:7,e:"br"}," ",{p:[75,2,4414],t:7,e:"b",f:["Nano Printer"]}," is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.",{p:[75,241,4653],t:7,e:"br"}," ",{p:[76,2,4659],t:7,e:"b",f:["Card Reader"]}," adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards."]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&(_0==2)"},f:[" ",{p:[79,2,4903],t:7,e:"h2",f:["Step 3: Payment"]}," ",{p:[80,2,4929],t:7,e:"b",f:["Your device is now ready for fabrication.."]},{p:[80,51,4978],t:7,e:"br"}," ",{p:[81,2,4984],t:7,e:"i",f:["Please ensure the required amount of credits are in the machine, then press purchase."]},{p:[81,94,5076],t:7,e:"br"}," ",{p:[82,2,5082],t:7,e:"i",f:["Current credits: ",{p:[82,22,5102],t:7,e:"b",f:[{t:2,r:"data.credits",p:[82,25,5105]},"C"]}]},{p:[82,50,5130],t:7,e:"br"}," ",{p:[83,2,5136],t:7,e:"i",f:["Total price: ",{p:[83,18,5152],t:7,e:"b",f:[{t:2,r:"data.totalprice",p:[83,21,5155]},"C"]}]},{p:[83,49,5183],t:7,e:"br"},{p:[83,53,5187],t:7,e:"br"}," ",{p:[84,2,5193],t:7,e:"ui-button",a:{action:"purchase",state:[{t:2,x:{r:["data.credits","data.totalprice"],s:'_0>=_1?null:"disabled"'},p:[84,38,5229]}]},f:["PURCHASE"]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&((!(_0==2))&&(_0==3))"},f:[" ",{p:[87,2,5337],t:7,e:"h2",f:["Step 4: Thank you for your purchase"]},{p:[87,46,5381],t:7,e:"br"}," ",{p:[88,2,5387],t:7,e:"b",f:["Should you experience any issues with your new device, contact your local network admin for assistance."]}]}],x:{r:["data.state"],s:"_0==0"}}]},e.exports=a.extend(r.exports)},{341:341}],385:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,22],t:7,e:"ui-display",f:[{p:[3,2,37],t:7,e:"ui-section",a:{label:"Cap"},f:[{p:[4,3,65],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.is_capped"],s:'_0?"power-off":"close"'},p:[4,20,82]}],style:[{t:2,x:{r:["data.is_capped"],s:'_0?null:"selected"'},p:[4,71,133]}],action:"toggle_cap"},f:[{t:2,x:{r:["data.is_capped"],s:'_0?"On":"Off"'},p:[6,4,202]}]}]}]}],n:50,r:"data.has_cap",p:[1,1,0]},{p:[10,1,288],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,2,419],t:7,e:"ui-section",f:[{p:[15,3,435],t:7,e:"ui-button",a:{action:"select_colour"},f:["Select New Colour"]}]}],n:50,r:"data.can_change_colour",p:[13,1,386]}]}," ",{p:[19,1,540],t:7,e:"ui-display",a:{title:"Stencil"},f:[{t:4,f:[{p:[21,2,599],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[21,21,618]}]},f:[{t:4,f:[{p:[23,7,655],t:7,e:"ui-button",a:{action:"select_stencil",params:['{"item":"',{t:2,r:"item",p:[23,59,707]},'"}'],style:[{t:2,x:{r:["item","data.selected_stencil"],s:'_0==_1?"selected":null'},p:[24,12,731]}]},f:[{t:2,r:"item",p:[25,4,791]}]}],n:52,r:"items",p:[22,3,632]}]}],n:52,r:"data.drawables",p:[20,3,572]}]}," ",{p:[31,1,874],t:7,e:"ui-display",a:{title:"Text Mode"},f:[{p:[32,2,907],t:7,e:"ui-section",a:{label:"Current Buffer"},f:[{t:2,r:"data.text_buffer",p:[32,37,942]}]}," ",{p:[34,2,981],t:7,e:"ui-section",f:[{p:[34,14,993],t:7,e:"ui-button",a:{action:"enter_text"},f:["New Text"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],386:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{isHead:function(t){return t%10==0},dept_class:function(t){return 0==t?"dept-cap":t>=10&&20>t?"dept-sec":t>=20&&30>t?"dept-med":t>=30&&40>t?"dept-sci":t>=40&&50>t?"dept-eng":t>=50&&60>t?"dept-cargo":t>=200&&230>t?"dept-cent":"dept-other"},health_state:function(t,e,n,a){var r=t+e+n+a;return 0>=r?"health-5":25>=r?"health-4":50>=r?"health-3":75>=r?"health-2":"health-0"}}}}(r),r.exports.css=" .health {\n width: 16px;\n height: 16px;\n background-color: #FFF;\n border: 1px solid #434343;\n position: relative;\n top: 2px;\n display: inline-block;\n }\n .health-5 { background-color: #17d568; }\n .health-4 { background-color: #2ecc71; }\n .health-3 { background-color: #e67e22; }\n .health-2 { background-color: #ed5100; }\n .health-1 { background-color: #e74c3c; }\n .health-0 { background-color: #ed2814; }\n\n .dept-cap {color : #C06616;}\n .dept-sec {color : #E74C3C;}\n .dept-med {color : #3498DB;}\n .dept-sci {color : #9B59B6;}\n .dept-eng {color : #F1C40F;}\n .dept-cargo {color : #F39C12;}\n .dept-cent {color : #00C100;}\n .dept-other {color: #C38312;}\n\n .oxy { color : #3498db; }\n .toxin { color : #2ecc71; }\n .burn { color : #e67e22; }\n .brute { color : #e74c3c; }\n\n table.crew{\n border-collapse: collapse;\n }\n\n table.crew td {\n padding : 0px 10px;\n }",r.exports.template={v:3,t:[" ",{p:[27,1,1004],t:7,e:"ui-display",f:[{p:[28,2,1018],t:7,e:"ui-section",f:[{p:[29,3,1033],t:7,e:"table",a:{"class":"crew"},f:[{p:[30,3,1056],t:7,e:"thead",f:[{p:[31,3,1066],t:7,e:"tr",f:[{p:[32,4,1074],t:7,e:"th",f:["Name"]}," ",{p:[33,4,1091],t:7,e:"th",f:["Status"]}," ",{p:[34,4,1110],t:7,e:"th",f:["Vitals"]}," ",{p:[35,4,1129],t:7,e:"th",f:["Position"]}," ",{t:4,f:[{p:[37,5,1180],t:7,e:"th",f:["Tracking"]}],n:50,r:"data.link_allowed",p:[36,4,1150]}]}]}," ",{p:[41,3,1230],t:7,e:"tbody",f:[{t:4,f:[{p:[43,4,1266],t:7,e:"tr",f:[{p:[44,5,1275],t:7,e:"td",f:[{p:[45,6,1285],t:7,e:"span",a:{"class":[{t:2,x:{r:["isHead","ijob"],s:'_0(_1)?"bold ":""'},p:[45,19,1298]},{t:2,x:{r:["dept_class","ijob"],s:"_0(_1)"},p:[45,49,1328]}]},f:[{t:2,r:"name",p:[46,7,1357]}," (",{t:2,r:"assignment",p:[46,17,1367]},") ",{p:[47,6,1388],t:7,e:"span",f:[]}]}]}," ",{p:[49,5,1409],t:7,e:"td",f:[{t:4,f:[{p:[51,7,1448],t:7,e:"span",a:{"class":["health ",{t:2,x:{r:["health_state","oxydam","toxdam","burndam","brutedam"],s:"_0(_1,_2,_3,_4)"},p:[51,27,1468]}]}}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[50,6,1419]},{t:4,n:51,f:[{t:4,f:[{p:[54,8,1573],t:7,e:"span",a:{"class":"health health-5"}}],n:50,r:"life_status",p:[53,7,1546]},{t:4,n:51,f:[{p:[56,8,1633],t:7,e:"span",a:{"class":"health health-0"}}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[60,5,1712],t:7,e:"td",f:[{t:4,f:[{p:[62,7,1751],t:7,e:"span",f:["( ",{p:[64,8,1773],t:7,e:"span",a:{"class":"oxy"},f:[{t:2,r:"oxydam",p:[64,26,1791]}]}," / ",{p:[66,8,1825],t:7,e:"span",a:{"class":"toxin"},f:[{t:2,r:"toxdam",p:[66,28,1845]}]}," / ",{p:[68,8,1879],t:7,e:"span",a:{"class":"burn"},f:[{t:2,r:"burndam",p:[68,27,1898]}]}," / ",{p:[70,8,1933],t:7,e:"span",a:{"class":"brute"},f:[{t:2,r:"brutedam",p:[70,28,1953]}]}," )"]}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[61,6,1722]},{t:4,n:51,f:[{t:4,f:[{p:[75,8,2042],t:7,e:"span",f:["Alive"]}],n:50,r:"life_status",p:[74,7,2015]},{t:4,n:51,f:[{p:[77,8,2083],t:7,e:"span",f:["Dead"]}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[81,5,2142],t:7,e:"td",f:[{t:4,f:[{p:[83,6,2178],t:7,e:"span",f:[{t:2,r:"area",p:[83,12,2184]}]}],n:50,x:{r:["pos_x"],s:"_0!=null"},p:[82,5,2151]},{t:4,n:51,f:[{p:[85,6,2218],t:7,e:"span",f:["N/A"]}], -x:{r:["pos_x"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[89,6,2293],t:7,e:"td",f:[{p:[90,7,2304],t:7,e:"ui-button",a:{action:"select_person",state:[{t:2,x:{r:["can_track"],s:'_0?null:"disabled"'},p:[90,48,2345]}],params:['{"name":"',{t:2,r:"name",p:[90,100,2397]},'"}']},f:["Track"]}]}],n:50,r:"data.link_allowed",p:[88,5,2261]}]}],n:52,r:"data.sensors",p:[42,3,1240]}]}]}]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],387:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,184],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,217],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,230]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,259]}]}]}," ",{p:[9,4,309],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[10,6,347],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.temperaturestatus",p:[10,19,360]}]},f:[{t:2,r:"data.occupant.bodyTemperature",p:[10,56,397]}," K"]}]}," ",{p:[12,5,461],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[13,7,495],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[13,20,508]}],max:[{t:2,r:"data.occupant.maxHealth",p:[13,54,542]}],value:[{t:2,r:"data.occupant.health",p:[13,90,578]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[14,16,619]}]},f:[{t:2,r:"data.occupant.health",p:[14,68,671]}]}]}," ",{t:4,f:[{p:[17,7,892],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[17,26,911]}]},f:[{p:[18,9,931],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[18,30,952]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,66,988]}],state:"bad"},f:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,103,1025]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[16,5,727]}],n:50,r:"data.hasOccupant",p:[5,3,155]}]}," ",{p:[23,1,1116],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[24,3,1144],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[25,5,1175],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[25,22,1192]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[26,14,1251]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[27,14,1306]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[28,22,1364]}]}]}," ",{p:[30,3,1430],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,3,1465],t:7,e:"span",a:{"class":[{t:2,r:"data.temperaturestatus",p:[31,16,1478]}]},f:[{t:2,r:"data.cellTemperature",p:[31,44,1506]}," K"]}]}," ",{p:[33,2,1556],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[34,5,1586],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[34,22,1603]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[34,73,1654]}]}," ",{p:[35,5,1706],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[35,22,1723]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[35,86,1787]}]}]}]}," ",{p:{button:[{p:[40,5,1928],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[40,36,1959]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[42,3,2060],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[45,9,2167],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,r:"volume",p:[45,52,2210]}," units of ",{t:2,r:"name",p:[45,72,2230]}]},{p:[45,87,2245],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[44,7,2128]},{t:4,n:51,f:[{p:[47,9,2274],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[43,5,2094]},{t:4,n:51,f:[{p:[50,7,2347],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],388:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,14],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,73],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,43]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,147],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,119]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,239],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,203]},{t:4,n:51,f:[{p:[12,6,299],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,377],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,409],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,442]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,469]},"%"]}]}," ",{p:[20,5,511],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,547],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,568]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,625]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,691]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,739]}]}]}," ",{p:[27,2,811],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,840],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,874]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,951],t:7,e:"br"}]}," ",{p:[30,2,973],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1002],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1037]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1086]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1144]}]}},{p:[31,206,1205],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],389:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,42],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,79],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,100]}],value:[{t:2,r:"data.dna",p:[3,53,125]}]},f:[{t:2,r:"data.dna",p:[3,67,139]},"/",{t:2,r:"data.dna_max",p:[3,80,152]}," Samples"]}]}," ",{p:[5,3,204],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,240],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,261]}],value:[{t:2,r:"data.plants",p:[6,54,289]}]},f:[{t:2,r:"data.plants",p:[6,71,306]},"/",{t:2,r:"data.plants_max",p:[6,87,322]}," Samples"]}]}," ",{p:[8,3,377],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,414],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,435]}],value:[{t:2,r:"data.animals",p:[9,55,464]}]},f:[{t:2,r:"data.animals",p:[9,73,482]},"/",{t:2,r:"data.animals_max",p:[9,90,499]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,604],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,650],t:7,e:"ui-section",f:[{p:[15,2,664],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,731],t:7,e:"ui-section",f:[{p:[18,2,745],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,790]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,810]}]}," ",{p:[19,2,840],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,885]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,905]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,567]}]},e.exports=a.extend(r.exports)},{341:341}],390:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,178],t:7,e:"ui-section",a:{label:"Items in storage"},f:[{p:[7,4,219],t:7,e:"span",f:[{t:2,r:"data.items",p:[7,10,225]}]}]}],n:50,r:"data.items",p:[5,3,155]}," ",{t:4,f:[{p:[11,5,300],t:7,e:"ui-section",a:{label:"State"},f:[{p:[12,7,333],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[12,20,346]}]},f:[{t:2,r:"data.occupant.stat",p:[12,49,375]}]}]}," ",{p:[14,5,426],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[15,7,460],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[15,20,473]}],max:[{t:2,r:"data.occupant.maxHealth",p:[15,54,507]}],value:[{t:2,r:"data.occupant.health",p:[15,90,543]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[16,16,584]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[16,68,636]}]}]}," ",{t:4,f:[{p:[19,7,870],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[19,26,889]}]},f:[{p:[20,9,909],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[20,30,930]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[20,66,966]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[20,103,1003]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[18,5,705]}," ",{p:[23,5,1087],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[24,9,1122],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[24,22,1135]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[24,68,1181]}]}]}," ",{p:[26,5,1262],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[27,9,1297],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[27,22,1310]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[27,68,1356]}]}]}," ",{p:[29,5,1438],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[31,11,1523],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[31,54,1566]}," units of ",{t:2,r:"name",p:[31,89,1601]}]},{p:[31,104,1616],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[30,9,1479]},{t:4,n:51,f:[{p:[33,11,1649],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[10,3,274]}]}," ",{p:[38,1,1740],t:7,e:"ui-display",a:{title:"Operations"},f:[{p:[39,3,1774],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[41,7,1832],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied"],s:'_0?null:"disabled"'},p:[41,38,1863]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[41,111,1936]},'"}']},f:[{t:2,r:"name",p:[41,121,1946]}]},{p:[41,141,1966],t:7,e:"br"}],n:52,r:"data.chem",p:[40,5,1806]}]}," ",{p:[44,2,2003],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[45,6,2035],t:7,e:"ui-button",a:{icon:"sign-out",action:"eject"},f:["Eject Contents"]}]}," ",{p:[47,2,2120],t:7,e:"ui-section",a:{label:"Self Cleaning"},f:[{p:[48,3,2157],t:7,e:"ui-button",a:{icon:"recycle",action:"cleaning"},f:["Self-Clean Cycle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],391:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,41]}]},f:[{p:[3,5,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,114],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,169]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,200]}]},f:[{t:2,r:"answer",p:[7,53,235]}," (",{t:2,r:"amount",p:[7,65,247]},")"]}],n:52,r:"data.answers",p:[4,7,83]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,341],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{341:341}],392:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,16],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,41]}]}]}," ",{p:[4,1,80],t:7,e:"ui-notice",f:[{p:[5,3,94],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,109]}]}]}," ",{p:[7,1,174],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,209],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,242]}]}," ",{p:[10,2,309],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,393]}]},f:["AUTHORIZE"]}," ",{p:[15,2,459],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,508]}]},f:["Repeal"]}," ",{p:[19,2,571],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,619]}]},f:["Repeal All"]}]}," ",{p:[24,1,699],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,768],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,799]}," (",{t:2,r:"job",p:[26,44,809]},")"]}],n:52,r:"data.authorizations",p:[25,2,736]},{t:4,n:51,f:[{p:[28,3,843],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{341:341}],393:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,48]}]}," ",{p:[5,3,90],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,126]}]}," ",{p:[8,3,162],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,196],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,242]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,333]}]}," ",{p:[13,5,368],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,412]}],action:"neutral"}}," ",{p:[17,5,546],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,594]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,691]}]}]}]}," ",{t:4,f:[{p:[24,3,782],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,819],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,852]}]}," ",{p:[26,5,890],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,933]}]}," ",{p:[27,5,972],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,756]}]},e.exports=a.extend(r.exports)},{341:341}],394:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,45]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{341:341}],395:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,19],t:7,e:"ui-notice",f:["Currently syncing with the database"]}],n:50,r:"data.sync",p:[1,1,0]},{t:4,n:51,f:[{p:{button:[{p:[8,4,156],t:7,e:"ui-button",a:{icon:"eject",action:"eject_all"},f:["Eject all"]}," ",{p:[9,4,224],t:7,e:"ui-button",a:{icon:["toggle-",{t:2,x:{r:["data.show_materials"],s:'_0?"off":"on"'},p:[9,28,248]}],action:"toggle_materials_visibility"},f:[{t:2,x:{r:["data.show_materials"],s:'_0?"Hide":"Show"'},p:[10,5,330]}]}]},t:7,e:"ui-display",a:{title:"Materials",button:0},f:[" ",{t:4,f:[{p:[14,4,436],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[15,5,470],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[16,6,505],t:7,e:"section",a:{"class":"cell"}}," ",{p:[17,6,543],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[20,6,601],t:7,e:"section",a:{"class":"cell"},f:["Amount"]}," ",{p:[23,6,658],t:7,e:"section",a:{"class":"cell"}}," ",{p:[24,6,696],t:7,e:"section",a:{"class":"cell"}}]}," ",{t:4,f:[{p:[27,6,782],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[28,7,818],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[29,8,848]}]}," ",{p:[31,7,880],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"amount",p:[32,8,910]}]}," ",{p:[34,7,944],t:7,e:"section",a:{"class":"cell"},f:[{p:[35,8,974],t:7,e:"ui-button",a:{icon:"eject"},f:["Release amount"]}]}," ",{p:[37,7,1048],t:7,e:"section",a:{"class":"cell",style:"width: 40px;"},f:[{p:[38,8,1099],t:7,e:"ui-button",a:{icon:"eject"},f:["Release all"]}]}]}],n:52,r:"data.all_materials",p:[26,5,748]}]}],n:50,r:"data.show_materials",p:[13,3,405]}]}," ",{p:[45,2,1230],t:7,e:"ui-display",a:{title:"Categories"},f:[{t:4,f:[{p:[47,4,1288],t:7,e:"ui-button",f:[{t:2,r:".",p:[47,15,1299]}]}],r:"data.categories",p:[46,3,1264]}]}],r:"data.sync"}]},e.exports=a.extend(r.exports)},{341:341}],396:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,5,47],t:7,e:"ui-button",a:{action:"toggle_power",style:[{t:2,x:{r:["data.toggle"],s:'_0?"selected":null'},p:[5,18,107]}]},f:["Turn ",{t:2,x:{r:["data.toggle"],s:'_0?"off":"on"'},p:[6,16,161]}]}]}," ",{p:[9,3,227],t:7,e:"ui-display",a:{title:"Logging"},f:[{t:4,f:[{p:[11,3,282],t:7,e:"ui-section",a:{label:">"},f:[{t:2,r:".",p:[11,25,304]},{p:[11,30,309],t:7,e:"ui-section",f:[]}]}],n:52,r:"data.logs",p:[10,5,260]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],397:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{seclevelState:function(){switch(this.get("data.seclevel")){case"blue":return"average";case"red":return"bad";case"delta":return"bad bold";default:return"good"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[16,1,308],t:7,e:"ui-display",f:[{p:[17,5,325],t:7,e:"ui-section",a:{label:"Alert Level"},f:[{p:[18,9,366],t:7,e:"span",a:{"class":[{t:2,r:"seclevelState",p:[18,22,379]}]},f:[{t:2,x:{r:["text","data.seclevel"],s:"_0.titleCase(_1)"},p:[18,41,398]}]}]}," ",{p:[20,5,461],t:7,e:"ui-section",a:{label:"Controls"},f:[{p:[21,9,499],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.alarm"],s:'_0?"close":"bell-o"'},p:[21,26,516]}],action:[{t:2,x:{r:["data.alarm"],s:'_0?"reset":"alarm"'},p:[21,71,561]}]},f:[{t:2,x:{r:["data.alarm"],s:'_0?"Reset":"Activate"'},p:[22,13,610]}]}]}," ",{t:4,f:[{p:[25,7,709],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[26,9,746],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[24,5,682]}]}]},e.exports=a.extend(r.exports)},{341:341}],398:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,30],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,58],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,93]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,148]}]}]}," ",{p:[5,1,214],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,240],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,281]}]}]}," ",{p:[8,1,320],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,356],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,372]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,417]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,575]}]}]}," ",{p:[11,1,639],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,677],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,710]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,840]}]}]}]}," ",{t:4,f:[{p:[16,2,942],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,982],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,988]}]}]}," ",{p:[20,2,1029],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1093],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1111]}]},f:[{p:[23,3,1127],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1133]}," (",{t:2,r:"coord",p:[23,19,1143]},")"]}," ",{t:4,f:[{p:[25,4,1185],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1197]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1212]},"° (",{t:2,r:"direction",p:[25,45,1226]},")"]}],n:50,r:"direction",p:[24,3,1164]}]}],n:52,r:"data.signals",p:[21,2,1068]}]}],n:50,r:"data.power",p:[15,1,922]}]},e.exports=a.extend(r.exports)},{341:341}],399:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,44],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,85],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,98]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,136]}]}]}," ",{t:4,f:[{p:[6,4,239],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,273],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,279]}]}]}," ",{p:[9,4,335],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,374],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,391]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,462]}]}," ",{p:[11,5,527],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,559]}]}]}],n:50,r:"data.teleporter",p:[5,3,212]},{t:4,n:51,f:[{p:[14,4,653],t:7,e:"span",f:[{p:[14,10,659],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,754],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,794],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,831],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,844]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,878]}]}]}," ",{t:4,f:[{p:[22,3,971],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1004],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1010]}]}]}],n:50,r:"data.beacon",p:[21,2,949]},{t:4,n:51,f:[{p:[26,4,1072],t:7,e:"span",f:[{p:[26,10,1078],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1165],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1204],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1239],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1269]}]}]}," ",{t:4,f:[{p:[34,2,1359],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1395],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1424]}]}]}],n:50,r:"data.id",p:[33,2,1342]}," ",{p:[38,2,1475],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1507],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1513]}]}]}," ",{t:4,f:[{p:[42,3,1620],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1660],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1666]}]}]}],n:50,r:"data.prisoner",p:[41,2,1596]}]}," ",{p:[47,1,1739],t:7,e:"ui-display",f:[{p:[48,2,1753],t:7,e:"center",f:[{p:[48,10,1761],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1796]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],400:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,22,78]}]},f:[{p:[4,4,93],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2,r:"mob",p:[4,56,145]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[4,72,161]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[2,2,36]}]}]},e.exports=a.extend(r.exports)},{341:341}],401:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,68],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,85]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,128]}],action:"safety"},f:["Safeties: ",{p:[4,14,206],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,219]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,254]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,356],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,406]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,424]}]},f:[{t:2,r:"name",p:[9,5,475]}," "]},{p:[10,14,497],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,323]}]}," ",{t:4,f:[{p:[14,2,549],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,623],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,688]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,706]}]},f:[{t:2,r:"name",p:[17,5,757]}," "]},{p:[18,16,781],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,591]}]}],n:50,r:"data.emagged",p:[13,1,527]}]},e.exports=a.extend(r.exports)},{341:341}],402:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,266],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,298],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,330],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,336]}]}]}," ",{t:4,f:[{p:[20,5,447],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,480],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,493]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,516]}]}]}],n:50,r:"data.occupied",p:[19,3,421]}]}," ",{p:[25,1,656],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,687],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,717],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,734]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,783]}]}]}," ",{p:[29,3,846],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,876]}," ",{t:4,f:[{p:[32,7,938],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,906]}]}," ",{p:[35,3,1002],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1038],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1056]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1162]}," "]},{p:[38,19,1265],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],403:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,282],t:7,e:"ui-notice",f:[{p:[16,5,298],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,260]},{p:{button:[{t:4,f:[{p:[22,7,458],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,489]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,540]}," AI"]}],n:50,r:"data.name",p:[21,5,434]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,370]}],button:0},f:[" ",{t:4,f:[{p:[26,5,647],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,683],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,696]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,750]}]}]}," ",{p:[29,5,843],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,889],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,922]}],state:[{t:2,r:"healthState",p:[30,64,946]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,963]},"%"]}]}," ",{p:[32,5,1024],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1084],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1108]}]},{p:[34,45,1120],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1056]}]}," ",{p:[37,5,1164],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1200],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1232]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1325],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1361]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,625]}]}]},e.exports=a.extend(r.exports)},{341:341}],404:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,22],t:7,e:"ui-notice",f:[{p:[3,3,36],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,127],t:7,e:"ui-display",f:[{p:[7,3,142],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,189],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,243]}]}],n:50,r:"data.auth_required",p:[8,4,158]},{t:4,n:51,f:[{p:[11,5,294],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,327]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,412],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,444]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,560],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{341:341}],405:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[10,3,229],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[10,9,235]}]}," ",{p:[11,3,271],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[11,42,310]}]},f:["Claim points"]}]}]}," ",{p:[14,1,413],t:7,e:"ui-display",f:[{p:[15,2,428],t:7,e:"span",f:["Points: ",{t:2,r:"data.id_points",p:[15,16,442]}]}," ",{p:[16,2,470],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[17,3,501],t:7,e:"span",f:[{t:2,r:"data.status_info",p:[17,9,507]}]}," ",{p:[18,3,538],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[18,42,577]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],406:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,68],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,86]}]},f:[{p:[4,7,102],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,108]}]}," ",{p:[5,7,130],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,142]}]}," ",{t:4,f:[{p:[7,9,186],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow", -p:[6,7,163]}," ",{p:[9,7,237],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,243]}]}," ",{t:4,f:[{p:[11,9,332],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,413]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,442]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,512]}]}],n:50,r:"data.is_living",p:[10,7,301]}," ",{t:4,f:[{t:4,f:[{p:[20,11,666],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,727]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,641]},{t:4,n:51,f:[{p:[22,11,784],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,846]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,609]}]}],n:52,r:"data.languages",p:[2,3,39]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1004],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1061]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"'},p:[33,19,1120]}]}],n:50,r:"data.is_living",p:[29,3,977]}," ",{p:[36,3,1196],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1278],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1296]}]},f:[{p:[39,9,1314],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1320]}]}," ",{p:[40,9,1344],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1356]}]}," ",{p:[41,9,1379],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1460]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1239]}]}],n:50,r:"data.admin_mode",p:[28,1,951]}]},e.exports=a.extend(r.exports)},{341:341}],407:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,81],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,114],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,54]},{t:4,n:51,f:[{p:[8,4,176],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,210],t:7,e:"span",f:[{p:[9,10,216],t:7,e:"b",f:[{t:2,r:"data.pad_name",p:[9,13,219]}]}]},{p:[9,41,247],t:7,e:"br"}," ",{p:[10,4,255],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,318],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,414],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,449],t:7,e:"table",f:[{p:[16,4,460],t:7,e:"tr",f:[{p:[17,5,469],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,502],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,553],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,605],t:7,e:"ui-button",a:{action:"up"},f:["↑"]}]}," ",{p:[19,5,651],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,702],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,762],t:7,e:"tr",f:[{p:[22,5,771],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,804],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["←"]}]}," ",{p:[23,5,881],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,933],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,982],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1033],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1090],t:7,e:"tr",f:[{p:[27,5,1099],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1132],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1185],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1237],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1285],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1336],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1427],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1467],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1473]}," ",{t:2,r:"data.north_south",p:[34,26,1488]}]},{p:[34,53,1515],t:7,e:"br"}," ",{p:[35,5,1524],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1530]}," ",{t:2,r:"data.east_west",p:[35,26,1545]}]}]}," ",{p:[37,4,1591],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1625],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1751],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,31]},{t:4,n:51,f:[{p:[45,3,1912],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1944],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{341:341}],408:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,526],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,624],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,660],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,681]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,728]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,771]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,825]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,873]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1034],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1060],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,984]},{t:4,n:51,f:[{p:[30,11,1141],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1180],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1201]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1253]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1301]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1360]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1413]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,945]},{t:4,n:51,f:[{p:[35,3,1524],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1550],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,589]},{t:4,n:51,f:[{p:[38,4,1625],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,561]},{t:4,n:51,f:[{p:[41,5,1689],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1741],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{341:341}],409:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,43],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,85],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,102]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,153]}]}]}],n:50,r:"data.siliconUser",p:[2,3,14]},{t:4,n:51,f:[{p:[7,5,241],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,267]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,349],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,379],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,458],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,475]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,519]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,567]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,410]},{t:4,n:51,f:[{p:[15,7,625],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,638]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,675]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,710]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,774],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,804],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,817]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,847]}]}]}," ",{p:[21,3,923],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,953],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,966]}]},f:[{t:2,r:"data.mode",p:[22,39,987]}]}]}," ",{p:[24,3,1026],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1056],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1069]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1105]}]}]}," ",{p:[27,3,1165],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1202],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1215]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1257]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1479],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1453]}," ",{t:4,f:[{p:[38,9,1586],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1558]}," ",{p:[40,7,1670],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1750],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1789],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1869],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1929],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2001],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2033],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2096],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2181],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2217],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2234]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2294]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2396],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2413]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2473]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2577],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2594]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2658]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1343]}]},e.exports=a.extend(r.exports)},{341:341}],410:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Chamber Console"},f:[{p:[2,1,44],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,2,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,63,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,3,195],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[6,36,228]}]}," ",{p:[7,3,262],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[7,35,294]}]}," ",{p:[8,3,328],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[8,41,366]}]}," ",{t:4,f:[{p:[10,4,468],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[10,41,505]}]}],n:50,r:"data.disk.activation_delay",p:[9,3,430]}," ",{t:4,f:[{p:[13,4,588],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[13,30,614]}]}," ",{p:[14,4,650],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[14,36,682]}]}],n:50,r:"data.disk.timer",p:[12,3,561]}," ",{t:4,f:[{p:[17,4,769],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[17,40,805]}]}],n:50,r:"data.disk.activation_code",p:[16,3,732]}," ",{t:4,f:[{p:[20,4,899],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[20,42,937]}]}],n:50,r:"data.disk.deactivation_code",p:[19,3,860]}," ",{t:4,f:[{p:[23,4,1025],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[23,34,1055]}]}],n:50,r:"data.disk.kill_code",p:[22,3,994]}," ",{t:4,f:[{p:[26,4,1138],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[26,37,1171]}]}],n:50,r:"data.disk.trigger_code",p:[25,3,1104]}," ",{t:4,f:[{t:4,f:[{p:[30,6,1303],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[30,25,1322]}]},f:[{t:2,r:"value",p:[30,35,1332]}]}],n:52,r:"data.disk.extra_settings",p:[29,4,1263]}],n:50,r:"data.disk.has_extra_settings",p:[28,3,1223]}],n:50,r:"data.has_program",p:[5,2,168]},{t:4,n:51,f:[{p:[34,3,1390],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,1,78]},{t:4,n:51,f:[{p:[37,2,1453],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[40,1,1511],t:7,e:"br"}," ",{t:4,f:[{p:[42,2,1541],t:7,e:"ui-notice",f:[{t:2,r:"data.status_msg",p:[42,13,1552]}]}],n:50,r:"data.status_msg",p:[41,1,1516]},{t:4,n:51,f:[{p:[44,2,1594],t:7,e:"ui-display",a:{title:"Chamber"},f:[{p:[45,2,1624],t:7,e:"ui-section",f:[{p:[45,14,1636],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock-open":"lock"'},p:[45,30,1652]}],action:"toggle_lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[45,90,1712]}," Chamber"]},{p:[45,146,1768],t:7,e:"br"}]}," ",{p:[46,2,1787],t:7,e:"ui-section",f:[{p:[46,14,1799],t:7,e:"b",f:["Occupant:"]}," ",{t:2,r:"data.occupant_name",p:[46,31,1816]}]}," ",{t:4,f:[{p:[48,4,1882],t:7,e:"ui-section",f:[{p:[48,16,1894],t:7,e:"ui-notice",f:["No nanites detected."]}]}," ",{p:[49,4,1954],t:7,e:"ui-section",f:[{p:[49,16,1966],t:7,e:"ui-button",a:{icon:"syringe",action:"nanite_injection"},f:["Implant Nanites"]}]}],n:50,x:{r:["data.has_nanites"],s:"!_0"},p:[47,2,1853]},{t:4,n:51,f:[{p:[51,3,2071],t:7,e:"ui-display",a:{title:"Nanites"},f:[{t:4,f:[{p:[53,5,2129],t:7,e:"ui-button",a:{icon:"download",action:"add_program"},f:["Install Program From Disk"]},{p:[53,90,2214],t:7,e:"br"}," ",{p:[54,5,2223],t:7,e:"br"}],n:50,r:"data.has_disk",p:[52,4,2103]}," ",{p:[56,4,2242],t:7,e:"ui-section",f:[{p:[57,5,2259],t:7,e:"ui-section",a:{label:"Nanite Volume"},f:[{t:2,r:"data.nanite_volume",p:[57,39,2293]}]}," ",{p:[58,5,2333],t:7,e:"ui-section",a:{label:"Growth Rate"},f:[{t:2,r:"data.regen_rate",p:[58,37,2365]}]}," ",{p:[59,5,2402],t:7,e:"ui-section",a:{label:"Safety Threshold"},f:[{t:2,r:"data.safety_threshold",p:[59,42,2439]}," ",{p:[59,68,2465],t:7,e:"ui-button",a:{icon:"pencil",action:"set_safety"},f:["Set"]}]}," ",{p:[60,5,2544],t:7,e:"ui-section",a:{label:"Cloud ID"},f:[{t:2,x:{r:["data.cloud_id"],s:'_0?_0:"No Cloud"'},p:[60,34,2573]}," ",{p:[60,82,2621],t:7,e:"ui-button",a:{icon:"pencil",action:"set_cloud"},f:["Set"]}]}]}," ",{p:[62,4,2715],t:7,e:"ui-display",a:{title:"Programs"},f:[{t:4,f:[{p:[64,6,2782],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[64,25,2801]}],button:0},f:[{p:[65,6,2824],t:7,e:"ui-button",a:{icon:"minus",action:"remove_program",params:['{"program_id": "',{t:2,r:"id",p:[65,78,2896]},'"}']},f:["Uninstall"]}," ",{p:[66,6,2933],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[66,38,2965]}]}," ",{t:4,f:[{p:[68,7,3027],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[68,45,3065]}]}," ",{p:[69,7,3123],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[69,44,3160]},"/s"]}," ",{t:4,f:[{p:[71,8,3221],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[71,41,3254]}]}," ",{p:[72,8,3291],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[72,45,3328]}," seconds"]}],n:50,r:"can_trigger",p:[70,7,3194]}," ",{t:4,f:[{t:4,f:[{p:[76,9,3459],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,46,3496]}]}],n:50,r:"activation_delay",p:[75,8,3426]}," ",{t:4,f:[{p:[79,9,3574],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,35,3600]}]}," ",{p:[80,9,3631],t:7,e:"ui-section",a:{label:"Timer Type"},f:[{t:2,r:"timer_type",p:[80,40,3662]}]}],n:50,r:"timer",p:[78,8,3552]}," ",{t:4,f:[{t:4,f:[{p:[84,11,3782],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,30,3801]}]},f:[{t:2,r:"value",p:[84,40,3811]}]}],n:52,r:"extra_settings",p:[83,9,3747]}],n:50,r:"has_extra_settings",p:[82,8,3712]}," ",{t:4,f:[{t:4,f:[{p:[89,10,3944],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[89,46,3980]}]}],n:50,r:"activation_code",p:[88,9,3911]}," ",{t:4,f:[{p:[92,10,4072],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[92,48,4110]}]}],n:50,r:"deactivation_code",p:[91,9,4037]}," ",{t:4,f:[{p:[95,10,4196],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[95,40,4226]}]}],n:50,r:"kill_code",p:[94,9,4169]}," ",{t:4,f:[{p:[98,10,4307],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[98,43,4340]}]}],n:50,r:"trigger_code",p:[97,9,4277]}],n:50,x:{r:["data.scan_level"],s:"_0>=4"},p:[87,8,3874]}],n:50,x:{r:["data.scan_level"],s:"_0>=3"},p:[74,7,3390]}],n:50,x:{r:["data.scan_level"],s:"_0>=2"},p:[67,6,2992]}]}],n:52,r:"data.mob_programs",p:[63,5,2749]}]}]}],x:{r:["data.has_nanites"],s:"!_0"}}]}],r:"data.status_msg"}]}]},e.exports=a.extend(r.exports)},{341:341}],411:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Cloud Console"},f:[{p:[2,1,42],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,3,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,64,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,4,197],t:7,e:"ui-section",f:[{p:[7,5,214],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[7,38,247]}]}," ",{p:[8,5,283],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[8,37,315]}]}," ",{p:[9,5,351],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[9,43,389]}]}," ",{t:4,f:[{p:[11,6,495],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[11,43,532]}]}],n:50,r:"data.disk.activation_delay",p:[10,5,455]}," ",{t:4,f:[{p:[14,6,621],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[14,32,647]}]}," ",{p:[15,6,685],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[15,38,717]}]}],n:50,r:"data.disk.timer",p:[13,5,592]}," ",{t:4,f:[{p:[18,6,810],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[18,42,846]}]}],n:50,r:"data.disk.activation_code",p:[17,5,771]}," ",{t:4,f:[{p:[21,6,946],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[21,44,984]}]}],n:50,r:"data.disk.deactivation_code",p:[20,5,905]}," ",{t:4,f:[{p:[24,6,1078],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[24,36,1108]}]}],n:50,r:"data.disk.kill_code",p:[23,5,1045]}," ",{t:4,f:[{p:[27,6,1197],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[27,39,1230]}]}],n:50,r:"data.disk.trigger_code",p:[26,5,1161]}," ",{t:4,f:[{t:4,f:[{p:[31,8,1370],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,27,1389]}]},f:[{t:2,r:"value",p:[31,37,1399]}]}],n:52,r:"data.disk.extra_settings",p:[30,6,1328]}],n:50,r:"data.disk.has_extra_settings",p:[29,5,1286]}]}],n:50,r:"data.has_program",p:[5,3,169]},{t:4,n:51,f:[{p:[36,4,1480],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,2,77]},{t:4,n:51,f:[{p:[39,3,1546],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[42,1,1605],t:7,e:"ui-display",a:{title:"Cloud Storage"},f:[{t:4,f:[{p:[44,3,1670],t:7,e:"ui-button",a:{icon:"plus-circle",action:"create_backup"},f:["Create New Backup"]}," ",{p:[45,3,1755],t:7,e:"ui-display",a:{title:"Active Backups"},f:[{t:4,f:[{p:[47,5,1827],t:7,e:"ui-button",a:{action:"set_view",params:['{"view": "',{t:2,r:"cloud_id",p:[47,52,1874]},'"}']},f:["Backup #",{t:2,r:"cloud_id",p:[47,76,1898]}]}],n:52,r:"data.cloud_backups",p:[46,4,1794]}]}],n:50,x:{r:["data.current_view"],s:"!_0"},p:[43,2,1641]},{t:4,n:51,f:[{p:[51,3,1964],t:7,e:"ui-button",a:{icon:"undo",action:"set_view",params:'{"view": "0"}'},f:["Return"]}," ",{t:4,f:[{p:[53,4,2079],t:7,e:"ui-notice",f:["ERROR: Backup not found."]}],n:50,x:{r:["data.cloud_backup"],s:"!_0"},p:[52,3,2049]},{t:4,n:51,f:[{p:[55,4,2141],t:7,e:"ui-display",a:{title:["Backup #",{t:2,r:"data.current_view",p:[55,31,2168]}]},f:[{t:4,f:[{p:[57,6,2226],t:7,e:"ui-button",a:{icon:"upload",action:"upload_program",style:"selected"},f:["Upload Program From Disk"]},{p:[57,108,2328],t:7,e:"br"}],n:50,r:"data.has_program",p:[56,5,2196]}," ",{t:4,f:[{p:[60,6,2384],t:7,e:"hr"}," ",{p:[61,6,2394],t:7,e:"ui-section",f:[{p:[62,7,2413],t:7,e:"h3",f:[{t:2,r:"name",p:[62,11,2417]}]}," ",{p:[63,7,2437],t:7,e:"div",a:{style:"float:right"},f:[{p:[64,8,2470],t:7,e:"ui-button",a:{icon:"minus-circle",action:"remove_program",style:"danger",params:['{"program_id": "',{t:2,r:"id",p:[64,102,2564]},'"}']},f:["Uninstall"]}]}]}," ",{p:[67,6,2633],t:7,e:"ui-section",f:[{p:[68,7,2652],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[68,39,2684]}]}," ",{p:[69,7,2712],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[69,45,2750]}]}," ",{p:[70,7,2808],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[70,44,2845]},"/s"]}," ",{t:4,f:[{p:[72,8,2906],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[72,41,2939]},"/s"]}," ",{p:[73,8,2978],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[73,45,3015]},"/s"]}],n:50,r:"can_trigger",p:[71,7,2879]}," ",{t:4,f:[{p:[76,8,3103],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,45,3140]}]}],n:50,r:"activation_delay",p:[75,7,3071]}," ",{t:4,f:[{p:[79,8,3215],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,34,3241]}]}," ",{p:[80,8,3271],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"timer_type",p:[80,40,3303]}]}],n:50,r:"timer",p:[78,7,3194]}," ",{t:4,f:[{p:[83,8,3382],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[83,44,3418]}]}],n:50,r:"activation_code",p:[82,7,3351]}," ",{t:4,f:[{p:[86,8,3504],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[86,46,3542]}]}],n:50,r:"deactivation_code",p:[85,7,3471]}," ",{t:4,f:[{p:[89,8,3622],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[89,38,3652]}]}],n:50,r:"kill_code",p:[88,7,3597]}," ",{t:4,f:[{p:[92,8,3727],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[92,41,3760]}]}],n:50,r:"trigger_code",p:[91,7,3699]}," ",{t:4,f:[{t:4,f:[{p:[96,10,3878],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[96,29,3897]}]},f:[{t:2,r:"value",p:[96,39,3907]}]}],n:52,r:"extra_settings",p:[95,8,3844]}],n:50,r:"has_extra_settings",p:[94,7,3810]}]}],n:52,r:"data.cloud_programs",p:[59,5,2349]}]}],x:{r:["data.cloud_backup"],s:"!_0"}}],x:{r:["data.current_view"],s:"!_0"}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],412:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Program Hub"},f:[{t:4,f:[{p:[3,2,63],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{p:[4,3,99],t:7,e:"ui-section",f:[{p:[5,4,115],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{p:[6,4,180],t:7,e:"ui-button",a:{icon:"minus-circle",action:"clear"},f:["Delete Program"]}]}," ",{t:4,f:[{p:[9,4,299],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[9,37,332]}]}," ",{p:[10,4,367],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[10,36,399]}]}],n:50,r:"data.has_program",p:[8,3,271]},{t:4,n:51,f:[{p:[12,4,445],t:7,e:"ui-notice",f:["No program installed."]}],r:"data.has_program"}]}],n:50,r:"data.has_disk",p:[2,1,40]},{t:4,n:51,f:[{p:[16,2,525],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"},{p:[18,1,569],t:7,e:"br"}," ",{p:[19,1,574],t:7,e:"ui-display",a:{title:"Programs"},f:[{p:[20,2,605],t:7,e:"ui-section",f:[{p:[21,3,620],t:7,e:"ui-button",a:{icon:"undo",action:"set_category",params:'{"category": "Main"}'},f:["Return"]}," ",{p:[22,3,716],t:7,e:"ui-button",a:{icon:"align-justify ",action:"toggle_details"},f:[{t:2,x:{r:["data.detail_view"],s:'_0?"Compact View":"Detailed View"'},p:[22,60,773]}]}]}," ",{t:4,f:[{p:[25,3,892],t:7,e:"ui-display",f:[{t:4,f:[{p:[27,5,938],t:7,e:"ui-section",f:[{p:[27,17,950],t:7,e:"ui-button",a:{action:"set_category",params:['{"category": "',{t:2,r:"name",p:[27,72,1005]},'"}']},f:[{t:2,r:"name",p:[27,84,1017]}]}]}],n:52,r:"data.categories",p:[26,4,908]}]}],n:50,x:{r:["data.category"],s:'_0=="Main"'},p:[24,2,858]},{t:4,n:51,f:[{p:[31,3,1092],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[31,22,1111]}]},f:[{t:4,f:[{t:4,f:[{p:[34,6,1196],t:7,e:"ui-display",f:[{p:[35,7,1215],t:7,e:"ui-section",f:[{p:[35,19,1227],t:7,e:"b",f:[{t:2,r:"name",p:[35,22,1230]}]}]}," ",{p:[36,7,1262],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[36,19,1274]}]}," ",{p:[37,7,1302],t:7,e:"ui-section",f:[{p:[38,8,1322],t:7,e:"ui-button",a:{icon:"download",action:"download",params:['{"program_id": "',{t:2,r:"id",p:[38,77,1391]},'"}'],state:[{t:2,x:{r:["data.has_disk"],s:'_0?null:"disabled"'},p:[38,94,1408]}]},f:["Download"]}]}]}],n:50,r:"data.detail_view",p:[33,5,1166]},{t:4,n:51,f:[{p:[44,6,1542],t:7,e:"ui-section",f:[{p:[44,18,1554],t:7,e:"ui-button",a:{action:"download",params:['{"program_id": "',{t:2,r:"id",p:[44,71,1607]},'"}']},f:[{t:2,r:"name",p:[44,81,1617]}]}]}],r:"data.detail_view"}],n:52,r:"data.program_list",p:[32,4,1134]}]}],x:{r:["data.category"],s:'_0=="Main"'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],413:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Programming"},f:[{t:4,f:[{p:[3,3,65],t:7,e:"ui-notice",f:["Insert a nanite program disk."]}],n:50,x:{r:["data.has_disk"],s:"!_0"},p:[2,1,40]},{t:4,n:51,f:[{p:[5,3,129],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{t:4,f:[{p:[7,5,223],t:7,e:"ui-notice",f:["No program detected."]}],n:50,x:{r:["data.has_program"],s:"!_0"},p:[6,3,193]},{t:4,n:51,f:[{p:[9,5,282],t:7,e:"ui-section",f:[{p:[10,7,301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.name",p:[10,26,320]}]},f:[{t:2,r:"data.desc",p:[11,9,344]}]}]}," ",{p:[14,5,400],t:7,e:"ui-section",f:[{p:[15,7,419],t:7,e:"ui-section",a:{label:"Program Info"},f:["Nanites Consumed: ",{t:2,r:"data.use_rate",p:[16,26,478]},{p:[16,43,495],t:7,e:"br"}," ",{t:4,f:["Trigger Cost: ",{t:2,r:"data.trigger_cost",p:[18,25,557]},"u",{p:[18,47,579],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[17,9,508]}]}," ",{p:[22,7,627],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[23,9,663],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.activated"],s:'_0?"toggle-on":"toggle-off"'},p:[24,17,690]}],action:"toggle_active"},f:[{t:2,x:{r:["data.activated"],s:'_0?"Active":"Inactive"'},p:[26,11,784]}]}]}," ",{p:[30,7,876],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[31,9,914],t:7,e:"ui-button",a:{icon:"pencil",action:"set_activation_delay"}}," Activation Delay: ",{t:2,r:"data.activation_delay",p:[31,95,1e3]}," ",{p:[31,121,1026],t:7,e:"br"}," ",{p:[32,9,1039],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer"}}," Timer: ",{t:2,r:"data.timer",p:[32,73,1103]}," ",{p:[32,88,1118],t:7,e:"br"}," ",{p:[33,9,1131],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer_type"}}," Timer Type: ",{t:2,r:"data.timer_type",p:[33,83,1205]}," ",{p:[33,103,1225],t:7,e:"br"}]}," ",{p:[36,7,1257],t:7,e:"ui-section",a:{label:"Codes"},f:[{p:[37,9,1292],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "activation"}'}}," Activation Code: ",{t:2,r:"data.activation_code",p:[37,121,1404]}," ",{p:[37,146,1429],t:7,e:"br"}," ",{p:[38,9,1442],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "deactivation"}'}}," Deactivation Code: ",{t:2,r:"data.deactivation_code",p:[38,125,1558]}," ",{p:[38,152,1585],t:7,e:"br"}," ",{p:[39,9,1598],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "kill"}'}}," Kill Code: ",{t:2,r:"data.kill_code",p:[39,109,1698]}," ",{p:[39,128,1717],t:7,e:"br"}," ",{t:4,f:[{p:[41,11,1765],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "trigger"}'}}," Trigger Code: ",{t:2,r:"data.trigger_code",p:[41,117,1871]}," ",{p:[41,139,1893],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[40,9,1730]}]}," ",{t:4,f:[{p:[46,9,1981],t:7,e:"ui-section",a:{label:"Special"},f:[{t:4,f:[{p:[48,13,2062],t:7,e:"ui-button",a:{icon:"pencil",action:"set_extra_setting",params:['{"target_setting": "',{t:2,r:"name",p:[48,93,2142]},'"}']}}," ",{t:2,r:"name",p:[48,118,2167]},": ",{t:2,r:"value",p:[48,128,2177]}," ",{p:[48,138,2187],t:7,e:"br"}],n:52,r:"data.extra_settings",p:[47,11,2020]}]}],n:50,r:"data.has_extra_settings",p:[45,7,1941]}]}],x:{r:["data.has_program"],s:"!_0"}}],x:{r:["data.has_disk"],s:"!_0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],414:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Control"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-notice",f:["The interface is locked."]}],n:50,r:"data.locked",p:[2,1,36]},{t:4,n:51,f:[{p:[5,3,117],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock Interface"]}," ",{p:[6,3,183],t:7,e:"ui-button",a:{icon:"save",action:"save"},f:["Save Current Setting"]}," ",{p:[7,3,255],t:7,e:"ui-section",a:{label:"Signal Code"},f:[{p:[8,5,292],t:7,e:"span",f:[{t:2,r:"data.code",p:[8,11,298]}]}," ",{p:[9,4,322],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code"},f:["Set"]}]}," ",{t:4,f:[{p:[12,5,432],t:7,e:"ui-section",a:{label:"Relay Code"},f:[{p:[13,7,470],t:7,e:"span",f:[{t:2,r:"data.relay_code",p:[13,13,476]}]}," ",{p:[14,5,507],t:7,e:"ui-button",a:{icon:"pencil",action:"set_relay_code"},f:["Set"]}]}],n:50,x:{r:["data.mode"],s:'_0=="Relay"'},p:[11,3,399]}," ",{p:[17,3,602],t:7,e:"ui-section",a:{label:"Signal Mode"},f:[{p:[18,5,639],t:7,e:"span",f:[{t:2,r:"data.mode",p:[18,11,645]}]}," ",{p:[19,5,670],t:7,e:"br"}," ",{p:[20,4,678],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Off"}'},f:["Off"]}," ",{p:[21,5,755],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Local"}'},f:["Local"]}," ",{p:[22,5,836],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Targeted"}'},f:["Targeted"]}," ",{p:[23,5,923],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Area"}'},f:["Area"]}," ",{p:[24,5,1002],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Relay"}'},f:["Relay"]}]}],r:"data.locked"}]}," ",{p:[28,1,1117],t:7,e:"ui-display",a:{title:"Saved Settings"},f:[{t:4,f:[{p:[30,3,1186],t:7,e:"ui-button",a:{icon:"load",action:"load",params:['{"save_id": "',{t:2,r:"id",p:[30,61,1244]},'"}']},f:[{t:2,r:"name",p:[30,71,1254]}]}," ",{t:4,f:[{p:[32,4,1301],t:7,e:"ui-button", -a:{icon:"remove",action:"remove_save",params:['{"save_id": "',{t:2,r:"id",p:[32,71,1368]},'"}']},f:["Remove"]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[31,3,1277]}," ",{p:[34,3,1409],t:7,e:"br"}],n:52,r:"data.saved_settings",p:[29,2,1154]}]}]},e.exports=a.extend(r.exports)},{341:341}],415:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ghost roles"},f:[{p:[2,2,34],t:7,e:"ui-section",a:{label:"Ignored roles"},f:[{t:4,f:[{p:[4,4,96],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[4,21,113]}],style:[{t:2,x:{r:["enabled"],s:'_0?"danger":null'},p:[4,73,165]}],action:"toggle_ignore",params:['{"key": "',{t:2,r:"key",p:[4,144,236]},'"}']},f:[{t:2,r:"desc",p:[4,155,247]}]}],n:52,r:"data.ignore",p:[3,3,71]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],416:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,55],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,93],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,127],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."]}," ",{p:[6,3,479],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,514],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,555],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,28]},{t:4,n:51,f:[{p:[12,3,652],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,689],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,739]}]}]}," ",{p:[18,3,819],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,865]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,889]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports)},{341:341}],417:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,306],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,346],t:7,e:"ui-notice",f:[{p:[19,5,362],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,321]},{p:[24,1,428],t:7,e:"ui-display",f:[{p:[26,1,442],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,463],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,512],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[31,2,539],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,589]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,626]}]}]}]}," ",{t:4,f:[{p:[36,2,709],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,719]}]}],n:50,r:"data.error",p:[35,1,689]},{t:4,n:51,f:[{p:[38,2,748],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,772],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,793],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,843],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,872]}]}," ",{p:[46,3,897],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,943],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,972]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1059],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1115],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1144],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1177]}],state:[{t:2,r:"healthState",p:[61,11,1204]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1221]},"%"]}]}," ",{p:[63,3,1274],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1325],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1354],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1394],t:7,e:"tr",f:[{p:[69,10,1398],t:7,e:"td",f:[{p:[69,14,1402],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1426]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1366]}]}]}," ",{p:[73,2,1475],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1509],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1539]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],418:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,87],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,166]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,61]},{p:[7,1,247],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,336]}]},f:["Job Management"]}," ",{p:[8,1,404],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,495]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,584],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,634]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,558]},{t:4,f:[{p:[14,1,753],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,774],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,799],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,857],t:7,e:"br"},{p:[16,65,861],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,898],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,918]}," - ",{t:2,r:"rank",p:[20,13,929]}]}],n:52,r:"data.manifest",p:[18,1,873]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,733]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,984],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1005],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1036],t:7,e:"table",f:[{p:[29,1,1044],t:7,e:"tr",f:[{p:[29,5,1048],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1070],t:7,e:"b",f:["Job"]}]},{p:[29,42,1085],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1107],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1124],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1146],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1166],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1188],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1238],t:7,e:"tr",f:[{p:[32,6,1242],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1246]}]},{p:[32,24,1260],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1264]},"/",{t:2,r:"total",p:[32,40,1276]}]},{p:[32,54,1290],t:7,e:"td",f:[{p:[32,58,1294],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1348]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1368]}]},f:[{t:2,r:"desc_open",p:[32,169,1405]}]},{p:[32,194,1430],t:7,e:"br"}]},{p:[32,203,1439],t:7,e:"td",f:[{p:[32,207,1443],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1498]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1518]}]},f:[{t:2,r:"desc_close",p:[32,320,1556]}]}]}]}],n:52,r:"data.slots",p:[30,1,1215]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1626],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1647],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1707],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1727],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1791],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1684]},{p:[48,1,1805],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1826],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1879],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1906],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,1976]}]}]}]}," ",{p:[56,1,2021],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2042],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2093],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2120],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2192]}]}]}]}," ",{p:[64,1,2239],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2295],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2317],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2364],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2386],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2442],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2470]}]}]}," ",{p:[81,2,2507],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2529],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2574],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2602]}]}]}," ",{p:[89,2,2638],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2660],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2707],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2735],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2788]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2849]}]}]}]}],n:50,r:"data.minor",p:[72,2,2344]},{t:4,n:51,f:[{p:[99,2,2909],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,2931],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,2987],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3015],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3082]}]}]}]}," ",{p:[108,2,3132],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3154],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3184],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3228]}]}," ",{p:[112,2,3304],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3326],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3379],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3429],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3457],t:7,e:"table",f:[{p:[121,5,3469],t:7,e:"tr",f:[{p:[122,4,3477],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3497],t:7,e:"td",f:[{p:[124,6,3507],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3584]}]},f:["Captain"]}]}]}," ",{p:[127,5,3678],t:7,e:"tr",f:[{p:[128,4,3686],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3706],t:7,e:"td",f:[{p:[130,6,3716],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3827],t:7,e:"tr",f:[{p:[134,4,3835],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,3885],t:7,e:"td",f:[{t:4,f:[{p:[137,5,3931],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,3990]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4008]}]},f:[{t:2,r:"display_name",p:[137,127,4053]}]}],n:52,r:"data.engineering_jobs",p:[136,6,3895]}]}]}," ",{p:[141,5,4120],t:7,e:"tr",f:[{p:[142,4,4128],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4174],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4216],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4275]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4293]}]},f:[{t:2,r:"display_name",p:[145,127,4338]}]}],n:52,r:"data.medical_jobs",p:[144,6,4184]}]}]}," ",{p:[149,5,4405],t:7,e:"tr",f:[{p:[150,4,4413],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4459],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4501],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4560]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4578]}]},f:[{t:2,r:"display_name",p:[153,127,4623]}]}],n:52,r:"data.science_jobs",p:[152,6,4469]}]}]}," ",{p:[157,5,4690],t:7,e:"tr",f:[{p:[158,4,4698],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4745],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4788],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,4847]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,4865]}]},f:[{t:2,r:"display_name",p:[161,127,4910]}]}],n:52,r:"data.security_jobs",p:[160,6,4755]}]}]}," ",{p:[165,5,4977],t:7,e:"tr",f:[{p:[166,4,4985],t:7,e:"th",a:{style:"color: '#cc6600';"},f:["Cargo"]}," ",{p:[167,4,5029],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5069],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5128]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5146]}]},f:[{t:2,r:"display_name",p:[169,127,5191]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5039]}]}]}," ",{p:[173,5,5258],t:7,e:"tr",f:[{p:[174,4,5266],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5313],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5356],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5415]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5433]}]},f:[{t:2,r:"display_name",p:[177,127,5478]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5323]}]}]}," ",{t:4,f:[{p:[182,4,5576],t:7,e:"tr",f:[{p:[183,6,5586],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5634],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5677],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5736]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5754]}]},f:[{t:2,r:"display_name",p:[186,129,5799]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5643]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5545]}]}]}],n:50,r:"data.assignments",p:[118,4,3401]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,5956],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,5977],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6015],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6094],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6128],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6187]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6210]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6232]}]},f:[{t:2,r:"desc",p:[204,140,6263]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6056]}]}],n:50,r:"data.centcom_access",p:[197,2,5925]},{t:4,n:51,f:[{p:[209,4,6330],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6351],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6355]}]}]}," ",{p:[212,4,6395],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6463],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6525],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6546],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6584]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6637]},'"}']},f:[{p:[215,129,6650],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6653]}]}]}]}," ",{p:[216,4,6687],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6721],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6755],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,6814]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,6837]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,6859]}]},f:[{t:2,r:"desc",p:[219,140,6890]}]}]}],n:52,r:"accesses",p:[217,6,6697]}]}],n:52,r:"data.regions",p:[213,3,6436]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2274]}],n:50,r:"data.authenticated",p:[66,1,2245]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],419:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,297],t:7,e:"ntosheader"}," ",{p:[17,1,312],t:7,e:"ui-display",f:[{p:[18,2,326],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,461],t:7,e:"hr"}," ",{p:[19,2,467],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,503],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,539]},"W"]}," ",{t:4,f:[{p:[25,4,606],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,674],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,714]}]}," ",{p:[31,4,755],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,795],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,816]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,846]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,879]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,918]},"/",{t:2,r:"adata.battery.max",p:[32,165,955]}]}]}],n:50,r:"data.battery",p:[24,3,582]},{t:4,n:51,f:[{p:[35,4,1017],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1116],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1151],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1189],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1210]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1238]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1272]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1308]},"GQ"]}]}]}," ",{p:[47,2,1373],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1443],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1465]}]},f:[{p:[50,5,1480],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1534]}]}," ",{p:[52,5,1554],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1586],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1604]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1685]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1704]}]}]}," ",{t:4,f:[{p:[59,6,1810],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1849]},"W"]}],n:50,r:"powerusage",p:[58,5,1786]}]}," ",{p:[64,4,1922],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1416]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],420:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,97],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,189]},{p:[8,41,203],t:7,e:"br"}," ",{p:[9,3,210],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,311],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,410],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,427]}]}," ",{p:[14,4,453],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,475],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,530],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,579],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,640],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,648]}],n:50,r:"data.filename",p:[12,3,385]},{t:4,n:51,f:[{p:[21,4,682],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,719],t:7,e:"table",f:[{p:[23,5,731],t:7,e:"tr",f:[{p:[24,6,741],t:7,e:"th",f:["File name"]}," ",{p:[25,6,765],t:7,e:"th",f:["File type"]}," ",{p:[26,6,789],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,818],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,878],t:7,e:"tr",f:[{p:[31,7,889],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,893]}]}," ",{p:[32,7,913],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,918]}]}," ",{p:[33,7,938],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,942]},"GQ"]}," ",{p:[34,7,964],t:7,e:"td",f:[{p:[35,8,976],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1027]},'"}']},f:["VIEW"]}," ",{p:[36,8,1063],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1081]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1160]},'"}']},f:["DELETE"]}," ",{p:[37,8,1198],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1216]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1291]},'"}']},f:["RENAME"]}," ",{p:[38,8,1329],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1347]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1421]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1492],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1510]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1588]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1458]}]}]}],n:52,r:"data.files",p:[29,5,852]}]}," ",{t:4,f:[{p:[47,4,1715],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1762],t:7,e:"table",f:[{p:[49,5,1774],t:7,e:"tr",f:[{p:[50,6,1784],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1808],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1832],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1861],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1924],t:7,e:"tr",f:[{p:[57,7,1935],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1939]}]}," ",{p:[58,7,1959],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,1964]}]}," ",{p:[59,7,1984],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,1988]},"GQ"]}," ",{p:[60,7,2010],t:7,e:"td",f:[{p:[61,8,2022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2040]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2122]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2194],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2212]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2292]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2160]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1895]}]}],n:50,r:"data.usbconnected",p:[46,4,1686]}," ",{p:[70,4,2401],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],421:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,141],t:7,e:"table",f:[{t:4,f:[{p:[8,4,178],t:7,e:"tr",f:[{p:[8,8,182],t:7,e:"td",f:[{p:[8,12,186],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,238]},'"}']},f:[{t:2,r:"desc",p:[9,5,255]}]}]},{p:[11,4,283],t:7,e:"td",f:[{p:[11,8,287],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,305]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,393]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,151]}]}," ",{p:[14,2,441],t:7,e:"br"},{p:[14,6,445],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,476],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,519]}]},f:["Toggle Flashlight"]},{p:[16,114,587],t:7,e:"br"}," ",{p:[17,3,594],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,653],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,710]},";"]},f:["   "]}]}],n:50,r:"data.has_light",p:[15,2,451]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],422:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,100],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,75]}," ",{t:4,f:[{p:[10,3,161],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,217],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,246]}]}," ",{p:[16,3,272],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,328],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,386],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,357]},{t:4,n:51,f:[{p:[23,5,417],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,455],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,504],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,533],t:7,e:"table",f:[{p:[31,5,545],t:7,e:"tr",f:[{p:[31,9,549],t:7,e:"td",f:[{p:[31,13,553],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,612],t:7,e:"tr",f:[{p:[32,9,616],t:7,e:"td",f:[{p:[32,13,620],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,687],t:7,e:"tr",f:[{p:[33,9,691],t:7,e:"td",f:[{p:[33,13,695],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,774],t:7,e:"tr",f:[{p:[34,9,778],t:7,e:"td",f:[{p:[34,13,782],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,849],t:7,e:"tr",f:[{p:[35,9,853],t:7,e:"td",f:[{p:[35,13,857],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,959],t:7,e:"tr",f:[{p:[37,10,963],t:7,e:"td",f:[{p:[37,14,967],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1037],t:7,e:"tr",f:[{p:[38,10,1041],t:7,e:"td",f:[{p:[38,14,1045],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1111],t:7,e:"tr",f:[{p:[39,10,1115],t:7,e:"td",f:[{p:[39,14,1119],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,929]}]}]}]}]}," ",{p:[43,3,1221],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1243],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1298],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1321],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1403]},{p:[48,14,1410],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1373]}]}]}]}," ",{p:[53,3,1464],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1486],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1519]},{p:[55,12,1527],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1493]}],n:50,r:"data.title",p:[9,2,140]},{t:4,n:51,f:[{p:[58,3,1556],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1575],t:7,e:"table",f:[{p:[60,4,1586],t:7,e:"tr",f:[{p:[60,8,1590],t:7,e:"td",f:[{p:[60,12,1594],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1660],t:7,e:"tr",f:[{p:[61,8,1664],t:7,e:"td",f:[{p:[61,12,1668],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1730],t:7,e:"tr",f:[{p:[62,8,1734],t:7,e:"td",f:[{p:[62,12,1738],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1826],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1855],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1898],t:7,e:"tr",f:[{p:[67,8,1902],t:7,e:"td",f:[{p:[67,12,1906],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,1958]},'"}']},f:[{t:2,r:"chan",p:[67,74,1968]}]},{p:[67,94,1988],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1865]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],423:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,112]},{p:[6,33,126],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,75]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,236]},"GQ/s",{p:[8,57,254],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,291]},{p:[10,12,299],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,261]}," ",{p:[12,3,318],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,430],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,479]}],n:50,r:"data.focus",p:[15,3,437]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,545],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,596],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,657],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,689],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,746]},'"}']},f:[{t:2,r:"id",p:[23,71,756]}]}],n:52,r:"data.relays",p:[22,3,664]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],424:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,170],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,197],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,236],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,273]}]}," ",{p:[11,4,308],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,347],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,176]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,498],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,540],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,566],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,602]}]}," ",{p:[24,5,646],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,689]}]}," ",{p:[27,5,733],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,769]},"GQ"]}," ",{p:[30,5,815],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,855]}," GQ/s"]}," ",{p:[33,5,905],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,949],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,970]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1001]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"], -s:"Math.round(_0)"},p:[34,101,1044]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1089]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,469]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1230],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1267],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1307],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1328]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1356]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1390]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1426]},"GQ"]}]}]}," ",{p:[47,4,1499],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1594],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1616]}]},f:[{p:[50,7,1637],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1691]}]}," ",{p:[52,7,1723],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1761]}," (",{t:2,r:"size",p:[53,22,1775]}," GQ)"]}," ",{p:[55,7,1814],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1856]}]}," ",{p:[58,7,1900],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,1973]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2052],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1552]}]}," ",{t:4,f:[{p:[67,5,2128],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},f:[{p:[68,6,2182],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2326],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2348]}]},f:[{p:[71,8,2370],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2424]}]}," ",{p:[73,8,2458],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2497]}," (",{t:2,r:"size",p:[74,23,2511]}," GQ)"]}," ",{p:[76,8,2552],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2595]}]}," ",{p:[79,8,2641],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2714]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2797],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2289]}]}],n:50,r:"data.hackedavailable",p:[66,4,2095]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1207]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1178]}," ",{p:[89,2,2866],t:7,e:"br"},{p:[89,6,2870],t:7,e:"br"},{p:[89,10,2874],t:7,e:"hr"},{p:[89,14,2878],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],425:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[6,2,76],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,122],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,165],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,168]}]}]}," ",{t:4,f:[{p:[12,4,239],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,279],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,282]}]}]}," ",{p:[15,4,352],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,385],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,480],t:7,e:"br"},{p:[21,8,484],t:7,e:"br"}," ",{p:[22,4,492],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,211]},{t:4,n:51,f:[{p:[24,4,627],t:7,e:"br"},{p:[24,8,631],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,722],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,768],t:7,e:"table",f:[{p:[32,3,778],t:7,e:"tr",f:[{p:[33,4,786],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,802],t:7,e:"th",f:["STATUS"]},{p:[35,4,816],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,830],t:7,e:"tr",f:[" ",{p:[37,4,838],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,864],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,868]}]},{p:[39,4,929],t:7,e:"td",f:[" ",{p:[39,9,934],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1012],t:7,e:"tr",f:[" ",{p:[41,4,1020],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1048],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1052]}]},{p:[43,4,1107],t:7,e:"td",f:[{p:[43,8,1111],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1189],t:7,e:"tr",f:[" ",{p:[45,4,1197],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1226],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1230]}]},{p:[47,4,1288],t:7,e:"td",f:[{p:[47,8,1292],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1370],t:7,e:"tr",f:[" ",{p:[49,4,1378],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1407],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1411]}]},{p:[51,4,1469],t:7,e:"td",f:[{p:[51,8,1473],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1576],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1642],t:7,e:"ui-notice",f:[{p:[59,5,1658],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1714],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1617]}," ",{p:[64,3,1839],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1890],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1893]}]}]}," ",{p:[68,3,1962],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2004],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2007]}]}]}," ",{p:[72,3,2054],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2103],t:7,e:"table",f:[{p:[75,4,2114],t:7,e:"tr",f:[{p:[75,8,2118],t:7,e:"td",f:[{p:[75,12,2122],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2176],t:7,e:"tr",f:[{p:[76,8,2180],t:7,e:"td",f:[{p:[76,12,2184],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2240],t:7,e:"tr",f:[{p:[77,8,2244],t:7,e:"td",f:[{p:[77,12,2248],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2311],t:7,e:"tr",f:[{p:[78,8,2315],t:7,e:"td",f:[{p:[78,12,2319],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2387],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2425],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2479],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2501],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2582]},{p:[86,15,2591],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2552]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],426:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,96],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,117],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,170],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,201]},{p:[9,48,215],t:7,e:"br"}," ",{p:[10,3,222],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,309],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,344],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,400],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,429]}]}," ",{p:[20,3,464],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,522],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,551]}," / ",{t:2,r:"data.download_size",p:[24,33,580]}," GQ"]}," ",{p:[26,3,617],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,672],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,701]},"GQ/s"]}," ",{p:[32,3,743],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,792],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,821],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,916],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1e3],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1029]}]}," ",{p:[46,3,1064],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1118],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1147]}]}," ",{p:[52,3,1183],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1239],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1268]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1359],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1408],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1437],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1501],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1599],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1662],t:7,e:"table",f:[{p:[72,3,1672],t:7,e:"tr",f:[{p:[72,7,1676],t:7,e:"th",f:["File name"]},{p:[72,20,1689],t:7,e:"th",f:["File size"]},{p:[72,33,1702],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1751],t:7,e:"tr",f:[{p:[74,8,1755],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1759]}]},{p:[75,4,1775],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1779]},"GQ"]},{p:[76,4,1793],t:7,e:"td",f:[{p:[76,8,1797],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1848]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1717]}]}]}]}," ",{p:[79,3,1903],t:7,e:"hr"}," ",{p:[80,3,1910],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,1973],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2034],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2062],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2114],t:7,e:"tr",f:[{p:[84,59,2118],t:7,e:"th",f:["Server UID"]},{p:[84,73,2132],t:7,e:"th",f:["File Name"]},{p:[84,86,2145],t:7,e:"th",f:["File Size"]},{p:[84,99,2158],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2181],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2226],t:7,e:"tr",f:[{p:[86,9,2230],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2234]}]},{p:[87,5,2246],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2250]}]},{p:[88,5,2267],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2271]},"GQ ",{t:4,f:[{p:[90,6,2311],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2286]}," ",{t:4,f:[{p:[93,6,2365],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2339]}]},{p:[96,5,2399],t:7,e:"td",f:[{p:[96,9,2403],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2456]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2199]}]}]}]}," ",{p:[99,3,2514],t:7,e:"hr"}," ",{p:[100,3,2521],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],427:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1040],t:7,e:"ntosheader"}," ",{p:[45,1,1055],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1111],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[47,27,1133]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1283]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1338]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1086]},{t:4,n:51,f:[{p:[52,5,1386],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1423],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1429]}]}]}," ",{p:[55,5,1474],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1508],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1514]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1579],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1608],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1632],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1668],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1706],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1780],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1821],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1861],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,1943],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,1962]}],nowrap:0},f:[{p:[72,7,1986],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2007]}," %"]}," ",{p:[73,7,2064],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2085]}]}," ",{p:[74,7,2126],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2147],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2160]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2189]}]}]}," ",{p:[75,7,2235],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2256],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2269]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2292]}," [",{p:[75,87,2315],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2321]}]},"]"]}]}," ",{p:[76,7,2369],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2390],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2403]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2426]}," [",{p:[76,87,2449],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2455]}]},"]"]}]}," ",{p:[77,7,2503],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2524],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2537]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2560]}," [",{p:[77,87,2583],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2589]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1918]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],428:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,96],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,150],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,179]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,255],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,303],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,332],t:7,e:"table",f:[{p:[21,4,343],t:7,e:"tr",f:[{p:[21,8,347],t:7,e:"td",f:[{p:[21,12,351],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,423],t:7,e:"tr",f:[{p:[22,8,427],t:7,e:"td",f:[{p:[22,12,431],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,466]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,500]}]}," ",{p:[23,4,549],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,584]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],429:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,91],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,110]}," Alarms"]},f:[{p:[6,5,133],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,164],t:7,e:"li",f:[{t:2,r:".",p:[8,13,168]}]}],n:52,r:".",p:[7,7,144]},{t:4,n:51,f:[{p:[10,9,202],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,61]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],430:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,399],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,436],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,490],t:7,e:"br"}," ",{p:[28,3,497],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,540],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,580],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,613]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,644]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,680]},"%"]}]}," ",{p:[32,3,730],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,768],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,781]}]},f:[{t:2,r:"data.SM_power",p:[33,55,818]}," MeV/cm3"]}]}," ",{p:[35,3,869],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,906],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,919]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,964]}," K"]}]}," ",{p:[38,3,1015],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1049],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1062]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1112]}," kPa"]}]}]}," ",{p:[42,3,1186],t:7,e:"hr"},{p:[42,7,1190],t:7,e:"br"}," ",{p:[43,3,1197],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1263],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1282]}]},f:[{t:2,r:"amount",p:[46,6,1298]}," %"]}],n:52,r:"data.gases",p:[44,4,1238]}]}],n:50,r:"data.active",p:[26,1,415]},{t:4,n:51,f:[{p:[51,2,1368],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1419],t:7,e:"br"}," ",{p:[52,2,1425],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1499],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1529]}," - (#",{t:2,r:"uid",p:[55,23,1547]},")"]}," ",{p:[57,3,1574],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1609]}," %"]}," ",{p:[60,3,1643],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1676],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1725]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1469]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],431:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,40],t:7,e:"table",f:[{p:[2,9,47],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,110],t:7,e:"td",f:[{p:[4,7,114],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,124]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,53]}," ",{t:4,f:[{p:[7,3,220],t:7,e:"td",f:[{p:[7,7,224],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,227]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,160]}," ",{t:4,f:[{p:[10,3,296],t:7,e:"td",f:[{p:[10,7,300],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,310]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,268]}," ",{t:4,f:[{p:[13,3,374],t:7,e:"td",f:[{p:[13,7,378],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,388]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,344]}," ",{t:4,f:[{p:[16,3,454],t:7,e:"td",f:[{p:[16,7,458],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,461]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,424]}," ",{t:4,f:[{p:[19,3,534],t:7,e:"td",f:[{p:[19,7,538],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,548]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,499]}]}]}]}," ",{p:[23,1,587],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,632],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,720],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,775],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,686]}]}," ",{p:[30,1,852],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{341:341}],432:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,67],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,35]},{t:4,n:51,f:[{p:[5,7,168],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,259],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,289],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,295]},"-",{t:2,r:"data.status2",p:[9,26,312]}]}]}," ",{p:[11,1,350],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,379],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,423],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,429]}]}]}," ",{t:4,f:[{p:[16,5,525],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,565],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,598]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,768],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,799]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,971],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1003]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1134],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1164]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,504]}," ",{p:[26,3,1369],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1400],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1433]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1514]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1602]}]}]}]}," ",{p:[34,1,1680],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1713],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1735]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1810]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1860]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1918]}]}]}," ",{p:[41,1,1982],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2012],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2034]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2109]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2173]}]},f:[{p:[46,7,2220],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2226]}]}]}]}," ",{p:[49,1,2293],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2321],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2349]}]}," ",{p:[51,3,2381],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2413],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2447]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2531],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2565]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2649],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2683]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2767],t:7,e:"br"}," ",{p:[56,5,2776],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2810]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2894],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2928]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3012],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3046]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3130],t:7,e:"br"}," ",{p:[60,5,3139],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3173]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3257],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3291]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3375],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3409]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3493],t:7,e:"br"}," ",{p:[64,5,3502],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3536]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3620],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3654]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3738],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3772]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,24],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,111],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,162],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,273],t:7,e:"ui-display",f:[{p:[7,6,291],t:7,e:"ui-section",f:[{p:[7,18,303],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,306]}]}]}," ",{p:[8,6,337],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,349]}]}]}],n:52,r:"data.surgeries",p:[5,3,245]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,425],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,542],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,517]}," ",{p:[19,2,605],t:7,e:"ui-display",f:[{p:[20,3,620],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,683],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,715],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,728]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,756]}]}]}," ",{p:[25,5,807],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,844],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,866]}]}]}," ",{p:[28,5,923],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,956],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,969]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1002]}],value:[{t:2,r:"data.patient.health",p:[29,87,1037]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1074]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1125]}]}]}," ",{t:4,f:[{p:[33,6,1357],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1376]}]},f:[{p:[34,7,1394],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1415]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1450]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1486]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1193]}],n:50,r:"data.patient",p:[21,4,658]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1630],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1734],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1756]}]},f:[{p:[45,7,1773],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1811],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1833]}]}," ",{t:4,f:[{p:[48,9,1890],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1912],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1938],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1943]}]}],n:50,r:"chems_needed",p:[47,8,1861]}]}," ",{t:4,f:[{p:[52,8,2040],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2086],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2108]}]}," ",{t:4,f:[{p:[55,10,2178],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2200],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2226],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2231]}]}],n:50,r:"alt_chems_needed",p:[54,9,2144]}]}],n:50,r:"alternative_step",p:[51,7,2008]}]}],n:52,r:"data.procedures",p:[43,5,1703]}],n:50,r:"data.procedures",p:[42,4,1675]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117], -t:7,e:"ui-section",f:["Current unclaimed credits: ",{t:2,r:"data.unclaimedPoints",p:[6,30,160]}," ",{p:[7,4,189],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim"]}]}]}," ",{p:[12,1,276],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,3,315],t:7,e:"ui-section",f:[{p:[15,4,332],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[20,4,460],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[21,5,496],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[21,42,533]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[21,129,620]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[24,10,676]},": ",{t:2,r:"name",p:[24,21,687]}]}],n:52,r:"data.diskDesigns",p:[19,3,429]}],n:50,r:"data.hasDisk",p:[13,2,291]},{t:4,n:51,f:[{p:[28,3,741],t:7,e:"ui-section",f:[{p:[29,4,758],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[36,2,911],t:7,e:"ui-display",f:[{p:[37,3,927],t:7,e:"ui-section",f:[{p:[38,4,944],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[38,20,960]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[35,1,883]},{t:4,f:[{p:[43,2,1100],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[44,3,1133],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[45,5,1168],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[48,5,1226],t:7,e:"section",a:{"class":"cell"},f:["Sheets"]}," ",{p:[51,5,1283],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[53,5,1327],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[55,5,1371],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[60,4,1473],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[61,5,1508],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[62,6,1537]}]}," ",{p:[64,5,1567],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[65,6,1610]}]}," ",{p:[67,5,1642],t:7,e:"section",a:{"class":"cell"},f:[{p:[68,6,1671],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[68,19,1684]}],placeholder:"###","class":"number"}}]}," ",{p:[70,5,1751],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[71,6,1794],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[71,60,1848]}],params:['{ "id" : ',{t:2,r:"id",p:[71,115,1903]},', "sheets" : ',{t:2,r:"sheets",p:[71,134,1922]}," }"]},f:["Release"]}]}," ",{p:[75,5,1993],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[76,6,2036]}]}]}],n:52,r:"data.materials",p:[59,3,1444]}," ",{t:4,f:[{p:[81,4,2119],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[82,5,2154],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[83,6,2183]}]}," ",{p:[85,5,2213],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[86,6,2256]}]}," ",{p:[88,5,2288],t:7,e:"section",a:{"class":"cell"},f:[{p:[89,6,2317],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[89,19,2330]}],placeholder:"###","class":"number"}}]}," ",{p:[91,5,2397],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[92,6,2440],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[92,58,2492]}],params:['{ "id" : ',{t:2,r:"id",p:[92,114,2548]},', "sheets" : ',{t:2,r:"sheets",p:[92,133,2567]}," }"]},f:["Smelt"]}]}," ",{p:[96,5,2635],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[80,3,2093]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[42,1,1060]}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,84],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,116]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,225],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,256]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,349],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,380]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,514],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,562],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,531]},{t:4,n:51,f:[{p:[19,6,626],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,692],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,722]}]}," ",{p:[22,8,761],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,792]}]}],n:50,r:"data.has_blood",p:[20,7,662]},{t:4,n:51,f:[{p:[24,8,847],t:7,e:"ui-section",f:[{p:[25,9,868],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[14,3,487]},{t:4,n:51,f:[{p:[32,4,1023],t:7,e:"ui-section",f:[{p:[33,5,1040],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1151],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1301],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1357]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1409]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1279]}," ",{p:[47,7,1492],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1554]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1609]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1230]}],button:0},f:[" ",{p:[51,6,1699],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1733]}]}," ",{p:[52,6,1761],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1793]}]}," ",{p:[53,6,1827],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1854]}]}," ",{p:[54,6,1883],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1917]}]}," ",{t:4,f:[{p:[56,7,1966],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2030],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2102]},', "index": ',{t:2,r:"index",p:[58,105,2126]},"}"]},f:[{t:2,r:"name",p:[59,10,2148]}," "]},{p:[60,21,2177],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2003]}]}," ",{p:[63,7,2227],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2258]}]}," ",{p:[64,7,2292],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2320]}]}," ",{p:[65,7,2351],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2383]}]}," ",{p:[66,7,2418],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2455]}]}],n:50,r:"is_adv",p:[55,6,1945]}]}],n:52,r:"data.viruses",p:[39,4,1184]},{t:4,n:51,f:[{p:[70,5,2532],t:7,e:"ui-section",f:[{p:[71,6,2550],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2669],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2735],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2754]}]},f:[{p:[78,7,2771],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2807]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2893]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2704]},{t:4,n:51,f:[{p:[83,5,2985],t:7,e:"ui-section",f:[{p:[84,6,3003],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[37,2,1126]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3142],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3237],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3256]}]},f:[{p:[95,4,3270],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3287]}," ",{t:4,f:[{p:[98,5,3320],t:7,e:"br"}," ",{p:[99,5,3330],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3299]}]}," ",{p:[102,4,3463],t:7,e:"ui-section",f:[{p:[103,5,3480],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3506]}]}," ",{p:[104,5,3533],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3564]}]}," ",{p:[105,5,3596],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3624]}]}," ",{p:[106,5,3653],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3685]}]}," ",{p:[107,5,3718],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3755]}]}]}," ",{p:[109,4,3805],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3851],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3863]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3211]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],436:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(484);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1295],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1314]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1358]}],n:50,r:"data.subcategory",p:[48,37,1331]}]},f:[{t:4,f:[{p:[50,3,1410],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1438],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1390]},{t:4,n:51,f:[{p:[54,3,1504],t:7,e:"ui-section",f:[{p:[55,4,1520],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1551],t:7,e:"tr",f:[{p:[57,6,1561],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1602],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1660]}]}]}," ",{p:[62,6,1713],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1754],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1811]}]}]}," ",{p:[67,6,1864],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,1946],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1904]},{t:4,n:51,f:[{p:[73,7,2066],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2191],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2232],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2249]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2391],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2430],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2471],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2532]}]}]}," ",{p:[91,6,2588],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2629],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2690]}]}]}],n:50,r:"data.subcategory",p:[85,5,2400]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2892],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,2909]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2803]}],n:50,r:"config.fancy",p:[99,4,2778]}]}," ",{t:4,f:[{p:[106,5,3039],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3086],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3105]}]},f:[{p:[109,7,3122],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3142]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3250]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3056]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3452],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3471]}]},f:[{p:[117,8,3489],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3509]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3420]}],n:51,r:"data.display_craftable_only",p:[114,5,3382]}]}],n:50,r:"data.display_compact",p:[105,4,3006]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3822],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3841]}]},f:[{t:4,f:[{p:[128,8,3882],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,3924]}]}],n:50,r:"req_text",p:[127,7,3858]}," ",{t:4,f:[{p:[133,8,4007],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4046]}]}],n:50,r:"catalyst_text",p:[132,7,3978]}," ",{t:4,f:[{p:[138,8,4130],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4165]}]}],n:50,r:"tool_text",p:[137,7,4105]}," ",{p:[142,7,4220],t:7,e:"ui-section",f:[{p:[143,8,4240],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4298]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3792]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4471],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4490]}]},f:[{t:4,f:[{p:[153,9,4533],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4576]}]}],n:50,r:"req_text",p:[152,8,4508]}," ",{t:4,f:[{p:[158,9,4663],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4703]}]}],n:50,r:"catalyst_text",p:[157,8,4633]}," ",{t:4,f:[{p:[163,9,4791],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4827]}]}],n:50,r:"tool_text",p:[162,8,4765]}]}],n:52,r:"data.cant_craft",p:[150,6,4439]}],n:51,r:"data.display_craftable_only",p:[149,5,4401]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{341:341,484:484}],437:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:[4,1,110],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,181],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,187]}," kPa"]}]}," ",{p:[8,3,247],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,277],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,290]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,331]}]}]}]}," ",{p:[12,1,419],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,447],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,478],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,495]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,545]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,601]}]}]}," ",{p:[18,3,658],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,693],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,710]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,789]}]}]}," ",{p:[22,3,862],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,903],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,916]}],max:[{t:2,r:"data.max_pressure",p:[23,46,944]}],value:[{t:2,r:"data.target_pressure",p:[24,14,980]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1006]}," kPa"]}]}," ",{p:[26,3,1075],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1119],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1152]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1300],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1331]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1470],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1564],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1594]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1853],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1884]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1826]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2e3],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2030]}]}," ",{p:[46,3,2070],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2103]}," kPa"]}],n:50,r:"data.holding",p:[42,3,1977]},{t:4,n:51,f:[{p:[50,3,2174],t:7,e:"ui-section",f:[{p:[51,4,2190],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{341:341}],438:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,457:457}],439:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,167],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,224],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,257],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,274]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,325]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,398]}]}]}],n:50,r:"data.headset",p:[12,3,199]},{t:4,n:51,f:[{p:[19,5,476],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,514],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,531]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,585]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,664]}]}]}," ",{p:[24,5,746],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,781],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,798]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,849]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,922]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1034],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1073],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1090]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1142]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1217]}]}]}],n:50,r:"data.command",p:[30,3,1009]}]}," ",{p:[38,1,1305],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1336],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1399],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1405]}]}],n:50,r:"data.freqlock",p:[40,5,1371]},{t:4,n:51,f:[{p:[43,7,1453],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1492]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1603],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1637]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1749],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1820]}]}," ",{p:[46,7,1860],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1893]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2004],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2042]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2212],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2261],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2278]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2328]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2395]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2176]}," ",{t:4,f:[{p:[57,5,2522],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2598],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2615]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2671]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2746]},'"}']},f:[{t:2,r:"channel",p:[62,11,2772]}]},{p:[62,34,2795],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2558]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2479]}]}]},e.exports=a.extend(r.exports)},{341:341}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,550],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,583],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,621],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,562]},{t:4,f:[{p:[18,2,712],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,727]}]},f:[{p:[19,3,745],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,772],t:7,e:"techweb"}]}," ",{p:[22,3,794],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,820],t:7,e:"nodeview"}]}," ",{p:[25,3,843],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,871],t:7,e:"designview"}]}," ",{p:[28,3,896],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,937],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,965],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1010],t:7,e:"diskopstech"}]}," ",{p:[34,3,1036],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1076],t:7,e:"destruct"}]}," ",{p:[37,3,1099],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1126],t:7,e:"protolathe"}]}," ",{p:[40,3,1151],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1185],t:7,e:"circuit"}]}," ",{p:[43,3,1207],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1232],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,690]}]},r.exports.components=r.exports.components||{};var i={settings:t(450),circuit:t(442),protolathe:t(448),destruct:t(444),diskopsdesign:t(445),diskopstech:t(446),designview:t(443),nodeview:t(447),techweb:t(451),rdheader:t(449)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,56],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,29]},{t:4,n:51,f:[{p:[5,3,126],t:7,e:"ui-display",f:[{p:[6,4,142],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,254],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,333]},"}"]},f:["Search"]}]}," ",{p:[10,4,389],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,412]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,435]}]}," ",{p:[11,4,475],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,497]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,521]}]}," ",{p:[12,3,561],t:7,e:"ui-display",f:[{p:[14,3,577],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,592]}]},f:[{p:[15,4,617],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,680],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,717]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,809]},'"}']},f:[{t:2,r:"name",p:[17,147,821]}]}],n:52,r:"data.circuitcats",p:[16,5,648]}]}," ",{p:[20,4,869],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,935],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,947]},{t:2,r:"matstring",p:[22,26,955]}," ",{p:[23,7,975],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1008]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1087]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,904]}]}," ",{p:[27,4,1161],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1226],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1238]},{t:2,r:"matstring",p:[29,26,1246]}," ",{p:[30,7,1266],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1299]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1378]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1193]}]}," ",{p:[34,4,1452],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1515],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1527]}," : ",{t:2,r:"amount",p:[36,29,1538]}," cm3 - ",{t:4,f:[{p:[38,7,1586],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1599]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1625]}],"class":"number"}}," ",{p:[39,7,1660],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1737]},', "sheets" : ',{t:2, -r:"number",p:[39,107,1760]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1561]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1479]}]}," ",{p:[44,4,1852],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1916],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1928]}," : ",{t:2,r:"amount",p:[46,29,1939]}," - ",{p:[47,7,1959],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2032]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2049]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1879]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2162],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,30],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,49]}]},f:[{p:[3,3,75],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,107]}]}]}," ",{p:[5,2,158],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,233],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,193]}," ",{t:4,f:[{p:[10,4,337],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,297]}," ",{t:4,f:[{p:[13,4,434],t:7,e:"ui-section",a:{title:"Autolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,394]}," ",{t:4,f:[{p:[16,4,530],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,490]}," ",{t:4,f:[{p:[19,4,637],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&16"},p:[18,3,596]}," ",{t:4,f:[{p:[22,4,743],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,702]}," ",{t:4,f:[{p:[25,4,843],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,802]}," ",{t:4,f:[{p:[28,4,943],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128"},p:[27,3,901]}]}," ",{p:[31,2,1015],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1084],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1103]}]},f:[{t:2,r:"matamt",p:[33,36,1116]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1048]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1211],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1180]}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,57],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"}}],n:50,r:"data.destroybusy",p:[3,2,30]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,162],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,130]},{t:4,n:51,f:[{p:[9,4,240],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,276],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,301]}]}]}," ",{p:[12,4,356],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,425],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,444]}," | ",{t:2,r:"value",p:[14,36,455]}]},f:[{p:[15,7,473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,491]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,556]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,393]}]}," ",{p:[19,4,652],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,1]},{t:4,n:51,f:[{p:[23,2,733],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,116],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,88]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,213],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,250],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,296]}," blueprints."]}," ",{p:[11,5,345],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,373],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,453],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,484],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,579],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,610],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,703],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,776],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,804]},": ",{t:4,f:[{p:[19,8,848],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,910]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,820]},{t:4,n:51,f:[{p:[21,8,976],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1026]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1043]}]},f:[{t:2,r:"name",p:[21,122,1090]}]}," ",{p:[22,8,1118],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1184]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1201]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,742]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,183]},{t:4,n:51,f:[{p:[28,4,1340],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1382],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1484],t:7,e:"ui-section",f:[{p:[30,17,1496],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1551]},'"}']},f:[{t:2,r:"name",p:[30,82,1561]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1442]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,120],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,92]},{t:4,n:51,f:[{p:[8,3,191],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,231],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,259],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,327],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,397],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,428],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,520],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,551],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,640],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,709],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,757]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,774]}]},f:[{t:2,r:"display_name",p:[15,115,819]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,678]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,28],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,47]}]},f:[{p:[3,3,71],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,116]}]}," ",{p:[4,3,151],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,194]}]}," ",{p:[5,3,229],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,276]}]}," ",{p:[6,3,313],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,362]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,379]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,425]}]}]}," ",{p:[8,2,511],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,579],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,627]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,644]}]},f:[{t:2,r:"display_name",p:[10,114,689]}]}],n:52,r:"data.node_prereqs",p:[9,3,548]}]}," ",{p:[13,2,747],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,809],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,857]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,874]}]},f:[{t:2,r:"display_name",p:[15,114,919]}]}],n:52,r:"data.node_unlocks",p:[14,3,778]}]}," ",{p:[18,2,977],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1039],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1089]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1106]}]},f:[{t:2,r:"name",p:[20,118,1153]}]}],n:52,r:"data.node_designs",p:[19,3,1008]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1239],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1210]}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,32]},{t:4,n:51,f:[{p:[5,3,120],t:7,e:"ui-display",f:[{p:[6,4,136],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,177],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,190]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,248],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,325]},"}"]},f:["Search"]}]}," ",{p:[10,4,381],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,404]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,425]}]}," ",{p:[11,4,463],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,485]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,507]}]}," ",{p:[12,3,545],t:7,e:"ui-display",f:[{p:[14,3,561],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,576]}]},f:[{p:[15,4,601],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,662],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,699]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,781]},'"}']},f:[{t:2,r:"name",p:[17,137,793]}]}],n:52,r:"data.protocats",p:[16,5,632]}]}," ",{p:[20,4,841],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,905],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,917]},{t:2,r:"matstring",p:[22,26,925]}," ",{t:4,f:[{p:[24,8,973],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,986]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1012]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,945]}," ",{p:[26,7,1083],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1116]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1193]},'", "amount" : "',{t:2,r:"number",p:[26,138,1214]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,876]}]}," ",{p:[30,4,1292],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1355],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1367]},{t:2,r:"matstring",p:[32,26,1375]}," ",{t:4,f:[{p:[34,8,1423],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1436]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1462]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1395]}," ",{p:[36,7,1533],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1566]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1643]},'", "amount" : "',{t:2,r:"number",p:[36,138,1664]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1324]}]}," ",{p:[40,4,1742],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1803],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1815]}," : ",{t:2,r:"amount",p:[42,29,1826]}," cm3 - ",{t:4,f:[{p:[44,7,1874],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1887]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1913]}],"class":"number"}}," ",{p:[45,7,1948],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2023]},', "sheets" : ',{t:2,r:"number",p:[45,105,2046]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1849]}]}],n:52,r:"data.protomat_list",p:[41,5,1769]}]}," ",{p:[50,4,2138],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2200],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2212]}," : ",{t:2,r:"amount",p:[52,29,2223]}," - ",{p:[53,7,2243],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2314]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2331]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2165]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2444],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,13],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,65],t:7,e:"br"}," Available Points: ",{p:[3,19,89],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,125]}]}," ",{p:[4,1,170],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,206]}]},f:[{p:[4,47,216],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,229]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,290],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,333]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,44],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,99],t:7,e:"br"}," ",{p:[3,1,105],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,147],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,217]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,305],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,373]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,454],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,526]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,76],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,124]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,141]}]},f:[{t:2,r:"display_name",p:[3,113,186]}]}],n:52,r:"data.techweb_avail",p:[2,2,45]}]}," ",{p:[6,1,240],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,307],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,355]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,372]}]},f:[{t:2,r:"display_name",p:[8,113,417]}]}],n:52,r:"data.techweb_locked",p:[7,2,275]}]}," ",{p:[11,1,472],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,547],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,595]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,612]}]},f:[{t:2,r:"display_name",p:[13,113,657]}]}],n:52,r:"data.techweb_researched",p:[12,2,511]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,24],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,201],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,232]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,355],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,389],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,402]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,443]}]}," ",{p:[12,2,489],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,522]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,640],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,739],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,786]}]},{p:[17,71,801],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,702]},{t:4,n:51,f:[{p:[19,9,830],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,674]},{t:4,n:51,f:[{p:[22,7,890],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1020],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1051]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1173],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1241],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1247]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1289]}," Units"]}," ",{p:[33,7,1333],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1384],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1427]}," units of ",{t:2,r:"name",p:[35,87,1462]}]},{p:[35,102,1477],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1345]},{t:4,n:51,f:[{p:[37,9,1506],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1207]},{t:4,n:51,f:[{p:[40,7,1582],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,248]},"-",{t:2,r:"icon_state",p:[6,88,256]}],title:[{t:2,r:"dir_name",p:[6,111,279]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}," ",{t:4,f:[{p:[12,2,395],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,455],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,473]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,569]},"}"]},f:[{t:2,r:"@key",p:[15,55,580]}]}],n:52,r:"data.paint_colors",p:[13,3,424]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,367]},{p:[19,1,636],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,668],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,685]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,792],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,809]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,917],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,934]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1072],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1089]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1043]}]}," ",{p:[31,1,1219],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1250],t:7,e:"ui-section",f:[{p:[33,3,1265],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1282]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1345]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1462],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1479]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1542]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1673]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1736]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1897],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1934],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1952]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2072],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2090]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2210],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2228]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1868]}]}," ",{t:4,f:[{p:[52,2,2411],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2430]}]},f:[{t:4,f:[{p:[54,4,2468],t:7,e:"ui-section",f:[{p:[55,5,2485],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2503]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2583]},', "category": ',{t:2,r:"cat_name",p:[56,56,2611]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2626]}]}]}],n:52,r:"recipes",p:[53,3,2447]}]}],n:52,r:"data.categories",p:[51,1,2384]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,76]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,152]},"}"]},f:[{t:2,r:"color_name",p:[4,45,169]}]}],n:52,r:"data.paint_colors",p:[2,2,28]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,239]},".",{t:2,r:"icon_state",p:[6,79,247]},".png"],title:[{t:2,r:"dir_name",p:[6,106,274]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,161],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,201],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,223]}]}," ",{p:[10,9,244],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,265]}]}," ",{p:[11,9,288],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,320],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,363]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,373]}]}]}]}],n:52,r:"data.satellites",p:[7,2,132]}]}," ",{t:4,f:[{p:[18,1,511],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,558],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,579]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,623]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,656]}," %"]}," ",{p:[20,1,739],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,484]}]},e.exports=a.extend(r.exports)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,42]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,94]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,174]},'", "val": ',{t:2,r:"gas_id",p:[3,68,194]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,207]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],458:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,196],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,211]}]},f:[{p:[6,2,228],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,250],t:7,e:"status"}]}," ",{p:[9,2,269],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,294],t:7,e:"templates"}]}," ",{p:[12,2,316],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,368],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,344]}," ",{t:4,f:[{p:[17,3,421],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,396]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(459),templates:t(461),status:t(460)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,459:459,460:460,461:461}],459:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,94],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,126]}]}],n:50,r:"data.selected.description",p:[2,3,56]}," ",{t:4,f:[{p:[6,5,219],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,251]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,181]}]}," ",{t:4,f:[{p:[11,3,351],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,388]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,433]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,513]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,470]}," ",{p:[16,5,565],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,633]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,319]},{t:4,f:[{p:[24,3,755],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,722]},{p:[27,1,821],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,875]},'"}']},f:["Preview"]}," ",{p:[31,1,931],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,982]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1053],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,47],t:7,e:"tr",f:[{p:[4,5,56],t:7,e:"td",f:[{p:[5,7,67],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,129]},'"}']},f:["JMP"]}]}," ",{p:[9,5,185],t:7,e:"td",f:[{p:[10,7,196],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,236]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,253]}]},f:["Fly"]}]}," ",{p:[14,5,332],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,343]}," (",{p:[15,17,353],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,359]}]},")"]}," ",{p:[17,5,388],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,399]}]}," ",{p:[20,5,424],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,456]}],n:50,r:"mode",p:[21,7,435]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,508]},") ",{p:[26,9,530],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,578]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,595]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,485]}]}]}],n:52,r:"data.shuttles",p:[2,1,21]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,72],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,83]}]},f:[{t:4,f:[{p:[5,9,131],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,150]}]},f:[{t:4,f:[{p:[7,13,203],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,235]}]}],n:50,r:"description",p:[6,11,171]}," ",{t:4,f:[{p:[10,13,324],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,356]}]}],n:50,r:"admin_notes",p:[9,11,292]}," ",{p:[13,11,414],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,486]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,523]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,614]}]}]}],n:52,r:"templates",p:[4,7,103]}]}],n:52,r:"data.templates",p:[2,3,43]}]}]},e.exports=a.extend(r.exports)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{ -label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{t:4,f:[{p:[35,3,2083],t:7,e:"ui-section",a:{label:"Failing Organs"},f:[{t:4,f:[{p:[37,5,2167],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"name",p:[37,24,2186]}]}],n:52,r:"data.occupant.failing_organs",p:[36,4,2123]}]}],n:50,r:"data.occupant.failing_organs",p:[34,2,2043]}," ",{p:[41,5,2249],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[43,11,2336],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[43,54,2379]}," units of ",{t:2,r:"name",p:[43,89,2414]}]},{p:[43,104,2429],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[42,9,2291]},{t:4,n:51,f:[{p:[45,11,2464],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[50,1,2560],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[51,2,2592],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[52,5,2623],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[52,22,2640]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[52,71,2689]}]}]}," ",{p:[55,3,2756],t:7,e:"ui-section",a:{label:"Synthesize"},f:[{t:4,f:[{p:[57,7,2826],t:7,e:"ui-button",a:{grid:0,state:[{t:2,x:{r:["synth_allowed"],s:'_0?null:"disabled"'},p:[57,30,2849]}],action:"synth",params:['{"chem": "',{t:2,r:"id",p:[57,102,2921]},'"}']},f:[{t:2,r:"name",p:[57,112,2931]}]}],n:52,r:"data.synthchems",p:[56,5,2793]}]}," ",{p:[61,3,2989],t:7,e:"ui-section",a:{label:"Inject"},f:[{p:[62,2,3019],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[63,3,3052],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[64,4,3086],t:7,e:"section",a:{"class":"compressedcell"},f:["Name"]}," ",{p:[68,4,3150],t:7,e:"section",a:{"class":"compressedcell"},f:["Volume"]}," ",{t:4,f:[{p:[73,5,3250],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[74,6,3289],t:7,e:"span",f:["Purity"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[72,4,3216]}," ",{t:4,f:[{p:[79,5,3377],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[78,4,3343]}," ",{t:4,f:[{p:[84,5,3478],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=2"},p:[83,4,3444]}," ",{p:[88,4,3545],t:7,e:"section",a:{"class":"compressedcell"},f:[]}," ",{p:[91,4,3599],t:7,e:"section",a:{"class":"compressedcell"},f:[]}]}," ",{t:4,f:[{p:[96,4,3691],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[97,5,3726],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[98,6,3765],t:7,e:"span",f:[{p:[98,12,3771],t:7,e:"b",f:[{t:2,r:"name",p:[98,15,3774]}]}]}]}," ",{p:[101,5,3817],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[102,6,3871],t:7,e:"span",f:[{t:2,r:"vol",p:[102,12,3877]},"u"]}]}," ",{t:4,f:[{p:[106,6,3953],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[107,7,4008],t:7,e:"span",f:[{t:2,r:"purity",p:[107,13,4014]}]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[105,7,3918]}," ",{t:4,f:[{p:[112,6,4106],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[113,7,4146],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[113,25,4164]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[113,109,4248]},'", "volume": 1}']},f:["1"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[111,5,4071]}," ",{t:4,f:[{p:[118,6,4358],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[119,7,4398],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[119,25,4416]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[119,109,4500]},'", "volume": 5}']},f:["5"]}]}],n:50,x:{r:["adata.efficiency"],s:"_0>=2"},p:[117,5,4322]}," ",{p:[123,5,4574],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[124,6,4613],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[124,24,4631]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[124,108,4715]},'", "volume": 10}']},f:["10"]}]}," ",{p:[127,5,4777],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[128,6,4816],t:7,e:"ui-button",a:{action:"purge",params:['{"chem": "',{t:2,r:"id",p:[128,50,4860]},'"}']},f:["Purge"]},{p:[128,77,4887],t:7,e:"br"}]}]}],n:52,r:"data.chems",p:[95,3,3666]}]}]}," ",{p:[135,3,4968],t:7,e:"ui-section",a:{label:"Capacity"},f:[{p:[136,5,5003],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.tot_capacity",p:[136,24,5022]}],value:[{t:2,r:"data.current_vol",p:[136,54,5052]}],state:[{t:2,r:"data.current_vol",p:[137,12,5086]}]},f:[{t:2,r:"data.current_vol",p:[137,34,5108]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,43]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,65]}],candystripe:0,right:0},f:[{p:[3,5,103],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,130],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,143]}]},f:[{t:2,r:"status",p:[3,132,230]}]}]}," ",{p:[4,5,265],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,291]}]}," ",{p:[5,5,324],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,353]}]}," ",{p:[7,5,380],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,404]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,464]},'"}']},f:[{t:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,482]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,554]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,79],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,96]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,144]}]}],n:50,r:"data.isdryer",p:[4,3,59]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,252],t:7,e:"ui-notice",f:[{p:[8,5,268],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,294]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,216]},{t:4,n:51,f:[{p:[11,1,349],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,380],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,413],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,467],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,525],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,589]}],n:50,r:"data.verb",p:[20,5,572]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,680],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,713],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,740]}]}," ",{p:[28,4,766],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,807]}]}," ",{p:[31,4,835],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,878],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,915],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,943],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,982]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1039]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1114],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1142],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1181]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1237]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,654]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,640],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,671],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,710],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,743]}],state:[{t:2,r:"capacityPercentState",p:[26,71,776]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,802]},"%"]}]}]}," ",{p:[29,1,880],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,909],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,946],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,963]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1015]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1082]}]},"   [",{p:[34,6,1149],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1162]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1178]}]},"]"]}," ",{p:[36,3,1300],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1338],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1359]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1390]}]},f:[{t:2,r:"adata.inputLevel_text",p:[37,78,1411]}]}]}," ",{p:[39,3,1463],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1501],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1540]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1634],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1668]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1763],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1852],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1885]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,1996],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2034]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2159],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2192],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2198]}]}]}]}," ",{p:[50,1,2259],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2289],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2326],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2343]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2398]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2467]}]},"   [",{p:[55,6,2533],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2546]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2563]}]},"]"]}," ",{p:[57,3,2668],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2707],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2728]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2760]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2782]}]}]}," ",{p:[60,3,2835],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2874],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2913]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3009],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3043]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3140],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3230],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3263]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3377],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3415]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3543],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3577],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3583]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,32],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,71],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,101],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,118]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,170]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,218]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,280]}]}]}," ",{p:[10,3,345],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,391],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,437],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,467]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,520]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,622],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,652]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,705]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,807],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,837]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,890]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,992],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1022]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1075]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1178],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1208]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1261]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1392],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1456],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1462]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1502]}," Units"]}," ",{p:[22,6,1543],t:7,e:"br"}," ",{p:[23,5,1553],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1599],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1642]}," units of ",{t:2,r:"name",p:[25,85,1677]}]},{p:[25,100,1692],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1564]}],n:50,r:"data.isTankLoaded",p:[20,4,1425]},{t:4,n:51,f:[{p:[28,6,1730],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1780],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1797]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1851]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1905]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1967]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1507],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1602],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1690],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1776],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1869],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2051],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2130],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2169],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2182]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2227]},"Found"]}]}," ",{p:[43,2,2296],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2345]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2389]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],468:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,84],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,115]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,60]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,220],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,251],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,268]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,318]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,358]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,422]}]}]}," ",{p:[12,3,479],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,541],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,574]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,595]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,509]},{t:4,n:51,f:[{p:[16,4,652],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,725],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,759],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,802],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,808]},"°C"]}]}," ",{p:[24,2,871],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,913],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,919]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1004],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1045],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1084]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1189],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1223]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1327],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1419],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1452]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1555],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1593]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,982]}," ",{p:[36,3,1719],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1771],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1810]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1918],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1959]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2067],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2101]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1747]},{t:4,n:51,f:[{p:[42,4,2217],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2223]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,30],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,49]}," Alarms"]},f:[{p:[3,5,72],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,103],t:7,e:"li",f:[{t:2,r:".",p:[5,13,107]}]}],n:52,r:".",p:[4,7,83]},{t:4,n:51,f:[{p:[7,9,141],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],471:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,41],t:7,e:"ui-notice",f:[{p:[3,5,57],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,173],t:7,e:"ui-notice",f:[{p:[8,5,189],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,148]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,357],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,374]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,425]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,339]}," ",{t:4,f:[{p:[14,27,506],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,523]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,577]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,486]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,676],t:7,e:"ui-notice",f:[{p:[18,9,696],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,650]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,773],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,811],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,828]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,875]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,970]}]}]}," ",{p:[25,9,1039],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1075],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1092]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1138]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1229]}]}]}," ",{p:[29,9,1296],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1349]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1395]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1486]}]}]}," ",{p:[33,9,1553],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1592],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1609]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1658]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1755]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1836],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1869]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{341:341}],472:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,17],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,55],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,72]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,120]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,193]},")"]}," ",{p:[5,9,243],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,260]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,308]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,381]},")"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],473:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,282],t:7,e:"ui-notice",f:[{p:[15,3,296],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,316]}," connected to a mask."]}]}," ",{p:[17,1,393],t:7,e:"ui-display",f:[{p:[18,3,408],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,449],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,483]}],state:[{t:2,r:"tankPressureState",p:[20,16,521]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,544]}," kPa"]}]}," ",{p:[22,3,610],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,652],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,665]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,699]}],value:[{t:2,r:"data.releasePressure",p:[24,14,741]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,767]}," kPa"]}]}," ",{p:[26,3,836],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,880],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,913]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1067],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1098]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1243],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1337],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1367]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],474:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,32],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,73],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,79]}," K"]}]}," ",{p:[5,5,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,185],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,191]}," kPa"]}]}]}," ",{p:[9,1,268],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,302],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,337],t:7,e:"ui-button",a:{icon:[{ -t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,354]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,398]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,458]}]}]}," ",{p:[14,5,518],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,566],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,605]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,717],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,751]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,862],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,932]}]}," ",{p:[20,9,984],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1017]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1127],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1165]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,161],t:7,e:"ui-notice",f:[{p:[14,2,174],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,207],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,236],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,340],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,381],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,434],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,411]},{t:4,n:51,f:[{p:[25,4,480],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,493]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,522]}]}],r:"data.broken"}," ",{p:[27,3,630],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,659],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,712]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,736]}]},f:["On"]}," ",{p:[29,4,789],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,839]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,863]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,958],t:7,e:"br"}," [ ",{p:[33,6,968],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,925]}," ",{t:4,f:[{p:[36,4,1062],t:7,e:"br"}," [ ",{p:[37,6,1072],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1032]}]}]}," ",{p:[41,1,1160],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1189],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1226],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1232]}," RPM"]}]}," ",{p:[45,2,1293],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1330],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1336]}," K"]}]}," ",{p:[48,2,1396],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1435],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1441]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,460],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,432]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,543],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,587],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,600]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,644]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,734],t:7,e:"ui-display",f:[{p:[32,2,748],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,797]},'"}']},f:[{t:2,r:"name",p:[32,63,809]}]}," ",{t:4,f:[{p:[34,4,850],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,869]}],candystripe:0,right:0},f:[{p:[35,3,900],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,920]},": ",{t:2,r:"desc",p:[35,33,930]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,971]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1129]},'", "item": ',{t:2,r:"name",p:[37,63,1152]},', "cost": ',{t:2,r:"cost",p:[37,81,1170]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[38,43,1223]}," TC"]}]}],n:52,r:"items",p:[33,2,831]}]}],n:52,r:"data.categories",p:[30,1,706]}]},e.exports=a.extend(r.exports)},{341:341}],477:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{t:4,f:[{p:[26,5,586],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[27,6,620]}]}," ",{p:[29,5,670],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[30,6,704],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[30,27,725]}],value:[{t:2,r:"adata.vr_avatar.health",p:[30,65,763]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[30,100,798]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[30,141,839]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[30,180,878]}]}]}],n:50,r:"data.isliving",p:[25,4,559]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[35,3,979],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[39,2,1075],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[40,3,1111],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[40,20,1128]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[41,4,1195]}," the VR Sleeper"]}," ",{t:4,f:[{p:[44,4,1297],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[43,3,1269]}," ",{t:4,f:[{p:[49,4,1420],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[48,3,1393]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,40],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,59]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,68]}],labelcolor:[{t:2,r:"color",p:[3,80,115]}],candystripe:0,right:0},f:[{p:[4,7,151],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,192]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,205]}]}," ",{p:[5,7,248],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,291]},'"}']},f:["Pulse"]}," ",{p:[6,7,328],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,372]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,385]}]}]}],n:52,r:"data.wires",p:[2,3,15]}]}," ",{t:4,f:[{p:[11,3,498],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,543],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,555]}]}],n:52,r:"data.status",p:[12,5,515]}]}],n:50,r:"data.status",p:[10,1,476]}]},e.exports=a.extend(r.exports)},{341:341}],479:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(480),i=e.interopRequireDefault(r),o=t(481),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(485)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(482),text:t(486),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,327:327,328:328,329:329,330:330,331:331,341:341,480:480,481:481,482:482,485:485,486:486,"babel/external-helpers":"babel/external-helpers"}],480:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),firealarm:t(397),gps:t(398),gulag_console:t(399),gulag_item_reclaimer:t(400),holodeck:t(401),implantchair:t(402),intellicard:t(403),keycard_auth:t(404),labor_claim_console:t(405),language_menu:t(406),launchpad_remote:t(407),mech_bay_power_console:t(408),mulebot:t(409),nanite_chamber_control:t(410),nanite_cloud_control:t(411),nanite_program_hub:t(412),nanite_programmer:t(413),nanite_remote:t(414),notificationpanel:t(415),ntnet_relay:t(416),ntos_ai_restorer:t(417),ntos_card:t(418),ntos_configuration:t(419),ntos_file_manager:t(420),ntos_main:t(421),ntos_net_chat:t(422),ntos_net_dos:t(423),ntos_net_downloader:t(424),ntos_net_monitor:t(425),ntos_net_transfer:t(426),ntos_power_monitor:t(427),ntos_revelation:t(428),ntos_station_alert:t(429),ntos_supermatter_monitor:t(430),ntosheader:t(431),nuclear_bomb:t(432),operating_computer:t(433),ore_redemption_machine:t(434),pandemic:t(435),personal_crafting:t(436),portable_pump:t(437),portable_scrubber:t(438),power_monitor:t(439),radio:t(440),rdconsole:t(441),"rdconsole/circuit":t(442),"rdconsole/designview":t(443),"rdconsole/destruct":t(444),"rdconsole/diskopsdesign":t(445),"rdconsole/diskopstech":t(446),"rdconsole/nodeview":t(447),"rdconsole/protolathe":t(448),"rdconsole/rdheader":t(449),"rdconsole/settings":t(450),"rdconsole/techweb":t(451),reagentgrinder:t(452),rpd:t(453),"rpd/colorsel":t(454),"rpd/dirsel":t(455),sat_control:t(456),scrubbing_types:t(457),shuttle_manipulator:t(458),"shuttle_manipulator/modification":t(459),"shuttle_manipulator/status":t(460),"shuttle_manipulator/templates":t(461),sleeper:t(462),slime_swap_body:t(463),smartvend:t(464),smes:t(465),smoke_machine:t(466),solar_control:t(467),space_heater:t(468),spawners_menu:t(469),station_alert:t(470),suit_storage_unit:t(471),tank_dispenser:t(472),tanks:t(473),thermomachine:t(474),turbine_computer:t(475),uplink:t(476),vr_sleeper:t(477),wires:t(478)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1819],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1829]}]}," ",{p:[57,1,1859],t:7,e:"main",f:[{p:[58,3,1868],t:7,e:"warnings"}," ",{p:[59,3,1882],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1929],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1903]}]},r.exports.components=r.exports.components||{};var i={warnings:t(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,478:478,481:481,483:483}],481:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],482:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],483:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(481)},{481:481}],484:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],485:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],486:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(p){r("throw",p)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(p){return void n(p)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=0?"good":"average"'},p:[14,16,619]}]},f:[{t:2,r:"data.occupant.health",p:[14,68,671]}]}]}," ",{t:4,f:[{p:[17,7,892],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[17,26,911]}]},f:[{p:[18,9,931],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[18,30,952]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,66,988]}],state:"bad"},f:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,103,1025]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[16,5,727]}],n:50,r:"data.hasOccupant",p:[5,3,155]}]}," ",{p:[23,1,1116],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[24,3,1144],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[25,5,1175],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[25,22,1192]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[26,14,1251]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[27,14,1306]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[28,22,1364]}]}]}," ",{p:[30,3,1430],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,3,1465],t:7,e:"span",a:{"class":[{t:2,r:"data.temperaturestatus",p:[31,16,1478]}]},f:[{t:2,r:"data.cellTemperature",p:[31,44,1506]}," K"]}]}," ",{p:[33,2,1556],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[34,5,1586],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[34,22,1603]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[34,73,1654]}]}," ",{p:[35,5,1706],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[35,22,1723]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[35,86,1787]}]}]}]}," ",{p:{button:[{p:[40,5,1928],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[40,36,1959]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[42,3,2060],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[45,9,2167],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,r:"volume",p:[45,52,2210]}," units of ",{t:2,r:"name",p:[45,72,2230]}]},{p:[45,87,2245],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[44,7,2128]},{t:4,n:51,f:[{p:[47,9,2274],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[43,5,2094]},{t:4,n:51,f:[{p:[50,7,2347],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],388:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,14],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,73],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,43]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,147],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,119]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,239],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,203]},{t:4,n:51,f:[{p:[12,6,299],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,377],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,409],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,442]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,469]},"%"]}]}," ",{p:[20,5,511],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,547],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,568]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,625]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,691]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,739]}]}]}," ",{p:[27,2,811],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,840],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,874]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,951],t:7,e:"br"}]}," ",{p:[30,2,973],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1002],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1037]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1086]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1144]}]}},{p:[31,206,1205],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],389:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,42],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,79],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,100]}],value:[{t:2,r:"data.dna",p:[3,53,125]}]},f:[{t:2,r:"data.dna",p:[3,67,139]},"/",{t:2,r:"data.dna_max",p:[3,80,152]}," Samples"]}]}," ",{p:[5,3,204],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,240],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,261]}],value:[{t:2,r:"data.plants",p:[6,54,289]}]},f:[{t:2,r:"data.plants",p:[6,71,306]},"/",{t:2,r:"data.plants_max",p:[6,87,322]}," Samples"]}]}," ",{p:[8,3,377],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,414],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,435]}],value:[{t:2,r:"data.animals",p:[9,55,464]}]},f:[{t:2,r:"data.animals",p:[9,73,482]},"/",{t:2,r:"data.animals_max",p:[9,90,499]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,604],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,650],t:7,e:"ui-section",f:[{p:[15,2,664],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,731],t:7,e:"ui-section",f:[{p:[18,2,745],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,790]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,810]}]}," ",{p:[19,2,840],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,885]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,905]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,567]}]},e.exports=a.extend(r.exports)},{341:341}],390:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,178],t:7,e:"ui-section",a:{label:"Items in storage"},f:[{p:[7,4,219],t:7,e:"span",f:[{t:2,r:"data.items",p:[7,10,225]}]}]}],n:50,r:"data.items",p:[5,3,155]}," ",{t:4,f:[{p:[11,5,300],t:7,e:"ui-section",a:{label:"State"},f:[{p:[12,7,333],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[12,20,346]}]},f:[{t:2,r:"data.occupant.stat",p:[12,49,375]}]}]}," ",{p:[14,5,426],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[15,7,460],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[15,20,473]}],max:[{t:2,r:"data.occupant.maxHealth",p:[15,54,507]}],value:[{t:2,r:"data.occupant.health",p:[15,90,543]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[16,16,584]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[16,68,636]}]}]}," ",{t:4,f:[{p:[19,7,870],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[19,26,889]}]},f:[{p:[20,9,909],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[20,30,930]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[20,66,966]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[20,103,1003]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[18,5,705]}," ",{p:[23,5,1087],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[24,9,1122],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[24,22,1135]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[24,68,1181]}]}]}," ",{p:[26,5,1262],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[27,9,1297],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[27,22,1310]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[27,68,1356]}]}]}," ",{p:[29,5,1438],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[31,11,1523],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[31,54,1566]}," units of ",{t:2,r:"name",p:[31,89,1601]}]},{p:[31,104,1616],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[30,9,1479]},{t:4,n:51,f:[{p:[33,11,1649],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[10,3,274]}]}," ",{p:[38,1,1740],t:7,e:"ui-display",a:{title:"Operations"},f:[{p:[39,3,1774],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[41,7,1832],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied"],s:'_0?null:"disabled"'},p:[41,38,1863]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[41,111,1936]},'"}']},f:[{t:2,r:"name",p:[41,121,1946]}]},{p:[41,141,1966],t:7,e:"br"}],n:52,r:"data.chem",p:[40,5,1806]}]}," ",{p:[44,2,2003],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[45,6,2035],t:7,e:"ui-button",a:{icon:"sign-out",action:"eject"},f:["Eject Contents"]}]}," ",{p:[47,2,2120],t:7,e:"ui-section",a:{label:"Self Cleaning"},f:[{p:[48,3,2157],t:7,e:"ui-button",a:{icon:"recycle",action:"cleaning"},f:["Self-Clean Cycle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],391:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,41]}]},f:[{p:[3,5,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,114],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,169]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,200]}]},f:[{t:2,r:"answer",p:[7,53,235]}," (",{t:2,r:"amount",p:[7,65,247]},")"]}],n:52,r:"data.answers",p:[4,7,83]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,341],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{341:341}],392:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,16],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,41]}]}]}," ",{p:[4,1,80],t:7,e:"ui-notice",f:[{p:[5,3,94],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,109]}]}]}," ",{p:[7,1,174],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,209],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,242]}]}," ",{p:[10,2,309],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,393]}]},f:["AUTHORIZE"]}," ",{p:[15,2,459],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,508]}]},f:["Repeal"]}," ",{p:[19,2,571],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,619]}]},f:["Repeal All"]}]}," ",{p:[24,1,699],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,768],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,799]}," (",{t:2,r:"job",p:[26,44,809]},")"]}],n:52,r:"data.authorizations",p:[25,2,736]},{t:4,n:51,f:[{p:[28,3,843],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{341:341}],393:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,48]}]}," ",{p:[5,3,90],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,126]}]}," ",{p:[8,3,162],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,196],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,242]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,333]}]}," ",{p:[13,5,368],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,412]}],action:"neutral"}}," ",{p:[17,5,546],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,594]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,691]}]}]}]}," ",{t:4,f:[{p:[24,3,782],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,819],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,852]}]}," ",{p:[26,5,890],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,933]}]}," ",{p:[27,5,972],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,756]}]},e.exports=a.extend(r.exports)},{341:341}],394:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,45]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{341:341}],395:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,19],t:7,e:"ui-notice",f:["Currently syncing with the database"]}],n:50,r:"data.sync",p:[1,1,0]},{t:4,n:51,f:[{p:{button:[{p:[8,4,156],t:7,e:"ui-button",a:{icon:"eject",action:"eject_all"},f:["Eject all"]}," ",{p:[9,4,224],t:7,e:"ui-button",a:{icon:["toggle-",{t:2,x:{r:["data.show_materials"],s:'_0?"off":"on"'},p:[9,28,248]}],action:"toggle_materials_visibility"},f:[{t:2,x:{r:["data.show_materials"],s:'_0?"Hide":"Show"'},p:[10,5,330]}]}]},t:7,e:"ui-display",a:{title:"Materials",button:0},f:[" ",{t:4,f:[{p:[14,4,436],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[15,5,470],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[16,6,505],t:7,e:"section",a:{"class":"cell"}}," ",{p:[17,6,543],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[20,6,601],t:7,e:"section",a:{"class":"cell"},f:["Amount"]}," ",{p:[23,6,658],t:7,e:"section",a:{"class":"cell"}}," ",{p:[24,6,696],t:7,e:"section",a:{"class":"cell"}}]}," ",{t:4,f:[{p:[27,6,782],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[28,7,818],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[29,8,848]}]}," ",{p:[31,7,880],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"amount",p:[32,8,910]}]}," ",{p:[34,7,944],t:7,e:"section",a:{"class":"cell"},f:[{p:[35,8,974],t:7,e:"ui-button",a:{icon:"eject"},f:["Release amount"]}]}," ",{p:[37,7,1048],t:7,e:"section",a:{"class":"cell",style:"width: 40px;"},f:[{p:[38,8,1099],t:7,e:"ui-button",a:{icon:"eject"},f:["Release all"]}]}]}],n:52,r:"data.all_materials",p:[26,5,748]}]}],n:50,r:"data.show_materials",p:[13,3,405]}]}," ",{p:[45,2,1230],t:7,e:"ui-display",a:{title:"Categories"},f:[{t:4,f:[{p:[47,4,1288],t:7,e:"ui-button",f:[{t:2,r:".",p:[47,15,1299]}]}],r:"data.categories",p:[46,3,1264]}]}],r:"data.sync"}]},e.exports=a.extend(r.exports)},{341:341}],396:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,5,47],t:7,e:"ui-button",a:{action:"toggle_power",style:[{t:2,x:{r:["data.toggle"],s:'_0?"selected":null'},p:[5,18,107]}]},f:["Turn ",{t:2,x:{r:["data.toggle"],s:'_0?"off":"on"'},p:[6,16,161]}]}]}," ",{p:[9,3,227],t:7,e:"ui-display",a:{title:"Logging"},f:[{t:4,f:[{p:[11,3,282],t:7,e:"ui-section",a:{label:">"},f:[{t:2,r:".",p:[11,25,304]},{p:[11,30,309],t:7,e:"ui-section",f:[]}]}],n:52,r:"data.logs",p:[10,5,260]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],397:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,30],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,58],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,93]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,148]}]}]}," ",{p:[5,1,214],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,240],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,281]}]}]}," ",{p:[8,1,320],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,356],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,372]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,417]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,575]}]}]}," ",{p:[11,1,639],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,677],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,710]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,840]}]}]}]}," ",{t:4,f:[{p:[16,2,942],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,982],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,988]}]}]}," ",{p:[20,2,1029],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1093],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1111]}]},f:[{p:[23,3,1127],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1133]}," (",{t:2,r:"coord",p:[23,19,1143]},")"]}," ",{t:4,f:[{p:[25,4,1185],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1197]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1212]},"° (",{t:2,r:"direction",p:[25,45,1226]},")"]}],n:50,r:"direction",p:[24,3,1164]}]}],n:52,r:"data.signals",p:[21,2,1068]}]}],n:50,r:"data.power",p:[15,1,922]}]},e.exports=a.extend(r.exports)},{341:341}],398:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,44],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,85],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,98]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,136]}]}]}," ",{t:4,f:[{p:[6,4,239],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,273],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,279]}]}]}," ",{p:[9,4,335],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,374],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,391]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,462]}]}," ",{p:[11,5,527],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,559]}]}]}],n:50,r:"data.teleporter",p:[5,3,212]},{t:4,n:51,f:[{p:[14,4,653],t:7,e:"span",f:[{p:[14,10,659],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,754],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,794],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,831],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,844]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,878]}]}]}," ",{t:4,f:[{p:[22,3,971],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1004],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1010]}]}]}],n:50,r:"data.beacon",p:[21,2,949]},{t:4,n:51,f:[{p:[26,4,1072],t:7,e:"span",f:[{p:[26,10,1078],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1165],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1204],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1239],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1269]}]}]}," ",{t:4,f:[{p:[34,2,1359],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1395],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1424]}]}]}],n:50,r:"data.id",p:[33,2,1342]}," ",{p:[38,2,1475],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1507],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1513]}]}]}," ",{t:4,f:[{p:[42,3,1620],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1660],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1666]}]}]}],n:50,r:"data.prisoner",p:[41,2,1596]}]}," ",{p:[47,1,1739],t:7,e:"ui-display",f:[{p:[48,2,1753],t:7,e:"center",f:[{p:[48,10,1761],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1796]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],399:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,22,78]}]},f:[{p:[4,4,93],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2,r:"mob",p:[4,56,145]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[4,72,161]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[2,2,36]}]}]},e.exports=a.extend(r.exports)},{341:341}],400:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,68],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,85]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,128]}],action:"safety"},f:["Safeties: ",{p:[4,14,206],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,219]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,254]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,356],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,406]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,424]}]},f:[{t:2,r:"name",p:[9,5,475]}," "]},{p:[10,14,497],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,323]}]}," ",{t:4,f:[{p:[14,2,549],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,623],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,688]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,706]}]},f:[{t:2,r:"name",p:[17,5,757]}," "]},{p:[18,16,781],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,591]}]}],n:50,r:"data.emagged",p:[13,1,527]}]},e.exports=a.extend(r.exports)},{341:341}],401:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,266],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,298],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,330],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,336]}]}]}," ",{t:4,f:[{p:[20,5,447],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,480],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,493]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,516]}]}]}],n:50,r:"data.occupied",p:[19,3,421]}]}," ",{p:[25,1,656],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,687],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,717],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,734]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,783]}]}]}," ",{p:[29,3,846],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,876]}," ",{t:4,f:[{p:[32,7,938],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,906]}]}," ",{p:[35,3,1002],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1038],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1056]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1162]}," "]},{p:[38,19,1265],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],402:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,282],t:7,e:"ui-notice",f:[{p:[16,5,298],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,260]},{p:{button:[{t:4,f:[{p:[22,7,458],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,489]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,540]}," AI"]}],n:50,r:"data.name",p:[21,5,434]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,370]}],button:0},f:[" ",{t:4,f:[{p:[26,5,647],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,683],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,696]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,750]}]}]}," ",{p:[29,5,843],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,889],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,922]}],state:[{t:2,r:"healthState",p:[30,64,946]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,963]},"%"]}]}," ",{p:[32,5,1024],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1084],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1108]}]},{p:[34,45,1120],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1056]}]}," ",{p:[37,5,1164],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1200],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1232]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1325],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1361]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,625]}]}]},e.exports=a.extend(r.exports)},{341:341}],403:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,22],t:7,e:"ui-notice",f:[{p:[3,3,36],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,127],t:7,e:"ui-display",f:[{p:[7,3,142],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,189],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,243]}]}],n:50,r:"data.auth_required",p:[8,4,158]},{t:4,n:51,f:[{p:[11,5,294],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,327]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,412],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,444]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,560],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{341:341}],404:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[10,3,229],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[10,9,235]}]}," ",{p:[11,3,271],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[11,42,310]}]},f:["Claim points"]}]}]}," ",{p:[14,1,413],t:7,e:"ui-display",f:[{p:[15,2,428],t:7,e:"span",f:["Points: ",{t:2,r:"data.id_points",p:[15,16,442]}]}," ",{p:[16,2,470],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[17,3,501],t:7,e:"span",f:[{t:2,r:"data.status_info",p:[17,9,507]}]}," ",{p:[18,3,538],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[18,42,577]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],405:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,68],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,86]}]},f:[{p:[4,7,102],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,108]}]}," ",{p:[5,7,130],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,142]}]}," ",{t:4,f:[{p:[7,9,186],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow",p:[6,7,163]}," ",{p:[9,7,237],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,243]}]}," ",{t:4,f:[{p:[11,9,332],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,413]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,442]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,512]}]}],n:50,r:"data.is_living",p:[10,7,301]}," ",{t:4,f:[{t:4,f:[{p:[20,11,666],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,727]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,641]},{t:4,n:51,f:[{p:[22,11,784],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,846]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,609]}]}],n:52,r:"data.languages",p:[2,3,39]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1004],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1061]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"' +},p:[33,19,1120]}]}],n:50,r:"data.is_living",p:[29,3,977]}," ",{p:[36,3,1196],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1278],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1296]}]},f:[{p:[39,9,1314],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1320]}]}," ",{p:[40,9,1344],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1356]}]}," ",{p:[41,9,1379],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1460]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1239]}]}],n:50,r:"data.admin_mode",p:[28,1,951]}]},e.exports=a.extend(r.exports)},{341:341}],406:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,81],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,114],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,54]},{t:4,n:51,f:[{p:[8,4,176],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,210],t:7,e:"span",f:[{p:[9,10,216],t:7,e:"b",f:[{t:2,r:"data.pad_name",p:[9,13,219]}]}]},{p:[9,41,247],t:7,e:"br"}," ",{p:[10,4,255],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,318],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,414],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,449],t:7,e:"table",f:[{p:[16,4,460],t:7,e:"tr",f:[{p:[17,5,469],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,502],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,553],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,605],t:7,e:"ui-button",a:{action:"up"},f:["↑"]}]}," ",{p:[19,5,651],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,702],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,762],t:7,e:"tr",f:[{p:[22,5,771],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,804],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["←"]}]}," ",{p:[23,5,881],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,933],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,982],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1033],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1090],t:7,e:"tr",f:[{p:[27,5,1099],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1132],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1185],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1237],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1285],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1336],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1427],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1467],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1473]}," ",{t:2,r:"data.north_south",p:[34,26,1488]}]},{p:[34,53,1515],t:7,e:"br"}," ",{p:[35,5,1524],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1530]}," ",{t:2,r:"data.east_west",p:[35,26,1545]}]}]}," ",{p:[37,4,1591],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1625],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1751],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,31]},{t:4,n:51,f:[{p:[45,3,1912],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1944],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{341:341}],407:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,526],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,624],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,660],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,681]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,728]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,771]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,825]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,873]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1034],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1060],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,984]},{t:4,n:51,f:[{p:[30,11,1141],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1180],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1201]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1253]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1301]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1360]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1413]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,945]},{t:4,n:51,f:[{p:[35,3,1524],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1550],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,589]},{t:4,n:51,f:[{p:[38,4,1625],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,561]},{t:4,n:51,f:[{p:[41,5,1689],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1741],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{341:341}],408:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,43],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,85],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,102]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,153]}]}]}],n:50,r:"data.siliconUser",p:[2,3,14]},{t:4,n:51,f:[{p:[7,5,241],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,267]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,349],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,379],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,458],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,475]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,519]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,567]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,410]},{t:4,n:51,f:[{p:[15,7,625],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,638]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,675]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,710]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,774],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,804],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,817]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,847]}]}]}," ",{p:[21,3,923],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,953],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,966]}]},f:[{t:2,r:"data.mode",p:[22,39,987]}]}]}," ",{p:[24,3,1026],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1056],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1069]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1105]}]}]}," ",{p:[27,3,1165],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1202],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1215]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1257]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1479],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1453]}," ",{t:4,f:[{p:[38,9,1586],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1558]}," ",{p:[40,7,1670],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1750],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1789],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1869],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1929],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2001],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2033],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2096],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2181],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2217],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2234]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2294]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2396],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2413]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2473]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2577],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2594]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2658]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1343]}]},e.exports=a.extend(r.exports)},{341:341}],409:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Chamber Console"},f:[{p:[2,1,44],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,2,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,63,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,3,195],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[6,36,228]}]}," ",{p:[7,3,262],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[7,35,294]}]}," ",{p:[8,3,328],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[8,41,366]}]}," ",{t:4,f:[{p:[10,4,468],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[10,41,505]}]}],n:50,r:"data.disk.activation_delay",p:[9,3,430]}," ",{t:4,f:[{p:[13,4,588],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[13,30,614]}]}," ",{p:[14,4,650],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[14,36,682]}]}],n:50,r:"data.disk.timer",p:[12,3,561]}," ",{t:4,f:[{p:[17,4,769],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[17,40,805]}]}],n:50,r:"data.disk.activation_code",p:[16,3,732]}," ",{t:4,f:[{p:[20,4,899],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[20,42,937]}]}],n:50,r:"data.disk.deactivation_code",p:[19,3,860]}," ",{t:4,f:[{p:[23,4,1025],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[23,34,1055]}]}],n:50,r:"data.disk.kill_code",p:[22,3,994]}," ",{t:4,f:[{p:[26,4,1138],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[26,37,1171]}]}],n:50,r:"data.disk.trigger_code",p:[25,3,1104]}," ",{t:4,f:[{t:4,f:[{p:[30,6,1303],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[30,25,1322]}]},f:[{t:2,r:"value",p:[30,35,1332]}]}],n:52,r:"data.disk.extra_settings",p:[29,4,1263]}],n:50,r:"data.disk.has_extra_settings",p:[28,3,1223]}],n:50,r:"data.has_program",p:[5,2,168]},{t:4,n:51,f:[{p:[34,3,1390],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,1,78]},{t:4,n:51,f:[{p:[37,2,1453],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[40,1,1511],t:7,e:"br"}," ",{t:4,f:[{p:[42,2,1541],t:7,e:"ui-notice",f:[{t:2,r:"data.status_msg",p:[42,13,1552]}]}],n:50,r:"data.status_msg",p:[41,1,1516]},{t:4,n:51,f:[{p:[44,2,1594],t:7,e:"ui-display",a:{title:"Chamber"},f:[{p:[45,2,1624],t:7,e:"ui-section",f:[{p:[45,14,1636],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock-open":"lock"'},p:[45,30,1652]}],action:"toggle_lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[45,90,1712]}," Chamber"]},{p:[45,146,1768],t:7,e:"br"}]}," ",{p:[46,2,1787],t:7,e:"ui-section",f:[{p:[46,14,1799],t:7,e:"b",f:["Occupant:"]}," ",{t:2,r:"data.occupant_name",p:[46,31,1816]}]}," ",{t:4,f:[{p:[48,4,1882],t:7,e:"ui-section",f:[{p:[48,16,1894],t:7,e:"ui-notice",f:["No nanites detected."]}]}," ",{p:[49,4,1954],t:7,e:"ui-section",f:[{p:[49,16,1966],t:7,e:"ui-button",a:{icon:"syringe",action:"nanite_injection"},f:["Implant Nanites"]}]}],n:50,x:{r:["data.has_nanites"],s:"!_0"},p:[47,2,1853]},{t:4,n:51,f:[{p:[51,3,2071],t:7,e:"ui-display",a:{title:"Nanites"},f:[{t:4,f:[{p:[53,5,2129],t:7,e:"ui-button",a:{icon:"download",action:"add_program"},f:["Install Program From Disk"]},{p:[53,90,2214],t:7,e:"br"}," ",{p:[54,5,2223],t:7,e:"br"}],n:50,r:"data.has_disk",p:[52,4,2103]}," ",{p:[56,4,2242],t:7,e:"ui-section",f:[{p:[57,5,2259],t:7,e:"ui-section",a:{label:"Nanite Volume"},f:[{t:2,r:"data.nanite_volume",p:[57,39,2293]}]}," ",{p:[58,5,2333],t:7,e:"ui-section",a:{label:"Growth Rate"},f:[{t:2,r:"data.regen_rate",p:[58,37,2365]}]}," ",{p:[59,5,2402],t:7,e:"ui-section",a:{label:"Safety Threshold"},f:[{t:2,r:"data.safety_threshold",p:[59,42,2439]}," ",{p:[59,68,2465],t:7,e:"ui-button",a:{icon:"pencil",action:"set_safety"},f:["Set"]}]}," ",{p:[60,5,2544],t:7,e:"ui-section",a:{label:"Cloud ID"},f:[{t:2,x:{r:["data.cloud_id"],s:'_0?_0:"No Cloud"'},p:[60,34,2573]}," ",{p:[60,82,2621],t:7,e:"ui-button",a:{icon:"pencil",action:"set_cloud"},f:["Set"]}]}]}," ",{p:[62,4,2715],t:7,e:"ui-display",a:{title:"Programs"},f:[{t:4,f:[{p:[64,6,2782],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[64,25,2801]}],button:0},f:[{p:[65,6,2824],t:7,e:"ui-button",a:{icon:"minus",action:"remove_program",params:['{"program_id": "',{t:2,r:"id",p:[65,78,2896]},'"}']},f:["Uninstall"]}," ",{p:[66,6,2933],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[66,38,2965]}]}," ",{t:4,f:[{p:[68,7,3027],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[68,45,3065]}]}," ",{p:[69,7,3123],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[69,44,3160]},"/s"]}," ",{t:4,f:[{p:[71,8,3221],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[71,41,3254]}]}," ",{p:[72,8,3291],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[72,45,3328]}," seconds"]}],n:50,r:"can_trigger",p:[70,7,3194]}," ",{t:4,f:[{t:4,f:[{p:[76,9,3459],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,46,3496]}]}],n:50,r:"activation_delay",p:[75,8,3426]}," ",{t:4,f:[{p:[79,9,3574],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,35,3600]}]}," ",{p:[80,9,3631],t:7,e:"ui-section",a:{label:"Timer Type"},f:[{t:2,r:"timer_type",p:[80,40,3662]}]}],n:50,r:"timer",p:[78,8,3552]}," ",{t:4,f:[{t:4,f:[{p:[84,11,3782],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,30,3801]}]},f:[{t:2,r:"value",p:[84,40,3811]}]}],n:52,r:"extra_settings",p:[83,9,3747]}],n:50,r:"has_extra_settings",p:[82,8,3712]}," ",{t:4,f:[{t:4,f:[{p:[89,10,3944],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[89,46,3980]}]}],n:50,r:"activation_code",p:[88,9,3911]}," ",{t:4,f:[{p:[92,10,4072],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[92,48,4110]}]}],n:50,r:"deactivation_code",p:[91,9,4037]}," ",{t:4,f:[{p:[95,10,4196],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[95,40,4226]}]}],n:50,r:"kill_code",p:[94,9,4169]}," ",{t:4,f:[{p:[98,10,4307],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[98,43,4340]}]}],n:50,r:"trigger_code",p:[97,9,4277]}],n:50,x:{r:["data.scan_level"],s:"_0>=4"},p:[87,8,3874]}],n:50,x:{r:["data.scan_level"],s:"_0>=3"},p:[74,7,3390]}],n:50,x:{r:["data.scan_level"],s:"_0>=2"},p:[67,6,2992]}]}],n:52,r:"data.mob_programs",p:[63,5,2749]}]}]}],x:{r:["data.has_nanites"],s:"!_0"}}]}],r:"data.status_msg"}]}]},e.exports=a.extend(r.exports)},{341:341}],410:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Cloud Console"},f:[{p:[2,1,42],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,3,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,64,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,4,197],t:7,e:"ui-section",f:[{p:[7,5,214],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[7,38,247]}]}," ",{p:[8,5,283],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[8,37,315]}]}," ",{p:[9,5,351],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[9,43,389]}]}," ",{t:4,f:[{p:[11,6,495],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[11,43,532]}]}],n:50,r:"data.disk.activation_delay",p:[10,5,455]}," ",{t:4,f:[{p:[14,6,621],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[14,32,647]}]}," ",{p:[15,6,685],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[15,38,717]}]}],n:50,r:"data.disk.timer",p:[13,5,592]}," ",{t:4,f:[{p:[18,6,810],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[18,42,846]}]}],n:50,r:"data.disk.activation_code",p:[17,5,771]}," ",{t:4,f:[{p:[21,6,946],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[21,44,984]}]}],n:50,r:"data.disk.deactivation_code",p:[20,5,905]}," ",{t:4,f:[{p:[24,6,1078],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[24,36,1108]}]}],n:50,r:"data.disk.kill_code",p:[23,5,1045]}," ",{t:4,f:[{p:[27,6,1197],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[27,39,1230]}]}],n:50,r:"data.disk.trigger_code",p:[26,5,1161]}," ",{t:4,f:[{t:4,f:[{p:[31,8,1370],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,27,1389]}]},f:[{t:2,r:"value",p:[31,37,1399]}]}],n:52,r:"data.disk.extra_settings",p:[30,6,1328]}],n:50,r:"data.disk.has_extra_settings",p:[29,5,1286]}]}],n:50,r:"data.has_program",p:[5,3,169]},{t:4,n:51,f:[{p:[36,4,1480],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,2,77]},{t:4,n:51,f:[{p:[39,3,1546],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[42,1,1605],t:7,e:"ui-display",a:{title:"Cloud Storage"},f:[{t:4,f:[{p:[44,3,1670],t:7,e:"ui-button",a:{icon:"plus-circle",action:"create_backup"},f:["Create New Backup"]}," ",{p:[45,3,1755],t:7,e:"ui-display",a:{title:"Active Backups"},f:[{t:4,f:[{p:[47,5,1827],t:7,e:"ui-button",a:{action:"set_view",params:['{"view": "',{t:2,r:"cloud_id",p:[47,52,1874]},'"}']},f:["Backup #",{t:2,r:"cloud_id",p:[47,76,1898]}]}],n:52,r:"data.cloud_backups",p:[46,4,1794]}]}],n:50,x:{r:["data.current_view"],s:"!_0"},p:[43,2,1641]},{t:4,n:51,f:[{p:[51,3,1964],t:7,e:"ui-button",a:{icon:"undo",action:"set_view",params:'{"view": "0"}'},f:["Return"]}," ",{t:4,f:[{p:[53,4,2079],t:7,e:"ui-notice",f:["ERROR: Backup not found."]}],n:50,x:{r:["data.cloud_backup"],s:"!_0"},p:[52,3,2049]},{t:4,n:51,f:[{p:[55,4,2141],t:7,e:"ui-display",a:{title:["Backup #",{t:2,r:"data.current_view",p:[55,31,2168]}]},f:[{t:4,f:[{p:[57,6,2226],t:7,e:"ui-button",a:{icon:"upload",action:"upload_program",style:"selected"},f:["Upload Program From Disk"]},{p:[57,108,2328],t:7,e:"br"}],n:50,r:"data.has_program",p:[56,5,2196]}," ",{t:4,f:[{p:[60,6,2384],t:7,e:"hr"}," ",{p:[61,6,2394],t:7,e:"ui-section",f:[{p:[62,7,2413],t:7,e:"h3",f:[{t:2,r:"name",p:[62,11,2417]}]}," ",{p:[63,7,2437],t:7,e:"div",a:{style:"float:right"},f:[{p:[64,8,2470],t:7,e:"ui-button",a:{icon:"minus-circle",action:"remove_program",style:"danger",params:['{"program_id": "',{t:2,r:"id",p:[64,102,2564]},'"}']},f:["Uninstall"]}]}]}," ",{p:[67,6,2633],t:7,e:"ui-section",f:[{p:[68,7,2652],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[68,39,2684]}]}," ",{p:[69,7,2712],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[69,45,2750]}]}," ",{p:[70,7,2808],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[70,44,2845]},"/s"]}," ",{t:4,f:[{p:[72,8,2906],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[72,41,2939]},"/s"]}," ",{p:[73,8,2978],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[73,45,3015]},"/s"]}],n:50,r:"can_trigger",p:[71,7,2879]}," ",{t:4,f:[{p:[76,8,3103],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,45,3140]}]}],n:50,r:"activation_delay",p:[75,7,3071]}," ",{t:4,f:[{p:[79,8,3215],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,34,3241]}]}," ",{p:[80,8,3271],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"timer_type",p:[80,40,3303]}]}],n:50,r:"timer",p:[78,7,3194]}," ",{t:4,f:[{p:[83,8,3382],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[83,44,3418]}]}],n:50,r:"activation_code",p:[82,7,3351]}," ",{t:4,f:[{p:[86,8,3504],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[86,46,3542]}]}],n:50,r:"deactivation_code",p:[85,7,3471]}," ",{t:4,f:[{p:[89,8,3622],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[89,38,3652]}]}],n:50,r:"kill_code",p:[88,7,3597]}," ",{t:4,f:[{p:[92,8,3727],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[92,41,3760]}]}],n:50,r:"trigger_code",p:[91,7,3699]}," ",{t:4,f:[{t:4,f:[{p:[96,10,3878],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[96,29,3897]}]},f:[{t:2,r:"value",p:[96,39,3907]}]}],n:52,r:"extra_settings",p:[95,8,3844]}],n:50,r:"has_extra_settings",p:[94,7,3810]}]}],n:52,r:"data.cloud_programs",p:[59,5,2349]}]}],x:{r:["data.cloud_backup"],s:"!_0"}}],x:{r:["data.current_view"],s:"!_0"}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],411:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Program Hub"},f:[{t:4,f:[{p:[3,2,63],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{p:[4,3,99],t:7,e:"ui-section",f:[{p:[5,4,115],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{p:[6,4,180],t:7,e:"ui-button",a:{icon:"minus-circle",action:"clear"},f:["Delete Program"]}]}," ",{t:4,f:[{p:[9,4,299],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[9,37,332]}]}," ",{p:[10,4,367],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[10,36,399]}]}],n:50,r:"data.has_program",p:[8,3,271]},{t:4,n:51,f:[{p:[12,4,445],t:7,e:"ui-notice",f:["No program installed."]}],r:"data.has_program"}]}],n:50,r:"data.has_disk",p:[2,1,40]},{t:4,n:51,f:[{p:[16,2,525],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"},{p:[18,1,569],t:7,e:"br"}," ",{p:[19,1,574],t:7,e:"ui-display",a:{title:"Programs"},f:[{p:[20,2,605],t:7,e:"ui-section",f:[{p:[21,3,620],t:7,e:"ui-button",a:{icon:"undo",action:"set_category",params:'{"category": "Main"}'},f:["Return"]}," ",{p:[22,3,716],t:7,e:"ui-button",a:{icon:"align-justify ",action:"toggle_details"},f:[{t:2,x:{r:["data.detail_view"],s:'_0?"Compact View":"Detailed View"'},p:[22,60,773]}]}]}," ",{t:4,f:[{p:[25,3,892],t:7,e:"ui-display",f:[{t:4,f:[{p:[27,5,938],t:7,e:"ui-section",f:[{p:[27,17,950],t:7,e:"ui-button",a:{action:"set_category",params:['{"category": "',{t:2,r:"name",p:[27,72,1005]},'"}']},f:[{t:2,r:"name",p:[27,84,1017]}]}]}],n:52,r:"data.categories",p:[26,4,908]}]}],n:50,x:{r:["data.category"],s:'_0=="Main"'},p:[24,2,858]},{t:4,n:51,f:[{p:[31,3,1092],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[31,22,1111]}]},f:[{t:4,f:[{t:4,f:[{p:[34,6,1196],t:7,e:"ui-display",f:[{p:[35,7,1215],t:7,e:"ui-section",f:[{p:[35,19,1227],t:7,e:"b",f:[{t:2,r:"name",p:[35,22,1230]}]}]}," ",{p:[36,7,1262],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[36,19,1274]}]}," ",{p:[37,7,1302],t:7,e:"ui-section",f:[{p:[38,8,1322],t:7,e:"ui-button",a:{icon:"download",action:"download",params:['{"program_id": "',{t:2,r:"id",p:[38,77,1391]},'"}'],state:[{t:2,x:{r:["data.has_disk"],s:'_0?null:"disabled"'},p:[38,94,1408]}]},f:["Download"]}]}]}],n:50,r:"data.detail_view",p:[33,5,1166]},{t:4,n:51,f:[{p:[44,6,1542],t:7,e:"ui-section",f:[{p:[44,18,1554],t:7,e:"ui-button",a:{action:"download",params:['{"program_id": "',{t:2,r:"id",p:[44,71,1607]},'"}']},f:[{t:2,r:"name",p:[44,81,1617]}]}]}],r:"data.detail_view"}],n:52,r:"data.program_list",p:[32,4,1134]}]}],x:{r:["data.category"],s:'_0=="Main"'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],412:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Programming"},f:[{t:4,f:[{p:[3,3,65],t:7,e:"ui-notice",f:["Insert a nanite program disk."]}],n:50,x:{r:["data.has_disk"],s:"!_0"},p:[2,1,40]},{t:4,n:51,f:[{p:[5,3,129],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{t:4,f:[{p:[7,5,223],t:7,e:"ui-notice",f:["No program detected."]}],n:50,x:{r:["data.has_program"],s:"!_0"},p:[6,3,193]},{t:4,n:51,f:[{p:[9,5,282],t:7,e:"ui-section",f:[{p:[10,7,301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.name",p:[10,26,320]}]},f:[{t:2,r:"data.desc",p:[11,9,344]}]}]}," ",{p:[14,5,400],t:7,e:"ui-section",f:[{p:[15,7,419],t:7,e:"ui-section",a:{label:"Program Info"},f:["Nanites Consumed: ",{t:2,r:"data.use_rate",p:[16,26,478]},{p:[16,43,495],t:7,e:"br"}," ",{t:4,f:["Trigger Cost: ",{t:2,r:"data.trigger_cost",p:[18,25,557]},"u",{p:[18,47,579],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[17,9,508]}]}," ",{p:[22,7,627],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[23,9,663],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.activated"],s:'_0?"toggle-on":"toggle-off"'},p:[24,17,690]}],action:"toggle_active"},f:[{t:2,x:{r:["data.activated"],s:'_0?"Active":"Inactive"'},p:[26,11,784]}]}]}," ",{p:[30,7,876],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[31,9,914],t:7,e:"ui-button",a:{icon:"pencil",action:"set_activation_delay"}}," Activation Delay: ",{t:2,r:"data.activation_delay",p:[31,95,1e3]}," ",{p:[31,121,1026],t:7,e:"br"}," ",{p:[32,9,1039],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer"}}," Timer: ",{t:2,r:"data.timer",p:[32,73,1103]}," ",{p:[32,88,1118],t:7,e:"br"}," ",{p:[33,9,1131],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer_type"}}," Timer Type: ",{t:2,r:"data.timer_type",p:[33,83,1205]}," ",{p:[33,103,1225],t:7,e:"br"}]}," ",{p:[36,7,1257],t:7,e:"ui-section",a:{label:"Codes"},f:[{p:[37,9,1292],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "activation"}'}}," Activation Code: ",{t:2,r:"data.activation_code",p:[37,121,1404]}," ",{p:[37,146,1429],t:7,e:"br"}," ",{p:[38,9,1442],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "deactivation"}'}}," Deactivation Code: ",{t:2,r:"data.deactivation_code",p:[38,125,1558]}," ",{p:[38,152,1585],t:7,e:"br"}," ",{p:[39,9,1598],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "kill"}'}}," Kill Code: ",{t:2,r:"data.kill_code",p:[39,109,1698]}," ",{p:[39,128,1717],t:7,e:"br"}," ",{t:4,f:[{p:[41,11,1765],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "trigger"}'}}," Trigger Code: ",{t:2,r:"data.trigger_code",p:[41,117,1871]}," ",{p:[41,139,1893],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[40,9,1730]}]}," ",{t:4,f:[{p:[46,9,1981],t:7,e:"ui-section",a:{label:"Special"},f:[{t:4,f:[{p:[48,13,2062],t:7,e:"ui-button",a:{icon:"pencil",action:"set_extra_setting",params:['{"target_setting": "',{t:2,r:"name",p:[48,93,2142]},'"}']}}," ",{t:2,r:"name",p:[48,118,2167]},": ",{t:2,r:"value",p:[48,128,2177]}," ",{p:[48,138,2187],t:7,e:"br"}],n:52,r:"data.extra_settings",p:[47,11,2020]}]}],n:50,r:"data.has_extra_settings",p:[45,7,1941]}]}],x:{r:["data.has_program"],s:"!_0"}}],x:{r:["data.has_disk"],s:"!_0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],413:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Control"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-notice",f:["The interface is locked."]}],n:50,r:"data.locked",p:[2,1,36]},{t:4,n:51,f:[{p:[5,3,117],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock Interface"]}," ",{p:[6,3,183],t:7,e:"ui-button",a:{icon:"save",action:"save"},f:["Save Current Setting"]}," ",{p:[7,3,255],t:7,e:"ui-section",a:{label:"Signal Code"},f:[{p:[8,5,292],t:7,e:"span",f:[{t:2,r:"data.code",p:[8,11,298]}]}," ",{p:[9,4,322],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code"},f:["Set"]}]}," ",{t:4,f:[{p:[12,5,432],t:7,e:"ui-section",a:{label:"Relay Code"},f:[{p:[13,7,470],t:7,e:"span",f:[{t:2,r:"data.relay_code",p:[13,13,476]}]}," ",{p:[14,5,507],t:7,e:"ui-button",a:{icon:"pencil",action:"set_relay_code"},f:["Set"]}]}],n:50,x:{r:["data.mode"],s:'_0=="Relay"'},p:[11,3,399]}," ",{p:[17,3,602],t:7,e:"ui-section",a:{label:"Signal Mode"},f:[{p:[18,5,639],t:7,e:"span",f:[{t:2,r:"data.mode",p:[18,11,645]}]}," ",{p:[19,5,670],t:7,e:"br"}," ",{p:[20,4,678],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Off"}'},f:["Off"]}," ",{p:[21,5,755],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Local"}'},f:["Local"]}," ",{p:[22,5,836],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Targeted"}'},f:["Targeted"]}," ",{p:[23,5,923],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Area"}'},f:["Area"]}," ",{p:[24,5,1002],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Relay"}'},f:["Relay"]}]}],r:"data.locked"}]}," ",{p:[28,1,1117],t:7,e:"ui-display",a:{title:"Saved Settings"},f:[{t:4,f:[{p:[30,3,1186],t:7,e:"ui-button",a:{icon:"load",action:"load",params:['{"save_id": "',{t:2,r:"id",p:[30,61,1244]},'"}']},f:[{t:2,r:"name",p:[30,71,1254]}]}," ",{t:4,f:[{p:[32,4,1301],t:7,e:"ui-button",a:{icon:"remove",action:"remove_save",params:['{"save_id": "',{t:2,r:"id",p:[32,71,1368]},'"}']},f:["Remove"]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[31,3,1277]}," ",{p:[34,3,1409],t:7,e:"br"}],n:52,r:"data.saved_settings",p:[29,2,1154]}]}]},e.exports=a.extend(r.exports)},{341:341}],414:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ghost roles"},f:[{p:[2,2,34],t:7,e:"ui-section",a:{label:"Ignored roles"},f:[{t:4,f:[{p:[4,4,96],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[4,21,113]}],style:[{t:2,x:{r:["enabled"],s:'_0?"danger":null'},p:[4,73,165]}],action:"toggle_ignore",params:['{"key": "',{t:2,r:"key",p:[4,144,236]},'"}']},f:[{t:2,r:"desc",p:[4,155,247]}]}],n:52,r:"data.ignore",p:[3,3,71]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],415:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,55],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,93],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,127],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."] +}," ",{p:[6,3,479],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,514],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,555],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,28]},{t:4,n:51,f:[{p:[12,3,652],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,689],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,739]}]}]}," ",{p:[18,3,819],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,865]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,889]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports)},{341:341}],416:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,306],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,346],t:7,e:"ui-notice",f:[{p:[19,5,362],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,321]},{p:[24,1,428],t:7,e:"ui-display",f:[{p:[26,1,442],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,463],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,512],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[31,2,539],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,589]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,626]}]}]}]}," ",{t:4,f:[{p:[36,2,709],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,719]}]}],n:50,r:"data.error",p:[35,1,689]},{t:4,n:51,f:[{p:[38,2,748],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,772],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,793],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,843],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,872]}]}," ",{p:[46,3,897],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,943],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,972]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1059],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1115],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1144],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1177]}],state:[{t:2,r:"healthState",p:[61,11,1204]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1221]},"%"]}]}," ",{p:[63,3,1274],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1325],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1354],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1394],t:7,e:"tr",f:[{p:[69,10,1398],t:7,e:"td",f:[{p:[69,14,1402],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1426]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1366]}]}]}," ",{p:[73,2,1475],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1509],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1539]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],417:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,87],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,166]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,61]},{p:[7,1,247],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,336]}]},f:["Job Management"]}," ",{p:[8,1,404],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,495]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,584],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,634]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,558]},{t:4,f:[{p:[14,1,753],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,774],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,799],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,857],t:7,e:"br"},{p:[16,65,861],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,898],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,918]}," - ",{t:2,r:"rank",p:[20,13,929]}]}],n:52,r:"data.manifest",p:[18,1,873]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,733]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,984],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1005],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1036],t:7,e:"table",f:[{p:[29,1,1044],t:7,e:"tr",f:[{p:[29,5,1048],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1070],t:7,e:"b",f:["Job"]}]},{p:[29,42,1085],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1107],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1124],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1146],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1166],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1188],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1238],t:7,e:"tr",f:[{p:[32,6,1242],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1246]}]},{p:[32,24,1260],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1264]},"/",{t:2,r:"total",p:[32,40,1276]}]},{p:[32,54,1290],t:7,e:"td",f:[{p:[32,58,1294],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1348]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1368]}]},f:[{t:2,r:"desc_open",p:[32,169,1405]}]},{p:[32,194,1430],t:7,e:"br"}]},{p:[32,203,1439],t:7,e:"td",f:[{p:[32,207,1443],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1498]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1518]}]},f:[{t:2,r:"desc_close",p:[32,320,1556]}]}]}]}],n:52,r:"data.slots",p:[30,1,1215]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1626],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1647],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1707],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1727],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1791],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1684]},{p:[48,1,1805],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1826],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1879],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1906],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,1976]}]}]}]}," ",{p:[56,1,2021],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2042],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2093],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2120],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2192]}]}]}]}," ",{p:[64,1,2239],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2295],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2317],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2364],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2386],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2442],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2470]}]}]}," ",{p:[81,2,2507],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2529],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2574],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2602]}]}]}," ",{p:[89,2,2638],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2660],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2707],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2735],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2788]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2849]}]}]}]}],n:50,r:"data.minor",p:[72,2,2344]},{t:4,n:51,f:[{p:[99,2,2909],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,2931],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,2987],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3015],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3082]}]}]}]}," ",{p:[108,2,3132],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3154],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3184],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3228]}]}," ",{p:[112,2,3304],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3326],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3379],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3429],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3457],t:7,e:"table",f:[{p:[121,5,3469],t:7,e:"tr",f:[{p:[122,4,3477],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3497],t:7,e:"td",f:[{p:[124,6,3507],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3584]}]},f:["Captain"]}]}]}," ",{p:[127,5,3678],t:7,e:"tr",f:[{p:[128,4,3686],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3706],t:7,e:"td",f:[{p:[130,6,3716],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3827],t:7,e:"tr",f:[{p:[134,4,3835],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,3885],t:7,e:"td",f:[{t:4,f:[{p:[137,5,3931],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,3990]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4008]}]},f:[{t:2,r:"display_name",p:[137,127,4053]}]}],n:52,r:"data.engineering_jobs",p:[136,6,3895]}]}]}," ",{p:[141,5,4120],t:7,e:"tr",f:[{p:[142,4,4128],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4174],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4216],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4275]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4293]}]},f:[{t:2,r:"display_name",p:[145,127,4338]}]}],n:52,r:"data.medical_jobs",p:[144,6,4184]}]}]}," ",{p:[149,5,4405],t:7,e:"tr",f:[{p:[150,4,4413],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4459],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4501],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4560]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4578]}]},f:[{t:2,r:"display_name",p:[153,127,4623]}]}],n:52,r:"data.science_jobs",p:[152,6,4469]}]}]}," ",{p:[157,5,4690],t:7,e:"tr",f:[{p:[158,4,4698],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4745],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4788],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,4847]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,4865]}]},f:[{t:2,r:"display_name",p:[161,127,4910]}]}],n:52,r:"data.security_jobs",p:[160,6,4755]}]}]}," ",{p:[165,5,4977],t:7,e:"tr",f:[{p:[166,4,4985],t:7,e:"th",a:{style:"color: '#cc6600';"},f:["Cargo"]}," ",{p:[167,4,5029],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5069],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5128]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5146]}]},f:[{t:2,r:"display_name",p:[169,127,5191]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5039]}]}]}," ",{p:[173,5,5258],t:7,e:"tr",f:[{p:[174,4,5266],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5313],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5356],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5415]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5433]}]},f:[{t:2,r:"display_name",p:[177,127,5478]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5323]}]}]}," ",{t:4,f:[{p:[182,4,5576],t:7,e:"tr",f:[{p:[183,6,5586],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5634],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5677],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5736]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5754]}]},f:[{t:2,r:"display_name",p:[186,129,5799]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5643]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5545]}]}]}],n:50,r:"data.assignments",p:[118,4,3401]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,5956],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,5977],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6015],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6094],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6128],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6187]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6210]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6232]}]},f:[{t:2,r:"desc",p:[204,140,6263]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6056]}]}],n:50,r:"data.centcom_access",p:[197,2,5925]},{t:4,n:51,f:[{p:[209,4,6330],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6351],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6355]}]}]}," ",{p:[212,4,6395],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6463],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6525],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6546],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6584]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6637]},'"}']},f:[{p:[215,129,6650],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6653]}]}]}]}," ",{p:[216,4,6687],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6721],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6755],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,6814]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,6837]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,6859]}]},f:[{t:2,r:"desc",p:[219,140,6890]}]}]}],n:52,r:"accesses",p:[217,6,6697]}]}],n:52,r:"data.regions",p:[213,3,6436]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2274]}],n:50,r:"data.authenticated",p:[66,1,2245]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],418:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,297],t:7,e:"ntosheader"}," ",{p:[17,1,312],t:7,e:"ui-display",f:[{p:[18,2,326],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,461],t:7,e:"hr"}," ",{p:[19,2,467],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,503],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,539]},"W"]}," ",{t:4,f:[{p:[25,4,606],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,674],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,714]}]}," ",{p:[31,4,755],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,795],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,816]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,846]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,879]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,918]},"/",{t:2,r:"adata.battery.max",p:[32,165,955]}]}]}],n:50,r:"data.battery",p:[24,3,582]},{t:4,n:51,f:[{p:[35,4,1017],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1116],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1151],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1189],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1210]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1238]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1272]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1308]},"GQ"]}]}]}," ",{p:[47,2,1373],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1443],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1465]}]},f:[{p:[50,5,1480],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1534]}]}," ",{p:[52,5,1554],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1586],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1604]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1685]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1704]}]}]}," ",{t:4,f:[{p:[59,6,1810],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1849]},"W"]}],n:50,r:"powerusage",p:[58,5,1786]}]}," ",{p:[64,4,1922],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1416]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],419:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,97],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,189]},{p:[8,41,203],t:7,e:"br"}," ",{p:[9,3,210],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,311],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,410],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,427]}]}," ",{p:[14,4,453],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,475],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,530],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,579],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,640],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,648]}],n:50,r:"data.filename",p:[12,3,385]},{t:4,n:51,f:[{p:[21,4,682],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,719],t:7,e:"table",f:[{p:[23,5,731],t:7,e:"tr",f:[{p:[24,6,741],t:7,e:"th",f:["File name"]}," ",{p:[25,6,765],t:7,e:"th",f:["File type"]}," ",{p:[26,6,789],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,818],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,878],t:7,e:"tr",f:[{p:[31,7,889],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,893]}]}," ",{p:[32,7,913],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,918]}]}," ",{p:[33,7,938],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,942]},"GQ"]}," ",{p:[34,7,964],t:7,e:"td",f:[{p:[35,8,976],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1027]},'"}']},f:["VIEW"]}," ",{p:[36,8,1063],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1081]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1160]},'"}']},f:["DELETE"]}," ",{p:[37,8,1198],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1216]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1291]},'"}']},f:["RENAME"]}," ",{p:[38,8,1329],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1347]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1421]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1492],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1510]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1588]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1458]}]}]}],n:52,r:"data.files",p:[29,5,852]}]}," ",{t:4,f:[{p:[47,4,1715],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1762],t:7,e:"table",f:[{p:[49,5,1774],t:7,e:"tr",f:[{p:[50,6,1784],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1808],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1832],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1861],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1924],t:7,e:"tr",f:[{p:[57,7,1935],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1939]}]}," ",{p:[58,7,1959],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,1964]}]}," ",{p:[59,7,1984],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,1988]},"GQ"]}," ",{p:[60,7,2010],t:7,e:"td",f:[{p:[61,8,2022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2040]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2122]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2194],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2212]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2292]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2160]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1895]}]}],n:50,r:"data.usbconnected",p:[46,4,1686]}," ",{p:[70,4,2401],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],420:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,141],t:7,e:"table",f:[{t:4,f:[{p:[8,4,178],t:7,e:"tr",f:[{p:[8,8,182],t:7,e:"td",f:[{p:[8,12,186],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,238]},'"}']},f:[{t:2,r:"desc",p:[9,5,255]}]}]},{p:[11,4,283],t:7,e:"td",f:[{p:[11,8,287],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,305]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,393]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,151]}]}," ",{p:[14,2,441],t:7,e:"br"},{p:[14,6,445],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,476],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,519]}]},f:["Toggle Flashlight"]},{p:[16,114,587],t:7,e:"br"}," ",{p:[17,3,594],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,653],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,710]},";"]},f:["   "]}]}],n:50,r:"data.has_light",p:[15,2,451]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],421:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,100],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,75]}," ",{t:4,f:[{p:[10,3,161],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,217],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,246]}]}," ",{p:[16,3,272],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,328],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,386],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,357]},{t:4,n:51,f:[{p:[23,5,417],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,455],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,504],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,533],t:7,e:"table",f:[{p:[31,5,545],t:7,e:"tr",f:[{p:[31,9,549],t:7,e:"td",f:[{p:[31,13,553],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,612],t:7,e:"tr",f:[{p:[32,9,616],t:7,e:"td",f:[{p:[32,13,620],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,687],t:7,e:"tr",f:[{p:[33,9,691],t:7,e:"td",f:[{p:[33,13,695],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,774],t:7,e:"tr",f:[{p:[34,9,778],t:7,e:"td",f:[{p:[34,13,782],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,849],t:7,e:"tr",f:[{p:[35,9,853],t:7,e:"td",f:[{p:[35,13,857],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,959],t:7,e:"tr",f:[{p:[37,10,963],t:7,e:"td",f:[{p:[37,14,967],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1037],t:7,e:"tr",f:[{p:[38,10,1041],t:7,e:"td",f:[{p:[38,14,1045],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1111],t:7,e:"tr",f:[{p:[39,10,1115],t:7,e:"td",f:[{p:[39,14,1119],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,929]}]}]}]}]}," ",{p:[43,3,1221],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1243],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1298],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1321],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1403]},{p:[48,14,1410],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1373]}]}]}]}," ",{p:[53,3,1464],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1486],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1519]},{p:[55,12,1527],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1493]}],n:50,r:"data.title",p:[9,2,140]},{t:4,n:51,f:[{p:[58,3,1556],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1575],t:7,e:"table",f:[{p:[60,4,1586],t:7,e:"tr",f:[{p:[60,8,1590],t:7,e:"td",f:[{p:[60,12,1594],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1660],t:7,e:"tr",f:[{p:[61,8,1664],t:7,e:"td",f:[{p:[61,12,1668],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1730],t:7,e:"tr",f:[{p:[62,8,1734],t:7,e:"td",f:[{p:[62,12,1738],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1826],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1855],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1898],t:7,e:"tr",f:[{p:[67,8,1902],t:7,e:"td",f:[{p:[67,12,1906],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,1958]},'"}']},f:[{t:2,r:"chan",p:[67,74,1968]}]},{p:[67,94,1988],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1865]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],422:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,112]},{p:[6,33,126],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,75]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,236]},"GQ/s",{p:[8,57,254],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,291]},{p:[10,12,299],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,261]}," ",{p:[12,3,318],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,430],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,479]}],n:50,r:"data.focus",p:[15,3,437]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,545],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,596],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,657],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,689],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,746]},'"}']},f:[{t:2,r:"id",p:[23,71,756]}]}],n:52,r:"data.relays",p:[22,3,664]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],423:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,170],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,197],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,236],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,273]}]}," ",{p:[11,4,308],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,347],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,176]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,498],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,540],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,566],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,602]}]}," ",{p:[24,5,646],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,689]}]}," ",{p:[27,5,733],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,769]},"GQ"]}," ",{p:[30,5,815],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,855]}," GQ/s"]}," ",{p:[33,5,905],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,949],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,970]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1001]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],s:"Math.round(_0)"},p:[34,101,1044]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1089]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,469]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1230],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1267],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1307],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1328]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1356]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1390]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1426]},"GQ"]}]}]}," ",{p:[47,4,1499],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1594],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1616]}]},f:[{p:[50,7,1637],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1691]}]}," ",{p:[52,7,1723],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1761]}," (",{t:2,r:"size",p:[53,22,1775]}," GQ)"]}," ",{p:[55,7,1814],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1856]}]}," ",{p:[58,7,1900],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,1973]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2052],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1552]}]}," ",{t:4,f:[{p:[67,5,2128],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"}, +f:[{p:[68,6,2182],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2326],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2348]}]},f:[{p:[71,8,2370],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2424]}]}," ",{p:[73,8,2458],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2497]}," (",{t:2,r:"size",p:[74,23,2511]}," GQ)"]}," ",{p:[76,8,2552],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2595]}]}," ",{p:[79,8,2641],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2714]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2797],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2289]}]}],n:50,r:"data.hackedavailable",p:[66,4,2095]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1207]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1178]}," ",{p:[89,2,2866],t:7,e:"br"},{p:[89,6,2870],t:7,e:"br"},{p:[89,10,2874],t:7,e:"hr"},{p:[89,14,2878],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],424:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[6,2,76],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,122],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,165],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,168]}]}]}," ",{t:4,f:[{p:[12,4,239],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,279],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,282]}]}]}," ",{p:[15,4,352],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,385],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,480],t:7,e:"br"},{p:[21,8,484],t:7,e:"br"}," ",{p:[22,4,492],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,211]},{t:4,n:51,f:[{p:[24,4,627],t:7,e:"br"},{p:[24,8,631],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,722],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,768],t:7,e:"table",f:[{p:[32,3,778],t:7,e:"tr",f:[{p:[33,4,786],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,802],t:7,e:"th",f:["STATUS"]},{p:[35,4,816],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,830],t:7,e:"tr",f:[" ",{p:[37,4,838],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,864],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,868]}]},{p:[39,4,929],t:7,e:"td",f:[" ",{p:[39,9,934],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1012],t:7,e:"tr",f:[" ",{p:[41,4,1020],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1048],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1052]}]},{p:[43,4,1107],t:7,e:"td",f:[{p:[43,8,1111],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1189],t:7,e:"tr",f:[" ",{p:[45,4,1197],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1226],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1230]}]},{p:[47,4,1288],t:7,e:"td",f:[{p:[47,8,1292],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1370],t:7,e:"tr",f:[" ",{p:[49,4,1378],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1407],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1411]}]},{p:[51,4,1469],t:7,e:"td",f:[{p:[51,8,1473],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1576],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1642],t:7,e:"ui-notice",f:[{p:[59,5,1658],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1714],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1617]}," ",{p:[64,3,1839],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1890],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1893]}]}]}," ",{p:[68,3,1962],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2004],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2007]}]}]}," ",{p:[72,3,2054],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2103],t:7,e:"table",f:[{p:[75,4,2114],t:7,e:"tr",f:[{p:[75,8,2118],t:7,e:"td",f:[{p:[75,12,2122],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2176],t:7,e:"tr",f:[{p:[76,8,2180],t:7,e:"td",f:[{p:[76,12,2184],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2240],t:7,e:"tr",f:[{p:[77,8,2244],t:7,e:"td",f:[{p:[77,12,2248],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2311],t:7,e:"tr",f:[{p:[78,8,2315],t:7,e:"td",f:[{p:[78,12,2319],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2387],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2425],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2479],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2501],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2582]},{p:[86,15,2591],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2552]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],425:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,96],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,117],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,170],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,201]},{p:[9,48,215],t:7,e:"br"}," ",{p:[10,3,222],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,309],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,344],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,400],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,429]}]}," ",{p:[20,3,464],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,522],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,551]}," / ",{t:2,r:"data.download_size",p:[24,33,580]}," GQ"]}," ",{p:[26,3,617],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,672],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,701]},"GQ/s"]}," ",{p:[32,3,743],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,792],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,821],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,916],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1e3],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1029]}]}," ",{p:[46,3,1064],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1118],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1147]}]}," ",{p:[52,3,1183],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1239],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1268]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1359],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1408],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1437],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1501],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1599],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1662],t:7,e:"table",f:[{p:[72,3,1672],t:7,e:"tr",f:[{p:[72,7,1676],t:7,e:"th",f:["File name"]},{p:[72,20,1689],t:7,e:"th",f:["File size"]},{p:[72,33,1702],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1751],t:7,e:"tr",f:[{p:[74,8,1755],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1759]}]},{p:[75,4,1775],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1779]},"GQ"]},{p:[76,4,1793],t:7,e:"td",f:[{p:[76,8,1797],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1848]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1717]}]}]}]}," ",{p:[79,3,1903],t:7,e:"hr"}," ",{p:[80,3,1910],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,1973],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2034],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2062],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2114],t:7,e:"tr",f:[{p:[84,59,2118],t:7,e:"th",f:["Server UID"]},{p:[84,73,2132],t:7,e:"th",f:["File Name"]},{p:[84,86,2145],t:7,e:"th",f:["File Size"]},{p:[84,99,2158],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2181],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2226],t:7,e:"tr",f:[{p:[86,9,2230],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2234]}]},{p:[87,5,2246],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2250]}]},{p:[88,5,2267],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2271]},"GQ ",{t:4,f:[{p:[90,6,2311],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2286]}," ",{t:4,f:[{p:[93,6,2365],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2339]}]},{p:[96,5,2399],t:7,e:"td",f:[{p:[96,9,2403],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2456]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2199]}]}]}]}," ",{p:[99,3,2514],t:7,e:"hr"}," ",{p:[100,3,2521],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],426:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1040],t:7,e:"ntosheader"}," ",{p:[45,1,1055],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1111],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[47,27,1133]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1283]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1338]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1086]},{t:4,n:51,f:[{p:[52,5,1386],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1423],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1429]}]}]}," ",{p:[55,5,1474],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1508],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1514]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1579],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1608],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1632],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1668],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1706],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1780],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1821],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1861],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,1943],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,1962]}],nowrap:0},f:[{p:[72,7,1986],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2007]}," %"]}," ",{p:[73,7,2064],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2085]}]}," ",{p:[74,7,2126],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2147],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2160]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2189]}]}]}," ",{p:[75,7,2235],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2256],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2269]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2292]}," [",{p:[75,87,2315],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2321]}]},"]"]}]}," ",{p:[76,7,2369],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2390],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2403]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2426]}," [",{p:[76,87,2449],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2455]}]},"]"]}]}," ",{p:[77,7,2503],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2524],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2537]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2560]}," [",{p:[77,87,2583],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2589]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1918]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],427:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,96],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,150],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,179]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,255],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,303],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,332],t:7,e:"table",f:[{p:[21,4,343],t:7,e:"tr",f:[{p:[21,8,347],t:7,e:"td",f:[{p:[21,12,351],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,423],t:7,e:"tr",f:[{p:[22,8,427],t:7,e:"td",f:[{p:[22,12,431],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,466]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,500]}]}," ",{p:[23,4,549],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,584]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],428:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,91],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,110]}," Alarms"]},f:[{p:[6,5,133],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,164],t:7,e:"li",f:[{t:2,r:".",p:[8,13,168]}]}],n:52,r:".",p:[7,7,144]},{t:4,n:51,f:[{p:[10,9,202],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,61]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],429:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,399],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,436],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,490],t:7,e:"br"}," ",{p:[28,3,497],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,540],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,580],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,613]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,644]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,680]},"%"]}]}," ",{p:[32,3,730],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,768],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,781]}]},f:[{t:2,r:"data.SM_power",p:[33,55,818]}," MeV/cm3"]}]}," ",{p:[35,3,869],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,906],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,919]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,964]}," K"]}]}," ",{p:[38,3,1015],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1049],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1062]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1112]}," kPa"]}]}]}," ",{p:[42,3,1186],t:7,e:"hr"},{p:[42,7,1190],t:7,e:"br"}," ",{p:[43,3,1197],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1263],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1282]}]},f:[{t:2,r:"amount",p:[46,6,1298]}," %"]}],n:52,r:"data.gases",p:[44,4,1238]}]}],n:50,r:"data.active",p:[26,1,415]},{t:4,n:51,f:[{p:[51,2,1368],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1419],t:7,e:"br"}," ",{p:[52,2,1425],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1499],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1529]}," - (#",{t:2,r:"uid",p:[55,23,1547]},")"]}," ",{p:[57,3,1574],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1609]}," %"]}," ",{p:[60,3,1643],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1676],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1725]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1469]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],430:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,40],t:7,e:"table",f:[{p:[2,9,47],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,110],t:7,e:"td",f:[{p:[4,7,114],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,124]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,53]}," ",{t:4,f:[{p:[7,3,220],t:7,e:"td",f:[{p:[7,7,224],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,227]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,160]}," ",{t:4,f:[{p:[10,3,296],t:7,e:"td",f:[{p:[10,7,300],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,310]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,268]}," ",{t:4,f:[{p:[13,3,374],t:7,e:"td",f:[{p:[13,7,378],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,388]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,344]}," ",{t:4,f:[{p:[16,3,454],t:7,e:"td",f:[{p:[16,7,458],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,461]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,424]}," ",{t:4,f:[{p:[19,3,534],t:7,e:"td",f:[{p:[19,7,538],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,548]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,499]}]}]}]}," ",{p:[23,1,587],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,632],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,720],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,775],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,686]}]}," ",{p:[30,1,852],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{341:341}],431:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,67],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,35]},{t:4,n:51,f:[{p:[5,7,168],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,259],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,289],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,295]},"-",{t:2,r:"data.status2",p:[9,26,312]}]}]}," ",{p:[11,1,350],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,379],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,423],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,429]}]}]}," ",{t:4,f:[{p:[16,5,525],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,565],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,598]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,768],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,799]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,971],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1003]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1134],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1164]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,504]}," ",{p:[26,3,1369],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1400],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1433]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1514]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1602]}]}]}]}," ",{p:[34,1,1680],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1713],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1735]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1810]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1860]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1918]}]}]}," ",{p:[41,1,1982],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2012],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2034]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2109]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2173]}]},f:[{p:[46,7,2220],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2226]}]}]}]}," ",{p:[49,1,2293],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2321],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2349]}]}," ",{p:[51,3,2381],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2413],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2447]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2531],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2565]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2649],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2683]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2767],t:7,e:"br"}," ",{p:[56,5,2776],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2810]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2894],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2928]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3012],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3046]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3130],t:7,e:"br"}," ",{p:[60,5,3139],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3173]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3257],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3291]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3375],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3409]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3493],t:7,e:"br"}," ",{p:[64,5,3502],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3536]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3620],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3654]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3738],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3772]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],432:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,24],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,111],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,162],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,273],t:7,e:"ui-display",f:[{p:[7,6,291],t:7,e:"ui-section",f:[{p:[7,18,303],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,306]}]}]}," ",{p:[8,6,337],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,349]}]}]}],n:52,r:"data.surgeries",p:[5,3,245]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,425],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,542],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,517]}," ",{p:[19,2,605],t:7,e:"ui-display",f:[{p:[20,3,620],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,683],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,715],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,728]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,756]}]}]}," ",{p:[25,5,807],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,844],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,866]}]}]}," ",{p:[28,5,923],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,956],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,969]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1002]}],value:[{t:2,r:"data.patient.health",p:[29,87,1037]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1074]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1125]}]}]}," ",{t:4,f:[{p:[33,6,1357],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1376]}]},f:[{p:[34,7,1394],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1415]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1450]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1486]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1193]}],n:50,r:"data.patient",p:[21,4,658]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1630],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1734],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1756]}]},f:[{p:[45,7,1773],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1811],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1833]}]}," ",{t:4,f:[{p:[48,9,1890],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1912],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1938],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1943]}]}],n:50,r:"chems_needed",p:[47,8,1861]}]}," ",{t:4,f:[{p:[52,8,2040],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2086],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2108]}]}," ",{t:4,f:[{p:[55,10,2178],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2200],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2226],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2231]}]}],n:50,r:"alt_chems_needed",p:[54,9,2144]}]}],n:50,r:"alternative_step",p:[51,7,2008]}]}],n:52,r:"data.procedures",p:[43,5,1703]}],n:50,r:"data.procedures",p:[42,4,1675]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117],t:7,e:"ui-section",f:["Current unclaimed credits: ",{t:2,r:"data.unclaimedPoints",p:[6,30,160]}," ",{p:[7,4,189],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim"]}]}]}," ",{p:[12,1,276],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,3,315],t:7,e:"ui-section",f:[{p:[15,4,332],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[20,4,460],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[21,5,496],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[21,42,533]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[21,129,620]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[24,10,676]},": ",{t:2,r:"name",p:[24,21,687]}]}],n:52,r:"data.diskDesigns",p:[19,3,429]}],n:50,r:"data.hasDisk",p:[13,2,291]},{t:4,n:51,f:[{p:[28,3,741],t:7,e:"ui-section",f:[{p:[29,4,758],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[36,2,911],t:7,e:"ui-display",f:[{p:[37,3,927],t:7,e:"ui-section",f:[{p:[38,4,944],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[38,20,960]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[35,1,883]},{t:4,f:[{p:[43,2,1100],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[44,3,1133],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[45,5,1168],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[48,5,1226],t:7,e:"section",a:{"class":"cell" +},f:["Sheets"]}," ",{p:[51,5,1283],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[53,5,1327],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[55,5,1371],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[60,4,1473],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[61,5,1508],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[62,6,1537]}]}," ",{p:[64,5,1567],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[65,6,1610]}]}," ",{p:[67,5,1642],t:7,e:"section",a:{"class":"cell"},f:[{p:[68,6,1671],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[68,19,1684]}],placeholder:"###","class":"number"}}]}," ",{p:[70,5,1751],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[71,6,1794],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[71,60,1848]}],params:['{ "id" : ',{t:2,r:"id",p:[71,115,1903]},', "sheets" : ',{t:2,r:"sheets",p:[71,134,1922]}," }"]},f:["Release"]}]}," ",{p:[75,5,1993],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[76,6,2036]}]}]}],n:52,r:"data.materials",p:[59,3,1444]}," ",{t:4,f:[{p:[81,4,2119],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[82,5,2154],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[83,6,2183]}]}," ",{p:[85,5,2213],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[86,6,2256]}]}," ",{p:[88,5,2288],t:7,e:"section",a:{"class":"cell"},f:[{p:[89,6,2317],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[89,19,2330]}],placeholder:"###","class":"number"}}]}," ",{p:[91,5,2397],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[92,6,2440],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[92,58,2492]}],params:['{ "id" : ',{t:2,r:"id",p:[92,114,2548]},', "sheets" : ',{t:2,r:"sheets",p:[92,133,2567]}," }"]},f:["Smelt"]}]}," ",{p:[96,5,2635],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[80,3,2093]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[42,1,1060]}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,84],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,116]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,225],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,256]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,349],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,380]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,514],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,562],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,531]},{t:4,n:51,f:[{p:[19,6,626],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,692],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,722]}]}," ",{p:[22,8,761],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,792]}]}],n:50,r:"data.has_blood",p:[20,7,662]},{t:4,n:51,f:[{p:[24,8,847],t:7,e:"ui-section",f:[{p:[25,9,868],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[14,3,487]},{t:4,n:51,f:[{p:[32,4,1023],t:7,e:"ui-section",f:[{p:[33,5,1040],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1151],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1301],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1357]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1409]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1279]}," ",{p:[47,7,1492],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1554]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1609]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1230]}],button:0},f:[" ",{p:[51,6,1699],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1733]}]}," ",{p:[52,6,1761],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1793]}]}," ",{p:[53,6,1827],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1854]}]}," ",{p:[54,6,1883],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1917]}]}," ",{t:4,f:[{p:[56,7,1966],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2030],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2102]},', "index": ',{t:2,r:"index",p:[58,105,2126]},"}"]},f:[{t:2,r:"name",p:[59,10,2148]}," "]},{p:[60,21,2177],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2003]}]}," ",{p:[63,7,2227],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2258]}]}," ",{p:[64,7,2292],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2320]}]}," ",{p:[65,7,2351],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2383]}]}," ",{p:[66,7,2418],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2455]}]}],n:50,r:"is_adv",p:[55,6,1945]}]}],n:52,r:"data.viruses",p:[39,4,1184]},{t:4,n:51,f:[{p:[70,5,2532],t:7,e:"ui-section",f:[{p:[71,6,2550],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2669],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2735],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2754]}]},f:[{p:[78,7,2771],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2807]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2893]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2704]},{t:4,n:51,f:[{p:[83,5,2985],t:7,e:"ui-section",f:[{p:[84,6,3003],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[37,2,1126]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3142],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3237],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3256]}]},f:[{p:[95,4,3270],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3287]}," ",{t:4,f:[{p:[98,5,3320],t:7,e:"br"}," ",{p:[99,5,3330],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3299]}]}," ",{p:[102,4,3463],t:7,e:"ui-section",f:[{p:[103,5,3480],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3506]}]}," ",{p:[104,5,3533],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3564]}]}," ",{p:[105,5,3596],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3624]}]}," ",{p:[106,5,3653],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3685]}]}," ",{p:[107,5,3718],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3755]}]}]}," ",{p:[109,4,3805],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3851],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3863]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3211]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(483);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1295],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1314]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1358]}],n:50,r:"data.subcategory",p:[48,37,1331]}]},f:[{t:4,f:[{p:[50,3,1410],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1438],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1390]},{t:4,n:51,f:[{p:[54,3,1504],t:7,e:"ui-section",f:[{p:[55,4,1520],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1551],t:7,e:"tr",f:[{p:[57,6,1561],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1602],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1660]}]}]}," ",{p:[62,6,1713],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1754],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1811]}]}]}," ",{p:[67,6,1864],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,1946],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1904]},{t:4,n:51,f:[{p:[73,7,2066],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2191],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2232],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2249]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2391],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2430],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2471],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2532]}]}]}," ",{p:[91,6,2588],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2629],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2690]}]}]}],n:50,r:"data.subcategory",p:[85,5,2400]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2892],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,2909]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2803]}],n:50,r:"config.fancy",p:[99,4,2778]}]}," ",{t:4,f:[{p:[106,5,3039],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3086],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3105]}]},f:[{p:[109,7,3122],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3142]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3250]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3056]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3452],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3471]}]},f:[{p:[117,8,3489],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3509]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3420]}],n:51,r:"data.display_craftable_only",p:[114,5,3382]}]}],n:50,r:"data.display_compact",p:[105,4,3006]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3822],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3841]}]},f:[{t:4,f:[{p:[128,8,3882],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,3924]}]}],n:50,r:"req_text",p:[127,7,3858]}," ",{t:4,f:[{p:[133,8,4007],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4046]}]}],n:50,r:"catalyst_text",p:[132,7,3978]}," ",{t:4,f:[{p:[138,8,4130],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4165]}]}],n:50,r:"tool_text",p:[137,7,4105]}," ",{p:[142,7,4220],t:7,e:"ui-section",f:[{p:[143,8,4240],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4298]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3792]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4471],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4490]}]},f:[{t:4,f:[{p:[153,9,4533],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4576]}]}],n:50,r:"req_text",p:[152,8,4508]}," ",{t:4,f:[{p:[158,9,4663],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4703]}]}],n:50,r:"catalyst_text",p:[157,8,4633]}," ",{t:4,f:[{p:[163,9,4791],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4827]}]}],n:50,r:"tool_text",p:[162,8,4765]}]}],n:52,r:"data.cant_craft",p:[150,6,4439]}],n:51,r:"data.display_craftable_only",p:[149,5,4401]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{341:341,483:483}],436:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:[4,1,110],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,181],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,187]}," kPa"]}]}," ",{p:[8,3,247],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,277],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,290]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,331]}]}]}]}," ",{p:[12,1,419],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,447],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,478],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,495]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,545]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,601]}]}]}," ",{p:[18,3,658],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,693],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,710]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,789]}]}]}," ",{p:[22,3,862],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,903],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,916]}],max:[{t:2,r:"data.max_pressure",p:[23,46,944]}],value:[{t:2,r:"data.target_pressure",p:[24,14,980]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1006]}," kPa"]}]}," ",{p:[26,3,1075],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1119],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1152]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1300],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1331]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1470],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1564],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1594]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1853],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1884]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1826]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2e3],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2030]}]}," ",{p:[46,3,2070],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2103]}," kPa"]}],n:50,r:"data.holding",p:[42,3,1977]},{t:4,n:51,f:[{p:[50,3,2174],t:7,e:"ui-section",f:[{p:[51,4,2190],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{341:341}],437:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(456)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,456:456}],438:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],439:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,167],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,224],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,257],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,274]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,325]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,398]}]}]}],n:50,r:"data.headset",p:[12,3,199]},{t:4,n:51,f:[{p:[19,5,476],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,514],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,531]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,585]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,664]}]}]}," ",{p:[24,5,746],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,781],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,798]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,849]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,922]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1034],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1073],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1090]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1142]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1217]}]}]}],n:50,r:"data.command",p:[30,3,1009]}]}," ",{p:[38,1,1305],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1336],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1399],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1405]}]}],n:50,r:"data.freqlock",p:[40,5,1371]},{t:4,n:51,f:[{p:[43,7,1453],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1492]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1603],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1637]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1749],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1820]}]}," ",{p:[46,7,1860],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1893]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2004],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2042]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2212],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2261],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2278]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2328]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2395]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2176]}," ",{t:4,f:[{p:[57,5,2522],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2598],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2615]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2671]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2746]},'"}']},f:[{t:2,r:"channel",p:[62,11,2772]}]},{p:[62,34,2795],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2558]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2479]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,550],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,583],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,621],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,562]},{t:4,f:[{p:[18,2,712],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,727]}]},f:[{p:[19,3,745],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,772],t:7,e:"techweb"}]}," ",{p:[22,3,794],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,820],t:7,e:"nodeview"}]}," ",{p:[25,3,843],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,871],t:7,e:"designview"}]}," ",{p:[28,3,896],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,937],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,965],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1010],t:7,e:"diskopstech"}]}," ",{p:[34,3,1036],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1076],t:7,e:"destruct"}]}," ",{p:[37,3,1099],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1126],t:7,e:"protolathe"}]}," ",{p:[40,3,1151],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1185],t:7,e:"circuit"}]}," ",{p:[43,3,1207],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1232],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,690]}]},r.exports.components=r.exports.components||{};var i={settings:t(449),circuit:t(441),protolathe:t(447),destruct:t(443),diskopsdesign:t(444),diskopstech:t(445),designview:t(442),nodeview:t(446),techweb:t(450),rdheader:t(448)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,56],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,29]},{t:4,n:51,f:[{p:[5,3,126],t:7,e:"ui-display",f:[{p:[6,4,142],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,254],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,333]},"}"]},f:["Search"]}]}," ",{p:[10,4,389],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,412]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,435]}]}," ",{p:[11,4,475],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,497]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,521]}]}," ",{p:[12,3,561],t:7,e:"ui-display",f:[{p:[14,3,577],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,592]}]},f:[{p:[15,4,617],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,680],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,717]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,809]},'"}']},f:[{t:2,r:"name",p:[17,147,821]}]}],n:52,r:"data.circuitcats",p:[16,5,648]}]}," ",{p:[20,4,869],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,935],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,947]},{t:2,r:"matstring",p:[22,26,955]}," ",{p:[23,7,975],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1008]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1087]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,904]}]}," ",{p:[27,4,1161],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1226],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1238]},{t:2,r:"matstring",p:[29,26,1246]}," ",{p:[30,7,1266],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1299]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1378]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1193]}]}," ",{p:[34,4,1452],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1515],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1527]}," : ",{t:2,r:"amount",p:[36,29,1538]}," cm3 - ",{t:4,f:[{p:[38,7,1586],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1599]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1625]}],"class":"number"}}," ",{p:[39,7,1660],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1737]},', "sheets" : ',{t:2,r:"number",p:[39,107,1760]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1561]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1479]}]}," ",{p:[44,4,1852],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1916],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1928]}," : ",{t:2,r:"amount",p:[46,29,1939]}," - ",{p:[47,7,1959],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2032]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2049]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1879]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2162],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,30],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,49]}]},f:[{p:[3,3,75],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,107]}]}]}," ",{p:[5,2,158],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,233],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,193]}," ",{t:4,f:[{p:[10,4,337],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,297]}," ",{t:4,f:[{p:[13,4,434],t:7,e:"ui-section",a:{title:"Autolathe"}}], +n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,394]}," ",{t:4,f:[{p:[16,4,530],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,490]}," ",{t:4,f:[{p:[19,4,637],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&16"},p:[18,3,596]}," ",{t:4,f:[{p:[22,4,743],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,702]}," ",{t:4,f:[{p:[25,4,843],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,802]}," ",{t:4,f:[{p:[28,4,943],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128"},p:[27,3,901]}]}," ",{p:[31,2,1015],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1084],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1103]}]},f:[{t:2,r:"matamt",p:[33,36,1116]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1048]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1211],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1180]}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,57],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"}}],n:50,r:"data.destroybusy",p:[3,2,30]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,162],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,130]},{t:4,n:51,f:[{p:[9,4,240],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,276],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,301]}]}]}," ",{p:[12,4,356],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,425],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,444]}," | ",{t:2,r:"value",p:[14,36,455]}]},f:[{p:[15,7,473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,491]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,556]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,393]}]}," ",{p:[19,4,652],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,1]},{t:4,n:51,f:[{p:[23,2,733],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,116],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,88]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,213],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,250],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,296]}," blueprints."]}," ",{p:[11,5,345],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,373],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,453],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,484],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,579],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,610],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,703],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,776],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,804]},": ",{t:4,f:[{p:[19,8,848],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,910]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,820]},{t:4,n:51,f:[{p:[21,8,976],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1026]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1043]}]},f:[{t:2,r:"name",p:[21,122,1090]}]}," ",{p:[22,8,1118],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1184]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1201]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,742]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,183]},{t:4,n:51,f:[{p:[28,4,1340],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1382],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1484],t:7,e:"ui-section",f:[{p:[30,17,1496],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1551]},'"}']},f:[{t:2,r:"name",p:[30,82,1561]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1442]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,120],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,92]},{t:4,n:51,f:[{p:[8,3,191],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,231],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,259],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,327],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,397],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,428],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,520],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,551],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,640],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,709],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,757]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,774]}]},f:[{t:2,r:"display_name",p:[15,115,819]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,678]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,28],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,47]}]},f:[{p:[3,3,71],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,116]}]}," ",{p:[4,3,151],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,194]}]}," ",{p:[5,3,229],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,276]}]}," ",{p:[6,3,313],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,362]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,379]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,425]}]}]}," ",{p:[8,2,511],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,579],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,627]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,644]}]},f:[{t:2,r:"display_name",p:[10,114,689]}]}],n:52,r:"data.node_prereqs",p:[9,3,548]}]}," ",{p:[13,2,747],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,809],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,857]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,874]}]},f:[{t:2,r:"display_name",p:[15,114,919]}]}],n:52,r:"data.node_unlocks",p:[14,3,778]}]}," ",{p:[18,2,977],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1039],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1089]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1106]}]},f:[{t:2,r:"name",p:[20,118,1153]}]}],n:52,r:"data.node_designs",p:[19,3,1008]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1239],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1210]}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,32]},{t:4,n:51,f:[{p:[5,3,120],t:7,e:"ui-display",f:[{p:[6,4,136],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,177],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,190]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,248],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,325]},"}"]},f:["Search"]}]}," ",{p:[10,4,381],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,404]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,425]}]}," ",{p:[11,4,463],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,485]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,507]}]}," ",{p:[12,3,545],t:7,e:"ui-display",f:[{p:[14,3,561],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,576]}]},f:[{p:[15,4,601],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,662],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,699]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,781]},'"}']},f:[{t:2,r:"name",p:[17,137,793]}]}],n:52,r:"data.protocats",p:[16,5,632]}]}," ",{p:[20,4,841],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,905],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,917]},{t:2,r:"matstring",p:[22,26,925]}," ",{t:4,f:[{p:[24,8,973],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,986]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1012]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,945]}," ",{p:[26,7,1083],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1116]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1193]},'", "amount" : "',{t:2,r:"number",p:[26,138,1214]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,876]}]}," ",{p:[30,4,1292],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1355],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1367]},{t:2,r:"matstring",p:[32,26,1375]}," ",{t:4,f:[{p:[34,8,1423],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1436]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1462]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1395]}," ",{p:[36,7,1533],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1566]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1643]},'", "amount" : "',{t:2,r:"number",p:[36,138,1664]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1324]}]}," ",{p:[40,4,1742],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1803],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1815]}," : ",{t:2,r:"amount",p:[42,29,1826]}," cm3 - ",{t:4,f:[{p:[44,7,1874],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1887]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1913]}],"class":"number"}}," ",{p:[45,7,1948],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2023]},', "sheets" : ',{t:2,r:"number",p:[45,105,2046]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1849]}]}],n:52,r:"data.protomat_list",p:[41,5,1769]}]}," ",{p:[50,4,2138],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2200],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2212]}," : ",{t:2,r:"amount",p:[52,29,2223]}," - ",{p:[53,7,2243],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2314]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2331]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2165]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2444],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,13],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,65],t:7,e:"br"}," Available Points: ",{p:[3,19,89],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,125]}]}," ",{p:[4,1,170],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,206]}]},f:[{p:[4,47,216],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,229]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,290],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,333]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,44],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,99],t:7,e:"br"}," ",{p:[3,1,105],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,147],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,217]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,305],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,373]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,454],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,526]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,76],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,124]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,141]}]},f:[{t:2,r:"display_name",p:[3,113,186]}]}],n:52,r:"data.techweb_avail",p:[2,2,45]}]}," ",{p:[6,1,240],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,307],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,355]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,372]}]},f:[{t:2,r:"display_name",p:[8,113,417]}]}],n:52,r:"data.techweb_locked",p:[7,2,275]}]}," ",{p:[11,1,472],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,547],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,595]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,612]}]},f:[{t:2,r:"display_name",p:[13,113,657]}]}],n:52,r:"data.techweb_researched",p:[12,2,511]}]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,24],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,201],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,232]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,355],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,389],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,402]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,443]}]}," ",{p:[12,2,489],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,522]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,640],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,739],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,786]}]},{p:[17,71,801],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,702]},{t:4,n:51,f:[{p:[19,9,830],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,674]},{t:4,n:51,f:[{p:[22,7,890],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1020],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1051]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1173],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1241],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1247]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1289]}," Units"]}," ",{p:[33,7,1333],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1384],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1427]}," units of ",{t:2,r:"name",p:[35,87,1462]}]},{p:[35,102,1477],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1345]},{t:4,n:51,f:[{p:[37,9,1506],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1207]},{t:4,n:51,f:[{p:[40,7,1582],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,248]},"-",{t:2,r:"icon_state",p:[6,88,256]}],title:[{t:2,r:"dir_name",p:[6,111,279]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}," ",{t:4,f:[{p:[12,2,395],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,455],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,473]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,569]},"}"]},f:[{t:2,r:"@key",p:[15,55,580]}]}],n:52,r:"data.paint_colors",p:[13,3,424]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,367]},{p:[19,1,636],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,668],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,685]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,792],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,809]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,917],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,934]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1072],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1089]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1043]}]}," ",{p:[31,1,1219],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1250],t:7,e:"ui-section",f:[{p:[33,3,1265],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1282]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1345]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1462],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1479]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1542]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1673]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1736]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1897],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1934],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1952]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2072],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2090]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2210],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2228]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1868]}]}," ",{t:4,f:[{p:[52,2,2411],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2430]}]},f:[{t:4,f:[{p:[54,4,2468],t:7,e:"ui-section",f:[{p:[55,5,2485],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2503]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2583]},', "category": ',{t:2,r:"cat_name",p:[56,56,2611]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2626]}]}]}],n:52,r:"recipes",p:[53,3,2447]}]}],n:52,r:"data.categories",p:[51,1,2384]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,76]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,152]},"}"]},f:[{t:2,r:"color_name",p:[4,45,169]}]}],n:52,r:"data.paint_colors",p:[2,2,28]}]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,239]},".",{t:2,r:"icon_state",p:[6,79,247]},".png"],title:[{t:2,r:"dir_name",p:[6,106,274]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,161],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,201],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,223]}]}," ",{p:[10,9,244],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,265]}]}," ",{p:[11,9,288],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,320],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,363]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,373]}]}]}]}],n:52,r:"data.satellites",p:[7,2,132]}]}," ",{t:4,f:[{p:[18,1,511],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,558],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,579]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,623]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,656]}," %"]}," ",{p:[20,1,739],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,484]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,42]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,94]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,174]},'", "val": ',{t:2,r:"gas_id",p:[3,68,194]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,207]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,196],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,211]}]},f:[{p:[6,2,228],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,250],t:7,e:"status"}]}," ",{p:[9,2,269],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,294],t:7,e:"templates"}]}," ",{p:[12,2,316],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,368],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,344]}," ",{t:4,f:[{p:[17,3,421],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,396]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(458),templates:t(460),status:t(459)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,458:458,459:459,460:460}],458:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,94],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,126]}]}],n:50,r:"data.selected.description",p:[2,3,56]}," ",{t:4,f:[{p:[6,5,219],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,251]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,181]}]}," ",{t:4,f:[{p:[11,3,351],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,388]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,433]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,513]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,470]}," ",{p:[16,5,565],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,633]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,319]},{t:4,f:[{p:[24,3,755],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,722]},{p:[27,1,821],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,875]},'"}']},f:["Preview"]}," ",{p:[31,1,931],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,982]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1053],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{341:341}],459:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,47],t:7,e:"tr",f:[{p:[4,5,56],t:7,e:"td",f:[{p:[5,7,67],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,129]},'"}']},f:["JMP"]}]}," ",{p:[9,5,185],t:7,e:"td",f:[{p:[10,7,196],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,236]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,253]}]},f:["Fly"]}]}," ",{p:[14,5,332],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,343]}," (",{p:[15,17,353],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,359]}]},")"]}," ",{p:[17,5,388],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,399]}]}," ",{p:[20,5,424],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,456]}],n:50,r:"mode",p:[21,7,435]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,508]},") ",{p:[26,9,530],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,578]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,595]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,485]}]}]}],n:52,r:"data.shuttles",p:[2,1,21]}]}]},e.exports=a.extend(r.exports)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,72],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,83]}]},f:[{t:4,f:[{p:[5,9,131],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,150]}]},f:[{t:4,f:[{p:[7,13,203],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,235]}]}],n:50,r:"description",p:[6,11,171]}," ",{t:4,f:[{p:[10,13,324],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,356]}]}],n:50,r:"admin_notes",p:[9,11,292]}," ",{p:[13,11,414],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,486]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,523]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,614]}]}]}],n:52,r:"templates",p:[4,7,103]}]}],n:52,r:"data.templates",p:[2,3,43]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7, +e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{t:4,f:[{p:[35,3,2083],t:7,e:"ui-section",a:{label:"Failing Organs"},f:[{t:4,f:[{p:[37,5,2167],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"name",p:[37,24,2186]}]}],n:52,r:"data.occupant.failing_organs",p:[36,4,2123]}]}],n:50,r:"data.occupant.failing_organs",p:[34,2,2043]}," ",{p:[41,5,2249],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[43,11,2336],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[43,54,2379]}," units of ",{t:2,r:"name",p:[43,89,2414]}]},{p:[43,104,2429],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[42,9,2291]},{t:4,n:51,f:[{p:[45,11,2464],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[50,1,2560],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[51,2,2592],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[52,5,2623],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[52,22,2640]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[52,71,2689]}]}]}," ",{p:[55,3,2756],t:7,e:"ui-section",a:{label:"Synthesize"},f:[{t:4,f:[{p:[57,7,2826],t:7,e:"ui-button",a:{grid:0,state:[{t:2,x:{r:["synth_allowed"],s:'_0?null:"disabled"'},p:[57,30,2849]}],action:"synth",params:['{"chem": "',{t:2,r:"id",p:[57,102,2921]},'"}']},f:[{t:2,r:"name",p:[57,112,2931]}]}],n:52,r:"data.synthchems",p:[56,5,2793]}]}," ",{p:[61,3,2989],t:7,e:"ui-section",a:{label:"Inject"},f:[{p:[62,2,3019],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[63,3,3052],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[64,4,3086],t:7,e:"section",a:{"class":"compressedcell"},f:["Name"]}," ",{p:[68,4,3150],t:7,e:"section",a:{"class":"compressedcell"},f:["Volume"]}," ",{t:4,f:[{p:[73,5,3250],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[74,6,3289],t:7,e:"span",f:["Purity"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[72,4,3216]}," ",{t:4,f:[{p:[79,5,3377],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[78,4,3343]}," ",{t:4,f:[{p:[84,5,3478],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=2"},p:[83,4,3444]}," ",{p:[88,4,3545],t:7,e:"section",a:{"class":"compressedcell"},f:[]}," ",{p:[91,4,3599],t:7,e:"section",a:{"class":"compressedcell"},f:[]}]}," ",{t:4,f:[{p:[96,4,3691],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[97,5,3726],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[98,6,3765],t:7,e:"span",f:[{p:[98,12,3771],t:7,e:"b",f:[{t:2,r:"name",p:[98,15,3774]}]}]}]}," ",{p:[101,5,3817],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[102,6,3871],t:7,e:"span",f:[{t:2,r:"vol",p:[102,12,3877]},"u"]}]}," ",{t:4,f:[{p:[106,6,3953],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[107,7,4008],t:7,e:"span",f:[{t:2,r:"purity",p:[107,13,4014]}]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[105,7,3918]}," ",{t:4,f:[{p:[112,6,4106],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[113,7,4146],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[113,25,4164]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[113,109,4248]},'", "volume": 1}']},f:["1"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[111,5,4071]}," ",{t:4,f:[{p:[118,6,4358],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[119,7,4398],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[119,25,4416]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[119,109,4500]},'", "volume": 5}']},f:["5"]}]}],n:50,x:{r:["adata.efficiency"],s:"_0>=2"},p:[117,5,4322]}," ",{p:[123,5,4574],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[124,6,4613],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[124,24,4631]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[124,108,4715]},'", "volume": 10}']},f:["10"]}]}," ",{p:[127,5,4777],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[128,6,4816],t:7,e:"ui-button",a:{action:"purge",params:['{"chem": "',{t:2,r:"id",p:[128,50,4860]},'"}']},f:["Purge"]},{p:[128,77,4887],t:7,e:"br"}]}]}],n:52,r:"data.chems",p:[95,3,3666]}]}]}," ",{p:[135,3,4968],t:7,e:"ui-section",a:{label:"Capacity"},f:[{p:[136,5,5003],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.tot_capacity",p:[136,24,5022]}],value:[{t:2,r:"data.current_vol",p:[136,54,5052]}],state:[{t:2,r:"data.current_vol",p:[137,12,5086]}]},f:[{t:2,r:"data.current_vol",p:[137,34,5108]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,43]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,65]}],candystripe:0,right:0},f:[{p:[3,5,103],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,130],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,143]}]},f:[{t:2,r:"status",p:[3,132,230]}]}]}," ",{p:[4,5,265],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,291]}]}," ",{p:[5,5,324],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,353]}]}," ",{p:[7,5,380],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,404]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,464]},'"}']},f:[{t:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,482]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,554]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,79],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,96]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,144]}]}],n:50,r:"data.isdryer",p:[4,3,59]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,252],t:7,e:"ui-notice",f:[{p:[8,5,268],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,294]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,216]},{t:4,n:51,f:[{p:[11,1,349],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,380],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,413],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,467],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,525],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,589]}],n:50,r:"data.verb",p:[20,5,572]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,680],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,713],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,740]}]}," ",{p:[28,4,766],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,807]}]}," ",{p:[31,4,835],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,878],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,915],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,943],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,982]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1039]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1114],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1142],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1181]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1237]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,654]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,640],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,671],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,710],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,743]}],state:[{t:2,r:"capacityPercentState",p:[26,71,776]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,802]},"%"]}]}]}," ",{p:[29,1,880],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,909],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,946],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,963]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1015]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1082]}]},"   [",{p:[34,6,1149],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1162]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1178]}]},"]"]}," ",{p:[36,3,1300],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1338],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1359]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1390]}]},f:[{t:2,r:"adata.inputLevel_text",p:[37,78,1411]}]}]}," ",{p:[39,3,1463],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1501],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1540]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1634],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1668]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1763],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1852],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1885]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,1996],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2034]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2159],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2192],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2198]}]}]}]}," ",{p:[50,1,2259],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2289],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2326],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2343]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2398]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2467]}]},"   [",{p:[55,6,2533],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2546]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2563]}]},"]"]}," ",{p:[57,3,2668],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2707],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2728]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2760]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2782]}]}]}," ",{p:[60,3,2835],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2874],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2913]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3009],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3043]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3140],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3230],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3263]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3377],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3415]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3543],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3577],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3583]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,32],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,71],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,101],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,118]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,170]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,218]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,280]}]}]}," ",{p:[10,3,345],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,391],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,437],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,467]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,520]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,622],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,652]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,705]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,807],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,837]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,890]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,992],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1022]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1075]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1178],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1208]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1261]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1392],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1456],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1462]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1502]}," Units"]}," ",{p:[22,6,1543],t:7,e:"br"}," ",{p:[23,5,1553],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1599],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1642]}," units of ",{t:2,r:"name",p:[25,85,1677]}]},{p:[25,100,1692],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1564]}],n:50,r:"data.isTankLoaded",p:[20,4,1425]},{t:4,n:51,f:[{p:[28,6,1730],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1780],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1797]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1851]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1905]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1967]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1507],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1602],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1690],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1776],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1869],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2051],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2130],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2169],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2182]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2227]},"Found"]}]}," ",{p:[43,2,2296],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2345]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2389]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,84],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,115]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,60]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,220],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,251],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,268]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,318]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,358]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,422]}]}]}," ",{p:[12,3,479],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,541],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,574]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,595]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,509]},{t:4,n:51,f:[{p:[16,4,652],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,725],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,759],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,802],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,808]},"°C"]}]}," ",{p:[24,2,871],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,913],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,919]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1004],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1045],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1084]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1189],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1223]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1327],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1419],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1452]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1555],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1593]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,982]}," ",{p:[36,3,1719],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1771],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1810]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1918],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1959]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2067],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2101]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1747]},{t:4,n:51,f:[{p:[42,4,2217],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2223]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],468:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,30],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,49]}," Alarms"]},f:[{p:[3,5,72],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,103],t:7,e:"li",f:[{t:2,r:".",p:[5,13,107]}]}],n:52,r:".",p:[4,7,83]},{t:4,n:51,f:[{p:[7,9,141],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,41],t:7,e:"ui-notice",f:[{p:[3,5,57],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,173],t:7,e:"ui-notice",f:[{p:[8,5,189],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,148]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,357],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,374]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,425]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,339]}," ",{t:4,f:[{p:[14,27,506],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,523]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,577]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,486]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,676],t:7,e:"ui-notice",f:[{p:[18,9,696],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,650]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,773],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,811],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,828]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,875]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,970]}]}]}," ",{p:[25,9,1039],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1075],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1092]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1138]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1229]}]}]}," ",{p:[29,9,1296],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1349]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1395]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1486]}]}]}," ",{p:[33,9,1553],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1592],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1609]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1658]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1755]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1836],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1869]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{341:341}],471:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,17],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,55],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,72]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,120]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,193]},")"]}," ",{p:[5,9,243],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,260]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,308]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,381]},")"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],472:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,282],t:7,e:"ui-notice",f:[{p:[15,3,296],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,316]}," connected to a mask."]}]}," ",{p:[17,1,393],t:7,e:"ui-display",f:[{p:[18,3,408],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,449],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,483]}],state:[{t:2,r:"tankPressureState",p:[20,16,521]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,544]}," kPa"]}]}," ",{p:[22,3,610],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,652],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,665]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,699]}],value:[{t:2,r:"data.releasePressure",p:[24,14,741]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,767]}," kPa"]}]}," ",{p:[26,3,836],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,880],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,913]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1067],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1098]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1243],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1337],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1367]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],473:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,32],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,73],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,79]}," K"]}]}," ",{p:[5,5,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,185],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,191]}," kPa"]}]}]}," ",{p:[9,1,268],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,302],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,337],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,354]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,398]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,458]}]}]}," ",{p:[14,5,518],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,566],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,605]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,717],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,751]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,862],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,932]}]}," ",{p:[20,9,984],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1017]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1127],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1165]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],474:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,161], +t:7,e:"ui-notice",f:[{p:[14,2,174],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,207],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,236],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,340],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,381],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,434],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,411]},{t:4,n:51,f:[{p:[25,4,480],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,493]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,522]}]}],r:"data.broken"}," ",{p:[27,3,630],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,659],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,712]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,736]}]},f:["On"]}," ",{p:[29,4,789],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,839]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,863]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,958],t:7,e:"br"}," [ ",{p:[33,6,968],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,925]}," ",{t:4,f:[{p:[36,4,1062],t:7,e:"br"}," [ ",{p:[37,6,1072],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1032]}]}]}," ",{p:[41,1,1160],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1189],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1226],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1232]}," RPM"]}]}," ",{p:[45,2,1293],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1330],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1336]}," K"]}]}," ",{p:[48,2,1396],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1435],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1441]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,460],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,432]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,543],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,587],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,600]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,644]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,734],t:7,e:"ui-display",f:[{p:[32,2,748],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,797]},'"}']},f:[{t:2,r:"name",p:[32,63,809]}]}," ",{t:4,f:[{p:[34,4,850],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,869]}],candystripe:0,right:0},f:[{p:[35,3,900],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,920]},": ",{t:2,r:"desc",p:[35,33,930]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,971]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1129]},'", "item": ',{t:2,r:"name",p:[37,63,1152]},', "cost": ',{t:2,r:"cost",p:[37,81,1170]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[38,43,1223]}," TC"]}]}],n:52,r:"items",p:[33,2,831]}]}],n:52,r:"data.categories",p:[30,1,706]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{t:4,f:[{p:[26,5,586],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[27,6,620]}]}," ",{p:[29,5,670],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[30,6,704],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[30,27,725]}],value:[{t:2,r:"adata.vr_avatar.health",p:[30,65,763]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[30,100,798]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[30,141,839]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[30,180,878]}]}]}],n:50,r:"data.isliving",p:[25,4,559]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[35,3,979],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[39,2,1075],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[40,3,1111],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[40,20,1128]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[41,4,1195]}," the VR Sleeper"]}," ",{t:4,f:[{p:[44,4,1297],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[43,3,1269]}," ",{t:4,f:[{p:[49,4,1420],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[48,3,1393]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],477:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,40],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,59]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,68]}],labelcolor:[{t:2,r:"color",p:[3,80,115]}],candystripe:0,right:0},f:[{p:[4,7,151],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,192]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,205]}]}," ",{p:[5,7,248],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,291]},'"}']},f:["Pulse"]}," ",{p:[6,7,328],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,372]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,385]}]}]}],n:52,r:"data.wires",p:[2,3,15]}]}," ",{t:4,f:[{p:[11,3,498],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,543],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,555]}]}],n:52,r:"data.status",p:[12,5,515]}]}],n:50,r:"data.status",p:[10,1,476]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(479),i=e.interopRequireDefault(r),o=t(480),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(484)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(481),text:t(485),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,327:327,328:328,329:329,330:330,331:331,341:341,479:479,480:480,481:481,484:484,485:485,"babel/external-helpers":"babel/external-helpers"}],479:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(480),a=t(482);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),gps:t(397),gulag_console:t(398),gulag_item_reclaimer:t(399),holodeck:t(400),implantchair:t(401),intellicard:t(402),keycard_auth:t(403),labor_claim_console:t(404),language_menu:t(405),launchpad_remote:t(406),mech_bay_power_console:t(407),mulebot:t(408),nanite_chamber_control:t(409),nanite_cloud_control:t(410),nanite_program_hub:t(411),nanite_programmer:t(412),nanite_remote:t(413),notificationpanel:t(414),ntnet_relay:t(415),ntos_ai_restorer:t(416),ntos_card:t(417),ntos_configuration:t(418),ntos_file_manager:t(419),ntos_main:t(420),ntos_net_chat:t(421),ntos_net_dos:t(422),ntos_net_downloader:t(423),ntos_net_monitor:t(424),ntos_net_transfer:t(425),ntos_power_monitor:t(426),ntos_revelation:t(427),ntos_station_alert:t(428),ntos_supermatter_monitor:t(429),ntosheader:t(430),nuclear_bomb:t(431),operating_computer:t(432),ore_redemption_machine:t(433),pandemic:t(434),personal_crafting:t(435),portable_pump:t(436),portable_scrubber:t(437),power_monitor:t(438),radio:t(439),rdconsole:t(440),"rdconsole/circuit":t(441),"rdconsole/designview":t(442),"rdconsole/destruct":t(443),"rdconsole/diskopsdesign":t(444),"rdconsole/diskopstech":t(445),"rdconsole/nodeview":t(446),"rdconsole/protolathe":t(447),"rdconsole/rdheader":t(448),"rdconsole/settings":t(449),"rdconsole/techweb":t(450),reagentgrinder:t(451),rpd:t(452),"rpd/colorsel":t(453),"rpd/dirsel":t(454),sat_control:t(455),scrubbing_types:t(456),shuttle_manipulator:t(457),"shuttle_manipulator/modification":t(458),"shuttle_manipulator/status":t(459),"shuttle_manipulator/templates":t(460),sleeper:t(461),slime_swap_body:t(462),smartvend:t(463),smes:t(464),smoke_machine:t(465),solar_control:t(466),space_heater:t(467),spawners_menu:t(468),station_alert:t(469),suit_storage_unit:t(470),tank_dispenser:t(471),tanks:t(472),thermomachine:t(473),turbine_computer:t(474),uplink:t(475),vr_sleeper:t(476),wires:t(477)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1819],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1829]}]}," ",{p:[57,1,1859],t:7,e:"main",f:[{p:[58,3,1868],t:7,e:"warnings"}," ",{p:[59,3,1882],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1929],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1903]}]},r.exports.components=r.exports.components||{};var i={warnings:t(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,480:480,482:482}],480:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],481:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],482:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(480)},{480:480}],483:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],484:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],485:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(p){r("throw",p)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(p){return void n(p)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e - component.exports = { - computed: { - seclevelState () { - switch (this.get('data.seclevel')) { - case 'blue': return 'average' - case 'red': return 'bad' - case 'delta': return 'bad bold' - default: return 'good' - } - } - } - } - - - - - {{text.titleCase(data.seclevel)}} - - - - {{data.alarm ? "Reset" : "Activate"}} - - {{#if data.emagged}} - - Safety measures offline. Device may exhibit abnormal behavior. - - {{/if}} -