diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm
index b63271c611d..6a209e43c05 100644
--- a/_maps/map_files/generic/Lavaland.dmm
+++ b/_maps/map_files/generic/Lavaland.dmm
@@ -74,13 +74,6 @@
"an" = (
/turf/simulated/mineral/random/labormineral/volcanic,
/area/lavaland/surface/outdoors)
-"ao" = (
-/obj/machinery/computer/shuttle/labor/one_way{
- dir = 4
- },
-/obj/effect/decal/cleanable/cobweb,
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
"ap" = (
/obj/effect/spawner/window/reinforced,
/turf/simulated/floor/plating,
@@ -94,12 +87,9 @@
dir = 4;
network = list("Labor Camp")
},
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/plasteel/white,
-/area/mine/laborcamp)
-"as" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
/turf/simulated/floor/plasteel/white,
/area/mine/laborcamp)
"at" = (
@@ -108,6 +98,9 @@
},
/obj/structure/curtain/open/shower,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/simulated/floor/plasteel/white,
/area/mine/laborcamp)
"au" = (
@@ -135,14 +128,15 @@
},
/area/mine/laborcamp)
"aw" = (
-/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
+/obj/machinery/computer/shuttle/labor{
+ dir = 4
+ },
+/turf/simulated/floor/mineral/plastitanium/red,
+/area/shuttle/siberia)
"ax" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plasteel/white,
/area/mine/laborcamp)
"ay" = (
@@ -164,7 +158,7 @@
name = "custom placement";
pixel_y = -22
},
-/obj/machinery/atmospherics/unary/vent_pump/on{
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
/obj/machinery/camera{
@@ -227,36 +221,28 @@
/turf/simulated/floor/plasteel,
/area/mine/eva)
"aJ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
-"aK" = (
-/obj/machinery/camera{
- c_tag = "Labor Camp Infirmary";
- network = list("Labor Camp")
- },
-/obj/effect/decal/cleanable/cobweb,
-/obj/machinery/alarm{
- dir = 4;
- name = "custom placement";
- pixel_x = -23
- },
-/turf/simulated/floor/plasteel{
- icon_state = "barber"
- },
-/area/mine/laborcamp)
-"aL" = (
-/obj/machinery/door/airlock/medical/glass{
- name = "Infirmary"
- },
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/plasteel/white,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
+"aK" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm{
+ name = "north bump";
+ pixel_y = 24
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"aM" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/loading_area{
@@ -274,27 +260,19 @@
/turf/simulated/floor/plasteel,
/area/mine/production)
"aP" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/ancient,
/turf/simulated/floor/plasteel{
- icon_state = "barber"
+ dir = 4;
+ icon_state = "darkred"
},
-/area/mine/laborcamp)
+/area/mine/laborcamp/security)
"aQ" = (
/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/vending/wallmed{
- pixel_y = -30
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/item/stack/medical/bruise_pack/advanced,
-/obj/item/stack/medical/bruise_pack/advanced,
+/obj/machinery/recharger,
/turf/simulated/floor/plasteel{
- icon_state = "barber"
+ dir = 8;
+ icon_state = "darkred"
},
-/area/mine/laborcamp)
+/area/mine/laborcamp/security)
"aS" = (
/obj/machinery/mineral/ore_redemption/labor,
/turf/simulated/floor/plasteel{
@@ -308,11 +286,12 @@
/area/lavaland/surface/outdoors/explored)
"aU" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8;
+ initialize_directions = 11
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
@@ -353,39 +332,56 @@
/turf/simulated/floor/carpet,
/area/mine/living_quarters)
"aZ" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/door_control{
- id = "Labor";
- name = "Labor Camp Lockdown";
- pixel_y = 25;
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
+"ba" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Security";
req_access_txt = "2"
},
-/obj/machinery/flasher_button{
- id = "labor";
- pixel_y = 34
- },
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
-"ba" = (
/obj/machinery/door/poddoor/preopen{
id_tag = "Labor";
name = "labor camp blast door"
},
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Shuttle Cockpit";
- req_access_txt = "2"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkfull"
+ },
+/area/mine/laborcamp/security)
"bb" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8;
- initialize_directions = 11
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"be" = (
@@ -409,16 +405,10 @@
/area/mine/eva)
"bh" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/machinery/recharger,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "darkred"
+ icon_state = "barber"
},
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"bi" = (
/obj/machinery/light/small{
dir = 4
@@ -435,24 +425,12 @@
},
/turf/simulated/floor/carpet,
/area/mine/living_quarters)
-"bj" = (
-/obj/machinery/status_display{
- pixel_y = 32
- },
-/turf/simulated/floor/plasteel{
- dir = 9;
- icon_state = "brown"
- },
-/area/mine/laborcamp)
"bk" = (
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"bl" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/arrows,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/obj/machinery/requests_console{
department = "Labor Camp";
pixel_y = -32
@@ -462,11 +440,10 @@
},
/area/mine/laborcamp)
"bm" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
/obj/machinery/cryopod,
+/obj/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "brown"
@@ -474,9 +451,6 @@
/area/mine/laborcamp)
"bn" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/turf/simulated/floor/plasteel{
icon_state = "browncorner"
},
@@ -564,11 +538,15 @@
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"by" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plasteel{
icon_state = "brown"
},
@@ -577,6 +555,10 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/machinery/light_switch{
+ name = "custom placement";
+ pixel_y = 25
+ },
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"bA" = (
@@ -699,16 +681,12 @@
},
/area/mine/eva)
"bL" = (
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Monitoring";
- req_access_txt = "2"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/medical/glass{
+ name = "Infirmary"
+ },
/turf/simulated/floor/plasteel/dark,
/area/mine/laborcamp)
"bM" = (
@@ -850,100 +828,62 @@
/turf/simulated/floor/plasteel,
/area/mine/eva)
"bZ" = (
-/obj/machinery/alarm{
- dir = 4;
- name = "custom placement";
- pixel_x = -23
+/obj/machinery/vending/wallmed{
+ pixel_y = 32
},
-/obj/effect/decal/cleanable/cobweb,
-/obj/machinery/computer/prisoner{
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "barber"
+ },
+/area/mine/laborcamp)
+"ca" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = 24
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "barber"
+ },
+/area/mine/laborcamp)
+"cb" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/plasteel{
- icon_state = "darkredcorners"
- },
-/area/mine/laborcamp/security)
-"ca" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/chair{
dir = 8
},
/obj/machinery/light/small{
dir = 1
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/obj/machinery/firealarm{
- name = "north bump";
- pixel_y = 24
- },
/turf/simulated/floor/plasteel{
- icon_state = "darkred"
+ icon_state = "barber"
},
-/area/mine/laborcamp/security)
-"cb" = (
-/obj/machinery/light_switch{
- name = "custom placement";
- pixel_y = 25
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/item/cigbutt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/area/mine/laborcamp)
+"cc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/plasteel{
- icon_state = "darkred"
- },
-/area/mine/laborcamp/security)
-"cc" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/mob/living/simple_animal/bot/secbot/beepsky{
- desc = "Powered by the tears and sweat of laborers.";
- name = "Prison Ofitser"
- },
/turf/simulated/floor/plasteel{
- icon_state = "darkred"
+ icon_state = "barber"
},
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"cd" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/pen,
-/obj/machinery/power/apc{
- dir = 4;
- name = "Labor Camp Security APC";
- pixel_x = 24
- },
-/obj/machinery/camera{
- c_tag = "Labor Camp Monitoring";
- network = list("Labor Camp")
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "darkredcorners"
+ icon_state = "barber"
},
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"ce" = (
/obj/machinery/power/smes{
charge = 5e+006
@@ -966,15 +906,13 @@
/turf/simulated/floor/plating,
/area/mine/laborcamp)
"ci" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/chair{
- dir = 4
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "darkred"
+ icon_state = "barber"
},
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"cj" = (
/obj/machinery/door/airlock/external{
frequency = 1379;
@@ -1097,6 +1035,9 @@
/area/mine/production)
"cy" = (
/obj/effect/baseturf_helper/lava_land/surface,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"cz" = (
@@ -1111,16 +1052,16 @@
/area/mine/laborcamp)
"cA" = (
/obj/structure/cable{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8";
- tag = ""
+ icon_state = "4-8"
},
/turf/simulated/floor/plating,
/area/mine/laborcamp)
"cB" = (
/obj/effect/decal/cleanable/cobweb2,
/obj/machinery/atmospherics/portable/canister/air,
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = 24
+ },
/turf/simulated/floor/plating,
/area/mine/laborcamp)
"cC" = (
@@ -1128,7 +1069,6 @@
anchored = 1
},
/obj/structure/cable{
- d2 = 8;
icon_state = "0-8"
},
/turf/simulated/floor/plating,
@@ -2833,14 +2773,17 @@
},
/area/mine/living_quarters)
"gu" = (
-/obj/machinery/door/airlock/external{
- id_tag = "laborcamp_away";
- name = "Labor Camp Airlock";
- req_access_txt = "2"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/structure/fans/tiny,
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"gv" = (
/obj/machinery/door/airlock/external{
glass = 1;
@@ -3030,10 +2973,6 @@
/turf/simulated/floor/indestructible/boss,
/area/lavaland/surface/outdoors)
"hj" = (
-/obj/machinery/flasher{
- id = "gulagshuttleflasher";
- pixel_x = 25
- },
/obj/machinery/light{
dir = 4
},
@@ -3050,18 +2989,13 @@
/area/lavaland/surface/outdoors)
"hv" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4
- },
-/obj/machinery/alarm{
- dir = 1;
- name = "custom placement";
- pixel_y = -22
- },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
/obj/machinery/light/small,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkred"
@@ -3100,18 +3034,16 @@
/turf/simulated/floor/indestructible/boss,
/area/lavaland/surface/outdoors)
"hQ" = (
-/obj/machinery/door/airlock/external{
- id_tag = "laborcamp_away";
- name = "Labor Camp Airlock";
- req_access_txt = null;
- req_one_access_txt = null
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = -28
},
-/obj/structure/fans/tiny,
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"ic" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/cigbutt,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/plasteel{
dir = 4;
@@ -3167,6 +3099,12 @@
/obj/structure/stone_tile/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
+"iB" = (
+/obj/machinery/mineral/labor_prisoner_shuttle_console{
+ pixel_y = 32
+ },
+/turf/simulated/floor/mineral/titanium,
+/area/shuttle/siberia)
"iC" = (
/obj/structure/stone_tile/block{
dir = 1
@@ -3213,9 +3151,6 @@
"jf" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/arrows,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/obj/machinery/mineral/labor_points_checker{
pixel_y = -32
},
@@ -3273,6 +3208,16 @@
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
+"jn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"jp" = (
/obj/machinery/camera{
c_tag = "Labor Camp Breakroom";
@@ -3698,11 +3643,26 @@
},
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
+"mi" = (
+/obj/machinery/computer/security{
+ dir = 4;
+ network = list("Labor Camp")
+ },
+/obj/machinery/alarm{
+ dir = 4;
+ name = "custom placement";
+ pixel_x = -23
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"mj" = (
/obj/item/clothing/under/color/orange,
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/area/lavaland/surface/outdoors/explored)
"mk" = (
/obj/structure/stone_tile/block/cracked{
dir = 8
@@ -4068,13 +4028,6 @@
},
/turf/simulated/floor/indestructible/boss,
/area/lavaland/surface/outdoors)
-"nT" = (
-/obj/machinery/mineral/stacking_machine/laborstacker{
- input_dir = 2;
- output_dir = 1
- },
-/turf/simulated/floor/plasteel/dark,
-/area/shuttle/siberia)
"on" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -4084,6 +4037,10 @@
},
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
+"op" = (
+/obj/structure/closet/secure_closet/brig/gulag,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"oA" = (
/obj/effect/decal/cleanable/cobweb2,
/obj/machinery/atmospherics/unary/tank/air{
@@ -4110,12 +4067,14 @@
/turf/simulated/floor/mineral/titanium,
/area/shuttle/siberia)
"pt" = (
-/obj/machinery/mineral/labor_claim_console{
- pixel_x = 30;
- pixel_y = 30
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = -28
},
-/turf/simulated/floor/mineral/plastitanium/red,
-/area/shuttle/siberia)
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkredcorners"
+ },
+/area/mine/laborcamp/security)
"qw" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/cigbutt,
@@ -4140,16 +4099,15 @@
icon_state = "brown"
},
/area/mine/laborcamp)
-"qL" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 1
- },
-/turf/simulated/floor/mineral/plastitanium/red,
-/area/shuttle/siberia)
"qT" = (
/obj/effect/spawner/random_spawners/wall_rusted_always,
/turf/simulated/wall,
/area/mine/laborcamp)
+"rd" = (
+/obj/structure/closet/secure_closet/brig/gulag,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"rj" = (
/obj/structure/chair{
dir = 8
@@ -4196,6 +4154,13 @@
},
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
+"sv" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/closet/secure_closet/brig/gulag,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"sF" = (
/obj/machinery/door/airlock,
/turf/simulated/floor/plasteel/white,
@@ -4208,37 +4173,29 @@
/area/mine/living_quarters)
"sO" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/security{
- dir = 4;
- network = list("Labor Camp")
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/turf/simulated/floor/plasteel{
- dir = 4;
- icon_state = "darkredcorners"
- },
-/area/mine/laborcamp/security)
-"sP" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 1
- },
+/obj/structure/table,
+/obj/item/storage/firstaid/ancient,
+/obj/item/stack/medical/bruise_pack/advanced,
/turf/simulated/floor/plasteel{
icon_state = "barber"
},
/area/mine/laborcamp)
+"sP" = (
+/obj/machinery/computer/secure_data{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkredcorners"
+ },
+/area/mine/laborcamp/security)
"sR" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+ dir = 6
},
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
@@ -4249,10 +4206,6 @@
"tj" = (
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
-"ty" = (
-/obj/structure/lattice/catwalk,
-/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors/explored)
"tC" = (
/obj/machinery/camera{
@@ -4275,7 +4228,12 @@
/turf/simulated/floor/plasteel/freezer,
/area/mine/living_quarters)
"tJ" = (
-/obj/machinery/light/small,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
icon_state = "brown"
},
@@ -4289,6 +4247,9 @@
/obj/machinery/atmospherics/pipe/manifold/visible/cyan{
dir = 1
},
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = 24
+ },
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"tZ" = (
@@ -4306,24 +4267,51 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = 24
+ },
/turf/simulated/floor/wood{
icon_state = "wood-broken6"
},
/area/mine/laborcamp)
"ug" = (
/obj/item/cigbutt,
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "brown"
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"uL" = (
+/obj/effect/spawner/window/reinforced,
/obj/machinery/flasher{
id = "labor"
},
-/obj/effect/spawner/window/reinforced,
/turf/simulated/floor/plating,
/area/mine/laborcamp)
+"vf" = (
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "Labor Camp Security APC";
+ pixel_y = -24
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"vk" = (
/obj/machinery/door/airlock/titanium{
name = "Labor Shuttle Airlock";
@@ -4341,6 +4329,9 @@
/obj/item/lighter/random{
pixel_x = 2
},
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = 24
+ },
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkred"
@@ -4358,6 +4349,13 @@
icon_state = "darkred"
},
/area/mine/laborcamp)
+"vK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"vZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -4382,7 +4380,7 @@
"wD" = (
/obj/effect/decal/remains/human,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/area/lavaland/surface/outdoors/explored)
"wP" = (
/obj/structure/shuttle/engine/heater,
/obj/structure/window/reinforced{
@@ -4394,7 +4392,15 @@
"wY" = (
/obj/item/clothing/mask/gas/clown_hat,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/area/lavaland/surface/outdoors/explored)
+"xh" = (
+/obj/machinery/computer/prisoner{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners"
+ },
+/area/mine/laborcamp/security)
"xo" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/simulated/floor/plating/airless,
@@ -4403,7 +4409,6 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "brown"
@@ -4418,14 +4423,6 @@
"xC" = (
/turf/simulated/wall/mineral/titanium,
/area/shuttle/mining)
-"xL" = (
-/obj/machinery/atmospherics/unary/outlet_injector/on{
- dir = 4;
- name = "scrubber outlet"
- },
-/obj/structure/lattice/catwalk,
-/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/laborcamp/security)
"xM" = (
/obj/structure/ore_box,
/obj/machinery/light/small{
@@ -4443,11 +4440,19 @@
"ym" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/item/cigbutt,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkred"
},
/area/mine/laborcamp)
+"yw" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"yR" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
@@ -4479,6 +4484,33 @@
},
/turf/simulated/floor/plasteel,
/area/mine/production)
+"zY" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Labor Camp Lockers";
+ network = list("Labor Camp");
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
+"Ab" = (
+/obj/machinery/light_switch{
+ name = "custom placement";
+ pixel_y = 25
+ },
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = 1;
+ pixel_y = 9
+ },
+/obj/item/pen,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"AB" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -4496,6 +4528,12 @@
},
/turf/simulated/wall,
/area/mine/living_quarters)
+"BP" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/floor/mineral/plastitanium/red,
+/area/shuttle/siberia)
"BT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -4508,39 +4546,54 @@
},
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
-"BY" = (
-/obj/machinery/computer/shuttle/labor,
-/turf/simulated/floor/mineral/plastitanium/red,
-/area/shuttle/siberia)
+"Ca" = (
+/obj/machinery/vending/cola/free,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp)
"Cf" = (
/turf/simulated/floor/mineral/titanium,
/area/shuttle/mining)
"Cy" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 10;
- icon_state = "brown"
+/obj/machinery/door/airlock{
+ name = "Labor Camp Prisoner Lockers"
},
+/obj/machinery/door/poddoor/preopen{
+ id_tag = "Labor";
+ name = "labor camp blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"CF" = (
/obj/structure/closet/crate,
/turf/simulated/floor/mineral/titanium/blue,
/area/shuttle/mining)
+"CI" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/bot/secbot/beepsky{
+ desc = "Powered by the tears and sweat of laborers.";
+ name = "Prison Ofitser"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkfull"
+ },
+/area/mine/laborcamp/security)
"CK" = (
/obj/structure/closet/crate,
/turf/simulated/floor/mineral/titanium,
/area/shuttle/siberia)
-"CT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "brown"
- },
-/area/mine/laborcamp)
"Dd" = (
/obj/structure/toilet,
/obj/effect/decal/cleanable/vomit,
@@ -4559,14 +4612,29 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
+/obj/item/radio/intercom/locked/prison{
+ pixel_y = 24
+ },
/turf/simulated/floor/wood{
icon_state = "wood-broken6"
},
/area/mine/laborcamp)
+"Dm" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
+"DT" = (
+/obj/machinery/computer/shuttle/labor/one_way,
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"DX" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
},
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
@@ -4585,16 +4653,14 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/wall,
/area/mine/living_quarters)
-"Eq" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+"EF" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/obj/item/cigbutt,
/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "brown"
+ dir = 1;
+ icon_state = "darkfull"
},
-/area/mine/laborcamp)
+/area/mine/laborcamp/security)
"EG" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4667,47 +4733,44 @@
/obj/item/clothing/shoes/orange,
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/area/lavaland/surface/outdoors/explored)
+"Hc" = (
+/obj/machinery/door/airlock/external{
+ id_tag = "laborcamp_away";
+ name = "Labor Camp Airlock";
+ req_access_txt = "2"
+ },
+/obj/structure/fans/tiny,
+/turf/simulated/floor/plating,
+/area/mine/laborcamp/security)
"Hi" = (
/obj/structure/bedsheetbin,
/obj/structure/table,
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
-"Hj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
"HA" = (
/obj/machinery/atmospherics/binary/pump/on,
/turf/simulated/floor/plasteel{
icon_state = "brown"
},
/area/mine/laborcamp)
-"HJ" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "brown"
- },
-/area/mine/laborcamp)
"HK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
+/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "brown"
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
},
+/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
+"HN" = (
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Security";
+ req_access_txt = "2"
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp/security)
"Ia" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -4715,7 +4778,10 @@
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"Il" = (
-/obj/machinery/vending/cola/free,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/item/trash/sosjerky,
/turf/simulated/floor/plasteel/dark,
/area/mine/laborcamp)
"Iv" = (
@@ -4725,6 +4791,13 @@
},
/turf/simulated/floor/mineral/titanium/blue,
/area/shuttle/mining)
+"IF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"IK" = (
/obj/structure/toilet{
dir = 8
@@ -4779,7 +4852,7 @@
/area/mine/laborcamp)
"JV" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/vending/sustenance,
+/obj/item/cigbutt,
/turf/simulated/floor/plasteel/dark,
/area/mine/laborcamp)
"JX" = (
@@ -4817,19 +4890,20 @@
/turf/simulated/floor/plasteel/white,
/area/mine/laborcamp)
"KR" = (
-/obj/machinery/mineral/labor_claim_console{
- machinedir = 1;
- pixel_x = 30
+/obj/machinery/flasher{
+ id = "gulagshuttleflasher";
+ pixel_x = 25
},
/turf/simulated/floor/mineral/titanium,
/area/shuttle/siberia)
"Lz" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 8
+/obj/machinery/atmospherics/unary/outlet_injector/on{
+ dir = 4;
+ name = "scrubber outlet"
},
/obj/structure/lattice/catwalk,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"LO" = (
/obj/effect/spawner/window,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -4854,11 +4928,11 @@
},
/area/mine/laborcamp)
"ME" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
/turf/simulated/floor/plasteel{
dir = 9;
@@ -4869,8 +4943,9 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
@@ -4880,7 +4955,7 @@
dir = 8
},
/turf/simulated/floor/plating,
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"Nj" = (
/obj/machinery/door/airlock{
name = "Restroom"
@@ -4907,9 +4982,6 @@
/obj/structure/mirror{
pixel_x = -28
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
/turf/simulated/floor/plasteel/white,
/area/mine/laborcamp)
"NP" = (
@@ -4933,11 +5005,65 @@
icon_state = "brown"
},
/area/mine/laborcamp)
+"Ov" = (
+/obj/machinery/camera{
+ c_tag = "Labor Camp Monitoring";
+ network = list("Labor Camp");
+ dir = 6
+ },
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
+"OE" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"OF" = (
/obj/item/card/id/prisoner/random,
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/area/lavaland/surface/outdoors/explored)
+"OU" = (
+/obj/machinery/door_control{
+ id = "Labor";
+ name = "Labor Camp Lockdown";
+ pixel_y = -25;
+ req_access_txt = "2"
+ },
+/obj/machinery/flasher_button{
+ id = "labor";
+ pixel_y = -34
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkredcorners"
+ },
+/area/mine/laborcamp/security)
+"PK" = (
+/obj/structure/closet/secure_closet/brig/gulag,
+/obj/machinery/flasher{
+ id = "labor";
+ pixel_y = 32
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"PQ" = (
/obj/effect/spawner/window,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -4946,13 +5072,16 @@
"PX" = (
/turf/simulated/wall,
/area/mine/laborcamp/security)
+"Ql" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"QE" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/alarm{
dir = 4;
name = "custom placement";
@@ -4963,6 +5092,15 @@
icon_state = "brown"
},
/area/mine/laborcamp)
+"QR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"Rd" = (
/obj/structure/rack,
/obj/item/storage/bag/ore,
@@ -4971,13 +5109,13 @@
/obj/item/mining_scanner,
/obj/effect/decal/cleanable/dirt,
/obj/item/clothing/mask/breath,
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
/obj/item/clothing/head/beanie/orange,
/obj/item/clothing/gloves/fingerless,
/obj/item/clothing/shoes/workboots,
/obj/item/clothing/suit/storage/hazardvest,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "brown"
@@ -5003,14 +5141,6 @@
icon_state = "brown"
},
/area/mine/laborcamp)
-"Tj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/camera{
- c_tag = "Labor Camp Central";
- network = list("Labor Camp")
- },
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
"Tk" = (
/obj/machinery/camera{
c_tag = "Labor Camp Bedroom 1";
@@ -5049,6 +5179,16 @@
},
/turf/simulated/wall/r_wall,
/area/mine/maintenance)
+"TU" = (
+/obj/machinery/door/airlock/external{
+ id_tag = "laborcamp_away";
+ name = "Labor Camp Airlock";
+ req_access_txt = null;
+ req_one_access_txt = null
+ },
+/obj/structure/fans/tiny,
+/turf/simulated/floor/plating,
+/area/mine/laborcamp)
"Uh" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
@@ -5078,13 +5218,12 @@
/turf/simulated/floor/plasteel,
/area/mine/production)
"Vt" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
+/obj/machinery/camera{
+ c_tag = "Labor Camp Central";
+ network = list("Labor Camp");
dir = 4
},
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "brown"
- },
+/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"Vu" = (
/obj/structure/chair/comfy/shuttle{
@@ -5118,14 +5257,18 @@
/turf/simulated/floor/plasteel,
/area/mine/production)
"VJ" = (
-/obj/machinery/computer/secure_data{
+/obj/structure/table,
+/obj/item/stack/medical/bruise_pack/advanced,
+/obj/item/storage/firstaid/ancient,
+/obj/machinery/camera{
+ c_tag = "Labor Camp Infirmary";
+ network = list("Labor Camp");
dir = 8
},
/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "darkredcorners"
+ icon_state = "barber"
},
-/area/mine/laborcamp/security)
+/area/mine/laborcamp)
"VN" = (
/obj/structure/bed,
/obj/effect/decal/cleanable/dirt,
@@ -5146,12 +5289,6 @@
},
/turf/simulated/floor/mineral/titanium,
/area/shuttle/mining)
-"Wt" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/simulated/floor/plasteel,
-/area/mine/laborcamp)
"Ww" = (
/obj/machinery/hologram/holopad,
/turf/simulated/floor/plasteel,
@@ -5181,14 +5318,44 @@
},
/turf/simulated/floor/plating,
/area/mine/living_quarters)
+"WP" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/mine/laborcamp/security)
"Xd" = (
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "brown"
},
/area/mine/laborcamp)
+"Xq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/plasteel/white,
+/area/mine/laborcamp)
+"Xr" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
+"Yb" = (
+/obj/effect/spawner/random_spawners/wall_rusted_always,
+/turf/simulated/wall,
+/area/mine/laborcamp/security)
+"YI" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/plasteel,
+/area/mine/laborcamp)
"YJ" = (
/obj/machinery/door/airlock{
name = "Labor Camp Storage"
@@ -5198,14 +5365,20 @@
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
"YV" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
/turf/simulated/floor/plasteel{
- dir = 1;
+ icon_state = "barber"
+ },
+/area/mine/laborcamp)
+"YW" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
icon_state = "darkred"
},
/area/mine/laborcamp/security)
@@ -5230,18 +5403,25 @@
"Zk" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/simulated/floor/plasteel,
/area/mine/laborcamp)
-"ZZ" = (
-/obj/effect/spawner/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+"Zv" = (
+/obj/machinery/vending/sustenance,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
},
-/turf/simulated/floor/plating,
/area/mine/laborcamp)
+"ZZ" = (
+/obj/effect/decal/cleanable/fungus,
+/turf/simulated/wall,
+/area/mine/laborcamp/security)
(1,1,1) = {"
aa
@@ -6744,7 +6924,7 @@ aj
aj
ab
ai
-aD
+ab
ab
aj
aj
@@ -6996,10 +7176,10 @@ aj
ab
aj
aj
-aw
-aw
+aj
+aj
+ab
ab
-aD
ab
aj
aj
@@ -7139,7 +7319,7 @@ ak
ak
ak
ak
-ad
+ab
aj
ab
ab
@@ -7252,8 +7432,8 @@ ab
aj
aj
aj
-aw
-aw
+aj
+aj
aj
aj
aj
@@ -7509,17 +7689,17 @@ aj
aj
aj
aj
-aw
-aw
aj
aj
-aw
-aw
aj
aj
-aw
aj
-ab
+aj
+aj
+aj
+aj
+aj
+aj
aj
aj
aj
@@ -7765,19 +7945,19 @@ ab
aj
aj
aj
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
+aj
+aj
+aj
+kI
+kI
+NW
+kI
+kI
+NW
+kI
+kI
+kI
+aj
aj
aj
aj
@@ -8020,22 +8200,22 @@ aj
aj
aj
aj
+aj
+aj
+ab
+aj
+aj
+NW
aw
-aw
-aD
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
+Bg
+vk
+pq
+Uy
+CK
+wP
+wt
+aj
+aj
ab
aj
aj
@@ -8278,24 +8458,24 @@ aj
aj
aj
aj
-aw
-aw
-aw
-aD
-aw
-aw
-aw
-aw
-aw
-aD
-aw
-aw
-aD
-aw
-aw
-aw
aj
-aw
+aj
+aj
+ab
+NW
+BP
+Bg
+kI
+iB
+pq
+pq
+wP
+wt
+aj
+aj
+aj
+aj
+aj
aj
aj
aj
@@ -8534,21 +8714,21 @@ aj
aj
tj
aj
-ab
+aD
+aj
+aj
+aj
aj
-aw
-aw
-aw
-kI
-kI
NW
+Wx
+hf
kI
-kI
-NW
-kI
-kI
-kI
-aw
+KR
+hj
+pq
+wP
+wt
+aj
aj
aj
aj
@@ -8792,21 +8972,21 @@ aj
mj
tj
wY
-aw
-aw
-aw
-aw
-NW
-BY
-Bg
-vk
-pq
-Uy
-CK
-wP
-wt
-aw
-aw
+aj
+aj
+aj
+aj
+kI
+kI
+FW
+kI
+kI
+kI
+bO
+kI
+kI
+aj
+aj
ab
aj
aj
@@ -9046,25 +9226,25 @@ aj
aj
aj
aj
-ab
+aD
OF
wD
-aw
-aw
-aw
-aw
-NW
-qL
-hf
-kI
-pq
-pq
-pq
-wP
-wt
-aw
-aw
-aw
+aj
+aj
+cG
+cG
+PX
+PX
+Hc
+PX
+aq
+aq
+TU
+aq
+aj
+aj
+aj
+aj
aj
aj
aj
@@ -9304,22 +9484,22 @@ aj
aj
aj
tj
-ab
+aD
GF
aj
-aw
-aw
-aw
-NW
-Wx
+aj
+cG
+xh
+mi
+YW
pt
-nT
-KR
-hj
-pq
-wP
-wt
-aw
+PX
+DT
+zY
+JZ
+aq
+aj
+aj
aj
aj
aj
@@ -9558,26 +9738,26 @@ aj
aj
aj
aj
-ab
+aD
qT
ap
ap
ap
qT
-aw
-aw
-aw
-kI
-kI
-FW
-kI
-kI
-kI
-bO
-kI
-kI
-xL
-ab
+qT
+Yb
+Ov
+OE
+WP
+vf
+PX
+rd
+Xr
+yw
+aq
+aj
+aj
+aj
aj
aj
aj
@@ -9815,26 +9995,26 @@ ab
aj
aj
aj
-ab
-tZ
+aD
+aq
vw
zo
Kl
-qT
-qT
-qT
-aq
-tZ
-aq
+Zv
+Ca
+PX
+Ab
+EF
+CI
gu
-aq
-aq
-aq
+PX
+PK
+JZ
hQ
aq
-ty
Lz
-fB
+aj
+aj
aj
aj
aj
@@ -10079,21 +10259,21 @@ wh
wh
JV
Il
-tZ
+PX
aK
aP
-aq
+Dm
aZ
-aq
-ao
-aq
+HN
+JZ
+YI
aJ
aq
-PX
Ni
-PX
+aq
+aq
+aj
aj
-aD
aj
ab
ai
@@ -10330,25 +10510,25 @@ an
an
aj
aj
-qT
+tZ
vI
ic
ym
jp
hv
-aq
+ZZ
sP
aQ
-aq
-gu
-aq
-bk
-aq
-hQ
+OE
+OU
+PX
+op
+sv
+jn
aq
bZ
sO
-cG
+ap
aj
aj
aj
@@ -10593,19 +10773,19 @@ qT
qT
qT
Vz
-qT
-aL
+PX
+PX
ZZ
-tZ
+PX
ba
+PX
+aq
aq
-bj
-HJ
Cy
aq
ca
YV
-cG
+ap
aj
aj
aj
@@ -10851,18 +11031,18 @@ NG
qT
ME
QE
-CT
-Eq
+xR
+bk
HK
ug
Vt
-xR
JZ
+vK
tJ
aq
cb
bh
-cG
+ap
aj
aj
aj
@@ -11103,23 +11283,23 @@ qT
qT
GD
YY
-as
+Xq
ax
aB
Xd
-bk
-JZ
-bk
+Ql
+hA
+Ql
aU
bb
Zk
Ne
-hA
+QR
by
bL
cc
ci
-cG
+ap
aj
aj
aj
@@ -11366,9 +11546,9 @@ aq
aE
JZ
uL
-Tj
JZ
-Wt
+IF
+bk
cy
bn
Oh
@@ -11376,7 +11556,7 @@ rS
qT
cd
VJ
-cG
+ap
aj
aj
aj
@@ -11626,7 +11806,7 @@ JZ
JZ
JZ
JZ
-JZ
+Vv
bl
aq
bA
@@ -11883,7 +12063,7 @@ aM
wg
JZ
bk
-JZ
+Vv
jf
aq
bz
@@ -12140,7 +12320,7 @@ aV
aS
aW
be
-Hj
+Vv
bm
aq
bB
@@ -15486,7 +15666,7 @@ an
an
an
an
-aD
+aj
aj
aj
cM
@@ -15742,8 +15922,8 @@ an
an
an
an
-aD
-aD
+ab
+aj
aj
aj
cM
@@ -15999,8 +16179,8 @@ an
an
an
an
-aD
-aD
+ab
+aj
aj
aj
cM
@@ -16256,8 +16436,8 @@ an
an
an
an
-aD
-aD
+ab
+aj
aj
ab
cM
@@ -16512,8 +16692,8 @@ an
an
an
an
-aD
-aD
+ab
+ab
aj
aj
ab
@@ -16766,10 +16946,10 @@ an
an
an
an
-aD
-aD
-aD
-aw
+ab
+ab
+ab
+aj
aj
aj
aj
@@ -17021,10 +17201,10 @@ aj
aj
aj
aj
-aD
-aD
-aD
-aD
+ab
+ab
+ab
+ab
aj
aj
aj
@@ -17284,7 +17464,7 @@ aj
aj
aj
aj
-ab
+aj
aj
aj
aj
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index d9319fb6ebd..866110f9ef5 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -5,11 +5,11 @@
icon = 'icons/obj/computer.dmi'
icon_keyboard = "security_key"
icon_screen = "explosive"
- req_access = list(ACCESS_ARMORY)
+ req_access = list(ACCESS_BRIG)
circuit = /obj/item/circuitboard/prisoner
var/authenticated = FALSE // FALSE - No Access Denied, TRUE - Access allowed
- var/obj/item/card/id/prisoner/inserted_id
+ var/inserted_id_uid
light_color = LIGHT_COLOR_DARKRED
@@ -21,13 +21,25 @@
GLOB.prisoncomputer_list -= src
return ..()
+/obj/machinery/computer/prisoner/attackby(obj/item/O, mob/user, params)
+ var/datum/ui_login/state = ui_login_get()
+ if(state.logged_in)
+ var/obj/item/card/id/prisoner/I = O
+ if(istype(I) && user.drop_item())
+ I.forceMove(src)
+ inserted_id_uid = I.UID()
+ return
+ if(ui_login_attackby(O, user))
+ return
+ return ..()
+
/obj/machinery/computer/prisoner/attack_ai(mob/user)
ui_interact(user)
/obj/machinery/computer/prisoner/attack_hand(mob/user)
if(..())
return TRUE
-
+ add_fingerprint(user)
ui_interact(user)
/obj/machinery/computer/prisoner/proc/check_implant(obj/item/implant/I)
@@ -41,15 +53,16 @@
/obj/machinery/computer/prisoner/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, 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, "PrisonerImplantManager", name, 475, 500, master_ui, state)
+ ui = new(user, src, ui_key, "PrisonerImplantManager", name, 500, 500, master_ui, state)
ui.open()
/obj/machinery/computer/prisoner/ui_data(mob/user)
var/list/data = list()
ui_login_data(data, user)
+ var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
data["prisonerInfo"] = list(
"name" = inserted_id?.name,
- "points" = inserted_id?.points,
+ "points" = inserted_id?.mining_points,
"goal" = inserted_id?.goal,
)
@@ -97,7 +110,7 @@
if(..())
return
- add_fingerprint(usr)
+ add_fingerprint(ui.user)
if(ui_act_modal(action, params, ui))
return
@@ -105,19 +118,18 @@
return
var/mob/living/user = ui.user
-
-
-
+ var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
switch(action)
if("id_card")
if(inserted_id)
- inserted_id.forceMove(loc)
- inserted_id = null
+ if(!ui.user.put_in_hands(inserted_id))
+ inserted_id.forceMove(get_turf(src))
+ inserted_id_uid = null
return
var/obj/item/card/id/prisoner/I = user.get_active_hand()
if(istype(I) && user.drop_item())
I.forceMove(src)
- inserted_id = I
+ inserted_id_uid = I.UID()
else
to_chat(user, "No valid ID.")
if("inject")
@@ -127,8 +139,7 @@
implant.activate(text2num(params["amount"]))
if("reset_points")
if(inserted_id)
- inserted_id.points = 0
-
+ inserted_id.mining_points = 0
/obj/machinery/computer/prisoner/proc/ui_act_modal(action, list/params, datum/tgui/ui)
if(!ui_login_get().logged_in)
@@ -137,6 +148,7 @@
var/id = params["id"]
var/mob/living/user = ui.user
var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"]
+
switch(ui_modal_act(src, action, params))
if(UI_MODAL_OPEN)
switch(id)
@@ -146,8 +158,7 @@
))
if("set_points")
ui_modal_input(src, id, "Please enter the new point goal:", null, arguments)
- else
- return FALSE
+
if(UI_MODAL_ANSWER)
var/answer = params["answer"]
switch(id)
@@ -163,11 +174,11 @@
var/mob/living/carbon/implantee = implant.imp_in
var/warning = copytext(sanitize(text2num(answer)), 1, MAX_MESSAGE_LEN)
to_chat(implantee, "Your skull vibrates violently as a loud announcement is broadcasted to you: '[warning]'")
+
if("set_points")
if(isnull(text2num(answer)))
return
- inserted_id.goal = max(text2num(answer), 0)
- else
- return FALSE
- else
- return FALSE
+ var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
+ inserted_id?.goal = max(text2num(answer), 0)
+
+ return FALSE
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 79b4779d9de..62e54e713e8 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -657,10 +657,11 @@
assignment = "Prisoner"
registered_name = "Scum"
var/goal = 0 //How far from freedom?
- var/points = 0
-/obj/item/card/id/prisoner/attack_self(mob/user as mob)
- to_chat(usr, "You have accumulated [points] out of the [goal] points you need for freedom.")
+/obj/item/card/id/prisoner/examine(mob/user)
+ . = ..()
+ if(goal)
+ . += "\nYou have accumulated [mining_points] out of the [goal] points assigned to gain freedom."
/obj/item/card/id/prisoner/one
name = "Prisoner #13-001"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 5b138de31cb..90d1e0590d8 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -304,6 +304,39 @@
new /obj/item/card/id/prisoner/random(src)
new /obj/item/radio/headset(src)
+/obj/structure/closet/secure_closet/brig/gulag
+ name = "labor camp locker"
+ desc = "A special locker designed to store prisoner belongings, allows access when prisoners meet their point quota."
+ locked = FALSE
+ var/registered_ID_UID
+
+/obj/structure/closet/secure_closet/brig/gulag/allowed(mob/M)
+ . = ..()
+ if(.) //we were gonna let them do it anyway
+ return TRUE
+
+ for(var/obj/item/card/id/prisoner/prisoner_id in M) //they might have a stash of them
+ if(!prisoner_id.goal)
+ continue //no goal? no interaction
+
+ if(locked && registered_ID_UID && !(prisoner_id.UID() == registered_ID_UID))
+ continue //you don't own this!
+
+ if(!locked)
+ registered_ID_UID = prisoner_id.UID()
+ return TRUE //they are trying to lock it, so let them
+
+ if(prisoner_id.mining_points >= prisoner_id.goal)
+ registered_ID_UID = null
+ return TRUE //completed goal? do the interaction
+
+ return FALSE //if we didn't match above, no interaction for you
+
+/obj/structure/closet/secure_closet/brig/gulag/examine(mob/user)
+ . = ..()
+ if(registered_ID_UID)
+ var/obj/item/card/id/prisoner/prisoner_id = locateUID(registered_ID_UID)
+ . += "\nOwned by [prisoner_id.registered_name]."
/obj/structure/closet/secure_closet/courtroom
name = "courtroom locker"
diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm
index 88b0a6601dc..2e0204d82d1 100644
--- a/code/modules/mining/laborcamp/laborshuttle.dm
+++ b/code/modules/mining/laborcamp/laborshuttle.dm
@@ -6,10 +6,180 @@
possible_destinations = "laborcamp_home;laborcamp_away"
req_access = list(ACCESS_BRIG)
-
/obj/machinery/computer/shuttle/labor/one_way
name = "prisoner shuttle console"
desc = "A one-way shuttle console, used to summon the shuttle to the labor camp."
possible_destinations = "laborcamp_away"
circuit = /obj/item/circuitboard/labor_shuttle/one_way
- req_access = list( )
+
+/obj/machinery/computer/shuttle/labor/one_way/allowed(mob/M)
+ if(..())
+ return TRUE
+
+ for(var/obj/item/card/id/prisoner/prisoner_id in M)
+ if(!prisoner_id.goal)
+ continue //no goal? no shuttle
+
+ if(prisoner_id.mining_points >= prisoner_id.goal)
+ return TRUE //completed goal? call it
+
+ return FALSE //if we didn't match above, no shuttle call
+
+/**********************Prisoners' Console**************************/
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console
+ name = "prisoner shuttle controller"
+ desc = "A console used by released prisoners to move the shuttle."
+ icon = 'icons/obj/machines/mining_machines.dmi'
+ icon_state = "console"
+ density = FALSE
+ var/machinedir = SOUTH
+ var/inserted_id_uid
+ var/obj/item/radio/intercom/announcer
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/Initialize()
+ . = ..()
+ announcer = new /obj/item/radio/intercom(null)
+ announcer.config(list("Security" = 0))
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/Destroy()
+ QDEL_NULL(announcer)
+ return ..()
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/card/id/prisoner))
+ if(inserted_id_uid)
+ to_chat(user, "There's an ID inserted already.")
+ return
+
+ if(!user.unEquip(I))
+ return
+
+ I.forceMove(src)
+ inserted_id_uid = I.UID()
+ to_chat(user, "You insert [I].")
+ SStgui.update_uis(src)
+ return
+
+ return ..()
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/attack_hand(mob/user)
+ add_fingerprint(user)
+ ui_interact(user)
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/attack_ghost(mob/user)
+ attack_hand(user)
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/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, "PrisonerShuttleConsole", name, 315, 150, master_ui, state)
+ ui.open()
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_data(mob/user)
+ var/list/data = list()
+ var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
+
+ data["emagged"] = emagged
+ data["id_inserted"] = !isnull(inserted_id)
+ if(inserted_id)
+ data["id_name"] = inserted_id.registered_name
+ data["id_points"] = inserted_id.mining_points
+ data["id_goal"] = inserted_id.goal
+
+ data["can_go_home"] = check_auth()
+
+ return data
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_act(action, params, datum/tgui/ui)
+ if(..())
+ return
+ var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
+ switch(action)
+ if("handle_id")
+ if(inserted_id)
+ if(!ui.user.put_in_hands(inserted_id))
+ inserted_id.forceMove(get_turf(src))
+ inserted_id_uid = null
+ return TRUE
+
+ var/obj/item/I = ui.user.get_active_hand()
+ if(istype(I, /obj/item/card/id/prisoner))
+ if(!ui.user.unEquip(I))
+ return
+ I.forceMove(src)
+ inserted_id_uid = I.UID()
+
+ if("move_shuttle")
+ if(!alone_in_area(get_area(src), ui.user))
+ to_chat(ui.user, "Prisoners are only allowed to be released while alone.")
+ return TRUE
+
+ switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE, ui.user))
+ if(1)
+ to_chat(ui.user, "Shuttle not found.")
+ if(2)
+ to_chat(ui.user, "Shuttle already at station.")
+ if(3)
+ to_chat(ui.user, "No permission to dock could be granted.")
+ else
+ if(!emagged)
+ var/message = "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval."
+ announcer.autosay(message, "Labor Camp Controller", "Security")
+ sec_record_release(ui.user)
+ to_chat(ui.user, "Shuttle received message and will be sent shortly.")
+ ui.user.create_log(MISC_LOG, "used [src] to call the laborcamp shuttle")
+
+ return TRUE
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/proc/sec_record_release(mob/living/carbon/human/target)
+ var/target_name = target?.get_visible_name(TRUE)
+ if(!target_name || target_name == "Unknown")
+ return //Do you have the slightest idea how little that narrows it down?
+ var/datum/data/record/R = find_record("name", target_name, GLOB.data_core.security)
+ if(!(R?.fields["criminal"] in list(SEC_RECORD_STATUS_INCARCERATED)))
+ return //stops cheese
+ set_criminal_status(target, R, SEC_RECORD_STATUS_RELEASED, "Automatically released upon reaching labor points quota", "Labor Camp Controller", user_name = "Automated System")
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/proc/check_auth()
+ if(emagged)
+ return TRUE //Shuttle is emagged, let any ol' person through
+ var/obj/item/card/id/prisoner/inserted_id = locateUID(inserted_id_uid)
+ if(!inserted_id?.goal)
+ return FALSE //ID not properly set up or not present, abort!
+ return (inserted_id.mining_points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota.
+
+/obj/machinery/mineral/labor_prisoner_shuttle_console/emag_act(mob/user)
+ if(!emagged)
+ emagged = TRUE
+ to_chat(user, "PZZTTPFFFT")
+
+/**********************Point Lookup Console**************************/
+/obj/machinery/mineral/labor_points_checker
+ name = "points checking console"
+ desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID."
+ icon = 'icons/obj/machines/mining_machines.dmi'
+ icon_state = "console"
+ density = FALSE
+
+/obj/machinery/mineral/labor_points_checker/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
+ user.examinate(src)
+
+/obj/machinery/mineral/labor_points_checker/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/card/id/prisoner))
+ var/obj/item/card/id/prisoner/prisoner_id = I
+ if(!prisoner_id.goal)
+ to_chat(user, "Error: No point quota assigned by security, exiting.")
+ return
+ to_chat(user, "ID: [prisoner_id.registered_name]")
+ to_chat(user, "Points Collected:[prisoner_id.mining_points]")
+ to_chat(user, "Point Quota: [prisoner_id.goal]")
+ to_chat(user, "Collect points by bringing ore to the labor camp ore redemption machine. Reach your quota to earn your release.")
+ return
+ if(istype(I, /obj/item/card/id))
+ to_chat(user, "Error: Invalid ID")
+ return
+ return ..()
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
deleted file mode 100644
index f0b0871987f..00000000000
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ /dev/null
@@ -1,180 +0,0 @@
-/**********************Prisoners' Console**************************/
-
-/obj/machinery/mineral/labor_claim_console
- name = "point claim console"
- desc = "A stacking console with an electromagnetic writer, used to track ore mined by prisoners."
- icon = 'icons/obj/machines/mining_machines.dmi'
- icon_state = "console"
- density = FALSE
- var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null
- var/machinedir = SOUTH
- var/obj/item/card/id/prisoner/inserted_id
- var/obj/machinery/door/airlock/release_door
- var/door_tag = "prisonshuttle"
- var/obj/item/radio/intercom/announcer
- var/static/list/sheet_values
-
-/obj/machinery/mineral/labor_claim_console/Initialize()
- . = ..()
- announcer = new /obj/item/radio/intercom(null)
- announcer.config(list("Security" = 0))
-
- if(!sheet_values)
- for(var/sheet_type in subtypesof(/obj/item/stack/sheet))
- var/obj/item/stack/sheet/sheet = sheet_type
- if(!initial(sheet.point_value) || (initial(sheet.merge_type) && initial(sheet.merge_type) != sheet_type)) //ignore no-value sheets and x/fifty subtypes
- continue
- sheet_values += list(list("ore" = initial(sheet.name), "value" = initial(sheet.point_value)))
- sheet_values = sortTim(sheet_values, /proc/cmp_sheet_list)
-
-/obj/machinery/mineral/labor_claim_console/Destroy()
- . = ..()
- QDEL_NULL(announcer)
-
-/proc/cmp_sheet_list(list/a, list/b)
- return a["value"] - b["value"]
-
-/obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/card/id/prisoner))
- if(!inserted_id)
- if(!user.unEquip(I))
- return
- I.forceMove(src)
- inserted_id = I
- to_chat(user, "You insert [I].")
- SStgui.update_uis(src)
- return
- else
- to_chat(user, "There's an ID inserted already.")
- return
- return ..()
-
-/obj/machinery/mineral/labor_claim_console/attack_hand(mob/user)
- ui_interact(user)
-
-/obj/machinery/mineral/labor_claim_console/attack_ghost(mob/user)
- attack_hand(user)
-
-/obj/machinery/mineral/labor_claim_console/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, "LaborClaimConsole", name, 315, 470, master_ui, state)
- ui.open()
-
-/obj/machinery/mineral/labor_claim_console/ui_data(mob/user)
- var/list/data = list()
- var/can_go_home = FALSE
-
- data["emagged"] = emagged
- data["id_inserted"] = inserted_id != null
- if(inserted_id)
- data["id_name"] = inserted_id.registered_name
- data["id_points"] = inserted_id.mining_points
- data["id_goal"] = inserted_id.goal
- if(check_auth())
- can_go_home = TRUE
-
- if(stacking_machine)
- data["unclaimed_points"] = stacking_machine.points
-
- data["ores"] = sheet_values
- data["can_go_home"] = can_go_home
-
- return data
-
-/obj/machinery/mineral/labor_claim_console/ui_act(action, params)
- if(..())
- return
-
- switch(action)
- if("handle_id")
- if(inserted_id)
- if(!usr.put_in_hands(inserted_id))
- inserted_id.forceMove(get_turf(src))
- inserted_id = null
- else
- var/obj/item/I = usr.get_active_hand()
- if(istype(I, /obj/item/card/id/prisoner))
- if(!usr.unEquip(I))
- return
- I.forceMove(src)
- inserted_id = I
- if("claim_points")
- if(!inserted_id)
- return
- inserted_id.mining_points += stacking_machine.points
- stacking_machine.points = 0
- to_chat(usr, "Points transferred.")
- if("move_shuttle")
- if(!alone_in_area(get_area(src), usr))
- to_chat(usr, "Prisoners are only allowed to be released while alone.")
- else
- switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE, usr))
- if(1)
- to_chat(usr, "Shuttle not found.")
- if(2)
- to_chat(usr, "Shuttle already at station.")
- if(3)
- to_chat(usr, "No permission to dock could be granted.")
- else
- if(!emagged)
- var/message = "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval."
- announcer.autosay(message, "Labor Camp Controller", "Security")
- to_chat(usr, "Shuttle received message and will be sent shortly.")
- usr.create_log(MISC_LOG, "used [src] to call the laborcamp shuttle")
-
- return TRUE
-
-/obj/machinery/mineral/labor_claim_console/proc/check_auth()
- if(emagged)
- return TRUE //Shuttle is emagged, let any ol' person through
- return (istype(inserted_id) && inserted_id.mining_points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota.
-
-/obj/machinery/mineral/labor_claim_console/emag_act(mob/user)
- if(!(emagged))
- emagged = TRUE
- to_chat(user, "PZZTTPFFFT")
-
-
-/**********************Prisoner Collection Unit**************************/
-/obj/machinery/mineral/stacking_machine/laborstacker
- damage_deflection = 21
- var/points = 0 //The unclaimed value of ore stacked.
-
-/obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/inp)
- points += inp.point_value * inp.amount
- ..()
-
-/obj/machinery/mineral/stacking_machine/laborstacker/attackby(obj/item/I, mob/living/user)
- if(istype(I, /obj/item/stack/sheet) && user.canUnEquip(I))
- var/obj/item/stack/sheet/inp = I
- points += inp.point_value * inp.amount
- return
- return ..()
-
-/**********************Point Lookup Console**************************/
-/obj/machinery/mineral/labor_points_checker
- name = "points checking console"
- desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID."
- icon = 'icons/obj/machines/mining_machines.dmi'
- icon_state = "console"
- density = FALSE
-
-/obj/machinery/mineral/labor_points_checker/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- user.examinate(src)
-
-/obj/machinery/mineral/labor_points_checker/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/card/id))
- if(istype(I, /obj/item/card/id/prisoner))
- var/obj/item/card/id/prisoner/prisoner_id = I
- to_chat(user, "ID: [prisoner_id.registered_name]")
- to_chat(user, "Points Collected:[prisoner_id.mining_points]")
- to_chat(user, "Point Quota: [prisoner_id.goal]")
- to_chat(user, "Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release.")
- else
- to_chat(user, "Error: Invalid ID")
- return
- return ..()
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index f5608be41cd..e46c6a1affc 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -340,7 +340,8 @@
EQUIPMENT("Cards", /obj/item/deck/cards, 150),
EQUIPMENT("Guitar", /obj/item/instrument/guitar, 750),
EQUIPMENT("Synthesizer", /obj/item/instrument/piano_synth, 1500),
- EQUIPMENT("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000)
+ EQUIPMENT("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
+ EQUIPMENT("Analyzer", /obj/item/analyzer, 50)
)
/**********************Mining Equipment Datum**************************/
diff --git a/paradise.dme b/paradise.dme
index 1e9936fd0af..15bc40d0a0a 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1828,7 +1828,6 @@
#include "code\modules\mining\equipment\vendor_items.dm"
#include "code\modules\mining\equipment\wormhole_jaunter.dm"
#include "code\modules\mining\laborcamp\laborshuttle.dm"
-#include "code\modules\mining\laborcamp\laborstacker.dm"
#include "code\modules\mining\lavaland\ash_flora.dm"
#include "code\modules\mining\lavaland\necropolis_chests.dm"
#include "code\modules\mining\lavaland\loot\ancient_loot.dm"
diff --git a/tgui/packages/tgui/interfaces/LaborClaimConsole.js b/tgui/packages/tgui/interfaces/LaborClaimConsole.js
deleted file mode 100644
index 628abc1bc02..00000000000
--- a/tgui/packages/tgui/interfaces/LaborClaimConsole.js
+++ /dev/null
@@ -1,112 +0,0 @@
-import { toTitleCase } from 'common/string';
-import { useBackend } from '../backend';
-import {
- Box,
- Button,
- ProgressBar,
- LabeledList,
- Section,
- Table,
-} from '../components';
-import { Window } from '../layouts';
-
-export const LaborClaimConsole = (props, context) => {
- return (
-
-
-
-
-
-
- );
-};
-
-const ShuttleControlSection = (props, context) => {
- const { act, data } = useBackend(context);
- const {
- can_go_home,
- emagged,
- id_inserted,
- id_name,
- id_points,
- id_goal,
- unclaimed_points,
- } = data;
- const bad_progress = emagged ? 0 : 1;
- const completionStatus = emagged
- ? 'ERR0R'
- : can_go_home
- ? 'Completed!'
- : 'Insufficient';
- return (
-
-
-
- {(!!id_inserted && (
-
- {id_points + ' / ' + id_goal + ' ' + completionStatus}
-
- )) ||
- (!!emagged && 'ERR0R COMPLETED?!@') ||
- 'No ID inserted'}
-
-
-
-
-
-
-
-
-
- );
-};
-
-const MaterialValuesSection = (props, context) => {
- const { data } = useBackend(context);
- const { ores } = data;
- return (
-
-
-
- Material
-
- Value
-
-
- {ores.map((ore) => (
-
- {toTitleCase(ore.ore)}
-
-
- {ore.value}
-
-
-
- ))}
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/PrisonerImplantManager.js b/tgui/packages/tgui/interfaces/PrisonerImplantManager.js
index e75133e55c5..180b768455c 100644
--- a/tgui/packages/tgui/interfaces/PrisonerImplantManager.js
+++ b/tgui/packages/tgui/interfaces/PrisonerImplantManager.js
@@ -33,7 +33,7 @@ export const PrisonerImplantManager = (props, context) => {
-
+
{prisonerInfo.points !== null ? prisonerInfo.points : "-/-"}
- {prisonerInfo.goal !== null &&
-
- modalOpen(context, 'set_points')}
/>
-
+
+
+
+ 1 minute of prison time should roughly equate to 150 points.
+ Sentences should not exceed 5000 points.
+ Permanent prisoners should not be given a point goal.
+ Prisoners who meet their point goal will be able to automatically access their locker and return to the station using the shuttle.
+
diff --git a/tgui/packages/tgui/interfaces/PrisonerShuttleConsole.js b/tgui/packages/tgui/interfaces/PrisonerShuttleConsole.js
new file mode 100644
index 00000000000..99d8e497aa8
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/PrisonerShuttleConsole.js
@@ -0,0 +1,66 @@
+import { useBackend } from '../backend';
+import {
+ Button,
+ ProgressBar,
+ LabeledList,
+ Section,
+} from '../components';
+import { Window } from '../layouts';
+
+export const PrisonerShuttleConsole = (props, context) => {
+ const { act, data } = useBackend(context);
+ const {
+ can_go_home,
+ emagged,
+ id_inserted,
+ id_name,
+ id_points,
+ id_goal,
+ } = data;
+ const bad_progress = emagged ? 0 : 1;
+ let completionStatus = can_go_home ? 'Completed!' : 'Insufficient';
+ if (emagged) {
+ completionStatus = 'ERR0R'
+ }
+ let statusBlock = 'No ID inserted'
+ if (id_inserted) {
+ statusBlock = (
+
+ {id_points + ' / ' + id_goal + ' ' + completionStatus}
+ )
+ }
+ else if (emagged) {
+ statusBlock = 'ERR0R COMPLETED?!@'
+ }
+ return (
+
+
+
+
+ {statusBlock}
+
+
+ act('move_shuttle')}
+ />
+
+
+ act('handle_id')}
+ />
+
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/public/tgui.bundle.js b/tgui/packages/tgui/public/tgui.bundle.js
index c6e41b6fcb9..0a24fa9dec0 100644
--- a/tgui/packages/tgui/public/tgui.bundle.js
+++ b/tgui/packages/tgui/public/tgui.bundle.js
@@ -1,5 +1,5 @@
-!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=230)}([function(e,t,n){"use strict";t.__esModule=!0;var o=n(232);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||(t[e]=o[e]))}))},function(e,t,n){"use strict";t.__esModule=!0,t.useSharedState=t.useLocalState=t.useBackend=t.deleteLocalState=t.backendUpdate=t.backendSetSharedState=t.backendReducer=t.backendDeleteSharedState=void 0;var o=n(31),r=n(45);t.backendUpdate=function(e){return{type:"backend/update",payload:e}};var a=function(e,t){return{type:"backend/setSharedState",payload:{key:e,nextState:t}}};t.backendSetSharedState=a;var c=function(e){return{type:"backend/deleteSharedState",payload:e}};t.backendDeleteSharedState=c;t.backendReducer=function(e,t){var n=t.type,o=t.payload;if("backend/update"===n){var a=Object.assign({},e.config,o.config),c=Object.assign({},e.data,o.static_data,o.data),i=Object.assign({},e.shared);if(o.shared)for(var l=0,d=Object.keys(o.shared);l1?n-1:0),r=1;rn?n:e};t.clamp01=function(e){return e<0?0:e>1?1:e};t.scale=function(e,t,n){return(e-t)/(n-t)};t.round=function(e,t){return!e||isNaN(e)?e:(t|=0,a=(e*=n=Math.pow(10,t))>0|-(e<0),r=Math.abs(e%1)>=.4999999999854481,o=Math.floor(e),r&&(e=o+(a>0)),(r?e:Math.round(e))/n);var n,o,r,a};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(Math.max(t,0))};var o=function(e,t){return t&&e>=t[0]&&e<=t[1]};t.inRange=o;t.keyOfMatchingRange=function(e,t){for(var n=0,r=Object.keys(t);n0&&(t.style=l),t};t.computeBoxProps=N;var b=function(e){var t=e.textColor||e.color,n=e.backgroundColor;return(0,o.classes)([u(t)&&"color-"+t,u(n)&&"color-bg-"+n])};t.computeBoxClassName=b;var V=function(e){var t=e.as,n=void 0===t?"div":t,o=e.className,c=e.children,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,i);if("function"==typeof c)return c(N(e));var d="string"==typeof o?o+" "+b(l):b(l),u=N(l);return(0,r.createVNode)(a.VNodeFlags.HtmlElement,n,d,c,a.ChildFlags.UnknownChildren,u)};t.Box=V,V.defaultHooks=o.pureComponentHooks},function(e,t,n){"use strict";var o=n(39);e.exports=function(e){return o(e.length)}},function(e,t,n){"use strict";var o=n(5),r=n(12),a=n(47),c=n(129),i=n(127);e.exports=function(e,t,n,l){var d=!!l&&!!l.unsafe,u=!!l&&!!l.enumerable,s=!!l&&!!l.noTargetGet,m=l&&l.name!==undefined?l.name:t;return r(n)&&c(n,m,l),e===o?(u?e[t]=n:i(t,n),e):(d?!s&&e[t]&&(u=!0):delete e[t],u?e[t]=n:a(e,t,n),e)}},function(e,t,n){"use strict";function o(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n",apos:"'"};return e.replace(/
/gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},function(e,t,n){"use strict";var o=n(58),r=n(7),a=n(84),c=n(18),i=n(22),l=n(90),d=r([].push),u=function(e){var t=1==e,n=2==e,r=3==e,u=4==e,s=6==e,m=7==e,p=5==e||s;return function(f,h,C,N){for(var b,V,g=c(f),v=a(g),y=o(h,C),x=i(v),_=0,k=N||l,L=t?k(f,x):n||m?k(f,0):undefined;x>_;_++)if((p||_ in v)&&(V=y(b=v[_],_,g),e))if(t)L[_]=V;else if(V)switch(e){case 3:return!0;case 5:return b;case 6:return _;case 2:d(L,b)}else switch(e){case 4:return!1;case 7:d(L,b)}return s?-1:r||u?u:L}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(e,t,n){"use strict";var o=n(8),r=n(14),a=n(100),c=n(62),i=n(29),l=n(54),d=n(17),u=n(172),s=Object.getOwnPropertyDescriptor;t.f=o?s:function(e,t){if(e=i(e),t=l(t),u)try{return s(e,t)}catch(n){}if(d(e,t))return c(!r(a.f,e,t),e[t])}},function(e,t,n){"use strict";var o=n(5),r=n(12),a=n(70),c=o.TypeError;e.exports=function(e){if(r(e))return e;throw c(a(e)+" is not a function")}},function(e,t,n){"use strict";var o=n(5),r=n(12),a=function(e){return r(e)?e:undefined};e.exports=function(e,t){return arguments.length<2?a(o[e]):o[e]&&o[e][t]}},function(e,t,n){"use strict";var o=n(84),r=n(30);e.exports=function(e){return o(r(e))}},function(e,t,n){"use strict";var o=n(5).TypeError;e.exports=function(e){if(e==undefined)throw o("Can't call method on "+e);return e}},function(e,t,n){"use strict";function o(e,t,n,o,r,a,c){try{var i=e[a](c),l=i.value}catch(d){return void n(d)}i.done?t(l):Promise.resolve(l).then(o,r)}t.__esModule=!0,t.winset=t.winget=t.runCommand=t.callByondAsync=t.callByond=t.IS_IE8=void 0;var r=window.Byond,a=function(){var e=navigator.userAgent.match(/Trident\/(\d+).+?;/i);if(!e)return null;var t=e[1];return t?parseInt(t,10):null}(),c=null!==a&&a<=6;t.IS_IE8=c;var i=function(e,t){void 0===t&&(t={}),r.call(e,t)};t.callByond=i;var l=function(e,t){void 0===t&&(t={}),window.__callbacks__=window.__callbacks__||[];var n=window.__callbacks__.length,o=new Promise((function(e){window.__callbacks__.push(e)}));return r.call(e,Object.assign({},t,{callback:"__callbacks__["+n+"]"})),o};t.callByondAsync=l;t.runCommand=function(e){return i("winset",{command:e})};var d=function(){var e,t=(e=regeneratorRuntime.mark((function n(e,t){var o;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,l("winget",{id:e,property:t});case 2:return o=n.sent,n.abrupt("return",o[t]);case 4:case"end":return n.stop()}}),n)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var c=e.apply(t,n);function i(e){o(c,r,a,i,l,"next",e)}function l(e){o(c,r,a,i,l,"throw",e)}i(undefined)}))});return function(e,n){return t.apply(this,arguments)}}();t.winget=d;t.winset=function(e,t,n){var o;return i("winset",((o={})[e+"."+t]=n,o))}},function(e,t,n){"use strict";t.__esModule=!0,t.zipWith=t.zip=t.uniqBy=t.toKeyedArray=t.toArray=t.sortBy=t.reduce=t.map=t.filter=void 0;t.toArray=function(e){if(Array.isArray(e))return e;if("object"==typeof e){var t=Object.prototype.hasOwnProperty,n=[];for(var o in e)t.call(e,o)&&n.push(e[o]);return n}return[]};t.toKeyedArray=function(e,t){return void 0===t&&(t="key"),o((function(e,n){var o;return Object.assign(((o={})[t]=n,o),e)}))(e)};t.filter=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;oi)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n"+l+""+t+">"}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e){return o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},function(e,t,n){"use strict";var o,r,a,c=n(174),i=n(5),l=n(7),d=n(11),u=n(47),s=n(17),m=n(126),p=n(102),f=n(86),h=i.TypeError,C=i.WeakMap;if(c||m.state){var N=m.state||(m.state=new C),b=l(N.get),V=l(N.has),g=l(N.set);o=function(e,t){if(V(N,e))throw new h("Object already initialized");return t.facade=e,g(N,e,t),t},r=function(e){return b(N,e)||{}},a=function(e){return V(N,e)}}else{var v=p("state");f[v]=!0,o=function(e,t){if(s(e,v))throw new h("Object already initialized");return t.facade=e,u(e,v,t),t},r=function(e){return s(e,v)?e[v]:{}},a=function(e){return s(e,v)}}e.exports={set:o,get:r,has:a,enforce:function(e){return a(e)?r(e):o(e,{})},getterFor:function(e){return function(t){var n;if(!d(t)||(n=r(t)).type!==e)throw h("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){"use strict";var o=Math.ceil,r=Math.floor;e.exports=function(e){var t=+e;return t!=t||0===t?0:(t>0?r:o)(t)}},function(e,t,n){"use strict";var o=n(38),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){"use strict";t.__esModule=!0,t.modalRegisterBodyOverride=t.modalOpen=t.modalClose=t.modalAnswer=t.ComplexModal=void 0;var o=n(0),r=n(1),a=n(2),c={};t.modalOpen=function(e,t,n){var o=(0,r.useBackend)(e),a=o.act,c=o.data,i=Object.assign(c.modal?c.modal.args:{},n||{});a("modal_open",{id:t,arguments:JSON.stringify(i)})};t.modalRegisterBodyOverride=function(e,t){c[e]=t};var i=function(e,t,n,o){var a=(0,r.useBackend)(e),c=a.act,i=a.data;if(i.modal){var l=Object.assign(i.modal.args||{},o||{});c("modal_answer",{id:t,answer:n,arguments:JSON.stringify(l)})}};t.modalAnswer=i;var l=function(e,t){(0,(0,r.useBackend)(e).act)("modal_close",{id:t})};t.modalClose=l;t.ComplexModal=function(e,t){var n=(0,r.useBackend)(t).data;if(n.modal){var d,u,s=n.modal,m=s.id,p=s.text,f=s.type,h=(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Cancel",color:"grey",onClick:function(){return l(t)}}),C="auto";if(c[m])u=c[m](n.modal,t);else if("input"===f){var N=n.modal.value;d=function(e){return i(t,m,N)},u=(0,o.createComponentVNode)(2,a.Input,{value:n.modal.value,placeholder:"ENTER to submit",width:"100%",my:"0.5rem",autofocus:!0,onChange:function(e,t){N=t}}),h=(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Cancel",color:"grey",onClick:function(){return l(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"check",content:"Confirm",color:"good",float:"right",m:"0",onClick:function(){return i(t,m,N)}}),(0,o.createComponentVNode)(2,a.Box,{clear:"both"})]})}else if("choice"===f){var b="object"==typeof n.modal.choices?Object.values(n.modal.choices):n.modal.choices;u=(0,o.createComponentVNode)(2,a.Dropdown,{options:b,selected:n.modal.value,width:"100%",my:"0.5rem",onSelected:function(e){return i(t,m,e)}}),C="initial"}else"bento"===f?u=(0,o.createComponentVNode)(2,a.Flex,{spacingPrecise:"1",wrap:"wrap",my:"0.5rem",maxHeight:"1%",children:n.modal.choices.map((function(e,r){return(0,o.createComponentVNode)(2,a.Flex.Item,{flex:"1 1 auto",children:(0,o.createComponentVNode)(2,a.Button,{selected:r+1===parseInt(n.modal.value,10),onClick:function(){return i(t,m,r+1)},children:(0,o.createVNode)(1,"img",null,null,1,{src:e})})},r)}))}):"boolean"===f&&(h=(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:n.modal.no_text,color:"bad",float:"left",mb:"0",onClick:function(){return i(t,m,0)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"check",content:n.modal.yes_text,color:"good",float:"right",m:"0",onClick:function(){return i(t,m,1)}}),(0,o.createComponentVNode)(2,a.Box,{clear:"both"})]}));return(0,o.createComponentVNode)(2,a.Modal,{maxWidth:e.maxWidth||window.innerWidth/2+"px",maxHeight:e.maxHeight||window.innerHeight/2+"px",onEnter:d,mx:"auto",overflowY:C,children:[(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:p}),u,h]})}}},function(e,t,n){"use strict";var o=n(5),r=n(17),a=n(12),c=n(18),i=n(102),l=n(139),d=i("IE_PROTO"),u=o.Object,s=u.prototype;e.exports=l?u.getPrototypeOf:function(e){var t=c(e);if(r(t,d))return t[d];var n=t.constructor;return a(n)&&t instanceof n?n.prototype:t instanceof u?s:null}},function(e,t,n){"use strict";var o=n(7),r=o({}.toString),a=o("".slice);e.exports=function(e){return a(r(e),8,-1)}},function(e,t,n){"use strict";var o=n(7);e.exports=o({}.isPrototypeOf)},function(e,t,n){"use strict";var o=n(83),r=Function.prototype,a=r.apply,c=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?c.bind(a):function(){return c.apply(a,arguments)})},function(e,t,n){"use strict";t.__esModule=!0,t.timeAgo=t.getGasLabel=t.getGasColor=t.UI_UPDATE=t.UI_INTERACTIVE=t.UI_DISABLED=t.UI_CLOSE=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{command:"#526aff",security:"#CF0000",medical:"#009190",science:"#993399",engineering:"#A66300",supply:"#9F8545",service:"#80A000",centcom:"#78789B",other:"#C38312"},damageType:{oxy:"#3498db",toxin:"#2ecc71",burn:"#e67e22",brute:"#e74c3c"}};t.CSS_COLORS=["black","white","red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey","good","average","bad","label"];t.RADIO_CHANNELS=[{name:"Syndicate",freq:1213,color:"#a52a2a"},{name:"SyndTeam",freq:1244,color:"#a52a2a"},{name:"Red Team",freq:1215,color:"#ff4444"},{name:"Blue Team",freq:1217,color:"#3434fd"},{name:"Response Team",freq:1345,color:"#2681a5"},{name:"Special Ops",freq:1341,color:"#2681a5"},{name:"Supply",freq:1347,color:"#b88646"},{name:"Service",freq:1349,color:"#6ca729"},{name:"Science",freq:1351,color:"#c68cfa"},{name:"Command",freq:1353,color:"#5177ff"},{name:"Procedure",freq:1339,color:"#F70285"},{name:"Medical",freq:1355,color:"#57b8f0"},{name:"Medical(I)",freq:1485,color:"#57b8f0"},{name:"Engineering",freq:1357,color:"#f37746"},{name:"Security",freq:1359,color:"#dd3535"},{name:"Security(I)",freq:1475,color:"#dd3535"},{name:"AI Private",freq:1343,color:"#d65d95"},{name:"Common",freq:1459,color:"#1ecc43"}];var o=[{id:"o2",name:"Oxygen",label:"O\u2082",color:"blue"},{id:"n2",name:"Nitrogen",label:"N\u2082",color:"red"},{id:"co2",name:"Carbon Dioxide",label:"CO\u2082",color:"grey"},{id:"plasma",name:"Plasma",label:"Plasma",color:"pink"},{id:"water_vapor",name:"Water Vapor",label:"H\u2082O",color:"grey"},{id:"nob",name:"Hyper-noblium",label:"Hyper-nob",color:"teal"},{id:"n2o",name:"Nitrous Oxide",label:"N\u2082O",color:"red"},{id:"no2",name:"Nitryl",label:"NO\u2082",color:"brown"},{id:"tritium",name:"Tritium",label:"Tritium",color:"green"},{id:"bz",name:"BZ",label:"BZ",color:"purple"},{id:"stim",name:"Stimulum",label:"Stimulum",color:"purple"},{id:"pluox",name:"Pluoxium",label:"Pluoxium",color:"blue"},{id:"miasma",name:"Miasma",label:"Miasma",color:"olive"},{id:"hydrogen",name:"Hydrogen",label:"H\u2082",color:"white"},{id:"ab",name:"Agent B",label:"Agent B",color:"purple"}];t.getGasLabel=function(e,t){var n=String(e).toLowerCase(),r=o.find((function(e){return e.id===n||e.name.toLowerCase()===n}));return r&&r.label||t||e};t.getGasColor=function(e){var t=String(e).toLowerCase(),n=o.find((function(e){return e.id===t||e.name.toLowerCase()===t}));return n&&n.color};t.timeAgo=function(e,t){if(e>t)return"in the future";var n=(t/=10)-(e/=10);if(n>3600){var o=Math.round(n/3600);return o+" hour"+(1===o?"":"s")+" ago"}if(n>60){var r=Math.round(n/60);return r+" minute"+(1===r?"":"s")+" ago"}var a=Math.round(n);return a+" second"+(1===a?"":"s")+" ago"}},function(e,t,n){"use strict";var o=n(28);e.exports=o("navigator","userAgent")||""},function(e,t,n){"use strict";var o=n(8),r=n(16),a=n(62);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){"use strict";var o=n(38),r=Math.max,a=Math.min;e.exports=function(e,t){var n=o(e);return n<0?r(n+t,0):a(n,t)}},function(e,t,n){"use strict";var o,r=n(9),a=n(133),c=n(131),i=n(86),l=n(177),d=n(128),u=n(102),s=u("IE_PROTO"),m=function(){},p=function(e){return"