diff --git a/.github/workflows/autobuild_tgui.yml b/.github/workflows/autobuild_tgui.yml
new file mode 100644
index 0000000000..b680139f74
--- /dev/null
+++ b/.github/workflows/autobuild_tgui.yml
@@ -0,0 +1,36 @@
+name: Autobuild TGUI
+
+on:
+ push:
+ branches:
+ - 'master'
+ paths:
+ - 'tgui-next/**.js'
+ - 'tgui-next/**.scss'
+
+jobs:
+ build:
+ name: Rebuild TGUI
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v1
+ with:
+ fetch-depth: 25
+ - name: Setup Node
+ uses: actions/setup-node@v1
+ with:
+ node-version: '>=12.13'
+ - name: Build TGUI
+ run: bin/tgui --ci
+ working-directory: ./tgui-next
+ - name: Commit Artifacts
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "TGUI"
+ git pull origin master
+ git commit -m "Automatic TGUI Rebuild [ci skip]" -a || true
+ - name: Push Artifacts
+ uses: ad-m/github-push-action@master
+ with:
+ github_token: ${{ secrets.GITHUB_MASTER_KEY }}
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
index 76cb8bb9db..402cfc73cf 100644
--- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
@@ -735,7 +735,7 @@
/obj/machinery/atmospherics/components/unary/outlet_injector{
dir = 1
},
-/turf/open/space/basic,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"Si" = (
/obj/structure/cable/yellow{
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
index 7f55d69b17..af2ba1ffd7 100644
--- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
@@ -240,7 +240,7 @@
/obj/machinery/atmospherics/components/unary/outlet_injector{
dir = 1
},
-/turf/open/space/basic,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"nR" = (
/obj/structure/cable{
@@ -905,14 +905,6 @@
},
/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
@@ -1728,7 +1720,7 @@ dz
dz
FP
FP
-VR
+FP
dz
dz
Yl
diff --git a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm
index a317684f03..3118ad3f5f 100644
--- a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm
+++ b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm
@@ -64,6 +64,9 @@
/turf/open/floor/plating,
/area/mine/living_quarters)
"aN" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/open/floor/plasteel/white,
/area/mine/laborcamp)
"aW" = (
@@ -82,24 +85,10 @@
"bg" = (
/turf/closed/wall,
/area/mine/eva)
-"bH" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
- dir = 4;
- piping_layer = 3
- },
-/obj/structure/lattice/catwalk,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/living_quarters)
-"bI" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
+"bn" = (
+/obj/structure/cable,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/mine/living_quarters)
"bX" = (
/obj/machinery/door/window/southleft,
@@ -174,13 +163,6 @@
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
-"di" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"dk" = (
/obj/structure/table,
/obj/item/stack/packageWrap,
@@ -192,12 +174,6 @@
},
/turf/open/floor/plasteel,
/area/mine/eva)
-"dC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"dL" = (
/obj/machinery/atmospherics/components/binary/pump/on,
/obj/structure/cable{
@@ -220,6 +196,15 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
+"dU" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/sign/warning/electricshock{
+ pixel_y = -32
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"dZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -301,6 +286,21 @@
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
+"fx" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
+"fA" = (
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"fN" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -308,6 +308,12 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 5
},
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"fO" = (
@@ -349,9 +355,18 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/mine/production)
+"gn" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
"gs" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"gP" = (
@@ -376,6 +391,15 @@
},
/turf/open/floor/plasteel/white,
/area/mine/laborcamp)
+"hb" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"hf" = (
/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/plasteel,
@@ -387,14 +411,6 @@
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
-"hv" = (
-/obj/machinery/camera{
- c_tag = "Crew Area Hallway West";
- dir = 1;
- network = list("mine")
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"hy" = (
/obj/machinery/camera{
c_tag = "Labor Camp External";
@@ -415,25 +431,21 @@
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"hP" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
+ dir = 4;
+ piping_layer = 3
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/mine/living_quarters)
"hQ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
+ dir = 1;
+ piping_layer = 3
},
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
+/obj/structure/lattice/catwalk,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/mine/laborcamp/security)
"ia" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -582,6 +594,14 @@
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
+"kP" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
"kR" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -630,6 +650,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 6
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"lI" = (
@@ -675,6 +698,7 @@
/area/mine/production)
"mp" = (
/obj/docking_port/stationary{
+ area_type = /area/lavaland/surface/outdoors;
dir = 8;
dwidth = 2;
height = 5;
@@ -714,6 +738,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"mN" = (
@@ -732,13 +759,11 @@
},
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
-"nv" = (
+"nx" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-2"
- },
+/obj/structure/cable,
/turf/open/floor/plating,
-/area/mine/living_quarters)
+/area/mine/laborcamp/security)
"ny" = (
/obj/machinery/computer/prisoner,
/obj/effect/turf_decal/tile/red{
@@ -771,11 +796,17 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 10
},
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
@@ -789,6 +820,14 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
+"nL" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"nN" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -804,6 +843,19 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/mine/production)
+"nX" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"oo" = (
/obj/machinery/conveyor{
id = "mining_internal"
@@ -827,6 +879,9 @@
/obj/machinery/door/airlock/medical/glass{
name = "Infirmary"
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/white,
/area/mine/laborcamp)
"oy" = (
@@ -885,6 +940,22 @@
},
/turf/open/floor/plasteel,
/area/mine/eva)
+"pu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/living_quarters)
"pK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
@@ -946,6 +1017,15 @@
},
/turf/open/floor/plating,
/area/mine/living_quarters)
+"qx" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/random{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
"qH" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 30
@@ -1070,6 +1150,12 @@
"si" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"sj" = (
@@ -1150,15 +1236,25 @@
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
+"td" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/mine/laborcamp)
"tk" = (
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3,
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"tr" = (
@@ -1182,16 +1278,6 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
-"uh" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"uG" = (
/obj/structure/table,
/obj/item/clothing/glasses/meson,
@@ -1257,6 +1343,13 @@
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
+"vA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
"vE" = (
/obj/effect/turf_decal/tile/brown{
dir = 1
@@ -1284,6 +1377,16 @@
},
/turf/open/floor/plasteel,
/area/mine/eva)
+"vM" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/chair,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
"wd" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -1355,6 +1458,9 @@
/area/mine/production)
"xd" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"xh" = (
@@ -1398,6 +1504,9 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"yt" = (
@@ -1415,6 +1524,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/mine/production)
+"yQ" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"yR" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
@@ -1434,12 +1550,26 @@
},
/turf/open/floor/plating,
/area/mine/living_quarters)
+"zk" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"zo" = (
/obj/structure/table,
/turf/open/floor/carpet,
/area/mine/living_quarters)
"zx" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
/turf/open/floor/plating,
/area/mine/laborcamp)
"zy" = (
@@ -1501,14 +1631,10 @@
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Ah" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "2-8"
- },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"Aj" = (
@@ -1601,6 +1727,16 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/mine/living_quarters)
+"BD" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Mining Station Maintenance";
+ req_access_txt = "48"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
"BO" = (
/obj/machinery/door/airlock{
name = "Labor Camp Storage"
@@ -1637,6 +1773,12 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
+"Cl" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
"Cm" = (
/obj/machinery/vending/snack,
/obj/effect/turf_decal/tile/bar,
@@ -1645,6 +1787,13 @@
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
+"Cw" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
"Cy" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -1747,18 +1896,6 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
-"Em" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"Ev" = (
/obj/machinery/light/small{
dir = 4
@@ -1791,7 +1928,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
-/obj/machinery/vending/security,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"EH" = (
@@ -1804,6 +1943,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
dir = 9
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"FC" = (
@@ -1824,19 +1966,6 @@
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
-"Ge" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
"Gt" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
dir = 1
@@ -1844,9 +1973,6 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"GM" = (
@@ -1890,6 +2016,9 @@
dir = 10
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"Hh" = (
@@ -1901,6 +2030,7 @@
/area/mine/laborcamp)
"Hk" = (
/obj/docking_port/stationary{
+ area_type = /area/lavaland/surface/outdoors;
dir = 8;
dwidth = 3;
height = 7;
@@ -1962,11 +2092,6 @@
},
/turf/open/floor/plasteel,
/area/mine/laborcamp)
-"HR" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/mine/living_quarters)
"HS" = (
/obj/machinery/conveyor{
dir = 10;
@@ -2036,6 +2161,9 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"II" = (
@@ -2051,6 +2179,9 @@
/obj/structure/table,
/obj/effect/turf_decal/tile/red,
/obj/machinery/recharger,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"IS" = (
@@ -2071,19 +2202,6 @@
},
/turf/open/floor/carpet,
/area/mine/living_quarters)
-"Jc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
"Jl" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/obj/effect/turf_decal/tile/purple{
@@ -2265,12 +2383,6 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
-"KR" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"KS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -2291,6 +2403,7 @@
/area/mine/living_quarters)
"Lb" = (
/obj/docking_port/stationary{
+ area_type = /area/lavaland/surface/outdoors;
dir = 8;
dwidth = 3;
height = 10;
@@ -2344,10 +2457,11 @@
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"LG" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
+/obj/structure/cable{
+ icon_state = "0-2"
},
-/turf/open/floor/plasteel,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/mine/living_quarters)
"LL" = (
/obj/effect/turf_decal/tile/red{
@@ -2389,6 +2503,13 @@
},
/turf/open/floor/plasteel,
/area/mine/production)
+"Mh" = (
+/obj/structure/table,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
"Mj" = (
/obj/structure/sink{
dir = 4;
@@ -2489,12 +2610,6 @@
},
/turf/open/floor/plating,
/area/mine/living_quarters)
-"ML" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"MM" = (
/obj/machinery/light{
dir = 8
@@ -2699,16 +2814,16 @@
/turf/open/floor/plasteel,
/area/mine/living_quarters)
"Qr" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Monitoring";
- req_access_txt = "2"
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-8"
},
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-4"
},
-/turf/open/floor/plasteel,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/mine/laborcamp/security)
"Qx" = (
/obj/structure/chair{
@@ -2735,6 +2850,12 @@
},
/turf/open/floor/plasteel,
/area/mine/eva)
+"QL" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
"Rf" = (
/obj/machinery/mineral/unloading_machine{
dir = 1;
@@ -2752,6 +2873,9 @@
req_access_txt = "2";
security_level = 6
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"Ru" = (
@@ -2834,6 +2958,12 @@
/area/mine/living_quarters)
"Sp" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plating,
/area/mine/laborcamp/security)
"Sq" = (
@@ -2901,7 +3031,7 @@
dir = 8
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-8"
},
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
@@ -2948,6 +3078,9 @@
desc = "Powered by the tears and sweat of laborers.";
name = "Prison Ofitser"
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"Un" = (
@@ -3096,19 +3229,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/dark,
/area/mine/maintenance)
-"WX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"WY" = (
/obj/machinery/door/airlock{
id_tag = "miningdorm1";
@@ -3167,12 +3287,6 @@
},
/turf/open/floor/plasteel,
/area/mine/living_quarters)
-"XR" = (
-/obj/structure/sign/poster/official/random{
- pixel_y = 32
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"XU" = (
/obj/machinery/power/smes{
charge = 5e+006
@@ -3208,9 +3322,6 @@
dir = 1;
network = list("labor")
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/turf/open/floor/plasteel,
/area/mine/laborcamp/security)
"Yi" = (
@@ -3288,13 +3399,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel,
/area/mine/living_quarters)
-"Zu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/lattice/catwalk,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/living_quarters)
"Zw" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -4326,9 +4430,9 @@ cd
cd
HO
cd
-zI
-zI
-VT
+RF
+RF
+RF
VT
VT
VT
@@ -4383,9 +4487,9 @@ HU
cd
Jr
cd
-my
-wV
-VT
+fA
+fx
+RF
VT
uJ
VT
@@ -4440,13 +4544,13 @@ at
cd
Op
cd
-wV
-wV
-wV
+hb
+dU
+RF
+VT
VT
VT
VT
-Lm
Lm
wz
wz
@@ -4483,8 +4587,8 @@ JY
JY
JY
zx
-zx
-zx
+kP
+td
cd
cd
cd
@@ -4498,15 +4602,15 @@ NH
NH
Ya
Mn
-Mn
+BD
Mn
Dv
Mn
-nv
-Ge
-HR
-VN
-Lm
+wV
+VT
+VT
+VT
+wz
Lm
Lm
Lm
@@ -4539,9 +4643,9 @@ JY
JY
JY
JY
-zx
-wB
+Cw
wB
+Mh
cd
AH
NH
@@ -4559,11 +4663,11 @@ EB
MM
LC
Mn
-xH
-dC
-hf
-VN
-bH
+wV
+wV
+VT
+VT
+Lm
Lm
Lm
Lm
@@ -4600,13 +4704,13 @@ cd
eh
aN
ow
-NH
-NH
-NH
-NH
+Cl
+Cl
+Cl
+gn
vo
ly
-xd
+vA
Hg
gs
gs
@@ -4616,11 +4720,11 @@ si
fN
TC
Mn
-ML
-dC
-oy
-VN
-Zu
+wV
+my
+VT
+VT
+VT
Lm
Lm
Lm
@@ -4661,7 +4765,7 @@ fs
NH
Wt
xd
-xd
+vA
Fx
Yf
uR
@@ -4673,13 +4777,13 @@ Hx
mL
Yg
Mn
-XR
-dC
-Ag
-VN
-Jc
-HR
-VN
+zI
+VT
+VT
+VT
+VT
+wz
+Lm
Lm
Lm
Lm
@@ -4729,14 +4833,14 @@ LL
Hx
xS
Gt
-Sp
-FE
-Em
-cD
-Ag
-sm
-uh
-VN
+Dv
+my
+VT
+VT
+VT
+VT
+wz
+Lm
Lm
Lm
Lm
@@ -4788,12 +4892,12 @@ nJ
Ah
Qr
hQ
-bI
-hQ
-hQ
-WX
-hv
-VN
+VT
+VT
+VT
+Lm
+Lm
+Lm
Lm
Lm
Lm
@@ -4843,13 +4947,13 @@ WL
Hx
IG
UJ
-Sp
-Ag
-Ag
-di
-KR
+yQ
+my
+my
+VT
+Lm
hP
-Ag
+Lm
VN
VN
VN
@@ -4898,15 +5002,15 @@ Ya
Mn
kB
Oh
-Hx
+QL
sR
Al
Al
Al
Al
LG
-hP
-Ag
+pu
+bn
VN
zy
If
@@ -4952,7 +5056,7 @@ my
my
my
zI
-Sp
+Dv
ny
ig
IK
@@ -4961,9 +5065,9 @@ Al
wC
wC
Al
-Ag
-hP
-Ag
+hf
+vM
+xH
VN
Ru
Ag
@@ -5010,16 +5114,16 @@ my
my
zI
Sp
-Sp
-Sp
-Sp
-Sp
+zk
+nL
+nX
+nx
Al
Uz
Ue
Al
-EH
-hP
+qx
+sm
aW
VN
Dr
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 4743d12d0e..6c1642ca8b 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -173,19 +173,6 @@
"aay" = (
/turf/open/floor/plating,
/area/security/prison)
-"aaz" = (
-/obj/structure/lattice/catwalk,
-/obj/item/stack/marker_beacon{
- anchored = 1;
- icon_state = "markerburgundy-on";
- light_color = "#FA644B";
- light_power = 3;
- light_range = 3;
- name = "Docking Beacon";
- picked_color = "Burgundy"
- },
-/turf/open/space/basic,
-/area/space/nearstation)
"aaA" = (
/obj/machinery/seed_extractor,
/turf/open/floor/plasteel,
@@ -247,46 +234,10 @@
/obj/structure/chair/stool,
/turf/open/floor/plasteel,
/area/security/prison)
-"aaK" = (
-/obj/structure/lattice/catwalk,
-/obj/item/stack/marker_beacon{
- anchored = 1;
- icon_state = "markerburgundy-on";
- light_color = "#FA644B";
- light_power = 3;
- light_range = 3;
- name = "Docking Beacon";
- picked_color = "Burgundy"
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"aaL" = (
-/obj/machinery/photocopier,
-/turf/open/floor/wood,
-/area/library)
-"aaM" = (
-/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,
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/quartermaster/office)
"aaN" = (
/obj/structure/chair/sofa/right,
/turf/open/floor/plasteel,
/area/security/prison)
-"aaO" = (
-/obj/effect/spawner/lootdrop/keg,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"aaP" = (
/obj/machinery/computer/cryopod{
dir = 8;
@@ -297,12 +248,6 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"aaQ" = (
-/obj/structure/sign/poster/contraband/random{
- pixel_y = 32
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"aaR" = (
/obj/structure/lattice,
/obj/structure/sign/warning/securearea{
@@ -340,15 +285,6 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"aaY" = (
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 4;
- name = "4maintenance loot spawner"
- },
-/obj/item/poster/random_official,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"aaZ" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/security/armory)
@@ -569,11 +505,6 @@
"abF" = (
/turf/open/floor/plasteel/freezer,
/area/security/prison)
-"abG" = (
-/obj/structure/door_assembly/door_assembly_mai,
-/obj/item/electronics/airlock,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"abH" = (
/obj/structure/table,
/obj/item/storage/box/chemimp{
@@ -1634,10 +1565,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
-"adO" = (
-/obj/effect/spawner/structure/window/shuttle,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"adP" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -2052,34 +1979,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"aeD" = (
-/obj/structure/grille/broken,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"aeE" = (
-/obj/structure/girder,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"aeF" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/computer/station_alert{
- 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/ai_monitored/turret_protected/aisat_interior)
"aeG" = (
/obj/structure/cable,
/obj/machinery/power/solar{
@@ -2458,12 +2357,6 @@
},
/turf/open/floor/plasteel,
/area/security/main)
-"afn" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"afo" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod Three"
@@ -2484,39 +2377,6 @@
},
/turf/open/space/basic,
/area/space)
-"afq" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
-"afr" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
-"afs" = (
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = -31
- },
-/obj/machinery/computer/monitor{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-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/ai_monitored/turret_protected/aisat_interior)
"aft" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 5
@@ -2827,15 +2687,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"age" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"agf" = (
/obj/structure/table,
/obj/item/stack/sheet/metal,
@@ -2985,10 +2836,6 @@
/obj/machinery/suit_storage_unit/security,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"agv" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"agw" = (
/obj/structure/table,
/obj/machinery/syndicatebomb/training,
@@ -3118,14 +2965,6 @@
},
/turf/open/floor/plasteel,
/area/security/main)
-"agH" = (
-/obj/machinery/bluespace_beacon,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/landmark/start/cyborg,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/turret_protected/aisat_interior)
"agI" = (
/obj/machinery/airalarm{
pixel_y = 23
@@ -3255,12 +3094,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/warden)
-"agX" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"agY" = (
/obj/structure/table,
/obj/item/storage/fancy/donut_box,
@@ -3501,16 +3334,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"ahw" = (
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"ahx" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4651,16 +4474,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
-"ajC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"ajD" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4869,18 +4682,6 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
-"ajX" = (
-/obj/machinery/computer/teleporter{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/ai_monitored/turret_protected/aisat_interior)
-"ajY" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/landmark/start/cyborg,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/turret_protected/aisat/atmos)
"ajZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external{
@@ -5164,18 +4965,6 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
-"akz" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/landmark/start/cyborg,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/turret_protected/aisat_interior)
"akA" = (
/obj/structure/chair{
dir = 8;
@@ -6276,14 +6065,6 @@
/turf/open/floor/plasteel,
/area/security/processing)
"anu" = (
-/obj/machinery/button/door{
- desc = "A remote control switch for the exit.";
- id = "laborexit";
- name = "exit button";
- normaldoorcontrol = 1;
- pixel_x = 26;
- pixel_y = -6
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
@@ -6432,10 +6213,8 @@
/area/space)
"anP" = (
/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/security{
- id_tag = "laborexit";
- name = "Labor Shuttle";
- req_access_txt = "63"
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Shuttle Airlock"
},
/turf/open/floor/plasteel,
/area/security/processing)
@@ -16138,6 +15917,10 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"aNV" = (
+/obj/machinery/photocopier,
+/turf/open/floor/wood,
+/area/library)
"aNW" = (
/obj/machinery/door/airlock/public/glass{
name = "Chapel Office";
@@ -22009,7 +21792,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
-/turf/open/floor/wood,
+/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"bcR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -22128,6 +21911,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/vending/wardrobe/cap_wardrobe,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bdj" = (
@@ -23115,7 +22899,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
-/turf/open/floor/carpet,
+/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bfD" = (
/obj/structure/cable{
@@ -26705,6 +26489,7 @@
/area/crew_quarters/heads/captain)
"boa" = (
/obj/structure/toilet{
+ contents = newlist(/obj/item/toy/snappop/phoenix);
dir = 4
},
/turf/open/floor/plasteel/freezer,
@@ -30020,6 +29805,12 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/qm)
+"bvG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"bvH" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -30190,6 +29981,21 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"bwc" = (
+/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,
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
"bwd" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -48366,6 +48172,16 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"coh" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"coi" = (
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
+/turf/open/floor/plasteel,
+/area/security/brig)
"cop" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{
dir = 1
@@ -48524,6 +48340,10 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"coI" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/hydroponics)
"coJ" = (
/obj/machinery/door/firedoor,
/obj/structure/cable/yellow{
@@ -48754,6 +48574,15 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"cpF" = (
+/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)
"cpG" = (
/obj/structure/table/optable,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
@@ -49488,9 +49317,46 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
+"ctu" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctv" = (
/turf/closed/wall/r_wall,
/area/space/nearstation)
+"ctw" = (
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/computer/station_alert{
+ 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/ai_monitored/turret_protected/aisat_interior)
+"ctx" = (
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
+"cty" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctz" = (
/obj/machinery/door/poddoor/shutters{
id = "teledoor";
@@ -49535,6 +49401,41 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
+"ctG" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
+"ctH" = (
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_x = -31
+ },
+/obj/machinery/computer/monitor{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-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/ai_monitored/turret_protected/aisat_interior)
+"ctI" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctJ" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -49558,6 +49459,14 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
+"ctM" = (
+/obj/machinery/bluespace_beacon,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/landmark/start/cyborg,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctN" = (
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 10
@@ -49565,6 +49474,12 @@
/obj/structure/lattice,
/turf/open/space,
/area/space/nearstation)
+"ctP" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctQ" = (
/obj/structure/table,
/obj/machinery/microwave{
@@ -49590,6 +49505,26 @@
/obj/structure/sign/warning/radiation/rad_area,
/turf/closed/wall,
/area/engine/engineering)
+"ctS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
+"ctT" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -49612,6 +49547,12 @@
/obj/structure/chair,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
+"ctW" = (
+/obj/machinery/computer/teleporter{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"ctX" = (
/obj/machinery/camera{
c_tag = "MiniSat Teleporter";
@@ -49892,6 +49833,12 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/atmos)
+"cuC" = (
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/landmark/start/cyborg,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/turret_protected/aisat/atmos)
"cuD" = (
/obj/machinery/light/small{
dir = 8
@@ -49940,6 +49887,18 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
+"cuG" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/landmark/start/cyborg,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/turret_protected/aisat_interior)
"cuH" = (
/obj/machinery/light/small{
dir = 8
@@ -50882,14 +50841,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
-"cwP" = (
-/obj/structure/fireplace,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 23
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
"cwT" = (
/obj/machinery/camera{
c_tag = "Arrivals Escape Pod 2";
@@ -51199,14 +51150,6 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"czi" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 8;
- name = "8maintenance loot spawner"
- },
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
"czk" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -52077,6 +52020,15 @@
/obj/machinery/deepfryer,
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
+"cCt" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/obj/item/poster/random_official,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"cCB" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 10
@@ -52238,6 +52190,36 @@
/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"cEo" = (
+/obj/structure/closet/boxinggloves,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"cGz" = (
+/obj/structure/table/wood,
+/obj/item/instrument/violin,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"cHf" = (
+/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)
"cHD" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -52548,27 +52530,10 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
-"cJn" = (
-/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)
-"cMk" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
+"cIv" = (
+/obj/structure/sign/poster/official/cohiba_robusto_ad,
+/turf/closed/wall,
+/area/lawoffice)
"cMC" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -52599,6 +52564,10 @@
},
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/starboard/aft)
+"cMS" = (
+/obj/item/chair/wood,
+/turf/open/floor/plating,
+/area/maintenance/port)
"cNa" = (
/obj/structure/cable,
/obj/machinery/power/solar{
@@ -52752,6 +52721,10 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cPn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"cPA" = (
/obj/machinery/atmospherics/components/binary/valve{
dir = 4
@@ -52794,47 +52767,25 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cRz" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+"cQF" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
},
-/obj/machinery/button/door{
- id = "holoprivacy";
- name = "Holodeck Privacy";
- pixel_y = 24
+/obj/item/radio/intercom{
+ pixel_y = 25
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"cRD" = (
-/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)
-"cSn" = (
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"cQT" = (
+/obj/structure/filingcabinet,
/obj/machinery/light{
- dir = 1
+ dir = 8;
+ light_color = "#e8eaff"
},
-/turf/open/floor/circuit,
-/area/ai_monitored/nuke_storage)
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"cSA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53196,6 +53147,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"cTT" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/circuit,
+/area/ai_monitored/nuke_storage)
"cTX" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -53218,952 +53175,31 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"cUx" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/bridge/meeting_room)
"cVb" = (
/turf/closed/wall,
/area/hallway/secondary/service)
-"cVp" = (
-/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)
-"cVu" = (
-/obj/machinery/camera{
- c_tag = "Locker Room South";
- dir = 8
- },
-/obj/structure/closet/secure_closet/personal,
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+"cVs" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/wood,
+/area/bridge/meeting_room)
"cVK" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"cXx" = (
-/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)
-"dbn" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engine_smes)
-"dbM" = (
-/turf/open/floor/plating,
-/area/space/nearstation)
-"dcG" = (
-/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)
-"dfh" = (
-/obj/machinery/power/apc{
- areastring = "/area/science/circuit";
- name = "Circuitry Lab APC";
- pixel_x = 30
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"dfI" = (
-/obj/machinery/door/firedoor,
-/obj/structure/sign/departments/evac{
- pixel_y = -32
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
-"dfL" = (
-/obj/structure/reagent_dispensers/keg/gargle,
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"dgh" = (
-/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)
-"dgz" = (
-/turf/closed/wall,
-/area/crew_quarters/cryopod)
-"dhx" = (
-/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)
-"dok" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-22"
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"doP" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/carpet{
- icon_state = "carpetsymbol"
- },
-/area/crew_quarters/theatre)
-"dqu" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
-"dtE" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"dvc" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"dvO" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/turf/closed/wall,
-/area/science/circuit)
-"dwc" = (
-/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)
-"dxB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/prison)
-"dzi" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"dzy" = (
-/obj/machinery/door/airlock{
- name = "Shower Room"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/toilet)
-"dHb" = (
-/obj/structure/chair/comfy/black{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"dKP" = (
-/turf/closed/wall,
-/area/maintenance/bar)
-"dKV" = (
-/obj/structure/chair/stool/bar,
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"dMu" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"dMX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/obj/structure/chair/comfy/brown,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"dMZ" = (
-/obj/structure/sign/poster/official/random{
- pixel_y = 32
- },
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"dRC" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"dSv" = (
-/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)
-"dTe" = (
-/obj/structure/chair/comfy/beige{
- dir = 8
- },
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel/grimy,
-/area/hallway/secondary/entry)
-"dTJ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/obj/structure/chair/comfy/brown{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/heads/captain)
-"eaI" = (
-/obj/structure/table/reinforced,
-/obj/item/radio/intercom{
- pixel_x = -30
- },
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"edH" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"ego" = (
-/obj/machinery/atmospherics/components/binary/valve,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"egQ" = (
-/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)
-"egS" = (
-/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)
-"elw" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
+"cXU" = (
/obj/effect/turf_decal/tile/red,
+/obj/machinery/light{
+ light_color = "#c9d3e8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"epV" = (
-/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)
-"eqm" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"est" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/machinery/computer/shuttle/mining/common{
- dir = 4
- },
-/turf/open/floor/plasteel/white/corner{
- dir = 1
- },
-/area/hallway/secondary/entry)
-"evR" = (
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"ewZ" = (
-/obj/structure/chair/sofa/right,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"eyM" = (
-/obj/machinery/mineral/ore_redemption{
- input_dir = 2;
- output_dir = 1
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/quartermaster/miningdock)
-"eHI" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
-"eLH" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plating,
-/area/maintenance/fore)
-"eMQ" = (
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/obj/machinery/vending/wardrobe/curator_wardrobe,
-/turf/open/floor/carpet,
-/area/library)
-"eND" = (
-/obj/structure/filingcabinet,
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"eNK" = (
-/obj/structure/table/wood,
-/obj/item/instrument/guitar,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"eNW" = (
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/dorms)
-"eOv" = (
-/obj/effect/landmark/event_spawn,
-/turf/closed/wall,
-/area/crew_quarters/fitness)
-"eOy" = (
-/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)
-"ePO" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- pixel_y = 5
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"eRk" = (
-/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)
-"eRn" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/closed/wall,
-/area/quartermaster/warehouse)
-"eRz" = (
-/obj/structure/lattice,
-/obj/structure/grille,
-/turf/open/space/basic,
-/area/space/nearstation)
-"eUd" = (
-/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)
-"eVC" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plating,
-/area/crew_quarters/cryopod)
-"eVL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/quartermaster/miningdock)
-"eXm" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"fbm" = (
-/obj/structure/chair/comfy/brown{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"fby" = (
-/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)
-"fcG" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/science/mixing)
-"fhP" = (
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"fjy" = (
-/obj/structure/lattice,
-/turf/closed/wall/r_wall,
-/area/crew_quarters/heads/captain)
-"flc" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/fancy/donut_box,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"fnC" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
-"fnJ" = (
-/obj/structure/sign/mining{
- pixel_y = 7
- },
-/turf/closed/wall,
-/area/quartermaster/miningdock)
-"frE" = (
-/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)
-"ftv" = (
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 4;
- name = "4maintenance loot spawner"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"fuo" = (
-/obj/item/reagent_containers/glass/bucket,
-/turf/open/floor/grass,
-/area/security/prison)
-"fvk" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"fvW" = (
-/obj/structure/chair/comfy/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"fvY" = (
-/obj/machinery/computer/cryopod{
- pixel_y = 26
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"fxa" = (
-/obj/structure/chair/wood/normal,
-/turf/open/floor/wood{
- icon_state = "wood-broken4"
- },
-/area/maintenance/bar)
-"fyq" = (
-/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)
-"fyM" = (
-/obj/structure/closet/wardrobe/cargotech,
-/obj/item/radio/headset/headset_cargo,
-/turf/open/floor/plasteel,
-/area/quartermaster/storage)
-"fzd" = (
-/turf/closed/wall,
-/area/crew_quarters/abandoned_gambling_den)
-"fGf" = (
-/obj/machinery/smartfridge/disks{
- pixel_y = 2
- },
-/obj/structure/table,
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"fGl" = (
-/obj/effect/landmark/event_spawn,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/security/brig)
-"fGC" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/airlock/vault,
-/obj/effect/mapping_helpers/airlock/locked,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
-"fHK" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"fIn" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/obj/machinery/meter,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"fJa" = (
-/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)
-"fKl" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"fLd" = (
-/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)
-"fOc" = (
-/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)
-"fPs" = (
-/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)
-"fQF" = (
-/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)
-"fSr" = (
-/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)
-"fTg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"fVU" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"fZD" = (
-/obj/structure/filingcabinet,
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
- },
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"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)
-"gdu" = (
-/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)
-"gfD" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"ggg" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable,
-/turf/open/space,
-/area/solar/starboard/aft)
-"ghs" = (
-/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)
-"ghJ" = (
-/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)
-"ghY" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"gjf" = (
-/obj/machinery/vending/coffee,
-/turf/open/floor/wood,
-/area/bridge/meeting_room)
-"gjl" = (
-/turf/closed/wall,
-/area/quartermaster/warehouse)
-"gjC" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"gtL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
-"gwd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"gwi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"gBo" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"gCe" = (
-/obj/effect/spawner/lootdrop/keg,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"gFD" = (
-/obj/structure/table/wood/fancy/royalblue,
-/obj/item/crowbar/red,
-/turf/open/floor/plating,
-/area/maintenance/port)
-"gIO" = (
-/obj/structure/bed,
-/obj/effect/spawner/lootdrop/bedsheet,
-/turf/open/floor/plating,
-/area/security/prison)
-"gJg" = (
-/turf/closed/wall/mineral/titanium,
-/area/space/nearstation)
-"gKk" = (
-/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)
-"gLH" = (
-/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/port/fore)
-"gMl" = (
-/obj/structure/chair/wood/normal{
- dir = 4
- },
-/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)
-"gQn" = (
-/obj/machinery/light/small,
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/dorms)
-"gSH" = (
-/obj/structure/grille,
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
-"gVX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engine_smes)
-"gVY" = (
+"daI" = (
/obj/structure/reagent_dispensers/foamtank,
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -54178,488 +53214,20 @@
/obj/effect/turf_decal/stripes/box,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"gWd" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plating,
-/area/construction)
-"gXs" = (
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
-"gZG" = (
-/obj/structure/closet/crate/freezer/surplus_limbs,
-/obj/item/reagent_containers/glass/beaker/synthflesh,
-/turf/open/floor/plasteel/white/side{
- dir = 8
- },
-/area/medical/sleeper)
-"haz" = (
-/obj/machinery/autolathe{
- name = "public autolathe"
- },
-/turf/open/floor/plasteel,
-/area/quartermaster/office)
-"haX" = (
-/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)
-"hcd" = (
-/obj/machinery/smartfridge/organ/preloaded,
-/turf/closed/wall,
-/area/medical/sleeper)
-"hdb" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"hdp" = (
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 3;
- name = "3maintenance loot spawner"
- },
+"dbU" = (
/obj/structure/light_construct{
- dir = 8
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"hfe" = (
-/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)
-"hgX" = (
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
+"dce" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
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)
-"hik" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/space,
-/area/solar/starboard/aft)
-"hjw" = (
-/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)
-"hkg" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/crew_quarters/dorms)
-"hlY" = (
-/obj/machinery/door/airlock{
- name = "Recharging Station"
- },
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"hoo" = (
-/obj/effect/landmark/carpspawn,
-/turf/open/space/basic,
-/area/space)
-"htr" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"hvS" = (
-/obj/effect/landmark/stationroom/box/engine,
-/turf/open/space/basic,
-/area/space)
-"hwu" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/security/detectives_office)
-"hzw" = (
-/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)
-"hzR" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"hKF" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plating,
-/area/storage/tech)
-"hMx" = (
-/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)
-"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)
-"hRz" = (
-/obj/structure/chair/comfy/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"hRT" = (
-/obj/effect/landmark/blobstart,
-/turf/open/floor/plating,
-/area/maintenance/department/electrical)
-"hRX" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"hSU" = (
-/obj/structure/chair/sofa/left,
-/obj/structure/window{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"hVw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"hWn" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
-"hYW" = (
-/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)
-"hZH" = (
-/obj/machinery/hydroponics/constructable,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = 29
- },
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
-"idX" = (
-/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)
-"iep" = (
-/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)
-"ier" = (
-/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)
-"igT" = (
-/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)
-"ihm" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/disposalpipe/junction/flip,
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
-"ihC" = (
-/obj/item/chair/wood,
-/turf/open/floor/plating,
-/area/maintenance/port)
-"iiW" = (
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"ilJ" = (
-/obj/effect/turf_decal/tile/red,
-/obj/machinery/light{
- light_color = "#c9d3e8"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
-"imH" = (
-/obj/structure/falsewall,
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"ioB" = (
-/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)
-"ioG" = (
-/obj/machinery/vending/cola/red,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"ioX" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"ipc" = (
-/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)
-"ipA" = (
-/turf/open/floor/plating,
-/area/maintenance/department/medical/morgue)
-"iqw" = (
-/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)
-"isy" = (
-/obj/structure/urinal{
- pixel_y = 32
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
-"itG" = (
-/obj/structure/table/reinforced,
-/obj/item/paper_bin,
-/obj/item/pen,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"itT" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
-"ium" = (
-/mob/living/simple_animal/bot/cleanbot{
- name = "C.L.E.A.N."
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"ivF" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"iyC" = (
-/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)
-"izv" = (
-/obj/machinery/vending/clothing,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"iEx" = (
-/obj/structure/table/wood,
-/obj/machinery/light{
- dir = 4
- },
-/obj/item/instrument/trombone,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"iEI" = (
-/obj/machinery/vending/autodrobe/all_access,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"iEJ" = (
-/obj/machinery/door/airlock/external{
- name = "Escape Pod One"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/hallway/secondary/entry)
-"iES" = (
-/obj/structure/fireplace,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"iFL" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/theatre)
-"iMG" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-14"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
-"iNn" = (
-/obj/machinery/camera{
- c_tag = "Kitchen Cold Room"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/reagent_dispensers/cooking_oil,
-/turf/open/floor/plasteel/showroomfloor,
-/area/crew_quarters/kitchen)
-"iOt" = (
-/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)
-"iOV" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/light_construct{
- dir = 4
- },
+/obj/machinery/meter,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"iRJ" = (
+"dev" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -54680,150 +53248,67 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"iVU" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plating,
-/area/crew_quarters/cryopod)
-"iWa" = (
-/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)
-"iWk" = (
-/obj/structure/bookcase{
- name = "Forbidden Knowledge"
- },
-/turf/open/floor/carpet,
-/area/library)
-"iYz" = (
-/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)
-"jaa" = (
-/obj/machinery/hydroponics/constructable,
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
-"jbf" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
+"dfh" = (
/obj/machinery/power/apc{
- areastring = "/area/hallway/secondary/service";
- dir = 1;
- name = "Service Hall APC";
- pixel_y = 25
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
-"jdT" = (
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"jeR" = (
-/obj/structure/chair/sofa/left,
-/turf/open/floor/plasteel,
-/area/security/prison)
-"jeT" = (
-/obj/machinery/vending/clothing,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"jgm" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
+ areastring = "/area/science/circuit";
+ name = "Circuitry Lab APC";
+ pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
- dir = 6
+ dir = 4
},
-/obj/machinery/camera{
- c_tag = "Circuitry Lab";
- dir = 8;
- network = list("ss13","rd")
+/obj/structure/cable{
+ icon_state = "0-8"
},
/turf/open/floor/plasteel,
/area/science/circuit)
-"jgv" = (
-/obj/structure/chair/comfy/brown{
- color = "#596479";
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"jhF" = (
-/obj/effect/turf_decal/stripes/line{
+"dfL" = (
+/obj/structure/reagent_dispensers/keg/gargle,
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"dgz" = (
+/turf/closed/wall,
+/area/crew_quarters/cryopod)
+"dgO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light{
- dir = 4;
- light_color = "#c1caff"
- },
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
-"jiR" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
+"diq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"dly" = (
+/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)
+"dml" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"dqb" = (
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
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)
-"jlm" = (
-/obj/machinery/rnd/production/techfab/department/cargo,
-/turf/open/floor/plasteel,
-/area/quartermaster/office)
-"jly" = (
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"dqu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/maintenance/disposal/incinerator)
+"dsC" = (
/obj/structure/chair/stool{
pixel_y = 8
},
@@ -54834,65 +53319,273 @@
icon_state = "carpetsymbol"
},
/area/crew_quarters/theatre)
-"jmC" = (
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
-"jnm" = (
-/obj/machinery/power/smes{
- charge = 5e+006
+"dtx" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 6
+/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)
+"dvc" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"dvO" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/closed/wall,
+/area/science/circuit)
+"dyS" = (
+/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)
+"dzi" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"dBm" = (
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"dCV" = (
+/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)
+"dKP" = (
+/turf/closed/wall,
+/area/maintenance/bar)
+"dKV" = (
+/obj/structure/chair/stool/bar,
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"dLG" = (
+/obj/machinery/door/airlock/security{
+ name = "Firing Range";
+ req_access_txt = "2"
},
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "1-2"
},
/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"jnX" = (
-/obj/machinery/door/airlock/external{
- name = "Common Mining Shuttle Bay"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/hallway/secondary/entry)
-"job" = (
-/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)
-"jqv" = (
-/obj/structure/chair/wood/normal{
- dir = 1
- },
-/turf/open/floor/wood{
- icon_state = "wood-broken7"
- },
-/area/maintenance/bar)
-"jrE" = (
+/area/security/prison)
+"dMZ" = (
/obj/structure/sign/poster/official/random{
- pixel_x = 32
+ pixel_y = 32
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"jsy" = (
+"dPk" = (
+/obj/structure/closet{
+ name = "Costume Closet"
+ },
+/obj/item/clothing/head/russobluecamohat,
+/obj/item/clothing/head/russobluecamohat,
+/obj/item/clothing/head/helmet/rus_ushanka,
+/obj/item/clothing/head/helmet/rus_ushanka,
+/obj/item/clothing/head/helmet/rus_ushanka,
+/obj/item/clothing/head/helmet/rus_ushanka,
+/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)
+"dTI" = (
+/obj/structure/urinal{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"dVU" = (
+/turf/open/floor/plating,
+/area/space/nearstation)
+"dXq" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#c1caff"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"eaI" = (
+/obj/structure/table/reinforced,
+/obj/item/radio/intercom{
+ pixel_x = -30
+ },
+/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/cell/high,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"eaR" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/space,
+/area/solar/starboard/fore)
+"edA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-04"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"efO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"egt" = (
+/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)
+"eih" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"elh" = (
+/obj/structure/chair/comfy/black{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"enB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/security/execution/transfer)
+"epC" = (
+/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)
+"epD" = (
+/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)
+"eqd" = (
+/obj/item/electropack/shockcollar,
+/obj/item/assembly/signaler,
+/turf/open/floor/plating,
+/area/security/prison)
+"eqA" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
+"esZ" = (
+/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)
+"evR" = (
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"ewu" = (
+/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)
+"exP" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-14"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
+"eyM" = (
+/obj/machinery/mineral/ore_redemption{
+ input_dir = 2;
+ output_dir = 1
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/quartermaster/miningdock)
+"eAJ" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"eBX" = (
+/obj/machinery/vending/cola/space_up,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"eCr" = (
/obj/structure/closet{
name = "Suit Closet"
},
@@ -54916,61 +53609,1168 @@
/obj/item/clothing/under/lawyer/really_black,
/obj/item/clothing/under/lawyer/red,
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"jtk" = (
-/obj/structure/chair/comfy/black{
+/area/crew_quarters/fitness)
+"eCR" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"eEe" = (
+/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)
+"eFW" = (
+/obj/effect/spawner/structure/window/shuttle,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"eHI" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/disposal/incinerator)
+"eHU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"eJa" = (
+/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)
+"eQb" = (
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"eRz" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space/nearstation)
+"eSe" = (
+/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)
+"eVC" = (
+/obj/effect/spawner/structure/window,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plating,
+/area/crew_quarters/cryopod)
+"eVL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light_switch{
+ pixel_y = 28
+ },
+/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"jtU" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/security/execution/transfer)
-"jvN" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/area/quartermaster/miningdock)
+"fcn" = (
+/obj/structure/lattice,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/nuke_storage)
+"fcG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/science/mixing)
+"fde" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"jwi" = (
+/area/security/brig)
+"feE" = (
+/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)
+"feG" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/turf/open/floor/wood,
-/area/crew_quarters/heads/captain)
-"jzi" = (
+/area/crew_quarters/bar)
+"fgG" = (
+/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)
+"fjS" = (
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"flc" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/fancy/donut_box,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"flE" = (
+/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)
+"fne" = (
+/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)
+"fnC" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"fpl" = (
+/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)
+"fpI" = (
+/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)
+"fsj" = (
+/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)
+"ftE" = (
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"fup" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"fvY" = (
+/obj/machinery/computer/cryopod{
+ pixel_y = 26
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"fxa" = (
+/obj/structure/chair/wood/normal,
+/turf/open/floor/wood{
+ icon_state = "wood-broken4"
+ },
+/area/maintenance/bar)
+"fxe" = (
+/obj/structure/chair/sofa,
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"fxV" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"fzd" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"fAj" = (
+/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)
+"fBy" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"fCx" = (
+/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)
+"fFA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"fGf" = (
+/obj/machinery/smartfridge/disks{
+ pixel_y = 2
+ },
+/obj/structure/table,
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"fHG" = (
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"fIs" = (
/obj/structure/grille,
/obj/structure/lattice,
/turf/open/floor/plating,
/area/space/nearstation)
-"jzD" = (
-/obj/structure/piano{
- icon_state = "piano"
+"fKl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"fMZ" = (
+/obj/item/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 27
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"fOA" = (
+/obj/machinery/door/airlock{
+ name = "Theatre Backstage";
+ req_access_txt = "46"
},
/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"jAD" = (
-/obj/structure/grille,
-/turf/open/floor/plating/airless,
+/area/crew_quarters/theatre)
+"fOI" = (
+/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)
+"fTg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"fTC" = (
+/obj/structure/filingcabinet,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"fZm" = (
+/obj/structure/chair/sofa/left,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"gbd" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"gbh" = (
+/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)
+"gbq" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plating,
+/area/construction)
+"gbu" = (
+/obj/structure/bed,
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/plating,
+/area/security/prison)
+"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)
+"gcF" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/light_construct{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"gfr" = (
+/obj/structure/bed,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"gfC" = (
+/obj/effect/turf_decal/tile/red,
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"gfD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"ghq" = (
+/obj/structure/lattice/catwalk,
+/obj/item/stack/marker_beacon{
+ anchored = 1;
+ icon_state = "markerburgundy-on";
+ light_color = "#FA644B";
+ light_power = 3;
+ light_range = 3;
+ name = "Docking Beacon";
+ picked_color = "Burgundy"
+ },
+/turf/open/floor/plating,
/area/space/nearstation)
-"jBZ" = (
+"ghD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"gjl" = (
+/turf/closed/wall,
+/area/quartermaster/warehouse)
+"gnf" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/sign/departments/custodian{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"gpD" = (
+/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)
+"grA" = (
+/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)
+"gwd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"gxc" = (
+/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)
+"gzf" = (
+/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)
+"gBo" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"gCC" = (
+/obj/structure/sign/poster/contraband/tools,
+/turf/closed/wall,
+/area/storage/primary)
+"gDl" = (
+/obj/effect/landmark/carpspawn,
+/turf/open/space/basic,
+/area/space)
+"gIU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"gJi" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"gLH" = (
+/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/port/fore)
+"gMl" = (
+/obj/structure/chair/wood/normal{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"gNC" = (
+/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)
+"gOZ" = (
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/fitness)
+"gQX" = (
+/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)
+"gRZ" = (
+/obj/structure/bookcase{
+ name = "Forbidden Knowledge"
+ },
+/turf/open/floor/carpet,
+/area/library)
+"gTx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"gUu" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"gWd" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/construction)
+"gXs" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"gZG" = (
+/obj/structure/closet/crate/freezer/surplus_limbs,
+/obj/item/reagent_containers/glass/beaker/synthflesh,
+/turf/open/floor/plasteel/white/side{
+ dir = 8
+ },
+/area/medical/sleeper)
+"haL" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
+"haM" = (
+/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/structure/cable{
- icon_state = "1-8"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"hcb" = (
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"hcA" = (
+/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)
+"hew" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"hgO" = (
+/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)
+"hiV" = (
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plating,
+/area/maintenance/department/electrical)
+"hlV" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/crew_quarters/dorms)
+"hnl" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/closed/wall,
+/area/maintenance/port)
+"hnU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"hrF" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space,
+/area/solar/port/aft)
+"hsb" = (
+/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)
+"hse" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"hBA" = (
+/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)
+"hGH" = (
+/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)
+"hHQ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"hIL" = (
+/obj/structure/sign/poster/contraband/space_up{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"hIM" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"hOv" = (
+/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)
+"hPs" = (
+/obj/structure/fireplace,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 23
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
+"hPP" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/closed/wall,
+/area/quartermaster/warehouse)
+"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)
+"hRI" = (
+/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)
+"hSZ" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"hWd" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"idK" = (
+/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)
+"iiW" = (
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"ijG" = (
+/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)
+"ikk" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"ikm" = (
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"imH" = (
+/obj/structure/falsewall,
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"inR" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/crew_quarters/theatre)
+"iou" = (
+/obj/machinery/light/small,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"ipA" = (
+/turf/open/floor/plating,
+/area/maintenance/department/medical/morgue)
+"itG" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"itK" = (
+/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)
+"itQ" = (
+/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)
+"ium" = (
+/mob/living/simple_animal/bot/cleanbot{
+ name = "C.L.E.A.N."
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"iuR" = (
+/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)
+"iwB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/maintenance/port)
+"izv" = (
+/obj/machinery/vending/clothing,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"iDo" = (
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space/nearstation)
+"iDS" = (
+/obj/docking_port/stationary{
+ dir = 8;
+ dwidth = 3;
+ height = 5;
+ id = "commonmining_home";
+ name = "SS13: Common Mining Dock";
+ roundstart_template = /datum/map_template/shuttle/mining_common/meta;
+ width = 7
+ },
+/turf/open/space/basic,
+/area/space)
+"iEJ" = (
+/obj/machinery/door/airlock/external{
+ name = "Escape Pod One"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"iHk" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"iNn" = (
+/obj/machinery/camera{
+ c_tag = "Kitchen Cold Room"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/reagent_dispensers/cooking_oil,
+/turf/open/floor/plasteel/showroomfloor,
+/area/crew_quarters/kitchen)
+"iTq" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/crew_quarters/theatre)
+"iTU" = (
+/obj/structure/piano{
+ icon_state = "piano"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"iVU" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/spawner/structure/window,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plating,
+/area/crew_quarters/cryopod)
+"iWx" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"jaF" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"jaH" = (
+/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)
+"jbf" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/hallway/secondary/service";
+ dir = 1;
+ name = "Service Hall APC";
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"jex" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/sleeper)
+"jez" = (
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"jgm" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/camera{
+ c_tag = "Circuitry Lab";
+ dir = 8;
+ network = list("ss13","rd")
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"jgA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"jjC" = (
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"jkx" = (
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/machinery/computer/slot_machine,
+/obj/item/coin/iron,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"jkz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"jlm" = (
+/obj/machinery/rnd/production/techfab/department/cargo,
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
+"jls" = (
+/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)
+"jmV" = (
+/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)
+"jqv" = (
+/obj/structure/chair/wood/normal{
+ dir = 1
+ },
+/turf/open/floor/wood{
+ icon_state = "wood-broken7"
+ },
+/area/maintenance/bar)
+"jrE" = (
+/obj/structure/sign/poster/official/random{
+ pixel_x = 32
+ },
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"juG" = (
+/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)
+"jvd" = (
+/obj/structure/closet/athletic_mixed,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"jxF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"jAD" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"jAN" = (
+/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)
+"jBi" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Holodeck Door"
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/fitness)
+"jBA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
"jCq" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -54983,22 +54783,46 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"jDY" = (
-/obj/structure/chair{
+"jEc" = (
+/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/dark,
-/area/hallway/primary/central)
-"jFy" = (
-/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"
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
},
-/obj/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/wood,
-/area/library)
+/area/crew_quarters/fitness)
+"jFH" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"jGW" = (
+/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)
+"jHh" = (
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"jHt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment{
@@ -55012,10 +54836,23 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"jHM" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/security/prison)
+"jIs" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space,
+/area/solar/starboard/fore)
+"jJg" = (
+/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)
"jJF" = (
/obj/machinery/door/airlock/maintenance,
/obj/structure/cable{
@@ -55023,53 +54860,42 @@
},
/turf/open/floor/wood,
/area/maintenance/port/aft)
-"jLM" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
+"jKP" = (
+/obj/structure/disposalpipe/segment,
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
/turf/open/floor/plating,
-/area/maintenance/fore)
-"jMK" = (
-/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)
-"jNo" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"jRy" = (
-/obj/machinery/door/airlock{
- name = "Instrument Storage"
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard/fore)
-"jSa" = (
-/obj/item/electropack/shockcollar,
-/obj/item/assembly/signaler,
-/turf/open/floor/plating,
-/area/security/prison)
-"jSD" = (
-/obj/machinery/door/airlock/security{
- name = "Firing Range";
- req_access_txt = "2"
+/area/maintenance/fore/secondary)
+"jLn" = (
+/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)
+"jLT" = (
+/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)
+"jRw" = (
+/obj/machinery/computer/arcade/minesweeper{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
/area/security/prison)
"jSO" = (
/obj/machinery/light{
@@ -55089,65 +54915,71 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"jXg" = (
-/obj/machinery/power/apc{
- areastring = "/area/ai_monitored/nuke_storage";
- dir = 1;
- name = "Vault APC";
- pixel_y = 25
- },
+"jZT" = (
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/light{
- dir = 1
+/obj/machinery/door/poddoor/preopen{
+ id = "maint2"
},
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"kaq" = (
+/turf/closed/wall/mineral/titanium,
+/area/space/nearstation)
+"kdP" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/turf/open/floor/circuit,
-/area/ai_monitored/nuke_storage)
-"jYI" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"ker" = (
+/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)
+"keM" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/machinery/washing_machine,
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
+"kfv" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/storage/tech)
+"kfX" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"kay" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/snacks/bluecherrycupcake{
- pixel_y = 5
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"kcj" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
+/turf/closed/wall/r_wall,
+/area/engine/engine_smes)
+"kgr" = (
+/obj/machinery/light/small{
+ brightness = 3;
dir = 8
},
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"kdm" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plating,
/area/security/prison)
-"kel" = (
-/obj/effect/landmark/blobstart,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"kfE" = (
-/obj/machinery/computer/libraryconsole/bookmanagement,
-/obj/structure/table,
-/turf/open/floor/plasteel,
-/area/security/prison)
"khb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -55158,22 +54990,6 @@
/obj/item/reagent_containers/glass/bucket,
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
-"khA" = (
-/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)
"khB" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -55183,10 +54999,37 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"klu" = (
+"khV" = (
+/obj/machinery/vending/cola/red,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"kls" = (
/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"kmw" = (
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"kmS" = (
+/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)
"knx" = (
/obj/machinery/door/airlock/public/glass{
name = "Central Access"
@@ -55215,75 +55058,57 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"ksn" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
+"kqI" = (
/obj/structure/window,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"ktP" = (
+/obj/machinery/power/smes{
+ charge = 5e+006
},
-/obj/effect/turf_decal/tile/blue{
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"ktS" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"kvl" = (
+/obj/structure/grille,
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
+"kvL" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"kuY" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "maint2"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"kvb" = (
-/obj/structure/shuttle/engine/heater{
- dir = 1
- },
-/turf/closed/wall/mineral/titanium,
-/area/space/nearstation)
-"kvZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
-"kwy" = (
-/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)
-"kxc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"kyi" = (
-/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)
+/area/bridge/meeting_room)
+"kxf" = (
+/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)
"kyF" = (
/obj/effect/landmark/xeno_spawn,
/turf/open/floor/wood,
@@ -55292,91 +55117,83 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/science/mixing)
-"kCk" = (
-/obj/structure/mirror{
- pixel_y = 32
+"kAH" = (
+/obj/machinery/camera{
+ c_tag = "Bar West";
+ dir = 4
},
-/obj/structure/sink{
- dir = 1;
- pixel_y = 25
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
-"kCW" = (
-/obj/machinery/portable_atmospherics/scrubber,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"kDD" = (
-/obj/structure/lattice,
-/turf/closed/wall/r_wall,
-/area/ai_monitored/nuke_storage)
-"kHJ" = (
-/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)
-"kHK" = (
-/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"
+/obj/machinery/computer/arcade/orion_trail,
+/obj/structure/sign/poster/official/foam_force_ad{
+ pixel_x = -32
},
/turf/open/floor/wood,
-/area/library)
-"kJr" = (
-/obj/effect/turf_decal/stripes/line{
+/area/crew_quarters/bar)
+"kAJ" = (
+/obj/machinery/portable_atmospherics/pump,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"kAO" = (
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/obj/structure/window,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"kCo" = (
+/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/plating,
-/area/security/prison)
-"kJY" = (
-/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)
-"kKw" = (
-/obj/structure/lattice/catwalk,
+/turf/open/floor/plasteel,
+/area/crew_quarters/theatre)
+"kEY" = (
+/obj/effect/landmark/stationroom/box/engine,
+/turf/open/space/basic,
+/area/space)
+"kGJ" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/open/space,
-/area/solar/port/aft)
-"kLR" = (
-/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/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/effect/spawner/structure/window,
-/turf/open/floor/wood,
-/area/library)
-"kOf" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/machinery/light/small{
- dir = 4;
- light_color = "#d8b1b1"
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"kMt" = (
+/obj/structure/lattice,
+/turf/closed/wall,
+/area/security/prison)
+"kNv" = (
+/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)
"kPd" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/cable{
@@ -55384,6 +55201,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"kPj" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction/flip,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"kQk" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -55393,254 +55217,32 @@
/obj/item/storage/toolbox/electrical,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
-"kQZ" = (
-/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"
- },
+"kQO" = (
+/obj/structure/reagent_dispensers/keg/semen,
/turf/open/floor/plating,
-/area/crew_quarters/fitness)
-"kRk" = (
-/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)
-"kRw" = (
-/obj/effect/landmark/start/roboticist,
-/turf/open/floor/plasteel/white,
-/area/science/robotics/lab)
+/area/maintenance/bar)
"kSb" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
-"kSh" = (
-/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)
-"kSB" = (
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"kTz" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/bridge/meeting_room)
-"kWI" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/window{
+"kWp" = (
+/obj/structure/shuttle/engine/heater{
dir = 1
},
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/locker)
-"lhg" = (
-/obj/machinery/vending/clothing,
-/obj/structure/disposalpipe/segment{
- dir = 4
+/turf/closed/wall/mineral/titanium,
+/area/space/nearstation)
+"kYk" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/departments/evac{
+ pixel_y = 32
},
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"lmi" = (
-/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)
-"lnu" = (
-/obj/structure/chair/wood/normal{
- dir = 4
- },
-/turf/open/floor/wood{
- icon_state = "wood-broken6"
- },
-/area/maintenance/bar)
-"lwj" = (
-/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)
-"lwp" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/turf/open/floor/carpet{
- icon_state = "carpetsymbol"
- },
-/area/crew_quarters/theatre)
-"lwY" = (
-/obj/machinery/door/window/westleft{
- base_state = "right";
- icon_state = "right";
- name = "Unisex Showers"
- },
-/turf/open/floor/plasteel/freezer,
+/area/hallway/primary/starboard)
+"laq" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/plasteel,
/area/security/prison)
-"lxx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/crew_quarters/bar)
-"lAB" = (
-/obj/structure/sign/nanotrasen,
-/turf/closed/wall,
-/area/science/circuit)
-"lBE" = (
-/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)
-"lCi" = (
-/obj/docking_port/stationary/public_mining_dock{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/construction/mining/aux_base)
-"lCB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"lCL" = (
-/turf/open/space/basic,
-/area/space/nearstation)
-"lFl" = (
-/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)
-"lLt" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"lLI" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"lMg" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"lMx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall,
-/area/crew_quarters/dorms)
-"lMY" = (
-/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)
-"lNB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"lQG" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/science/circuit)
-"lTq" = (
-/obj/structure/table,
-/obj/item/folder/blue,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"lYU" = (
-/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)
-"lYZ" = (
-/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)
-"maC" = (
-/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)
-"mbD" = (
+"lip" = (
/obj/structure/closet{
name = "Suit Closet"
},
@@ -55664,108 +55266,142 @@
/obj/item/clothing/under/lawyer/really_black,
/obj/item/clothing/under/lawyer/red,
/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"lnu" = (
+/obj/structure/chair/wood/normal{
+ dir = 4
+ },
+/turf/open/floor/wood{
+ icon_state = "wood-broken6"
+ },
+/area/maintenance/bar)
+"lsk" = (
+/obj/machinery/vending/autodrobe/all_access,
+/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"mfb" = (
-/obj/structure/toilet{
+"ltK" = (
+/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)
+"lva" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"lyR" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/security/prison)
+"lAB" = (
+/obj/structure/sign/nanotrasen,
+/turf/closed/wall,
+/area/science/circuit)
+"lCi" = (
+/obj/docking_port/stationary/public_mining_dock{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/construction/mining/aux_base)
+"lGV" = (
+/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)
+"lMg" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"lOe" = (
+/obj/machinery/shower{
dir = 8
},
/turf/open/floor/mineral/titanium/blue,
/area/crew_quarters/dorms)
+"lPr" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "applebush"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
+"lQG" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/science/circuit)
+"lSa" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"lUS" = (
+/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)
+"lXE" = (
+/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)
+"lZl" = (
+/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)
+"mbU" = (
+/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)
+"mcp" = (
+/obj/structure/target_stake,
+/obj/item/target/syndicate,
+/turf/open/floor/plating,
+/area/security/prison)
"mjr" = (
/obj/structure/reagent_dispensers/keg/milk,
/turf/open/floor/wood,
/area/crew_quarters/bar)
-"mlr" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/light_construct{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"moq" = (
-/obj/structure/chair/comfy/brown{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"mpI" = (
-/obj/structure/table/wood,
-/turf/open/floor/wood{
- icon_state = "wood-broken5"
- },
-/area/maintenance/bar)
-"mqa" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"mqZ" = (
-/obj/structure/reagent_dispensers/keg/aphro/strong,
-/obj/item/reagent_containers/glass/beaker,
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"mrR" = (
-/obj/effect/spawner/lootdrop/keg,
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"mte" = (
-/obj/structure/extinguisher_cabinet,
-/turf/closed/wall/r_wall,
-/area/hallway/primary/central)
-"mwO" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"myt" = (
-/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)
-"mCq" = (
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
-"mEN" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
-"mHC" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
-"mIS" = (
-/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)
-"mNi" = (
-/obj/machinery/light_switch{
- pixel_x = -20
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"mPE" = (
-/obj/machinery/chem_dispenser/drinks,
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"mQR" = (
+"mkv" = (
/obj/machinery/camera{
c_tag = "Gravity Generator Room";
dir = 8
@@ -55776,6 +55412,211 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
+"mkO" = (
+/obj/machinery/door/airlock{
+ name = "Shower Room"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/toilet)
+"mnC" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"moD" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/snacks/bluecherrycupcake{
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"mps" = (
+/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)
+"mpI" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood{
+ icon_state = "wood-broken5"
+ },
+/area/maintenance/bar)
+"mqZ" = (
+/obj/structure/reagent_dispensers/keg/aphro/strong,
+/obj/item/reagent_containers/glass/beaker,
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"mrR" = (
+/obj/effect/spawner/lootdrop/keg,
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"mse" = (
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/structure/chair/sofa/left,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"mvt" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"myh" = (
+/obj/structure/piano,
+/obj/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"mzB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/window,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"mAH" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"mGw" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"mHU" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/light_construct{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"mIZ" = (
+/obj/structure/falsewall,
+/turf/open/floor/plating,
+/area/security/prison)
+"mJo" = (
+/obj/structure/door_assembly/door_assembly_mai,
+/obj/item/electronics/airlock,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"mJG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"mNi" = (
+/obj/machinery/light_switch{
+ pixel_x = -20
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"mNW" = (
+/obj/structure/sign/poster/official/fruit_bowl{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/primary/starboard)
+"mOB" = (
+/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)
+"mOO" = (
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"mPk" = (
+/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)
+"mPr" = (
+/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)
+"mPt" = (
+/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)
+"mPE" = (
+/obj/machinery/chem_dispenser/drinks,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"mQS" = (
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"mRe" = (
/obj/machinery/light{
dir = 8
@@ -55783,134 +55624,109 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"mTp" = (
-/obj/structure/chair/sofa/left,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+"mRQ" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"mXB" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"ncj" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/structure/sign/poster/contraband/fun_police{
- pixel_x = 32
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"mTG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
-"ndC" = (
/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,
-/area/crew_quarters/fitness)
-"nea" = (
-/obj/machinery/recharge_station,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"neb" = (
-/obj/item/radio/intercom{
- pixel_y = 25
+/area/crew_quarters/locker)
+"nbT" = (
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/turf/open/floor/plasteel,
+/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)
-"nel" = (
-/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"
- },
+"ndq" = (
/turf/open/floor/plating,
-/area/crew_quarters/fitness)
-"new" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/security/prison)
-"neC" = (
+/area/crew_quarters/abandoned_gambling_den)
+"nez" = (
/obj/structure/table/wood,
-/obj/item/toy/cards/deck,
-/turf/open/floor/plasteel,
-/area/security/prison)
+/obj/item/instrument/piano_synth,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"nfm" = (
/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/maintenance/bar)
-"nie" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
+"ngs" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"nlt" = (
-/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)
-"nmx" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"nmS" = (
-/obj/structure/closet/athletic_mixed,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"nrR" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"nsJ" = (
-/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)
-"ntf" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/area/crew_quarters/theatre)
+"ngV" = (
+/obj/structure/table/wood,
+/obj/item/instrument/guitar,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"nhY" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
},
-/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)
-"nuV" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"nkP" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
+"noy" = (
+/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)
+"noF" = (
+/obj/machinery/door/airlock{
+ name = "Instrument Storage"
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/starboard/fore)
+"nsA" = (
+/turf/closed/wall,
+/area/crew_quarters/abandoned_gambling_den)
+"nuw" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"nwX" = (
+/obj/structure/grille/broken,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"nxv" = (
/obj/machinery/power/apc{
areastring = "/area/construction";
@@ -55922,13 +55738,13 @@
},
/turf/open/floor/plating,
/area/construction)
-"nyH" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
+"nGf" = (
+/obj/machinery/hydroponics/constructable,
+/obj/machinery/light{
+ dir = 1
},
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"nGt" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55940,51 +55756,74 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"nGS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+"nGI" = (
+/obj/machinery/door/airlock/external{
+ name = "Common Mining Shuttle Bay"
},
-/obj/effect/turf_decal/tile/blue{
- alpha = 255;
- dir = 1
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"nIE" = (
-/obj/structure/sign/poster/contraband/tools,
-/turf/closed/wall,
-/area/storage/primary)
-"nLf" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
-/turf/open/floor/wood,
-/area/bridge/meeting_room)
-"nMx" = (
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/machinery/door/airlock/vault,
-/obj/structure/cable{
- icon_state = "1-2"
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"nLu" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"nLw" = (
+/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
+/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)
+"nQi" = (
+/obj/machinery/recharge_station,
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"nRG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"nSt" = (
/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)
+"nUV" = (
+/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"nXE" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
-"nOS" = (
+/area/hallway/primary/central)
+"nYe" = (
/obj/structure/safe,
/obj/item/clothing/head/bearpelt,
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
@@ -56004,266 +55843,232 @@
/obj/item/gun/ballistic/revolver/nagant,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/nuke_storage)
-"nQr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall,
-/area/maintenance/port)
-"nRG" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"nTE" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
-"nWq" = (
-/obj/machinery/door/airlock/engineering{
- name = "Gravity Generator";
- req_access_txt = "11"
- },
+"nZE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"nXa" = (
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
+/area/crew_quarters/dorms)
+"nZL" = (
+/obj/machinery/computer/arcade/minesweeper,
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"oax" = (
+/obj/structure/table/wood/fancy,
+/obj/machinery/light,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 20
},
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/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)
+"obc" = (
+/obj/structure/chair/sofa/right,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"oce" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
/turf/open/floor/plasteel/white,
/area/science/mixing)
+"ocv" = (
+/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)
"odx" = (
/obj/machinery/vending/kink,
/turf/open/floor/plating,
/area/maintenance/bar)
-"oeJ" = (
-/obj/structure/table/wood,
-/obj/item/instrument/violin,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"oeQ" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"ohX" = (
-/obj/structure/table/wood,
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/open/floor/wood,
-/area/security/vacantoffice)
-"olr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"olv" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
-/turf/open/floor/plasteel,
-/area/security/brig)
-"olw" = (
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 4;
- name = "4maintenance loot spawner"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"oma" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+"ofU" = (
+/obj/structure/chair/comfy/black{
dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"orw" = (
-/obj/structure/table,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
+"old" = (
/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)
-"ory" = (
-/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)
-"otF" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = 5;
+/obj/structure/sign/departments/security{
+ pixel_x = -32;
pixel_y = -32
},
/turf/open/floor/plasteel,
-/area/hallway/primary/central)
-"ouD" = (
-/obj/structure/reagent_dispensers/keg/semen,
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"oBp" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plating,
-/area/maintenance/port)
-"oDy" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-04"
- },
+/area/hallway/primary/fore)
+"olr" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"oFk" = (
-/obj/structure/closet/boxinggloves,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"oHU" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
/area/science/circuit)
-"oKh" = (
-/obj/structure/chair/wood/normal{
- dir = 8
+"omY" = (
+/obj/item/flashlight/lamp/green{
+ pixel_x = -3;
+ pixel_y = 22
},
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"oMY" = (
-/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/dresser{
+ desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too.";
+ name = "Dresser";
+ pixel_y = 7
},
-/obj/structure/table_frame/wood,
/turf/open/floor/plating,
/area/maintenance/port)
-"oNb" = (
-/obj/structure/table/reinforced,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+"oqj" = (
+/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)
+"oqO" = (
/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)
-"oNQ" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/obj/machinery/light{
dir = 4;
light_color = "#c1caff"
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
-"oOb" = (
-/obj/structure/sign/poster/official/cohiba_robusto_ad,
-/turf/closed/wall,
-/area/lawoffice)
-"oSO" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+"ouQ" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_y = 6
+ },
+/obj/item/pen/fountain,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"oxm" = (
+/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)
+"oyl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/structure/chair/sofa,
-/obj/item/radio/intercom{
- pixel_y = 25
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"oUh" = (
-/obj/structure/disposalpipe/trunk{
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/door/window/eastleft{
+ name = "Blue Corner"
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/machinery/disposal/bin,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"oXL" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/security/prison)
-"oYc" = (
-/obj/machinery/light/small{
- dir = 4;
- light_color = "#d8b1b1"
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"phu" = (
+/area/crew_quarters/locker)
+"oyz" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4;
pixel_y = 5
},
/turf/open/floor/wood,
/area/crew_quarters/theatre)
-"phH" = (
-/turf/open/floor/grass,
-/area/security/prison)
-"phY" = (
+"oyN" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/space/nearstation)
+"oyX" = (
+/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)
+"oAb" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/red{
- dir = 1
+/turf/closed/wall,
+/area/crew_quarters/bar)
+"oAB" = (
+/obj/structure/fireplace,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"oDN" = (
+/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/yellow{
- dir = 4
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
+/turf/open/floor/plating,
+/area/crew_quarters/fitness)
+"oEZ" = (
+/obj/effect/spawner/lootdrop/keg,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"oHB" = (
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
+"oHU" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"pjh" = (
+/area/science/circuit)
+"oIJ" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"oIW" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"oKh" = (
+/obj/structure/chair/wood/normal{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"oLl" = (
/obj/structure/cable{
icon_state = "4-8"
},
@@ -56272,10 +56077,96 @@
},
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
-"poa" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+"oLn" = (
+/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)
+"oTW" = (
+/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)
+"oUh" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"oZl" = (
+/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)
+"pem" = (
+/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)
+"pfm" = (
+/obj/structure/sign/poster/official/twelve_gauge,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/security/armory)
+"pgf" = (
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"pgn" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"plm" = (
+/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)
+"plC" = (
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
/turf/open/floor/wood,
/area/crew_quarters/bar)
"poc" = (
@@ -56287,85 +56178,71 @@
},
/turf/open/floor/plasteel,
/area/science/mixing)
-"ppY" = (
-/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)
-"pqR" = (
-/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)
-"prP" = (
-/obj/structure/grille,
-/turf/open/space/basic,
-/area/space/nearstation)
-"prU" = (
-/obj/item/radio/intercom{
+"pou" = (
+/obj/machinery/light{
dir = 4;
- name = "Station Intercom (General)";
- pixel_x = 27
+ light_color = "#e8eaff"
},
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"ptV" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/heads/captain)
-"puG" = (
-/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)
-"pxD" = (
+/area/crew_quarters/abandoned_gambling_den)
+"pqe" = (
/obj/structure/chair/sofa,
/obj/structure/window{
dir = 1
},
+/obj/effect/landmark/start/assistant,
/turf/open/floor/wood,
/area/crew_quarters/bar)
-"pzk" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+"pqs" = (
+/obj/machinery/vending/clothing,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/structure/table,
-/obj/item/coin/gold,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"pAl" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/components/unary/tank/air{
+/area/crew_quarters/locker)
+"psk" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/bridge/meeting_room)
+"pst" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/vault,
+/obj/effect/mapping_helpers/airlock/locked,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"puh" = (
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"pFt" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-2"
+/obj/machinery/light/small,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 5;
+ pixel_y = -32
},
-/turf/open/space,
-/area/solar/starboard/aft)
+/turf/open/floor/plasteel/white/side{
+ dir = 1
+ },
+/area/crew_quarters/fitness)
+"pBp" = (
+/obj/effect/landmark/event_spawn,
+/turf/closed/wall,
+/area/crew_quarters/fitness)
+"pFX" = (
+/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)
"pHl" = (
/obj/structure/table,
/obj/item/storage/box/beakers{
@@ -56392,12 +56269,31 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"pHo" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+"pHO" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/poster/contraband/fun_police{
+ pixel_x = 32
},
/turf/open/floor/plasteel,
-/area/hydroponics)
+/area/hallway/primary/fore)
+"pIf" = (
+/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)
+"pJR" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/library)
"pLn" = (
/obj/machinery/conveyor/inverted{
dir = 5;
@@ -56405,88 +56301,7 @@
},
/turf/open/floor/plating,
/area/maintenance/disposal)
-"pLt" = (
-/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)
-"pNH" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/door/window,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"pNI" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/sign/poster/official/pda_ad{
- pixel_y = -32
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
-"pPE" = (
-/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)
-"pQr" = (
-/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)
-"pQD" = (
-/obj/structure/sign/poster/official/ion_rifle,
-/turf/closed/wall/r_wall,
-/area/ai_monitored/security/armory)
-"pSf" = (
+"pPi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -56498,361 +56313,13 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"pTn" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/terminal,
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
-"pTR" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
-"pUl" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/command{
- name = "Command Access To Vault";
- req_access = "19"
- },
-/turf/open/floor/plasteel/dark,
-/area/bridge/meeting_room)
-"pZv" = (
-/obj/machinery/shower{
- dir = 8
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/dorms)
-"qbx" = (
-/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)
-"qeQ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"qje" = (
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
-"qkC" = (
-/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)
-"qlr" = (
-/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)
-"qlF" = (
-/obj/structure/lattice,
-/turf/closed/wall,
-/area/security/prison)
-"qmM" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"qoP" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/structure/chair/sofa/left,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"qpA" = (
-/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)
-"qux" = (
-/obj/structure/chair/sofa/left{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"quT" = (
-/obj/structure/lattice,
-/obj/structure/grille/broken,
-/turf/open/space/basic,
-/area/space/nearstation)
-"qvM" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/circuit,
-/area/ai_monitored/nuke_storage)
-"qwe" = (
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/crew_quarters/theatre)
-"qwB" = (
-/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)
-"qxc" = (
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/machinery/computer/slot_machine,
-/obj/item/coin/iron,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"qAQ" = (
-/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)
-"qBc" = (
-/turf/open/floor/carpet,
-/area/crew_quarters/theatre)
-"qBe" = (
-/obj/structure/chair/comfy/black{
- dir = 8
- },
+"pPI" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/open/floor/carpet,
-/area/bridge/meeting_room)
-"qEv" = (
-/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)
-"qHB" = (
-/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)
-"qIf" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/bar)
-"qIw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"qJZ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/carpet,
-/area/crew_quarters/theatre)
-"qMu" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/prison)
-"qNs" = (
-/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)
-"qOf" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"qQJ" = (
-/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)
-"qUm" = (
-/obj/structure/filingcabinet/employment,
-/turf/open/floor/wood,
-/area/crew_quarters/heads/captain)
-"qXH" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"rcD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/closed/wall/r_wall,
-/area/science/circuit)
-"reZ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engine_smes)
-"rfW" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
-"rgF" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/item/coin/silver,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"rhb" = (
-/obj/machinery/vending/cola/space_up,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"riA" = (
-/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)
-"riB" = (
-/obj/machinery/door/firedoor,
-/obj/structure/sign/departments/evac{
- pixel_y = 32
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
-"rmX" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/beer,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"rsv" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/space,
-/area/solar/starboard/fore)
-"rsX" = (
-/obj/effect/turf_decal/tile/red,
-/obj/structure/chair{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
-"rtT" = (
-/obj/structure/chair/comfy/brown{
- color = "#66b266";
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"rvZ" = (
-/obj/structure/target_stake,
-/obj/item/target/syndicate,
-/turf/open/floor/plating,
-/area/security/prison)
-"rzg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/heads/captain)
-"rBq" = (
-/obj/item/clothing/head/kitty,
-/obj/item/clothing/under/maid,
-/obj/item/clothing/mask/muzzle,
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"rEV" = (
+/area/engine/gravity_generator)
+"pQp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -56861,56 +56328,410 @@
},
/turf/open/floor/plating,
/area/crew_quarters/fitness)
-"rFc" = (
-/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"
+"pRs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
},
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port)
-"rHa" = (
-/obj/docking_port/stationary{
- dir = 8;
- dwidth = 3;
- height = 5;
- id = "commonmining_home";
- name = "SS13: Common Mining Dock";
- roundstart_template = /datum/map_template/shuttle/mining_common/meta;
- width = 7
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
},
-/turf/open/space/basic,
-/area/space)
-"rKc" = (
+/turf/open/floor/plating,
+/area/crew_quarters/fitness)
+"pTB" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/space,
-/area/solar/port/fore)
+/area/solar/starboard/aft)
+"qaY" = (
+/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)
+"qcm" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/heads/captain)
+"qeb" = (
+/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)
+"qeQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"qfk" = (
+/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)
+"qfD" = (
+/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)
+"qje" = (
+/obj/structure/sign/mining{
+ pixel_y = 7
+ },
+/turf/closed/wall,
+/area/quartermaster/miningdock)
+"qmn" = (
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/obj/structure/table,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"qqs" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"qus" = (
+/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)
+"quT" = (
+/obj/structure/lattice,
+/obj/structure/grille/broken,
+/turf/open/space/basic,
+/area/space/nearstation)
+"qAm" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"qBi" = (
+/obj/structure/lattice,
+/turf/closed/wall/r_wall,
+/area/crew_quarters/heads/captain)
+"qIw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"qJr" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/space,
+/area/solar/port/aft)
+"qLR" = (
+/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)
+"qOc" = (
+/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)
+"qOB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/heads/captain)
+"qTG" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"qTV" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-22"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"qVP" = (
+/obj/effect/spawner/structure/window,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"qXg" = (
+/obj/structure/chair/sofa/left,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"rcD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/science/circuit)
+"rdG" = (
+/obj/machinery/hydroponics/constructable,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 29
+ },
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
+"reA" = (
+/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)
+"rfW" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/maintenance/disposal/incinerator)
+"rjQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"rmN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"rmX" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/beer,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"rnt" = (
+/obj/structure/chair/comfy/black{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/bridge/meeting_room)
+"rnK" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"rqf" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"rqk" = (
+/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)
+"rqE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"rqW" = (
+/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)
+"rrM" = (
+/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)
+"rtl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/camera{
+ c_tag = "Bar Backroom"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"ruo" = (
+/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)
+"rvr" = (
+/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)
+"rvS" = (
+/obj/structure/chair/comfy/brown{
+ color = "#66b266";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"ryr" = (
+/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)
+"rBq" = (
+/obj/item/clothing/head/kitty,
+/obj/item/clothing/under/maid,
+/obj/item/clothing/mask/muzzle,
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"rGq" = (
+/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)
+"rIA" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"rKP" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
/turf/open/floor/plating,
/area/construction)
-"rLr" = (
-/obj/structure/window,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"rLR" = (
-/obj/structure/sign/poster/contraband/space_up{
- pixel_x = -32;
- pixel_y = 32
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"rMc" = (
-/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)
"rMN" = (
/obj/structure/bed,
/obj/item/tank/internals/anesthetic,
@@ -56933,38 +56754,32 @@
},
/turf/open/floor/plasteel,
/area/science/mixing)
-"rOm" = (
-/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)
-"rTQ" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
+"rPU" = (
+/turf/open/floor/plasteel/white/side{
dir = 4
},
+/area/crew_quarters/theatre)
+"rTu" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/command{
+ name = "Command Access To Vault";
+ req_access = "19"
+ },
+/turf/open/floor/plasteel/dark,
+/area/bridge/meeting_room)
+"rXl" = (
+/obj/structure/chair/office/light,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
/obj/effect/turf_decal/stripes/line{
- dir = 1
+ dir = 9
},
-/turf/open/floor/plasteel/white/side{
- dir = 8
- },
-/area/crew_quarters/fitness)
-"rUQ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"saK" = (
/obj/structure/closet/crate,
/obj/item/target/alien,
@@ -56977,60 +56792,54 @@
/obj/item/gun/energy/laser/practice,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"sdL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
+"saU" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engine_smes)
+"saX" = (
+/obj/item/reagent_containers/glass/bucket,
+/turf/open/floor/grass,
+/area/security/prison)
+"sci" = (
+/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)
+"seP" = (
+/obj/structure/cable{
+ icon_state = "0-4"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "0-8"
},
-/turf/open/floor/plasteel/dark,
-/area/bridge/meeting_room)
-"sfa" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/poddoor/preopen{
+ id = "Secure Gate";
+ name = "brig shutters"
+ },
+/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"sgV" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Air In"
+ icon_state = "1-8"
},
+/turf/open/floor/plating,
+/area/security/brig)
+"shR" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"sjm" = (
-/obj/structure/table/wood,
-/obj/item/instrument/piano_synth,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"sjw" = (
-/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)
-"sjT" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
+/area/space/nearstation)
"slk" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -57043,86 +56852,45 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
-"slp" = (
-/obj/effect/turf_decal/tile/blue{
- alpha = 255
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- alpha = 255;
+"spu" = (
+/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/blue{
+/obj/effect/turf_decal/tile/red{
dir = 8
},
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"smn" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"sqp" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/light,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
-"snG" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/space,
-/area/solar/port/aft)
-"spX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/door/airlock/command{
+ name = "Captain's Vault Access";
+ req_access_txt = "20"
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/captain)
-"sqa" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "applebush"
+"srG" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
-"srq" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/bridge/meeting_room)
-"ssL" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/space,
-/area/solar/starboard/fore)
-"suI" = (
-/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)
-"svw" = (
-/obj/structure/chair{
+/area/crew_quarters/abandoned_gambling_den)
+"ssB" = (
+/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/crew_quarters/fitness)
+/area/hallway/primary/starboard)
"sxs" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/table,
@@ -57136,16 +56904,88 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
-"sxX" = (
+"syJ" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"szG" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating{
- icon_state = "panelscorched"
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"sAM" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken6"
},
-/area/maintenance/starboard/fore)
-"sAI" = (
+/area/maintenance/bar)
+"sEi" = (
+/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)
+"sEt" = (
+/turf/open/floor/wood{
+ icon_state = "wood-broken7"
+ },
+/area/maintenance/bar)
+"sEM" = (
+/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)
+"sFW" = (
+/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)
+"sHx" = (
+/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)
+"sJx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"sJI" = (
/obj/structure/table/wood/fancy,
/obj/item/reagent_containers/food/condiment/saltshaker{
pixel_x = -3;
@@ -57158,30 +56998,31 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"sAM" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken6"
+"sLa" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/area/maintenance/bar)
-"sEt" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken7"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/area/maintenance/bar)
-"sIe" = (
-/obj/structure/sign/poster/official/fruit_bowl{
- pixel_y = 32
+/obj/structure/window{
+ dir = 4
},
-/turf/open/floor/plasteel/white/corner{
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/area/hallway/primary/starboard)
-"sLr" = (
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/item/coin/silver,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"sLj" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"sLv" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
@@ -57190,17 +57031,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"sMa" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+"sNK" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/vending/kink,
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"sOs" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -57208,9 +57045,38 @@
/obj/machinery/door/airlock/maintenance/abandoned,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"sOA" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
+"sPT" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"sPY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engine_smes)
"sQX" = (
/turf/open/floor/plating,
/area/space)
+"sRH" = (
+/obj/machinery/autolathe{
+ name = "public autolathe"
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
"sRT" = (
/obj/machinery/vending/cola/random,
/turf/open/floor/wood,
@@ -57242,52 +57108,56 @@
/obj/machinery/vending/boozeomat/all_access,
/turf/closed/wall,
/area/maintenance/bar)
-"sYv" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
+"sYR" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
},
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
-"sZa" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/camera{
- c_tag = "Bar Backroom"
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"sZR" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/bar)
"tal" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/hallway/secondary/service)
-"tdF" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/light{
+"tgH" = (
+/obj/structure/filingcabinet/employment,
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"tif" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"tkq" = (
+/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)
+"tkB" = (
+/obj/structure/sign/poster/official/help_others{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"tkU" = (
/turf/open/floor/wood{
icon_state = "wood-broken5"
},
/area/maintenance/bar)
+"tmO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"tqg" = (
/obj/machinery/cryopod{
dir = 4
@@ -57297,20 +57167,98 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
-"tqt" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/chair/comfy/brown{
- dir = 1
+"tqB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
},
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/plating,
+/area/space/nearstation)
"trb" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel,
/area/security/courtroom)
-"tru" = (
+"ttL" = (
+/obj/structure/sign/poster/contraband/random{
+ pixel_y = 32
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"ttX" = (
+/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)
+"tur" = (
+/obj/item/restraints/handcuffs/fake,
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"tvi" = (
+/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)
+"txm" = (
+/obj/structure/table/wood/fancy/royalblue,
+/obj/item/crowbar/red,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"tyX" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"tzQ" = (
+/obj/machinery/shower{
+ dir = 4
+ },
+/obj/item/soap,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"tCa" = (
+/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)
+"tCd" = (
+/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)
+"tJi" = (
/obj/machinery/airalarm{
dir = 4;
pixel_x = -22
@@ -57332,248 +57280,106 @@
/obj/item/megaphone/clown,
/turf/open/floor/plasteel,
/area/crew_quarters/theatre)
-"trY" = (
-/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
+"tJK" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Gravity Generator";
+ req_access_txt = "11"
},
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"tsr" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
/turf/open/floor/plasteel,
-/area/hydroponics)
-"tuj" = (
-/obj/structure/light_construct{
- dir = 1
- },
+/area/engine/gravity_generator)
+"tJS" = (
+/obj/effect/spawner/lootdrop/keg,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"tur" = (
-/obj/item/restraints/handcuffs/fake,
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"tuN" = (
-/obj/structure/chair/sofa,
-/obj/structure/window{
+"tKk" = (
+/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"tAb" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/command{
- name = "Captain's Vault Access";
- req_access_txt = "20"
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/heads/captain)
-"tAE" = (
-/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,
+/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)
-"tAV" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/theatre)
-"tCi" = (
-/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)
-"tFt" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"tGG" = (
-/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)
-"tHx" = (
-/obj/machinery/computer/arcade/minesweeper{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"tIk" = (
-/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)
-"tIC" = (
-/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)
-"tLl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/security/prison)
"tMl" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
-"tMS" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_y = 6
+"tNF" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
},
-/obj/item/pen/fountain,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
-"tNJ" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
-"tOd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/security/prison)
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"tOq" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/mixing)
-"tOU" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/light/small,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
"tPT" = (
/obj/machinery/chem_dispenser/drinks/beer,
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
-"tQk" = (
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/dorms)
"tRe" = (
/obj/machinery/chem_master,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"tRB" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"tRF" = (
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"tTW" = (
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
-"tUm" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+"tWj" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/port)
-"tUw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/carpet,
+/turf/open/floor/wood,
/area/crew_quarters/theatre)
-"tWs" = (
-/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)
-"tWR" = (
-/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)
"tXL" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"tZe" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/sign/poster/official/pda_ad{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"uaj" = (
+/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)
"uaw" = (
/obj/machinery/power/apc{
areastring = "/area/storage/art";
@@ -57586,37 +57392,380 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"udi" = (
+"ubj" = (
+/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)
+"ucq" = (
+/obj/structure/sign/poster/contraband/red_rum{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"ufD" = (
+/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)
+"ugu" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"uhm" = (
+/obj/machinery/door/airlock{
+ name = "Recharging Station"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"ujv" = (
+/obj/structure/sign/departments/restroom,
+/turf/closed/wall,
+/area/crew_quarters/toilet)
+"ujF" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"ujS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"unA" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"unW" = (
+/obj/effect/landmark/event_spawn,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
+"uoB" = (
+/obj/structure/table/reinforced,
+/obj/item/multitool,
+/obj/item/screwdriver,
+/obj/machinery/camera{
+ c_tag = "Circuitry Lab North";
+ network = list("ss13","rd")
+ },
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"uoG" = (
+/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)
+"usO" = (
+/obj/machinery/vending/snack/random,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"uua" = (
+/obj/machinery/atmospherics/components/binary/valve,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"uuG" = (
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
+"uve" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"uvZ" = (
+/obj/structure/mineral_door/wood,
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"uxY" = (
+/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)
+"uBa" = (
+/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)
+"uDO" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/space,
+/area/solar/port/fore)
+"uEI" = (
/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"uFp" = (
+/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)
+"uGI" = (
+/turf/open/floor/grass,
+/area/security/prison)
+"uIO" = (
+/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)
+"uJx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"uNu" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"uOJ" = (
+/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)
+"uPT" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/maintenance/disposal/incinerator)
+"uQS" = (
+/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)
+"uRd" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/terminal,
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"uRS" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/turf/open/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/crew_quarters/theatre)
+"uVS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"vae" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"vbi" = (
+/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)
+"vbD" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/command/glass{
+ name = "EVA Storage";
+ req_access_txt = "18"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ai_monitored/storage/eva)
+"vcN" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"vda" = (
+/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)
+"vdu" = (
+/obj/structure/table/wood,
/obj/machinery/airalarm{
dir = 1;
pixel_y = -22
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"ued" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/turf/open/floor/wood,
+/area/security/vacantoffice)
+"vhb" = (
+/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/machinery/airalarm{
- dir = 4;
- pixel_x = -22
+/obj/structure/window{
+ dir = 1
},
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"uhm" = (
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/locker)
+"viF" = (
+/obj/structure/table/wood,
+/obj/item/instrument/trumpet,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"vjm" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/rag,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/maintenance/bar)
+"vmQ" = (
+/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)
+"vnI" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -57633,305 +57782,50 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"ujF" = (
-/obj/machinery/cryopod{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"uko" = (
+"vob" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-4"
},
/turf/open/floor/plasteel,
-/area/security/brig)
-"ukP" = (
-/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)
-"ukS" = (
-/obj/machinery/shower{
- dir = 4
- },
-/obj/item/soap,
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/dorms)
-"unl" = (
-/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/machinery/light/small{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/machinery/washing_machine,
-/turf/open/floor/plasteel/freezer,
-/area/security/prison)
-"unE" = (
-/obj/structure/fans/tiny/invisible,
-/turf/open/space/basic,
-/area/space)
-"unY" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/sign/departments/custodian{
- pixel_y = -32
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
-"uoB" = (
-/obj/structure/table/reinforced,
-/obj/item/multitool,
-/obj/item/screwdriver,
-/obj/machinery/camera{
- c_tag = "Circuitry Lab North";
- network = list("ss13","rd")
- },
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"upX" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/carpet{
- icon_state = "carpetsymbol"
- },
-/area/crew_quarters/theatre)
-"usO" = (
-/obj/machinery/vending/snack/random,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"uuG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
-"uvZ" = (
-/obj/structure/mineral_door/wood,
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"uya" = (
-/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)
-"uzk" = (
-/obj/structure/sign/departments/restroom,
-/turf/closed/wall,
-/area/crew_quarters/toilet)
-"uDW" = (
-/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)
-"uNu" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"uPT" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
-"uTq" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"uVq" = (
-/obj/machinery/light{
- dir = 1;
- light_color = "#d1dfff"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
-"uVt" = (
-/obj/machinery/light/small{
- brightness = 3;
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/prison)
-"uVS" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"uYE" = (
-/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)
-"uZM" = (
-/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)
-"vbD" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/command/glass{
- name = "EVA Storage";
- req_access_txt = "18"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ai_monitored/storage/eva)
-"vbY" = (
-/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)
-"vdz" = (
-/obj/machinery/shower{
- dir = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/security/prison)
-"vdH" = (
-/obj/structure/bed,
-/turf/open/floor/plating,
-/area/maintenance/port)
-"vgp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
-"vjm" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/rag,
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/maintenance/bar)
-"vjq" = (
-/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)
-"vpm" = (
-/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)
-"vpz" = (
-/obj/structure/sign/poster/official/twelve_gauge,
-/turf/closed/wall/r_wall,
-/area/ai_monitored/security/armory)
"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)
-"vrM" = (
-/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)
"vsM" = (
/obj/machinery/power/apc/auto_name/south,
/obj/structure/cable,
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
+"vsT" = (
+/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)
"vxh" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -57940,23 +57834,10 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"vys" = (
-/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)
+"vyp" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/crew_quarters/dorms)
"vzp" = (
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
@@ -57973,35 +57854,42 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"vzS" = (
-/obj/structure/table,
-/obj/item/book/manual/hydroponics_pod_people{
- pixel_x = -4;
- pixel_y = 5
+"vBa" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
},
-/obj/item/paper/guides/jobs/hydroponics{
- pixel_x = -5;
- pixel_y = 3
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/turf/open/floor/plasteel/dark,
+/area/bridge/meeting_room)
"vCb" = (
/obj/machinery/rnd/production/techfab/department/service,
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"vCn" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"vCt" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"vDq" = (
-/obj/effect/turf_decal/stripes/line,
+"vCy" = (
+/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/space/nearstation)
-"vFt" = (
-/obj/machinery/portable_atmospherics/pump,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
-"vGX" = (
+/area/maintenance/starboard/fore)
+"vDR" = (
/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.";
@@ -58010,6 +57898,38 @@
},
/turf/open/floor/wood,
/area/crew_quarters/dorms)
+"vEi" = (
+/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)
+"vEp" = (
+/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)
+"vFr" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"vHj" = (
/obj/machinery/door/airlock/public/glass{
name = "Cryogenics "
@@ -58020,108 +57940,311 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/crew_quarters/cryopod)
-"vHv" = (
-/obj/structure/closet{
- name = "Costume Closet"
- },
-/obj/item/clothing/head/russobluecamohat,
-/obj/item/clothing/head/russobluecamohat,
-/obj/item/clothing/head/helmet/rus_ushanka,
-/obj/item/clothing/head/helmet/rus_ushanka,
-/obj/item/clothing/head/helmet/rus_ushanka,
-/obj/item/clothing/head/helmet/rus_ushanka,
-/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)
-"vHM" = (
-/obj/machinery/vr_sleeper{
+"vHz" = (
+/obj/structure/chair{
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
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
},
+/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
+"vHT" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/departments/evac{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"vHY" = (
/turf/open/floor/plating,
/area/science/mixing)
-"vLD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
+"vIi" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/machinery/light,
-/obj/machinery/camera/motion{
- c_tag = "Vault";
- dir = 1;
- network = list("vault")
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
},
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
-"vNh" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/turf/open/floor/plasteel,
+/area/security/prison)
+"vJu" = (
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
dir = 8
},
-/turf/open/floor/carpet,
-/area/crew_quarters/theatre)
-"vOq" = (
-/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)
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"vPs" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
"vPE" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"vRr" = (
-/obj/effect/turf_decal/stripes/line{
+"vZA" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable,
+/turf/open/space,
+/area/solar/starboard/aft)
+"vZR" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/library)
+"wbE" = (
+/obj/effect/turf_decal/tile/blue{
+ alpha = 255
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/obj/machinery/door/window/westleft{
- base_state = "right";
- dir = 4;
- icon_state = "right";
- name = "Shooting Range"
+/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)
+"wcB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
+"wdv" = (
+/obj/structure/fans/tiny/invisible,
+/turf/open/space/basic,
+/area/space)
+"weM" = (
+/obj/structure/girder,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"wfR" = (
+/obj/item/electropack/shockcollar,
+/obj/item/assembly/signaler,
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"wig" = (
+/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)
+"wkN" = (
+/turf/closed/wall,
+/area/science/circuit)
+"woR" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"wph" = (
+/obj/docking_port/stationary{
+ area_type = /area/construction/mining/aux_base;
+ dheight = 4;
+ dir = 8;
+ dwidth = 4;
+ height = 9;
+ id = "aux_base_zone";
+ name = "aux base zone";
+ roundstart_template = /datum/map_template/shuttle/aux_base/default;
+ width = 9
},
/turf/open/floor/plating,
-/area/security/prison)
-"vRX" = (
-/obj/machinery/power/apc{
- areastring = "/area/security/detectives_office";
- dir = 4;
- name = "Detective's Office APC";
- pixel_x = 24
+/area/construction/mining/aux_base)
+"wql" = (
+/obj/structure/extinguisher_cabinet,
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"wqF" = (
+/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)
+"wrp" = (
+/obj/machinery/light{
+ dir = 8
},
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"wvX" = (
+/obj/structure/table/reinforced,
+/obj/machinery/light,
+/obj/item/stack/sheet/metal/ten,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"wxT" = (
+/obj/structure/chair/sofa/left,
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"wBd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/closed/wall,
+/area/hallway/secondary/service)
+"wHz" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/maintenance/disposal/incinerator)
+"wIG" = (
+/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)
+"wKe" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "maintdiy";
+ name = "Security Shutters"
},
-/turf/open/floor/plasteel/grimy,
-/area/security/detectives_office)
-"vUR" = (
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"wTf" = (
+/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)
+"wUg" = (
+/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)
+"wUr" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"wUY" = (
+/obj/structure/table,
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"wWT" = (
+/obj/effect/landmark/start/roboticist,
+/turf/open/floor/plasteel/white,
+/area/science/robotics/lab)
+"wXl" = (
+/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)
+"wYc" = (
+/obj/machinery/vr_sleeper{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
/area/security/prison)
-"vVP" = (
+"wZI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/heads/captain)
+"xbn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/item/coin/gold,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"xfS" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/computer/shuttle/mining/common{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
+"xgk" = (
+/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)
+"xgC" = (
/obj/structure/cable{
icon_state = "0-4"
},
@@ -58147,325 +58270,22 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
-"vWw" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/turf/open/floor/plasteel,
-/area/security/prison)
-"vYa" = (
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"vZs" = (
-/obj/structure/lattice,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"wcy" = (
-/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)
-"wfR" = (
-/obj/item/electropack/shockcollar,
-/obj/item/assembly/signaler,
-/turf/open/floor/plating,
-/area/maintenance/bar)
-"wgb" = (
-/obj/structure/falsewall,
-/turf/open/floor/plating,
-/area/security/prison)
-"wkN" = (
-/turf/closed/wall,
-/area/science/circuit)
-"woR" = (
-/obj/machinery/cryopod{
- dir = 1
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"woX" = (
-/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)
-"wph" = (
-/obj/docking_port/stationary{
- area_type = /area/construction/mining/aux_base;
- dheight = 4;
- dir = 8;
- dwidth = 4;
- height = 9;
- id = "aux_base_zone";
- name = "aux base zone";
- roundstart_template = /datum/map_template/shuttle/aux_base/default;
- width = 9
- },
-/turf/open/floor/plating,
-/area/construction/mining/aux_base)
-"wpo" = (
-/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)
-"wrp" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
-"wuB" = (
-/obj/structure/chair/comfy/brown{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/library)
-"wvX" = (
-/obj/structure/table/reinforced,
-/obj/machinery/light,
-/obj/item/stack/sheet/metal/ten,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
-"wwn" = (
-/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)
-"wwB" = (
-/turf/closed/wall/r_wall,
-/area/hallway/primary/central)
-"wwC" = (
-/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)
-"wyM" = (
-/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)
-"wAB" = (
-/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)
-"wBd" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/turf/closed/wall,
-/area/hallway/secondary/service)
-"wCa" = (
-/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)
-"wDR" = (
-/obj/structure/sign/poster/official/help_others{
- pixel_y = -32
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
-"wEp" = (
-/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)
-"wFk" = (
-/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)
-"wFX" = (
-/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)
-"wGP" = (
-/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)
-"wHz" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
-"wJz" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
-"wLT" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/closed/wall,
-/area/maintenance/port)
-"wNM" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"wOT" = (
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"wUY" = (
-/obj/structure/table,
-/obj/item/stack/packageWrap,
-/obj/item/stack/packageWrap,
-/obj/item/hand_labeler,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
-"wVs" = (
-/obj/structure/table/wood,
-/obj/item/instrument/trumpet,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"wXP" = (
-/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)
-"wZB" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"xbu" = (
-/obj/structure/chair/comfy/black{
- dir = 8
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"xcg" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"xdb" = (
-/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)
-"xdV" = (
-/obj/machinery/door/airlock{
- name = "Theatre Backstage";
- req_access_txt = "46"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
"xgF" = (
/obj/structure/chair/stool/bar,
/turf/open/floor/wood{
icon_state = "wood-broken5"
},
/area/maintenance/bar)
-"xhx" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+"xhS" = (
/obj/structure/cable{
icon_state = "2-4"
},
-/turf/open/floor/wood,
-/area/bridge/meeting_room)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"xhV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -58475,6 +58295,14 @@
},
/turf/open/floor/plating,
/area/construction)
+"xib" = (
+/obj/machinery/door/window/westleft{
+ base_state = "right";
+ icon_state = "right";
+ name = "Unisex Showers"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
"xiw" = (
/obj/machinery/door/airlock{
name = "Service Hall";
@@ -58486,142 +58314,310 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/service)
-"xkk" = (
-/obj/structure/piano,
-/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/theatre)
-"xlN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+"xkd" = (
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"xls" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/security/prison)
+"xmo" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"xmS" = (
+/obj/structure/chair/comfy/beige{
+ dir = 8
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel/grimy,
+/area/hallway/secondary/entry)
+"xqG" = (
+/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)
+"xrN" = (
+/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)
+"xtP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore)
+"xxi" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plating,
-/area/maintenance/port/aft)
-"xpx" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
+/area/maintenance/fore)
+"xzd" = (
+/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)
-"xqW" = (
-/obj/structure/cable{
- icon_state = "0-4"
+"xzj" = (
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#d1dfff"
},
-/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/plasteel,
+/area/hallway/primary/fore)
+"xAk" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
-/area/security/brig)
-"xzh" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"xzy" = (
-/obj/effect/turf_decal/stripes/corner{
+/area/maintenance/starboard/fore)
+"xAv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel,
-/area/hydroponics)
+/area/crew_quarters/dorms)
+"xBk" = (
+/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)
+"xBw" = (
+/obj/structure/closet/wardrobe/cargotech,
+/obj/item/radio/headset/headset_cargo,
+/turf/open/floor/plasteel,
+/area/quartermaster/storage)
+"xDM" = (
+/obj/machinery/camera{
+ c_tag = "Locker Room South";
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/personal,
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"xEu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"xEB" = (
+/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)
+"xEE" = (
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/obj/machinery/vending/wardrobe/curator_wardrobe,
+/turf/open/floor/carpet,
+/area/library)
"xIa" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/grille_or_trash,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"xIn" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"xLZ" = (
-/obj/structure/closet/radiation,
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"xMl" = (
-/obj/structure/chair/sofa{
- dir = 1
- },
-/obj/structure/window,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"xNY" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 1
+"xLX" = (
+/obj/structure/lattice/catwalk,
+/obj/item/stack/marker_beacon{
+ anchored = 1;
+ icon_state = "markerburgundy-on";
+ light_color = "#FA644B";
+ light_power = 3;
+ light_range = 3;
+ name = "Docking Beacon";
+ picked_color = "Burgundy"
},
/turf/open/space/basic,
/area/space/nearstation)
-"xXY" = (
+"xOx" = (
+/obj/structure/chair/comfy/brown{
+ color = "#596479";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"xPk" = (
+/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)
+"xPY" = (
+/obj/structure/table/wood,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/instrument/trombone,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"xQG" = (
+/obj/machinery/door/airlock/external{
+ name = "Common Mining Shuttle Bay"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"xTy" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"xUe" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/security/prison)
+"xUL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/obj/machinery/camera/motion{
+ c_tag = "Vault";
+ dir = 1;
+ network = list("vault")
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"xXi" = (
+/obj/machinery/vending/clothing,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"xZD" = (
/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)
-"xYO" = (
-/obj/structure/sign/poster/contraband/red_rum{
+"ybj" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"ycd" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/structure/mirror{
pixel_y = 32
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
+/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)
"ycu" = (
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plasteel,
/area/science/circuit)
-"ycF" = (
-/obj/machinery/door/airlock/external{
- name = "Common Mining Shuttle Bay"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/hallway/secondary/entry)
"ydD" = (
/obj/effect/turf_decal/bot,
/obj/machinery/suit_storage_unit/rd,
/turf/open/floor/plasteel,
/area/science/mixing)
-"yiN" = (
-/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)
+"yhz" = (
+/obj/structure/table,
+/obj/item/folder/blue,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"yiY" = (
+/obj/structure/sign/poster/official/ion_rifle,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/security/armory)
(1,1,1) = {"
aaa
@@ -64643,11 +64639,11 @@ aaa
aaa
aaa
aaa
-aaK
+ghq
aaa
aaa
aaa
-aaK
+ghq
aaa
aaa
aaa
@@ -64660,7 +64656,7 @@ aaa
aaa
aaa
aaa
-hoo
+gDl
aaa
aaa
aaa
@@ -64894,9 +64890,9 @@ aaa
aaa
aaa
aaa
-aaK
+ghq
aaa
-aaK
+ghq
aaa
aaa
aaa
@@ -64908,9 +64904,9 @@ gXs
aaa
aaa
aaa
-aaK
+ghq
aaa
-aaK
+ghq
aaa
aaa
aaa
@@ -65157,11 +65153,11 @@ gXs
aaa
aaa
gXs
-jmC
+gJi
gXs
gXs
gXs
-jmC
+gJi
gXs
aaa
aaa
@@ -65407,11 +65403,11 @@ aaa
aaa
aaa
aaa
-jmC
-jmC
+gJi
+gJi
gXs
aag
-jmC
+gJi
gXs
gXs
aaa
@@ -65421,11 +65417,11 @@ aaa
aaa
gXs
gXs
-jmC
-jmC
-klu
+gJi
+gJi
+haL
aag
-jmC
+gJi
aaa
aaa
aaa
@@ -65664,11 +65660,11 @@ aaa
aaa
aaa
aaa
-xcg
-lLt
+gIU
+shR
aaa
-lLt
-jNo
+shR
+hse
gXs
aoV
aaa
@@ -65678,11 +65674,11 @@ aaa
aaa
aaa
gXs
-xcg
-lLt
+gIU
+shR
aaa
-lLt
-jNo
+shR
+hse
aaa
aaa
aaa
@@ -65921,11 +65917,11 @@ aaa
aaa
aaa
aaa
-xzh
+bvG
aaa
cpe
aaa
-vDq
+oyN
aaa
aaa
aaa
@@ -65935,11 +65931,11 @@ aaa
aaa
aaa
aaa
-xzh
+bvG
aaa
cwV
aaa
-vDq
+oyN
aaa
aaa
aaa
@@ -66177,7 +66173,7 @@ aaa
aaa
aaa
aae
-lCL
+ktS
gXs
aaa
aaa
@@ -66434,7 +66430,7 @@ aaa
aaa
aaa
aaa
-lCL
+ktS
gXs
aaa
aaa
@@ -66691,7 +66687,7 @@ aaa
aaa
aaa
aaa
-lCL
+ktS
gXs
aaa
aaa
@@ -66948,7 +66944,7 @@ aaa
aaa
aaa
aaa
-lCL
+ktS
gXs
aaa
cqq
@@ -66975,7 +66971,7 @@ aaa
aaa
aoV
aaa
-rHa
+iDS
aaa
aaa
aoV
@@ -67205,7 +67201,7 @@ aaf
aaf
aaf
aaa
-lCL
+ktS
arB
asE
cyb
@@ -67232,7 +67228,7 @@ aaa
aaa
asE
asE
-ycF
+nGI
asE
asE
aoV
@@ -67492,7 +67488,7 @@ awW
auP
awW
aaf
-vZs
+kls
aaa
aaa
aaa
@@ -67746,7 +67742,7 @@ aaa
aaa
arB
arB
-jnX
+xQG
asE
aAC
aaf
@@ -67978,7 +67974,7 @@ apN
apN
apN
apJ
-iyC
+fpI
ayk
awW
aAD
@@ -68002,7 +67998,7 @@ aaa
aaa
aaa
arB
-est
+xfS
ayk
awW
aAD
@@ -69278,7 +69274,7 @@ aaa
awW
aOh
ayl
-tTW
+jHh
aRY
awW
aaa
@@ -70574,7 +70570,7 @@ awW
arB
awZ
aym
-vrM
+fOI
awW
aaf
aaa
@@ -71855,7 +71851,7 @@ aUO
aUy
aWm
aWf
-ohX
+vdu
czK
bhN
bcl
@@ -72873,7 +72869,7 @@ aHy
ayl
aKk
aLA
-dTe
+xmS
aNf
aLA
aQD
@@ -74899,7 +74895,7 @@ ady
ady
ady
ady
-rKc
+uDO
ajq
ajW
akB
@@ -74943,7 +74939,7 @@ aXQ
aXQ
aPz
aPz
-rFc
+epC
aPz
bhQ
bjj
@@ -75197,11 +75193,11 @@ aPA
aXQ
aZt
aXQ
-gdu
+ycd
aPz
-kJY
-ihC
-oMY
+omY
+cMS
+gQX
bhQ
bjj
bkF
@@ -75457,10 +75453,10 @@ aXQ
bbL
aPz
bdJ
-gFD
+txm
bgr
-nQr
-tUm
+iwB
+hew
bkF
aaa
aaa
@@ -75715,7 +75711,7 @@ aZw
aPz
bct
bfa
-vdH
+gfr
bhQ
bjk
bkE
@@ -75970,10 +75966,10 @@ baO
aZo
baw
aPz
-cwP
+hPs
cBn
bgs
-wLT
+hnl
bjk
bkF
aaa
@@ -76274,7 +76270,7 @@ ccb
ccb
ccb
aaa
-snG
+qJr
aaa
ccb
ccb
@@ -76469,7 +76465,7 @@ bxk
aDo
aDo
aIX
-nIE
+gCC
aLE
aLE
aOp
@@ -76483,7 +76479,7 @@ aQN
aQN
aQN
aQN
-kWI
+vhb
bbO
aPA
bgt
@@ -76531,7 +76527,7 @@ aaa
aaf
aaa
aaa
-kKw
+hrF
aaa
aaa
aaf
@@ -76546,7 +76542,7 @@ aaa
aaa
aaa
aaa
-hoo
+gDl
aaa
aaa
aaa
@@ -76735,7 +76731,7 @@ aQN
aQN
aTz
aUp
-job
+ubj
aXr
aZx
aQN
@@ -76788,7 +76784,7 @@ aaf
aaf
aaf
aaf
-kKw
+hrF
aaf
aaf
aaf
@@ -76997,7 +76993,7 @@ aXv
aYS
aQN
aQN
-kWI
+vhb
bbO
aPA
aSg
@@ -77240,18 +77236,18 @@ aDo
aDo
aDo
aIY
-nIE
+gCC
aLE
aLE
aOl
aPA
-lhg
+pqs
aQN
aTC
aUs
-phY
+mTG
aXt
-ksn
+ijG
aQN
aQN
aPA
@@ -77506,9 +77502,9 @@ aQV
aQN
aTC
aUu
-eRk
+gxc
aXt
-ksn
+ijG
aQN
aQN
aZB
@@ -77761,11 +77757,11 @@ aOl
aPA
aQU
aQN
-hzw
-qlr
-pPE
+nLw
+sLa
+oyl
aXw
-jiR
+qfk
aQN
aQN
aZA
@@ -78273,10 +78269,10 @@ aLm
aLE
aOl
aPA
-xIn
+vJu
aQN
aTD
-mIS
+ocv
aUZ
aYU
aYU
@@ -78517,14 +78513,14 @@ aaf
avY
axo
arP
-fLd
-cRD
+fgG
+rqW
aGD
-tru
+tJi
aCr
-qBc
-iFL
-qBc
+hcb
+qTG
+hcb
aKu
aLM
aLF
@@ -78534,14 +78530,14 @@ aPG
aPG
aPG
aPG
-jsy
+lip
aQW
aQW
aQW
aQW
-cVu
+xDM
aPA
-oBp
+jxF
aYb
aZE
bjp
@@ -78774,14 +78770,14 @@ aaa
avY
axo
arP
-qwe
-ioB
+rPU
+fne
aGr
aHI
-xdV
-ePO
-phu
-qBc
+fOA
+tWj
+oyz
+hcb
aKu
aLL
bDe
@@ -79032,13 +79028,13 @@ avY
axo
arP
aCh
-qQJ
-iYz
+pIf
+kCo
aHK
aCr
-tUw
-mqa
-qBc
+uJx
+ikk
+hcb
aKu
aLN
aLE
@@ -79052,13 +79048,13 @@ aWu
aYc
aZD
aZD
-uhm
+vnI
aZD
aZD
bff
-iRJ
+dev
aZE
-fyM
+xBw
bjr
ama
bmh
@@ -79117,18 +79113,18 @@ bLv
bLv
bLv
aaa
-prP
-prP
-prP
-prP
-prP
-prP
-prP
-prP
-prP
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
aaa
aaa
-hoo
+gDl
aaa
aaa
aaa
@@ -79289,13 +79285,13 @@ avZ
axp
ayC
azH
-wyM
+eEe
aGv
aCr
aCr
-tUw
-mqa
-qBc
+uJx
+ikk
+hcb
aKu
aLN
aLE
@@ -79306,7 +79302,7 @@ aRa
aTF
aPG
aSX
-eRn
+hPP
aZF
aZF
aZF
@@ -79374,7 +79370,7 @@ cqK
crl
bLv
aaa
-prP
+iDo
ctv
ctv
ctv
@@ -79382,7 +79378,7 @@ ctv
ctv
ctv
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -79543,14 +79539,14 @@ aGh
aqR
aqR
awb
-eLH
+xtP
ayA
-fHK
-hRX
+sNK
+xmo
aBV
-pNH
-sfa
-ioX
+mzB
+mJG
+szG
aHG
aJe
aKw
@@ -79631,15 +79627,15 @@ cAQ
crm
bLv
aaa
-prP
-prP
-prP
-prP
-prP
-prP
-prP
-prP
-prP
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
+iDo
aaa
aaa
aaa
@@ -79803,13 +79799,13 @@ awa
axq
ayD
azI
-gwi
+rjQ
aBU
-xkk
-upX
-qJZ
-doP
-qBc
+myh
+inR
+wUr
+iTq
+hcb
aKu
aLN
aMQ
@@ -79856,7 +79852,7 @@ aoV
bCq
bHE
bHE
-puG
+mPr
cdb
bCq
bVE
@@ -79898,9 +79894,9 @@ gXs
aaa
aaa
aaa
-prP
-prP
-prP
+iDo
+iDo
+iDo
aaa
aaa
aaa
@@ -80057,16 +80053,16 @@ aaa
aaa
aag
avY
-jLM
+xxi
ayD
-oeJ
+cGz
aMr
-qOf
+ngs
aDv
-lwp
-tUw
-jly
-qBc
+uRS
+uJx
+dsC
+hcb
aKu
aLN
aMS
@@ -80155,9 +80151,9 @@ gXs
aaa
aaa
aaa
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -80314,21 +80310,21 @@ aaa
aaa
aag
avY
-jLM
+xxi
ayD
-wVs
+viF
aMr
aMr
aOH
-lwp
-vNh
-qHB
-qBc
+uRS
+lSa
+oTW
+hcb
aKu
aLN
aMS
aOi
-sqa
+lPr
aPK
aSl
aTH
@@ -80383,7 +80379,7 @@ mrR
dKP
odx
rBq
-ouD
+kQO
bCq
bUs
bLv
@@ -80402,19 +80398,19 @@ aaf
aaa
aaf
gXs
-sYv
+gUu
crn
bij
bij
bij
bij
bij
-hWn
+jkz
btG
aaa
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -80573,14 +80569,14 @@ aag
avY
axs
ayD
-sjm
-eNK
-iEx
+nez
+ngV
+xPY
aOH
-qBc
-qBc
-tAV
-qBc
+hcb
+hcb
+syJ
+hcb
aKu
aLN
aMS
@@ -80610,7 +80606,7 @@ bbR
btu
bbR
bOL
-fnJ
+qje
byF
bwW
bGm
@@ -80652,26 +80648,26 @@ cjJ
cjJ
cjJ
cjJ
-gVX
-reZ
-reZ
+kfX
+saU
+saU
bij
crn
bij
bij
-sZR
-ued
+eCR
+wUg
bnT
bph
bsc
-fhP
+mQS
bsc
-eXm
+tNF
btG
gXs
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -80912,12 +80908,12 @@ cov
cpj
cpS
cjJ
-xLZ
-ivF
+fjS
+sPT
btG
-wAB
-vVP
-mwO
+rXl
+xgC
+ugu
bnV
bph
bih
@@ -80926,9 +80922,9 @@ bii
bsc
btG
aaa
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -81104,8 +81100,8 @@ aPK
aSn
aTK
aPK
-vRX
-hwu
+uoG
+sOA
asW
baW
bLE
@@ -81123,7 +81119,7 @@ bpB
bpB
brR
bsV
-aaM
+bwc
bxA
bvI
bwX
@@ -81168,14 +81164,14 @@ cnN
cox
cpl
cpU
-ipc
-edH
-edH
-nWq
-edH
-wZB
-fby
-qwB
+jLn
+xTy
+xTy
+tJK
+xTy
+vob
+xhS
+mOB
bph
big
bgN
@@ -81183,9 +81179,9 @@ bkZ
bsc
btG
aaa
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -81322,7 +81318,7 @@ aaa
acd
acd
acd
-jHM
+xUe
acd
acd
aaa
@@ -81366,7 +81362,7 @@ aYi
aqW
aqW
bbQ
-qpA
+uFp
apd
aZH
aZK
@@ -81426,12 +81422,12 @@ cow
cpk
cpT
cjJ
-xLZ
-oNQ
+fjS
+dXq
btG
-sZa
-jhF
-qmM
+rtl
+oqO
+vFr
bnV
bph
bii
@@ -81440,9 +81436,9 @@ bih
bsc
btG
aaa
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -81577,10 +81573,10 @@ abc
abc
afu
abc
-suI
-qMu
-kJr
-dxB
+itQ
+pgn
+tmO
+eHU
acd
aaa
aaa
@@ -81681,25 +81677,25 @@ clG
cnP
coz
cpn
-dbn
-dbn
+sPY
+sPY
bgO
-hjw
+dgO
bgO
-nTE
-pTn
-jnm
+pPI
+uRd
+ktP
bnW
bph
bsc
-mQR
+mkv
bsc
-wNM
+jFH
btG
gXs
-prP
+iDo
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -81834,11 +81830,11 @@ aea
aeH
aft
abc
-woX
-kdm
-rvZ
-vUR
-jHM
+dly
+mnC
+mcp
+xls
+xUe
aaa
aaa
aiU
@@ -81944,19 +81940,19 @@ aaf
aaa
aaa
gXs
-gtL
+iHk
bgO
bgO
bgO
bgO
bgO
bgO
-vgp
+jBA
btG
aaa
-gSH
+kvl
ctv
-prP
+iDo
aaa
aaa
aaa
@@ -82080,7 +82076,7 @@ aaa
aaa
gXs
gXs
-dbM
+dVU
abc
abu
abu
@@ -82092,10 +82088,10 @@ aeJ
afw
abc
abc
-kdm
+mnC
aay
-vUR
-qlF
+xls
+kMt
aaf
aaf
aiU
@@ -82163,7 +82159,7 @@ bCq
bHD
bJe
bCq
-czi
+nkP
bHE
bHE
bHE
@@ -82211,7 +82207,7 @@ aaa
aaa
aaa
aaa
-prP
+iDo
ctv
aaT
aaa
@@ -82349,9 +82345,9 @@ aeI
afv
agf
abc
-kdm
+mnC
aay
-vUR
+xls
aiT
aiT
aiV
@@ -82384,7 +82380,7 @@ aKA
aLN
aMS
aOz
-iMG
+exP
aPQ
aSa
aSr
@@ -82394,7 +82390,7 @@ aYZ
bLE
aqW
aqW
-hfe
+noy
apd
beA
bqp
@@ -82402,7 +82398,7 @@ cNG
cNJ
bLF
aZK
-haz
+sRH
bbR
bqt
cBq
@@ -82468,8 +82464,8 @@ aaa
aaa
aaa
aaa
-prP
-prP
+iDo
+iDo
aaT
aaa
aaa
@@ -82593,8 +82589,8 @@ aaa
aaa
aaa
aai
-jSa
-uVt
+eqd
+kgr
abe
abw
acc
@@ -82606,9 +82602,9 @@ aeL
afy
agh
abc
-tOd
-vRr
-tLl
+hnU
+vda
+ybj
aiT
ajs
akb
@@ -82850,7 +82846,7 @@ aaa
aaa
gXs
aai
-gIO
+gbu
aay
abd
abv
@@ -82863,9 +82859,9 @@ aeK
afx
agg
abc
-orw
-jMK
-riA
+dCV
+idK
+ttX
aiU
ajr
aka
@@ -83108,9 +83104,9 @@ aaf
aaf
aai
acd
-wgb
+mIZ
abg
-jtU
+enB
aby
aby
aby
@@ -83120,10 +83116,10 @@ aeN
afA
afA
abc
-vWw
-wFk
-oXL
-cXx
+laq
+kdP
+mGw
+jls
aju
akd
akK
@@ -83190,14 +83186,14 @@ bCn
bGq
bGq
bGq
-tdF
+rGq
bLw
bGq
bGq
bGq
bLw
bGq
-tdF
+rGq
bTD
bUx
bVI
@@ -83212,7 +83208,7 @@ bVI
bVI
bVI
bTA
-xlN
+xgk
bHE
bHE
bHE
@@ -83245,7 +83241,7 @@ aaa
aaa
aaa
aaa
-hvS
+kEY
aaa
aaa
aaa
@@ -83366,7 +83362,7 @@ aai
aai
abf
aat
-tHx
+jRw
abx
acd
acC
@@ -83375,12 +83371,12 @@ adF
aef
aeM
afz
-jSD
+dLG
aav
-sjT
-pLt
-pQr
-new
+vIi
+fsj
+mPt
+lyR
ajt
akc
akJ
@@ -83693,7 +83689,7 @@ bqw
aJq
aJq
aYl
-ppY
+fAj
aLX
aJq
aJq
@@ -83877,7 +83873,7 @@ aai
aan
aaw
aaB
-kfE
+qmn
aaJ
aat
abh
@@ -84132,7 +84128,7 @@ aag
aaa
aak
aap
-fuo
+saX
aaD
aau
aat
@@ -84207,7 +84203,7 @@ bqy
cBr
bqy
buK
-pNI
+tZe
aJw
aJq
aJq
@@ -84239,7 +84235,7 @@ bWB
bWB
cec
bVI
-iOt
+kNv
ccw
chY
ciX
@@ -84646,7 +84642,7 @@ aag
aaa
aal
aar
-phH
+uGI
aaF
aat
aat
@@ -84725,7 +84721,7 @@ bwi
bmr
aMm
aJq
-otF
+vEi
bCs
bCs
bEY
@@ -84903,12 +84899,12 @@ aag
aaf
aaj
aaq
-eOy
+dyS
aaE
aat
aaN
aaV
-rtT
+rvS
aat
acd
abL
@@ -84987,7 +84983,7 @@ bCs
bDv
bEX
bFb
-hKF
+kfv
bFa
bKt
bLx
@@ -85163,9 +85159,9 @@ aat
aat
aat
aat
-jeR
-neC
-jgv
+qXg
+jjC
+xOx
abD
acd
acd
@@ -85183,9 +85179,9 @@ agj
auj
akl
akO
-uko
-uko
-xqW
+fde
+fde
+seP
anw
anz
aox
@@ -85421,7 +85417,7 @@ aat
aat
aat
aat
-hRz
+uEI
aat
abC
acd
@@ -85465,7 +85461,7 @@ aGq
aHO
aJl
ayW
-neb
+ftE
aJq
aOE
aJn
@@ -85478,7 +85474,7 @@ aYq
aZO
aZC
baK
-qBe
+rnt
bbC
bdI
bgK
@@ -85735,10 +85731,10 @@ aYs
aZQ
bbi
bde
-nLf
+kvL
bcd
bcd
-xhx
+gNC
bcd
bcd
bcd
@@ -85930,14 +85926,14 @@ aaa
aag
aaf
aai
-cMk
-cMk
+wYc
+wYc
aaG
-cMk
+wYc
aaP
aaX
-unu
-lwY
+keM
+xib
acd
acD
acY
@@ -85993,7 +85989,7 @@ aZP
bbh
bcc
bdd
-gjf
+cVs
bfr
bgM
bif
@@ -86211,9 +86207,9 @@ aiz
ajg
akl
akR
-uko
-uko
-xqW
+fde
+fde
+seP
anz
anz
aov
@@ -86252,19 +86248,19 @@ bbk
bfu
bbk
bfs
-pUl
+rTu
aZM
aZM
aaf
aaf
-lCL
+ktS
aaf
-lCL
+ktS
aaf
-lCL
+ktS
aaf
-lCL
-wwB
+ktS
+fxV
aXf
aJq
bBi
@@ -86451,7 +86447,7 @@ aaa
aaf
aai
abi
-vdz
+eqA
ach
acK
adf
@@ -86509,19 +86505,19 @@ bce
bdf
beb
aYv
-kTz
-kDD
+cUx
+fcn
aaf
aaf
-lCL
-lCL
+ktS
+ktS
aaf
-wwB
-wwB
-wwB
-wwB
-wwB
-wwB
+fxV
+fxV
+fxV
+fxV
+fxV
+fxV
aXf
aJq
byU
@@ -86766,19 +86762,19 @@ aZR
bbm
bec
bfu
-sdL
+vBa
aBa
aBa
aBa
aBa
aBa
aBa
-wwB
+fxV
bsb
-lTq
-tMS
-eND
-wEp
+yhz
+ouQ
+cQT
+nbT
aXf
aJq
bBi
@@ -86972,7 +86968,7 @@ cpg
acv
adi
adi
-pQD
+yiY
aeW
agQ
ahv
@@ -86989,7 +86985,7 @@ anz
anz
aov
aph
-oOb
+cIv
ard
ard
ard
@@ -87023,7 +87019,7 @@ aZR
aZR
aZR
bft
-srq
+psk
aBa
aBT
aDs
@@ -87032,13 +87028,13 @@ aGb
aBa
bqD
bsa
-oeQ
+vCn
bsa
bsa
-wEp
+nbT
byS
aJq
-idX
+wTf
bCs
bCs
bCs
@@ -87229,7 +87225,7 @@ acl
cxA
acL
adi
-vpz
+pfm
agp
agT
ahx
@@ -87239,12 +87235,12 @@ ajc
ajI
akl
akT
-fGl
-uko
-xqW
+unW
+fde
+seP
anw
anz
-lYU
+old
apk
anw
anw
@@ -87255,7 +87251,7 @@ avj
awl
axC
ayY
-uZM
+cpF
azZ
azZ
azZ
@@ -87280,16 +87276,16 @@ bbm
bdh
bee
bfv
-vLD
+xUL
aBb
-cSn
+gpD
aDr
aEM
aGa
aHF
bqF
bsa
-nmx
+nXE
buQ
buQ
bxI
@@ -87359,7 +87355,7 @@ cgI
cgI
cgI
aaa
-hoo
+gDl
aaa
aaa
aaa
@@ -87537,13 +87533,13 @@ bcf
bdg
bed
bfv
-kvZ
-fGC
-qvM
+tyX
+pst
+cTT
alu
aEM
aGd
-nMx
+uOJ
bqE
bqE
bqE
@@ -87769,7 +87765,7 @@ avk
awk
axE
ayZ
-ncj
+pHO
aBu
aAa
aAa
@@ -87794,18 +87790,18 @@ bbm
bdh
bef
bfv
-smn
+gTx
aBc
-jXg
+xEB
aDt
aEO
aGc
aHF
aKG
bsf
-kxc
-kxc
-kxc
+dml
+dml
+dml
bxK
bwh
bAh
@@ -88015,7 +88011,7 @@ aml
amT
anw
anz
-ilJ
+cXU
apl
aqc
aqc
@@ -88051,19 +88047,19 @@ aZR
aZR
aZR
bfw
-rzg
+wZI
aBa
aBW
bjy
aEP
-nOS
+nYe
aBa
bqG
bsa
-jDY
+eih
bsa
bsa
-wEp
+nbT
bwb
aJq
bBr
@@ -88272,7 +88268,7 @@ amn
amV
anw
anz
-rsX
+gfC
aod
aqf
ahT
@@ -88308,19 +88304,19 @@ aZR
bbm
beh
bfx
-spX
+qcm
aBa
aBa
aBa
aBa
aBa
aBa
-mte
+wql
bsg
-lTq
-tMS
-fZD
-wEp
+yhz
+ouQ
+fTC
+nbT
aJq
aJq
bBu
@@ -88565,19 +88561,19 @@ bcg
aZU
beg
aYB
-ptV
-fjy
+qOB
+qBi
aaf
aaf
-lCL
-lCL
+ktS
+ktS
aaf
-wwB
-wwB
-wwB
-wwB
-wwB
-wwB
+fxV
+fxV
+fxV
+fxV
+fxV
+fxV
aJq
aJq
bBt
@@ -88782,9 +88778,9 @@ ajJ
akr
akX
alC
-iqw
+wIG
amX
-elw
+spu
anz
aoB
aod
@@ -88822,19 +88818,19 @@ bbp
bfx
bbp
bfz
-tAb
+sqp
aZV
aZV
aaf
aaf
-lCL
+ktS
aaf
-lCL
+ktS
aaf
-lCL
+ktS
aaf
-lCL
-wwB
+ktS
+fxV
aJq
aJq
aXf
@@ -89041,9 +89037,9 @@ akW
aiG
amo
amW
-uYE
+uaj
anz
-rsX
+gfC
aod
aqe
arf
@@ -89094,7 +89090,7 @@ bsh
bqH
aJq
aJq
-unY
+gnf
bCv
bDJ
bCt
@@ -89333,7 +89329,7 @@ aYD
aZX
baf
bdk
-jwi
+mRQ
bek
bfB
bgU
@@ -89576,7 +89572,7 @@ vHj
eVC
dgz
aJv
-ioG
+khV
aMg
bHt
aOE
@@ -89806,13 +89802,13 @@ ahC
aia
aiP
aiR
-olv
+coi
akv
ala
aww
afM
aiX
-uVq
+xzj
anz
aoF
apo
@@ -89823,8 +89819,8 @@ atj
aul
auR
atj
-kcj
-ghJ
+mps
+tKk
atj
aAX
azc
@@ -89847,7 +89843,7 @@ aPR
aZV
baq
baQ
-dTJ
+wcB
bcQ
bfC
bgV
@@ -90083,8 +90079,8 @@ avt
axL
bbl
azT
-nlt
-dwc
+nZE
+ker
aDG
aFd
auk
@@ -90137,7 +90133,7 @@ bOV
bQj
bRw
bSF
-gVY
+daI
bTP
bRA
bWQ
@@ -90336,11 +90332,11 @@ arf
arf
arf
arf
-ukP
-oma
+ltK
+xAv
awr
awr
-wwn
+ruo
aAh
aAh
aAh
@@ -90377,7 +90373,7 @@ btL
buY
buY
bqH
-neb
+ftE
aJq
aXf
bCv
@@ -90394,7 +90390,7 @@ bOV
bQo
bRz
bSH
-cJn
+plm
bTP
bRA
bWQ
@@ -90597,7 +90593,7 @@ avv
awu
awr
aAd
-uDW
+tkq
aAh
aDL
aAh
@@ -90651,7 +90647,7 @@ bOV
bQj
bRy
bSG
-gVY
+daI
bUK
bVT
bWR
@@ -90854,7 +90850,7 @@ awp
axN
awr
awr
-kSh
+haM
aAh
aDQ
aAh
@@ -90862,7 +90858,7 @@ aGl
aAh
aBy
aAh
-pTR
+rqf
aJq
aOE
aJn
@@ -90873,9 +90869,9 @@ aVv
aXg
aYF
aZV
-bbw
+nZL
bcn
-qUm
+tgH
ben
bfE
bgX
@@ -91105,13 +91101,13 @@ aqe
arf
ari
asu
-kyi
+mPk
aun
avR
-oma
-dHb
+xAv
+ofU
awr
-uya
+sFW
aAh
aDM
aGx
@@ -91364,18 +91360,18 @@ arf
arf
arf
arf
-ukP
+ltK
axP
azb
aAi
-wGP
+uIO
aCn
-rOm
-wwC
+xBk
+dtx
aGm
aHV
aDM
-nrR
+hIM
aJq
aJq
aJq
@@ -91406,9 +91402,9 @@ bva
bwu
bwu
bwu
-ihm
+kPj
bBB
-rhb
+eBX
bzs
bFp
bGJ
@@ -91624,8 +91620,8 @@ arf
awq
axO
aza
-jtk
-pqR
+kmw
+xrN
aAh
aAh
aAh
@@ -91874,7 +91870,7 @@ ajo
aps
aqk
arf
-vGX
+vDR
blU
aHw
avn
@@ -91882,14 +91878,14 @@ awv
axX
aze
awr
-hMx
+flE
aAh
aDU
aBz
aBz
aAh
-isy
-uzk
+dTI
+ujv
aJq
aJq
aJq
@@ -92133,7 +92129,7 @@ aqj
arf
ark
asu
-epV
+xPk
aun
awt
awr
@@ -92142,10 +92138,10 @@ azX
aAZ
aCe
aDT
-mEN
-mEN
-dzy
-fyq
+cPn
+cPn
+mkO
+uQS
aAh
aJC
aJC
@@ -92402,18 +92398,18 @@ aDP
aBx
aBx
aAh
-kCk
-qIf
+qqs
+sYR
aMq
adq
aQb
aPZ
aRu
-wpo
+kAH
aKR
-tIC
+tCa
aXi
-maC
+hgO
baa
aJC
bcq
@@ -92653,7 +92649,7 @@ awy
awr
awr
avG
-udi
+wqF
aAh
aAh
aAh
@@ -92663,13 +92659,13 @@ aAh
aAh
aKR
aKR
-pxD
+fxe
aPY
-xMl
+kAO
aRx
aKR
-jzD
-tuN
+iTU
+pqe
aPY
aZZ
aQg
@@ -92910,24 +92906,24 @@ awA
axT
axW
aAl
-tAE
+cHf
aJC
aDR
aFl
-rLr
+kqI
aHZ
aJC
aKJ
-rLR
+hIL
aKR
-hSU
-kay
+wxT
+moD
aQd
aQa
aKR
-xbu
-hSU
-lwj
+elh
+wxT
+uBa
bac
aJC
aYV
@@ -93151,7 +93147,7 @@ aif
aif
aif
bkV
-fvk
+jKP
alK
aif
aif
@@ -93159,19 +93155,19 @@ anc
anD
aoI
arf
-myt
+eSe
asN
aur
avy
-tWR
+nSt
axS
azk
aAk
-eUd
+tvi
aJC
aDY
aDY
-rLr
+kqI
aKR
aJk
aKR
@@ -93187,7 +93183,7 @@ aKR
aKR
bab
aJC
-xYO
+ucq
aYV
ber
bfF
@@ -93399,13 +93395,13 @@ abp
afo
abp
abp
-hlY
+uhm
ahn
aiA
aiA
aiA
ahn
-hYW
+oLn
anF
aod
ahn
@@ -93416,15 +93412,15 @@ ahn
ahn
ahn
arf
-iES
-jdT
+oAB
+eQb
aut
arf
aXF
awr
awr
aAn
-wcy
+rqk
aJC
aEc
aFk
@@ -93434,19 +93430,19 @@ aJC
aKr
aKR
aKR
-fbm
-fbm
-hzR
+sLj
+sLj
+vcN
aKR
aKR
aKR
-fbm
+sLj
aKR
aKR
bbx
aYV
aYV
-wDR
+tkB
bfF
bhd
bis
@@ -93652,11 +93648,11 @@ aaf
aaf
aaf
abp
-unE
+wdv
afp
-unE
+wdv
abp
-nea
+nQi
ahn
aaa
aaf
@@ -93666,39 +93662,39 @@ ahn
anE
aod
aoK
-sgV
+oyX
aqp
ahn
-ukS
-tQk
-cVp
-jdT
-jdT
-jdT
-rMc
+tzQ
+pgf
+gzf
+eQb
+eQb
+eQb
+lUS
aun
avz
awr
awr
aAn
-fSr
+jGW
aJC
aJC
-gjC
-lxx
+plC
+oAb
aJC
aJC
aKq
aKR
aNF
-egS
-ghs
-lMY
+hOv
+oax
+oxm
aSH
aKR
-dMX
-igT
-moq
+rmN
+eJa
+hSZ
aKR
aQg
aYV
@@ -93724,7 +93720,7 @@ bvj
bvj
bvd
bFu
-hcd
+jex
bvj
bvd
bKH
@@ -93926,19 +93922,19 @@ aoL
apy
aqq
ahn
-dhx
-mfb
+qLR
+oIW
arf
-unl
+kmS
ast
-jdT
+eQb
auv
arf
avA
axW
azo
aAp
-lYZ
+uxY
aBC
aCt
aEA
@@ -93949,13 +93945,13 @@ aKN
aKR
aKR
aOJ
-fvW
-dtE
+oIJ
+unA
aKR
aKR
aUg
bFC
-moq
+hSZ
aKR
bbx
aYV
@@ -93963,9 +93959,9 @@ aYV
bet
bfH
bhf
-slp
+wbE
bhh
-slp
+wbE
bmJ
bof
bpu
@@ -94191,11 +94187,11 @@ arf
arf
arf
arf
-hkg
-eNW
+hlV
+oHB
azf
aAo
-lMx
+vyp
aBB
aBB
aBB
@@ -94205,12 +94201,12 @@ cNE
aKM
aMu
aMu
-poa
-hdb
+feG
+tif
aMu
aMu
aMu
-uTq
+jgA
aSq
aKR
bad
@@ -94222,7 +94218,7 @@ bfG
bhe
bit
bjS
-nGS
+tCd
bli
boe
bli
@@ -94437,24 +94433,24 @@ aag
aag
aag
arf
-iep
-gQn
+wXl
+iou
arf
-myt
-qNs
-lMx
-sjw
+eSe
+wig
+vyp
+rrM
clO
asZ
aua
-dcG
+oZl
awB
att
azh
-vYa
-vYa
-gKk
-vbY
+fHG
+fHG
+kxf
+ufD
alP
aGI
aId
@@ -94468,7 +94464,7 @@ aMx
aMx
aMx
aMx
-eqm
+rqE
aKR
aZb
aJC
@@ -94679,11 +94675,11 @@ aaa
aaa
aaa
aaa
-xzh
+bvG
aaa
aqG
aaa
-vDq
+oyN
aaa
aaa
aaa
@@ -94694,24 +94690,24 @@ aaa
aaa
aaa
arf
-pZv
-tQk
-cVp
-jdT
-ier
+lOe
+pgf
+gzf
+eQb
+jLT
arf
arm
-vYa
+fHG
aya
-vYa
-vYa
+fHG
+fHG
auB
atZ
azg
azp
-vYa
+fHG
aCu
-dgh
+qOc
alP
aGH
aIc
@@ -94936,11 +94932,11 @@ aaa
aaa
aaa
aaa
-lCB
-lNB
+tqB
+vae
aaa
-lNB
-rUQ
+vae
+efO
aaa
aaa
aaa
@@ -94954,21 +94950,21 @@ arf
arf
arf
arf
-iES
-jYI
+oAB
+ujS
aqs
-hVw
-vYa
-vYa
-vYa
-vYa
-pSf
-vYa
+coh
+fHG
+fHG
+fHG
+fHG
+pPi
+fHG
ayb
-ndC
-vYa
+hWd
+fHG
aCv
-frE
+mbU
alP
aGJ
aIe
@@ -94982,7 +94978,7 @@ aXj
aVy
aSY
aVy
-oNb
+xqG
acN
bah
aJC
@@ -95193,11 +95189,11 @@ aaa
aaa
aaa
aaa
-jmC
-jmC
+gJi
+gJi
gXs
-jmC
-jmC
+gJi
+gJi
aaa
aaa
aaa
@@ -95210,22 +95206,22 @@ aaa
aaa
aaa
arf
-ewZ
-jdT
-tOU
+obc
+eQb
+qAm
arf
-fQF
-qbx
-qux
-vYa
-vYa
-pSf
-vYa
+lXE
+pFX
+mOO
+fHG
+fHG
+pPi
+fHG
ayb
-ndC
-vYa
-vys
-tCi
+hWd
+fHG
+sci
+sEi
alP
aGJ
aIe
@@ -95235,11 +95231,11 @@ aKQ
aNu
aJC
aPw
-kwy
+egt
aQc
aSZ
aQc
-vjq
+qaY
acN
bag
aJC
@@ -95467,22 +95463,22 @@ aaa
aaa
aaa
arf
-qoP
-prU
-fOc
+mse
+fMZ
+dqb
arf
-oSO
-sAI
-fJa
-vYa
-svw
-ntf
-jvN
-lBE
-xpx
-vYa
+xzd
+sJI
+jJg
+fHG
+eAJ
+rvr
+nLu
+hcA
+ryr
+fHG
aCu
-hgX
+puh
alP
aGA
aHS
@@ -95504,7 +95500,7 @@ aYV
aYV
bet
bfH
-dok
+qTV
bhh
bhg
bln
@@ -95708,9 +95704,9 @@ aaa
aaa
aaa
aaa
-aaz
+xLX
aaa
-aaz
+xLX
aaa
aaa
aaa
@@ -95728,18 +95724,18 @@ arf
arf
arf
arf
-mTp
-qEv
-kRk
-mXB
-qAQ
-pzk
-vYa
-sMa
-iEI
-jeT
-rTQ
-vHM
+fZm
+jmV
+epD
+ghD
+hBA
+xbn
+fHG
+reA
+lsk
+xXi
+jAN
+jEc
alP
aGL
aHM
@@ -95984,18 +95980,18 @@ aaa
aaa
aaa
gXs
-kHJ
-rEV
-rEV
-kQZ
-fVU
-vpm
-vpm
-fVU
-nel
-wCa
-wCa
-lFl
+ewu
+pQp
+pQp
+oqj
+jBi
+fpl
+fpl
+jBi
+oDN
+sEM
+sEM
+pRs
arj
alP
aGL
@@ -96092,7 +96088,7 @@ aaf
ctZ
cui
cuq
-ajY
+cuC
cuO
cuz
cvm
@@ -96270,7 +96266,7 @@ aVz
aVz
aYJ
aJI
-sIe
+mNW
aYV
aYV
aYV
@@ -96600,8 +96596,8 @@ czk
cti
cua
cua
-aeF
-afs
+ctw
+ctH
ctQ
cuc
cuj
@@ -96787,7 +96783,7 @@ baj
bbz
aYV
bdp
-itT
+mvt
bfK
bfK
bfK
@@ -96857,9 +96853,9 @@ ctb
cth
cua
ctr
-afn
-age
-agX
+ctu
+ctG
+ctP
cub
cuj
cur
@@ -97040,7 +97036,7 @@ aVD
aVE
aXm
aVz
-egQ
+juG
bbz
aYV
bdp
@@ -97114,13 +97110,13 @@ ctc
ctc
cto
ctt
-afq
+cty
ctJ
-ahw
+ctT
cue
cul
cuu
-akz
+cuG
cuS
cve
cvo
@@ -97371,9 +97367,9 @@ ctb
ctj
ctk
cts
-afr
-agv
-ajC
+ctx
+ctI
+ctS
cud
cuk
cus
@@ -97526,17 +97522,17 @@ aaa
aaa
aaa
aaa
-haX
-rEV
-rEV
-rEV
-nie
-vpm
-vpm
-wFX
-wCa
-wCa
-wCa
+vmQ
+pQp
+pQp
+pQp
+grA
+fpl
+fpl
+gbh
+sEM
+sEM
+sEM
aCy
arj
alP
@@ -97554,7 +97550,7 @@ aTO
cCq
aVz
aVz
-fPs
+qus
bbz
aYV
bdp
@@ -97787,14 +97783,14 @@ aaa
aaa
aaa
arj
-cRz
+fCx
avD
awC
ayb
-mbD
-nmS
-oFk
-xXY
+eCr
+jvd
+cEo
+xZD
vpY
alP
aGJ
@@ -97840,7 +97836,7 @@ bCR
bqQ
bGX
bCR
-oDy
+edA
bRN
bIK
bPq
@@ -98046,13 +98042,13 @@ aaf
arj
auz
avC
-kOf
+vHz
aya
-vYa
-vYa
-oYc
-vYa
-vYa
+fHG
+fHG
+xkd
+fHG
+fHG
gOZ
aGJ
avI
@@ -98143,7 +98139,7 @@ aaa
aaf
cua
ctF
-agH
+ctM
ctX
cuf
cum
@@ -98303,7 +98299,7 @@ alO
arj
arj
arj
-eOv
+pBp
gOZ
cVb
cVb
@@ -98401,7 +98397,7 @@ aaf
cua
ctE
ctL
-ajX
+ctW
cuf
cum
cuw
@@ -98815,10 +98811,10 @@ cxW
anf
aqv
ayf
-fIn
-ego
+dce
+uua
awE
-dMu
+tRB
cVb
vCb
wUY
@@ -99071,8 +99067,8 @@ aag
alO
anf
alO
-kSB
-pAl
+mAH
+jaF
alP
anf
aCG
@@ -99088,11 +99084,11 @@ aIq
aKK
aMy
aIp
-jaa
+nGf
aQm
-wOT
-htr
-htr
+fzd
+fFA
+fFA
aVK
aRJ
aRJ
@@ -99334,10 +99330,10 @@ alP
awF
aCG
alP
-olw
+nhY
aBE
aCz
-trY
+vEp
aCJ
aGT
aIn
@@ -99347,10 +99343,10 @@ aMt
aIp
aOW
aQm
-dRC
+coI
aSS
aUj
-pHo
+sJx
aRJ
aYQ
cBg
@@ -99584,7 +99580,7 @@ aoN
apA
aof
arq
-hdp
+itK
atv
auD
alP
@@ -99604,14 +99600,14 @@ aMA
aIp
aOX
aQm
-dRC
+coI
aST
aUk
-pHo
+sJx
aRJ
aYQ
bam
-yiN
+ssB
aYV
aYV
aYV
@@ -99828,10 +99824,10 @@ adU
adU
adU
adU
-ssL
-rsv
-rsv
-rsv
+eaR
+jIs
+jIs
+jIs
acx
amv
ane
@@ -99861,14 +99857,14 @@ aMz
aNQ
aOX
aQm
-tFt
-tsr
-tsr
-xzy
+lva
+nUV
+nUV
+gbd
aRJ
aYR
ban
-qje
+ikm
aYV
aYV
bez
@@ -100112,7 +100108,7 @@ aaa
aFq
aGX
aIp
-vzS
+sHx
aKU
aME
aNN
@@ -100125,7 +100121,7 @@ aXo
aXo
aYO
bap
-qje
+ikm
aYV
bci
beB
@@ -100354,7 +100350,7 @@ aof
aof
aof
aof
-qkC
+vCy
aoP
atw
auF
@@ -100362,7 +100358,7 @@ alP
aoP
auF
azr
-kel
+jez
atw
alP
alP
@@ -100376,13 +100372,13 @@ aNQ
aOZ
aOX
aOX
-hZH
+rdG
aUz
aVM
aOX
aYT
bam
-ory
+iuR
baR
bcb
bdl
@@ -100439,7 +100435,7 @@ bAw
bAw
clp
aag
-jmC
+gJi
aaa
aaa
aaa
@@ -100617,7 +100613,7 @@ aty
auF
alP
aAt
-kuY
+jZT
alP
alP
alP
@@ -100868,7 +100864,7 @@ aaa
aaa
apC
anf
-kel
+jez
alP
atx
auF
@@ -100877,7 +100873,7 @@ auD
auF
apE
aAs
-khA
+vbi
alP
aCG
aFr
@@ -101130,12 +101126,12 @@ alP
apE
auG
alP
-rgF
+iWx
auF
apE
anf
anf
-jRy
+noF
aCG
aDZ
aFu
@@ -101399,8 +101395,8 @@ bbE
aIr
bav
aLf
-aaL
-kLR
+aNV
+qfD
aRO
aQp
aRN
@@ -101464,11 +101460,11 @@ cQB
czY
cOT
aaa
-jmC
-jmC
-jmC
-jmC
-jmC
+gJi
+gJi
+gJi
+gJi
+gJi
aaa
aaa
aaa
@@ -101641,12 +101637,12 @@ apC
alP
alP
alP
-tuj
+dbU
auH
avF
awI
ayc
-mlr
+gcF
asw
asw
aCD
@@ -101657,7 +101653,7 @@ aIu
aJQ
aIt
aIt
-kLR
+qfD
aRO
aIt
aRN
@@ -101912,9 +101908,9 @@ anf
aFu
aIs
aJP
-wuB
+vZR
aIt
-nsJ
+hGH
aYW
aYW
aYW
@@ -101982,9 +101978,9 @@ aaa
aaa
aaa
aaH
-adO
-aeD
-aeE
+eFW
+nwX
+weM
aaa
aaa
aaa
@@ -102169,9 +102165,9 @@ aFu
aFu
aIw
aJS
-tqt
+pJR
aNP
-jFy
+esZ
aOS
aOS
aOS
@@ -102235,14 +102231,14 @@ cQB
cAa
cOT
gXs
-xNY
-kvb
+rnK
+kWp
aaa
aaa
aaH
aaH
aaH
-aeE
+weM
aaa
aaa
aaa
@@ -102419,7 +102415,7 @@ awJ
anf
alP
aAv
-gCe
+tJS
aCE
aDZ
aFu
@@ -102428,7 +102424,7 @@ aIv
aJR
aIt
aIt
-kLR
+qfD
aRO
aIt
aPd
@@ -102492,14 +102488,14 @@ czU
czZ
cOT
aaa
-jmC
+gJi
aaH
aaH
aaH
aaH
aaH
aaH
-adO
+eFW
aaa
aaa
aaa
@@ -102685,7 +102681,7 @@ aIx
aJF
aQq
aNS
-kLR
+qfD
aRO
aIt
aPd
@@ -102749,14 +102745,14 @@ cgm
czY
cOT
gXs
-xNY
-kvb
-gJg
+rnK
+kWp
+kaq
aaH
aaH
aaa
aaa
-gJg
+kaq
aaa
aaa
aaa
@@ -102946,12 +102942,12 @@ aFu
aPf
aQq
aRP
-kHK
+pem
aIt
aIt
aWd
aXV
-iWa
+vsT
bbD
aYV
aXq
@@ -102959,7 +102955,7 @@ aYV
bfV
bhw
cHM
-kRw
+wWT
blB
blF
cHS
@@ -103008,9 +103004,9 @@ cNW
aaa
aaa
aaa
-gJg
-gJg
-adO
+kaq
+kaq
+eFW
aaH
gXs
aaa
@@ -103182,8 +103178,8 @@ alO
anf
anf
arw
-ftv
-sLr
+nuw
+uve
anf
alP
awL
@@ -103456,7 +103452,7 @@ aIy
aJG
cAz
aFw
-iWk
+gRZ
aPg
aQr
aFu
@@ -103523,10 +103519,10 @@ aaa
aaa
aaa
aaa
-jmC
-jmC
-jmC
-jmC
+gJi
+gJi
+gJi
+gJi
aaa
aaa
aaa
@@ -103693,10 +103689,10 @@ aaa
aaa
gXs
alP
-qxc
+jkx
ayf
-nuV
-iOV
+xAk
+mHU
aFn
aFn
aBB
@@ -103713,7 +103709,7 @@ aFw
aLo
aLb
aFw
-eMQ
+xEE
aYW
aYW
aRQ
@@ -103947,13 +103943,13 @@ aaa
aaa
aaa
aaa
-fzd
-fzd
-fzd
-fzd
-tNJ
-fzd
-fzd
+nsA
+nsA
+nsA
+nsA
+qVP
+nsA
+nsA
atB
alP
alP
@@ -103970,7 +103966,7 @@ aIz
aJM
aLa
aFw
-tGG
+hsb
aYW
aQs
aFu
@@ -104204,21 +104200,21 @@ aaa
aaa
aaa
aaa
-fzd
-xdb
-mCq
-wJz
-mHC
-tWs
-lmi
-ghY
-sxX
-ghY
-jBZ
+nsA
+cQF
+ndq
+rIA
+fBy
+hRI
+jaH
+hHQ
+feE
+hHQ
+kGJ
avI
asA
apE
-vHv
+dPk
aCG
aEf
aFw
@@ -104461,12 +104457,12 @@ aaa
aaa
aaa
aaa
-tIk
-mCq
-mCq
-mCq
-mCq
-pjh
+wKe
+ndq
+ndq
+ndq
+ndq
+oLl
asB
asB
asB
@@ -104557,7 +104553,7 @@ cOe
cBT
aag
gXs
-jmC
+gJi
aaa
aaa
aaa
@@ -104718,12 +104714,12 @@ aaa
aaa
aaa
aaa
-tIk
-mCq
-mCq
-mCq
-mCq
-dSv
+wKe
+ndq
+ndq
+ndq
+ndq
+qeb
asB
atD
auJ
@@ -104975,12 +104971,12 @@ aaa
aaa
aaa
aaa
-fzd
-mCq
-mCq
-mCq
-mCq
-mCq
+nsA
+ndq
+ndq
+ndq
+ndq
+ndq
asB
atC
auI
@@ -105064,7 +105060,7 @@ cNW
cNW
cNW
cOe
-qXH
+fup
csy
cko
cAf
@@ -105232,12 +105228,12 @@ aaa
aaa
aaa
aaa
-tIk
-mCq
-mCq
-mCq
-mCq
-mCq
+wKe
+ndq
+ndq
+ndq
+ndq
+ndq
asB
atE
auI
@@ -105489,18 +105485,18 @@ aaa
aaa
aaa
aaa
-tIk
-mCq
-mCq
-mCq
-mCq
-mCq
+wKe
+ndq
+ndq
+ndq
+ndq
+ndq
asB
asB
asB
avL
awR
-hRT
+hiV
azu
aAz
asB
@@ -105574,7 +105570,7 @@ cgp
chv
ciJ
cbf
-lLI
+diq
clr
bnt
cOe
@@ -105746,12 +105742,12 @@ aaa
aaa
aaa
aaa
-fzd
-wXP
-mCq
-nXa
-mCq
-nyH
+nsA
+lGV
+ndq
+pou
+ndq
+srG
asB
atG
auL
@@ -106003,12 +105999,12 @@ aaa
aaa
aaa
aaa
-fzd
-fzd
-fzd
-fzd
-fzd
-fzd
+nsA
+nsA
+nsA
+nsA
+nsA
+nsA
asB
atF
auK
@@ -106092,7 +106088,7 @@ cNW
clt
cQw
cNW
-abG
+mJo
cNW
cNW
aaf
@@ -106294,9 +106290,9 @@ aXB
aZh
baB
aCR
-riB
+kYk
bdx
-dfI
+vHT
bgc
bgc
biX
@@ -106348,7 +106344,7 @@ aaa
cOT
clt
cQw
-aaO
+oEZ
cOe
cOe
cNW
@@ -106605,18 +106601,18 @@ aaa
cOT
clt
cQw
-aaQ
+ttL
cOe
cOe
cNW
aaa
-jzi
-jzi
-jzi
-jzi
-jzi
-jzi
-jzi
+fIs
+fIs
+fIs
+fIs
+fIs
+fIs
+fIs
aaS
aaS
aba
@@ -106866,7 +106862,7 @@ bNB
cOe
cOe
cNW
-lCL
+ktS
aaS
aaa
aaf
@@ -107119,7 +107115,7 @@ cNW
cNW
clt
cQw
-aaY
+cCt
cOe
cOe
cNW
@@ -107368,7 +107364,7 @@ cbZ
bSl
cmo
cNW
-vOq
+lZl
cNW
chC
ciL
@@ -108668,17 +108664,17 @@ cpi
cpi
cpi
cqJ
-ggg
+vZA
crk
crk
crk
crk
crk
-pFt
+pTB
cqJ
-ggg
+vZA
crk
-pFt
+pTB
cpi
cpi
ctB
@@ -108934,7 +108930,7 @@ crF
aaa
aaa
aaa
-hik
+vPs
aaa
aaa
aaa
@@ -109673,7 +109669,7 @@ cNW
cNW
cNW
cNW
-vFt
+kAJ
clt
cac
cbh
@@ -109939,7 +109935,7 @@ cbf
cbf
ceT
cNW
-kCW
+dBm
chH
cNW
aaf
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index f4135b7566..1abdd85019 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -35039,9 +35039,9 @@
/area/quartermaster/miningoffice)
"blX" = (
/obj/machinery/disposal/bin,
-/obj/effect/decal/cleanable/dirt,
/obj/machinery/light,
/obj/effect/turf_decal/delivery,
+/obj/structure/disposalpipe/trunk,
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
"blY" = (
@@ -35915,7 +35915,6 @@
/area/quartermaster/miningoffice)
"bnA" = (
/obj/structure/plasticflaps/opaque,
-/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
/obj/machinery/door/window/northright{
req_access_txt = "48"
@@ -35923,7 +35922,6 @@
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"bnB" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
icon_state = "1-2"
},
@@ -36748,6 +36746,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"boW" = (
@@ -36760,6 +36761,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"boX" = (
@@ -36767,7 +36771,6 @@
name = "Maintenance Hatch";
req_access_txt = "12"
},
-/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -36780,10 +36783,12 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"boY" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -36796,11 +36801,13 @@
/obj/effect/turf_decal/tile/brown{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"boZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
icon_state = "1-8"
},
@@ -36808,18 +36815,17 @@
dir = 9
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/maintenance/starboard/fore)
-"bpa" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
+/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
+"bpa" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"bpb" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/effect/decal/cleanable/dirt,
@@ -38203,6 +38209,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"brb" = (
@@ -39341,12 +39348,12 @@
/area/hallway/primary/central)
"bsV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bsW" = (
@@ -62346,7 +62353,7 @@
/turf/open/floor/wood,
/area/crew_quarters/heads/captain/private)
"cbd" = (
-/obj/effect/landmark/event_spawn,
+/obj/machinery/vending/wardrobe/cap_wardrobe,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain/private)
"cbe" = (
@@ -85386,10 +85393,6 @@
},
/turf/open/floor/plasteel,
/area/medical/medbay/central)
-"cNB" = (
-/obj/machinery/status_display/evac,
-/turf/closed/wall,
-/area/medical/medbay/central)
"cNC" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
@@ -125766,17 +125769,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"eYg" = (
-/obj/machinery/door/airlock/external{
- name = "External Docking Port"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
"faI" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -125813,6 +125805,27 @@
},
/turf/open/floor/plasteel,
/area/medical/medbay/central)
+"fiK" = (
+/obj/structure/cable/white{
+ 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
+ },
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 8;
+ name = "Mining Junction";
+ sortType = 22
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"fno" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -125935,15 +125948,6 @@
},
/turf/open/floor/engine,
/area/science/mixing)
-"gdb" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
"giN" = (
/obj/structure/window/reinforced{
dir = 8
@@ -125955,19 +125959,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/circuit)
-"gmn" = (
-/obj/machinery/door/airlock/external{
- name = "External Docking Port"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
"gut" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -126102,11 +126093,6 @@
/obj/structure/sign/warning/vacuum,
/turf/closed/wall/r_wall,
/area/chapel/office)
-"hlu" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/computer/shuttle/mining/common,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
"hrP" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -126387,6 +126373,10 @@
},
/turf/open/floor/plasteel,
/area/medical/morgue)
+"jOB" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall,
+/area/maintenance/starboard/fore)
"jOE" = (
/obj/machinery/newscaster{
pixel_x = 32
@@ -126585,6 +126575,17 @@
},
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
+"lDl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/starboard/fore)
"lEl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -126700,23 +126701,6 @@
},
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
-"mgh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/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
- },
-/obj/effect/landmark/start/cyborg,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/turret_protected/aisat_interior)
"mkm" = (
/obj/machinery/atmospherics/components/binary/valve,
/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_toxmix{
@@ -126767,6 +126751,15 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
+"mvx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"mxm" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
@@ -126776,6 +126769,17 @@
/obj/item/assembly/signaler,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
+"mLI" = (
+/obj/machinery/door/airlock/external{
+ name = "External Docking Port"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"mPj" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
@@ -126838,10 +126842,28 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/maintenance/port/fore)
+"nQR" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/computer/shuttle/mining/common,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"nSh" = (
/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"nSS" = (
+/obj/machinery/door/airlock/external{
+ name = "External Docking Port"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"oHk" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -127063,6 +127085,21 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
+"qeN" = (
+/obj/machinery/atmospherics/pipe/manifold/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/effect/landmark/start/cyborg,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/turret_protected/aisat_interior)
"qhc" = (
/obj/structure/table/reinforced,
/obj/item/integrated_electronics/analyzer,
@@ -127132,6 +127169,13 @@
dir = 9
},
/area/science/circuit)
+"rjr" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain/private)
"rqh" = (
/obj/structure/lattice,
/turf/open/space/basic,
@@ -127458,6 +127502,17 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
+"xdp" = (
+/obj/docking_port/stationary{
+ dwidth = 3;
+ height = 5;
+ id = "commonmining_home";
+ name = "SS13: Common Mining Dock";
+ roundstart_template = /datum/map_template/shuttle/mining_common/meta;
+ width = 7
+ },
+/turf/open/space/basic,
+/area/space)
"xdZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -127510,17 +127565,23 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
-"xDY" = (
-/obj/docking_port/stationary{
- dwidth = 3;
- height = 5;
- id = "commonmining_home";
- name = "SS13: Common Mining Dock";
- roundstart_template = /datum/map_template/shuttle/mining_common/meta;
- width = 7
+"xCB" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/turf/open/space/basic,
-/area/space)
+/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/effect/landmark/start/cyborg,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/turret_protected/aisat_interior)
"xDZ" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -127608,21 +127669,6 @@
},
/turf/open/floor/plating,
/area/science/research/abandoned)
-"ylW" = (
-/obj/machinery/atmospherics/pipe/manifold/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/effect/landmark/start/cyborg,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/turret_protected/aisat_interior)
(1,1,1) = {"
aaa
@@ -137517,7 +137563,7 @@ bPC
bRK
bTC
bVK
-ylW
+qeN
cal
bPC
aaa
@@ -137774,7 +137820,7 @@ bPC
bRL
bTC
bVx
-mgh
+xCB
cam
bPC
bRO
@@ -138031,7 +138077,7 @@ bPC
bRM
bTD
bVL
-mgh
+xCB
can
bPC
bkE
@@ -160040,10 +160086,10 @@ aaa
aaa
aaa
aaa
-xDY
-eYg
-gdb
-gmn
+xdp
+mLI
+mvx
+nSS
abe
abp
abC
@@ -160301,7 +160347,7 @@ aaa
aaO
aaO
aaO
-hlu
+nQR
abq
abD
abD
@@ -168897,7 +168943,7 @@ cHP
cIS
bqX
cMa
-cNB
+iQI
cPr
cQW
cSF
@@ -169387,7 +169433,7 @@ bUO
bXf
bUQ
cbe
-ccP
+rjr
ceH
cgu
cij
@@ -171166,7 +171212,7 @@ blS
baQ
boV
bra
-bsU
+fiK
bus
bvM
bwZ
@@ -172449,7 +172495,7 @@ bio
bjZ
blW
aig
-aiC
+lDl
aig
aad
but
@@ -172706,7 +172752,7 @@ bip
bka
baQ
aig
-apw
+auv
aig
aaa
but
@@ -172962,7 +173008,7 @@ bgP
biq
bjZ
blX
-aig
+jOB
bpa
aig
aaa
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 9e6259c1fe..1be18fdfeb 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -28355,6 +28355,7 @@
/obj/structure/disposalpipe/segment{
dir = 6
},
+/obj/machinery/vending/wardrobe/cap_wardrobe,
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain/private)
"bdL" = (
@@ -29753,16 +29754,16 @@
/obj/item/clothing/under/rank/security/navyblue,
/obj/item/clothing/under/rank/security/navyblue,
/obj/item/clothing/under/rank/security/navyblue,
-/obj/item/clothing/suit/security/officer,
-/obj/item/clothing/suit/security/officer,
-/obj/item/clothing/suit/security/officer,
-/obj/item/clothing/suit/security/officer,
-/obj/item/clothing/suit/security/officer,
-/obj/item/clothing/suit/security/officer,
+/obj/item/clothing/suit/armor/navyblue,
+/obj/item/clothing/suit/armor/navyblue,
+/obj/item/clothing/suit/armor/navyblue,
+/obj/item/clothing/suit/armor/navyblue,
+/obj/item/clothing/suit/armor/navyblue,
+/obj/item/clothing/suit/armor/navyblue,
/obj/item/clothing/under/rank/warden/navyblue,
-/obj/item/clothing/suit/security/warden,
+/obj/item/clothing/suit/armor/vest/warden/navyblue,
/obj/item/clothing/under/rank/head_of_security/navyblue,
-/obj/item/clothing/suit/security/hos,
+/obj/item/clothing/suit/armor/hos/navyblue,
/obj/item/clothing/head/beret/sec/navyofficer,
/obj/item/clothing/head/beret/sec/navyofficer,
/obj/item/clothing/head/beret/sec/navyofficer,
@@ -81645,6 +81646,19 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
+"eQf" = (
+/obj/machinery/computer/shuttle/mining/common{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/hallway/primary/port)
"eZe" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -98511,7 +98525,7 @@ bgA
biz
bkb
blZ
-bnM
+eQf
bqf
bqf
bqf
diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm
index d4b09ac046..72f68910f7 100644
--- a/_maps/map_files/Mining/Lavaland.dmm
+++ b/_maps/map_files/Mining/Lavaland.dmm
@@ -75,7 +75,7 @@
/turf/closed/mineral/random/labormineral/volcanic,
/area/lavaland/surface/outdoors)
"aA" = (
-/turf/template_noop,
+/turf/open/lava/smooth/lava_land_surface,
/area/template_noop)
"cu" = (
/obj/item/pickaxe,
@@ -1181,7 +1181,7 @@
/area/lavaland/surface/outdoors)
"ol" = (
/obj/effect/landmark/stationroom/lavaland/station,
-/turf/template_noop,
+/turf/open/lava/smooth/lava_land_surface,
/area/template_noop)
"Uq" = (
/obj/docking_port/stationary{
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index c3e7ba0890..b34da30300 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -2564,7 +2564,7 @@
"aij" = (
/obj/structure/closet/secure_closet/contraband/armory,
/obj/item/poster/random_contraband,
-/obj/item/clothing/suit/security/officer/russian,
+/obj/item/clothing/suit/armor/navyblue/russian,
/obj/item/grenade/plastic/c4,
/turf/open/floor/plasteel/dark,
/area/security/armory)
@@ -9830,6 +9830,7 @@
/obj/structure/cable{
icon_state = "0-2"
},
+/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"axT" = (
@@ -11162,10 +11163,7 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -24
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-20";
- pixel_y = 3
- },
+/obj/machinery/vending/wardrobe/cap_wardrobe,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/captain)
"aBl" = (
@@ -28097,11 +28095,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
-"boY" = (
-/obj/effect/turf_decal/bot,
-/obj/effect/landmark/start/cyborg,
-/turf/open/floor/plasteel,
-/area/science/robotics/lab)
"boZ" = (
/obj/structure/table,
/obj/machinery/cell_charger,
@@ -98811,8 +98804,8 @@ beI
bkt
blH
bmO
-boY
-boY
+bnQ
+bnQ
bqi
bry
bsZ
@@ -99068,8 +99061,8 @@ bju
bkt
blI
bmO
-boY
-boY
+bnQ
+bnQ
bqi
brz
bta
diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm
index 1c8670d5b6..c002e66d53 100644
--- a/_maps/shuttles/pirate_default.dmm
+++ b/_maps/shuttles/pirate_default.dmm
@@ -89,7 +89,7 @@
/turf/open/floor/pod/dark,
/area/shuttle/pirate)
"aj" = (
-/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
/area/shuttle/pirate)
"ak" = (
/obj/machinery/airalarm/all_access{
@@ -419,6 +419,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
+/obj/structure/fans/tiny,
/turf/open/floor/plating,
/area/shuttle/pirate)
"aK" = (
@@ -463,21 +464,19 @@
/turf/open/floor/plating,
/area/shuttle/pirate)
"aQ" = (
-/obj/machinery/porta_turret/syndicate/energy{
+/obj/machinery/porta_turret/syndicate/energy/pirate{
dir = 1;
faction = list("pirate");
- icon_state = "standard_lethal";
- mode = 1
+ icon_state = "standard_lethal"
},
-/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
/area/shuttle/pirate)
"aR" = (
-/obj/machinery/porta_turret/syndicate/energy{
+/obj/machinery/porta_turret/syndicate/energy/pirate{
faction = list("pirate");
- icon_state = "standard_lethal";
- mode = 1
+ icon_state = "standard_lethal"
},
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate/pirate,
/area/shuttle/pirate)
"aS" = (
/obj/effect/turf_decal/stripes/line,
@@ -486,7 +485,7 @@
/area/shuttle/pirate)
"aU" = (
/obj/structure/sign/departments/engineering,
-/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
/area/shuttle/pirate)
"aV" = (
/obj/effect/mob_spawn/human/pirate{
@@ -867,37 +866,36 @@
dir = 1
},
/obj/docking_port/mobile/pirate{
- callTime = 100;
- dheight = 0;
- dir = 1;
dwidth = 11;
height = 16;
- id = "pirateship";
launch_status = 0;
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
name = "Pirate Ship";
port_direction = 2;
- preferred_direction = 1;
width = 17
},
/obj/docking_port/stationary{
- dir = 1;
dwidth = 11;
height = 16;
id = "pirateship_home";
name = "Deep Space";
width = 17
},
+/obj/structure/fans/tiny,
/turf/open/floor/plating,
/area/shuttle/pirate)
+"db" = (
+/obj/structure/shuttle/engine/heater,
+/obj/effect/spawner/structure/window/plastitanium/pirate,
+/turf/open/floor/plating/airless,
+/area/shuttle/pirate)
"df" = (
-/obj/machinery/porta_turret/syndicate/energy{
+/obj/machinery/porta_turret/syndicate/energy/pirate{
dir = 4;
faction = list("pirate");
- icon_state = "standard_lethal";
- mode = 1
+ icon_state = "standard_lethal"
},
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate/pirate,
/area/shuttle/pirate)
"dy" = (
/obj/structure/chair/wood/normal,
@@ -988,7 +986,7 @@
id = "piratebridge"
},
/obj/structure/grille,
-/obj/structure/window/plastitanium,
+/obj/structure/window/plastitanium/pirate,
/turf/open/floor/plating,
/area/shuttle/pirate)
"ez" = (
@@ -1016,7 +1014,7 @@
/turf/open/floor/plasteel,
/area/shuttle/pirate)
"fW" = (
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate/pirate,
/area/shuttle/pirate)
"fY" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -1084,13 +1082,12 @@
/turf/open/floor/plasteel/showroomfloor,
/area/shuttle/pirate)
"wR" = (
-/obj/machinery/porta_turret/syndicate/energy{
+/obj/machinery/porta_turret/syndicate/energy/pirate{
dir = 8;
faction = list("pirate");
- icon_state = "standard_lethal";
- mode = 1
+ icon_state = "standard_lethal"
},
-/turf/closed/wall/mineral/plastitanium,
+/turf/closed/wall/r_wall/syndicate/pirate,
/area/shuttle/pirate)
"yi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -1326,7 +1323,7 @@ aU
be
aD
aG
-ep
+db
aH
"}
(9,1,1) = {"
@@ -1344,7 +1341,7 @@ mU
aL
bP
bX
-ep
+db
aK
"}
(10,1,1) = {"
@@ -1362,7 +1359,7 @@ aj
bO
bQ
bk
-ep
+db
er
"}
(11,1,1) = {"
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index e69a1b8e96..e83f7c4c2c 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -154,8 +154,8 @@
////organ defines
#define STANDARD_ORGAN_THRESHOLD 100
-#define STANDARD_ORGAN_HEALING 0.001
-#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes
+#define STANDARD_ORGAN_HEALING (1/(15 MINUTES / (2 SECONDS)))
+#define STANDARD_ORGAN_DECAY (1/(15 MINUTES / (2 SECONDS))) //designed to fail organs when left to decay for ~15 minutes. 2 SECOND is SSmobs tickrate.
//used for the can_chromosome var on mutations
diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm
index fe48edd266..65be8258a1 100644
--- a/code/__DEFINES/MC.dm
+++ b/code/__DEFINES/MC.dm
@@ -20,7 +20,7 @@
#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
#define START_PROCESSING(Processor, Datum) if (!(Datum.datum_flags & DF_ISPROCESSING)) {Datum.datum_flags |= DF_ISPROCESSING;Processor.processing += Datum}
-#define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum
+#define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum;Processor.currentrun -= Datum
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index 2b19610040..56d5c63833 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -34,6 +34,7 @@
#define CAN_MASTURBATE_WITH (1<<5)
#define MASTURBATE_LINKED_ORGAN (1<<6) //used to pass our mission to the linked organ
#define CAN_CLIMAX_WITH (1<<7)
+#define GENITAL_CAN_AROUSE (1<<8)
#define COCK_SIZE_MIN 1
#define COCK_SIZE_MAX 20
diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index 0d2e88042d..c4c9d815a0 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -106,6 +106,9 @@
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user)
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
+ #define COMPONENT_ALLOW_EXAMINATE 1
+ #define COMPONENT_DENY_EXAMINATE 2 //Higher priority compared to the above one
+
#define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob)
#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob)
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob)
@@ -159,7 +162,6 @@
// /mob signals
#define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A)
- #define COMPONENT_ALLOW_EXAMINE 1
#define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed)
#define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat.
#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize)
@@ -185,10 +187,10 @@
#define SPEECH_MESSAGE 1
// #define SPEECH_BUBBLE_TYPE 2
#define SPEECH_SPANS 3
- /* #define SPEECH_SANITIZE 4
+// #define SPEECH_SANITIZE 4
#define SPEECH_LANGUAGE 5
- #define SPEECH_IGNORE_SPAM 6
- #define SPEECH_FORCED 7 */
+// #define SPEECH_IGNORE_SPAM 6
+// #define SPEECH_FORCED 7
// /mob/living signals
#define COMSIG_LIVING_FULLY_HEAL "living_fully_healed" //from base of /mob/living/fully_heal(): (admin_revive)
diff --git a/code/__DEFINES/dynamic.dm b/code/__DEFINES/dynamic.dm
index 45c1ba9cb2..0d57961f48 100644
--- a/code/__DEFINES/dynamic.dm
+++ b/code/__DEFINES/dynamic.dm
@@ -5,6 +5,7 @@
#define NO_ASSASSIN (1<<0)
#define WAROPS_ALWAYS_ALLOWED (1<<1)
+#define USE_PREF_WEIGHTS (1<<2)
#define ONLY_RULESET (1<<0)
#define HIGHLANDER_RULESET (1<<1)
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index a7d2670747..317066f673 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -56,11 +56,12 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
//Movement Types
-#define GROUND (1<<0)
-#define FLYING (1<<1)
-#define VENTCRAWLING (1<<2)
-#define FLOATING (1<<3)
-#define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
+#define GROUND (1<<0)
+#define FLYING (1<<1)
+#define VENTCRAWLING (1<<2)
+#define FLOATING (1<<3)
+#define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
+#define CRAWLING (1<<5) //Applied if you're crawling around on the ground/resting.
//Fire and Acid stuff, for resistance_flags
#define LAVA_PROOF (1<<0)
diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm
index ad93dd2d54..939f6698cb 100644
--- a/code/__DEFINES/maths.dm
+++ b/code/__DEFINES/maths.dm
@@ -199,4 +199,6 @@
#define LORENTZ_CUMULATIVE_DISTRIBUTION(x, y, s) ( (1/PI)*TORADIANS(arctan((x-y)/s)) + 1/2 )
#define RULE_OF_THREE(a, b, x) ((a*x)/b)
-// )
\ No newline at end of file
+// )
+
+#define MANHATTAN_DISTANCE(a, b) (abs(a.x - b.x) + abs(a.y - b.y))
\ No newline at end of file
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index a7d6056ab9..1b437f2a71 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -35,17 +35,17 @@
#define BLOODCRAWL 1
#define BLOODCRAWL_EAT 2
-//Mob bio-types
-#define MOB_ORGANIC "organic"
-#define MOB_INORGANIC "inorganic"
-#define MOB_ROBOTIC "robotic"
-#define MOB_UNDEAD "undead"
-#define MOB_HUMANOID "humanoid"
-#define MOB_BUG "bug"
-#define MOB_BEAST "beast"
-#define MOB_EPIC "epic" //megafauna
-#define MOB_REPTILE "reptile"
-#define MOB_SPIRIT "spirit"
+//Mob bio-types flags
+#define MOB_ORGANIC 1 << 0
+#define MOB_MINERAL 1 << 1
+#define MOB_ROBOTIC 1 << 2
+#define MOB_UNDEAD 1 << 3
+#define MOB_HUMANOID 1 << 4
+#define MOB_BUG 1 << 5
+#define MOB_BEAST 1 << 6
+#define MOB_EPIC 1 << 7 //megafauna
+#define MOB_REPTILE 1 << 8
+#define MOB_SPIRIT 1 << 9
//Organ defines for carbon mobs
#define ORGAN_ORGANIC 1
diff --git a/code/__DEFINES/profile.dm b/code/__DEFINES/profile.dm
index 28fc7782ce..8929e0f05e 100644
--- a/code/__DEFINES/profile.dm
+++ b/code/__DEFINES/profile.dm
@@ -1,5 +1,5 @@
-#define PROFILE_START ;PROFILE_STORE = list();PROFILE_SET;
-#define PROFILE_STOP ;PROFILE_STORE = null;
+#define LINE_PROFILE_START ;PROFILE_STORE = list();PROFILE_SET;
+#define LINE_PROFILE_STOP ;PROFILE_STORE = null;
#define PROFILE_SET ;PROFILE_TIME = TICK_USAGE_REAL; PROFILE_LINE = __LINE__; PROFILE_FILE = __FILE__; PROFILE_SLEEPCHECK = world.time;
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index 54f4648006..d08344cc96 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -40,6 +40,8 @@
#define ADD_REAGENT 2 // reagent added
#define REM_REAGENT 3 // reagent removed (may still exist)
+#define THRESHOLD_UNHUSK 50 // health threshold for synthflesh/rezadone to unhusk someone
+
//reagent bitflags, used for altering how they works
#define REAGENT_DEAD_PROCESS (1<<0) //calls on_mob_dead() if present in a dead body
#define REAGENT_DONOTSPLIT (1<<1) //Do not split the chem at all during processing
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index 28a04c2a51..7fabb74157 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -38,6 +38,7 @@
#define ROLE_BLOODSUCKER "bloodsucker"
//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now
#define ROLE_GHOSTCAFE "ghostcafe"
+#define ROLE_MINOR_ANTAG "minorantag"
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
//(in game days played) to play that role
diff --git a/code/__DEFINES/spaceman_dmm.dm b/code/__DEFINES/spaceman_dmm.dm
index e590a30ff9..b9c0544bc1 100644
--- a/code/__DEFINES/spaceman_dmm.dm
+++ b/code/__DEFINES/spaceman_dmm.dm
@@ -11,3 +11,8 @@
#define SHOULD_CALL_PARENT(X)
#define UNLINT(X) X
#endif
+
+/world/proc/enable_debugger()
+ var/dll = world.GetConfig("env", "EXTOOLS_DLL")
+ if (dll)
+ call(dll, "debug_initialize")()
diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index c107bc32df..c5bc4c179a 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -46,7 +46,9 @@
#define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep
-#define STATUS_EFFECT_TASED /datum/status_effect/no_combat_mode/electrode/ //the affected has been tased, preventing fine muscle control
+#define STATUS_EFFECT_TASED_WEAK /datum/status_effect/electrode //not as crippling, just slows down
+
+#define STATUS_EFFECT_TASED /datum/status_effect/electrode/no_combat_mode //the affected has been tased, preventing fine muscle control
#define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 5c54843df2..162c898917 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -47,6 +47,7 @@
// Subsystems shutdown in the reverse of the order they initialize in
// The numbers just define the ordering, they are meaningless otherwise.
+#define INIT_ORDER_PROFILER 101
#define INIT_ORDER_FAIL2TOPIC 22
#define INIT_ORDER_TITLE 20
#define INIT_ORDER_GARBAGE 19
diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm
index a40b5d4663..9f4f63a1fc 100644
--- a/code/__DEFINES/tgs.config.dm
+++ b/code/__DEFINES/tgs.config.dm
@@ -1,4 +1,5 @@
#define TGS_EXTERNAL_CONFIGURATION
+#define TGS_V3_API
#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
#define TGS_READ_GLOBAL(Name) GLOB.##Name
#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index db4f046ec3..dcccfc9295 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -107,6 +107,22 @@
var/commit //full sha of compiled commit
var/origin_commit //full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch
+//represents a version of tgstation-server
+/datum/tgs_version
+ var/suite //The suite version, can be >=3
+
+ //this group of variables can be null to represent a wild card
+ var/major //The major version
+ var/minor //The minor version
+ var/patch //The patch version
+
+ var/raw_parameter //The unparsed parameter
+ var/deprefixed_parameter //The version only bit of raw_parameter
+
+//if the tgs_version is a wildcard version
+/datum/tgs_version/proc/Wildcard()
+ return
+
//represents a merge of a GitHub pull request
/datum/tgs_revision_information/test_merge
var/number //pull request number
@@ -155,22 +171,22 @@
//FUNCTIONS
-//Returns the respective string version of the API
+//Returns the respective supported /datum/tgs_version of the API
/world/proc/TgsMaximumAPIVersion()
return
/world/proc/TgsMinimumAPIVersion()
return
-//Gets the current version of the server tools running the server
-/world/proc/TgsVersion()
- return
-
//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise
//No function below this succeeds if it returns FALSE
/world/proc/TgsAvailable()
return
+//Gets the current /datum/tgs_version of the server tools running the server
+/world/proc/TgsVersion()
+ return
+
/world/proc/TgsInstanceName()
return
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index ff2aeeea8a..b3ddd7185b 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -110,6 +110,7 @@
#define TRAIT_NOHARDCRIT "nohardcrit"
#define TRAIT_NOSOFTCRIT "nosoftcrit"
#define TRAIT_MINDSHIELD "mindshield"
+#define TRAIT_HIJACKER "hijacker"
#define TRAIT_SIXTHSENSE "sixthsense"
#define TRAIT_DISSECTED "dissected"
#define TRAIT_FEARLESS "fearless"
@@ -235,9 +236,9 @@
#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 TIMESTOP_TRAIT "timestop"
#define NUKEOP_TRAIT "nuke-op"
+#define CLOWNOP_TRAIT "clown-op"
#define MEGAFAUNA_TRAIT "megafauna"
#define DEATHSQUAD_TRAIT "deathsquad"
diff --git a/code/__DEFINES/vote.dm b/code/__DEFINES/vote.dm
index 8fb2e6deab..12e802383e 100644
--- a/code/__DEFINES/vote.dm
+++ b/code/__DEFINES/vote.dm
@@ -1,6 +1,17 @@
#define PLURALITY_VOTING 0
#define APPROVAL_VOTING 1
-#define RANKED_CHOICE_VOTING 2
+#define SCHULZE_VOTING 2
#define SCORE_VOTING 3
+#define MAJORITY_JUDGEMENT_VOTING 4
+#define INSTANT_RUNOFF_VOTING 5
GLOBAL_LIST_INIT(vote_score_options,list("Bad","Poor","Acceptable","Good","Great"))
+
+GLOBAL_LIST_INIT(vote_type_names,list(\
+"Plurality (default)" = PLURALITY_VOTING,\
+"Approval" = APPROVAL_VOTING,\
+"IRV (single winner ranked choice)" = INSTANT_RUNOFF_VOTING,\
+"Schulze (ranked choice, higher result=better)" = SCHULZE_VOTING,\
+"Raw Score (returns results from 0 to 1, winner is 1)" = SCORE_VOTING,\
+"Majority Judgement (single-winner score voting)" = MAJORITY_JUDGEMENT_VOTING,\
+))
diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm
index c0acf4c5a5..1bde770045 100644
--- a/code/__HELPERS/_cit_helpers.dm
+++ b/code/__HELPERS/_cit_helpers.dm
@@ -57,14 +57,11 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
//Genitals and Arousal Lists
GLOBAL_LIST_EMPTY(genitals_list)
-GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm
-GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes.
+GLOBAL_LIST_EMPTY(cock_shapes_list)
GLOBAL_LIST_EMPTY(gentlemans_organ_names)
GLOBAL_LIST_EMPTY(balls_shapes_list)
-GLOBAL_LIST_EMPTY(balls_shapes_icons)
GLOBAL_LIST_EMPTY(breasts_size_list)
GLOBAL_LIST_EMPTY(breasts_shapes_list)
-GLOBAL_LIST_EMPTY(breasts_shapes_icons)
GLOBAL_LIST_EMPTY(vagina_shapes_list)
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index ff9d1bec4c..7045767f98 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -51,26 +51,15 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/antenna, GLOB.ipc_antennas_list, roundstart = TRUE)
//genitals
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
- for(var/K in GLOB.cock_shapes_list)
- var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K]
- GLOB.cock_shapes_icons[K] = value.icon_state
-
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
GLOB.breasts_size_list = list ("a", "b", "c", "d", "e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ",
"cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret",
"baloney pony", "schlanger", "Mutton dagger", "old blind bob","Hanging Johnny", "fishing rod", "Tally whacker", "polly rocket",
"One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett",
"Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior")
- for(var/K in GLOB.breasts_shapes_list)
- var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K]
- GLOB.breasts_shapes_icons[K] = value.icon_state
-
- init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
- for(var/K in GLOB.balls_shapes_list)
- var/datum/sprite_accessory/testicles/value = GLOB.balls_shapes_list[K]
- GLOB.balls_shapes_icons[K] = value.icon_state
for(var/gpath in subtypesof(/obj/item/organ/genital))
var/obj/item/organ/genital/G = gpath
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 339069a364..1669c941c2 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -179,7 +179,6 @@
"balls_cum_rate" = CUM_RATE,
"balls_cum_mult" = CUM_RATE_MULT,
"balls_efficiency" = CUM_EFFICIENCY,
- "balls_fluid" = "semen",
"has_ovi" = FALSE,
"ovi_shape" = "knotted",
"ovi_length" = 6,
@@ -194,7 +193,6 @@
"breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"breasts_size" = pick(GLOB.breasts_size_list),
"breasts_shape" = "Pair",
- "breasts_fluid" = "milk",
"breasts_producing" = FALSE,
"has_vag" = FALSE,
"vag_shape" = pick(GLOB.vagina_shapes_list),
@@ -206,7 +204,6 @@
"womb_cum_rate" = CUM_RATE,
"womb_cum_mult" = CUM_RATE_MULT,
"womb_efficiency" = CUM_EFFICIENCY,
- "womb_fluid" = "femcum",
"ipc_screen" = "Sunburst",
"ipc_antenna" = "None",
"flavor_text" = "",
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index 19ee2b2a5a..0f1e75ff73 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -3,6 +3,9 @@
#define POPCOUNT_SHUTTLE_ESCAPEES "shuttle_escapees" //Emergency shuttle only.
/datum/controller/subsystem/ticker/proc/gather_roundend_feedback()
+ var/datum/station_state/end_state = new /datum/station_state()
+ end_state.count()
+ station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
gather_antag_data()
record_nuke_disk_location()
var/json_file = file("[GLOB.log_directory]/round_end_data.json")
@@ -71,9 +74,6 @@
mob_data += list("name" = m.name, "typepath" = m.type)
var/pos = length(file_data["[escaped]"]["[category]"]) + 1
file_data["[escaped]"]["[category]"]["[pos]"] = mob_data
- var/datum/station_state/end_state = new /datum/station_state()
- end_state.count()
- var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
file_data["additional data"]["station integrity"] = station_integrity
WRITE_FILE(json_file, json_encode(file_data))
SSblackbox.record_feedback("nested tally", "round_end_stats", num_survivors, list("survivors", "total"))
@@ -111,7 +111,14 @@
if(A.objectives.len)
for(var/datum/objective/O in A.objectives)
- var/result = O.check_completion() ? "SUCCESS" : "FAIL"
+ var/result = "UNKNOWN"
+ var/actual_result = O.check_completion()
+ if(actual_result >= 1)
+ result = "SUCCESS"
+ else if(actual_result <= 0)
+ result = "FAIL"
+ else
+ result = "[actual_result*100]%"
antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result))
SSblackbox.record_feedback("associative", "antagonists", 1, antag_info)
@@ -139,19 +146,19 @@
var/list/file_data = list()
var/pos = 1
for(var/V in GLOB.news_network.network_channels)
- var/datum/newscaster/feed_channel/channel = V
+ var/datum/news/feed_channel/channel = V
if(!istype(channel))
stack_trace("Non-channel in newscaster channel list")
continue
file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list())
for(var/M in channel.messages)
- var/datum/newscaster/feed_message/message = M
+ var/datum/news/feed_message/message = M
if(!istype(message))
stack_trace("Non-message in newscaster channel messages list")
continue
var/list/comment_data = list()
for(var/C in message.comments)
- var/datum/newscaster/feed_comment/comment = C
+ var/datum/news/feed_comment/comment = C
if(!istype(comment))
stack_trace("Non-message in newscaster message comments list")
continue
@@ -550,10 +557,16 @@
var/list/objective_parts = list()
var/count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- objective_parts += "Objective #[count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ objective_parts += "Objective #[count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ objective_parts += "Objective #[count] : [objective.explanation_text] Fail. "
+ else
+ objective_parts += "Objective #[count] : [objective.explanation_text] [completion*100]% "
else
- objective_parts += "Objective #[count] : [objective.explanation_text] Fail. "
+ objective_parts += "Objective #[count] : [objective.explanation_text]"
count++
return objective_parts.Join(" ")
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 3985659b71..beb005b8d1 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -44,6 +44,12 @@
index = findtext(t, char, index + length(char))
return t
+/proc/sanitize_name(t,list/repl_chars = null)
+ if(t == "space" || t == "floor" || t == "wall" || t == "r-wall" || t == "monkey" || t == "unknown" || t == "inactive ai") //prevents these common metagamey names
+ alert("Invalid name.")
+ return ""
+ return sanitize(t)
+
/proc/sanitize_filename(t)
return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
@@ -775,4 +781,4 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
#define is_alpha(X) ((text2ascii(X) <= 122) && (text2ascii(X) >= 97))
-#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
\ No newline at end of file
+#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 86dde3d6a6..2cb088c654 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1537,4 +1537,31 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
if(190)
return "."
if(189)
- return "-"
\ No newline at end of file
+ return "-"
+
+/proc/generate_items_inside(list/items_list, where_to)
+ for(var/each_item in items_list)
+ for(var/i in 1 to items_list[each_item])
+ new each_item(where_to)
+
+//sends a message to chat
+//config_setting should be one of the following
+//null - noop
+//empty string - use TgsTargetBroadcast with admin_only = FALSE
+//other string - use TgsChatBroadcast with the tag that matches config_setting, only works with TGS4, if using TGS3 the above method is used
+/proc/send2chat(message, config_setting)
+ if(config_setting == null || !world.TgsAvailable())
+ return
+ var/datum/tgs_version/version = world.TgsVersion()
+ if(config_setting == "" || version.suite == 3)
+ world.TgsTargetedChatBroadcast(message, FALSE)
+ return
+
+ var/list/channels_to_use = list()
+ for(var/I in world.TgsChatChannelInfo())
+ var/datum/tgs_chat_channel/channel = I
+ if(channel.tag == config_setting)
+ channels_to_use += channel
+
+ if(channels_to_use.len)
+ world.TgsChatBroadcast()
\ No newline at end of file
diff --git a/code/__HELPERS/vector.dm b/code/__HELPERS/vector.dm
new file mode 100644
index 0000000000..80295bde0e
--- /dev/null
+++ b/code/__HELPERS/vector.dm
@@ -0,0 +1,57 @@
+// Basic geometry things.
+
+/datum/vector/
+ var/x = 0
+ var/y = 0
+
+/datum/vector/New(var/x, var/y)
+ src.x = x
+ src.y = y
+
+/datum/vector/proc/duplicate()
+ return new /datum/vector(x, y)
+
+/datum/vector/proc/euclidian_norm()
+ return sqrt(x*x + y*y)
+
+/datum/vector/proc/squared_norm()
+ return x*x + y*y
+
+/datum/vector/proc/normalize()
+ var/norm = euclidian_norm()
+ x = x/norm
+ y = y/norm
+ return src
+
+/datum/vector/proc/chebyshev_norm()
+ return max(abs(x), abs(y))
+
+/datum/vector/proc/chebyshev_normalize()
+ var/norm = chebyshev_norm()
+ x = x/norm
+ y = y/norm
+ return src
+
+/datum/vector/proc/is_integer()
+ return ISINTEGER(x) && ISINTEGER(y)
+
+/atom/movable/proc/vector_translate(var/datum/vector/V, var/delay)
+ var/turf/T = get_turf(src)
+ var/turf/destination = locate(T.x + V.x, T.y + V.y, z)
+ var/datum/vector/V_norm = V.duplicate()
+ V_norm.chebyshev_normalize()
+ if (!V_norm.is_integer())
+ return
+ var/turf/destination_temp
+ while (destination_temp != destination)
+ destination_temp = locate(T.x + V_norm.x, T.y + V_norm.y, z)
+ forceMove(destination_temp)
+ T = get_turf(src)
+ sleep(delay + world.tick_lag) // Shortest possible time to sleep
+
+/atom/proc/get_translated_turf(var/datum/vector/V)
+ var/turf/T = get_turf(src)
+ return locate(T.x + V.x, T.y + V.y, z)
+
+/proc/atoms2vector(var/atom/A, var/atom/B)
+ return new /datum/vector((B.x - A.x), (B.y - A.y)) // Vector from A -> B
\ No newline at end of file
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index c98faaa4fb..a0139dab83 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -214,5 +214,18 @@ GLOBAL_LIST_INIT(bitfields, list(
"CAN_MASTURBATE_WITH" = CAN_MASTURBATE_WITH,
"MASTURBATE_LINKED_ORGAN" = MASTURBATE_LINKED_ORGAN,
"CAN_CLIMAX_WITH" = CAN_CLIMAX_WITH
- )
- ))
\ No newline at end of file
+
+ ),
+ "mob_biotypes" = list (
+ "MOB_ORGANIC" = MOB_ORGANIC,
+ "MOB_MINERAL" = MOB_MINERAL,
+ "MOB_ROBOTIC" = MOB_ROBOTIC,
+ "MOB_UNDEAD" = MOB_UNDEAD,
+ "MOB_HUMANOID" = MOB_HUMANOID,
+ "MOB_BUG" = MOB_BUG,
+ "MOB_BEAST" = MOB_BEAST,
+ "MOB_EPIC" = MOB_EPIC,
+ "MOB_REPTILE" = MOB_REPTILE,
+ "MOB_SPIRIT" = MOB_SPIRIT
+ )
+ ))
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 9bf59d5e76..e8a57bb257 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -319,9 +319,11 @@
/mob/proc/ShiftClickOn(atom/A)
A.ShiftClick(src)
return
+
/atom/proc/ShiftClick(mob/user)
- SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user)
- user.examinate(src)
+ var/flags = SEND_SIGNAL(src, COMSIG_CLICK_SHIFT, user)
+ if(!(flags & COMPONENT_DENY_EXAMINATE) && user.client && (user.client.eye == user || user.client.eye == user.loc || flags & COMPONENT_ALLOW_EXAMINATE))
+ user.examinate(src)
return
/*
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index cda19dbaac..3f11c8a2f2 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -1,19 +1,22 @@
-
+/**
+ *This is the proc that handles the order of an item_attack.
+ *The order of procs called is:
+ *tool_act on the target. If it returns TRUE, the chain will be stopped.
+ *pre_attack() on src. If this returns TRUE, the chain will be stopped.
+ *attackby on the target. If it returns TRUE, the chain will be stopped.
+ *and lastly
+ *afterattack. The return value does not matter.
+ */
/obj/item/proc/melee_attack_chain(mob/user, atom/target, params)
- if(!tool_attack_chain(user, target) && pre_attack(target, user, params))
- // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
- var/resolved = target.attackby(src, user, params)
- if(!resolved && target && !QDELETED(src))
- afterattack(target, user, 1, params) // 1: clicking something Adjacent
-
-
-//Checks if the item can work as a tool, calling the appropriate tool behavior on the target
-/obj/item/proc/tool_attack_chain(mob/user, atom/target)
- if(!tool_behaviour)
- return FALSE
-
- return target.tool_act(user, src, tool_behaviour)
-
+ if(tool_behaviour && target.tool_act(user, src, tool_behaviour))
+ return
+ if(pre_attack(target, user, params))
+ return
+ if(target.attackby(src,user, params))
+ return
+ if(QDELETED(src) || QDELETED(target))
+ return
+ afterattack(target, user, TRUE, params)
// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
/obj/item/proc/attack_self(mob/user)
@@ -23,8 +26,8 @@
/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby!
if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK)
- return FALSE
- return TRUE //return FALSE to avoid calling attackby after this proc does stuff
+ return TRUE
+ return FALSE //return TRUE to avoid calling attackby after this proc does stuff
// No comment
/atom/proc/attackby(obj/item/W, mob/user, params)
@@ -112,7 +115,7 @@
send_item_attack_message(I, user)
if(I.force)
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
- if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW))
+ if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW))
if(prob(33))
I.add_mob_blood(src)
var/turf/location = get_turf(src)
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index 79d125f608..974a0c0e88 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -364,6 +364,29 @@
runnable_modes[M] = final_weight
return runnable_modes
+/datum/controller/configuration/proc/get_runnable_storytellers()
+ var/list/datum/dynamic_storyteller/runnable_storytellers = new
+ var/list/probabilities = Get(/datum/config_entry/keyed_list/storyteller_weight)
+ var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust)
+ for(var/T in storyteller_cache)
+ var/datum/dynamic_storyteller/S = T
+ var/config_tag = initial(S.config_tag)
+ var/final_weight = initial(S.weight)
+ if(probabilities[config_tag]<=0)
+ continue
+ final_weight = probabilities[config_tag]
+ if(SSpersistence.saved_storytellers.len == 3 && repeated_mode_adjust.len == 3)
+ var/name = initial(S.name)
+ var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3)
+ var/adjustment = 0
+ while(recent_round)
+ adjustment += repeated_mode_adjust[recent_round]
+ recent_round = SSpersistence.saved_modes.Find(name,recent_round+1,0)
+ final_weight *= ((100-adjustment)/100)
+ runnable_storytellers[S] = final_weight
+ return runnable_storytellers
+
+
/datum/controller/configuration/proc/get_runnable_midround_modes(crew)
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/dynamic.dm b/code/controllers/configuration/entries/dynamic.dm
index 7f3e16d57e..4c03de4678 100644
--- a/code/controllers/configuration/entries/dynamic.dm
+++ b/code/controllers/configuration/entries/dynamic.dm
@@ -88,3 +88,7 @@
/datum/config_entry/number/dynamic_warops_cost
config_entry_value = 10
min_val = 0
+
+/datum/config_entry/keyed_list/storyteller_weight
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index c3ae90cc1b..cb8c0fe966 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -1,3 +1,5 @@
+/datum/config_entry/flag/auto_profile // Automatically start profiler on server start
+
/datum/config_entry/flag/autoadmin // if autoadmin is enabled
protection = CONFIG_ENTRY_LOCKED
@@ -267,6 +269,9 @@
/datum/config_entry/flag/tgstyle_maprotation
+/datum/config_entry/string/map_vote_type
+ config_entry_value = "SCORE"
+
/datum/config_entry/number/maprotatechancedelta
config_entry_value = 0.75
min_val = 0
@@ -389,6 +394,13 @@
config_entry_value = 50
/datum/config_entry/flag/irc_announce_new_game
+ deprecated_by = /datum/config_entry/string/chat_announce_new_game
+
+/datum/config_entry/flag/irc_announce_new_game/DeprecationUpdate(value)
+ return "" //default broadcast
+
+/datum/config_entry/string/chat_announce_new_game
+ config_entry_value = null
/datum/config_entry/flag/debug_admin_hrefs
diff --git a/code/controllers/configuration/entries/plushies.dm b/code/controllers/configuration/entries/plushies.dm
new file mode 100644
index 0000000000..20ad02d399
--- /dev/null
+++ b/code/controllers/configuration/entries/plushies.dm
@@ -0,0 +1,6 @@
+/datum/config_entry/number/snowflake_plushie_prob
+ config_entry_value = 50
+
+/datum/config_entry/keyed_list/snowflake_plushies
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_TEXT
diff --git a/code/controllers/subsystem/fail2topic.dm b/code/controllers/subsystem/fail2topic.dm
index b358cc2c5f..02e7bc7aab 100644
--- a/code/controllers/subsystem/fail2topic.dm
+++ b/code/controllers/subsystem/fail2topic.dm
@@ -31,15 +31,18 @@ SUBSYSTEM_DEF(fail2topic)
return ..()
/datum/controller/subsystem/fail2topic/fire()
- for(var/i in 1 to length(rate_limiting))
- var/ip = rate_limiting[i]
- var/last_attempt = rate_limiting[ip]
- if (world.time - last_attempt > rate_limit)
- rate_limiting -= ip
- fail_counts -= ip
-
- if (MC_TICK_CHECK)
- return
+ if(length(rate_limiting))
+ var/i = 1
+ while(i <= length(rate_limiting))
+ var/ip = rate_limiting[i]
+ var/last_attempt = rate_limiting[ip]
+ if(world.time - last_attempt > rate_limit)
+ rate_limiting -= ip
+ fail_counts -= ip
+ else //if we remove that, and the next element is in its place. check that instead of incrementing.
+ ++i
+ if(MC_TICK_CHECK)
+ return
/datum/controller/subsystem/fail2topic/Shutdown()
DropFirewallRule()
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 2825f4343b..de2ff17a97 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -13,7 +13,7 @@ SUBSYSTEM_DEF(persistence)
var/list/saved_messages = list()
var/list/saved_modes = list(1,2,3)
var/list/saved_dynamic_rules = list(list(),list(),list())
- var/list/saved_storytellers = list("foo","bar","baz","foo again","bar again")
+ var/list/saved_storytellers = list("foo","bar","baz")
var/list/saved_maps
var/list/saved_trophies = list()
var/list/spawned_objects = list()
@@ -191,6 +191,7 @@ SUBSYSTEM_DEF(persistence)
if(!json)
return
saved_storytellers = json["data"]
+ saved_storytellers.len = 3
/datum/controller/subsystem/persistence/proc/LoadRecentMaps()
var/json_file = file("data/RecentMaps.json")
@@ -265,7 +266,8 @@ SUBSYSTEM_DEF(persistence)
/datum/controller/subsystem/persistence/proc/LoadPanicBunker()
var/bunker_path = file("data/bunker_passthrough.json")
if(fexists(bunker_path))
- GLOB.bunker_passthrough = json_decode(file2text(bunker_path))
+ var/list/json = json_decode(file2text(bunker_path))
+ GLOB.bunker_passthrough = json["data"]
for(var/ckey in GLOB.bunker_passthrough)
if(daysSince(GLOB.bunker_passthrough[ckey]) >= CONFIG_GET(number/max_bunker_days))
GLOB.bunker_passthrough -= ckey
@@ -428,9 +430,7 @@ SUBSYSTEM_DEF(persistence)
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.len = 3
saved_storytellers[3] = saved_storytellers[2]
saved_storytellers[2] = saved_storytellers[1]
saved_storytellers[1] = mode.storyteller.name
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index a52bcf4607..10655981e5 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(my_quirks, job)
+ cut = filter_quirks(my_quirks, job.blacklisted_quirks)
for(var/V in my_quirks)
var/datum/quirk/Q = quirks[V]
if(Q)
@@ -63,11 +63,11 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
for(var/i in quirk_names)
. += quirk_points_by_name(i)
-/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, datum/job/job)
+/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, list/blacklisted_quirks)
var/list/cut = list()
var/list/banned_names = list()
var/pointscut = 0
- for(var/i in job.blacklisted_quirks)
+ for(var/i in blacklisted_quirks)
var/name = quirk_name_by_path(i)
if(name)
banned_names += name
diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/processing/weather.dm
similarity index 77%
rename from code/controllers/subsystem/weather.dm
rename to code/controllers/subsystem/processing/weather.dm
index 5e44f2e4c3..0a1b4fc609 100644
--- a/code/controllers/subsystem/weather.dm
+++ b/code/controllers/subsystem/processing/weather.dm
@@ -4,25 +4,16 @@
#define END_STAGE 4
//Used for all kinds of weather, ex. lavaland ash storms.
-SUBSYSTEM_DEF(weather)
+PROCESSING_SUBSYSTEM_DEF(weather)
name = "Weather"
flags = SS_BACKGROUND
wait = 10
runlevels = RUNLEVEL_GAME
- var/list/processing = list()
var/list/eligible_zlevels = list()
var/list/next_hit_by_zlevel = list() //Used by barometers to know when the next storm is coming
-/datum/controller/subsystem/weather/fire()
- // process active weather
- for(var/V in processing)
- var/datum/weather/W = V
- if(W.aesthetic || W.stage != MAIN_STAGE)
- continue
- for(var/i in GLOB.mob_living_list)
- var/mob/living/L = i
- if(W.can_weather_act(L))
- W.weather_act(L)
+/datum/controller/subsystem/processing/weather/fire()
+ . = ..() //Active weather is handled by . = ..() processing subsystem base fire().
// start random weather on relevant levels
for(var/z in eligible_zlevels)
@@ -34,7 +25,7 @@ SUBSYSTEM_DEF(weather)
addtimer(CALLBACK(src, .proc/make_eligible, z, possible_weather), randTime + initial(W.weather_duration_upper), TIMER_UNIQUE) //Around 5-10 minutes between weathers
next_hit_by_zlevel["[z]"] = world.time + randTime + initial(W.telegraph_duration)
-/datum/controller/subsystem/weather/Initialize(start_timeofday)
+/datum/controller/subsystem/processing/weather/Initialize(start_timeofday)
for(var/V in subtypesof(/datum/weather))
var/datum/weather/W = V
var/probability = initial(W.probability)
@@ -47,7 +38,7 @@ SUBSYSTEM_DEF(weather)
eligible_zlevels["[z]"][W] = probability
return ..()
-/datum/controller/subsystem/weather/proc/run_weather(datum/weather/weather_datum_type, z_levels)
+/datum/controller/subsystem/processing/weather/proc/run_weather(datum/weather/weather_datum_type, z_levels)
if (istext(weather_datum_type))
for (var/V in subtypesof(/datum/weather))
var/datum/weather/W = V
@@ -69,11 +60,11 @@ SUBSYSTEM_DEF(weather)
var/datum/weather/W = new weather_datum_type(z_levels)
W.telegraph()
-/datum/controller/subsystem/weather/proc/make_eligible(z, possible_weather)
+/datum/controller/subsystem/processing/weather/proc/make_eligible(z, possible_weather)
eligible_zlevels[z] = possible_weather
next_hit_by_zlevel["[z]"] = null
-/datum/controller/subsystem/weather/proc/get_weather(z, area/active_area)
+/datum/controller/subsystem/processing/weather/proc/get_weather(z, area/active_area)
var/datum/weather/A
for(var/V in processing)
var/datum/weather/W = V
diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm
new file mode 100644
index 0000000000..ec8b243073
--- /dev/null
+++ b/code/controllers/subsystem/profiler.dm
@@ -0,0 +1,63 @@
+#define PROFILER_FILENAME "profiler.json"
+
+SUBSYSTEM_DEF(profiler)
+ name = "Profiler"
+ init_order = INIT_ORDER_PROFILER
+ runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
+ wait = 3000
+ flags = SS_NO_TICK_CHECK
+ var/fetch_cost = 0
+ var/write_cost = 0
+
+/datum/controller/subsystem/profiler/stat_entry(msg)
+ msg += "F:[round(fetch_cost,1)]ms"
+ msg += "|W:[round(write_cost,1)]ms"
+ ..(msg)
+
+/datum/controller/subsystem/profiler/Initialize()
+ if(CONFIG_GET(flag/auto_profile))
+ StartProfiling()
+ else
+ StopProfiling() //Stop the early start from world/New
+ return ..()
+
+/datum/controller/subsystem/profiler/fire()
+ if(CONFIG_GET(flag/auto_profile))
+ DumpFile()
+
+/datum/controller/subsystem/profiler/Shutdown()
+ if(CONFIG_GET(flag/auto_profile))
+ DumpFile()
+ return ..()
+
+/datum/controller/subsystem/profiler/proc/StartProfiling()
+#if DM_BUILD < 1506 || DM_VERSION < 513
+ stack_trace("Auto profiling unsupported on this byond version")
+ CONFIG_SET(flag/auto_profile, FALSE)
+#else
+ world.Profile(PROFILE_START)
+#endif
+
+/datum/controller/subsystem/profiler/proc/StopProfiling()
+#if DM_BUILD >= 1506 && DM_VERSION >= 513
+ world.Profile(PROFILE_STOP)
+#endif
+
+/datum/controller/subsystem/profiler/proc/DumpFile()
+#if DM_BUILD < 1506 || DM_VERSION < 513
+ stack_trace("Auto profiling unsupported on this byond version")
+ CONFIG_SET(flag/auto_profile, FALSE)
+#else
+ var/timer = TICK_USAGE_REAL
+ var/current_profile_data = world.Profile(PROFILE_REFRESH,format="json")
+ fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
+ CHECK_TICK
+ if(!length(current_profile_data)) //Would be nice to have explicit proc to check this
+ stack_trace("Warning, profiling stopped manually before dump.")
+ var/json_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]")
+ if(fexists(json_file))
+ fdel(json_file)
+ timer = TICK_USAGE_REAL
+ WRITE_FILE(json_file, current_profile_data)
+ write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
+#endif
diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm
index 9e926b29a1..b77c78c4bb 100644
--- a/code/controllers/subsystem/server_maint.dm
+++ b/code/controllers/subsystem/server_maint.dm
@@ -81,8 +81,8 @@ SUBSYSTEM_DEF(server_maint)
co.ehjax_send(data = "roundrestart")
if(server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
C << link("byond://[server]")
- var/tgsversion = world.TgsVersion()
+ var/datum/tgs_version/tgsversion = world.TgsVersion()
if(tgsversion)
- SSblackbox.record_feedback("text", "server_tools", 1, tgsversion)
+ SSblackbox.record_feedback("text", "server_tools", 1, tgsversion.raw_parameter)
#undef PING_BUFFER_TIME
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index c9562bcfd1..fe994facdc 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -68,6 +68,8 @@ SUBSYSTEM_DEF(ticker)
var/modevoted = FALSE //Have we sent a vote for the gamemode?
+ var/station_integrity = 100 // stored at roundend for use in some antag goals
+
/datum/controller/subsystem/ticker/Initialize(timeofday)
load_mode()
@@ -156,8 +158,7 @@ SUBSYSTEM_DEF(ticker)
for(var/client/C in GLOB.clients)
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
to_chat(world, "Welcome to [station_name()]! ")
- if(CONFIG_GET(flag/irc_announce_new_game))
- world.TgsTargetedChatBroadcast("New round starting on [SSmapping.config.map_name]!", FALSE)
+ send2chat("New round starting on [SSmapping.config.map_name]!", CONFIG_GET(string/chat_announce_new_game))
current_state = GAME_STATE_PREGAME
//Everyone who wants to be an observer is now spawned
create_observers()
@@ -363,7 +364,7 @@ SUBSYSTEM_DEF(ticker)
var/turf/epi = bomb.loc
qdel(bomb)
if(epi)
- explosion(epi, 0, 256, 512, 0, TRUE, TRUE, 0, TRUE)
+ explosion(epi, 512, 0, 0, 0, TRUE, TRUE, 0, TRUE)
/datum/controller/subsystem/ticker/proc/create_characters()
for(var/mob/dead/new_player/player in GLOB.player_list)
@@ -475,7 +476,18 @@ SUBSYSTEM_DEF(ticker)
if(CONFIG_GET(flag/tgstyle_maprotation))
INVOKE_ASYNC(SSmapping, /datum/controller/subsystem/mapping/.proc/maprotate)
else
- SSvote.initiate_vote("map","server",TRUE)
+ var/vote_type = CONFIG_GET(string/map_vote_type)
+ switch(vote_type)
+ if("PLURALITY")
+ SSvote.initiate_vote("map","server",hideresults=TRUE)
+ if("APPROVAL")
+ SSvote.initiate_vote("map","server",hideresults=TRUE,votesystem = APPROVAL_VOTING)
+ if("IRV")
+ SSvote.initiate_vote("map","server",hideresults=TRUE,votesystem = INSTANT_RUNOFF_VOTING)
+ if("SCORE")
+ SSvote.initiate_vote("map","server",hideresults=TRUE,votesystem = MAJORITY_JUDGEMENT_VOTING)
+ // fallback
+ SSvote.initiate_vote("map","server",hideresults=TRUE)
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
return current_state >= GAME_STATE_PLAYING
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index c67a1620f1..086167fc48 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -188,22 +188,47 @@ SUBSYSTEM_DEF(vote)
choices[score_name]++
/datum/controller/subsystem/vote/proc/calculate_scores(var/blackbox_text)
- var/list/scores_by_choice = list()
for(var/choice in choices)
- scores_by_choice += "[choice]"
- scores_by_choice["[choice]"] = list()
+ scores += "[choice]"
+ scores["[choice]"] = 0
for(var/ckey in voted)
var/list/this_vote = voted[ckey]
- for(var/choice in choices)
- if("[choice]" in this_vote && "[choice]" in scores_by_choice)
- sorted_insert(scores_by_choice["[choice]"],this_vote["[choice]"],/proc/cmp_numeric_asc)
- var/middle_score = round(GLOB.vote_score_options.len/2,1)
- for(var/score_name in scores_by_choice)
- var/list/score = scores_by_choice[score_name]
- for(var/S in score)
- scores[score_name] += S-middle_score
+ for(var/choice in this_vote)
+ scores["[choice]"] += this_vote["[choice]"]
+ var/min_score = 100
+ var/max_score = -100
+ for(var/score_name in scores) // normalize the scores from 0-1
+ max_score=max(max_score,scores[score_name])
+ min_score=min(min_score,scores[score_name])
+ for(var/score_name in scores)
+ if(max_score == min_score)
+ scores[score_name] = 1
+ else
+ scores[score_name] = (scores[score_name]-min_score)/(max_score-min_score)
SSblackbox.record_feedback("nested tally","voting",scores[score_name],list(blackbox_text,"Total scores",score_name))
+/datum/controller/subsystem/vote/proc/get_runoff_results(var/blackbox_text)
+ var/already_lost_runoff = list()
+ var/list/cur_choices = choices.Copy()
+ for(var/ckey in voted)
+ choices[choices[voted[ckey][1]]]++ // jesus christ how horrifying
+ for(var/_this_var_unused_ignore_it in 1 to choices.len) // if it takes more than this something REALLY wrong happened
+ for(var/ckey in voted)
+ cur_choices[cur_choices[voted[ckey][1]]]++ // jesus christ how horrifying
+ var/least_vote = 100000
+ var/least_voted
+ for(var/i in 1 to cur_choices.len)
+ var/option = cur_choices[i]
+ if(cur_choices[option] > voted.len/2)
+ return list(option)
+ else if(cur_choices[option] < least_vote && !(option in already_lost_runoff))
+ least_vote = cur_choices[option]
+ least_voted = i
+ already_lost_runoff += cur_choices[least_voted]
+ for(var/ckey in voted)
+ voted[ckey] -= least_voted
+ for(var/option in cur_choices)
+ cur_choices[option] = 0
/datum/controller/subsystem/vote/proc/announce_result()
var/vote_title_text
@@ -214,32 +239,29 @@ SUBSYSTEM_DEF(vote)
else
text += "[capitalize(mode)] Vote "
vote_title_text = "[capitalize(mode)] Vote"
- if(vote_system == RANKED_CHOICE_VOTING)
+ if(vote_system == SCHULZE_VOTING)
calculate_condorcet_votes(vote_title_text)
if(vote_system == SCORE_VOTING)
- calculate_majority_judgement_vote(vote_title_text)
calculate_scores(vote_title_text)
- var/list/winners = get_result()
+ if(vote_system == MAJORITY_JUDGEMENT_VOTING)
+ calculate_majority_judgement_vote(vote_title_text) // nothing uses this at the moment
+ var/list/winners = vote_system == INSTANT_RUNOFF_VOTING ? get_runoff_results() : get_result()
var/was_roundtype_vote = mode == "roundtype" || mode == "dynamic"
if(winners.len > 0)
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!"
- if(mode == "mode tiers")
- for(var/score_name in scores)
- var/score = scores[score_name]
- if(!score)
- score = 0
- text = "\n[score_name]: [obfuscated ? "???" : score]"
- else
- for(var/i=1,i<=choices.len,i++)
- var/votes = choices[choices[i]]
- if(!votes)
- votes = 0
- if(was_roundtype_vote)
- stored_gamemode_votes[choices[i]] = votes
- text += "\n[choices[i]]: [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes
+ if(!obfuscated)
+ if(vote_system == SCHULZE_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!"
+ if(vote_system == MAJORITY_JUDGEMENT_VOTING)
+ text += "\nIt should be noted that this is not a raw tally of votes but the number of runoffs done by majority judgement!"
+ for(var/i=1,i<=choices.len,i++)
+ var/votes = choices[choices[i]]
+ if(!votes)
+ votes = 0
+ if(was_roundtype_vote)
+ stored_gamemode_votes[choices[i]] = votes
+ text += "\n[choices[i]]: [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes
if(mode != "custom")
if(winners.len > 1 && !obfuscated) //CIT CHANGE - adds obfuscated votes
text = "\nVote Tied Between: "
@@ -249,6 +271,15 @@ SUBSYSTEM_DEF(vote)
text += "\nVote Result: [obfuscated ? "???" : .] " //CIT CHANGE - adds obfuscated votes
else
text += "\nDid not vote: [GLOB.clients.len-voted.len]"
+ else if(vote_system == SCORE_VOTING)
+ for(var/score_name in scores)
+ var/score = scores[score_name]
+ if(!score)
+ score = 0
+ if(was_roundtype_vote)
+ stored_gamemode_votes[score_name] = score
+ text = "\n[score_name]: [obfuscated ? "???" : score]"
+ . = 1
else
text += "Vote Result: Inconclusive - No Votes! "
log_vote(text)
@@ -258,7 +289,7 @@ SUBSYSTEM_DEF(vote)
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)
+ if(SCHULZE_VOTING,INSTANT_RUNOFF_VOTING)
for(var/i=1,i<=voted.len,i++)
var/list/myvote = voted[voted[i]]
if(islist(myvote))
@@ -266,13 +297,18 @@ SUBSYSTEM_DEF(vote)
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!"
- else if(vote_system == SCORE_VOTING)
- admintext += "\nIt should be noted that this is not a raw tally of votes but the number of runoffs done by majority judgement!"
- for(var/i=1,i<=choices.len,i++)
- var/votes = choices[choices[i]]
- admintext += "\n[choices[i]]: [votes]"
+ if(vote_system != SCORE_VOTING)
+ if(vote_system == SCHULZE_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!"
+ else if(vote_system == MAJORITY_JUDGEMENT_VOTING)
+ admintext += "\nIt should be noted that this is not a raw tally of votes but the number of runoffs done by majority judgement!"
+ for(var/i=1,i<=choices.len,i++)
+ var/votes = choices[choices[i]]
+ admintext += "\n[choices[i]]: [votes]"
+ else
+ for(var/i=1,i<=scores.len,i++)
+ var/score = scores[scores[i]]
+ admintext += "\n[scores[i]]: [score]"
message_admins(admintext)
return .
@@ -316,15 +352,13 @@ 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.")
- 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
+ GLOB.master_mode = "dynamic"
+ var/list/runnable_storytellers = config.get_runnable_storytellers()
+ for(var/T in runnable_storytellers)
+ var/datum/dynamic_storyteller/S = T
+ runnable_storytellers[S] *= scores[initial(S.name)]
+ var/datum/dynamic_storyteller/S = pickweightAllowZero(runnable_storytellers)
+ 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]")
@@ -375,7 +409,7 @@ SUBSYSTEM_DEF(vote)
voted[usr.ckey] = list(vote)
choices[choices[vote]]++
return vote
- if(RANKED_CHOICE_VOTING)
+ if(SCHULZE_VOTING,INSTANT_RUNOFF_VOTING)
if(usr.ckey in voted)
if(vote in voted[usr.ckey])
voted[usr.ckey] -= vote
@@ -384,7 +418,7 @@ SUBSYSTEM_DEF(vote)
voted[usr.ckey] = list()
voted[usr.ckey] += vote
saved -= usr.ckey
- if(SCORE_VOTING)
+ if(SCORE_VOTING,MAJORITY_JUDGEMENT_VOTING)
if(!(usr.ckey in voted))
voted += usr.ckey
voted[usr.ckey] = list()
@@ -444,19 +478,16 @@ SUBSYSTEM_DEF(vote)
if("dynamic")
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))
+ var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight)
+ if(probabilities[initial(S.config_tag)] > 0)
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)
return 0
+ var/system_string = input(usr,"Which voting type?",GLOB.vote_type_names[1]) in GLOB.vote_type_names
+ vote_system = GLOB.vote_type_names[system_string]
for(var/i=1,i<=10,i++)
var/option = capitalize(stripped_input(usr,"Please enter an option or hit cancel to finish"))
if(!option || mode || !usr.client)
@@ -514,9 +545,9 @@ SUBSYSTEM_DEF(vote)
. += "
[choices[i]] "
@@ -656,7 +687,7 @@ SUBSYSTEM_DEF(vote)
voted[usr.ckey] = SSpersistence.saved_votes[usr.ckey][mode]
if(islist(voted[usr.ckey]))
var/malformed = FALSE
- if(vote_system == SCORE_VOTING)
+ if(vote_system == SCORE_VOTING || vote_system == MAJORITY_JUDGEMENT_VOTING)
for(var/thing in voted[usr.ckey])
if(!(thing in choices))
malformed = TRUE
@@ -670,7 +701,7 @@ SUBSYSTEM_DEF(vote)
to_chat(usr,"Your saved vote was malformed! Start over!")
voted -= usr.ckey
else
- if(vote_system == SCORE_VOTING)
+ if(vote_system == SCORE_VOTING || vote_system == MAJORITY_JUDGEMENT_VOTING)
submit_vote(round(text2num(href_list["vote"])),round(text2num(href_list["score"])))
else
submit_vote(round(text2num(href_list["vote"])))
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 8659a9e7c4..04d9c706ed 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -544,6 +544,70 @@
cooldown = world.time
owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE)
+/datum/action/item_action/removeAPCs
+ name = "Relinquish APC"
+ desc = "Let go of an APC, relinquish control back to the station."
+ icon_icon = 'icons/obj/implants.dmi'
+ button_icon_state = "hijackx"
+
+/datum/action/item_action/removeAPCs/Trigger()
+ var/list/areas = list()
+ for (var/area/a in owner.siliconaccessareas)
+ areas[a.name] = a
+ var/removeAPC = input("Select an APC to remove:","Remove APC Control",1) as null|anything in areas
+ if (!removeAPC)
+ return
+ var/area/area = areas[removeAPC]
+ var/obj/machinery/power/apc/apc = area.get_apc()
+ if (!apc || !(area in owner.siliconaccessareas))
+ return
+ apc.hijacker = null
+ apc.update_icon()
+ apc.set_hijacked_lighting()
+ owner.toggleSiliconAccessArea(area)
+
+/datum/action/item_action/accessAPCs
+ name = "Access APC Interface"
+ desc = "Open the APC's interface."
+ icon_icon = 'icons/obj/implants.dmi'
+ button_icon_state = "hijacky"
+
+/datum/action/item_action/accessAPCs/Trigger()
+ var/list/areas = list()
+ for (var/area/a in owner.siliconaccessareas)
+ areas[a.name] = a
+ var/accessAPC = input("Select an APC to access:","Access APC Interface",1) as null|anything in areas
+ if (!accessAPC)
+ return
+ var/area/area = areas[accessAPC]
+ var/obj/machinery/power/apc/apc = area.get_apc()
+ if (!apc || !(area in owner.siliconaccessareas))
+ return
+ apc.ui_interact(owner)
+
+/datum/action/item_action/stealthmodetoggle
+ name = "Toggle Stealth Mode"
+ desc = "Toggles the stealth mode on the hijack implant."
+ icon_icon = 'icons/obj/implants.dmi'
+ button_icon_state = "hijackz"
+
+/datum/action/item_action/stealthmodetoggle/Trigger()
+ var/obj/item/implant/hijack/H = target
+ if (!istype(H))
+ return
+ if (H.stealthcooldown > world.time)
+ to_chat(owner,"The hijack implant's stealth mode toggle is still rebooting! ")
+ return
+ H.stealthmode = !H.stealthmode
+ for (var/area/area in H.imp_in.siliconaccessareas)
+ var/obj/machinery/power/apc/apc = area.get_apc()
+ if (apc)
+ apc.set_hijacked_lighting()
+ apc.update_icon()
+ H.stealthcooldown = world.time + 15 SECONDS
+ H.toggle_eyes()
+ to_chat(owner,"You toggle the hijack implant's stealthmode [H.stealthmode ? "on" : "off"]. ")
+
/datum/action/item_action/flash
name = "Flash"
@@ -756,3 +820,11 @@
target.layer = old_layer
target.plane = old_plane
current_button.appearance_cache = target.appearance
+
+/proc/get_action_of_type(mob/M, var/action_type)
+ if(!M.actions || !ispath(action_type, /datum/action))
+ return
+ for(var/datum/action/A in M.actions)
+ if(istype(A, action_type))
+ return A
+ return
\ No newline at end of file
diff --git a/code/datums/components/crafting/craft.dm b/code/datums/components/crafting/craft.dm
index 5c21801c14..b5c7f34c27 100644
--- a/code/datums/components/crafting/craft.dm
+++ b/code/datums/components/crafting/craft.dm
@@ -64,29 +64,48 @@
-
-/datum/component/personal_crafting/proc/check_contents(datum/crafting_recipe/R, list/contents)
+/**
+ * Check that the contents of the recipe meet the requirements.
+ *
+ * user: The /mob that initated the crafting.
+ * R: The /datum/crafting_recipe being attempted.
+ * contents: List of items to search for R's reqs.
+ */
+/datum/component/personal_crafting/proc/check_contents(mob/user, datum/crafting_recipe/R, list/contents)
+ var/list/item_instances = contents["instances"]
contents = contents["other"]
- main_loop:
- for(var/A in R.reqs)
- var/needed_amount = R.reqs[A]
- for(var/B in contents)
- if(ispath(B, A))
- if (R.blacklist.Find(B))
- continue
- if(contents[B] >= R.reqs[A])
- continue main_loop
- else
- needed_amount -= contents[B]
- if(needed_amount <= 0)
- continue main_loop
- else
- continue
+
+ var/list/requirements_list = list()
+
+ // Process all requirements
+ for(var/requirement_path in R.reqs)
+ // Check we have the appropriate amount available in the contents list
+ var/needed_amount = R.reqs[requirement_path]
+ for(var/content_item_path in contents)
+ // Right path and not blacklisted
+ if(!ispath(content_item_path, requirement_path) || R.blacklist.Find(requirement_path))
+ continue
+
+ needed_amount -= contents[content_item_path]
+ if(needed_amount <= 0)
+ break
+
+ if(needed_amount > 0)
return FALSE
- for(var/A in R.chem_catalysts)
- if(contents[A] < R.chem_catalysts[A])
+
+ // Store the instances of what we will use for R.check_requirements() for requirement_path
+ var/list/instances_list = list()
+ for(var/instance_path in item_instances)
+ if(ispath(instance_path, requirement_path))
+ instances_list += item_instances[instance_path]
+
+ requirements_list[requirement_path] = instances_list
+
+ for(var/requirement_path in R.chem_catalysts)
+ if(contents[requirement_path] < R.chem_catalysts[requirement_path])
return FALSE
- return TRUE
+
+ return R.check_requirements(user, requirements_list)
/datum/component/personal_crafting/proc/get_environment(mob/user)
. = list()
@@ -110,9 +129,14 @@
. = list()
.["tool_behaviour"] = list()
.["other"] = list()
+ .["instances"] = list()
for(var/obj/item/I in get_environment(user))
if(I.flags_1 & HOLOGRAM_1)
continue
+ if(.["instances"][I.type])
+ .["instances"][I.type] += I
+ else
+ .["instances"][I.type] = list(I)
if(istype(I, /obj/item/stack))
var/obj/item/stack/S = I
.["other"][I.type] += S.amount
@@ -161,11 +185,11 @@
/datum/component/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
var/list/contents = get_surroundings(user)
var/send_feedback = 1
- if(check_contents(R, contents))
+ if(check_contents(user, R, contents))
if(check_tools(user, R, contents))
if(do_after(user, R.time, target = user))
contents = get_surroundings(user)
- if(!check_contents(R, contents))
+ if(!check_contents(user, R, contents))
return ", missing component."
if(!check_tools(user, R, contents))
return ", missing tool."
@@ -341,7 +365,7 @@
if((R.category != cur_category) || (R.subcategory != cur_subcategory))
continue
- craftability["[REF(R)]"] = check_contents(R, surroundings)
+ craftability["[REF(R)]"] = check_contents(user, R, surroundings)
data["craftability"] = craftability
return data
diff --git a/code/datums/components/crafting/recipes/recipes_primal.dm b/code/datums/components/crafting/recipes/recipes_primal.dm
index 1be479e4e1..1fc684eddc 100644
--- a/code/datums/components/crafting/recipes/recipes_primal.dm
+++ b/code/datums/components/crafting/recipes/recipes_primal.dm
@@ -1,10 +1,3 @@
-/datum/crafting_recipe/bonearmor
- name = "Bone Armor"
- result = /obj/item/clothing/suit/armor/bone
- time = 30
- reqs = list(/obj/item/stack/sheet/bone = 6)
- category = CAT_PRIMAL
-
/datum/crafting_recipe/bonetalisman
name = "Bone Talisman"
result = /obj/item/clothing/accessory/talisman
@@ -29,13 +22,6 @@
/obj/item/stack/sheet/sinew = 1)
category = CAT_PRIMAL
-/datum/crafting_recipe/skullhelm
- name = "Skull Helmet"
- result = /obj/item/clothing/head/helmet/skull
- time = 30
- reqs = list(/obj/item/stack/sheet/bone = 4)
- category = CAT_PRIMAL
-
/datum/crafting_recipe/goliathcloak
name = "Goliath Cloak"
result = /obj/item/clothing/suit/hooded/cloak/goliath
@@ -62,13 +48,6 @@
/obj/item/stack/sheet/sinew = 2)
category = CAT_PRIMAL
-/datum/crafting_recipe/bonedagger
- name = "Bone Dagger"
- result = /obj/item/kitchen/knife/combat/bone
- time = 20
- reqs = list(/obj/item/stack/sheet/bone = 2)
- category = CAT_PRIMAL
-
/datum/crafting_recipe/bonespear
name = "Bone Spear"
result = /obj/item/twohanded/bonespear
diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
index 06f79396b8..104b58ca28 100644
--- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
@@ -8,6 +8,12 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+/datum/crafting_recipe/pin_removal/check_requirements(mob/user, list/collected_requirements)
+ var/obj/item/gun/G = collected_requirements[/obj/item/gun][1]
+ if (G.no_pin_required || !G.pin)
+ return FALSE
+ return TRUE
+
/datum/crafting_recipe/strobeshield
name = "Strobe Shield"
result = /obj/item/assembly/flash/shield
diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm
index e1c96121c7..1d9ba1d11b 100644
--- a/code/datums/components/nanites.dm
+++ b/code/datums/components/nanites.dm
@@ -25,7 +25,7 @@
if(isliving(parent))
host_mob = parent
- if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes)) //Shouldn't happen, but this avoids HUD runtimes in case a silicon gets them somehow.
+ if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) //Shouldn't happen, but this avoids HUD runtimes in case a silicon gets them somehow.
return COMPONENT_INCOMPATIBLE
host_mob.hud_set_nanite_indicator()
@@ -212,7 +212,7 @@
NP.receive_comm_signal(comm_code, comm_message, comm_source)
/datum/component/nanites/proc/check_viable_biotype()
- if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes))
+ if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)))
qdel(src) //bodytype no longer sustains nanites
/datum/component/nanites/proc/check_access(datum/source, obj/O)
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 9c8622d16e..4d3ecc8d17 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -56,7 +56,7 @@
/obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
/obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
/obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
- /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol
+ /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol
))
/datum/component/storage/concrete/pockets/shoes/clown/Initialize()
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index 55e5c03c2b..61f97006dd 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -41,6 +41,7 @@
var/obj/screen/storage/boxes //storage display object
var/obj/screen/close/closer //close button object
+ var/current_maxscreensize
var/allow_big_nesting = FALSE //allow storage objects of the same or greater size.
@@ -362,11 +363,15 @@
break
closer.screen_loc = "[screen_start_x + cols]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y]"
-/datum/component/storage/proc/show_to(mob/M)
+/datum/component/storage/proc/show_to(mob/M, set_screen_size = TRUE)
if(!M.client)
return FALSE
var/list/cview = getviewsize(M.client.view)
var/maxallowedscreensize = cview[1]-8
+ if(set_screen_size)
+ current_maxscreensize = maxallowedscreensize
+ else if(current_maxscreensize)
+ maxallowedscreensize = current_maxscreensize
if(M.active_storage != src && (M.stat == CONSCIOUS))
for(var/obj/item/I in accessible_items())
if(I.on_found(M))
@@ -547,14 +552,14 @@
return
A.add_fingerprint(M)
-/datum/component/storage/proc/user_show_to_mob(mob/M, force = FALSE)
+/datum/component/storage/proc/user_show_to_mob(mob/M, force = FALSE, ghost = FALSE)
var/atom/A = parent
if(!istype(M))
return FALSE
A.add_fingerprint(M)
if(!force && (check_locked(null, M) || !M.CanReach(parent, view_only = TRUE)))
return FALSE
- show_to(M)
+ show_to(M, !ghost)
/datum/component/storage/proc/mousedrop_receive(datum/source, atom/movable/O, mob/M)
if(isitem(O))
@@ -665,7 +670,7 @@
return can_be_inserted(I, silent, M)
/datum/component/storage/proc/show_to_ghost(datum/source, mob/dead/observer/M)
- return user_show_to_mob(M, TRUE)
+ return user_show_to_mob(M, TRUE, TRUE)
/datum/component/storage/proc/signal_show_attempt(datum/source, mob/showto, force = FALSE)
return user_show_to_mob(showto, force)
diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm
index 5057253522..a8e03946b6 100644
--- a/code/datums/components/uplink.dm
+++ b/code/datums/components/uplink.dm
@@ -25,6 +25,8 @@ GLOBAL_LIST_EMPTY(uplinks)
var/unlock_code
var/failsafe_code
var/datum/ui_state/checkstate
+ var/compact_mode = FALSE
+ var/debug = FALSE
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate)
if(!isitem(parent))
@@ -121,7 +123,7 @@ GLOBAL_LIST_EMPTY(uplinks)
active = TRUE
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
- ui = new(user, src, ui_key, "uplink", name, 450, 750, master_ui, state)
+ ui = new(user, src, ui_key, "uplink", name, 620, 580, master_ui, state)
ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input.
ui.set_style("syndicate")
ui.open()
@@ -138,29 +140,35 @@ GLOBAL_LIST_EMPTY(uplinks)
var/list/data = list()
data["telecrystals"] = telecrystals
data["lockable"] = lockable
+ data["compact_mode"] = compact_mode
+ return data
+
+/datum/component/uplink/ui_static_data(mob/user)
+ var/list/data = list()
data["categories"] = list()
for(var/category in uplink_items)
var/list/cat = list(
"name" = category,
"items" = (category == selected_cat ? list() : null))
- if(category == selected_cat)
- for(var/item in uplink_items[category])
- var/datum/uplink_item/I = uplink_items[category][item]
- if(I.limited_stock == 0)
+ for(var/item in uplink_items[category])
+ var/datum/uplink_item/I = uplink_items[category][item]
+ if(I.limited_stock == 0)
+ continue
+ if(I.restricted_roles.len)
+ var/is_inaccessible = TRUE
+ for(var/R in I.restricted_roles)
+ if(R == user.mind.assigned_role || debug)
+ is_inaccessible = FALSE
+ if(is_inaccessible)
continue
- if(I.restricted_roles.len)
- var/is_inaccessible = 1
- for(var/R in I.restricted_roles)
- if(R == user.mind.assigned_role)
- is_inaccessible = 0
if(is_inaccessible)
continue
- cat["items"] += list(list(
- "name" = I.name,
- "cost" = I.cost,
- "desc" = I.desc,
- ))
+ cat["items"] += list(list(
+ "name" = I.name,
+ "cost" = I.cost,
+ "desc" = I.desc,
+ ))
data["categories"] += list(cat)
return data
@@ -188,6 +196,8 @@ GLOBAL_LIST_EMPTY(uplinks)
SStgui.close_uis(src)
if("select")
selected_cat = params["category"]
+ if("compact_toggle")
+ compact_mode = !compact_mode
return TRUE
/datum/component/uplink/proc/MakePurchase(mob/user, datum/uplink_item/U)
@@ -294,4 +304,4 @@ GLOBAL_LIST_EMPTY(uplinks)
if(!T)
return
explosion(T,1,2,3)
- qdel(parent) //Alternatively could brick the uplink.
\ No newline at end of file
+ qdel(parent) //Alternatively could brick the uplink.
diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm
index c125a9b7c7..0b6d4e3404 100644
--- a/code/datums/diseases/_MobProcs.dm
+++ b/code/datums/diseases/_MobProcs.dm
@@ -17,14 +17,10 @@
if(HasDisease(D))
return FALSE
- var/can_infect = FALSE
- for(var/host_type in D.infectable_biotypes)
- if(host_type in mob_biotypes)
- can_infect = TRUE
- break
- if(!can_infect)
+ if(!(D.infectable_biotypes & mob_biotypes))
return FALSE
+
if(!(type in D.viable_mobtypes))
return FALSE
diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm
index 056f99c7a4..940b61c9fe 100644
--- a/code/datums/diseases/_disease.dm
+++ b/code/datums/diseases/_disease.dm
@@ -30,7 +30,7 @@
var/list/required_organs = list()
var/needs_all_cures = TRUE
var/list/strain_data = list() //dna_spread special bullshit
- var/list/infectable_biotypes = list(MOB_ORGANIC) //if the disease can spread on organics, synthetics, or undead
+ var/infectable_biotypes = MOB_ORGANIC //if the disease can spread on organics, synthetics, or undead
var/process_dead = FALSE //if this ticks while the host is dead
var/copy_type = null //if this is null, copies will use the type of the instance being copied
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index cf14da36a0..c7b9758bcb 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -448,9 +448,11 @@
symptom_delay_max = 1
passive_message = "Your skin glows faintly for a moment. "
var/cellular_damage = FALSE
- threshold_desc = "Transmission 6: Additionally heals cellular damage and toxin lovers. \
- Resistance 7: Increases healing speed."
-
+ threshold_desc = list(
+ "Transmission 6" = "Additionally heals cellular damage and toxin lovers.",
+ "Resistance 7" = "Increases healing speed.",
+ )
+
/datum/symptom/heal/radiation/Start(datum/disease/advance/A)
if(!..())
return
diff --git a/code/datums/diseases/advance/symptoms/species.dm b/code/datums/diseases/advance/symptoms/species.dm
index a8b18ae735..49a3cf8d07 100644
--- a/code/datums/diseases/advance/symptoms/species.dm
+++ b/code/datums/diseases/advance/symptoms/species.dm
@@ -14,7 +14,7 @@
/datum/symptom/undead_adaptation/OnRemove(datum/disease/advance/A)
A.process_dead = FALSE
- A.infectable_biotypes -= MOB_UNDEAD
+ A.infectable_biotypes &= ~MOB_UNDEAD
/datum/symptom/inorganic_adaptation
name = "Inorganic Biology"
@@ -27,7 +27,8 @@
severity = 0
/datum/symptom/inorganic_adaptation/OnAdd(datum/disease/advance/A)
- A.infectable_biotypes |= MOB_INORGANIC
+ A.infectable_biotypes |= MOB_MINERAL //Mineral covers plasmamen and golems.
/datum/symptom/inorganic_adaptation/OnRemove(datum/disease/advance/A)
- A.infectable_biotypes -= MOB_INORGANIC
\ No newline at end of file
+ A.infectable_biotypes &= ~MOB_MINERAL
+
diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm
index 074bda0560..ccae692b4b 100644
--- a/code/datums/diseases/beesease.dm
+++ b/code/datums/diseases/beesease.dm
@@ -10,7 +10,7 @@
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
desc = "If left untreated subject will regurgitate bees."
severity = DISEASE_SEVERITY_MEDIUM
- infectable_biotypes = list(MOB_ORGANIC, MOB_UNDEAD) //bees nesting in corpses
+ infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD //bees nesting in corpses
/datum/disease/beesease/stage_act()
..()
diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm
index 29e6657e13..0bfb918ba0 100644
--- a/code/datums/diseases/magnitis.dm
+++ b/code/datums/diseases/magnitis.dm
@@ -10,7 +10,7 @@
permeability_mod = 0.75
desc = "This disease disrupts the magnetic field of your body, making it act as if a powerful magnet. Injections of iron help stabilize the field."
severity = DISEASE_SEVERITY_MEDIUM
- infectable_biotypes = list(MOB_ORGANIC, MOB_ROBOTIC)
+ infectable_biotypes = MOB_ORGANIC|MOB_ROBOTIC
process_dead = TRUE
/datum/disease/magnitis/stage_act()
diff --git a/code/datums/diseases/parrotpossession.dm b/code/datums/diseases/parrotpossession.dm
index 68e962055a..1a3346d565 100644
--- a/code/datums/diseases/parrotpossession.dm
+++ b/code/datums/diseases/parrotpossession.dm
@@ -11,7 +11,7 @@
viable_mobtypes = list(/mob/living/carbon/human)
desc = "Subject is possessed by the vengeful spirit of a parrot. Call the priest."
severity = DISEASE_SEVERITY_MEDIUM
- infectable_biotypes = list(MOB_ORGANIC, MOB_UNDEAD, MOB_INORGANIC, MOB_ROBOTIC)
+ infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD|MOB_ROBOTIC|MOB_MINERAL
bypasses_immunity = TRUE //2spook
var/mob/living/simple_animal/parrot/Poly/ghost/parrot
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
index bdb05346e4..36c7d70f3c 100644
--- a/code/datums/diseases/transformation.dm
+++ b/code/datums/diseases/transformation.dm
@@ -168,7 +168,7 @@
stage4 = list("Your skin feels very loose. ", "You can feel... something...inside you. ")
stage5 = list("Your skin feels as if it's about to burst off! ")
new_form = /mob/living/silicon/robot
- infectable_biotypes = list(MOB_ORGANIC, MOB_UNDEAD, MOB_ROBOTIC)
+ infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD|MOB_ROBOTIC
bantype = "Cyborg"
/datum/disease/transformation/robot/stage_act()
@@ -284,7 +284,7 @@
stage4 = list("You're ravenous. ")
stage5 = list("You have become a morph. ")
new_form = /mob/living/simple_animal/hostile/morph
- infectable_biotypes = list(MOB_ORGANIC, MOB_INORGANIC, MOB_UNDEAD) //magic!
+ infectable_biotypes = MOB_ORGANIC|MOB_MINERAL|MOB_UNDEAD //magic!
/datum/disease/transformation/gondola
name = "Gondola Transformation"
diff --git a/code/datums/elements/mob_holder.dm b/code/datums/elements/mob_holder.dm
new file mode 100644
index 0000000000..04f84ee008
--- /dev/null
+++ b/code/datums/elements/mob_holder.dm
@@ -0,0 +1,184 @@
+/datum/element/mob_holder
+ element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
+ id_arg_index = 2
+ var/worn_state
+ var/alt_worn
+ var/right_hand
+ var/left_hand
+ var/inv_slots
+ var/proctype //if present, will be invoked on headwear generation.
+
+/datum/element/mob_holder/Attach(datum/target, _worn_state, _alt_worn, _right_hand, _left_hand, _inv_slots = NONE, _proctype)
+ . = ..()
+
+ if(!isliving(target))
+ return ELEMENT_INCOMPATIBLE
+
+ worn_state = _worn_state
+ alt_worn = _alt_worn
+ right_hand = _right_hand
+ left_hand = _left_hand
+ inv_slots = _inv_slots
+ proctype = _proctype
+
+ RegisterSignal(target, COMSIG_CLICK_ALT, .proc/mob_try_pickup)
+ RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/on_examine)
+
+/datum/element/mob_holder/Detach(datum/source, force)
+ . = ..()
+ UnregisterSignal(source, COMSIG_CLICK_ALT)
+ UnregisterSignal(source, COMSIG_PARENT_EXAMINE)
+
+/datum/element/mob_holder/proc/on_examine(mob/living/source, mob/user, list/examine_list)
+ if(ishuman(user) && !istype(source.loc, /obj/item/clothing/head/mob_holder))
+ examine_list += "Looks like [source.p_they(TRUE)] can be picked up with Alt+Click ! "
+
+/datum/element/mob_holder/proc/mob_try_pickup(mob/living/source, mob/user)
+ if(!ishuman(user) || !user.Adjacent(source) || user.incapacitated())
+ return FALSE
+ if(user.get_active_held_item())
+ to_chat(user, "Your hands are full! ")
+ return FALSE
+ if(source.buckled)
+ to_chat(user, "[src] is buckled to something! ")
+ return FALSE
+ if(source == user)
+ to_chat(user, "You can't pick yourself up. ")
+ return FALSE
+ source.visible_message("[user] starts picking up [source]. ", \
+ "[user] starts picking you up! ")
+ if(!do_after(user, 20, target = source) || source.buckled)
+ return FALSE
+
+ source.visible_message("[user] picks up [source]! ", \
+ "[user] picks you up! ")
+ to_chat(user, "You pick [src] up. ")
+ source.drop_all_held_items()
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(source), source, worn_state, alt_worn, right_hand, left_hand, inv_slots)
+ if(proctype)
+ INVOKE_ASYNC(src, proctype, source, holder, user)
+ user.put_in_hands(holder)
+ return TRUE
+
+/datum/element/mob_holder/proc/drone_worn_icon(mob/living/simple_animal/drone/D, obj/item/clothing/head/mob_holder/holder, mob/user)
+ var/new_state = "[D.visualAppearence]_hat"
+ holder.item_state = new_state
+ holder.icon_state = new_state
+
+
+//The item itself,
+/obj/item/clothing/head/mob_holder
+ name = "bugged mob"
+ desc = "Yell at coderbrush."
+ icon = null
+ alternate_worn_icon = 'icons/mob/animals_held.dmi'
+ righthand_file = 'icons/mob/animals_held_rh.dmi'
+ lefthand_file = 'icons/mob/animals_held_lh.dmi'
+ icon_state = ""
+ w_class = WEIGHT_CLASS_BULKY
+ var/mob/living/held_mob
+
+/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/target, worn_state, alt_worn, right_hand, left_hand, slots = NONE)
+ . = ..()
+
+ if(target)
+ assimilate(target)
+
+ if(alt_worn)
+ alternate_worn_icon = alt_worn
+ if(worn_state)
+ item_state = worn_state
+ icon_state = worn_state
+ if(left_hand)
+ lefthand_file = left_hand
+ if(right_hand)
+ righthand_file = right_hand
+ slot_flags = slots
+
+/obj/item/clothing/head/mob_holder/proc/assimilate(mob/living/target)
+ target.setDir(SOUTH)
+ held_mob = target
+ target.forceMove(src)
+ var/image/I = new //work around to retain the same appearance to the mob idependently from inhands/worn states.
+ I.appearance = target.appearance
+ I.override = TRUE
+ add_overlay(I)
+ name = target.name
+ desc = target.desc
+ switch(target.mob_size)
+ if(MOB_SIZE_TINY)
+ w_class = WEIGHT_CLASS_TINY
+ if(MOB_SIZE_SMALL)
+ w_class = WEIGHT_CLASS_NORMAL
+ if(MOB_SIZE_LARGE)
+ w_class = WEIGHT_CLASS_HUGE
+ RegisterSignal(src, COMSIG_CLICK_SHIFT, .proc/examine_held_mob)
+
+/obj/item/clothing/head/mob_holder/Destroy()
+ if(held_mob)
+ release()
+ return ..()
+
+/obj/item/clothing/head/mob_holder/proc/examine_held_mob(datum/source, mob/user)
+ held_mob.ShiftClick(user)
+ return COMPONENT_DENY_EXAMINATE
+
+/obj/item/clothing/head/mob_holder/Exited(atom/movable/AM, atom/newloc)
+ . = ..()
+ if(AM == held_mob)
+ held_mob.reset_perspective()
+ held_mob = null
+ qdel(src)
+
+/obj/item/clothing/head/mob_holder/Entered(atom/movable/AM, atom/newloc)
+ . = ..()
+ if(AM != held_mob)
+ var/destination = loc
+ if(isliving(loc)) //the mob is held or worn, drop things on the floor
+ destination = get_turf(loc)
+ AM.forceMove(destination)
+
+/obj/item/clothing/head/mob_holder/dropped()
+ . = ..()
+ if(held_mob && isturf(loc))//don't release on soft-drops
+ release()
+
+/obj/item/clothing/head/mob_holder/proc/release()
+ if(held_mob)
+ var/mob/living/L = held_mob
+ held_mob = null
+ L.forceMove(get_turf(L))
+ L.reset_perspective()
+ L.setDir(SOUTH)
+ qdel(src)
+
+/obj/item/clothing/head/mob_holder/relaymove(mob/user)
+ return
+
+/obj/item/clothing/head/mob_holder/container_resist()
+ if(isliving(loc))
+ var/mob/living/L = loc
+ L.visible_message("[src] escapes from [L]! ", "[src] escapes your grip! ")
+ release()
+
+/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/datums/elements/wuv.dm b/code/datums/elements/wuv.dm
index bac7d1ff21..fffb90c681 100644
--- a/code/datums/elements/wuv.dm
+++ b/code/datums/elements/wuv.dm
@@ -1,6 +1,6 @@
/datum/element/wuv //D'awwwww
- element_flags = ELEMENT_BESPOKE
+ element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
id_arg_index = 2
//the for the me emote proc call when petted.
var/pet_emote
@@ -30,6 +30,10 @@
RegisterSignal(target, COMSIG_MOB_ATTACK_HAND, .proc/on_attack_hand)
+/datum/element/wuv/Detach(datum/source, force)
+ . = ..()
+ UnregisterSignal(source, COMSIG_MOB_ATTACK_HAND)
+
/datum/element/wuv/proc/on_attack_hand(datum/source, mob/user)
var/mob/living/L = source
diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm
index 7d040a4982..0b0fed407c 100644
--- a/code/datums/helper_datums/getrev.dm
+++ b/code/datums/helper_datums/getrev.dm
@@ -27,7 +27,8 @@
for(var/line in testmerge)
var/datum/tgs_revision_information/test_merge/tm = line
- msg += "Test merge active of PR #[tm.number] commit [tm.commit]"
+ msg += "Test merge active of PR #[tm.number] commit [tm.pull_request_commit]"
+ SSblackbox.record_feedback("associative", "testmerged_prs", 1, list("number" = "[tm.number]", "commit" = "[tm.pull_request_commit]", "title" = "[tm.title]", "author" = "[tm.author]"))
if(commit && commit != originmastercommit)
msg += "HEAD: [commit]"
@@ -75,7 +76,8 @@
else if(!pc)
msg += "No commit information"
if(world.TgsAvailable())
- msg += "Server tools version: [world.TgsVersion()]"
+ var/datum/tgs_version/version = world.TgsVersion()
+ msg += "Server tools version: [version.raw_parameter]"
// Game mode odds
msg += "Current Informational Settings: "
diff --git a/code/datums/helper_datums/topic_input.dm b/code/datums/helper_datums/topic_input.dm
deleted file mode 100644
index d07aec067e..0000000000
--- a/code/datums/helper_datums/topic_input.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-/datum/topic_input
- var/href
- var/list/href_list
-
-/datum/topic_input/New(thref,list/thref_list)
- href = thref
- href_list = thref_list.Copy()
- return
-
-/datum/topic_input/proc/get(i)
- return listgetindex(href_list,i)
-
-/datum/topic_input/proc/getAndLocate(i)
- var/t = get(i)
- if(t)
- t = locate(t)
- if (istext(t))
- t = null
- return t || null
-
-/datum/topic_input/proc/getNum(i)
- var/t = get(i)
- if(t)
- t = text2num(t)
- return isnum(t) ? t : null
-
-/datum/topic_input/proc/getObj(i)
- var/t = getAndLocate(i)
- return isobj(t) ? t : null
-
-/datum/topic_input/proc/getMob(i)
- var/t = getAndLocate(i)
- return ismob(t) ? t : null
-
-/datum/topic_input/proc/getTurf(i)
- var/t = getAndLocate(i)
- return isturf(t) ? t : null
-
-/datum/topic_input/proc/getAtom(i)
- return getType(i, /atom)
-
-/datum/topic_input/proc/getArea(i)
- var/t = getAndLocate(i)
- return isarea(t) ? t : null
-
-/datum/topic_input/proc/getStr(i)//params should always be text, but...
- var/t = get(i)
- return istext(t) ? t : null
-
-/datum/topic_input/proc/getType(i,type)
- var/t = getAndLocate(i)
- return istype(t,type) ? t : null
-
-/datum/topic_input/proc/getPath(i)
- var/t = get(i)
- if(t)
- t = text2path(t)
- return ispath(t) ? t : null
-
-/datum/topic_input/proc/getList(i)
- var/t = getAndLocate(i)
- return islist(t) ? t : null
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index a3c5979b6e..61d467a20d 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -458,6 +458,7 @@
var/list/allowed_types = list(
/datum/objective/assassinate,
+ /datum/objective/assassinate/once,
/datum/objective/maroon,
/datum/objective/debrain,
/datum/objective/protect,
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 3227500c21..624cfea725 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -33,7 +33,6 @@
if(owner.getStaminaLoss())
owner.adjustStaminaLoss(-0.3) //reduce stamina loss by 0.3 per tick, 6 per 2 seconds
-
//UNCONSCIOUS
/datum/status_effect/incapacitating/unconscious
id = "unconscious"
@@ -80,11 +79,11 @@
desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are."
icon_state = "asleep"
-/datum/status_effect/no_combat_mode/
+/datum/status_effect/no_combat_mode
id = "no_combat_mode"
- blocks_combatmode = TRUE
alert_type = null
status_type = STATUS_EFFECT_REPLACE
+ blocks_combatmode = TRUE
/datum/status_effect/no_combat_mode/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration))
@@ -113,31 +112,54 @@
icon = 'icons/mob/actions/bloodsucker.dmi'
icon_state = "power_mez"
-/datum/status_effect/no_combat_mode/electrode
+/datum/status_effect/electrode
id = "tased"
+ var/slowdown = 1.5
+ var/slowdown_priority = 50 //to make sure the stronger effect overrides
+ var/affect_crawl = FALSE
+ var/nextmove_modifier = 1
+ var/stamdmg_per_ds = 1 //a 20 duration would do 20 stamdmg, disablers do 24 or something
+ var/last_tick = 0 //fastprocess processing speed is a goddamn sham, don't trust it.
-/datum/status_effect/no_combat_mode/electrode/on_creation(mob/living/new_owner, set_duration)
+/datum/status_effect/electrode/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration)) //TODO, figure out how to grab from subtype
duration = set_duration
. = ..()
+ last_tick = world.time
+ if(iscarbon(owner))
+ var/mob/living/carbon/C = owner
+ if(C.combatmode)
+ C.toggle_combat_mode(TRUE)
+ C.add_movespeed_modifier("[MOVESPEED_ID_TASED_STATUS]_[id]", TRUE, priority = slowdown_priority, override = TRUE, multiplicative_slowdown = slowdown, blacklisted_movetypes = affect_crawl? NONE : CRAWLING)
+
+/datum/status_effect/electrode/on_remove()
+ if(iscarbon(owner))
+ var/mob/living/carbon/C = owner
+ C.remove_movespeed_modifier("[MOVESPEED_ID_TASED_STATUS]_[id]")
+ . = ..()
+
+/datum/status_effect/electrode/tick()
+ var/diff = world.time - last_tick
+ if(owner)
+ owner.adjustStaminaLoss(max(0, stamdmg_per_ds * diff)) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing.
+ last_tick = world.time
+
+/datum/status_effect/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y
+ return nextmove_modifier
+
+/datum/status_effect/electrode/no_combat_mode
+ id = "tased_strong"
+ slowdown = 8
+ slowdown_priority = 100
+ nextmove_modifier = 2
+ blocks_combatmode = TRUE
+
+/datum/status_effect/electrode/no_combat_mode/on_creation(mob/living/new_owner, set_duration)
+ . = ..()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
if(C.combatmode)
C.toggle_combat_mode(TRUE)
- C.add_movespeed_modifier(MOVESPEED_ID_TASED_STATUS, TRUE, override = TRUE, multiplicative_slowdown = 8)
-
-/datum/status_effect/no_combat_mode/electrode/on_remove()
- if(iscarbon(owner))
- var/mob/living/carbon/C = owner
- C.remove_movespeed_modifier(MOVESPEED_ID_TASED_STATUS)
- . = ..()
-
-/datum/status_effect/no_combat_mode/electrode/tick()
- if(owner)
- owner.adjustStaminaLoss(5) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing.
-
-/datum/status_effect/no_combat_mode/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y
- return 2
//OTHER DEBUFFS
/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace
diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm
index d68b11135f..c6466fdd96 100644
--- a/code/datums/traits/_quirk.dm
+++ b/code/datums/traits/_quirk.dm
@@ -8,6 +8,7 @@
var/gain_text
var/lose_text
var/medical_record_text //This text will appear on medical records for the trait. Not yet implemented
+ var/antag_removal_text // Text will be given to the quirk holder if they get an antag that has it blacklisted.
var/mood_quirk = FALSE //if true, this quirk affects mood and is unavailable if moodlets are disabled
var/mob_trait //if applicable, apply and remove this mob trait
var/mob/living/quirk_holder
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index b19c6a71f7..b2177a860a 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -6,6 +6,7 @@
value = -2
gain_text = "You feel your vigor slowly fading away. "
lose_text = "You feel vigorous again. "
+ antag_removal_text = "Your antagonistic nature has removed your blood deficiency."
medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood."
/datum/quirk/blooddeficiency/on_process()
@@ -38,6 +39,8 @@
var/obj/item/heirloom
var/where
+GLOBAL_LIST_EMPTY(family_heirlooms)
+
/datum/quirk/family_heirloom/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/heirloom_type
@@ -76,6 +79,7 @@
/obj/item/lighter,
/obj/item/dice/d20)
heirloom = new heirloom_type(get_turf(quirk_holder))
+ GLOB.family_heirlooms += heirloom
var/list/slots = list(
"in your left pocket" = SLOT_L_STORE,
"in your right pocket" = SLOT_R_STORE,
@@ -140,9 +144,8 @@
/datum/quirk/nearsighted/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H))
- H.put_in_hands(glasses)
- H.equip_to_slot(glasses, SLOT_GLASSES)
- H.regenerate_icons() //this is to remove the inhand icon, which persists even if it's not in their hands
+ if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES))
+ H.put_in_hands(glasses)
/datum/quirk/nyctophobia
name = "Nyctophobia"
@@ -188,11 +191,7 @@
gain_text = "You feel repulsed by the thought of violence! "
lose_text = "You think you can defend yourself again. "
medical_record_text = "Patient is unusually pacifistic and cannot bring themselves to cause physical harm."
-
-/datum/quirk/nonviolent/on_process()
- if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums))
- to_chat(quirk_holder, "Your antagonistic nature has caused you to renounce your pacifism. ")
- qdel(src)
+ antag_removal_text = "Your antagonistic nature has caused you to renounce your pacifism."
/datum/quirk/paraplegic
name = "Paraplegic"
@@ -355,6 +354,7 @@
gain_text = "You find yourself unable to speak! "
lose_text = "You feel a growing strength in your vocal chords. "
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
+ antag_removal_text = "Your antagonistic nature has caused your voice to be heard."
var/datum/brain_trauma/severe/mute/mute
/datum/quirk/mute/add()
@@ -366,11 +366,6 @@
var/mob/living/carbon/human/H = quirk_holder
H?.cure_trauma_type(mute, TRAUMA_RESILIENCE_ABSOLUTE)
-/datum/quirk/mute/on_process()
- if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums))
- to_chat(quirk_holder, "Your antagonistic nature has caused your voice to be heard. ")
- qdel(src)
-
/datum/quirk/unstable
name = "Unstable"
desc = "Due to past troubles, you are unable to recover your sanity if you lose it. Be very careful managing your mood!"
diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm
index 01b9facbb8..6761ecbb4c 100644
--- a/code/datums/weather/weather.dm
+++ b/code/datums/weather/weather.dm
@@ -61,7 +61,7 @@
if(A.z in impacted_z_levels)
impacted_areas |= A
weather_duration = rand(weather_duration_lower, weather_duration_upper)
- START_PROCESSING(SSweather, src)
+ START_PROCESSING(SSweather, src) //The reason this doesn't start and stop at main stage is because processing list is also used to see active running weathers (for example, you wouldn't want two ash storms starting at once.)
update_areas()
for(var/M in GLOB.player_list)
var/turf/mob_turf = get_turf(M)
@@ -107,6 +107,14 @@
STOP_PROCESSING(SSweather, src)
update_areas()
+/datum/weather/process()
+ if(aesthetic || (stage != MAIN_STAGE))
+ return
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
+ if(can_weather_act(L))
+ weather_act(L)
+
/datum/weather/proc/can_weather_act(mob/living/L) //Can this weather impact a mob?
var/turf/mob_turf = get_turf(L)
if(mob_turf && !(mob_turf.z in impacted_z_levels))
diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm
index 315cfa59d6..b6699540c3 100644
--- a/code/datums/wires/airlock.dm
+++ b/code/datums/wires/airlock.dm
@@ -52,7 +52,7 @@
/datum/wires/airlock/interactable(mob/user)
var/obj/machinery/door/airlock/A = holder
- if(!issilicon(user) && A.isElectrified() && A.shock(user, 100))
+ if(!A.hasSiliconAccessInArea(user) && A.isElectrified() && A.shock(user, 100))
return FALSE
if(A.panel_open)
return TRUE
diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm
index 0c66f26a92..114791e873 100644
--- a/code/datums/wires/vending.dm
+++ b/code/datums/wires/vending.dm
@@ -12,7 +12,7 @@
/datum/wires/vending/interactable(mob/user)
var/obj/machinery/vending/V = holder
- if(!issilicon(user) && V.seconds_electrified && V.shock(user, 100))
+ if(!V.hasSiliconAccessInArea(user) && V.seconds_electrified && V.shock(user, 100))
return FALSE
if(V.panel_open)
return TRUE
diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
index ca2ebfe00d..a45e989318 100644
--- a/code/game/gamemodes/bloodsucker/bloodsucker.dm
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -7,7 +7,7 @@
// LISTS //
var/list/vassal_allowed_antags = list(/datum/antagonist/brother, /datum/antagonist/traitor, /datum/antagonist/traitor/internal_affairs, /datum/antagonist/survivalist, \
- /datum/antagonist/rev, /datum/antagonist/nukeop, /datum/antagonist/pirate, /datum/antagonist/cult, /datum/antagonist/abductee)
+ /datum/antagonist/rev, /datum/antagonist/nukeop, /datum/antagonist/pirate, /datum/antagonist/cult, /datum/antagonist/abductee, /datum/antagonist/valentine, /datum/antagonist/heartbreaker,)
// The antags you're allowed to be if turning Vassal.
/proc/isvamp(mob/living/M)
return istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/bloodsucker)
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index 821c819664..6ea357163f 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -41,7 +41,7 @@ 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)
+GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
/datum/game_mode/dynamic
name = "dynamic mode"
@@ -239,12 +239,20 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, null)
. += "Peaceful Waypoint "
. += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive. However, even deep in our territory there may be subversive elements, especially for such a high-value target as your station. Keep an eye out, but don't expect much trouble."
set_security_level(SEC_LEVEL_GREEN)
+ for(var/T in subtypesof(/datum/station_goal))
+ var/datum/station_goal/G = new T
+ if(!(G in station_goals))
+ station_goals += G
if(21 to 79)
var/perc_green = 100-round(100*((threat_level-21)/(79-21)))
if(prob(perc_green))
. += "Core Territory "
. += "Your station orbits within reliably mundane, secure space. Although Nanotrasen has a firm grip on security in your region, the valuable resources and strategic position aboard your station make it a potential target for infiltrations. Monitor crew for non-loyal behavior, but expect a relatively tame shift free of large-scale destruction. We expect great things from your station."
set_security_level(SEC_LEVEL_GREEN)
+ for(var/T in subtypesof(/datum/station_goal))
+ var/datum/station_goal/G = new T
+ if(!(G in station_goals))
+ station_goals += G
else if(prob(perc_green))
. += "Contested System "
. += "Your station's orbit passes along the edge of Nanotrasen's sphere of influence. While subversive elements remain the most likely threat against your station, hostile organizations are bolder here, where our grip is weaker. Exercise increased caution against elite Syndicate strike forces, or Executives forbid, some kind of ill-conceived unionizing attempt."
@@ -273,7 +281,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, null)
if(GLOB.security_level >= SEC_LEVEL_BLUE)
priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", "intercept")
else
- priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no likely threats to [station_name()]. Have a secure shift!", "Security Report", "commandreport")
+ priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no likely threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", "commandreport")
// Yes, this is copy pasted from game_mode
/datum/game_mode/dynamic/check_finished(force_ending)
@@ -346,7 +354,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, null)
generate_threat()
storyteller.start_injection_cooldowns()
-
+ SSevents.frequency_lower = storyteller.event_frequency_lower // 6 minutes by default
+ SSevents.frequency_upper = storyteller.event_frequency_upper // 20 minutes by default
log_game("DYNAMIC: Dynamic Mode initialized with a Threat Level of... [threat_level]!")
initial_threat_level = threat_level
return TRUE
@@ -395,7 +404,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, null)
/datum/game_mode/dynamic/post_setup(report)
update_playercounts()
-
+
for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules)
addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay)
..()
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index f4e9971a05..f6755057e2 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -47,6 +47,8 @@
assigned += M.mind
M.mind.special_role = antag_flag
M.mind.add_antag_datum(antag_datum)
+ log_admin("[M.name] was made into a [name] by dynamic.")
+ message_admins("[M.name] was made into a [name] by dynamic.")
return TRUE
//////////////////////////////////////////////
@@ -72,12 +74,6 @@
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.")
-
//////////////////////////////////////////////
// //
// REVOLUTIONARY PROVOCATEUR //
@@ -225,3 +221,25 @@
log_admin("[M.name] was made into a bloodsucker by dynamic.")
message_admins("[M.name] was made into a bloodsucker by dynamic.")
return TRUE
+
+//////////////////////////////////////////////
+// //
+// COLLECTOR //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/latejoin/collector
+ name = "Contraband Collector"
+ config_tag = "latejoin_collector"
+ antag_datum = /datum/antagonist/collector
+ antag_flag = ROLE_MINOR_ANTAG
+ 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 = 1
+ requirements = list(10,10,10,10,10,10,10,10,10,10)
+ high_population_requirement = 10
+ repeatable = TRUE
+ flags = TRAITOR_RULESET
+ property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 2)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 92a02f5920..abd560171e 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -494,7 +494,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)
+ property_weights = list("story_potential" = 1, "trust" = 1, "extended" = 1, "valid" = 2, "integrity" = 1)
var/list/spawn_locs = list()
/datum/dynamic_ruleset/midround/from_ghosts/nightmare/execute()
diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm
index afa6ed8ba7..303c436f99 100644
--- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm
+++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm
@@ -1,5 +1,6 @@
/datum/dynamic_storyteller
var/name = "none"
+ var/config_tag = null
var/desc = "A coder's idiocy."
var/list/property_weights = list()
var/curve_centre = 0
@@ -7,6 +8,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/event_frequency_lower = 6 MINUTES
+ var/event_frequency_upper = 20 MINUTES
var/datum/game_mode/dynamic/mode = null
/**
@@ -20,14 +23,6 @@ Property weights are:
"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
@@ -42,7 +37,28 @@ Property weights are:
return
/datum/dynamic_storyteller/proc/on_start()
- return
+ if (istype(SSticker.mode, /datum/game_mode/dynamic))
+ mode = SSticker.mode
+ GLOB.dynamic_curve_centre = curve_centre
+ GLOB.dynamic_curve_width = curve_width
+ if(flags & USE_PREF_WEIGHTS)
+ var/voters = 0
+ var/mean = 0
+ for(var/client/c in GLOB.clients)
+ var/vote = c.prefs.preferred_chaos
+ if(vote)
+ voters += 1
+ switch(vote)
+ if(CHAOS_NONE)
+ mean -= 5
+ if(CHAOS_LOW)
+ mean -= 2.5
+ if(CHAOS_HIGH)
+ mean += 2.5
+ if(CHAOS_MAX)
+ mean += 5
+ GLOB.dynamic_curve_centre += (mean/voters)
+ GLOB.dynamic_forced_threat_level = forced_threat_level
/datum/dynamic_storyteller/proc/get_midround_cooldown()
var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min)
@@ -154,12 +170,15 @@ Property weights are:
/datum/dynamic_storyteller/cowabunga
name = "Chaotic"
+ config_tag = "chaotic"
curve_centre = 10
desc = "Chaos: high. Variation: high. Likely antags: clock cult, revs, wizard."
property_weights = list("extended" = -1, "chaos" = 10)
- weight = 2
+ weight = 1
+ event_frequency_lower = 2 MINUTES
+ event_frequency_upper = 10 MINUTES
flags = WAROPS_ALWAYS_ALLOWED
- var/refund_cooldown
+ var/refund_cooldown = 0
/datum/dynamic_storyteller/cowabunga/get_midround_cooldown()
return ..() / 4
@@ -169,12 +188,13 @@ Property weights are:
/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
+ mode.refund_threat(20)
+ mode.log_threat("Cowabunga it is. Refunded 20 threat. Threat is now [mode.threat].")
+ refund_cooldown = world.time + 600 SECONDS
/datum/dynamic_storyteller/team
name = "Teamwork"
+ config_tag = "teamwork"
desc = "Chaos: high. Variation: low. Likely antags: nukies, clockwork cult, wizard, blob, xenomorph."
curve_centre = 2
curve_width = 1.5
@@ -187,6 +207,7 @@ Property weights are:
/datum/dynamic_storyteller/conversion
name = "Conversion"
+ config_tag = "conversion"
desc = "Chaos: high. Variation: medium. Likely antags: cults, bloodsuckers, revs."
curve_centre = 3
curve_width = 1
@@ -196,24 +217,33 @@ Property weights are:
/datum/dynamic_storyteller/classic
name = "Random"
+ config_tag = "random"
desc = "Chaos: varies. Variation: highest. No special weights attached."
weight = 6
+ flags = USE_PREF_WEIGHTS
curve_width = 4
/datum/dynamic_storyteller/memes
name = "Story"
+ config_tag = "story"
desc = "Chaos: varies. Variation: high. Likely antags: abductors, nukies, wizard, traitor."
+ weight = 4
+ flags = USE_PREF_WEIGHTS
curve_width = 4
property_weights = list("story_potential" = 10)
/datum/dynamic_storyteller/suspicion
name = "Intrigue"
+ config_tag = "intrigue"
desc = "Chaos: low. Variation: high. Likely antags: traitor, bloodsucker. Rare: revs, blood cult."
+ weight = 4
+ flags = USE_PREF_WEIGHTS
curve_width = 4
property_weights = list("trust" = -5)
/datum/dynamic_storyteller/liteextended
name = "Calm"
+ config_tag = "calm"
desc = "Chaos: low. Variation: medium. Likely antags: bloodsuckers, traitors, sentient disease, revenant."
curve_centre = -5
curve_width = 0.5
@@ -226,10 +256,12 @@ Property weights are:
/datum/dynamic_storyteller/extended
name = "Extended"
+ config_tag = "extended"
desc = "Chaos: none. Variation: none. Likely antags: none."
curve_centre = -20
- weight = 2
+ weight = 0
curve_width = 0.5
/datum/dynamic_storyteller/extended/on_start()
+ ..()
GLOB.dynamic_forced_extended = TRUE
diff --git a/code/game/gamemodes/gangs/gangs.dm b/code/game/gamemodes/gangs/gangs.dm
index 9151107d6f..0dc4a520ef 100644
--- a/code/game/gamemodes/gangs/gangs.dm
+++ b/code/game/gamemodes/gangs/gangs.dm
@@ -6,7 +6,8 @@ GLOBAL_LIST_EMPTY(gangs)
name = "gang war"
config_tag = "gang"
antag_flag = ROLE_GANG
- restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security")
+ 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 = 15
required_enemies = 0
recommended_enemies = 2
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index b7003e4f1e..459ff2f3d6 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -9,9 +9,10 @@ GLOBAL_LIST_EMPTY(objectives)
var/explanation_text = "Nothing" //What that person is supposed to do.
var/team_explanation_text //For when there are multiple owners.
var/datum/mind/target = null //If they are focused on a particular person.
- var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter.
- var/completed = 0 //currently only used for custom objectives.
- var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead.
+ var/target_amount = FALSE //If they are focused on a particular number. Steal objectives have their own counter.
+ var/completed = FALSE //currently only used for custom objectives.
+ var/completable = TRUE //Whether this objective shows greentext when completed
+ var/martyr_compatible = FALSE //If the objective is compatible with martyr objective, i.e. if you can still do it while dead.
/datum/objective/New(var/text)
GLOB.objectives += src // CITADEL EDIT FOR CRYOPODS
@@ -172,6 +173,26 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective/assassinate/admin_edit(mob/admin)
admin_simple_target_pick(admin)
+/datum/objective/assassinate/once
+ name = "kill once"
+ var/won = FALSE
+
+/datum/objective/assassinate/once/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Kill [target.name], the [!target_role_type ? target.assigned_role : target.special_role]. You only need to kill them once; if they come back, you've still succeeded."
+ START_PROCESSING(SSprocessing,src)
+ else
+ explanation_text = "Free Objective"
+
+/datum/objective/assassinate/once/check_completion()
+ return won || ..()
+
+/datum/objective/assassinate/once/process()
+ won = check_completion()
+ if(won)
+ STOP_PROCESSING(SSprocessing,src)
+
/datum/objective/assassinate/internal
var/stolen = 0 //Have we already eliminated this target?
@@ -365,6 +386,28 @@ GLOBAL_LIST_EMPTY(objectives)
return FALSE
return TRUE
+/datum/objective/breakout
+ name = "breakout"
+ martyr_compatible = 1
+ var/target_role_type = 0
+ var/human_check = TRUE
+
+/datum/objective/breakout/check_completion()
+ return !target || considered_escaped(target)
+
+/datum/objective/breakout/find_target_by_role(role, role_type=0, invert=0)
+ if(!invert)
+ target_role_type = role_type
+ ..()
+ return target
+
+/datum/objective/breakout/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Make sure [target.name], the [!target_role_type ? target.assigned_role : target.special_role] escapes on the shuttle or an escape pod alive and without being in custody."
+ else
+ explanation_text = "Free Objective"
+
/datum/objective/escape/escape_with_identity
name = "escape with identity"
var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
@@ -582,7 +625,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
explanation_text = "Do not give up or lose [targetinfo.name]."
steal_target = targetinfo.targetitem
-
/datum/objective/download
name = "download"
@@ -786,40 +828,10 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/destroy/internal
var/stolen = FALSE //Have we already eliminated this target?
-/datum/objective/steal_five_of_type
- name = "steal five of"
- explanation_text = "Steal at least five items!"
- var/list/wanted_items = list(/obj/item)
-
-/datum/objective/steal_five_of_type/New()
- ..()
- wanted_items = typecacheof(wanted_items)
-
-/datum/objective/steal_five_of_type/summon_guns
- name = "steal guns"
- explanation_text = "Steal at least five guns!"
- wanted_items = list(/obj/item/gun)
-
-/datum/objective/steal_five_of_type/summon_magic
- name = "steal magic"
- explanation_text = "Steal at least five magical artefacts!"
- wanted_items = list(/obj/item/spellbook, /obj/item/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/scrying, /obj/item/antag_spawner/contract, /obj/item/necromantic_stone)
-
-/datum/objective/steal_five_of_type/check_completion()
- var/list/datum/mind/owners = get_owners()
- var/stolen_count = 0
- for(var/datum/mind/M in owners)
- if(!isliving(M.current))
- continue
- var/list/all_items = M.current.GetAllContents() //this should get things in cheesewheels, books, etc.
- for(var/obj/I in all_items) //Check for wanted items
- if(is_type_in_typecache(I, wanted_items))
- stolen_count++
- return stolen_count >= 5
-
//Created by admin tools
/datum/objective/custom
name = "custom"
+ completable = FALSE
/datum/objective/custom/admin_edit(mob/admin)
var/expl = stripped_input(admin, "Custom objective:", "Objective", explanation_text)
@@ -997,4 +1009,147 @@ GLOBAL_LIST_EMPTY(possible_items_special)
command_staff_only = TRUE
+/datum/objective/hoard
+ name = "hoard"
+ var/obj/item/hoarded_item = null
+/datum/objective/hoard/get_target()
+ return hoarded_item
+
+/datum/objective/hoard/proc/set_target(obj/item/I)
+ if(I)
+ hoarded_item = I
+ explanation_text = "Keep [I] on your person at all times."
+ return hoarded_item
+ else
+ explanation_text = "Free objective"
+ return
+
+/datum/objective/hoard/check_completion()
+ var/list/datum/mind/owners = get_owners()
+ if(!hoarded_item)
+ return TRUE
+ for(var/datum/mind/M in owners)
+ if(!isliving(M.current))
+ continue
+
+ var/list/all_items = M.current.GetAllContents() //this should get things in cheesewheels, books, etc.
+
+ for(var/obj/I in all_items) //Check for items
+ if(I == hoarded_item)
+ return TRUE
+ return FALSE
+
+/datum/objective/hoard/heirloom
+ name = "steal heirloom"
+
+/datum/objective/hoard/heirloom/find_target()
+ set_target(pick(GLOB.family_heirlooms))
+
+GLOBAL_LIST_EMPTY(traitor_contraband)
+
+GLOBAL_LIST_EMPTY(cult_contraband)
+
+/datum/objective/hoard/collector
+ name = "Hoard contraband"
+
+/datum/objective/collector/New()
+ ..()
+ if(!GLOB.traitor_contraband.len)//Only need to fill the list when it's needed.
+ GLOB.traitor_contraband = list(/obj/item/card/emag/empty,/obj/item/clothing/glasses/phantomthief,/obj/item/clothing/gloves/chameleon/broken)
+ if(!GLOB.cult_contraband.len)
+ GLOB.cult_contraband = list(/obj/item/clockwork/slab,/obj/item/clockwork/component/belligerent_eye,/obj/item/clockwork/component/belligerent_eye/lens_gem,/obj/item/shuttle_curse,/obj/item/cult_shift)
+
+/datum/objective/hoard/collector/find_target()
+ var/obj/item/I
+ var/I_type
+ if(prob(50))
+ I_type = pick_n_take(GLOB.traitor_contraband) // always unique unless it's run out, in which case we refill it anyway
+ else
+ I_type = pick_n_take(GLOB.cult_contraband)
+ I = new I_type
+ I.forceMove(get_turf(owner))
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK))
+ hoarded_item = I
+
+
+
+GLOBAL_LIST_EMPTY(possible_sabotages)
+// For saboteurs. Go in and cause some trouble somewhere. Not necessarily breaking things, just sufficiently troublemaking.
+/datum/objective/sabotage
+ name = "sabotage"
+ var/datum/sabotage_objective/targetinfo = null //composition > inheritance.
+
+/datum/objective/sabotage/get_target()
+ return targetinfo.sabotage_type
+
+/datum/objective/sabotage/New()
+ ..()
+ if(!GLOB.possible_sabotages.len)//Only need to fill the list when it's needed.
+ for(var/I in subtypesof(/datum/sabotage_objective))
+ new I
+
+/datum/objective/sabotage/find_target()
+ var/list/datum/mind/owners = get_owners()
+ var/approved_targets = list()
+ check_sabotages:
+ for(var/datum/sabotage_objective/possible_sabotage in GLOB.possible_sabotages)
+ if(!is_unique_objective(possible_sabotage.sabotage_type) || possible_sabotage.check_conditions())
+ continue
+ for(var/datum/mind/M in owners)
+ if(M.current.mind.assigned_role in possible_sabotage.excludefromjob)
+ continue check_sabotages
+ approved_targets += possible_sabotage
+ return set_target(safepick(approved_targets))
+
+/datum/objective/sabotage/proc/set_target(datum/sabotage_objective/sabo)
+ if(sabo)
+ targetinfo = sabo
+ explanation_text = "[targetinfo.name]"
+ give_special_equipment(targetinfo.special_equipment)
+ return sabo
+ else
+ explanation_text = "Free objective"
+ return
+
+/datum/objective/sabotage/check_completion()
+ return targetinfo.check_conditions()
+
+/datum/objective/flavor
+ name = "flavor"
+ completable = FALSE
+ var/flavor_file
+
+/datum/objective/flavor/proc/get_flavor_list()
+ return world.file2list(flavor_file)
+
+/datum/objective/flavor/proc/forge_objective()
+ var/flavor_list = get_flavor_list()
+ explanation_text = pick(flavor_list)
+
+/datum/objective/flavor/traitor
+ name = "traitor flavor"
+ flavor_file = "strings/flavor_objectives/traitor.txt"
+
+/datum/objective/flavor/traitor/get_flavor_list()
+ . = ..()
+ switch(owner.assigned_role)
+ if("Station Engineer", "Atmospheric Technician")
+ . += world.file2list("strings/flavor_objectives/traitor/engineering.txt")
+ if("Medical Doctor","Chemist","Virologist","Geneticist")
+ . += world.file2list("strings/flavor_objectives/traitor/medical.txt")
+ if("Scientist","Roboticist","Geneticist")
+ . += world.file2list("strings/flavor_objectives/traitor/science.txt")
+ if("Assistant")
+ . += world.file2list("strings/flavor_objectives/traitor/assistant.txt")
+
+/datum/objective/flavor/ninja_helping
+ flavor_file = "strings/flavor_objectives/ninja_helping.txt"
+
+/datum/objective/flavor/ninja_syndie
+ flavor_file = "strings/flavor_objectives/ninja_syndie.txt"
+
+/datum/objective/flavor/wizard
+ flavor_file = "strings/flavor_objectives/wizard.txt"
diff --git a/code/game/gamemodes/objective_sabotage.dm b/code/game/gamemodes/objective_sabotage.dm
new file mode 100644
index 0000000000..248524f1d2
--- /dev/null
+++ b/code/game/gamemodes/objective_sabotage.dm
@@ -0,0 +1,107 @@
+/datum/sabotage_objective
+ var/name = "Free Objective"
+ var/sabotage_type = "nothing"
+ var/special_equipment = list()
+ var/list/excludefromjob = list()
+
+/datum/sabotage_objective/New()
+ ..()
+ if(sabotage_type!="nothing")
+ GLOB.possible_sabotages += src
+
+/datum/sabotage_objective/proc/check_conditions()
+ return TRUE
+
+/datum/sabotage_objective/processing
+ var/won = FALSE
+
+/datum/sabotage_objective/processing/New()
+ ..()
+ START_PROCESSING(SSprocessing, src)
+
+/datum/sabotage_objective/processing/proc/check_condition_processing()
+ return 100
+
+/datum/sabotage_objective/processing/process()
+ check_condition_processing()
+ if(won >= 100)
+ STOP_PROCESSING(SSprocessing,src)
+
+/datum/sabotage_objective/processing/check_conditions()
+ return won
+
+/datum/sabotage_objective/processing/power_sink
+ name = "Drain at least 1 gigajoule of power using a power sink."
+ sabotage_type = "powersink"
+ special_equipment = list(/obj/item/powersink)
+ var/sink_found = FALSE
+ var/count = 0
+
+/datum/sabotage_objective/processing/power_sink/check_condition_processing()
+ count += 1
+ if(count==10 || sink_found) // doesn't need to fire that often unless a sink exists
+ var/sink_found_this_time = FALSE
+ for(var/datum/powernet/PN in GLOB.powernets)
+ for(var/obj/item/powersink/sink in PN.nodes)
+ sink_found_this_time = TRUE
+ won = max(won,sink.power_drained/1e9)
+ sink_found = sink_found_this_time
+ count = 0
+ return FALSE
+
+/obj/item/paper/guides/antag/supermatter_sabotage
+ info = "Ways to sabotage a supermatter: \
+ \
+ Set the air alarm's operating mode to anything that isn't 'draught' (yes, anything, though 'off' works best). Or just smash the air alarm, that works too. \
+ Wrench a pipe (the junction to the cold loop is most effective, but some setups will robust through this no issue; best to try for multiple) \
+ Pump in as much carbon dioxide, oxygen, plasma or tritium as you can find (this will likely also cause a singularity or tesla delamination, so watch out!) \
+ Unset the filters on the cooling loop, or, perhaps more insidious, set them to oxygen/plasma. \
+ Deactivate the digital valve that sends the exhaust gases to space (note: only works on box station; others you must unwrench). \
+ There are many other ways; be creative! \
+ "
+
+/datum/sabotage_objective/processing/supermatter
+ name = "Sabotage the supermatter so that it goes under 50% integrity. If it is delaminated, you will fail."
+ sabotage_type = "supermatter"
+ special_equipment = list(/obj/item/paper/guides/antag/supermatter_sabotage)
+ var/list/supermatters = list()
+ excludefromjob = list("Chief Engineer", "Station Engineer", "Atmospheric Technician")
+
+/datum/sabotage_objective/processing/supermatter/check_condition_processing()
+ if(!supermatters.len)
+ supermatters = list()
+ for(var/obj/machinery/power/supermatter_crystal/S in GLOB.machines)
+ // Delaminating, not within coverage, not on a tile.
+ if (!isturf(S.loc) || !(is_station_level(S.z) || is_mining_level(S.z)))
+ continue
+ supermatters.Add(S)
+ for(var/obj/machinery/power/supermatter_crystal/S in supermatters) // you can win this with a wishgranter... lol.
+ won = max(1-((S.get_integrity()-50)/50),won)
+ return FALSE
+
+/datum/sabotage_objective/station_integrity
+ name = "Make sure the station is at less than 80% integrity by the end. Smash walls, windows etc. to reach this goal."
+ sabotage_type = "integrity"
+
+/datum/sabotage_objective/station_integrity/check_conditions()
+ return 5-(max(SSticker.station_integrity*4,320)/80)
+
+/datum/sabotage_objective/cloner
+ name = "Destroy all Nanotrasen cloning machines."
+ sabotage_type = "cloner"
+
+/datum/sabotage_objective/cloner/check_conditions()
+ return !(locate(/obj/machinery/clonepod) in GLOB.machines)
+
+/datum/sabotage_objective/ai_law
+ name = "Upload a hacked law to the AI."
+ sabotage_type = "ailaw"
+ special_equipment = list(/obj/item/aiModule/syndicate)
+ excludefromjob = list("Chief Engineer","Research Director","Head of Personnel","Captain","Chief Medical Officer","Head Of Security")
+
+/datum/sabotage_objective/ai_law/check_conditions()
+ for (var/i in GLOB.ai_list)
+ var/mob/living/silicon/ai/aiPlayer = i
+ if(aiPlayer.mind && length(aiPlayer.laws.hacked))
+ return TRUE
+ return FALSE
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index b6dc09eb59..b5ab859797 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -182,7 +182,7 @@
/obj/machinery/sleeper/AltClick(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(state_open)
close_machine()
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index a0666b3133..7132f046e6 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -229,7 +229,7 @@ Class Procs:
return !(stat & (NOPOWER|BROKEN|MAINT))
/obj/machinery/can_interact(mob/user)
- var/silicon = issiliconoradminghost(user)
+ var/silicon = hasSiliconAccessInArea(user) || IsAdminGhost(user)
if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE))
return FALSE
if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN))
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index 56227cdd53..5a597f7280 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
/obj/machinery/announcement_system/ui_interact(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(stat & BROKEN)
visible_message("[src] buzzes. ", "You hear a faint buzz. ")
@@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
/obj/machinery/announcement_system/Topic(href, href_list)
if(..())
return
- if(!usr.canUseTopic(src, !issilicon(usr)))
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
if(stat & BROKEN)
visible_message("[src] buzzes. ", "You hear a faint buzz. ")
@@ -132,13 +132,13 @@ GLOBAL_LIST_EMPTY(announcement_systems)
if(href_list["ArrivalTopic"])
var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival)
- if(!usr.canUseTopic(src, !issilicon(usr)))
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
if(NewMessage)
arrival = NewMessage
else if(href_list["NewheadTopic"])
var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead)
- if(!usr.canUseTopic(src, !issilicon(usr)))
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
if(NewMessage)
newhead = NewMessage
@@ -157,7 +157,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
. = attack_ai(user)
/obj/machinery/announcement_system/attack_ai(mob/user)
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(stat & BROKEN)
to_chat(user, "[src]'s firmware appears to be malfunctioning! ")
diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm
index 641ef1c9cd..3e32c4ceeb 100644
--- a/code/game/machinery/computer/arcade/minesweeper.dm
+++ b/code/game/machinery/computer/arcade/minesweeper.dm
@@ -304,12 +304,12 @@
/obj/machinery/computer/arcade/minesweeper/proc/custom_generation(mob/user)
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) //Entered into the menu so ping sound
var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num
- if(!new_rows || !user.canUseTopic(src, !issilicon(user)))
+ if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return FALSE
new_rows = CLAMP(new_rows + 1, 4, 30)
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num
- if(!new_columns || !user.canUseTopic(src, !issilicon(user)))
+ if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return FALSE
new_columns = CLAMP(new_columns + 1, 4, 50)
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
@@ -317,7 +317,7 @@
var/lower_limit = round(grid_area*0.156)
var/upper_limit = round(grid_area*0.85)
var/new_mine_limit = input(user, "How many mines do you want? (Minimum: [lower_limit], Maximum: [upper_limit])", "Minesweeper Mines") as null|num
- if(!new_mine_limit || !user.canUseTopic(src, !issilicon(user)))
+ if(!new_mine_limit || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return FALSE
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
rows = new_rows
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 1d54e8f772..211ff13486 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -36,7 +36,7 @@
return ..()
/obj/machinery/computer/security/can_interact(mob/user)
- if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
+ if((!hasSiliconAccessInArea(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src))
return FALSE
return ..()
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 6703bae525..b0e80b63d2 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -171,7 +171,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/AltClick(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)) || !is_operational())
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)) || !is_operational())
return
if(inserted_modify_id)
if(id_eject(user, inserted_modify_id))
@@ -360,7 +360,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(..())
return
- if(!usr.canUseTopic(src, !issilicon(usr)) || !is_operational())
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)) || !is_operational())
usr.unset_machine()
usr << browse(null, "window=id_com")
return
@@ -392,7 +392,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
inserted_scan_id = id_to_insert
updateUsrDialog()
if ("auth")
- if ((!( authenticated ) && (inserted_scan_id || issilicon(usr)) || mode))
+ if ((!( authenticated ) && (inserted_scan_id || hasSiliconAccessInArea(usr)) || mode))
if (check_access(inserted_scan_id))
region_access = list()
head_subordinates = list()
@@ -426,7 +426,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
get_subordinates("Quartermaster")
if(region_access)
authenticated = 1
- else if ((!( authenticated ) && issilicon(usr)) && (!inserted_modify_id))
+ else if ((!( authenticated ) && hasSiliconAccessInArea(usr)) && (!inserted_modify_id))
to_chat(usr, "You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in. ")
if ("logout")
region_access = null
@@ -481,7 +481,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if ("reg")
if (authenticated)
var/t2 = inserted_modify_id
- if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc)))
+ if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || hasSiliconAccessInArea(usr)) && isturf(loc)))
var/newName = reject_bad_name(href_list["reg"])
if(newName)
inserted_modify_id.registered_name = newName
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 59574bc603..9d0053c9b2 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -449,7 +449,7 @@
var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
- if(issilicon(user))
+ if(issilicon(user) || (hasSiliconAccessInArea(user) && !in_range(user,src)))
var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access
if(dat2)
dat += dat2
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index 9acec5ab9b..2d83c5343d 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -124,7 +124,7 @@
if(user.client)
var/datum/asset/simple/assets = get_asset_datum(/datum/asset/simple/genetics)
assets.send(user.client)
- if(!(in_range(src, user) || issilicon(user)))
+ if(!(in_range(src, user) || hasSiliconAccessInArea(user)))
popup.close()
return
popup.add_stylesheet("scannernew", 'html/browser/scannernew.css')
@@ -562,7 +562,7 @@
return
if(!isturf(usr.loc))
return
- if(!((isturf(loc) && in_range(src, usr)) || issilicon(usr)))
+ if(!((isturf(loc) && in_range(src, usr)) || hasSiliconAccessInArea(usr)))
return
if(current_screen == "working")
return
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index ecbde43044..f8dac1b100 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -190,7 +190,7 @@
if(!(active2 in GLOB.data_core.medical))
active2 = null
- if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
+ if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr) || IsAdminGhost(usr))
usr.set_machine(src)
if(href_list["temp"])
temp = null
@@ -216,7 +216,7 @@
else if(href_list["login"])
var/mob/M = usr
var/obj/item/card/id/I = M.get_idcard(TRUE)
- if(issilicon(M))
+ if(hasSiliconAccessInArea(M))
active1 = null
active2 = null
authenticated = 1
@@ -569,7 +569,7 @@
if(user)
if(message)
if(authenticated)
- if(user.canUseTopic(src, !issilicon(user)))
+ if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
if(!record1 || record1 == active1)
if(!record2 || record2 == active2)
return 1
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 1388e3c8de..53f7cb7e32 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -86,7 +86,7 @@
/obj/machinery/computer/pod/Topic(href, href_list)
if(..())
return
- if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
+ if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
usr.set_machine(src)
if(href_list["power"])
var/t = text2num(href_list["power"])
diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm
index 496e14b8f1..4b4b39740a 100644
--- a/code/game/machinery/computer/prisoner/management.dm
+++ b/code/game/machinery/computer/prisoner/management.dm
@@ -87,7 +87,7 @@
/obj/machinery/computer/prisoner/management/Topic(href, href_list)
if(..())
return
- if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
+ if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
usr.set_machine(src)
if(href_list["id"])
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 42e31b2ea6..25f4237439 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -265,7 +265,7 @@ What a mess.*/
active1 = null
if(!( GLOB.data_core.security.Find(active2) ))
active2 = null
- if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr))
+ if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr) || IsAdminGhost(usr))
usr.set_machine(src)
switch(href_list["choice"])
// SORTING!
@@ -299,7 +299,7 @@ What a mess.*/
if("Log In")
var/mob/M = usr
var/obj/item/card/id/I = M.get_idcard(TRUE)
- if(issilicon(M))
+ if(hasSiliconAccessInArea(M))
var/mob/living/silicon/borg = M
active1 = null
active2 = null
@@ -802,7 +802,7 @@ What a mess.*/
/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2)
if(user)
if(authenticated)
- if(user.canUseTopic(src, !issilicon(user)))
+ if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
if(!trim(message1))
return 0
if(!record1 || record1 == active1)
diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm
index 518f38fc35..6710258626 100644
--- a/code/game/machinery/computer/teleporter.dm
+++ b/code/game/machinery/computer/teleporter.dm
@@ -140,7 +140,7 @@ obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/t
L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = M
var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L
- if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //check if we are still around
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user), NO_DEXTERY)) //check if we are still around
return
target = L[desc]
if(imp_t)
@@ -168,7 +168,7 @@ obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/t
to_chat(user, "No active connected stations located. ")
return
var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L
- if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //again, check if we are still around
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user), NO_DEXTERY)) //again, check if we are still around
return
var/obj/machinery/teleport/station/target_station = L[desc]
if(!target_station || !target_station.teleporter_hub)
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index c6b4f2fcf5..6b0f00ca2e 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -53,7 +53,7 @@
/obj/machinery/jukebox/ui_interact(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if (!anchored)
to_chat(user,"This device must be anchored by a wrench! ")
@@ -430,6 +430,6 @@
/obj/machinery/jukebox/disco/process()
. = ..()
if(active)
- for(var/mob/M in rangers)
+ for(var/mob/living/M in rangers)
if(prob(5+(allowed(M)*4)) && M.canmove)
dance(M)
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index f3be6ac214..a1931e133a 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -120,7 +120,7 @@
/obj/machinery/defibrillator_mount/AltClick(mob/living/carbon/user)
. = ..()
- if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
. = TRUE
if(!defib)
@@ -129,9 +129,10 @@
if(clamps_locked)
to_chat(user, "You try to tug out [defib], but the mount's clamps are locked tight! ")
return
- if(!user.put_in_hands(defib))
+ if(!user.get_empty_held_indexes())
to_chat(user, "You need a free hand! ")
return
+ user.put_in_hands(defib)
user.visible_message("[user] unhooks [defib] from [src]. ", \
"You slide out [defib] from [src] and unhook the charging cables. ")
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
@@ -147,4 +148,4 @@
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
w_class = WEIGHT_CLASS_BULKY
result_path = /obj/machinery/defibrillator_mount
- pixel_shift = -28
\ No newline at end of file
+ pixel_shift = -28
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 7f21d1c1b3..31e6a3cfeb 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -98,7 +98,7 @@
/obj/machinery/dish_drive/AltClick(mob/living/user)
. = ..()
- if(user.canUseTopic(src, !issilicon(user)))
+ if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
do_the_dishes(TRUE)
return TRUE
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index b45575cdcd..92cb96435d 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -172,7 +172,7 @@
/obj/machinery/dna_scannernew/AltClick(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
interact(user)
return TRUE
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index f28d520114..863f1e7b46 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -676,7 +676,7 @@
else
. += "It looks very robust."
- if(issilicon(user) && (!stat & BROKEN))
+ if(hasSiliconAccessInArea(user) && (!stat & BROKEN))
. += "Shift-click [src] to [ density ? "open" : "close"] it. "
. += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts. "
. += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it. "
@@ -1322,9 +1322,9 @@
if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it! ")
-/obj/machinery/door/airlock/hostile_lockdown(mob/origin)
+/obj/machinery/door/airlock/hostile_lockdown(mob/origin, aicontrolneeded = TRUE)
// Must be powered and have working AI wire.
- if(canAIControl(src) && !stat)
+ if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded)
locked = FALSE //For airlocks that were bolted open.
safe = FALSE //DOOR CRUSH
close()
@@ -1334,9 +1334,9 @@
LAZYADD(shockedby, "\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(origin)]")
-/obj/machinery/door/airlock/disable_lockdown()
+/obj/machinery/door/airlock/disable_lockdown(aicontrolneeded = TRUE)
// Must be powered and have working AI wire.
- if(canAIControl(src) && !stat)
+ if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded)
unbolt()
set_electrified(NOT_ELECTRIFIED)
open()
@@ -1528,7 +1528,7 @@
. = TRUE
/obj/machinery/door/airlock/proc/user_allowed(mob/user)
- return (issilicon(user) && canAIControl(user)) || IsAdminGhost(user)
+ return (hasSiliconAccessInArea(user) && canAIControl(user)) || IsAdminGhost(user)
/obj/machinery/door/airlock/proc/shock_restore(mob/user)
if(!user_allowed(user))
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 3bfcececda..adc1748ded 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -2,13 +2,11 @@
#define FONT_SIZE "5pt"
#define FONT_COLOR "#09f"
#define FONT_STYLE "Arial Black"
-#define MAX_TIMER 9000
-
-#define PRESET_SHORT 1200
-#define PRESET_MEDIUM 1800
-#define PRESET_LONG 3000
-
+#define MAX_TIMER 15 MINUTES
+#define PRESET_SHORT 2 MINUTES
+#define PRESET_MEDIUM 3 MINUTES
+#define PRESET_LONG 5 MINUTES
///////////////////////////////////////////////////////////////////////////////////////////////
// Brig Door control displays.
@@ -25,7 +23,7 @@
desc = "A remote control for a door."
req_access = list(ACCESS_SECURITY)
density = FALSE
- var/id = null // id of linked machinery/lockers
+ var/id // id of linked machinery/lockers
var/activation_time = 0
var/timer_duration = 0
@@ -43,8 +41,6 @@
Radio = new/obj/item/radio(src)
Radio.listening = 0
-/obj/machinery/door_timer/Initialize()
- . = ..()
if(id != null)
for(var/obj/machinery/door/window/brigdoor/M in urange(20, src))
if (M.id == id)
@@ -71,7 +67,7 @@
return
if(timing)
- if(world.realtime - activation_time >= timer_duration)
+ if(REALTIMEOFDAY - activation_time >= timer_duration)
timer_end() // open doors, reset timer, clear status screen
update_icon()
@@ -80,14 +76,13 @@
..()
update_icon()
-
// open/closedoor checks if door_timer has power, if so it checks if the
// linked door is open/closed (by density) then opens it/closes it.
/obj/machinery/door_timer/proc/timer_start()
if(stat & (NOPOWER|BROKEN))
return 0
- activation_time = world.realtime
+ activation_time = REALTIMEOFDAY
timing = TRUE
for(var/obj/machinery/door/window/brigdoor/door in targets)
@@ -104,7 +99,6 @@
C.update_icon()
return 1
-
/obj/machinery/door_timer/proc/timer_end(forced = FALSE)
if(stat & (NOPOWER|BROKEN))
@@ -136,7 +130,7 @@
/obj/machinery/door_timer/proc/time_left(seconds = FALSE)
- . = max(0,timer_duration - (activation_time ? world.realtime - activation_time : 0))
+ . = max(0,timer_duration - (activation_time ? REALTIMEOFDAY - activation_time : 0))
if(seconds)
. /= 10
@@ -240,7 +234,7 @@
preset_time = PRESET_LONG
. = set_timer(preset_time)
if(timing)
- activation_time = world.realtime
+ activation_time = REALTIMEOFDAY
else
. = FALSE
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 40430b37b7..8275e981de 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -71,7 +71,7 @@
say("Subject may not have abiotic items on.")
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
return
- if(!(MOB_ORGANIC in C.mob_biotypes))
+ if(!(C.mob_biotypes & MOB_ORGANIC))
say("Subject is not organic.")
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1)
return
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index a27cb9b78c..60085e0bf8 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -348,6 +348,26 @@
spark_system.start() //creates some sparks because they look cool
qdel(cover) //deletes the cover - no need on keeping it there!
+//turret healing
+/obj/machinery/porta_turret/examine(mob/user)
+ . = ..()
+ if(obj_integrity < max_integrity)
+ . += "Use a welder to fix it. "
+
+/obj/machinery/porta_turret/welder_act(mob/living/user, obj/item/I)
+ . = TRUE
+ if(obj_integrity < max_integrity)
+ if(!I.tool_start_check(user, amount=0))
+ return
+ user.visible_message("[user] is welding the turret.", \
+ "You begin repairing the turret... ", \
+ "You hear welding. ")
+ if(I.use_tool(src, user, 40, volume=50))
+ obj_integrity = max_integrity
+ user.visible_message("[user.name] has repaired [src].", \
+ "You finish repairing the turret. ")
+ else
+ to_chat(user, "The turret doesn't need repairing. ")
/obj/machinery/porta_turret/process()
@@ -672,6 +692,7 @@
lethal_projectile_sound = 'sound/weapons/laser.ogg'
desc = "An energy blaster auto-turret."
+
/obj/machinery/porta_turret/syndicate/energy/heavy
icon_state = "standard_stun"
base_icon_state = "standard"
@@ -683,6 +704,11 @@
lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg'
desc = "An energy blaster auto-turret."
+/obj/machinery/porta_turret/syndicate/energy/pirate
+ max_integrity = 260
+ integrity_failure = 20
+ armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+
/obj/machinery/porta_turret/syndicate/setup()
return
@@ -839,7 +865,7 @@
/obj/machinery/turretid/examine(mob/user)
. = ..()
- if(issilicon(user) && (!stat & BROKEN))
+ if(hasSiliconAccessInArea(user) && (!stat & BROKEN))
. += "Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets. "
. += "Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]. "
@@ -854,7 +880,7 @@
to_chat(user, "You link \the [M.buffer] with \the [src]")
return
- if (issilicon(user))
+ if (hasSiliconAccessInArea(user))
return attack_hand(user)
if ( get_dist(src, user) == 0 ) // trying to unlock the interface
@@ -895,7 +921,7 @@
/obj/machinery/turretid/ui_interact(mob/user)
. = ..()
if ( get_dist(src, user) > 0 )
- if ( !(issilicon(user) || IsAdminGhost(user)) )
+ if ( !(hasSiliconAccessInArea(user) || IsAdminGhost(user)) )
to_chat(user, "You are too far away. ")
user.unset_machine()
user << browse(null, "window=turretid")
@@ -903,10 +929,10 @@
var/t = ""
- if(locked && !(issilicon(user) || IsAdminGhost(user)))
+ if(locked && !(hasSiliconAccessInArea(user) || IsAdminGhost(user)))
t += "Swipe ID card to unlock interface
"
else
- if(!issilicon(user) && !IsAdminGhost(user))
+ if(!hasSiliconAccessInArea(user) && !IsAdminGhost(user))
t += "Swipe ID card to lock interface
"
t += "Turrets [enabled?"activated":"deactivated"] - [enabled?"Disable":"Enable"]? "
t += "Currently set for [lethal?"lethal":"stun repeatedly"] - Change to [lethal?"Stun repeatedly":"Lethal"]? "
@@ -920,7 +946,7 @@
if(..())
return
if (locked)
- if(!(issilicon(usr) || IsAdminGhost(usr)))
+ if(!(hasSiliconAccessInArea(usr) || IsAdminGhost(usr)))
to_chat(usr, "Control panel is locked!")
return
if (href_list["toggleOn"])
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 16016b8e18..b4288310b0 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -124,7 +124,7 @@
. = ..()
if(.)
return
- if(locked && !issilicon(user))
+ if(locked && !hasSiliconAccessInArea(user))
to_chat(user, "The machine is locked, you are unable to use it! ")
return
if(panel_open)
@@ -370,7 +370,7 @@
if(!anchored)
to_chat(user, "\The [src] needs to be firmly secured to the floor first! ")
return
- if(locked && !issilicon(user))
+ if(locked && !hasSiliconAccessInArea(user))
to_chat(user, "The controls are locked! ")
return
if(!power)
diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm
index c1db49605c..f2b2c594b7 100644
--- a/code/game/machinery/telecomms/computers/logbrowser.dm
+++ b/code/game/machinery/telecomms/computers/logbrowser.dm
@@ -196,7 +196,7 @@
var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network)
- if(newnet && ((usr in range(1, src)) || issilicon(usr)))
+ if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr)))
if(length(newnet) > 15)
temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY - "
diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm
index 884c2bb37d..5e39997872 100644
--- a/code/game/machinery/telecomms/computers/message.dm
+++ b/code/game/machinery/telecomms/computers/message.dm
@@ -260,7 +260,7 @@
if(..())
return
- if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
+ if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
//Authenticate
if (href_list["auth"])
if(LINKED_SERVER_NONRESPONSIVE)
diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm
index aebef711a9..23c03514ca 100644
--- a/code/game/machinery/telecomms/computers/telemonitor.dm
+++ b/code/game/machinery/telecomms/computers/telemonitor.dm
@@ -108,7 +108,7 @@
if(href_list["network"])
var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network)
- if(newnet && ((usr in range(1, src)) || issilicon(usr)))
+ if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr)))
if(length(newnet) > 15)
temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY - "
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 8cd8b479d8..4de8929b6b 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -30,7 +30,7 @@
/obj/machinery/telecomms/ui_interact(mob/user)
. = ..()
// You need a multitool to use this, or be silicon
- if(!issilicon(user))
+ if(!hasSiliconAccessInArea(user))
// istype returns false if the value is null
if(!istype(user.get_active_held_item(), /obj/item/multitool))
return
@@ -97,7 +97,7 @@
var/obj/item/multitool/P = null
// Let's double check
- if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/multitool))
+ if(!hasSiliconAccessInArea(user) && istype(user.get_active_held_item(), /obj/item/multitool))
P = user.get_active_held_item()
else if(isAI(user))
var/mob/living/silicon/ai/U = user
@@ -162,7 +162,7 @@
if(..())
return
- if(!issilicon(usr))
+ if(!hasSiliconAccessInArea(usr))
if(!istype(usr.get_active_held_item(), /obj/item/multitool))
return
@@ -270,6 +270,6 @@
updateUsrDialog()
/obj/machinery/telecomms/proc/canAccess(mob/user)
- if(issilicon(user) || in_range(user, src))
+ if(hasSiliconAccessInArea(user) || in_range(user, src))
return TRUE
return FALSE
diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm
index 3ff2424d83..4ed2473260 100644
--- a/code/game/machinery/transformer.dm
+++ b/code/game/machinery/transformer.dm
@@ -27,7 +27,7 @@
/obj/machinery/transformer/examine(mob/user)
. = ..()
- if(cooldown && (issilicon(user) || isobserver(user)))
+ if(cooldown && (hasSiliconAccessInArea(user) || isobserver(user)))
. += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]."
/obj/machinery/transformer/Destroy()
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 61ecec40c2..1595c4bb07 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -108,16 +108,17 @@
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list)
..()
- var/datum/topic_input/afilter = new /datum/topic_input(href,href_list)
- if(afilter.get("eject"))
+ if(href_list["eject"])
go_out()
- if(afilter.get("view_stats"))
+ if(href_list["view_stats"])
chassis.occupant << browse(get_patient_stats(),"window=msleeper")
onclose(chassis.occupant, "msleeper")
return
- if(afilter.get("inject"))
- inject_reagent(afilter.getType("inject", /datum/reagent),afilter.getObj("source"))
- return
+ if(href_list["inject"])
+ var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/SG = locate() in chassis
+ var/datum/reagent/R = locate(href_list["inject"]) in SG.reagents.reagent_list
+ if (istype(R))
+ inject_reagent(R, SG)
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats()
if(!patient)
@@ -354,19 +355,18 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Topic(href,href_list)
..()
- var/datum/topic_input/afilter = new (href,href_list)
- if(afilter.get("toggle_mode"))
+ if (href_list["toggle_mode"])
mode = !mode
update_equip_info()
return
- if(afilter.get("select_reagents"))
+ if (href_list["select_reagents"])
processed_reagents.len = 0
var/m = 0
var/message
for(var/i=1 to known_reagents.len)
if(m>=synth_speed)
break
- var/reagent = afilter.get("reagent_[i]")
+ var/reagent = text2path(href_list["reagent_[i]"])
if(reagent && (reagent in known_reagents))
message = "[m ? ", " : null][known_reagents[reagent]]"
processed_reagents += reagent
@@ -375,20 +375,18 @@
message += " added to production"
START_PROCESSING(SSobj, src)
occupant_message(message)
- occupant_message("Reagent processing started.")
+ occupant_message("Reagent processing started. ")
mecha_log_message("Reagent processing started.")
return
- if(afilter.get("show_reagents"))
+ if (href_list["show_reagents"])
chassis.occupant << browse(get_reagents_page(),"window=msyringegun")
- if(afilter.get("purge_reagent"))
- var/reagent = afilter.get("purge_reagent")
+ if (href_list["purge_reagent"])
+ var/reagent = href_list["purge_reagent"]
if(reagent)
reagents.del_reagent(reagent)
return
- if(afilter.get("purge_all"))
+ if (href_list["purge_all"])
reagents.clear_reagents()
- return
- return
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_reagents_page()
var/output = {"
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index a2b36f90b2..e70de0ef8b 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -317,9 +317,8 @@
/obj/machinery/mecha_part_fabricator/Topic(href, href_list)
if(..())
return
- var/datum/topic_input/afilter = new /datum/topic_input(href,href_list)
if(href_list["part_set"])
- var/tpart_set = afilter.getStr("part_set")
+ var/tpart_set = href_list["part_set"]
if(tpart_set)
if(tpart_set=="clear")
part_set = null
@@ -327,7 +326,7 @@
part_set = tpart_set
screen = "parts"
if(href_list["part"])
- var/T = afilter.getStr("part")
+ var/T = href_list["part_set"]
for(var/v in stored_research.researched_designs)
var/datum/design/D = SSresearch.techweb_design_by_id(v)
if(D.build_type & MECHFAB)
@@ -338,7 +337,7 @@
add_to_queue(D)
break
if(href_list["add_to_queue"])
- var/T = afilter.getStr("add_to_queue")
+ var/T = href_list["part_set"]
for(var/v in stored_research.researched_designs)
var/datum/design/D = SSresearch.techweb_design_by_id(v)
if(D.build_type & MECHFAB)
@@ -347,10 +346,10 @@
break
return update_queue_on_page()
if(href_list["remove_from_queue"])
- remove_from_queue(afilter.getNum("remove_from_queue"))
+ remove_from_queue(text2num(href_list["remove_from_queue"]))
return update_queue_on_page()
if(href_list["partset_to_queue"])
- add_part_set_to_queue(afilter.get("partset_to_queue"))
+ add_part_set_to_queue(text2num(href_list["remove_from_queue"]))
return update_queue_on_page()
if(href_list["process_queue"])
spawn(0)
@@ -364,8 +363,8 @@
if(href_list["screen"])
screen = href_list["screen"]
if(href_list["queue_move"] && href_list["index"])
- var/index = afilter.getNum("index")
- var/new_index = index + afilter.getNum("queue_move")
+ var/index = text2num(href_list["index"])
+ var/new_index = index + text2num(href_list["queue_move"])
if(isnum(index) && isnum(new_index) && ISINTEGER(index) && ISINTEGER(new_index))
if(ISINRANGE(new_index,1,queue.len))
queue.Swap(index,new_index)
@@ -376,7 +375,7 @@
if(href_list["sync"])
sync()
if(href_list["part_desc"])
- var/T = afilter.getStr("part_desc")
+ var/T = href_list["part_desc"]
for(var/v in stored_research.researched_designs)
var/datum/design/D = SSresearch.techweb_design_by_id(v)
if(D.build_type & MECHFAB)
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 0188419f0f..61e6c8e5e4 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -39,21 +39,24 @@
/obj/machinery/computer/mecha/Topic(href, href_list)
if(..())
return
- var/datum/topic_input/afilter = new /datum/topic_input(href,href_list)
if(href_list["send_message"])
- var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("send_message")
+ var/obj/item/mecha_parts/mecha_tracking/MT = locate(href_list["send_message"])
+ if (!istype(MT))
+ return
var/message = stripped_input(usr,"Input message","Transmit message")
var/obj/mecha/M = MT.in_mecha()
if(trim(message) && M)
M.occupant_message(message)
return
if(href_list["shock"])
- var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("shock")
- MT.shock()
+ var/obj/item/mecha_parts/mecha_tracking/MT = locate(href_list["shock"])
+ if (istype(MT))
+ MT.shock()
if(href_list["get_log"])
- var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("get_log")
- stored_data = MT.get_mecha_log()
- screen = 1
+ var/obj/item/mecha_parts/mecha_tracking/MT = locate(href_list["get_log"])
+ if(istype(MT))
+ stored_data = MT.get_mecha_log()
+ screen = 1
if(href_list["return"])
screen = 0
updateUsrDialog()
diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm
index 1e0674d7bb..774e30fa5d 100644
--- a/code/game/mecha/mecha_topic.dm
+++ b/code/game/mecha/mecha_topic.dm
@@ -221,73 +221,71 @@
if(usr.incapacitated())
return
- var/datum/topic_input/afilter = new /datum/topic_input(href,href_list)
-
if(in_range(src, usr))
+ var/obj/item/card/id/id_card
+ if (href_list["id_card"])
+ id_card = locate(href_list["id_card"])
+ if (!istype(id_card))
+ return
if(href_list["req_access"] && add_req_access)
- output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user"))
+ output_access_dialog(id_card, usr)
if(href_list["maint_access"] && maint_access)
- var/mob/user = afilter.getMob("user")
- if(user)
- if(state==0)
- state = 1
- to_chat(user, "The securing bolts are now exposed.")
- else if(state==1)
- state = 0
- to_chat(user, "The securing bolts are now hidden.")
- output_maintenance_dialog(afilter.getObj("id_card"),user)
+ if(state==0)
+ state = 1
+ to_chat(usr, "The securing bolts are now exposed.")
+ else if(state==1)
+ state = 0
+ to_chat(usr, "The securing bolts are now hidden.")
+ output_maintenance_dialog(id_card, usr)
if(href_list["set_internal_tank_valve"] && state >=1)
- var/mob/user = afilter.getMob("user")
- if(user)
- var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num
- if(new_pressure)
- internal_tank_valve = new_pressure
- to_chat(user, "The internal pressure valve has been set to [internal_tank_valve]kPa.")
+ var/new_pressure = input(usr,"Input new output pressure","Pressure setting",internal_tank_valve) as num
+ if(new_pressure)
+ internal_tank_valve = new_pressure
+ to_chat(usr, "The internal pressure valve has been set to [internal_tank_valve]kPa.")
- if(href_list["add_req_access"] && add_req_access && afilter.getObj("id_card"))
- operation_req_access += afilter.getNum("add_req_access")
- output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user"))
+ if(href_list["add_req_access"] && add_req_access)
+ operation_req_access += text2num(href_list["add_req_access"])
+ output_access_dialog(id_card, usr)
- if(href_list["del_req_access"] && add_req_access && afilter.getObj("id_card"))
- operation_req_access -= afilter.getNum("del_req_access")
- output_access_dialog(afilter.getObj("id_card"),afilter.getMob("user"))
+ if(href_list["del_req_access"] && add_req_access)
+ operation_req_access -= text2num(href_list["add_req_access"])
+ output_access_dialog(id_card, usr)
if(href_list["finish_req_access"])
add_req_access = 0
- var/mob/user = afilter.getMob("user")
- user << browse(null,"window=exosuit_add_access")
+ usr << browse(null,"window=exosuit_add_access")
if(usr != occupant)
return
if(href_list["update_content"])
- send_byjax(src.occupant,"exosuit.browser","content",src.get_stats_part())
+ send_byjax(usr,"exosuit.browser","content",src.get_stats_part())
if(href_list["select_equip"])
- var/obj/item/mecha_parts/mecha_equipment/equip = afilter.getObj("select_equip")
+ var/obj/item/mecha_parts/mecha_equipment/equip = locate(href_list["select_equip"]) in src
if(equip && equip.selectable)
- src.selected = equip
- src.occupant_message("You switch to [equip]")
- src.visible_message("[src] raises [equip]")
- send_byjax(src.occupant,"exosuit.browser","eq_list",src.get_equipment_list())
+ selected = equip
+ occupant_message("You switch to [equip]")
+ visible_message("[src] raises [equip]")
+ send_byjax(usr, "exosuit.browser","eq_list", get_equipment_list())
if(href_list["rmictoggle"])
radio.broadcasting = !radio.broadcasting
- send_byjax(src.occupant,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged"))
+ send_byjax(usr,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged"))
if(href_list["rspktoggle"])
radio.listening = !radio.listening
- send_byjax(src.occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged"))
+ send_byjax(usr,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged"))
if(href_list["rfreq"])
- var/new_frequency = (radio.frequency + afilter.getNum("rfreq"))
+ var/new_frequency = (radio.frequency + text2num(href_list["rfreq"]))
if (!radio.freerange || (radio.frequency < MIN_FREE_FREQ || radio.frequency > MAX_FREE_FREQ))
new_frequency = sanitize_frequency(new_frequency)
radio.set_frequency(new_frequency)
- send_byjax(src.occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]")
+ send_byjax(usr,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]")
if (href_list["view_log"])
src.occupant << browse(src.get_log_html(), "window=exosuit_log")
@@ -302,14 +300,14 @@
if (href_list["toggle_id_upload"])
add_req_access = !add_req_access
- send_byjax(src.occupant,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel")
+ send_byjax(usr,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel")
if(href_list["toggle_maint_access"])
if(state)
occupant_message("Maintenance protocols in effect ")
return
maint_access = !maint_access
- send_byjax(src.occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols")
+ send_byjax(usr,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols")
if (href_list["toggle_port_connection"])
if(internal_tank.connected_port)
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index 6e8387c07b..eea3bace98 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -57,6 +57,7 @@
var/poster_item_name = "hypothetical poster"
var/poster_item_desc = "This hypothetical poster item should not exist, let's be honest here."
var/poster_item_icon_state = "rolled_poster"
+ var/poster_item_type = /obj/item/poster
/obj/structure/sign/poster/Initialize()
. = ..()
@@ -114,7 +115,7 @@
/obj/structure/sign/poster/proc/roll_and_drop(loc)
pixel_x = 0
pixel_y = 0
- var/obj/item/poster/P = new(loc, src)
+ var/obj/item/poster/P = new poster_item_type(loc, src)
forceMove(P)
return P
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index f47d3b8ed3..c135458873 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -10,7 +10,7 @@
var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn.
var/list/gibdirections = list() //of lists of possible directions to spread each gib decal type towards.
-/obj/effect/gibspawner/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases)
+/obj/effect/gibspawner/Initialize(mapload, mob/living/source_mob, list/datum/disease/diseases, list/blood_dna)
. = ..()
if(gibtypes.len != gibamounts.len)
stack_trace("Gib list amount length mismatch!")
@@ -33,7 +33,7 @@
var/body_coloring = ""
if(source_mob)
if(!issilicon(source_mob))
- dna_to_add = source_mob.get_blood_dna_list() //ez pz
+ dna_to_add = blood_dna || source_mob.get_blood_dna_list() //ez pz
if(ishuman(source_mob))
var/mob/living/carbon/human/H = source_mob
if(H.dna.species.use_skintones)
diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm
index a5a4dfb44b..cdf3f3e6b4 100644
--- a/code/game/objects/effects/spawners/structure.dm
+++ b/code/game/objects/effects/spawners/structure.dm
@@ -163,6 +163,10 @@ again.
icon_state = "plastitaniumwindow_spawner"
spawn_list = list(/obj/structure/grille, /obj/structure/window/plastitanium)
+//plastitanium pirate window
+
+/obj/effect/spawner/structure/window/plastitanium/pirate
+ spawn_list = list(/obj/structure/grille, /obj/structure/window/plastitanium/pirate)
//ice window
diff --git a/code/game/objects/effects/wanted_poster.dm b/code/game/objects/effects/wanted_poster.dm
index 35d16070ff..2e3244b4b8 100644
--- a/code/game/objects/effects/wanted_poster.dm
+++ b/code/game/objects/effects/wanted_poster.dm
@@ -8,6 +8,7 @@
/obj/structure/sign/poster/wanted
var/wanted_name
+ poster_item_type = /obj/item/poster/wanted
/obj/structure/sign/poster/wanted/Initialize(mapload, icon/person_icon, person_name, description)
. = ..()
diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm
index 237aca02a9..8b8a02d190 100644
--- a/code/game/objects/items/RPD.dm
+++ b/code/game/objects/items/RPD.dm
@@ -345,7 +345,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
A = get_turf(A)
var/can_make_pipe = (isturf(A) || is_type_in_typecache(A, make_pipe_whitelist))
- . = FALSE
+ . = TRUE
if((mode & DESTROY_MODE) && istype(A, /obj/item/pipe) || istype(A, /obj/structure/disposalconstruct) || istype(A, /obj/structure/c_transit_tube) || istype(A, /obj/structure/c_transit_tube_pod) || istype(A, /obj/item/pipe_meter))
to_chat(user, "You start destroying a pipe... ")
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 5e5ced2269..f40b7f5c49 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -128,6 +128,9 @@
return
. = ..()
+/obj/item/card/emag/empty
+ uses = 0
+
/obj/item/emagrecharge
name = "electromagnet charging device"
desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices, sadly this can't be recharged like a normal cell."
@@ -538,4 +541,15 @@ update_label("John Doe", "Clowny")
id_color = "#0000FF"
/obj/item/card/id/knight/captain
- id_color = "#FFD700"
\ No newline at end of file
+ id_color = "#FFD700"
+
+/obj/item/card/id/debug
+ name = "\improper Debug ID"
+ desc = "A debug ID card. Has ALL the all access, you really shouldn't have this."
+ icon_state = "ert_janitor"
+ assignment = "Jannie"
+
+/obj/item/card/id/debug/Initialize()
+ access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
+ . = ..()
+
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index ff40f99e87..0caf431f26 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -238,6 +238,14 @@
/obj/machinery/vending/cigarette = "ShadyCigs Deluxe",
/obj/machinery/vending/games = "\improper Good Clean Fun",
/obj/machinery/vending/autodrobe = "AutoDrobe",
+ /obj/machinery/vending/assist = "\improper Vendomat",
+ /obj/machinery/vending/engivend = "\improper Engi-Vend",
+ /obj/machinery/vending/engivend = "\improper YouTool",
+ /obj/machinery/vending/sustenance = "\improper Sustenance Vendor",
+ /obj/machinery/vending/dinnerware = "\improper Plasteel Chef's Dinnerware Vendor",
+ /obj/machinery/vending/cart = "\improper PTech",
+ /obj/machinery/vending/hydronutrients = "\improper NutriMax",
+ /obj/machinery/vending/hydroseeds = "\improper MegaSeed Servitor",
/obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe",
/obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe",
/obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe",
diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm
new file mode 100644
index 0000000000..c7aaab6a26
--- /dev/null
+++ b/code/game/objects/items/debug_items.dm
@@ -0,0 +1,102 @@
+/* This file contains standalone items for debug purposes. */
+
+/obj/item/debug/human_spawner
+ name = "human spawner"
+ desc = "Spawn a human by aiming at a turf and clicking. Use in hand to change type."
+ icon = 'icons/obj/guns/magic.dmi'
+ icon_state = "nothingwand"
+ item_state = "wand"
+ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+ w_class = WEIGHT_CLASS_SMALL
+ var/datum/species/selected_species
+ var/valid_species = list()
+
+/obj/item/debug/human_spawner/afterattack(atom/target, mob/user, proximity)
+ ..()
+ if(isturf(target))
+ var/mob/living/carbon/human/H = new /mob/living/carbon/human(target)
+ if(selected_species)
+ H.set_species(selected_species)
+
+/obj/item/debug/human_spawner/attack_self(mob/user)
+ ..()
+ var/choice = input("Select a species", "Human Spawner", null) in GLOB.species_list
+ selected_species = GLOB.species_list[choice]
+
+/* Revive this once we purge all the istype checks for tools for tool_behaviour
+/obj/item/debug/omnitool
+ name = "omnitool"
+ desc = "The original hypertool, born before them all. Use it in hand to unleash it's true power."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "hypertool"
+ item_state = "hypertool"
+ toolspeed = 0.1
+ tool_behaviour = null
+
+/obj/item/debug/omnitool/examine()
+ . = ..()
+ . += " The mode is: [tool_behaviour]"
+
+/obj/item/debug/omnitool/proc/check_menu(mob/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated() || !user.Adjacent(src))
+ return FALSE
+ return TRUE
+
+/obj/item/debug/omnitool/attack_self(mob/user)
+ if(!user)
+ return
+ var/list/tool_list = list(
+ "Crowbar" = image(icon = 'icons/obj/tools.dmi', icon_state = "crowbar"),
+ "Multitool" = image(icon = 'icons/obj/device.dmi', icon_state = "multitool"),
+ "Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_map"),
+ "Wirecutters" = image(icon = 'icons/obj/tools.dmi', icon_state = "cutters_map"),
+ "Wrench" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench"),
+ "Welding Tool" = image(icon = 'icons/obj/tools.dmi', icon_state = "miniwelder"),
+ "Analyzer" = image(icon = 'icons/obj/device.dmi', icon_state = "analyzer"),
+ "Mining Tool" = image(icon = 'icons/obj/mining.dmi', icon_state = "minipick"),
+ "Shovel" = image(icon = 'icons/obj/mining.dmi', icon_state = "spade"),
+ "Retractor" = image(icon = 'icons/obj/surgery.dmi', icon_state = "retractor"),
+ "Hemostat" = image(icon = 'icons/obj/surgery.dmi', icon_state = "hemostat"),
+ "Cautery" = image(icon = 'icons/obj/surgery.dmi', icon_state = "cautery"),
+ "Drill" = image(icon = 'icons/obj/surgery.dmi', icon_state = "drill"),
+ "Scalpel" = image(icon = 'icons/obj/surgery.dmi', icon_state = "scalpel"),
+ "Saw" = image(icon = 'icons/obj/surgery.dmi', icon_state = "saw")
+ )
+ var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+ if(!check_menu(user))
+ return
+ switch(tool_result)
+ if("Crowbar")
+ tool_behaviour = TOOL_CROWBAR
+ if("Multitool")
+ tool_behaviour = TOOL_MULTITOOL
+ if("Screwdriver")
+ tool_behaviour = TOOL_SCREWDRIVER
+ if("Wirecutters")
+ tool_behaviour = TOOL_WIRECUTTER
+ if("Wrench")
+ tool_behaviour = TOOL_WRENCH
+ if("Welding Tool")
+ tool_behaviour = TOOL_WELDER
+ if("Analyzer")
+ tool_behaviour = TOOL_ANALYZER
+ if("Mining Tool")
+ tool_behaviour = TOOL_MINING
+ if("Shovel")
+ tool_behaviour = TOOL_SHOVEL
+ if("Retractor")
+ tool_behaviour = TOOL_RETRACTOR
+ if("Hemostat")
+ tool_behaviour = TOOL_HEMOSTAT
+ if("Cautery")
+ tool_behaviour = TOOL_CAUTERY
+ if("Drill")
+ tool_behaviour = TOOL_DRILL
+ if("Scalpel")
+ tool_behaviour = TOOL_SCALPEL
+ if("Saw")
+ tool_behaviour = TOOL_SAW
+*/
diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm
index 55d1a2c78a..03ff354ffb 100644
--- a/code/game/objects/items/dehy_carp.dm
+++ b/code/game/objects/items/dehy_carp.dm
@@ -8,6 +8,7 @@
var/mob/owner = null //Carp doesn't attack owner, set when using in hand
var/owned = 0 //Boolean, no owner to begin with
var/mobtype = /mob/living/simple_animal/hostile/carp //So admins can change what mob spawns via var fuckery
+ can_random_spawn = FALSE
//Attack self
/obj/item/toy/plush/carpplushie/dehy_carp/attack_self(mob/user)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 6bac77258d..fe8f3ca626 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -721,7 +721,7 @@ GLOBAL_LIST_EMPTY(PDAs)
return
/obj/item/pda/proc/remove_id(mob/user)
- if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ if(hasSiliconAccessInArea(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
do_remove_id(user)
@@ -916,7 +916,7 @@ GLOBAL_LIST_EMPTY(PDAs)
remove_pen()
/obj/item/pda/proc/toggle_light()
- if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE))
+ if(hasSiliconAccessInArea(usr) || !usr.canUseTopic(src, BE_CLOSE))
return
if(fon)
fon = FALSE
@@ -928,7 +928,7 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/proc/remove_pen()
- if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ if(hasSiliconAccessInArea(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(inserted_item)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index b186c29539..1006fe9146 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -100,7 +100,8 @@
bot_access_flags = CLEAN_BOT
/obj/item/cartridge/lawyer
- name = "\improper P.R.O.V.E. cartridge"
+ name = "\improper S.P.A.M. cartridge"
+ desc = "Introducing the Station Public Announcement Messenger cartridge, featuring the unique ability to broadcast-mark messages, designed for lawyers across Nanotrasen to advertise their useful and important services."
icon_state = "cart-law"
access = CART_SECURITY
spam_enabled = 1
@@ -562,22 +563,22 @@ Code:
if (53) // Newscaster
menu = "[PDAIMG(notes)] Newscaster Access "
menu += " Current Newsfeed: [current_channel ? current_channel : "None"] "
- var/datum/newscaster/feed_channel/current
- for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
+ var/datum/news/feed_channel/current
+ for(var/datum/news/feed_channel/chan in GLOB.news_network.network_channels)
if (chan.channel_name == current_channel)
current = chan
if(!current)
menu += " ERROR : NO CHANNEL FOUND "
return
var/i = 1
- for(var/datum/newscaster/feed_message/msg in current.messages)
+ for(var/datum/news/feed_message/msg in current.messages)
menu +="-[msg.returnBody(-1)] \[Story by [msg.returnAuthor(-1)] \] "
menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""] "
if(msg.img)
user << browse_rsc(msg.img, "tmp_photo[i].png")
menu +=" "
i++
- for(var/datum/newscaster/feed_comment/comment in msg.comments)
+ for(var/datum/news/feed_comment/comment in msg.comments)
menu +="[comment.body] [comment.author] [comment.time_stamp] "
menu += " Post Message "
@@ -608,7 +609,7 @@ Code:
/obj/item/cartridge/Topic(href, href_list)
..()
- if(!usr.canUseTopic(src, !issilicon(usr)))
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
usr.unset_machine()
usr << browse(null, "window=pda")
return
@@ -681,8 +682,8 @@ Code:
if("Newscaster Message")
var/host_pda_owner_name = host_pda.id ? "[host_pda.id.registered_name] ([host_pda.id.assignment])" : "Unknown"
var/message = host_pda.msg_input()
- var/datum/newscaster/feed_channel/current
- for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
+ var/datum/news/feed_channel/current
+ for(var/datum/news/feed_channel/chan in GLOB.news_network.network_channels)
if (chan.channel_name == current_channel)
current = chan
if(current.locked && current.author != host_pda_owner_name)
diff --git a/code/game/objects/items/devices/compressionkit.dm b/code/game/objects/items/devices/compressionkit.dm
index eebe4dc69b..9c7e8ce185 100644
--- a/code/game/objects/items/devices/compressionkit.dm
+++ b/code/game/objects/items/devices/compressionkit.dm
@@ -89,25 +89,6 @@
else
to_chat(user, "Anomalous error. Summon a coder. ")
- else if(ishuman(target) && user.zone_selected == BODY_ZONE_PRECISE_GROIN)
- var/mob/living/carbon/human/H = target
- var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
- if(!P)
- return
- playsound(get_turf(src), 'sound/weapons/flash.ogg', 50, 1)
- H.visible_message("[user] is preparing to shrink [H]\'s [P.name] with their bluespace compression kit! ")
- if(do_mob(user, H, 40) && charges > 0 && P.length > 0)
- H.visible_message("[user] has shrunk [H]\'s [P.name]! ")
- playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 50, 1)
- sparks()
- flash_lighting_fx(3, 3, LIGHT_COLOR_CYAN)
- charges -= 1
- var/p_name = P.name
- P.modify_size(-5)
- if(QDELETED(P))
- H.visible_message("[H]\'s [p_name] vanishes! ")
-
-
/obj/item/compressionkit/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/ore/bluespace_crystal))
@@ -117,4 +98,4 @@
if(B.amount > 1)
B.amount -= 1
else
- qdel(I)
\ No newline at end of file
+ qdel(I)
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index ce0e492393..2af449df24 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -38,6 +38,7 @@
/obj/item/geiger_counter/Destroy()
STOP_PROCESSING(SSobj, src)
+ QDEL_NULL(soundloop)
return ..()
/obj/item/geiger_counter/process()
diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm
index b93c9419a3..bf8d215a11 100644
--- a/code/game/objects/items/implants/implant_explosive.dm
+++ b/code/game/objects/items/implants/implant_explosive.dm
@@ -82,8 +82,9 @@
/obj/item/implant/explosive/proc/boom_goes_the_weasel()
explosion(get_turf(imp_in ? imp_in : src), heavy, medium, weak, weak, flame_range = weak)
- imp_in?.gib(TRUE)
- qdel(src)
+ if(!QDELETED(imp_in))
+ imp_in.gib(TRUE)
+ qdel(src)
/obj/item/implant/explosive/macro
name = "macrobomb implant"
diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm
new file mode 100644
index 0000000000..8a08232859
--- /dev/null
+++ b/code/game/objects/items/implants/implant_hijack.dm
@@ -0,0 +1,121 @@
+#define HIJACK_APC_MAX_AMOUNT 5
+
+/obj/item/implant/hijack
+ name = "hijack implant"
+ desc = "Allows you to control the machinery in a room by hacking into the APC."
+ actions_types = list(/datum/action/item_action/hands_free/activate, /datum/action/item_action/removeAPCs, /datum/action/item_action/accessAPCs, /datum/action/item_action/stealthmodetoggle)
+ activated = 1
+ var/toggled = FALSE
+ icon_state = "hijack"
+ var/eye_color
+ var/stealthmode = FALSE
+ var/stealthcooldown = 0
+ var/hijacking = FALSE
+
+/obj/item/implant/hijack/activate()
+ . = ..()
+ toggled = !toggled
+ imp_in.click_intercept = toggled ? src : null
+ imp_in.siliconaccesstoggle = toggled ? TRUE : FALSE
+ to_chat(imp_in,"You turn [toggled ? "on" : "off"] [src]'s silicon interactions. ")
+ toggle_eyes()
+
+/obj/item/implant/hijack/proc/toggle_eyes()
+ if (!ishuman(imp_in))
+ return
+ var/on = toggled && !stealthmode
+ var/mob/living/carbon/human/H = imp_in
+ H.eye_color = on ? "ff0" : eye_color
+ H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
+ H.update_body()
+
+/obj/item/implant/hijack/implant(mob/living/target, mob/user, silent = FALSE)
+ if(..())
+ ADD_TRAIT(target, TRAIT_HIJACKER, "implant")
+ if (ishuman(target))
+ var/mob/living/carbon/human/H = target
+ eye_color = H.eye_color
+ return TRUE
+
+/obj/item/implant/hijack/removed(mob/target, silent = FALSE, special = 0)
+ if(..())
+ REMOVE_TRAIT(target, TRAIT_HIJACKER, "implant")
+ for (var/area/area in imp_in.siliconaccessareas)
+ imp_in.toggleSiliconAccessArea(area)
+ var/obj/machinery/power/apc/apc = area.get_apc()
+ if (apc)
+ apc.hijacker = null
+ apc.set_hijacked_lighting()
+ apc.update_icon()
+ if (ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.eye_color = eye_color
+ return TRUE
+
+/obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object)
+ if (isitem(object) || !toggled || user.incapacitated())
+ return
+ if (stealthmode == FALSE && istype(object,/obj/machinery/power/apc) && !user.CanReach(object))
+ if (hijack_remotely(object))
+ return
+ if (stealthmode && !user.CanReach(object))
+ return
+ if (!object.hasSiliconAccessInArea(imp_in))
+ return
+ var/list/modifiers = params2list(params)
+ imp_in.face_atom(object)
+ if (modifiers["shift"] && modifiers["ctrl"])
+ object.AICtrlShiftClick(imp_in)
+ return TRUE
+ if (modifiers["shift"])
+ object.AIShiftClick(imp_in)
+ return TRUE
+ if (modifiers["ctrl"])
+ object.AICtrlClick(imp_in)
+ return TRUE
+ if (modifiers["alt"])
+ object.AIAltClick(imp_in)
+ return TRUE
+ if (user.get_active_held_item())
+ return
+ if (user.CanReach(object))
+ object.attack_robot(imp_in)
+ else
+ object.attack_ai(imp_in)
+ return TRUE
+
+/obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc)
+ if (apc.hijacker || hijacking)
+ return FALSE //can't remotely hijack an already hijacked APC
+ hijacking = TRUE
+ to_chat(imp_in, "Establishing remote connection with APC. ")
+ if (!do_after(imp_in, 4 SECONDS,target=apc))
+ to_chat(imp_in, "Aborting. ")
+ hijacking = FALSE
+ return TRUE
+ if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT)
+ to_chat(src,"You are connected to too many APCs! Too many more will fry your brain. ")
+ hijacking = FALSE
+ return TRUE
+ imp_in.light_power = 2
+ imp_in.light_range = 2
+ imp_in.light_color = COLOR_YELLOW
+ imp_in.update_light()
+ imp_in.visible_message("[imp_in] starts glowing a with a hollow yellow light! ")
+ to_chat(imp_in, "Beginning hijack of APC. ")
+ if (do_after(imp_in, 21 SECONDS,target=apc))
+ apc.hijacker = imp_in
+ stealthmode = FALSE
+ apc.set_hijacked_lighting()
+ imp_in.toggleSiliconAccessArea(apc.area)
+ apc.update_icon()
+ stealthcooldown = world.time + 1 MINUTES + 30 SECONDS
+ toggle_eyes()
+ else
+ to_chat(imp_in, "Aborting. ")
+ hijacking = FALSE
+ imp_in.light_power = 0
+ imp_in.light_range = 0
+ imp_in.light_color = COLOR_YELLOW
+ imp_in.update_light()
+ return TRUE
\ No newline at end of file
diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm
index ab902369cc..a0e27f14f0 100644
--- a/code/game/objects/items/implants/implanter.dm
+++ b/code/game/objects/items/implants/implanter.dm
@@ -74,4 +74,8 @@
/obj/item/implanter/stealth
name = "implanter (stealth)"
- imp_type = /obj/item/implant/stealth
\ No newline at end of file
+ imp_type = /obj/item/implant/stealth
+
+/obj/item/implanter/hijack
+ name = "implanter (hijack)"
+ imp_type = /obj/item/implant/hijack
\ No newline at end of file
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 705dcad6c6..a2a8cb3150 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -31,7 +31,16 @@
var/normal_desc
//--end of love :'(--
-/obj/item/toy/plush/Initialize()
+ var/snowflake_id //if we set from a config snowflake plushie.
+ var/can_random_spawn = TRUE //if this is FALSE, don't spawn this for random plushies.
+
+/obj/item/toy/plush/random_snowflake/Initialize(mapload, set_snowflake_id)
+ . = ..()
+ var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies)
+ var/id = pick(configlist)
+ set_snowflake_from_config(id)
+
+/obj/item/toy/plush/Initialize(mapload, set_snowflake_id)
. = ..()
AddComponent(/datum/component/squeak, squeak_override)
@@ -50,6 +59,9 @@
normal_desc = desc
+ if(set_snowflake_id)
+ set_snowflake_from_config(set_snowflake_id)
+
/obj/item/toy/plush/Destroy()
QDEL_NULL(grenade)
@@ -97,6 +109,44 @@
return ..()
+/obj/item/toy/plush/proc/set_snowflake_from_config(id)
+ var/list/configlist = CONFIG_GET(keyed_list/snowflake_plushies)
+ var/list/jsonlist = configlist[id]
+ ASSERT(jsonlist)
+ jsonlist = json_decode(jsonlist)
+ if(jsonlist["inherit_from"])
+ var/path = text2path(jsonlist["inherit_from"])
+ if(!ispath(path, /obj/item/toy/plush))
+ stack_trace("Invalid path for inheritance")
+ else
+ var/obj/item/toy/plush/P = new path //can't initial() lists
+ name = P.name
+ desc = P.desc
+ icon_state = P.icon_state
+ item_state = P.item_state
+ icon = P.icon
+ squeak_override = P.squeak_override
+ attack_verb = P.attack_verb
+ gender = P.gender
+ qdel(P)
+ if(jsonlist["name"])
+ name = jsonlist["name"]
+ if(jsonlist["desc"])
+ desc = jsonlist["desc"]
+ if(jsonlist["gender"])
+ gender = jsonlist["gender"]
+ if(jsonlist["icon_state"])
+ icon_state = jsonlist["icon_state"]
+ item_state = jsonlist["item_state"]
+ icon = 'config/plushies/sprites.dmi'
+ if(jsonlist["attack_verb"])
+ attack_verb = jsonlist["attack_verb"]
+ if(jsonlist["squeak_override"])
+ squeak_override = jsonlist["squeak_override"]
+ if(squeak_override)
+ var/datum/component/squeak/S = GetComponent(/datum/component/squeak)
+ S?.override_squeak_sounds = squeak_override
+
/obj/item/toy/plush/handle_atom_del(atom/A)
if(A == grenade)
grenade = null
@@ -367,13 +417,22 @@
if(mood_message)
desc += mood_message
+GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
+/proc/valid_plushie_paths()
+ . = list()
+ for(var/i in subtypesof(/obj/item/toy/plush))
+ var/obj/item/toy/plush/abstract = i
+ if(!initial(abstract.can_random_spawn))
+ continue
+ . += i
+
/obj/item/toy/plush/random
name = "Illegal plushie"
desc = "Something fucked up"
- var/blacklisted_plushes = list(/obj/item/toy/plush/carpplushie/dehy_carp, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random)
+ can_random_spawn = FALSE
/obj/item/toy/plush/random/Initialize()
- var/newtype = pick(subtypesof(/obj/item/toy/plush) - typecacheof(blacklisted_plushes))
+ var/newtype = prob(CONFIG_GET(number/snowflake_plushie_prob))? /obj/item/toy/plush/random_snowflake : pick(GLOB.valid_plushie_paths)
new newtype(loc)
return INITIALIZE_HINT_QDEL
@@ -504,115 +563,12 @@
attack_verb = list("clawed", "hissed", "tail slapped")
squeak_override = list('sound/weapons/slash.ogg' = 1)
-/obj/item/toy/plush/lizardplushie/durgit
- icon_state = "durgit"
- item_state = "durgit"
- squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //Durgit's the origin of the sound
-
-/obj/item/toy/plush/lizardplushie/rio
- icon_state = "rio"
- item_state = "rio"
-
-/obj/item/toy/plush/lizardplushie/dan
- icon_state = "dan"
- item_state = "dan"
-
-/obj/item/toy/plush/lizardplushie/urinsu
- icon_state = "urinsu"
- item_state = "urinsu"
-
-/obj/item/toy/plush/lizardplushie/arfrehn
- icon_state = "arfrehn"
- item_state = "arfrehn"
-
-/obj/item/toy/plush/lizardplushie/soars
- icon_state = "soars"
- item_state = "soars"
-
-/obj/item/toy/plush/lizardplushie/ghostie
- icon_state = "ghostie"
- item_state = "ghostie"
-
-/obj/item/toy/plush/lizardplushie/amber
- icon_state = "amber"
- item_state = "amber"
-
-/obj/item/toy/plush/lizardplushie/cyan
- icon_state = "cyan"
- item_state = "cyan"
-
-/obj/item/toy/plush/lizardplushie/meena
- icon_state = "meena"
- item_state = "meena"
-
-/obj/item/toy/plush/lizardplushie/stalks
- icon_state = "stalks"
- item_state = "stalks"
-
/obj/item/toy/plush/lizardplushie/kobold
+ name = "kobold plushie"
+ desc = "An adorable stuffed toy that resembles a kobold."
icon_state = "kobold"
item_state = "kobold"
-/obj/item/toy/plush/lizardplushie/gorgi
- icon_state = "gorgi"
- item_state = "gorgi"
-
-/obj/item/toy/plush/lizardplushie/almaz
- icon_state = "almaz"
- item_state = "almaz"
- squeak_override = list('modular_citadel/sound/voice/raptor_purr.ogg' = 1)
-
-/obj/item/toy/plush/lizardplushie/garou
- icon_state = "garou"
- item_state = "garou"
-
-/obj/item/toy/plush/lizardplushie/augments
- icon_state = "augments"
- item_state = "augments"
- squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //I have no mouth and I must weh
- attack_verb = list("hugged", "patted", "snugged", "booped")
-
-/obj/item/toy/plush/lizardplushie/xekov
- icon_state = "xekov"
- item_state = "xekov"
-
-/obj/item/toy/plush/lizardplushie/greg
- icon_state = "greg"
- item_state = "greg"
-
-/obj/item/toy/plush/lizardplushie/sin
- icon_state = "sin"
- item_state = "sin"
- desc = "An adorable stuffed toy that resembles a lizardperson.. It faintly smells of sulfur."
-
-/obj/item/toy/plush/lizardplushie/ends
- icon_state = "ends"
- item_state = "ends"
-
-/obj/item/toy/plush/lizardplushie/lyssa
- icon_state = "lyssa"
- item_state = "lyssa"
-
-/obj/item/toy/plush/snakeplushie
- name = "snake plushie"
- desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
- icon_state = "plushie_snake"
- item_state = "plushie_snake"
- attack_verb = list("bitten", "hissed", "tail slapped")
- squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1)
-
-/obj/item/toy/plush/snakeplushie/sasha
- icon_state = "sasha"
- item_state = "sasha"
-
-/obj/item/toy/plush/snakeplushie/shay
- icon_state = "shay"
- item_state = "shay"
-
-/obj/item/toy/plush/snakeplushie/vulken
- icon_state = "vulken"
- item_state = "vulken"
-
/obj/item/toy/plush/nukeplushie
name = "operative plushie"
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
@@ -630,29 +586,17 @@
squeak_override = list('sound/effects/blobattack.ogg' = 1)
gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy
-/obj/item/toy/plush/slimeplushie/annie
- desc = "An adorable stuffed toy that resembles a slimey crewmember."
- icon_state = "annie"
- item_state = "annie"
-
-/obj/item/toy/plush/slimeplushie/paxton
- desc = "An adorable stuffed toy that resembles a slimey crewmember."
- icon_state = "paxton"
- item_state = "paxton"
- attack_verb = list("CQC'd", "jabroni'd", "powergamed", "robusted", "cakehatted")
- gender = MALE
-
/obj/item/toy/plush/awakenedplushie
name = "awakened plushie"
desc = "An ancient plushie that has grown enlightened to the true nature of reality."
icon_state = "plushie_awake"
item_state = "plushie_awake"
+ can_random_spawn = FALSE
/obj/item/toy/plush/awakenedplushie/ComponentInitialize()
. = ..()
AddComponent(/datum/component/edit_complainer)
-
/obj/item/toy/plush/beeplushie
name = "bee plushie"
desc = "A cute toy that resembles an even cuter bee."
@@ -668,21 +612,7 @@
icon_state = "bumble"
item_state = "bumble"
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
-
-/obj/item/toy/plush/mothplushie/nameko
- icon_state = "nameko"
- item_state = "nameko"
-
-/obj/item/toy/plush/mothplushie/suru
- icon_state = "suru"
- item_state = "suru"
-
-/obj/item/toy/plush/xeno
- name = "xenohybrid plushie"
- desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
- icon_state = "seras"
- item_state = "seras"
- squeak_override = list('sound/voice/hiss2.ogg' = 1)
+ can_random_spawn = FALSE
/obj/item/toy/plush/lampplushie
name = "lamp plushie"
@@ -736,20 +666,6 @@
icon_state = "scrubpuppy"
item_state = "scrubpuppy"
-/obj/item/toy/plush/borgplushie/seeking
- icon_state = "seeking"
- item_state = "seeking"
-
-/obj/item/toy/plush/borgplushie/neeb
- icon_state = "neeb"
- item_state = "neeb"
-
-/obj/item/toy/plush/borgplushie/bhijn
- desc = "An adorable stuffed toy of a IPC."
- icon_state = "bhijn"
- item_state = "bhijn"
- attack_verb = list("closed", "reworked", "merged")
-
/obj/item/toy/plush/aiplush
name = "AI plushie"
desc = "A little stuffed toy AI core... it appears to be malfunctioning."
@@ -758,246 +674,22 @@
attack_verb = list("hacked", "detonated", "overloaded")
squeak_override = list('sound/machines/beep.ogg' = 9, 'sound/machines/buzz-two.ogg' = 1)
-/obj/item/toy/plush/bird
- name = "bird plushie"
- desc = "An adorable stuffed plushie that resembles an avian."
- icon_state = "sylas"
- item_state = "sylas"
- attack_verb = list("peeped", "beeped", "poofed")
- squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1)
-
-/obj/item/toy/plush/bird/esela
- icon_state = "esela"
- item_state = "esela"
-
-/obj/item/toy/plush/bird/jahonna
- icon_state = "jahonna"
- item_state = "jahonna"
-
-/obj/item/toy/plush/bird/krick
- icon_state = "krick"
- item_state = "krick"
-
-/obj/item/toy/plush/bird/birddi
- icon_state = "birddi"
- item_state = "birddi"
-
-/obj/item/toy/plush/bird/jewel
- icon_state = "jewel"
- item_state = "jewel"
-
-/obj/item/toy/plush/sergal
- name = "sergal plushie"
- desc = "An adorable stuffed plushie that resembles a sagaru."
- icon_state = "faux"
- item_state = "faux"
- squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
-
-/obj/item/toy/plush/sergal/gladwyn
- icon_state = "gladwyn"
- item_state = "gladwyn"
-
-/obj/item/toy/plush/sergal/jermaine
- icon_state = "jermaine"
- item_state = "jermaine"
-
-/obj/item/toy/plush/mammal
- name = "mammal plushie"
- desc = "An adorable stuffed toy resembling some sort of crew member."
- icon_state = "dubious"
- item_state = "dubious"
-
-/obj/item/toy/plush/mammal/gavin
- icon_state = "gavin"
- item_state = "gavin"
-
-/obj/item/toy/plush/mammal/blep
- icon_state = "blep"
- item_state = "blep"
-
-/obj/item/toy/plush/mammal/circe
- desc = "A luxuriously soft toy that resembles a nine-tailed kitsune."
- icon_state = "circe"
- item_state = "circe"
- attack_verb = list("medicated", "tailhugged", "kissed")
-
-/obj/item/toy/plush/mammal/robin
- icon_state = "robin"
- item_state = "robin"
-
-/obj/item/toy/plush/mammal/pavel
- icon_state = "pavel"
- item_state = "pavel"
-
-/obj/item/toy/plush/mammal/mason
- icon_state = "mason"
- item_state = "mason"
-
-/obj/item/toy/plush/mammal/oten
- icon_state = "oten"
- item_state = "oten"
-
-/obj/item/toy/plush/mammal/ray
- icon_state = "ray"
- item_state = "ray"
-
-/obj/item/toy/plush/mammal/redtail
- icon_state = "redtail"
- item_state = "redtail"
-
-/obj/item/toy/plush/mammal/dawud
- icon_state = "dawud"
- item_state = "dawud"
-
-/obj/item/toy/plush/mammal/edgar
- icon_state = "edgar"
- item_state = "edgar"
- attack_verb = list("collared", "tricked", "headpatted")
-
-/obj/item/toy/plush/mammal/frank
- icon_state = "frank"
- item_state = "frank"
-
-/obj/item/toy/plush/mammal/poojawa
- icon_state = "poojawa"
- item_state = "poojawa"
-
-/obj/item/toy/plush/mammal/hazel
- icon_state = "hazel"
- item_state = "hazel"
-
-/obj/item/toy/plush/mammal/joker
- icon_state = "joker"
- item_state = "joker"
-
-/obj/item/toy/plush/mammal/gunther
- icon_state = "gunther"
- item_state = "gunther"
-
/obj/item/toy/plush/mammal/fox
icon_state = "fox"
item_state = "fox"
-/obj/item/toy/plush/mammal/rae
- desc = "An adorable stuffed toy of an artic fox."
- icon_state = "rae"
- item_state = "rae"
+/obj/item/toy/plush/snakeplushie
+ name = "snake plushie"
+ desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
+ icon_state = "plushie_snake"
+ item_state = "plushie_snake"
+ attack_verb = list("bitten", "hissed", "tail slapped")
+ squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1)
-/obj/item/toy/plush/mammal/zed
- desc = "A masked stuffed toy that resembles a fierce miner. He even comes with his own little crusher!"
- icon_state = "zed"
- item_state = "zed"
- attack_verb = list("ENDED", "CRUSHED", "GNOMED")
-
-/obj/item/toy/plush/mammal/justin
- icon_state = "justin"
- item_state = "justin"
- attack_verb = list("buttslapped", "fixed")
-
-/obj/item/toy/plush/mammal/reece
- icon_state = "reece"
- item_state = "reece"
- attack_verb = list("healed", "cured", "demoted")
-
-/obj/item/toy/plush/mammal/redwood
- desc = "An adorable stuffed toy resembling a Nanotrasen Captain. That just happens to be a bunny."
- icon_state = "redwood"
- item_state = "redwood"
- attack_verb = list("ordered", "bapped", "reprimanded")
-
-/obj/item/toy/plush/mammal/marisol
- desc = "An adorable stuffed toy resembling a demi-wolf security officer."
- icon_state = "marisol"
- item_state = "marisol"
- attack_verb = list("arrested", "harmbattoned", "lasered")
-
-/obj/item/toy/plush/mammal/minty
- desc = "An adorable stuffed toy resembling some sort of crew member. It smells like mint.."
- icon_state = "minty"
- item_state = "minty"
- attack_verb = list("freshened", "brushed")
-
-/obj/item/toy/plush/mammal/dog
- desc = "An adorable stuffed toy that resembles a canine."
- icon_state = "katlin"
- item_state = "katlin"
- attack_verb = list("barked", "boofed", "borked")
- squeak_override = list(
- 'modular_citadel/sound/voice/bark1.ogg' = 1,
- 'modular_citadel/sound/voice/bark2.ogg' = 1
- )
-
-/obj/item/toy/plush/mammal/dog/frost
- icon_state = "frost"
- item_state = "frost"
-
-/obj/item/toy/plush/mammal/dog/atticus
- icon_state = "atticus"
- item_state = "atticus"
-
-/obj/item/toy/plush/mammal/dog/fletch
- icon_state = "fletch"
- item_state = "fletch"
-
-/obj/item/toy/plush/mammal/dog/vincent
- icon_state = "vincent"
- item_state = "vincent"
-
-/obj/item/toy/plush/mammal/dog/zigfried
- desc = "An adorable stuffed toy of a very good boy."
- icon_state = "zigfried"
- item_state = "zigfried"
-
-/obj/item/toy/plush/mammal/dog/nikolai
- icon_state = "nikolai"
- item_state = "nikolai"
-
-/obj/item/toy/plush/mammal/dog/flynn
- icon_state = "flynn"
- item_state = "flynn"
-
-/obj/item/toy/plush/mammal/dog/fritz
- icon_state = "fritz"
- item_state = "fritz"
- attack_verb = list("barked", "boofed", "shotgun'd")
- obj_flags = UNIQUE_RENAME
- unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
-
-/obj/item/toy/plush/mammal/dog/jesse
- desc = "An adorable wolf toy that resembles a cream-colored wolf. He has a little pride flag!"
- icon_state = "jesse"
- item_state = "jesse"
- attack_verb = list("greeted", "merc'd", "howdy'd")
-
-/obj/item/toy/plush/catgirl
- name = "feline plushie"
- desc = "An adorable stuffed toy that resembles a feline."
- icon_state = "bailey"
- item_state = "bailey"
- attack_verb = list("headbutt", "scritched", "bit")
- squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1)
-
-/obj/item/toy/plush/catgirl/mikeel
- desc = "An adorable stuffed toy of some tauric cat person."
- icon_state = "mikeel"
- item_state = "mikeel"
-
-/obj/item/toy/plush/catgirl/skylar
- desc = "An adorable stuffed toy that resembles a degenerate."
- icon_state = "skylar2"
- item_state = "skylar2"
- attack_verb = list("powergamed", "merged", "tabled")
- squeak_override = list('sound/effects/meow1.ogg' = 1)
-
-/obj/item/toy/plush/catgirl/drew
- icon_state = "drew"
- item_state = "drew"
-
-/obj/item/toy/plush/catgirl/trilby
- desc = "A masked stuffed toy that resembles a feline scientist."
- icon_state = "trilby"
- item_state = "trilby"
- attack_verb = list("PR'd", "coded", "remembered")
+/obj/item/toy/plush/mammal
+ name = "mammal plushie"
+ desc = "An adorable stuffed toy resembling some sort of crew member."
+ can_random_spawn = FALSE
/obj/item/toy/plush/catgirl/fermis
name = "medcat plushie"
@@ -1007,20 +699,36 @@
attack_verb = list("cuddled", "petpatted", "wigglepurred")
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
-/obj/item/toy/plush/catgirl/mariaf
- desc = "An adorable stuffed toy that resembles a very tall cat girl."
- icon_state = "mariaf"
- item_state = "mariaf"
- attack_verb = list("hugged", "stabbed", "licked")
+/obj/item/toy/plush/xeno
+ name = "xenohybrid plushie"
+ desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
+ squeak_override = list('sound/voice/hiss2.ogg' = 1)
+ can_random_spawn = FALSE
-/obj/item/toy/plush/catgirl/maya
- desc = "An adorable stuffed toy that resembles an angry cat girl. She has her own tiny nuke disk!"
- icon_state = "maya"
- item_state = "maya"
- attack_verb = list("nuked", "arrested", "harmbatonned")
+/obj/item/toy/plush/bird
+ name = "bird plushie"
+ desc = "An adorable stuffed plushie that resembles an avian."
+ attack_verb = list("peeped", "beeped", "poofed")
+ squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1)
+ can_random_spawn = FALSE
-/obj/item/toy/plush/catgirl/marisa
- desc = "An adorable stuffed toy that resembles a crew member, or maybe a witch. Having it makes you feel you can win."
- icon_state = "marisa"
- item_state = "marisa"
- attack_verb = list("blasted", "sparked", "dazzled")
+/obj/item/toy/plush/sergal
+ name = "sergal plushie"
+ desc = "An adorable stuffed plushie that resembles a sagaru."
+ squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
+ can_random_spawn = FALSE
+
+/obj/item/toy/plush/mammal/dog
+ desc = "An adorable stuffed toy that resembles a canine."
+ attack_verb = list("barked", "boofed", "borked")
+ squeak_override = list(
+ 'modular_citadel/sound/voice/bark1.ogg' = 1,
+ 'modular_citadel/sound/voice/bark2.ogg' = 1
+ )
+
+/obj/item/toy/plush/catgirl
+ name = "feline plushie"
+ desc = "An adorable stuffed toy that resembles a feline."
+ attack_verb = list("headbutt", "scritched", "bit")
+ squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1)
+ can_random_spawn = FALSE
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 2e8005e631..3be698dd3a 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -236,3 +236,4 @@
throwforce = 15 //Massive pice of metal
w_class = WEIGHT_CLASS_HUGE
item_flags = SLOWS_WHILE_IN_HAND
+ transparent = FALSE
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 21de34faa1..7879f50ada 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -1,7 +1,11 @@
/* Glass stack types
* Contains:
* Glass sheets
+ * Plasma glass
* Reinforced glass sheets
+ * Reinforced plasma glass
+ * Titanium glass
+ * Plastitanium glass
* Glass shards - TODO: Move this into code/game/object/item/weapons
*/
@@ -373,4 +377,8 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
throwforce = 11
icon_state = "plasmalarge"
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
- icon_prefix = "plasma"
\ No newline at end of file
+ icon_prefix = "plasma"
+
+/obj/item/shard/plasma/alien
+ name = "alien shard"
+ desc = "A nasty looking shard of advanced alloy glass."
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 53b78b2ecf..828ed96387 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -401,6 +401,8 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("alien bar stool", /obj/item/chair/stool/bar/alien, 1, time = 20, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("alien stool", /obj/item/chair/stool/alien, 1, time = 20, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 20, one_per_turf = 1, on_floor = 1), \
null, \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 2bd7dd0d38..45911afc73 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -51,6 +51,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
null, \
new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("trash bin", /obj/structure/closet/crate/bin, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE),\
null, \
new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20), \
new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \
@@ -698,6 +699,16 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
/*
* Bones
*/
+
+GLOBAL_LIST_INIT(bone_recipes, list(
+ new /datum/stack_recipe("Bone Dagger", /obj/item/kitchen/knife/combat/bone, 2, time = 20), \
+ new /datum/stack_recipe("Skull Helmet", /obj/item/clothing/head/helmet/skull, 4, time = 30), \
+ new /datum/stack_recipe("Bone Armor", /obj/item/clothing/suit/armor/bone, 6, time = 30)))
+
+/obj/item/stack/sheet/bone/Initialize(mapload, new_amount, merge = TRUE)
+ recipes = GLOB.bone_recipes
+ . = ..()
+
/obj/item/stack/sheet/bone
name = "bones"
icon = 'icons/obj/mining.dmi'
@@ -714,12 +725,15 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
grind_results = list(/datum/reagent/carbon = 10)
merge_type = /obj/item/stack/sheet/bone
+ /*
+ * Plastic
+ */
+
GLOBAL_LIST_INIT(plastic_recipes, list(
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),\
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2)))
/obj/item/stack/sheet/plastic
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 028f36b1d1..67e54128a4 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -399,10 +399,12 @@
/obj/item/storage/bag/bio/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_w_class = WEIGHT_CLASS_NORMAL //Allows you to pick up Lungs, Liver, and Stomach
STR.max_combined_w_class = 200
STR.max_items = 25
STR.insert_preposition = "in"
- STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube))
+ STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart))
+ STR.cant_hold = typecacheof(list(/obj/item/organ/brain, /obj/item/organ/liver/cybernetic, /obj/item/organ/heart/cybernetic, /obj/item/organ/lungs/cybernetic, /obj/item/organ/tongue/cybernetic, /obj/item/organ/ears/cybernetic, /obj/item/organ/eyes/robotic, /obj/item/organ/cyberimp))
/obj/item/storage/bag/bio/holding
name = "bio bag of holding"
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 082cbe245d..1be9df5c30 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -612,6 +612,21 @@
/obj/item/ammo_casing
))
+/obj/item/storage/belt/quiver
+ name = "leather quiver"
+ desc = "A quiver made from the hide of some animal. Used to hold arrows."
+ icon_state = "quiver"
+ item_state = "quiver"
+
+/obj/item/storage/belt/quiver/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 15
+ STR.display_numerical_stacking = TRUE
+ STR.can_hold = typecacheof(list(
+ /obj/item/ammo_casing/caseless/arrow
+ ))
+
/obj/item/storage/belt/medolier
name = "medolier"
desc = "A medical bandolier for holding smartdarts."
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index e47021c1f6..2762be8edf 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -244,3 +244,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna)
return FALSE
+
+/obj/item/storage/book/bible/syndicate/empty
+ uses = 0
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index daddc403b2..c4e6c57318 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -1288,3 +1288,62 @@
/obj/item/storage/box/marshmallow/PopulateContents()
for (var/i in 1 to 5)
new /obj/item/reagent_containers/food/snacks/marshmallow(src)
+
+/obj/item/storage/box/material/PopulateContents() //less uranium because radioactive
+ var/static/items_inside = list(
+ /obj/item/stack/sheet/metal/fifty=1,\
+ /obj/item/stack/sheet/glass/fifty=1,\
+ /obj/item/stack/sheet/rglass=50,\
+ /obj/item/stack/sheet/plasmaglass=50,\
+ /obj/item/stack/sheet/titaniumglass=50,\
+ /obj/item/stack/sheet/plastitaniumglass=50,\
+ /obj/item/stack/sheet/plasteel=50,\
+ /obj/item/stack/sheet/mineral/plastitanium=50,\
+ /obj/item/stack/sheet/mineral/titanium=50,\
+ /obj/item/stack/sheet/mineral/gold=50,\
+ /obj/item/stack/sheet/mineral/silver=50,\
+ /obj/item/stack/sheet/mineral/plasma=50,\
+ /obj/item/stack/sheet/mineral/uranium=50,\
+ /obj/item/stack/sheet/mineral/diamond=50,\
+ /obj/item/stack/sheet/bluespace_crystal=50,\
+ /obj/item/stack/sheet/mineral/bananium=50,\
+ /obj/item/stack/sheet/mineral/wood=50,\
+ /obj/item/stack/sheet/plastic/fifty=1,\
+ /obj/item/stack/sheet/runed_metal/fifty=1
+ )
+ generate_items_inside(items_inside, src)
+
+/obj/item/storage/box/debugtools
+ name = "box of debug tools"
+ icon_state = "syndiebox"
+
+/obj/item/storage/box/debugtools/PopulateContents()
+ var/static/items_inside = list(
+ /obj/item/flashlight/emp/debug=1,\
+ /obj/item/pda=1,\
+ /obj/item/modular_computer/tablet/preset/advanced=1,\
+ /obj/item/geiger_counter=1,\
+ /obj/item/construction/rcd/combat/admin=1,\
+ /obj/item/pipe_dispenser=1,\
+ /obj/item/card/emag=1,\
+ /obj/item/healthanalyzer/advanced=1,\
+ /obj/item/disk/tech_disk/debug=1,\
+ /obj/item/uplink/debug=1,\
+ /obj/item/uplink/nuclear/debug=1,\
+ /obj/item/storage/box/beakers/bluespace=1,\
+ /obj/item/storage/box/beakers/variety=1,\
+ /obj/item/storage/box/material=1,\
+ /obj/item/storage/belt/medical/surgery_belt_adv
+ )
+ generate_items_inside(items_inside, src)
+
+/obj/item/storage/box/beakers/variety
+ name = "beaker variety box"
+
+/obj/item/storage/box/beakers/variety/PopulateContents()
+ new /obj/item/reagent_containers/glass/beaker(src)
+ new /obj/item/reagent_containers/glass/beaker/large(src)
+ new /obj/item/reagent_containers/glass/beaker/plastic(src)
+ new /obj/item/reagent_containers/glass/beaker/meta(src)
+ new /obj/item/reagent_containers/glass/beaker/noreact(src)
+ new /obj/item/reagent_containers/glass/beaker/bluespace(src)
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index c4457ea991..45313dc9b0 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -189,7 +189,7 @@
L.Knockdown(stunpwr, override_stamdmg = 0)
- L.apply_damage(stunpwr*0.55, STAMINA, user.zone_selected)
+ L.apply_damage(stunpwr*0.5, STAMINA, user.zone_selected)
L.apply_effect(EFFECT_STUTTER, stunforce)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
if(user)
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index 8c0f315ca3..347717dd63 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -138,14 +138,17 @@
/obj/item/hand_tele/pre_attack(atom/target, mob/user, params)
if(try_dispel_portal(target, user))
- return FALSE
+ return TRUE
return ..()
-/obj/item/hand_tele/proc/try_dispel_portal(atom/target, mob/user)
- if(is_parent_of_portal(target))
+/obj/item/hand_tele/proc/try_dispel_portal(atom/target, mob/user, delay = 30)
+ var/datum/beam/B = user.Beam(target)
+ if(is_parent_of_portal(target) && (!delay || do_after(user, delay, target = target)))
qdel(target)
to_chat(user, "You dispel [target] with \the [src]! ")
+ qdel(B)
return TRUE
+ qdel(B)
return FALSE
/obj/item/hand_tele/afterattack(atom/target, mob/user)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 8f5a6e8e0b..6782ba0098 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -453,6 +453,7 @@
force_wielded = 0
attack_verb = list("attacked", "struck", "hit")
total_mass_on = TOTAL_MASS_TOY_SWORD
+ sharpness = IS_BLUNT
/obj/item/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return FALSE
@@ -472,6 +473,7 @@
attack_verb = list("attacked", "struck", "hit")
total_mass_on = TOTAL_MASS_TOY_SWORD
slowdown_wielded = 0
+ sharpness = IS_BLUNT
/obj/item/twohanded/dualsaber/hypereutactic/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return FALSE
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 45b9715b04..7fbdddbdc4 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -125,7 +125,7 @@
if ((M.client && M.machine == src))
is_in_use = TRUE
ui_interact(M)
- if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr))
+ if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr) || hasSiliconAccessInArea(usr))
if (!(usr in nearby))
if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh.
is_in_use = TRUE
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 9246a00399..1d36b2b41b 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -37,7 +37,7 @@
structureclimber.visible_message("[structureclimber] has been knocked off [src].", "You're knocked off [src]!", "You see [structureclimber] get knocked off [src]. ")
/obj/structure/ui_act(action, params)
- ..()
+ . = ..()
add_fingerprint(usr)
/obj/structure/MouseDrop_T(atom/movable/O, mob/user)
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 9fa4d730b6..cc1a3c0922 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -370,6 +370,43 @@
item_state = "stool_bar"
origin_type = /obj/structure/chair/stool/bar
+//////////////////////////
+//Alien(Disco) Stools!////
+//////////////////////////
+
+/obj/structure/chair/stool/alien
+ name = "alien stool"
+ desc = "A hard stool made of advanced alien alloy."
+ icon_state = "stoolalien"
+ icon = 'icons/obj/abductor.dmi'
+ item_chair = /obj/item/chair/stool/alien
+ buildstacktype = /obj/item/stack/sheet/mineral/abductor
+ buildstackamount = 1
+
+/obj/structure/chair/stool/bar/alien
+ name = "bronze bar stool"
+ desc = "A hard bar stool made of advanced alien alloy."
+ icon_state = "baralien"
+ icon = 'icons/obj/abductor.dmi'
+ item_chair = /obj/item/chair/stool/bar/alien
+ buildstacktype = /obj/item/stack/sheet/mineral/abductor
+ buildstackamount = 1
+
+/obj/item/chair/stool/alien
+ name = "stool"
+ icon_state = "stoolalien_toppled"
+ item_state = "stoolalien"
+ icon = 'icons/obj/abductor.dmi'
+ origin_type = /obj/structure/chair/stool/alien
+ break_chance = 0 //It's too sturdy.
+
+/obj/item/chair/stool/bar/alien
+ name = "bar stool"
+ icon_state = "baralien_toppled"
+ item_state = "baralien"
+ icon = 'icons/obj/abductor.dmi'
+ origin_type = /obj/structure/chair/stool/bar/alien
+
//////////////////////////
//Brass & Bronze stools!//
//////////////////////////
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 1517b30d9c..88c8d51479 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -2,38 +2,21 @@
name = "\proper captain's locker"
req_access = list(ACCESS_CAPTAIN)
icon_state = "cap"
-/obj/structure/closet/secure_closet/captains/PopulateContents()
+/obj/structure/closet/secure_closet/captains/PopulateContents() //Excess clothing and such can be found in the Captain's Wardrobe. You can also find this file in code/modules/vending/wardrobes.
..()
- new /obj/item/clothing/suit/hooded/wintercoat/captain(src)
- new /obj/item/storage/backpack/captain(src)
- new /obj/item/storage/backpack/satchel/cap(src)
- new /obj/item/storage/backpack/duffelbag/captain(src)
- new /obj/item/clothing/neck/cloak/cap(src)
- new /obj/item/clothing/neck/petcollar(src)
+ new /obj/item/clothing/neck/petcollar(src) //I considered removing the pet stuff too but eh, who knows. We might get Renault back. Plus I guess you could use that collar for... other means. Aren't you supposed to be guarding the disk?
new /obj/item/pet_carrier(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/clothing/under/rank/captain(src)
- new /obj/item/clothing/under/rank/captain/skirt(src)
new /obj/item/clothing/suit/armor/vest/capcarapace(src)
- new /obj/item/clothing/head/caphat(src)
- new /obj/item/clothing/under/captainparade(src)
new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src)
- new /obj/item/clothing/head/caphat/parade(src)
- new /obj/item/clothing/head/caphat/beret(src)
- new /obj/item/clothing/suit/captunic(src)
- new /obj/item/clothing/under/rank/captain/femformal(src) //citadel edit
new /obj/item/clothing/head/crown/fancy(src)
new /obj/item/cartridge/captain(src)
new /obj/item/storage/box/silver_ids(src)
new /obj/item/radio/headset/heads/captain/alt(src)
new /obj/item/radio/headset/heads/captain(src)
- new /obj/item/clothing/glasses/sunglasses/gar/supergar(src)
- new /obj/item/clothing/gloves/color/captain(src)
new /obj/item/storage/belt/sabre(src)
new /obj/item/gun/energy/e_gun(src)
new /obj/item/door_remote/captain(src)
new /obj/item/storage/photo_album/Captain(src)
- new /obj/item/clothing/head/caphat/beret/white(src)
/obj/structure/closet/secure_closet/hop
name = "\proper head of personnel's locker"
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index a6c0b22ad7..b14303984e 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -47,6 +47,12 @@
if(manifest)
tear_manifest(user)
+/obj/structure/closet/crate/tool_interact(obj/item/W, mob/user)
+ if(W.tool_behaviour == TOOL_WIRECUTTER && manifest)
+ tear_manifest(user)
+ return TRUE
+ return ..()
+
/obj/structure/closet/crate/open(mob/living/user)
. = ..()
if(. && manifest)
diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm
index 7646fdb35f..bc3697a550 100644
--- a/code/game/objects/structures/crates_lockers/crates/bins.dm
+++ b/code/game/objects/structures/crates_lockers/crates/bins.dm
@@ -4,8 +4,8 @@
icon_state = "largebins"
open_sound = 'sound/effects/bin_open.ogg'
close_sound = 'sound/effects/bin_close.ogg'
- material_drop = /obj/item/stack/sheet/plastic
- material_drop_amount = 40
+ material_drop = /obj/item/stack/sheet/metal
+ material_drop_amount = 10
anchored = TRUE
horizontal = FALSE
delivery_icon = null
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index 9d22f669d5..92fda29101 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -8,14 +8,16 @@
max_integrity = 1
armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
var/obj/item/holosign_creator/projector
+ var/init_vis_overlay = TRUE
/obj/structure/holosign/Initialize(mapload, source_projector)
. = ..()
if(source_projector)
projector = source_projector
projector.signs += src
- SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, alpha, RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
- alpha = 0
+ if(init_vis_overlay)
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, alpha, RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+ alpha = 0
/obj/structure/holosign/Destroy()
if(projector)
@@ -74,8 +76,10 @@
icon_state = "holo_fan"
density = FALSE
anchored = TRUE
+ layer = ABOVE_NORMAL_TURF_LAYER
CanAtmosPass = ATMOS_PASS_NO
alpha = 150
+ init_vis_overlay = FALSE
/obj/structure/holosign/barrier/atmos/Initialize()
. = ..()
@@ -100,7 +104,9 @@
max_integrity = 30
density = FALSE
anchored = TRUE
+ layer = ABOVE_NORMAL_TURF_LAYER
alpha = 150
+ init_vis_overlay = FALSE
CanAtmosPass = ATMOS_PASS_NO
resistance_flags = FIRE_PROOF
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 7696a13bb2..bf891ef223 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
/obj/structure/bodycontainer/morgue/AltClick(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
beeper = !beeper
to_chat(user, "You turn the speaker function [beeper ? "on" : "off"]. ")
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 14a7e445c1..d4925c8604 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -595,6 +595,14 @@
/obj/structure/window/plastitanium/unanchored
anchored = FALSE
+//pirate ship windows
+/obj/structure/window/plastitanium/pirate
+ desc = "Yarr this window be explosion proof!"
+ explosion_block = 30
+
+/obj/structure/window/plastitanium/pirate/unanchored
+ anchored = FALSE
+
/obj/structure/window/reinforced/clockwork
name = "brass window"
desc = "A paper-thin pane of translucent yet reinforced brass."
diff --git a/code/game/say.dm b/code/game/say.dm
index b275d8b69c..85ae9f0681 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -129,7 +129,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
/atom/movable/proc/attach_spans(input, list/spans)
var/customsayverb = findtext(input, "*")
if(customsayverb)
- input = capitalize(copytext(input, length(input[customsayverb]) + 1))
+ input = capitalize(copytext(input, customsayverb + length(input[customsayverb])))
if(input)
return "[message_spans_start(spans)][input]"
else
diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm
index d55cb0b475..b04f4f0aa0 100644
--- a/code/game/turfs/simulated/wall/mineral_walls.dm
+++ b/code/game/turfs/simulated/wall/mineral_walls.dm
@@ -302,4 +302,4 @@
/turf/closed/wall/mineral/plastitanium/copyTurf(turf/T)
. = ..()
- T.transform = transform
+ T.transform = transform
\ No newline at end of file
diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm
index 8eab4c34fe..a1d2c1757c 100644
--- a/code/game/turfs/simulated/wall/reinf_walls.dm
+++ b/code/game/turfs/simulated/wall/reinf_walls.dm
@@ -258,3 +258,22 @@
/turf/closed/wall/r_wall/syndicate/overspace
icon_state = "map-overspace"
fixed_underlay = list("space"=1)
+
+/////////////////////Pirate Ship walls/////////////////////
+
+/turf/closed/wall/r_wall/syndicate/pirate
+ desc = "Yarr just try to blow this to smithereens!"
+ explosion_block = 30
+ canSmoothWith = list(/turf/closed/wall/r_wall/syndicate/pirate, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/plastitanium/pirate, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium)
+
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal
+ smooth = SMOOTH_MORE
+ icon_state = "map-shuttle_nd"
+
+/turf/closed/wall/r_wall/syndicate/pirate/nosmooth
+ icon = 'icons/turf/shuttle.dmi'
+ icon_state = "wall"
+
+/turf/closed/wall/r_wall/syndicate/pirate/overspace
+ icon_state = "map-overspace"
+ fixed_underlay = list("space"=1)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 460c6a52c9..d26a6efb02 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -171,7 +171,8 @@
var/turf/T = user.loc //get user's location for delay checks
//the istype cascade has been spread among various procs for easy overriding
- if(try_clean(W, user, T) || try_wallmount(W, user, T) || try_decon(W, user, T) || try_destroy(W, user, T))
+ var/srctype = type
+ if(try_clean(W, user, T) || try_wallmount(W, user, T) || try_decon(W, user, T) || (type == srctype && try_destroy(W, user, T)))
return
return ..()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index d8434f986c..e8f53f551d 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -363,13 +363,13 @@
if(.)
return
if(length(src_object.contents()))
- to_chat(usr, "You start dumping out the contents... ")
- if(!do_after(usr,20,target=src_object.parent))
+ to_chat(user, "You start dumping out the contents... ")
+ if(!do_after(user,20,target=src_object.parent))
return FALSE
var/list/things = src_object.contents()
var/datum/progressbar/progress = new(user, things.len, src)
- while (do_after(usr, 10, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress)))
+ while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(src_object, /datum/component/storage.proc/mass_remove_from_storage, src, things, progress)))
stoplag(1)
qdel(progress)
diff --git a/code/game/world.dm b/code/game/world.dm
index 8e18f2ea51..77361310b8 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -8,6 +8,11 @@ GLOBAL_LIST(topic_status_cache)
//This happens after the Master subsystem new(s) (it's a global datum)
//So subsystems globals exist, but are not initialised
/world/New()
+ enable_debugger()
+
+#if DM_VERSION >= 513 && DM_BUILD >= 1506
+ world.Profile(PROFILE_START)
+#endif
log_world("World loaded at [TIME_STAMP("hh:mm:ss", FALSE)]!")
@@ -17,7 +22,7 @@ GLOBAL_LIST(topic_status_cache)
make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once)
- TgsNew()
+ TgsNew(minimum_required_security_level = TGS_SECURITY_TRUSTED)
GLOB.revdata = new
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 372902e8d6..bb0224bbfc 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -240,7 +240,7 @@
if( isemptylist(GLOB.news_network.network_channels) )
dat+="No active channels found... "
else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/CHANNEL in GLOB.news_network.network_channels)
if(CHANNEL.is_admin_channel)
dat+="[CHANNEL.channel_name] "
else
@@ -277,7 +277,7 @@
if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]")
dat+="Invalid channel name. "
var/check = 0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.channel_name == src.admincaster_feed_channel.channel_name)
check = 1
break
@@ -294,7 +294,7 @@
dat+="No feed messages found in channel... "
else
var/i = 0
- for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
+ for(var/datum/news/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
i++
dat+="-[MESSAGE.returnBody(-1)] "
if(MESSAGE.img)
@@ -302,7 +302,7 @@
dat+=" "
dat+="\[Story by [MESSAGE.returnAuthor(-1)] \] "
dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: "
- for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
+ for(var/datum/news/feed_comment/comment in MESSAGE.comments)
dat+="[comment.body][comment.author] [comment.time_stamp] "
dat+=" "
dat+="Refresh "
@@ -315,7 +315,7 @@
if(isemptylist(GLOB.news_network.network_channels))
dat+="No feed channels found active... "
else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/CHANNEL in GLOB.news_network.network_channels)
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("*** ") : ""] "
dat+="Cancel "
if(11)
@@ -326,7 +326,7 @@
if(isemptylist(GLOB.news_network.network_channels))
dat+="No feed channels found active... "
else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/CHANNEL in GLOB.news_network.network_channels)
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("*** ") : ""] "
dat+="Back "
@@ -337,11 +337,11 @@
if( isemptylist(src.admincaster_feed_channel.messages) )
dat+="No feed messages found in channel... "
else
- for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
+ for(var/datum/news/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+="-[MESSAGE.returnBody(-1)] \[Story by [MESSAGE.returnAuthor(-1)] \] "
dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")] "
dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"] "
- for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
+ for(var/datum/news/feed_comment/comment in MESSAGE.comments)
dat+="[comment.body] X [comment.author] [comment.time_stamp] "
dat+="Back "
if(13)
@@ -354,7 +354,7 @@
if( isemptylist(src.admincaster_feed_channel.messages) )
dat+="No feed messages found in channel... "
else
- for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
+ for(var/datum/news/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+="-[MESSAGE.returnBody(-1)] \[Story by [MESSAGE.returnAuthor(-1)] \] "
dat+="Back "
if(14)
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 8856982cf2..b5127929a7 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -138,15 +138,15 @@ GLOBAL_PROTECT(protected_ranks)
if(!line || findtextEx_char(line,"#",1,2))
continue
var/next = findtext(line, "=")
- var/datum/admin_rank/R = new(ckeyEx(copytext(line, 1, line[next])))
+ var/datum/admin_rank/R = new(ckeyEx(copytext(line, 1, next)))
if(!R)
continue
GLOB.admin_ranks += R
GLOB.protected_ranks += R
var/prev = findchar(line, "+-*", next, 0)
while(prev)
- next = findchar(line, "+-*", prev + 1, 0)
- R.process_keyword(copytext_char(line, prev, next), previous_rights)
+ next = findchar(line, "+-*", prev + length(line[prev]), 0)
+ R.process_keyword(copytext(line, prev, next), previous_rights)
prev = next
previous_rights = R.rights
if(!CONFIG_GET(flag/admin_legacy_system) || dbfail)
diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm
index 1672310567..19e53b09b4 100644
--- a/code/modules/admin/antag_panel.dm
+++ b/code/modules/admin/antag_panel.dm
@@ -214,4 +214,4 @@ GLOBAL_VAR(antag_prototypes)
var/datum/browser/panel = new(usr, "traitorpanel", "", 600, 600)
panel.set_content(out)
panel.open()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 43360ad714..37fe2a41fc 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -19,9 +19,9 @@ GLOBAL_PROTECT(href_token)
var/spamcooldown = 0
var/admincaster_screen = 0 //TODO: remove all these 5 variables, they are completly unacceptable
- var/datum/newscaster/feed_message/admincaster_feed_message = new /datum/newscaster/feed_message
- var/datum/newscaster/wanted_message/admincaster_wanted_message = new /datum/newscaster/wanted_message
- var/datum/newscaster/feed_channel/admincaster_feed_channel = new /datum/newscaster/feed_channel
+ var/datum/news/feed_message/admincaster_feed_message = new /datum/news/feed_message
+ var/datum/news/wanted_message/admincaster_wanted_message = new /datum/news/wanted_message
+ var/datum/news/feed_channel/admincaster_feed_channel = new /datum/news/feed_channel
var/admin_signature
var/href_token
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 70b25bebdd..6abf2d3f1b 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2481,7 +2481,7 @@
if(!check_rights(R_ADMIN))
return
var/check = 0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.channel_name == src.admincaster_feed_channel.channel_name)
check = 1
break
@@ -2500,7 +2500,7 @@
if(!check_rights(R_ADMIN))
return
var/list/available_channels = list()
- for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/F in GLOB.news_network.network_channels)
available_channels += F.channel_name
src.admincaster_feed_channel.channel_name = adminscrub(input(usr, "Choose receiving Feed Channel.", "Network Channel Handler") in available_channels )
src.access_news_network()
@@ -2606,28 +2606,28 @@
else if(href_list["ac_censor_channel_author"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_channel/FC = locate(href_list["ac_censor_channel_author"])
+ var/datum/news/feed_channel/FC = locate(href_list["ac_censor_channel_author"])
FC.toggleCensorAuthor()
src.access_news_network()
else if(href_list["ac_censor_channel_story_author"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_message/MSG = locate(href_list["ac_censor_channel_story_author"])
+ var/datum/news/feed_message/MSG = locate(href_list["ac_censor_channel_story_author"])
MSG.toggleCensorAuthor()
src.access_news_network()
else if(href_list["ac_censor_channel_story_body"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_message/MSG = locate(href_list["ac_censor_channel_story_body"])
+ var/datum/news/feed_message/MSG = locate(href_list["ac_censor_channel_story_body"])
MSG.toggleCensorBody()
src.access_news_network()
else if(href_list["ac_pick_d_notice"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_channel/FC = locate(href_list["ac_pick_d_notice"])
+ var/datum/news/feed_channel/FC = locate(href_list["ac_pick_d_notice"])
src.admincaster_feed_channel = FC
src.admincaster_screen=13
src.access_news_network()
@@ -2635,7 +2635,7 @@
else if(href_list["ac_toggle_d_notice"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_channel/FC = locate(href_list["ac_toggle_d_notice"])
+ var/datum/news/feed_channel/FC = locate(href_list["ac_toggle_d_notice"])
FC.toggleCensorDclass()
src.access_news_network()
@@ -2651,17 +2651,17 @@
src.admincaster_screen = text2num(href_list["ac_setScreen"])
if (src.admincaster_screen == 0)
if(src.admincaster_feed_channel)
- src.admincaster_feed_channel = new /datum/newscaster/feed_channel
+ src.admincaster_feed_channel = new /datum/news/feed_channel
if(src.admincaster_feed_message)
- src.admincaster_feed_message = new /datum/newscaster/feed_message
+ src.admincaster_feed_message = new /datum/news/feed_message
if(admincaster_wanted_message)
- admincaster_wanted_message = new /datum/newscaster/wanted_message
+ admincaster_wanted_message = new /datum/news/wanted_message
src.access_news_network()
else if(href_list["ac_show_channel"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_channel/FC = locate(href_list["ac_show_channel"])
+ var/datum/news/feed_channel/FC = locate(href_list["ac_show_channel"])
src.admincaster_feed_channel = FC
src.admincaster_screen = 9
src.access_news_network()
@@ -2669,7 +2669,7 @@
else if(href_list["ac_pick_censor_channel"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_channel/FC = locate(href_list["ac_pick_censor_channel"])
+ var/datum/news/feed_channel/FC = locate(href_list["ac_pick_censor_channel"])
src.admincaster_feed_channel = FC
src.admincaster_screen = 12
src.access_news_network()
@@ -2688,8 +2688,8 @@
else if(href_list["ac_del_comment"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_comment/FC = locate(href_list["ac_del_comment"])
- var/datum/newscaster/feed_message/FM = locate(href_list["ac_del_comment_msg"])
+ var/datum/news/feed_comment/FC = locate(href_list["ac_del_comment"])
+ var/datum/news/feed_message/FM = locate(href_list["ac_del_comment_msg"])
FM.comments -= FC
qdel(FC)
src.access_news_network()
@@ -2697,7 +2697,7 @@
else if(href_list["ac_lock_comment"])
if(!check_rights(R_ADMIN))
return
- var/datum/newscaster/feed_message/FM = locate(href_list["ac_lock_comment"])
+ var/datum/news/feed_message/FM = locate(href_list["ac_lock_comment"])
FM.locked ^= 1
src.access_news_network()
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index ad2eeb7289..cf6d54336e 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -1058,7 +1058,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
set name = "Start Line Profiling"
set desc = "Starts tracking line by line profiling for code lines that support it"
- PROFILE_START
+ LINE_PROFILE_START
message_admins("[key_name_admin(src)] started line by line profiling. ")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Start Line Profiling")
@@ -1069,7 +1069,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
set name = "Stops Line Profiling"
set desc = "Stops tracking line by line profiling for code lines that support it"
- PROFILE_STOP
+ LINE_PROFILE_STOP
message_admins("[key_name_admin(src)] stopped line by line profiling. ")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Stop Line Profiling")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 37c79b1123..b8b92b0a58 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -75,7 +75,7 @@
message_admins("[key_name_admin(src)] decided not to answer [key_name_admin(H)]'s [sender] request.")
return
- log_directed_talk(src, H, input, LOG_ADMIN, "reply")
+ log_directed_talk(mob, H, input, LOG_ADMIN, "reply")
message_admins("[key_name_admin(src)] replied to [key_name_admin(H)]'s [sender] message with: \"[input]\"")
to_chat(H, "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from [sender == "Syndicate" ? "your benefactor" : "Central Command"]. Message as follows[sender == "Syndicate" ? ", agent." : ":"] [input]. Message ends.\"")
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index e15225b388..187ca66705 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -20,6 +20,7 @@ GLOBAL_LIST_EMPTY(antagonists)
var/show_in_antagpanel = TRUE //This will hide adding this antag type in antag panel, use only for internal subtypes that shouldn't be added directly but still show if possessed by mind
var/antagpanel_category = "Uncategorized" //Antagpanel will display these together, REQUIRED
var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type
+ var/list/blacklisted_quirks = list(/datum/quirk/nonviolent,/datum/quirk/mute) // Quirks that will be removed upon gaining this antag. Pacifist and mute are default.
/datum/antagonist/New()
GLOB.antagonists += src
@@ -70,6 +71,7 @@ GLOBAL_LIST_EMPTY(antagonists)
greet()
apply_innate_effects()
give_antag_moodies()
+ remove_blacklisted_quirks()
if(is_banned(owner.current) && replace_banned)
replace_banned_player()
@@ -117,6 +119,18 @@ GLOBAL_LIST_EMPTY(antagonists)
return
SEND_SIGNAL(owner.current, COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet")
+/datum/antagonist/proc/remove_blacklisted_quirks()
+ var/mob/living/L = owner.current
+ if(istype(L))
+ var/list/my_quirks = L.client?.prefs.all_quirks.Copy()
+ SSquirks.filter_quirks(my_quirks,blacklisted_quirks)
+ for(var/q in L.roundstart_quirks)
+ var/datum/quirk/Q = q
+ if(!(SSquirks.quirk_name_by_path(Q.type) in my_quirks))
+ if(initial(Q.antag_removal_text))
+ to_chat(L, "[initial(Q.antag_removal_text)] ")
+ L.remove_quirk(Q.type)
+
//Returns the team antagonist belongs to if any.
/datum/antagonist/proc/get_team()
return
@@ -134,7 +148,7 @@ GLOBAL_LIST_EMPTY(antagonists)
if(objectives.len)
report += printobjectives(objectives)
for(var/datum/objective/objective in objectives)
- if(!objective.check_completion())
+ if(objective.completable && !objective.check_completion())
objectives_complete = FALSE
break
diff --git a/code/modules/antagonists/_common/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm
index 486b5b0414..027abc7c94 100644
--- a/code/modules/antagonists/_common/antag_team.dm
+++ b/code/modules/antagonists/_common/antag_team.dm
@@ -36,11 +36,17 @@
var/win = TRUE
var/objective_count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- report += "Objective #[objective_count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ report += "Objective #[objective_count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ report += "Objective #[objective_count] : [objective.explanation_text] Fail. "
+ win = FALSE
+ else
+ report += "Objective #[objective_count] : [objective.explanation_text] [completion*100]% "
else
- report += "Objective #[objective_count] : [objective.explanation_text] Fail. "
- win = FALSE
+ report += "Objective #[objective_count] : [objective.explanation_text]"
objective_count++
if(win)
report += "The [name] was successful! "
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
index 9126638fea..9d83c95f05 100644
--- a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
+++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
@@ -31,12 +31,11 @@
if(was_running)
user.toggle_move_intent()
ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
- while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN)
+ while(bloodsuckerdatum && ContinueActive(user))
// Pay Blood Toll (if awake)
owner.alpha = max(20, owner.alpha - min(75, 10 + 5 * level_current))
bloodsuckerdatum.AddBloodVolume(-0.2)
sleep(5) // Check every few ticks that we haven't disabled this power
- // Return to Running (if you were before)
/datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target)
if (!..())
diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm
index 7c589bb3ab..2292006da1 100644
--- a/code/modules/antagonists/brother/brother.dm
+++ b/code/modules/antagonists/brother/brother.dm
@@ -108,11 +108,17 @@
var/win = TRUE
var/objective_count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[objective_count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ parts += "Objective #[objective_count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ parts += "Objective #[objective_count] : [objective.explanation_text] Fail. "
+ win = FALSE
+ else
+ parts += "Objective #[objective_count] : [objective.explanation_text] [completion*100]% "
else
- parts += "Objective #[objective_count] : [objective.explanation_text] Fail. "
- win = FALSE
+ parts += "Objective #[objective_count] : [objective.explanation_text]"
objective_count++
if(win)
parts += "The blood brothers were successful! "
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 0d68660d9d..a81c409233 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -54,8 +54,10 @@
var/honorific
if(owner.current.gender == FEMALE)
honorific = "Ms."
- else
+ else if(owner.current.gender == MALE)
honorific = "Mr."
+ else
+ honorific = "Mx."
if(GLOB.possible_changeling_IDs.len)
changelingID = pick(GLOB.possible_changeling_IDs)
GLOB.possible_changeling_IDs -= changelingID
@@ -552,11 +554,17 @@
if(objectives.len)
var/count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ parts += "Objective #[count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ parts += "Objective #[count] : [objective.explanation_text] Fail. "
+ changelingwin = FALSE
+ else
+ parts += "Objective #[count] : [objective.explanation_text] [completion*100]% "
else
- parts += "Objective #[count] : [objective.explanation_text] Fail. "
- changelingwin = 0
+ parts += "Objective #[count] : [objective.explanation_text]"
count++
if(changelingwin)
diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
index 501bcdc1c4..7be9ef039b 100644
--- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
+++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm
@@ -68,8 +68,8 @@
/obj/item/clockwork/replica_fabricator/pre_attack(atom/target, mob/living/user, params)
if(!target || !user || !is_servant_of_ratvar(user) || istype(target, /obj/item/storage))
- return TRUE
- return fabricate(target, user)
+ return ..()
+ return !fabricate(target, user)
//A note here; return values are for if we CAN BE PUT ON A TABLE, not IF WE ARE SUCCESSFUL, unless no_table_check is TRUE
/obj/item/clockwork/replica_fabricator/proc/fabricate(atom/target, mob/living/user, silent, no_table_check)
diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
index 6591343116..897bff779d 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
@@ -8,7 +8,7 @@
name = "clockwork marauder"
desc = "The stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield."
icon_state = "clockwork_marauder"
- mob_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_HUMANOID
health = 120
maxHealth = 120
force_threshold = 8
diff --git a/code/modules/antagonists/collector/collector.dm b/code/modules/antagonists/collector/collector.dm
new file mode 100644
index 0000000000..0e7a3a52e7
--- /dev/null
+++ b/code/modules/antagonists/collector/collector.dm
@@ -0,0 +1,19 @@
+/datum/antagonist/collector
+ name = "Contraband Collector"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = FALSE
+ blacklisted_quirks = list() // no blacklist, these guys are harmless
+
+/datum/antagonist/collector/proc/forge_objectives()
+ var/datum/objective/hoard/collector/O = new
+ O.owner = owner
+ O.find_target()
+ objectives += O
+
+/datum/antagonist/collector/on_gain()
+ forge_objectives()
+ . = ..()
+
+/datum/antagonist/collector/greet()
+ to_chat(owner, "You are a contraband collector! ")
+ owner.announce_objectives()
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index df2383f892..4bab621674 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -300,7 +300,7 @@
if(ishuman(cultist))
var/mob/living/carbon/human/H = cultist
H.eye_color = "f00"
- H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
+ H.dna?.update_ui_block(DNA_EYE_COLOR_BLOCK)
ADD_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist")
H.update_body()
@@ -425,10 +425,16 @@
parts += "The cultists' objectives were: "
var/count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ parts += "Objective #[count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ parts += "Objective #[count] : [objective.explanation_text] Fail. "
+ else
+ parts += "Objective #[count] : [objective.explanation_text] [completion*100]% "
else
- parts += "Objective #[count] : [objective.explanation_text] Fail. "
+ parts += "Objective #[count] : [objective.explanation_text]"
count++
if(members.len)
diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm
index ba2a96289d..e92f562db3 100644
--- a/code/modules/antagonists/cult/ritual.dm
+++ b/code/modules/antagonists/cult/ritual.dm
@@ -116,7 +116,7 @@ This file contains the cult dagger and rune list code
if(user.blood_volume)
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
var/scribe_mod = initial(rune_to_scribe.scribe_delay)
- if(istype(get_turf(user), /turf/open/floor/engine/cult))
+ if(istype(get_turf(user), /turf/open/floor/engine/cult) && !(ispath(rune_to_scribe, /obj/effect/rune/narsie)))
scribe_mod *= 0.5
if(!do_after(user, scribe_mod, target = get_turf(user)))
for(var/V in shields)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 7948b30035..0111334748 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -885,7 +885,7 @@ structure_check() searches for nearby cultist structures required for the invoca
if(new_human)
new_human.visible_message("[new_human] suddenly dissolves into bones and ashes. ", \
"Your link to the world fades. Your form breaks apart. ")
- for(var/obj/I in new_human)
+ for(var/obj/item/I in new_human)
new_human.dropItemToGround(I, TRUE)
new_human.dust()
else if(choice == "Ascend as a Dark Spirit")
diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm
index fa5263059a..c2f636959b 100644
--- a/code/modules/antagonists/devil/imp/imp.dm
+++ b/code/modules/antagonists/devil/imp/imp.dm
@@ -13,7 +13,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "imp"
icon_living = "imp"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speed = 1
a_intent = INTENT_HARM
stop_automated_movement = 1
diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm
index 1aef9ceba6..3c7de589d9 100644
--- a/code/modules/antagonists/disease/disease_datum.dm
+++ b/code/modules/antagonists/disease/disease_datum.dm
@@ -44,11 +44,17 @@
var/objectives_text = ""
var/count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- objectives_text += "Objective #[count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ result += "Objective #[count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ result += "Objective #[count] : [objective.explanation_text] Fail. "
+ win = FALSE
+ else
+ result += "Objective #[count] : [objective.explanation_text] [completion*100]% "
else
- objectives_text += "Objective #[count] : [objective.explanation_text] Fail. "
- win = FALSE
+ result += "Objective #[count] : [objective.explanation_text]"
count++
result += objectives_text
diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm
index 2a91f53ed4..943cb02696 100644
--- a/code/modules/antagonists/ninja/ninja.dm
+++ b/code/modules/antagonists/ninja/ninja.dm
@@ -63,10 +63,10 @@
possible_targets.Cut(index,index+1)
if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy)
- var/datum/objective/assassinate/O = new /datum/objective/assassinate()
+ var/datum/objective/assassinate/once/O = new /datum/objective/assassinate()
O.owner = owner
O.target = M
- O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]."
+ O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]. You may let [M.p_they()] live, if they come back from death."
objectives += O
else //protect
var/datum/objective/protect/O = new /datum/objective/protect()
@@ -74,23 +74,16 @@
O.target = M
O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm."
objectives += O
- if(4) //debrain/capture
- if(!possible_targets.len) continue
- var/selected = rand(1,possible_targets.len)
- var/datum/mind/M = possible_targets[selected]
- var/is_bad_guy = possible_targets[M]
- possible_targets.Cut(selected,selected+1)
-
- if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy)
- var/datum/objective/debrain/O = new /datum/objective/debrain()
+ if(4) //flavor
+ if(helping_station)
+ var/datum/objective/flavor/ninja_helping/O = new /datum/objective/flavor/ninja_helping
O.owner = owner
- O.target = M
- O.explanation_text = "Steal the brain of [M.current.real_name]."
+ O.forge_objective()
objectives += O
- else //capture
- var/datum/objective/capture/O = new /datum/objective/capture()
+ else
+ var/datum/objective/flavor/ninja_syndie/O = new /datum/objective/flavor/ninja_helping
O.owner = owner
- O.gen_amount_goal()
+ O.forge_objective()
objectives += O
else
break
diff --git a/code/modules/antagonists/nukeop/clownop.dm b/code/modules/antagonists/nukeop/clownop.dm
index 58b492b578..a3ccdee2b5 100644
--- a/code/modules/antagonists/nukeop/clownop.dm
+++ b/code/modules/antagonists/nukeop/clownop.dm
@@ -7,10 +7,10 @@
/datum/antagonist/nukeop/clownop/on_gain()
. = ..()
- ADD_TRAIT(owner, TRAIT_CLOWN_MENTALITY, NUKEOP_ANTAGONIST)
+ ADD_TRAIT(owner, TRAIT_CLOWN_MENTALITY, CLOWNOP_TRAIT)
/datum/antagonist/nukeop/clownop/on_removal()
- REMOVE_TRAIT(owner, TRAIT_CLOWN_MENTALITY, NUKEOP_ANTAGONIST)
+ REMOVE_TRAIT(owner, TRAIT_CLOWN_MENTALITY, CLOWNOP_TRAIT)
return ..()
/datum/antagonist/nukeop/leader/clownop
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index fe3b5a3aeb..0d815703c5 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -381,6 +381,7 @@
playsound(src, 'sound/machines/nuke/confirm_beep.ogg', 50, FALSE)
set_active()
update_ui_mode()
+ . = TRUE
else
playsound(src, 'sound/machines/nuke/angry_beep.ogg', 50, FALSE)
if("anchor")
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 9754d146c3..26efb92bec 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -16,7 +16,7 @@
var/icon_stun = "revenant_stun"
var/icon_drain = "revenant_draining"
var/stasis = FALSE
- mob_biotypes = list(MOB_SPIRIT)
+ mob_biotypes = MOB_SPIRIT
incorporeal_move = INCORPOREAL_MOVE_JAUNT
invisibility = INVISIBILITY_REVENANT
health = INFINITY //Revenants don't use health, they use essence instead
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index c703c85762..8a01622c87 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -12,7 +12,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "daemon"
icon_living = "daemon"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speed = 1
a_intent = INTENT_HARM
stop_automated_movement = 1
diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm
index 4e0184b7b6..0b66e8cb23 100644
--- a/code/modules/antagonists/survivalist/survivalist.dm
+++ b/code/modules/antagonists/survivalist/survivalist.dm
@@ -2,6 +2,7 @@
name = "Survivalist"
show_in_antagpanel = FALSE
show_name_in_check_antagonists = TRUE
+ blacklisted_quirks = list(/datum/quirk/nonviolent) // mutes are allowed
var/greet_message = ""
/datum/antagonist/survivalist/proc/forge_objectives()
@@ -19,20 +20,8 @@
owner.announce_objectives()
/datum/antagonist/survivalist/guns
- greet_message = "Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way."
-
-/datum/antagonist/survivalist/guns/forge_objectives()
- var/datum/objective/steal_five_of_type/summon_guns/guns = new
- guns.owner = owner
- objectives += guns
- ..()
+ greet_message = "Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, and don't let anyone take them!"
/datum/antagonist/survivalist/magic
name = "Amateur Magician"
- greet_message = "Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way."
-
-/datum/antagonist/survivalist/magic/forge_objectives()
- var/datum/objective/steal_five_of_type/summon_magic/magic = new
- magic.owner = owner
- objectives += magic
- ..()
\ No newline at end of file
+ greet_message = "This magic stuff is... so powerful. You want more. More! They want your power. They can't have it! Don't let them have it!"
diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm
index 7680d61034..bf976e3cca 100644
--- a/code/modules/antagonists/swarmer/swarmer.dm
+++ b/code/modules/antagonists/swarmer/swarmer.dm
@@ -62,7 +62,7 @@
speak_emote = list("tones")
initial_language_holder = /datum/language_holder/swarmer
bubble_icon = "swarmer"
- mob_biotypes = list(MOB_ROBOTIC)
+ mob_biotypes = MOB_ROBOTIC
health = 40
maxHealth = 40
status_flags = CANPUSH
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index 595ce5bb90..1c7ee48f71 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -77,19 +77,23 @@
var/is_hijacker = FALSE
var/datum/game_mode/dynamic/mode
var/is_dynamic = FALSE
+ var/hijack_prob = 0
if(istype(SSticker.mode,/datum/game_mode/dynamic))
mode = SSticker.mode
is_dynamic = TRUE
- if(mode.storyteller.flags & NO_ASSASSIN)
- is_hijacker = FALSE
+ if(mode.threat >= CONFIG_GET(number/dynamic_hijack_cost))
+ hijack_prob = CLAMP(mode.threat_level-50,0,20)
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))
+ is_hijacker = (prob(hijack_prob) && mode.threat_level > CONFIG_GET(number/dynamic_hijack_high_population_requirement))
else
var/indice_pop = min(10,round(GLOB.joined_player_list.len/mode.pop_per_requirement)+1)
- is_hijacker = (prob(10) && (mode.threat_level >= CONFIG_GET(number_list/dynamic_hijack_requirements)[indice_pop]))
+ is_hijacker = (prob(hijack_prob) && (mode.threat_level >= CONFIG_GET(number_list/dynamic_hijack_requirements)[indice_pop]))
+ if(mode.storyteller.flags & NO_ASSASSIN)
+ is_hijacker = FALSE
else if (GLOB.joined_player_list.len >= 30) // Less murderboning on lowpop thanks
+ hijack_prob = 10
is_hijacker = prob(10)
- var/martyr_chance = prob(20)
+ var/martyr_chance = prob(hijack_prob*2)
var/objective_count = is_hijacker //Hijacking counts towards number of objectives
if(!SSticker.mode.exchange_blue && SSticker.mode.traitors.len >= 8) //Set up an exchange if there are enough traitors
if(!SSticker.mode.exchange_red)
@@ -170,7 +174,7 @@
if(istype(SSticker.mode,/datum/game_mode/dynamic))
mode = SSticker.mode
is_dynamic = TRUE
- assassin_prob = mode.threat_level*(2/3)
+ assassin_prob = max(0,mode.threat_level-20)
if(prob(assassin_prob))
if(is_dynamic)
var/threat_spent = CONFIG_GET(number/dynamic_assassinate_cost)
@@ -187,22 +191,37 @@
maroon_objective.owner = owner
maroon_objective.find_target()
add_objective(maroon_objective)
- else
+ else if(prob(max(0,assassin_prob-20)))
var/datum/objective/assassinate/kill_objective = new
kill_objective.owner = owner
kill_objective.find_target()
add_objective(kill_objective)
+ else
+ var/datum/objective/assassinate/once/kill_objective = new
+ kill_objective.owner = owner
+ kill_objective.find_target()
+ add_objective(kill_objective)
else
if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist")))
var/datum/objective/download/download_objective = new
download_objective.owner = owner
download_objective.gen_amount_goal()
add_objective(download_objective)
- else
+ else if(prob(40)) // cum. not counting download: 40%.
var/datum/objective/steal/steal_objective = new
steal_objective.owner = owner
steal_objective.find_target()
add_objective(steal_objective)
+ else if(prob(100/3)) // cum. not counting download: 20%.
+ var/datum/objective/sabotage/sabotage_objective = new
+ sabotage_objective.owner = owner
+ sabotage_objective.find_target()
+ add_objective(sabotage_objective)
+ else // cum. not counting download: 40%
+ var/datum/objective/flavor/traitor/flavor_objective = new
+ flavor_objective.owner = owner
+ flavor_objective.forge_objective()
+ add_objective(flavor_objective)
/datum/antagonist/traitor/proc/forge_single_AI_objective()
.=1
@@ -369,11 +388,17 @@
if(objectives.len)//If the traitor had no objectives, don't need to process this.
var/count = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- objectives_text += "Objective #[count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ objectives_text += "Objective #[count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ objectives_text += "Objective #[count] : [objective.explanation_text] Fail. "
+ traitorwin = FALSE
+ else
+ objectives_text += "Objective #[count] : [objective.explanation_text] [completion*100]% "
else
- objectives_text += "Objective #[count] : [objective.explanation_text] Fail. "
- traitorwin = FALSE
+ objectives_text += "Objective #[count] : [objective.explanation_text]"
count++
if(uplink_true)
diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm
index 19c08f3076..d3bcdf0c04 100644
--- a/code/modules/antagonists/valentines/valentine.dm
+++ b/code/modules/antagonists/valentines/valentine.dm
@@ -35,7 +35,7 @@
var/objectives_complete = TRUE
if(objectives.len)
for(var/datum/objective/objective in objectives)
- if(!objective.check_completion())
+ if(objective.completable && !objective.check_completion())
objectives_complete = FALSE
break
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index f75d32e781..5e4cc17541 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -61,9 +61,9 @@
owner.current.forceMove(pick(GLOB.wizardstart))
/datum/antagonist/wizard/proc/create_objectives()
- var/datum/objective/new_objective = new("Cause as much creative mayhem as you can aboard the station! The more outlandish your methods of achieving this, the better! Make sure there's a decent amount of crew alive to tell of your tale.")
- new_objective.completed = TRUE //So they can greentext without admin intervention.
+ var/datum/objective/flavor/wizard/new_objective = new
new_objective.owner = owner
+ new_objective.forge_objective()
objectives += new_objective
if (!(locate(/datum/objective/escape) in objectives))
@@ -94,6 +94,7 @@
to_chat(owner, "You are the Space Wizard! ")
to_chat(owner, "The Space Wizards Federation has given you the following tasks: ")
owner.announce_objectives()
+ to_chat(owner, "These are merely guidelines! The federation are your masters, but you forge your own path! ")
to_chat(owner, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.")
to_chat(owner, "The spellbook is bound to you, and others cannot use it.")
to_chat(owner, "In your pockets you will find a teleport scroll. Use it as needed.")
@@ -265,11 +266,17 @@
var/count = 1
var/wizardwin = 1
for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[count] : [objective.explanation_text] Success! "
+ if(objective.completable)
+ var/completion = objective.check_completion()
+ if(completion >= 1)
+ parts += "Objective #[count] : [objective.explanation_text] Success! "
+ else if(completion <= 0)
+ parts += "Objective #[count] : [objective.explanation_text] Fail. "
+ wizardwin = FALSE
+ else
+ parts += "Objective #[count] : [objective.explanation_text] [completion*100]% "
else
- parts += "Objective #[count] : [objective.explanation_text] Fail. "
- wizardwin = 0
+ parts += "Objective #[count] : [objective.explanation_text]"
count++
if(wizardwin)
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 12efa01a38..5ff8586c34 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -337,8 +337,9 @@ GLOBAL_LIST_INIT(meta_gas_fusions, meta_gas_fusion_list())
if(!length(cached_gases))
return
var/list/reactions = list()
- for(var/I in cached_gases)
- reactions += SSair.gas_reactions[I]
+ for(var/datum/gas_reaction/G in SSair.gas_reactions)
+ if(cached_gases[G.major_gas])
+ reactions += G
if(!length(reactions))
return
reaction_results = new
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index f9c831a65a..ebe894138d 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -2,8 +2,6 @@
/proc/init_gas_reactions()
. = list()
- for(var/type in subtypesof(/datum/gas))
- .[type] = list()
for(var/r in subtypesof(/datum/gas_reaction))
var/datum/gas_reaction/reaction = r
@@ -16,27 +14,19 @@
var/datum/gas/req_gas = req
if (!reaction_key || initial(reaction_key.rarity) > initial(req_gas.rarity))
reaction_key = req_gas
- .[reaction_key] += list(reaction)
- sortTim(., /proc/cmp_gas_reactions, TRUE)
+ reaction.major_gas = reaction_key
+ . += reaction
+ sortTim(., /proc/cmp_gas_reaction)
-/proc/cmp_gas_reactions(list/datum/gas_reaction/a, list/datum/gas_reaction/b) // compares lists of reactions by the maximum priority contained within the list
- if (!length(a) || !length(b))
- return length(b) - length(a)
- var/maxa
- var/maxb
- for (var/datum/gas_reaction/R in a)
- if (R.priority > maxa)
- maxa = R.priority
- for (var/datum/gas_reaction/R in b)
- if (R.priority > maxb)
- maxb = R.priority
- return maxb - maxa
+/proc/cmp_gas_reaction(datum/gas_reaction/a, datum/gas_reaction/b) // compares lists of reactions by the maximum priority contained within the list
+ return b.priority - a.priority
/datum/gas_reaction
//regarding the requirements lists: the minimum or maximum requirements must be non-zero.
//when in doubt, use MINIMUM_MOLE_COUNT.
var/list/min_requirements
var/list/max_requirements
+ var/major_gas //the highest rarity gas used in the reaction.
var/exclude = FALSE //do it this way to allow for addition/removal of reactions midmatch in the future
var/priority = 100 //lower numbers are checked/react later than higher numbers. if two reactions have the same priority they may happen in either order
var/name = "reaction"
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index f7c5dce30f..e85cf1efa6 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -245,7 +245,7 @@
/obj/machinery/airalarm/ui_data(mob/user)
var/data = list(
"locked" = locked,
- "siliconUser" = user.has_unlimited_silicon_privilege,
+ "siliconUser" = user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user),
"emagged" = (obj_flags & EMAGGED ? 1 : 0),
"danger_level" = danger_level,
)
@@ -288,7 +288,7 @@
"danger_level" = cur_tlv.get_danger_level(environment.gases[gas_id] * partial_pressure)
))
- if(!locked || user.has_unlimited_silicon_privilege)
+ if(!locked || user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user))
data["vents"] = list()
for(var/id_tag in A.air_vent_names)
var/long_name = A.air_vent_names[id_tag]
@@ -368,7 +368,7 @@
/obj/machinery/airalarm/ui_act(action, params)
if(..() || buildstage != 2)
return
- if((locked && !usr.has_unlimited_silicon_privilege) || (usr.has_unlimited_silicon_privilege && aidisabled))
+ if((locked && !usr.has_unlimited_silicon_privilege && !hasSiliconAccessInArea(usr)) || (usr.has_unlimited_silicon_privilege && aidisabled))
return
var/device_id = params["id_tag"]
switch(action)
@@ -840,7 +840,7 @@
/obj/machinery/airalarm/AltClick(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)) || !isturf(loc))
return
togglelock(user)
return TRUE
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 539b5ce57a..1e8cce32c0 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -251,6 +251,7 @@
/obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user)
if((isnull(user) || istype(user)) && state_open && !panel_open)
..(user)
+ reagent_transfer = 0
return occupant
/obj/machinery/atmospherics/components/unary/cryo_cell/container_resist(mob/living/user)
diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm
index deb05920e2..ee4090b680 100644
--- a/code/modules/awaymissions/bluespaceartillery.dm
+++ b/code/modules/awaymissions/bluespaceartillery.dm
@@ -44,7 +44,7 @@
return
if(reload < reload_cooldown)
return
- if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr))
+ if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr))
priority_announce("Bluespace artillery fire detected. Brace for impact.")
message_admins("[ADMIN_LOOKUPFLW(usr)] has launched an artillery strike.")
var/list/L = list()
diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm
index 3562350473..c4bb6e8cdd 100644
--- a/code/modules/awaymissions/capture_the_flag.dm
+++ b/code/modules/awaymissions/capture_the_flag.dm
@@ -466,11 +466,13 @@
// MELEE GANG
/obj/item/claymore/ctf
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
+ armour_penetration = 100
+ total_mass = 1
/obj/item/claymore/ctf/pre_attack(atom/target, mob/user, params)
if(!is_ctf_target(target))
- return FALSE
+ return TRUE
return ..()
/obj/item/claymore/ctf/dropped()
diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm
index ca76c80df7..391b4ff464 100644
--- a/code/modules/cargo/bounties/reagent.dm
+++ b/code/modules/cargo/bounties/reagent.dm
@@ -105,6 +105,7 @@ datum/bounty/reagent/complex_drink/New()
/datum/reagent/consumable/ethanol/hearty_punch,\
/datum/reagent/consumable/ethanol/manhattan_proj,\
/datum/reagent/consumable/ethanol/narsour,\
+ /datum/reagent/consumable/ethanol/cogchamp,\
/datum/reagent/consumable/ethanol/neurotoxin,\
/datum/reagent/consumable/ethanol/patron,\
/datum/reagent/consumable/ethanol/quadruple_sec,\
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index b8541dcd33..bf67286f11 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -6,7 +6,7 @@
k_elasticity = 0
unit_name = "crate"
export_types = list(/obj/structure/closet/crate)
- exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden)
+ exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden, /obj/structure/closet/crate/bin)
/datum/export/large/crate/total_printout(datum/export_report/ex, notes = TRUE) // That's why a goddamn metal crate costs that much.
. = ..()
diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm
index 3b602d54d2..fd7e07a66c 100644
--- a/code/modules/cargo/packs/security.dm
+++ b/code/modules/cargo/packs/security.dm
@@ -81,8 +81,8 @@
desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproff armor, a few union suits and some warm hats!"
contraband = TRUE
cost = 5750 // Its basicly sec suits, good boots/gloves
- contains = list(/obj/item/clothing/suit/security/officer/russian,
- /obj/item/clothing/suit/security/officer/russian,
+ contains = list(/obj/item/clothing/suit/armor/navyblue/russian,
+ /obj/item/clothing/suit/armor/navyblue/russian,
/obj/item/clothing/shoes/combat,
/obj/item/clothing/shoes/combat,
/obj/item/clothing/head/ushanka,
@@ -104,7 +104,7 @@
contraband = TRUE
access = FALSE
cost = 5500 //
- contains = list(/obj/item/clothing/suit/security/officer/russian,
+ contains = list(/obj/item/clothing/suit/armor/navyblue/russian,
/obj/item/clothing/shoes/combat,
/obj/item/clothing/head/ushanka,
/obj/item/clothing/suit/armor/bulletproof,
@@ -141,15 +141,15 @@
cost = 3250
contains = list(/obj/item/clothing/under/rank/security/navyblue,
/obj/item/clothing/under/rank/security/navyblue,
- /obj/item/clothing/suit/security/officer,
- /obj/item/clothing/suit/security/officer,
+ /obj/item/clothing/suit/armor/navyblue,
+ /obj/item/clothing/suit/armor/navyblue,
/obj/item/clothing/head/beret/sec/navyofficer,
/obj/item/clothing/head/beret/sec/navyofficer,
/obj/item/clothing/under/rank/warden/navyblue,
- /obj/item/clothing/suit/security/warden,
+ /obj/item/clothing/suit/armor/vest/warden/navyblue,
/obj/item/clothing/head/beret/sec/navywarden,
/obj/item/clothing/under/rank/head_of_security/navyblue,
- /obj/item/clothing/suit/security/hos,
+ /obj/item/clothing/suit/armor/hos/navyblue,
/obj/item/clothing/head/beret/sec/navyhos)
crate_name = "security clothing crate"
diff --git a/code/modules/cargo/packs/vending.dm b/code/modules/cargo/packs/vending.dm
index f9982d17b6..344d19f6c9 100644
--- a/code/modules/cargo/packs/vending.dm
+++ b/code/modules/cargo/packs/vending.dm
@@ -22,6 +22,14 @@
/obj/item/book/granter/action/drink_fling)
crate_name = "bartending supply crate"
+/datum/supply_pack/vending/hydro
+ name = "Cartridge Supply Crate"
+ desc = "Restock you cartridges for PDAs. Contains a PTech vending machine refill."
+ cost = 5000
+ contains = list(/obj/item/vending_refill/cart)
+ crate_name = "hydroponics supply crate"
+ crate_type = /obj/structure/closet/crate
+
/datum/supply_pack/vending/cigarette
name = "Cigarette Supply Crate"
desc = "Don't believe the reports - smoke today! Contains a cigarette vending machine refill."
@@ -30,6 +38,25 @@
crate_name = "cigarette supply crate"
crate_type = /obj/structure/closet/crate
+/datum/supply_pack/vending/dinner
+ name = "Dinnerware Supply Crate"
+ desc = "Use a plate and have some utensils! Contains a dinnerware and sustenance vending machine refill."
+ cost = 2500
+ contains = list(/obj/item/vending_refill/sustenance,
+ /obj/item/vending_refill/dinnerware)
+ crate_name = "dinnerware supply crate"
+ crate_type = /obj/structure/closet/crate
+
+/datum/supply_pack/vending/dinner
+ name = "Engineering Supply Crate"
+ desc = "Packs of tools waiting to be used for repairing. Contains a tool and engineering vending machine refill. Requires CE access."
+ cost = 5500 //Powerfull
+ access = ACCESS_CE
+ contains = list(/obj/item/vending_refill/tool,
+ /obj/item/vending_refill/engivend)
+ crate_name = "engineering supply crate"
+ crate_type = /obj/structure/closet/crate/secure/engineering
+
/datum/supply_pack/vending/games
name = "Games Supply Crate"
desc = "Get your game on with this game vending machine refill."
@@ -38,8 +65,18 @@
crate_name = "games supply crate"
crate_type = /obj/structure/closet/crate
+/datum/supply_pack/vending/hydro
+ name = "Hydroponics Supply Crate"
+ desc = "Arnt you glad you dont have to do it the natural way? Contains a megaseed and nutrimax vending machine refill."
+ cost = 5000
+ contains = list(/obj/item/vending_refill/hydroseeds,
+ /obj/item/vending_refill/hydronutrients)
+ crate_name = "hydroponics supply crate"
+ crate_type = /obj/structure/closet/crate
+
/datum/supply_pack/vending/kinkmate
name = "Kinkmate Supply and Construction Kit"
+ desc = "A fun way to spend the shift. Contains unmentionable desires."
cost = 2000
contraband = TRUE
contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate)
@@ -77,6 +114,13 @@
contains = list(/obj/item/vending_refill/cola)
crate_name = "soft drinks supply crate"
+/datum/supply_pack/vending/vendomat
+ name = "Vendomat Supply Crate"
+ desc = "Contains a Vendomat restock unit!"
+ cost = 1200
+ contains = list(/obj/item/vending_refill/assist)
+ crate_name = "vendomat supply crate"
+
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Wardrobe Vendors ////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm
index 006f1a8084..668698d2e9 100644
--- a/code/modules/cargo/supplypod_beacon.dm
+++ b/code/modules/cargo/supplypod_beacon.dm
@@ -77,7 +77,7 @@
/obj/item/supplypod_beacon/AltClick(mob/user)
. = ..()
- if (!user.canUseTopic(src, !issilicon(user)))
+ if (!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if (express_console)
unlink_console()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 006cdf8dc8..ba20fdacd2 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -137,7 +137,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"balls_cum_rate" = CUM_RATE,
"balls_cum_mult" = CUM_RATE_MULT,
"balls_efficiency" = CUM_EFFICIENCY,
- "balls_fluid" = "semen",
"has_ovi" = FALSE,
"ovi_shape" = "knotted",
"ovi_length" = 6,
@@ -152,7 +151,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"breasts_color" = "fff",
"breasts_size" = "C",
"breasts_shape" = "Pair",
- "breasts_fluid" = "milk",
"breasts_producing" = FALSE,
"has_vag" = FALSE,
"vag_shape" = "Human",
@@ -163,7 +161,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"womb_cum_rate" = CUM_RATE,
"womb_cum_mult" = CUM_RATE_MULT,
"womb_efficiency" = CUM_EFFICIENCY,
- "womb_fluid" = "femcum",
"ipc_screen" = "Sunburst",
"ipc_antenna" = "None",
"flavor_text" = "",
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 24e44f191e..03c6051c5d 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -423,13 +423,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_balls_size"] >> features["balls_size"]
S["feature_balls_shape"] >> features["balls_shape"]
S["feature_balls_sack_size"] >> features["balls_sack_size"]
- S["feature_balls_fluid"] >> features["balls_fluid"]
//breasts features
S["feature_has_breasts"] >> features["has_breasts"]
S["feature_breasts_size"] >> features["breasts_size"]
S["feature_breasts_shape"] >> features["breasts_shape"]
S["feature_breasts_color"] >> features["breasts_color"]
- S["feature_breasts_fluid"] >> features["breasts_fluid"]
S["feature_breasts_producing"] >> features["breasts_producing"]
//vagina features
S["feature_has_vag"] >> features["has_vag"]
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 7df10b56f7..b60856001e 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -488,4 +488,47 @@
if(client && client.prefs.uses_glasses_colour && glasses_equipped)
add_client_colour(G.glass_colour_type)
else
- remove_client_colour(G.glass_colour_type)
\ No newline at end of file
+ remove_client_colour(G.glass_colour_type)
+
+/obj/item/clothing/glasses/debug
+ name = "debug glasses"
+ desc = "Medical, security and diagnostic hud. Alt click to toggle xray."
+ icon_state = "nvgmeson"
+ item_state = "nvgmeson"
+ flags_cover = GLASSESCOVERSEYES
+ darkness_view = 8
+ flash_protect = 2
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
+ glass_colour_type = FALSE
+ clothing_flags = SCAN_REAGENTS
+ vision_flags = SEE_TURFS
+ var/list/hudlist = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED, DATA_HUD_SECURITY_ADVANCED)
+ var/xray = FALSE
+
+/obj/item/clothing/glasses/debug/equipped(mob/user, slot)
+ . = ..()
+ if(slot != ITEM_SLOT_EYES)
+ return
+ if(ishuman(user))
+ for(var/hud in hudlist)
+ var/datum/atom_hud/H = GLOB.huds[hud]
+ H.add_hud_to(user)
+
+/obj/item/clothing/glasses/debug/dropped(mob/user)
+ . = ..()
+ if(ishuman(user))
+ for(var/hud in hudlist)
+ var/datum/atom_hud/H = GLOB.huds[hud]
+ H.remove_hud_from(user)
+
+/obj/item/clothing/glasses/debug/AltClick(mob/user)
+ . = ..()
+ if(ishuman(user))
+ if(xray)
+ vision_flags -= SEE_MOBS|SEE_OBJS
+ else
+ vision_flags += SEE_MOBS|SEE_OBJS
+ xray = !xray
+ var/mob/living/carbon/human/H = user
+ H.update_sight()
+
diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm
index 8ab897f5d9..0729317eac 100644
--- a/code/modules/clothing/gloves/_gloves.dm
+++ b/code/modules/clothing/gloves/_gloves.dm
@@ -11,6 +11,8 @@
var/transfer_blood = 0
strip_delay = 20
equip_delay_other = 40
+ var/strip_mod = 1 //how much they alter stripping items time by, higher is quicker
+ var/strip_silence = FALSE //if it shows a warning when stripping
/obj/item/clothing/gloves/ComponentInitialize()
. = ..()
diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm
index a76ff7c583..fe07cc7ab9 100644
--- a/code/modules/clothing/gloves/boxing.dm
+++ b/code/modules/clothing/gloves/boxing.dm
@@ -5,6 +5,7 @@
item_state = "boxing"
equip_delay_other = 60
species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion
+ strip_mod = 0.5
/obj/item/clothing/gloves/boxing/green
icon_state = "boxinggreen"
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index b630b121a9..f4b04f5bfe 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -41,6 +41,7 @@
permeability_coefficient = 1
resistance_flags = NONE
transfer_prints = TRUE
+ strip_mod = 0.8
/obj/item/clothing/gloves/cut/family
desc = "The old gloves your great grandfather stole from Engineering, many moons ago. They've seen some tough times recently."
@@ -76,6 +77,7 @@
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
var/can_be_cut = 1
+ strip_mod = 1.2
/obj/item/clothing/gloves/color/black/hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index efe32a1473..9f4b89f607 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -10,6 +10,7 @@
equip_delay_other = 20
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ strip_mod = 0.9
/obj/item/clothing/gloves/botanic_leather
name = "botanist's leather gloves"
@@ -23,6 +24,7 @@
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30)
+ strip_mod = 0.9
/obj/item/clothing/gloves/combat
name = "combat gloves"
@@ -38,6 +40,7 @@
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
+ strip_mod = 1.5
/obj/item/clothing/gloves/bracer
@@ -103,3 +106,15 @@
/obj/item/clothing/gloves/rapid/hug/attack_self(mob/user)
return FALSE
+
+/obj/item/clothing/gloves/thief
+ name = "black gloves"
+ desc = "Gloves made with completely frictionless, insulated cloth, easier to steal from people with."
+ icon_state = "thief"
+ item_state = "blackgloves"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ strip_delay = 80
+ transfer_prints = FALSE
+ strip_mod = 5
+ strip_silence = TRUE
\ No newline at end of file
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 1e8f26e7fe..e6c68f2662 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -39,6 +39,12 @@
/obj/item/clothing/mask/gas/welding/attack_self(mob/user)
weldingvisortoggle(user)
+/obj/item/clothing/mask/gas/welding/up
+
+/obj/item/clothing/mask/gas/welding/up/Initialize()
+ ..()
+ visor_toggling()
+
// ********************************************************************
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index 4c8f9bdab2..ab2f89ffc4 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -272,7 +272,7 @@
/datum/outfit/wizard
name = "Blue Wizard"
- uniform = /obj/item/clothing/under/color/lightpurple
+ uniform = /obj/item/clothing/under/color/lightpurple/trackless
suit = /obj/item/clothing/suit/wizrobe
shoes = /obj/item/clothing/shoes/sandal/magic
ears = /obj/item/radio/headset
@@ -427,14 +427,27 @@
/datum/outfit/debug //Debug objs plus hardsuit
name = "Debug outfit"
uniform = /obj/item/clothing/under/patriotsuit
- suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite
- shoes = /obj/item/clothing/shoes/magboots/advance
- suit_store = /obj/item/tank/internals/oxygen
- mask = /obj/item/clothing/mask/gas/welding
- belt = /obj/item/storage/belt/utility/chief/full
- gloves = /obj/item/clothing/gloves/combat
- id = /obj/item/card/id/ert
- glasses = /obj/item/clothing/glasses/meson/night
+ suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite/debug
+ glasses = /obj/item/clothing/glasses/debug
ears = /obj/item/radio/headset/headset_cent/commander
+ mask = /obj/item/clothing/mask/gas/welding/up
+ gloves = /obj/item/clothing/gloves/combat
+ belt = /obj/item/storage/belt/utility/chief/full
+ l_pocket = /obj/item/gun/magic/wand/resurrection/debug
+ r_pocket = /obj/item/gun/magic/wand/death/debug
+ shoes = /obj/item/clothing/shoes/magboots/advance/debug
+ id = /obj/item/card/id/debug
+ suit_store = /obj/item/tank/internals/oxygen
back = /obj/item/storage/backpack/holding
- backpack_contents = list(/obj/item/card/emag=1, /obj/item/flashlight/emp/debug=1, /obj/item/construction/rcd/combat=1, /obj/item/gun/magic/wand/resurrection/debug=1, /obj/item/melee/transforming/energy/axe=1)
+ box = /obj/item/storage/box/debugtools
+ internals_slot = ITEM_SLOT_SUITSTORE
+ backpack_contents = list(
+ /obj/item/melee/transforming/energy/axe=1,\
+ /obj/item/storage/part_replacer/bluespace/tier4=1,\
+ /obj/item/debug/human_spawner=1,\
+ )
+
+/datum/outfit/debug/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ var/obj/item/card/id/W = H.wear_id
+ W.registered_name = H.real_name
+ W.update_label()
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 8864add0d8..1acb7628a3 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -30,8 +30,9 @@
magpulse = !magpulse
icon_state = "[magboot_state][magpulse]"
to_chat(user, "You [magpulse ? "enable" : "disable"] the mag-pulse traction system. ")
- user.update_inv_shoes() //so our mob-overlays update
- user.update_gravity(user.has_gravity())
+ if(user)
+ user.update_inv_shoes() //so our mob-overlays update
+ user.update_gravity(user.has_gravity())
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
@@ -52,6 +53,11 @@
slowdown_active = SHOES_SLOWDOWN
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+/obj/item/clothing/shoes/magboots/advance/debug
+
+/obj/item/clothing/shoes/magboots/advance/debug/Initialize()
+ attack_self(src)
+
/obj/item/clothing/shoes/magboots/syndie
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
name = "blood-red magboots"
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 703fe26287..fab41c9876 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -269,7 +269,7 @@
item_state = "syndie_helm"
item_color = "syndi"
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90)
- on = TRUE
+ on = FALSE
var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null
actions_types = list(/datum/action/item_action/toggle_helmet_mode)
visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
@@ -367,6 +367,12 @@
on = FALSE
resistance_flags = FIRE_PROOF | ACID_PROOF
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug
+
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug/Initialize()
+ . = ..()
+ soundloop.volume = 0
+
/obj/item/clothing/suit/space/hardsuit/syndi/elite
name = "elite syndicate hardsuit"
desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in travel mode."
@@ -380,6 +386,9 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC
+/obj/item/clothing/suit/space/hardsuit/syndi/elite/debug
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug
+ slowdown = 0
//The Owl Hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/syndi/owl
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index e536d307ef..4591ba8b4e 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -15,6 +15,13 @@
if(!allowed)
allowed = GLOB.security_vest_allowed
+/obj/item/clothing/suit/armor/navyblue
+ name = "security officer's jacket"
+ desc = "This jacket is for those special occasions when a security officer isn't required to wear their armor."
+ icon_state = "officerbluejacket"
+ item_state = "officerbluejacket"
+ body_parts_covered = CHEST|ARMS
+
/obj/item/clothing/suit/armor/vest
name = "armor vest"
desc = "A slim Type I armored vest that provides decent protection against most types of damage."
@@ -52,8 +59,17 @@
heat_protection = CHEST|GROIN|LEGS|ARMS
strip_delay = 80
+/obj/item/clothing/suit/armor/hos/navyblue
+ name = "head of security's jacket"
+ desc = "This piece of clothing was specifically designed for asserting superior authority."
+ icon_state = "hosbluejacket"
+ item_state = "hosbluejacket"
+ body_parts_covered = CHEST|ARMS
+ cold_protection = CHEST|ARMS
+ heat_protection = CHEST|ARMS
+
/obj/item/clothing/suit/armor/hos/trenchcoat
- name = "armored trenchoat"
+ name = "armored trenchcoat"
desc = "A trenchcoat enhanced with a special lightweight kevlar. The epitome of tactical plainclothes."
icon_state = "hostrench"
item_state = "hostrench"
@@ -78,6 +94,13 @@
desc = "A red jacket with silver rank pips and body armor strapped on top."
icon_state = "warden_jacket"
+/obj/item/clothing/suit/armor/vest/warden/navyblue
+ name = "warden's jacket"
+ desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig."
+ icon_state = "wardenbluejacket"
+ item_state = "wardenbluejacket"
+ body_parts_covered = CHEST|ARMS
+
/obj/item/clothing/suit/armor/vest/leather
name = "security overcoat"
desc = "Lightly armored leather overcoat meant as casual wear for high-ranking officers. Bears the crest of Nanotrasen Security."
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 88bafc842b..48fd8ccf1c 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -155,28 +155,6 @@
blood_overlay_type = "armor" //it's the less thing that I can put here
body_parts_covered = NONE
-//Security
-/obj/item/clothing/suit/security/officer
- name = "security officer's jacket"
- desc = "This jacket is for those special occasions when a security officer isn't required to wear their armor."
- icon_state = "officerbluejacket"
- item_state = "officerbluejacket"
- body_parts_covered = CHEST|ARMS
-
-/obj/item/clothing/suit/security/warden
- name = "warden's jacket"
- desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig."
- icon_state = "wardenbluejacket"
- item_state = "wardenbluejacket"
- body_parts_covered = CHEST|ARMS
-
-/obj/item/clothing/suit/security/hos
- name = "head of security's jacket"
- desc = "This piece of clothing was specifically designed for asserting superior authority."
- icon_state = "hosbluejacket"
- item_state = "hosbluejacket"
- body_parts_covered = CHEST|ARMS
-
//Surgeon
/obj/item/clothing/suit/apron/surgical
name = "surgical apron"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 84609e29d8..b61918c4b8 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -317,7 +317,7 @@
flags_cover = HEADCOVERSEYES
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-/obj/item/clothing/suit/security/officer/russian
+/obj/item/clothing/suit/armor/navyblue/russian
name = "\improper Russian officer's jacket"
desc = "This jacket is for those special occasions when a russian officer isn't required to wear their armor."
icon_state = "officertanjacket"
@@ -325,17 +325,16 @@
body_parts_covered = CHEST|ARMS
/obj/item/clothing/suit/ran
- name = "Shikigami costume"
+ name = "shikigami costume"
desc = "A costume that looks like a certain shikigami, is super fluffy."
icon_state = "ran_suit"
item_state = "ran_suit"
body_parts_covered = CHEST|GROIN|LEGS
flags_inv = HIDEJUMPSUIT|HIDETAUR
heat_protection = CHEST|GROIN|LEGS //fluffy tails!
-//2061
/obj/item/clothing/head/ran
- name = "Shikigami hat"
+ name = "shikigami hat"
desc = "A hat that looks like it keeps any fluffy ears contained super warm, has little charms over it."
icon_state = "ran_hat"
item_state = "ran_hat"
@@ -880,7 +879,6 @@
blood_overlay_type = "armor"
body_parts_covered = CHEST
resistance_flags = NONE
- mutantrace_variation = NONE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -5, "acid" = -15) //nylon sucks against acid
/obj/item/clothing/suit/assu_suit
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 12cafb7e46..a18b7e5817 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -41,6 +41,10 @@
item_color = "black"
resistance_flags = NONE
+/obj/item/clothing/under/color/black/trackless
+ desc = "A black jumpsuit that has its sensors removed."
+ has_sensor = NO_SENSORS
+
/obj/item/clothing/under/skirt/color/black
name = "black jumpskirt"
icon_state = "black_skirt"
@@ -189,13 +193,16 @@
item_state = "b_suit"
item_color = "teal_skirt"
-
/obj/item/clothing/under/color/lightpurple
name = "purple jumpsuit"
icon_state = "lightpurple"
item_state = "p_suit"
item_color = "lightpurple"
+/obj/item/clothing/under/color/lightpurple/trackless
+ desc = "A magically colored jumpsuit. No sensors are attached!"
+ has_sensor = NO_SENSORS
+
/obj/item/clothing/under/skirt/color/lightpurple
name = "lightpurple jumpskirt"
icon_state = "lightpurple_skirt"
diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm
index 418b75e1ce..6a3d2c2233 100644
--- a/code/modules/error_handler/error_handler.dm
+++ b/code/modules/error_handler/error_handler.dm
@@ -19,6 +19,13 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
log_world("The bug with recursion runtimes has been fixed. Please remove the snowflake check from world/Error in [__FILE__]:[__LINE__]")
return //this will never happen.
+ else if(copytext(E.name,1,18) == "Out of resources!")//18 == length() of that string + 1
+ log_world("BYOND out of memory. Restarting")
+ log_game("BYOND out of memory. Restarting")
+ TgsEndProcess()
+ Reboot(reason = 1)
+ return ..()
+
if (islist(stack_trace_storage))
for (var/line in splittext(E.desc, "\n"))
if (text2ascii(line) != 32)
diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm
index 13c516960a..899a083b7d 100644
--- a/code/modules/events/holiday/vday.dm
+++ b/code/modules/events/holiday/vday.dm
@@ -140,7 +140,7 @@
/obj/item/valentine/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
- if( !(ishuman(user) || isobserver(user) || issilicon(user)) )
+ if( !(ishuman(user) || isobserver(user) || hasSiliconAccessInArea(user)) )
user << browse("[name] [stars(message)]", "window=[name]")
onclose(user, "[name]")
else
diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm
index 6ecc1d9d42..e24ce13034 100644
--- a/code/modules/events/meteor_wave.dm
+++ b/code/modules/events/meteor_wave.dm
@@ -22,7 +22,7 @@
/datum/round_event/meteor_wave/setup()
announceWhen = 1
- startWhen = rand(60, 90) //Yeah for SOME REASON this is measured in seconds and not deciseconds???
+ startWhen = rand(90, 180) // Apparently it is by 2 seconds, so 90 is actually 180 seconds, and 180 is 360 seconds. So this is 3-6 minutes
if(GLOB.singularity_counter)
startWhen *= 1 - min(GLOB.singularity_counter * SINGULO_BEACON_DISTURBANCE, SINGULO_BEACON_MAX_DISTURBANCE)
endWhen = startWhen + 60
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index 8bc5491970..ab9ab96678 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -177,6 +177,7 @@
shuttleId = "pirateship"
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
+ resistance_flags = INDESTRUCTIBLE
light_color = LIGHT_COLOR_RED
possible_destinations = "pirateship_away;pirateship_home;pirateship_custom"
@@ -184,6 +185,7 @@
name = "pirate shuttle navigation computer"
desc = "Used to designate a precise transit location for the pirate shuttle."
shuttleId = "pirateship"
+ resistance_flags = INDESTRUCTIBLE
lock_override = CAMERA_LOCK_STATION
shuttlePortId = "pirateship_custom"
x_offset = 9
@@ -226,6 +228,7 @@
desc = "This sophisticated machine scans the nearby space for items of value."
icon = 'icons/obj/machines/research.dmi'
icon_state = "tdoppler"
+ resistance_flags = INDESTRUCTIBLE
density = TRUE
var/cooldown = 300
var/next_use = 0
@@ -259,6 +262,7 @@
name = "cargo hold pad"
icon = 'icons/obj/telescience.dmi'
icon_state = "lpad-idle-o"
+ resistance_flags = INDESTRUCTIBLE
var/idle_state = "lpad-idle-o"
var/warmup_state = "lpad-idle"
var/sending_state = "lpad-beam"
@@ -272,6 +276,7 @@
/obj/machinery/computer/piratepad_control
name = "cargo hold control terminal"
+ resistance_flags = INDESTRUCTIBLE
var/status_report = "Idle"
var/obj/machinery/piratepad/pad
var/warmup_time = 100
diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm
index 9cf3a86e71..58a2875849 100644
--- a/code/modules/events/spontaneous_appendicitis.dm
+++ b/code/modules/events/spontaneous_appendicitis.dm
@@ -19,7 +19,7 @@
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
+ if(!(H.mob_biotypes & MOB_ORGANIC)) //biotype sleeper bugs strike again, once again making appendicitis pick a target that can't take it
continue
var/foundAlready = FALSE //don't infect someone that already has appendicitis
for(var/datum/disease/appendicitis/A in H.diseases)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index cd5c9d850b..7bd5e66430 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -107,9 +107,9 @@
smash(hit_atom, throwingdatum?.thrower, TRUE)
/obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE)
- if(!isGlass)
+ if(!isGlass && !istype(src, /obj/item/reagent_containers/food/drinks/bottle)) //I don't like this but I also don't want to rework drink container hierarchy
return
- if(QDELING(src) || !target) //Invalid loc
+ if(QDELING(src) || (ranged && !target))
return
if(bartender_check(target) && ranged)
return
@@ -126,12 +126,69 @@
B.transform = M
B.pixel_x = rand(-12, 12)
B.pixel_y = rand(-12, 12)
- if(prob(33))
- new/obj/item/shard(drop_location())
- playsound(src, "shatter", 70, 1)
+ if(isGlass)
+ playsound(src, "shatter", 70, 1)
+ if(prob(33))
+ new/obj/item/shard(drop_location())
+ else
+ B.force = 0
+ B.throwforce = 0
+ B.desc = "A carton with the bottom half burst open. Might give you a papercut."
transfer_fingerprints_to(B)
qdel(src)
+/obj/item/reagent_containers/food/drinks/MouseDrop(atom/over, atom/src_location, atom/over_location, src_control, over_control, params)
+ var/mob/user = usr
+ . = ..()
+ if (!istype(src_location) || !istype(over_location))
+ return
+ if (!user || user.incapacitated() || !user.Adjacent(src))
+ return
+ if (!(locate(/obj/structure/table) in src_location) || !(locate(/obj/structure/table) in over_location))
+ return
+
+ //Are we an expert slider?
+ var/datum/action/innate/D = get_action_of_type(user, /datum/action/innate/drink_fling)
+ if(!D?.active)
+ if (!src_location.Adjacent(over_location)) // Regular users can only do short slides.
+ return
+ if (prob(10))
+ user.visible_message("\The [user] tries to slide \the [src] down the table, but fails miserably. ", "You fail to slide \the [src] down the table! ")
+ smash(over_location, user, FALSE)
+ return
+ user.visible_message("\The [user] slides \the [src] down the table. ", "You slide \the [src] down the table! ")
+ forceMove(over_location)
+ return
+ var/distance = MANHATTAN_DISTANCE(over_location, src)
+ if (distance >= 8 || distance == 0) // More than a full screen to go, or trying to slide to the same tile
+ return
+
+ // Geometrically checking if we're on a straight line.
+ var/datum/vector/V = atoms2vector(src, over_location)
+ var/datum/vector/V_norm = V.duplicate()
+ V_norm.normalize()
+ if (!V_norm.is_integer())
+ return // Only a cardinal vector (north, south, east, west) can pass this test
+
+ // Checks if there's tables on the path.
+ var/turf/dest = get_translated_turf(V)
+ var/turf/temp_turf = src_location
+
+ do
+ temp_turf = temp_turf.get_translated_turf(V_norm)
+ if (!locate(/obj/structure/table) in temp_turf)
+ var/datum/vector/V2 = atoms2vector(src, temp_turf)
+ vector_translate(V2, 0.1 SECONDS)
+ user.visible_message("\The [user] slides \the [src] down the table... and straight into the ground! ", "You slide \the [src] down the table, and straight into the ground! ")
+ smash(over_location, user, FALSE)
+ return
+ while (temp_turf != dest)
+
+ vector_translate(V, 0.1 SECONDS)
+ user.visible_message("\The [user] expertly slides \the [src] down the table. ", "You slide \the [src] down the table. What a pro. ")
+ return
+
+
////////////////////////////////////////////////////////////////////////////////
/// Drinks. END
////////////////////////////////////////////////////////////////////////////////
@@ -223,19 +280,24 @@
spillable = TRUE
/obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype)
+ cut_overlays()
if(reagents.total_volume)
- icon_state = "tea"
+ var/mutable_appearance/MA = mutable_appearance(icon,"mugoverlay")
+ MA.color = mix_color_from_reagents(reagents.reagent_list)
+ add_overlay(MA)
else
icon_state = "tea_empty"
/obj/item/reagent_containers/food/drinks/mug/tea
name = "Duke Purple tea"
+ icon_state = "tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
list_reagents = list(/datum/reagent/consumable/tea = 30)
/obj/item/reagent_containers/food/drinks/mug/coco
name = "Dutch hot coco"
desc = "Made in Space South America."
+ icon_state = "coco"
list_reagents = list(/datum/reagent/consumable/hot_coco = 30, /datum/reagent/consumable/sugar = 5)
foodtype = SUGAR
resistance_flags = FREEZE_PROOF
@@ -289,28 +351,6 @@
icon_state = "juicebox"
volume = 15 //I figure if you have to craft these it should at least be slightly better than something you can get for free from a watercooler
-/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/smash(atom/target, mob/thrower, ranged = FALSE)
- if(bartender_check(target) && ranged)
- return
- var/obj/item/broken_bottle/B = new (loc)
- B.icon_state = icon_state
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
- B.name = "broken [name]"
- B.force = 0
- B.throwforce = 0
- B.desc = "A carton with the bottom half burst open. Might give you a papercut."
- if(ranged)
- var/matrix/M = matrix(B.transform)
- M.Turn(rand(-170, 170))
- B.transform = M
- B.pixel_x = rand(-12, 12)
- B.pixel_y = rand(-12, 12)
- transfer_fingerprints_to(B)
- qdel(src)
-
/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change(changetype)
if (reagents.reagent_list.len)
switch(reagents.get_master_reagent_id())
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 7f2b24ca11..07026e79de 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -16,40 +16,6 @@
isGlass = TRUE
foodtype = ALCOHOL
-
-/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE)
- //Creates a shattering noise and replaces the bottle with a broken_bottle
- if(bartender_check(target) && ranged)
- return
- var/obj/item/broken_bottle/B = new (loc)
- if(!ranged)
- thrower.put_in_hands(B)
- else
- var/matrix/M = matrix(B.transform)
- M.Turn(rand(-170, 170))
- B.transform = M
- B.pixel_x = rand(-12, 12)
- B.pixel_y = rand(-12, 12)
- B.icon_state = icon_state
-
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
-
- if(isGlass)
- if(prob(33))
- new/obj/item/shard(drop_location())
- playsound(src, "shatter", 70, 1)
- else
- B.force = 0
- B.throwforce = 0
- B.desc = "A carton with the bottom half burst open. Might give you a papercut."
- B.name = "broken [name]"
- transfer_fingerprints_to(B)
-
- qdel(src)
-
/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user)
if(!target)
@@ -109,7 +75,7 @@
//Keeping this here for now, I'll ask if I should keep it here.
/obj/item/broken_bottle
name = "broken bottle"
- desc = "A bottle with a sharp broken bottom."
+ desc = "A shattered glass container with sharp edges."
icon = 'icons/obj/drinks.dmi'
icon_state = "broken_bottle"
force = 9
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index f01966a0ff..c65e42c0e4 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -96,6 +96,16 @@
tastes = list("egg" = 4, "salt" = 1, "pepper" = 1)
foodtype = MEAT | FRIED | BREAKFAST
+/obj/item/reagent_containers/food/snacks/baconegg
+ name = "bacon and eggs"
+ desc = "A fried egg with a side of bacon. Delicious!"
+ icon_state = "baconegg"
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
+ bitesize = 1
+ filling_color = "#FFFFF0"
+ tastes = list("egg" = 2, "bacon" = 2, "salt" = 1, "pepper" = 1)
+ foodtype = MEAT | FRIED | BREAKFAST
+
/obj/item/reagent_containers/food/snacks/boiledegg
name = "boiled egg"
desc = "A hard boiled egg."
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index 41b08e8c7f..a7090a5274 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -549,7 +549,7 @@
name = "chocolate"
desc = "A tiny and sweet chocolate. Has a 'strawberry' filling!"
icon_state = "tiny_chocolate"
- list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/coco = 1, /datum/reagent/drug/aphrodisiac = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/coco = 1)
filling_color = "#A0522D"
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index 1c8b70dc13..de1f00ae5d 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -353,6 +353,13 @@
tastes = list("muffin" = 3, "spookiness" = 1)
foodtype = GRAIN | FRUIT | SUGAR | BREAKFAST
+/obj/item/reagent_containers/food/snacks/muffin/poppy
+ name = "poppy muffin"
+ icon_state = "poppymuffin"
+ desc = "A classic lemon poppy seed muffin. Do not consume prior to drug testing."
+ tastes = list("muffin" = 3, "lemon" = 1, "seeds" = 1)
+ foodtype = GRAIN | SUGAR | BREAKFAST
+
/obj/item/reagent_containers/food/snacks/chawanmushi
name = "chawanmushi"
desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index e4d36b29d2..e908662658 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -55,7 +55,7 @@
if(!operating)
. += "Alt-click [src] to turn it on. "
- if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
+ if(!in_range(user, src) && !hasSiliconAccessInArea(user) && !isobserver(user))
. += "You're too far away to examine [src]'s contents and display! "
return
if(operating)
@@ -63,7 +63,7 @@
return
if(length(ingredients))
- if(issilicon(user))
+ if(hasSiliconAccessInArea(user))
. += "\The [src] camera shows: "
else
. += "\The [src] contains: "
@@ -187,14 +187,14 @@
/obj/machinery/microwave/AltClick(mob/user)
. = ..()
- if(user.canUseTopic(src, !issilicon(usr)))
+ if(user.canUseTopic(src, !hasSiliconAccessInArea(user)))
cook()
return TRUE
/obj/machinery/microwave/ui_interact(mob/user)
. = ..()
- if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user)))
+ if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(isAI(user) && (stat & NOPOWER))
return
@@ -206,10 +206,10 @@
to_chat(user, "\The [src] is empty. ")
return
- var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !issilicon(user))
+ var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !hasSiliconAccessInArea(user))
// post choice verification
- if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user)))
+ if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(isAI(user) && (stat & NOPOWER))
return
diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 9df650500a..c94118ddf1 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -585,6 +585,14 @@
mix_message = "The mixture develops a sinister glow."
mix_sound = 'sound/effects/singlebeat.ogg'
+/datum/chemical_reaction/cogchamp
+ name = "CogChamp"
+ id = /datum/reagent/consumable/ethanol/cogchamp
+ results = list(/datum/reagent/consumable/ethanol/cogchamp = 3)
+ required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol/screwdrivercocktail = 1)
+ mix_message = "You hear faint sounds of gears turning as it mixes."
+ mix_sound = 'sound/effects/clockcult_gateway_closing.ogg'
+
/datum/chemical_reaction/quadruplesec
name = "Quadruple Sec"
id = /datum/reagent/consumable/ethanol/quadruple_sec
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
index 6d495d1c79..c049cd7563 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
@@ -13,6 +13,15 @@
result = /obj/item/reagent_containers/food/snacks/friedegg
subcategory = CAT_EGG
+/datum/crafting_recipe/food/baconegg
+ name = "Bacon and Eggs"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/friedegg = 1,
+ /obj/item/reagent_containers/food/snacks/meat/bacon = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/baconegg
+ subcategory = CAT_EGG
+
/datum/crafting_recipe/food/omelette
name = "Omelette"
reqs = list(
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 b545702e3e..62b8509eb1 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -377,6 +377,17 @@ datum/crafting_recipe/food/donut/meat
result = /obj/item/reagent_containers/food/snacks/muffin/booberry
subcategory = CAT_PASTRY
+/datum/crafting_recipe/food/poppymuffin
+ name = "Poppy muffin"
+ reqs = list(
+ /datum/reagent/consumable/milk = 5,
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 1,
+ /obj/item/seeds/poppy = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/muffin/poppy
+ subcategory = CAT_PASTRY
+
/datum/crafting_recipe/food/chawanmushi
name = "Chawanmushi"
reqs = list(
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index d551222836..b5cbed8b79 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -92,7 +92,7 @@
data["emagged"] = TRUE
data["emag_programs"] = emag_programs
data["program"] = program
- data["can_toggle_safety"] = issilicon(user) || IsAdminGhost(user)
+ data["can_toggle_safety"] = hasSiliconAccessInArea(user) || IsAdminGhost(user)
return data
@@ -109,7 +109,7 @@
if(A)
load_program(A)
if("safety")
- if(!issilicon(usr) && !IsAdminGhost(usr))
+ if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr))
var/msg = "[key_name(usr)] attempted to emag the holodeck using a href they shouldn't have!"
message_admins(msg)
log_admin(msg)
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index 8f2900c8a6..fb9bb8ba7b 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -105,7 +105,7 @@
return
var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600)
- if(!(in_range(src, user) || issilicon(user)))
+ if(!(in_range(src, user) || hasSiliconAccessInArea(user)))
popup.close()
return
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index 8cdf403b00..4843d863c5 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -71,9 +71,10 @@
reagents_add = list(/datum/reagent/consumable/nutriment = 0.05)
rarity = 30
-/obj/item/seeds/poppy/lily/trumpet/Initialize()
- ..()
- unset_mutability(/datum/plant_gene/reagent/polypyr, PLANT_GENE_EXTRACTABLE)
+/obj/item/seeds/poppy/lily/trumpet/Initialize(mapload, nogenes = FALSE)
+ . = ..()
+ if(!nogenes)
+ unset_mutability(/datum/plant_gene/reagent/polypyr, PLANT_GENE_EXTRACTABLE)
/obj/item/reagent_containers/food/snacks/grown/trumpet
seed = /obj/item/seeds/poppy/lily/trumpet
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index e0a2453353..b8496c865c 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -82,9 +82,10 @@
mutatelist = list()
reagents_add = list(/datum/reagent/consumable/nutriment = 0.05, /datum/reagent/medicine/silibinin = 0.1)
-/obj/item/seeds/galaxythistle/Initialize()
- ..()
- unset_mutability(/datum/plant_gene/trait/invasive, PLANT_GENE_REMOVABLE)
+/obj/item/seeds/galaxythistle/Initialize(mapload, nogenes = FALSE)
+ . = ..()
+ if(!nogenes)
+ unset_mutability(/datum/plant_gene/trait/invasive, PLANT_GENE_REMOVABLE)
/obj/item/reagent_containers/food/snacks/grown/galaxythistle
seed = /obj/item/seeds/galaxythistle
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index 7e43911c5c..554115eb5f 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -217,10 +217,11 @@
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
-/obj/item/seeds/chanterelle/jupitercup/Initialize()
- ..()
- unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
- unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
+/obj/item/seeds/chanterelle/jupitercup/Initialize(mapload, nogenes = FALSE)
+ . = ..()
+ if(!nogenes)
+ unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
+ unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
seed = /obj/item/seeds/chanterelle/jupitercup
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index 99fd873995..756788898a 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -18,7 +18,9 @@
return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes
/datum/plant_gene/proc/Copy()
- return new type
+ var/datum/plant_gene/G = new type
+ G.mutability_flags = mutability_flags
+ return G
/datum/plant_gene/proc/apply_vars(obj/item/seeds/S) // currently used for fire resist, can prob. be further refactored
return
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index f459e97814..aa0e789721 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -37,7 +37,7 @@
var/weed_rate = 1 //If the chance below passes, then this many weeds sprout during growth
var/weed_chance = 5 //Percentage chance per tray update to grow weeds
-/obj/item/seeds/Initialize(loc, nogenes = 0)
+/obj/item/seeds/Initialize(mapload, nogenes = 0)
. = ..()
pixel_x = rand(-8, 8)
pixel_y = rand(-8, 8)
diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm
index f0aa10f2da..ea52b6d461 100644
--- a/code/modules/integrated_electronics/core/printer.dm
+++ b/code/modules/integrated_electronics/core/printer.dm
@@ -107,7 +107,7 @@
interact(user)
/obj/item/integrated_circuit_printer/interact(mob/user)
- if(!(in_range(src, user) || issilicon(user)))
+ if(!(in_range(src, user) || hasSiliconAccessInArea(user)))
return
if(isnull(current_category))
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index 81f47b9a1e..eddb18b25e 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -4,7 +4,7 @@
//check if it doesn't require any access at all
if(src.check_access(null))
return TRUE
- if(issilicon(M))
+ if(hasSiliconAccessInArea(M))
if(ispAI(M))
return FALSE
return TRUE //AI can do whatever it wants
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index 0ace449757..cffeceea9c 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -28,3 +28,7 @@
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
shoes = /obj/item/clothing/shoes/laceup
+/datum/job/bartender/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
+ . = ..()
+ var/datum/action/innate/drink_fling/D = new
+ D.Grant(H)
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index 4e6e982fb9..a5eb2032fa 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -17,6 +17,7 @@
display_order = JOB_DISPLAY_ORDER_MIME
/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M)
+ . = ..()
H.apply_pref_name("mime", M.client)
/datum/outfit/job/mime
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 5ff1cbceb1..459212aad0 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -112,7 +112,6 @@
else
return ..()
-
/obj/structure/bookcase/attack_hand(mob/user)
. = ..()
if(.)
@@ -129,6 +128,17 @@
choice.forceMove(drop_location())
update_icon()
+/obj/structure/bookcase/attack_ghost(mob/dead/observer/user)
+ . = ..()
+ if(!length(contents))
+ to_chat(user, "It's empty! ")
+ return
+ var/obj/item/book/choice = input("Which book would you like to read?") as null|obj in contents
+ if(choice)
+ if(!istype(choice)) //spellbook, cult tome, or the one weird bible storage
+ to_chat(user,"A mysterious force is keeping you from reading that.")
+ return
+ choice.attack_ghost(user)
/obj/structure/bookcase/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/mineral/wood(loc, 4)
@@ -203,13 +213,17 @@
to_chat(user, "You skim through the book but can't comprehend any of it. ")
return
if(dat)
- user << browse("Penned by [author]. " + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
+ show_to(user)
user.visible_message("[user] opens a book titled \"[title]\" and begins reading intently.")
- SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd)
- onclose(user, "book")
else
to_chat(user, "This book is completely blank! ")
+/obj/item/book/attack_ghost(mob/dead/observer/O)
+ . = ..()
+ show_to(O)
+
+/obj/item/book/proc/show_to(mob/user)
+ user << browse("Penned by [author]. " + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
/obj/item/book/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/pen))
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 204a2de9a6..008724b10f 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -441,7 +441,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
if(!GLOB.news_network)
alert("No news network found on station. Aborting.")
var/channelexists = 0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.channel_name == "Nanotrasen Book Club")
channelexists = 1
break
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index cc41682f96..32f9812068 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -66,6 +66,22 @@
force = 19
materials = list(MAT_DIAMOND=4000)
+/obj/item/pickaxe/plasteel
+ name = "plasteel-tipped pickaxe"
+ icon_state = "titaxe"
+ toolspeed = 0.5
+ desc = "A pickaxe with a plasteel pick head. Less robust at cracking rock walls and digging up dirt than the titanium pickaxe, but better at cracking open skulls."
+ force = 19
+ materials = list(MAT_METAL=2000, MAT_PLASMA=2000)
+
+/obj/item/pickaxe/titanium
+ name = "titanium-tipped pickaxe"
+ icon_state = "psteelaxe"
+ toolspeed = 0.3
+ desc = "A pickaxe with a titanium pick head. Extremely robust at cracking rock walls and digging up dirt, but less than the plasteel pickaxe at cracking open skulls."
+ force = 17
+ materials = list(MAT_TITANIUM=4000)
+
/obj/item/pickaxe/drill
name = "mining drill"
icon_state = "handdrill"
diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm
index f63b459f10..133cb41c33 100644
--- a/code/modules/mining/equipment/resonator.dm
+++ b/code/modules/mining/equipment/resonator.dm
@@ -46,7 +46,7 @@
/obj/item/resonator/pre_attack(atom/target, mob/user, params)
if(check_allowed_items(target, 1))
CreateResonance(target, user)
- return TRUE
+ return ..()
//resonance field, crushes rock, damages mobs
/obj/effect/temp_visual/resonance
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 1ddb3a3189..ac4cee8c42 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -93,7 +93,7 @@
req_access = list()
circuit = /obj/item/circuitboard/computer/mining_shuttle/common
shuttleId = "mining_common"
- possible_destinations = "whiteship_home;lavaland_common_away;landing_zone_dock;mining_public"
+ possible_destinations = "lavaland_common_away;commonmining_home"
/**********************Mining car (Crate like thing, not the rail car)**************************/
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 241ec8118e..92bc8e407b 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
@@ -16,7 +16,7 @@
from doing this unless you absolutely know what you are doing, and have defined a
conversion in savefile.dm
*/
-/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
+/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, roundstart = FALSE, skip_prototype = TRUE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
if(!istype(L))
L = list()
if(!istype(male))
@@ -25,7 +25,7 @@
female = list()
for(var/path in typesof(prototype))
- if(path == prototype)
+ if(path == prototype && skip_prototype)
continue
if(roundstart)
var/datum/sprite_accessory/P = path
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 439fe491cc..10d9c5fb02 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -479,32 +479,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
pixel_y = 0
animate(src, pixel_y = 2, time = 10, loop = -1)
-/mob/dead/observer/verb/observe()
- set name = "Observe"
- set category = "Ghost"
-
- var/list/creatures = getpois()
-
- reset_perspective(null)
-
- var/eye_name = null
-
- eye_name = input("Please, select a player!", "Observe", null, null) as null|anything in creatures
-
- if (!eye_name)
- return
-
- var/mob/mob_eye = creatures[eye_name]
- //Istype so we filter out points of interest that are not mobs
- if(client && mob_eye && istype(mob_eye))
- client.eye = mob_eye
- if(mob_eye.hud_used)
- client.screen = list()
- LAZYINITLIST(mob_eye.observers)
- mob_eye.observers |= src
- mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src)
- observetarget = mob_eye
-
/mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
set category = "Ghost"
set name = "Jump to Mob"
@@ -831,6 +805,32 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.screen = list()
hud_used.show_hud(hud_used.hud_version)
+/mob/dead/observer/verb/observe()
+ set name = "Observe"
+ set category = "OOC"
+
+ var/list/creatures = getpois()
+
+ reset_perspective(null)
+
+ var/eye_name = null
+
+ eye_name = input("Please, select a player!", "Observe", null, null) as null|anything in creatures
+
+ if (!eye_name)
+ return
+
+ var/mob/mob_eye = creatures[eye_name]
+ //Istype so we filter out points of interest that are not mobs
+ if(client && mob_eye && istype(mob_eye))
+ client.eye = mob_eye
+ if(mob_eye.hud_used)
+ client.screen = list()
+ LAZYINITLIST(mob_eye.observers)
+ mob_eye.observers |= src
+ mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src)
+ observetarget = mob_eye
+
/mob/dead/observer/verb/register_pai_candidate()
set category = "Ghost"
set name = "pAI Setup"
diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm
index 2c4743f7d3..8712f39531 100644
--- a/code/modules/mob/dead/observer/say.dm
+++ b/code/modules/mob/dead/observer/say.dm
@@ -22,7 +22,7 @@
. = say_dead(message)
/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
- . = ..()
+ SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) //parent calls can't overwrite the current proc args.
var/atom/movable/to_follow = speaker
if(radio_freq)
var/atom/movable/virtualspeaker/V = speaker
@@ -36,4 +36,3 @@
// Recompose the message, because it's scrambled by default
message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source)
to_chat(src, "[link] [message]")
-
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index a14fdb0b53..3b64c35969 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -10,7 +10,7 @@
organ_flags = ORGAN_VITAL
attack_verb = list("attacked", "slapped", "whacked")
///The brain's organ variables are significantly more different than the other organs, with half the decay rate for balance reasons, and twice the maxHealth
- decay_factor = STANDARD_ORGAN_DECAY / 4 //30 minutes of decaying to result in a fully damaged brain, since a fast decay rate would be unfun gameplay-wise
+ decay_factor = STANDARD_ORGAN_DECAY / 2 //30 minutes of decaying to result in a fully damaged brain, since a fast decay rate would be unfun gameplay-wise
healing_factor = STANDARD_ORGAN_HEALING / 2
maxHealth = BRAIN_DAMAGE_DEATH
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 37303a6599..49fcbf4290 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -559,7 +559,7 @@
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 )
+ if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD*2) && stat == DEAD )
become_husk("burn")
med_hud_set_health()
if(stat == SOFT_CRIT)
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index bb4442559e..637178ffe6 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -274,7 +274,7 @@
return
if(health >= 0 && !(HAS_TRAIT(src, TRAIT_FAKEDEATH)))
-
+ var/friendly_check = FALSE
if(lying)
if(buckled)
to_chat(M, "You need to unbuckle [src] first to do that!")
@@ -289,39 +289,35 @@
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
+ var/datum/species/S
+ if(ishuman(src))
+ S = dna.species
- M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better! ", \
- "You give [H] a pat on the head to make [p_them()] feel better! ")
+ M.visible_message("[M] gives [src] a pat on the head to make [p_them()] feel better! ", \
+ "You give [src] a pat on the head to make [p_them()] feel better! ")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat)
- if(HAS_TRAIT(M, TRAIT_FRIENDLY))
- var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
- if (mood.sanity >= SANITY_GREAT)
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/besthug, M)
- else if (mood.sanity >= SANITY_DISTURBED)
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/betterhug, M)
- if(H.dna.species.can_wag_tail(H))
- if("tail_human" in pref_species.default_features)
- if(H.dna.features["tail_human"] == "None")
+ friendly_check = TRUE
+ if(S?.can_wag_tail(src))
+ if("tail_human" in S.default_features)
+ if(dna.features["tail_human"] == "None")
return
else
- if(!H.dna.species.is_wagging_tail())
- H.emote("wag")
+ if(!dna.species.is_wagging_tail())
+ emote("wag")
- if("tail_lizard" in pref_species.default_features)
- if(H.dna.features["tail_lizard"] == "None")
+ if("tail_lizard" in S.default_features)
+ if(dna.features["tail_lizard"] == "None")
return
else
- if(!H.dna.species.is_wagging_tail())
- H.emote("wag")
+ if(!dna.species.is_wagging_tail())
+ emote("wag")
- if("mam_tail" in pref_species.default_features)
- if(H.dna.features["mam_tail"] == "None")
+ if("mam_tail" in S.default_features)
+ if(dna.features["mam_tail"] == "None")
return
else
- if(!H.dna.species.is_wagging_tail())
- H.emote("wag")
+ if(!dna.species.is_wagging_tail())
+ emote("wag")
else
return
@@ -335,8 +331,11 @@
M.visible_message("[M] hugs [src] to make [p_them()] feel better! ", \
"You hug [src] to make [p_them()] feel better! ")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug)
- if(HAS_TRAIT(M, TRAIT_FRIENDLY))
- var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
+ friendly_check = TRUE
+
+ if(friendly_check && HAS_TRAIT(M, TRAIT_FRIENDLY))
+ var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
+ if(mood)
if (mood.sanity >= SANITY_GREAT)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/besthug, M)
else if (mood.sanity >= SANITY_DISTURBED)
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index 34c268578c..3f2a259df7 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -16,10 +16,6 @@
. += "[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.\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))
@@ -116,4 +112,5 @@
. += "[t_He] look[p_s()] very happy."
if(MOOD_LEVEL_HAPPY4 to INFINITY)
. += "[t_He] look[p_s()] ecstatic."
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
. += "*---------* "
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index d6f6b6d9ae..4e6aac4bcb 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -7,13 +7,14 @@
/mob/living/carbon/human/spawn_gibs(with_bodyparts, atom/loc_override)
var/location = loc_override ? loc_override.drop_location() : drop_location()
if(dna?.species?.gib_types)
+ var/blood_dna = get_blood_dna_list()
var/datum/species/S = dna.species
var/length = length(S.gib_types)
if(length)
var/path = (with_bodyparts && length > 1) ? S.gib_types[2] : S.gib_types[1]
new path(location, src, get_static_viruses())
else
- new S.gib_types(location, src, get_static_viruses())
+ new S.gib_types(location, src, get_static_viruses(), blood_dna)
else
if(with_bodyparts)
new /obj/effect/gibspawner/human(location, src, get_static_viruses())
@@ -67,4 +68,4 @@
/mob/living/carbon/proc/makeUncloneable()
ADD_TRAIT(src, TRAIT_NOCLONE, MADE_UNCLONEABLE)
blood_volume = 0
- return TRUE
\ No newline at end of file
+ return TRUE
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index ef8a745b89..7a5fca3562 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -99,6 +99,10 @@
. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES))
. += "[t_His] eyes are glowing an unnatural red! "
+ else if(HAS_TRAIT(src, TRAIT_HIJACKER))
+ var/obj/item/implant/hijack/H = user.getImplant(/obj/item/implant/hijack)
+ if (H && !H.stealthmode && H.toggled)
+ . += "[t_His] eyes are flickering a bright yellow! "
//ears
if(ears && !(SLOT_EARS in obscured))
@@ -396,6 +400,7 @@
var/temp_flavor = print_flavor_text_2()
if(temp_flavor)
. += temp_flavor
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
. += "*---------*"
/mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects!
diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm
deleted file mode 100644
index 6ef1b687c2..0000000000
--- a/code/modules/mob/living/carbon/human/examine_vr.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/mob/living/carbon/human/proc/examine_nutrition()
- var/message = ""
- var/nutrition_examine = round(nutrition)
- var/t_He = "It" //capitalised for use at the start of each line.
- var/t_His = "Its"
- var/t_his = "its"
- var/t_is = "is"
- var/t_has = "has"
- switch(gender)
- if(MALE)
- t_He = "He"
- t_his = "his"
- t_His = "His"
- if(FEMALE)
- t_He = "She"
- t_his = "her"
- t_His = "Her"
- if(PLURAL)
- t_He = "They"
- t_his = "their"
- t_His = "Their"
- t_is = "are"
- t_has = "have"
- if(NEUTER)
- t_He = "It"
- t_his = "its"
- t_His = "Its"
- switch(nutrition_examine)
- if(0 to 49)
- message = "[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room! \n"
- if(50 to 99)
- message = "[t_He] [t_is] extremely hungry. A deep growl occasionally rumbles from [t_his] empty stomach. \n"
- if(100 to 499)
- return message //Well that's pretty normal, really.
- if(500 to 864) // Fat.
- message = "[t_He] [t_has] a stuffed belly, bloated fat and round from eating too much.\n"
- if(1200 to 1934) // One person fully digested.
- message = "[t_He] [t_is] sporting a large, round, sagging stomach. It's contains at least their body weight worth of glorping slush. \n"
- if(1935 to 3004) // Two people.
- message = "[t_He] [t_is] engorged with a huge stomach that sags and wobbles as they move. [t_He] must have consumed at least twice their body weight. It looks incredibly soft. \n"
- if(3005 to 4074) // Three people.
- message = "[t_His] stomach is firmly packed with digesting slop. [t_He] must have eaten at least a few times worth their body weight! It looks hard for them to stand, and [t_his] gut jiggles when they move. \n"
- if(4075 to 10000) // Four or more people.
- message = "[t_He] [t_is] so absolutely stuffed that you aren't sure how it's possible to move. [t_He] can't seem to swell any bigger. The surface of [t_his] belly looks sorely strained! \n"
- return message
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 36d9ca541b..63c7d8f668 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -5,7 +5,7 @@
pressure_resistance = 25
can_buckle = TRUE
buckle_lying = FALSE
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
//Hair colour and style
var/hair_color = "000"
var/hair_style = "Bald"
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 29597344cf..1079c48bf9 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -91,7 +91,7 @@
var/say_starter = "Say \"" //"
if(findtextEx(temp, say_starter, 1, length(say_starter) + 1) && length(temp) > length(say_starter)) //case sensitive means
- temp = trim_left(copytext(temp, length(say_starter + 1)))
+ temp = trim_left(copytext(temp, length(say_starter) + 1))
temp = replacetext(temp, ";", "", 1, 2) //general radio
while(trim_left(temp)[1] == ":") //dept radio again (necessary)
temp = copytext_char(trim_left(temp), 3)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index b861722818..d9728c587a 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -77,7 +77,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/list/species_traits = list()
// generic traits tied to having the species
var/list/inherent_traits = list()
- var/list/inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ var/inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
var/attack_verb = "punch" // punch-specific attack verb
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index ad9ba83771..559abd8d0b 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -4,7 +4,7 @@
say_mod = "states"
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
- inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
+ inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
meat = null
gib_types = /obj/effect/gibspawner/robot
damage_overlay_type = "synth"
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index 96d52dcb27..220e639e34 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -132,14 +132,14 @@
return INITIALIZE_HINT_QDEL
owner = new_owner
START_PROCESSING(SSobj, src)
- RegisterSignal(owner, COMSIG_MOB_EXAMINATE, .proc/examinate_check)
+ RegisterSignal(owner, COMSIG_CLICK_SHIFT, .proc/examinate_check)
RegisterSignal(src, COMSIG_ATOM_HEARER_IN_VIEW, .proc/include_owner)
RegisterSignal(owner, COMSIG_LIVING_REGENERATE_LIMBS, .proc/unlist_head)
RegisterSignal(owner, COMSIG_LIVING_FULLY_HEAL, .proc/retrieve_head)
-/obj/item/dullahan_relay/proc/examinate_check(mob/source, atom/A)
- if(source.client.eye == src && ((A in view(source.client.view, src)) || (isturf(A) && source.sight & SEE_TURFS) || (ismob(A) && source.sight & SEE_MOBS) || (isobj(A) && source.sight & SEE_OBJS)))
- return COMPONENT_ALLOW_EXAMINE
+/obj/item/dullahan_relay/proc/examinate_check(atom/source, mob/user)
+ if(user.client.eye == src)
+ return COMPONENT_ALLOW_EXAMINATE
/obj/item/dullahan_relay/proc/include_owner(datum/source, list/processing_list, list/hearers)
if(!QDELETED(owner))
diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm
index f5f238908c..15422b2cdd 100644
--- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm
@@ -54,21 +54,20 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //
//Dwarf Speech handling - Basically a filter/forces them to say things. The IC helper
/datum/species/dwarf/proc/handle_speech(datum/source, list/speech_args)
var/message = speech_args[SPEECH_MESSAGE]
- if(message[1] != "*")
- message = " [message]" //Credits to goonstation for the strings list.
- var/list/dwarf_words = strings("dwarf_replacement.json", "dwarf") //thanks to regex too.
+ if(speech_args[SPEECH_LANGUAGE] != /datum/language/dwarf) // No accent if they speak their language
+ if(message[1] != "*")
+ message = " [message]" //Credits to goonstation for the strings list.
+ var/list/dwarf_words = strings("dwarf_replacement.json", "dwarf") //thanks to regex too.
+ for(var/key in dwarf_words) //Theres like 1459 words or something man.
+ var/value = dwarf_words[key] //Thus they will always be in character.
+ if(islist(value)) //Whether they like it or not.
+ value = pick(value) //This could be drastically reduced if needed though.
+ message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
+ message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
+ message = replacetextEx(message, " [key]", " [value]") //Also its scottish.
- for(var/key in dwarf_words) //Theres like 1459 words or something man.
- var/value = dwarf_words[key] //Thus they will always be in character.
- if(islist(value)) //Whether they like it or not.
- value = pick(value) //This could be drastically reduced if needed though.
-
- message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
- message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
- message = replacetextEx(message, " [key]", " [value]") //Also its scottish.
-
- if(prob(3))
- message += pick(" By Armok!")
+ if(prob(3))
+ message += " By Armok!"
speech_args[SPEECH_MESSAGE] = trim(message)
//This mostly exists because my testdwarf's liver died while trying to also not die due to no alcohol.
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 4697e6aa3c..13db60e273 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -3,7 +3,7 @@
id = "fly"
say_mod = "buzzes"
species_traits = list(NOEYES)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
+ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
mutanttongue = /obj/item/organ/tongue/fly
mutantliver = /obj/item/organ/liver/fly
mutantstomach = /obj/item/organ/stomach/fly
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 98c3f269dc..e341ad995c 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -4,7 +4,7 @@
id = "iron golem"
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
- inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
+ inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
mutant_organs = list(/obj/item/organ/adamantine_resonator)
speedmod = 2
armor = 55
@@ -638,6 +638,7 @@
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES,NOGENITALS,NOAROUSAL)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
+ inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
armor = 20 //Reinforced, but much less so to allow for fast movement
attack_verb = "smash"
attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg'
@@ -694,7 +695,7 @@
Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient."
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOGENITALS,NOAROUSAL) //no mutcolors, and can burn
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
- inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
+ inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
armor = 15 //feels no pain, but not too resistant
burnmod = 2 // don't get burned
speedmod = 1 // not as heavy as stone
@@ -1017,7 +1018,7 @@
else
playsound(get_turf(owner),'sound/magic/RATTLEMEBONES.ogg', 100)
for(var/mob/living/L in orange(7, get_turf(owner)))
- if((MOB_UNDEAD in L.mob_biotypes) || isgolem(L) || HAS_TRAIT(L, TRAIT_RESISTCOLD))
+ if((L.mob_biotypes & MOB_UNDEAD) || isgolem(L) || HAS_TRAIT(L, TRAIT_RESISTCOLD))
return //Do not affect our brothers
to_chat(L, "A spine-chilling sound chills you to the bone! ")
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 973992ce1c..6468bd1544 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -5,8 +5,8 @@
say_mod = "hisses"
default_color = "00FF00"
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_REPTILE)
mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur", "deco_wings")
+ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
mutanttongue = /obj/item/organ/tongue/lizard
mutanttail = /obj/item/organ/tail/lizard
coldmod = 1.5
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 4a7399f287..c899575e44 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -6,7 +6,7 @@
meat = /obj/item/stack/sheet/mineral/plasma
species_traits = list(NOBLOOD,NOTRANSSTING,NOGENITALS)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER,TRAIT_CALCIUM_HEALER)
- inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
+ inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
mutantlungs = /obj/item/organ/lungs/plasmaman
mutanttongue = /obj/item/organ/tongue/bone/plasmaman
mutantliver = /obj/item/organ/liver/plasmaman
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 0c4007555c..410ad05d93 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -8,7 +8,7 @@
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH, TRAIT_CALCIUM_HEALER)
- inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
+ inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
mutanttongue = /obj/item/organ/tongue/bone
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
disliked_food = NONE
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 0957a9e807..287cd481d7 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -5,7 +5,7 @@
sexes = 0
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
- inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
+ inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
dangerous_existence = 1
blacklisted = 1
meat = null
@@ -124,4 +124,4 @@
if (/datum/species/golem/bananium)
speech_args[SPEECH_SPANS] |= SPAN_CLOWN
if (/datum/species/golem/clockwork)
- speech_args[SPEECH_SPANS] |= SPAN_ROBOT
\ No newline at end of file
+ speech_args[SPEECH_SPANS] |= SPAN_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 7462d26ea6..8bbd870149 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -4,7 +4,7 @@
default_color = "FFFFFF"
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,DRINKSBLOOD)
inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH)
- inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
+ inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None")
exotic_bloodtype = "U"
use_skintones = TRUE
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 8255f08507..26a99dbc2b 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -10,7 +10,7 @@
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH)
- inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
+ inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
mutanttongue = /obj/item/organ/tongue/zombie
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
disliked_food = NONE
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index fa6cc44fca..f1b1570e24 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -182,10 +182,10 @@ There are several things that need to be remembered:
if(!gloves && bloody_hands)
var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER, color = blood_DNA_to_color())
- if(get_num_arms() < 2)
- if(has_left_hand())
+ if(get_num_arms(FALSE) < 2)
+ if(has_left_hand(FALSE))
bloody_overlay.icon_state = "bloodyhands_left"
- else if(has_right_hand())
+ else if(has_right_hand(FALSE))
bloody_overlay.icon_state = "bloodyhands_right"
overlays_standing[GLOVES_LAYER] = bloody_overlay
@@ -265,7 +265,7 @@ There are several things that need to be remembered:
/mob/living/carbon/human/update_inv_shoes()
remove_overlay(SHOES_LAYER)
- if(get_num_legs() <2)
+ if(get_num_legs(FALSE) <2)
return
if(client && hud_used)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 21d2c005f4..f9f47e2255 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -358,7 +358,7 @@
return
// No decay if formaldehyde in corpse or when the corpse is charred
- if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 15) || HAS_TRAIT(src, TRAIT_HUSK))
+ if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || HAS_TRAIT(src, TRAIT_HUSK))
return
// Also no decay if corpse chilled or not organic/undead
@@ -397,6 +397,8 @@
if(O)
O.on_life()
else
+ if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1)) // No organ decay if the body contains formaldehyde.
+ return
for(var/V in internal_organs)
var/obj/item/organ/O = V
if(O)
@@ -578,6 +580,9 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
if(cultslurring)
cultslurring = max(cultslurring-1, 0)
+ if(clockcultslurring)
+ clockcultslurring = max(clockcultslurring-1, 0)
+
if(silent)
silent = max(silent-1, 0)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index ea5203778b..f3abe83958 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -7,7 +7,7 @@
gender = NEUTER
pass_flags = PASSTABLE
ventcrawler = VENTCRAWLER_NUDE
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/monkey
gib_type = /obj/effect/decal/cleanable/blood/gibs
@@ -15,7 +15,6 @@
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
@@ -42,14 +41,15 @@
create_dna(src)
dna.initialize_dna(random_blood_type())
+/mob/living/carbon/monkey/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/mob_holder, "monkey", null, null, null, SLOT_HEAD)
+
+
/mob/living/carbon/monkey/Destroy()
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/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm
deleted file mode 100644
index 695258f944..0000000000
--- a/code/modules/mob/living/inhand_holder.dm
+++ /dev/null
@@ -1,130 +0,0 @@
-//Generic system for picking up mobs.
-//Currently works for head and hands.
-/obj/item/clothing/head/mob_holder
- name = "bugged mob"
- desc = "Yell at coderbrush."
- icon = null
- icon_state = ""
- var/mob/living/held_mob
- var/can_head = FALSE
- w_class = WEIGHT_CLASS_BULKY
-
-/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, alt_worn, lh_icon, rh_icon, _can_head_override = FALSE)
- . = ..()
-
- 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
-
-/obj/item/clothing/head/mob_holder/Destroy()
- if(held_mob)
- release()
- return ..()
-
-/obj/item/clothing/head/mob_holder/dropped()
- ..()
- if(isturf(loc))//don't release on soft-drops
- release()
-
-/obj/item/clothing/head/mob_holder/proc/release()
- if(isliving(loc))
- var/mob/living/L = loc
- L.dropItemToGround(src)
- 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)
- return
-
-/obj/item/clothing/head/mob_holder/container_resist()
- if(isliving(loc))
- var/mob/living/L = loc
- visible_message("[src] escapes [L]! ")
- release()
-
-/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
-
-/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 90ada3d718..8652a1ee9e 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -40,11 +40,6 @@
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)
@@ -763,10 +758,22 @@
if(HAS_TRAIT(what, TRAIT_NODROP))
to_chat(src, "You can't remove \the [what.name], it appears to be stuck! ")
return
- who.visible_message("[src] tries to remove [who]'s [what.name]. ", \
+ var/strip_mod = 1
+ var/strip_silence = FALSE
+ if (ishuman(src)) //carbon doesn't actually wear gloves
+ var/mob/living/carbon/C = src
+ var/obj/item/clothing/gloves/g = C.gloves
+ if (istype(g))
+ strip_mod = g.strip_mod
+ strip_silence = g.strip_silence
+ if (!strip_silence)
+ who.visible_message("[src] tries to remove [who]'s [what.name]. ", \
"[src] tries to remove [who]'s [what.name]. ")
- what.add_fingerprint(src)
- if(do_mob(src, who, what.strip_delay, ignorehelditem = TRUE))
+ what.add_fingerprint(src)
+ else
+ to_chat(src,"You try to remove [who]'s [what.name]. ")
+ what.add_fingerprint(src)
+ if(do_mob(src, who, round(what.strip_delay / strip_mod), ignorehelditem = TRUE))
if(what && Adjacent(who))
if(islist(where))
var/list/L = where
@@ -1087,6 +1094,10 @@
fall(forced = 1)
canmove = !(ko || recoveringstam || pinned || IsStun() || IsFrozen() || chokehold || buckled || (!has_legs && !ignore_legs && !has_arms)) //Cit change - makes it plausible to move while resting, adds pinning and stamina crit
density = !lying
+ if(resting)
+ ENABLE_BITFIELD(movement_type, CRAWLING)
+ else
+ DISABLE_BITFIELD(movement_type, CRAWLING)
if(lying)
if(layer == initial(layer)) //to avoid special cases like hiding larvas.
layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
@@ -1172,8 +1183,6 @@
return
if(!over.Adjacent(src) || (user != src) || !canUseTopic(over))
return
- if(can_be_held)
- mob_try_pickup(over)
/mob/living/proc/get_static_viruses() //used when creating blood and other infective objects
if(!LAZYLEN(diseases))
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index e668828392..7106d003ee 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -52,7 +52,7 @@
var/limb_destroyer = 0 //1 Sets AI behavior that allows mobs to target and dismember limbs with their basic attack.
var/mob_size = MOB_SIZE_HUMAN
- var/list/mob_biotypes = list(MOB_ORGANIC)
+ var/mob_biotypes = MOB_ORGANIC
var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
var/has_limbs = 0 //does the mob have distinct limbs?(arms,legs, chest,head)
@@ -89,6 +89,7 @@
var/stuttering = 0
var/slurring = 0
var/cultslurring = 0
+ var/clockcultslurring = 0
var/derpspeech = 0
var/list/implants = null
@@ -101,8 +102,6 @@
var/list/obj/effect/proc_holder/abilities = list()
- var/can_be_held = FALSE //whether this can be picked up and held.
-
var/radiation = 0 //If the mob is irradiated.
var/ventcrawl_layer = PIPING_LAYER_DEFAULT
var/losebreath = 0
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index a12d468e24..b0f627f82b 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -103,7 +103,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
else if(message_mode || saymode)
message = copytext_char(message, 3)
message = trim_left(message)
-
+ if(!message)
+ return
if(message_mode == MODE_ADMIN)
if(client)
client.cmd_admin_say(message)
@@ -223,7 +224,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
. = "[.] "
/mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
- . = ..()
+ SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) //parent calls can't overwrite the current proc args.
if(!client)
return
var/deaf_message
@@ -353,6 +354,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if(cultslurring)
message = cultslur(message)
+
+ if(clockcultslurring)
+ message = CLOCK_CULT_SLUR(message)
message = capitalize(message)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 33cbdb7cc9..ed0d0d02e8 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -315,10 +315,10 @@
var/is_anchored = FALSE
if(move_resist == MOVE_FORCE_OVERPOWERING)
move_resist = MOVE_FORCE_NORMAL
+ REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, src)
else
is_anchored = TRUE
move_resist = MOVE_FORCE_OVERPOWERING
- REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, src)
ADD_TRAIT(src, TRAIT_NO_TELEPORT, src)
to_chat(src, "You are now [is_anchored ? "" : "un"]anchored. ")
diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm
index 2f133259ca..7b1854b940 100644
--- a/code/modules/mob/living/silicon/login.dm
+++ b/code/modules/mob/living/silicon/login.dm
@@ -7,4 +7,7 @@
var/datum/antagonist/bloodsucker/V = mind.has_antag_datum(/datum/antagonist/bloodsucker)
if(V)
mind.remove_antag_datum(V)
+ var/datum/antagonist/gang/G = mind.has_antag_datum(/datum/antagonist/gang)
+ if(G)
+ mind.remove_antag_datum(G)
..()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 9e2dea0442..409665f792 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -11,7 +11,7 @@
health = 500
maxHealth = 500
layer = BELOW_MOB_LAYER
- can_be_held = TRUE
+ var/datum/element/mob_holder/current_mob_holder //because only a few of their chassis can be actually held.
var/network = "ss13"
var/obj/machinery/camera/current = null
@@ -64,9 +64,6 @@
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'
var/emitterhealth = 20
var/emittermaxhealth = 20
diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm
index 05b2bc77ba..d8e910642d 100644
--- a/code/modules/mob/living/silicon/pai/pai_defense.dm
+++ b/code/modules/mob/living/silicon/pai/pai_defense.dm
@@ -1,3 +1,4 @@
+#define PAI_EMP_SILENCE_DURATION 3 MINUTES
/mob/living/silicon/pai/blob_act(obj/structure/blob/B)
return FALSE
@@ -8,7 +9,7 @@
return
take_holo_damage(50/severity)
Knockdown(400/severity)
- silent = max((3 MINUTES)/severity, silent)
+ silent = max(silent, (PAI_EMP_SILENCE_DURATION) / SSmobs.wait / severity)
if(holoform)
fold_in(force = TRUE)
emitter_next_use = world.time + emitter_emp_cd
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index bb02bf172d..8ae44c042f 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -96,6 +96,12 @@
dynamic_chassis = choice
resist_a_rest(FALSE, TRUE)
update_icon()
+ if(possible_chassis[chassis])
+ current_mob_holder = AddElement(/datum/element/mob_holder, chassis, 'icons/mob/pai_item_head.dmi', 'icons/mob/pai_item_rh.dmi', 'icons/mob/pai_item_lh.dmi', SLOT_HEAD)
+ else
+ current_mob_holder?.Detach(src)
+ current_mob_holder = null
+ return
to_chat(src, "You switch your holochassis projection composite to [chassis] ")
/mob/living/silicon/pai/lay_down()
@@ -117,19 +123,6 @@
set_light(0)
to_chat(src, "You disable your integrated light. ")
-/mob/living/silicon/pai/mob_pickup(mob/living/L)
- var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, chassis, item_head_icon, item_lh_icon, item_rh_icon)
- if(!L.put_in_hands(holder))
- qdel(holder)
- else
- L.visible_message("[L] scoops up [src]! ")
-
-/mob/living/silicon/pai/mob_try_pickup(mob/living/user)
- if(!possible_chassis[chassis])
- 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"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index a079a9985c..e304f13d1d 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -191,7 +191,7 @@
else if(istype(I, /obj/item/gun/energy))
var/obj/item/gun/energy/EG = I
if(EG.cell?.charge < EG.cell.maxcharge)
- var/obj/item/ammo_casing/energy/S = EG.ammo_type[EG.select]
+ var/obj/item/ammo_casing/energy/S = EG.ammo_type[EG.current_firemode_index]
EG.cell.give(S.e_cost * coeff)
if(!EG.chambered)
EG.recharge_newshot(TRUE)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index e5881848d5..72e98e348c 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -10,7 +10,7 @@
bubble_icon = "machine"
weather_immunities = list("ash")
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
- mob_biotypes = list(MOB_ROBOTIC)
+ mob_biotypes = MOB_ROBOTIC
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
speech_span = SPAN_ROBOT
flags_1 = PREVENT_CONTENTS_EXPLOSION_1 | HEAR_1
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index cd449dacd9..7da0ad13da 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -3,7 +3,7 @@
icon = 'icons/mob/aibots.dmi'
layer = MOB_LAYER
gender = NEUTER
- mob_biotypes = list(MOB_ROBOTIC)
+ mob_biotypes = MOB_ROBOTIC
light_range = 3
light_power = 0.9
light_color = "#CDDDFF"
@@ -182,8 +182,9 @@
return TRUE
/mob/living/simple_animal/bot/death(gibbed)
- explode()
- ..()
+ . = ..()
+ if(!gibbed)
+ explode()
/mob/living/simple_animal/bot/proc/explode()
qdel(src)
@@ -809,14 +810,14 @@ Pass a positive integer as an argument to override a bot's default speed.
switch(href_list["operation"])
if("patrol")
- if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
+ if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
return TRUE
auto_patrol = !auto_patrol
bot_reset()
if("remote")
remote_disabled = !remote_disabled
if("hack")
- if(!issilicon(usr) && !IsAdminGhost(usr))
+ if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr))
var/msg = "[key_name(usr)] attempted to hack a bot with a href that shouldn't be available!"
message_admins(msg)
log_admin(msg)
@@ -835,7 +836,7 @@ Pass a positive integer as an argument to override a bot's default speed.
to_chat(usr, "[text_dehack] ")
bot_reset()
if("ejectpai")
- if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr)))
+ if(paicard && (!locked || hasSiliconAccessInArea(usr) || IsAdminGhost(usr)))
to_chat(usr, "You eject [paicard] from [bot_name] ")
ejectpai(usr)
update_controls()
@@ -862,13 +863,13 @@ Pass a positive integer as an argument to override a bot's default speed.
if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it.
if(!hacked) //Manually emagged by a human - access denied to all.
return TRUE
- else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access.
+ else if(!hasSiliconAccessInArea(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access.
return TRUE
return FALSE
/mob/living/simple_animal/bot/proc/hack(mob/user)
var/hack
- if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot.
+ if(hasSiliconAccessInArea(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot.
hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"] "
hack += "Harm Prevention Safety System: [emagged ? "DANGER " : "Engaged"] "
else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control.
@@ -877,7 +878,7 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/proc/showpai(mob/user)
var/eject = ""
- if((!locked || issilicon(usr) || IsAdminGhost(usr)))
+ if((!locked || hasSiliconAccessInArea(usr) || IsAdminGhost(usr)))
if(paicard || allow_pai)
eject += "Personality card status: "
if(paicard)
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index cdb8ac820c..0e48723f37 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -298,7 +298,7 @@
Status: [on ? "On" : "Off"]
Behaviour controls are [locked ? "locked" : "unlocked"]
Maintenance panel panel is [open ? "opened" : "closed"]"})
- if(!locked || issilicon(user)|| IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user)|| IsAdminGhost(user))
dat += " Clean Blood: [blood ? "Yes" : "No"] "
dat += " Clean Trash: [trash ? "Yes" : "No"] "
dat += " Exterminate Pests: [pests ? "Yes" : "No"] "
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index 4e479dc75b..6d304c6782 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"] "},
"[on ? "On" : "Off"] " )
- if(!locked || issilicon(user)|| IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user)|| IsAdminGhost(user))
if(!lasercolor)
dat += text({"
Arrest Unidentifiable Persons: []
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index 2b52da6821..6ab4dc36db 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -111,7 +111,7 @@
dat += "Maintenance panel panel is [open ? "opened" : "closed"] "
dat += "Behaviour controls are [locked ? "locked" : "unlocked"] "
- if(!locked || issilicon(user) || IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
dat += "Extinguish Fires: [extinguish_fires ? "Yes" : "No"] "
dat += "Extinguish People: [extinguish_people ? "Yes" : "No"] "
dat += "Patrol Station: [auto_patrol ? "Yes" : "No"] "
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index cae707ce46..1bf3883ea7 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -83,7 +83,7 @@
dat += "None Loaded "
dat += "Behaviour controls are [locked ? "locked" : "unlocked"] "
- if(!locked || issilicon(user) || IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"] "
dat += "Place floor tiles: [placetiles ? "Yes" : "No"] "
dat += "Replace existing floor tiles with custom tiles: [replacetiles ? "Yes" : "No"] "
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index d844237a61..e491cff74a 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -90,7 +90,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
"[on ? "On" : "Off"] " )
- if(!locked || issilicon(user) || IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
dat += text({" Auto Patrol: []"},
"[auto_patrol ? "On" : "Off"] " )
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index a4496dd1f5..bb29cd3526 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -148,7 +148,7 @@
else
dat += "None Loaded"
dat += " Behaviour controls are [locked ? "locked" : "unlocked"] "
- if(!locked || issilicon(user) || IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
dat += "Healing Threshold: "
dat += "-- "
dat += "- "
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 0e8e009ca8..b23f3f2baa 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -279,7 +279,7 @@
// TODO: remove this; PDAs currently depend on it
/mob/living/simple_animal/bot/mulebot/get_controls(mob/user)
- var/ai = issilicon(user)
+ var/ai = hasSiliconAccessInArea(user)
var/dat
dat += "Multiple Utility Load Effector Mk. V "
dat += "ID: [id] "
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 8302346a00..461fa9cf2a 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
"[on ? "On" : "Off"] " )
- if(!locked || issilicon(user) || IsAdminGhost(user))
+ if(!locked || hasSiliconAccessInArea(user) || IsAdminGhost(user))
dat += text({"
Arrest Unidentifiable Persons: []
Arrest for Unauthorized Weapons: []
@@ -131,7 +131,7 @@ Auto Patrol: []"},
/mob/living/simple_animal/bot/secbot/Topic(href, href_list)
if(..())
return 1
- if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
+ if(!hasSiliconAccessInArea(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked))
return TRUE
switch(href_list["operation"])
if("idcheck")
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index fbdc32f2c1..4c6bfc4c3e 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -3,7 +3,7 @@
real_name = "Construct"
desc = ""
gender = NEUTER
- mob_biotypes = list(MOB_INORGANIC)
+ mob_biotypes = NONE
speak_emote = list("hisses")
response_help = "thinks better of touching"
response_disarm = "flails at"
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index 17d7530c29..9f3e44fee7 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -143,7 +143,7 @@
/datum/outfit/russiancorpse/officer
name = "Russian Officer Corpse"
uniform = /obj/item/clothing/under/rank/security/navyblue/russian
- suit = /obj/item/clothing/suit/security/officer/russian
+ suit = /obj/item/clothing/suit/armor/navyblue/russian
shoes = /obj/item/clothing/shoes/combat
ears = /obj/item/radio/headset
head = /obj/item/clothing/head/ushanka
@@ -207,7 +207,7 @@
/obj/effect/mob_spawn/human/corpse/bee_terrorist
name = "BLF Operative"
outfit = /datum/outfit/bee_terrorist
-
+
/datum/outfit/bee_terrorist
name = "BLF Operative"
uniform = /obj/item/clothing/under/color/yellow
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 2fbbad66d8..80fba5a9a4 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -18,7 +18,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = VENTCRAWLER_ALWAYS
mob_size = MOB_SIZE_TINY
- mob_biotypes = list(MOB_ORGANIC, MOB_BUG)
+ mob_biotypes = MOB_ORGANIC|MOB_BUG
gold_core_spawnable = FRIENDLY_SPAWN
verb_say = "flutters"
verb_ask = "flutters inquisitively"
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 016bee2d44..0f95096497 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -17,7 +17,7 @@
ventcrawler = VENTCRAWLER_ALWAYS
pass_flags = PASSTABLE
mob_size = MOB_SIZE_SMALL
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
minbodytemp = 200
maxbodytemp = 400
unsuitable_atmos_damage = 1
@@ -31,7 +31,7 @@
var/mob/living/simple_animal/mouse/movement_target
gold_core_spawnable = FRIENDLY_SPAWN
collar_type = "cat"
- can_be_held = "cat2"
+ var/held_icon = "cat2"
do_footstep = TRUE
/mob/living/simple_animal/pet/cat/Initialize()
@@ -41,6 +41,7 @@
/mob/living/simple_animal/pet/cat/ComponentInitialize()
. = ..()
AddElement(/datum/element/wuv, "purrs!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "hisses!", EMOTE_AUDIBLE)
+ AddElement(/datum/element/mob_holder, held_icon)
/mob/living/simple_animal/pet/cat/update_canmove()
..()
@@ -60,6 +61,7 @@
icon_state = "spacecat"
icon_living = "spacecat"
icon_dead = "spacecat_dead"
+ held_icon = "spacecat"
unsuitable_atmos_damage = 0
minbodytemp = TCMB
maxbodytemp = T0C + 40
@@ -71,6 +73,7 @@
icon_state = "original"
icon_living = "original"
icon_dead = "original_dead"
+ held_icon = "original"
collar_type = null
unique_pet = TRUE
@@ -84,7 +87,7 @@
pass_flags = PASSMOB
mob_size = MOB_SIZE_SMALL
collar_type = "kitten"
- can_be_held = "cat"
+ held_icon = "cat"
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/pet/cat/Runtime
@@ -249,7 +252,7 @@
attacked_sound = 'sound/items/eatfood.ogg'
deathmessage = "loses its false life and collapses!"
death_sound = "bodyfall"
- can_be_held = "cak"
+ held_icon = "cak"
/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts)
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
index 26d4691d83..95aa86aaab 100644
--- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
@@ -13,7 +13,7 @@
maxbodytemp = INFINITY
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
- mob_biotypes = list(MOB_ORGANIC, MOB_BUG)
+ mob_biotypes = MOB_ORGANIC|MOB_BUG
response_help = "pokes"
response_disarm = "shoos"
response_harm = "splats"
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 554d03991a..37ef271226 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -1,7 +1,7 @@
//Dogs.
/mob/living/simple_animal/pet/dog
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
@@ -13,13 +13,14 @@
see_in_dark = 5
speak_chance = 1
turns_per_move = 10
+ var/held_icon = "corgi"
do_footstep = TRUE
- can_be_held = TRUE
/mob/living/simple_animal/pet/dog/ComponentInitialize()
. = ..()
- AddElement(/datum/element/wuv, "yaps_happily!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "growls!", EMOTE_AUDIBLE)
+ AddElement(/datum/element/wuv, "yaps happily!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "growls!", EMOTE_AUDIBLE)
+ AddElement(/datum/element/mob_holder, held_icon)
//Corgis and pugs are now under one dog subtype
@@ -34,13 +35,11 @@
childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5)
animal_species = /mob/living/simple_animal/pet/dog
gold_core_spawnable = FRIENDLY_SPAWN
- can_be_held = TRUE
collar_type = "corgi"
var/obj/item/inventory_head
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)
@@ -69,7 +68,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"
+ held_icon = "pug"
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi
name = "Exotic Corgi"
@@ -156,13 +155,6 @@
..()
update_corgi_fluff()
-/mob/living/simple_animal/pet/dog/corgi/mob_pickup(mob/living/L)
- var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "corgi", null, 'icons/mob/pets_held_lh.dmi', 'icons/mob/pets_held_rh.dmi', FALSE)
- if(!L.put_in_hands(holder))
- qdel(holder)
- else
- L.visible_message("[L] scoops up [src]! ")
-
/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list)
if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
usr << browse(null, "window=mob[REF(src)]")
@@ -371,7 +363,10 @@
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"
+ var/datum/element/mob_holder/ele = SSdcs.GetElement(/datum/element/mob_holder, held_icon)
+ if(ele)
+ ele.Detach(src)
+ AddElement(/datum/element/mob_holder, "old_corgi")
/mob/living/simple_animal/pet/dog/corgi/Ian/Life()
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
@@ -594,7 +589,7 @@
unsuitable_atmos_damage = 0
minbodytemp = TCMB
maxbodytemp = T0C + 40
- can_be_held = "void_puppy"
+ held_icon = "void_puppy"
/mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0)
return 1 //Void puppies can navigate space.
@@ -616,7 +611,7 @@
response_harm = "kicks"
var/turns_since_scan = 0
var/puppies = 0
- can_be_held = "lisa"
+ held_icon = "lisa"
//Lisa already has a cute bow!
/mob/living/simple_animal/pet/dog/corgi/Lisa/Topic(href, href_list)
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 28fb1f5a42..7dd373b49f 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -35,7 +35,7 @@
sight = (SEE_TURFS | SEE_OBJS)
status_flags = (CANPUSH | CANSTUN | CANKNOCKDOWN)
gender = NEUTER
- mob_biotypes = list(MOB_ROBOTIC)
+ mob_biotypes = MOB_ROBOTIC
speak_emote = list("chirps")
speech_span = SPAN_ROBOT
bubble_icon = "machine"
@@ -51,7 +51,7 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
see_in_dark = 7
blood_volume = 0
- can_be_held = TRUE
+ var/can_be_held = TRUE //mob holder element.
held_items = list(null, null)
var/staticChoice = "static"
var/list/staticChoices = list("static", "blank", "letter", "animal")
@@ -101,6 +101,11 @@
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
diag_hud.add_to_hud(src)
+/mob/living/simple_animal/drone/ComponentInitialize()
+ . = ..()
+ if(can_be_held)
+ //icon/item state is defined in mob_holder/drone_worn_icon()
+ AddElement(/datum/element/mob_holder, null, 'icons/mob/head.dmi', 'icons/mob/inhands/clothing_righthand.dmi', 'icons/mob/inhands/clothing_lefthand.dmi', TRUE, /datum/element/mob_holder.proc/drone_worn_icon)
/mob/living/simple_animal/drone/med_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
@@ -283,7 +288,3 @@
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 c9207fcf89..0f97a4c496 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -29,12 +29,6 @@
if("Nothing")
return
-//picky up the drone c:
-/mob/living/simple_animal/drone/attack_hand(mob/user)
- 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()
if(!client && (!G || !G.client))
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 38bcfbde79..78305b5b44 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -17,7 +17,7 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
faction = list("neutral")
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
attack_same = 1
attacktext = "kicks"
attack_sound = 'sound/weapons/punch1.ogg'
@@ -112,7 +112,7 @@
icon_dead = "cow_dead"
icon_gib = "cow_gib"
gender = FEMALE
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak = list("moo?","moo","MOOOOOO")
speak_emote = list("moos","moos hauntingly")
emote_hear = list("brays.")
@@ -189,7 +189,7 @@
icon_dead = "chick_dead"
icon_gib = "chick_gib"
gender = FEMALE
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
speak_emote = list("cheeps")
emote_hear = list("cheeps.")
@@ -235,7 +235,7 @@
name = "\improper chicken"
desc = "Hopefully the eggs are good this season."
gender = FEMALE
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
icon_state = "chicken_brown"
icon_living = "chicken_brown"
icon_dead = "chicken_brown_dead"
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index 3f58ca593e..95b082b733 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -18,9 +18,12 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
gold_core_spawnable = FRIENDLY_SPAWN
- can_be_held = "fox"
do_footstep = TRUE
+/mob/living/simple_animal/pet/fox/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/mob_holder, "fox")
+
//Captain fox
/mob/living/simple_animal/pet/fox/Renault
name = "Renault"
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index cafa0d9009..f0d354ace1 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -18,12 +18,15 @@
density = FALSE
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_SMALL
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST, MOB_REPTILE)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE
gold_core_spawnable = FRIENDLY_SPAWN
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/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/mob_holder, "lizard", null, null, null, SLOT_HEAD) //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
@@ -40,7 +43,3 @@
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 69d9a0eef3..c5a4fa6e1e 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -22,21 +22,20 @@
ventcrawler = VENTCRAWLER_ALWAYS
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
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()
. = ..()
AddComponent(/datum/component/squeak, list('sound/effects/mousesqueek.ogg'=1), 100)
if(!body_color)
- body_color = pick( list("brown","gray","white") )
+ body_color = pick(list("brown","gray","white"))
+ AddElement(/datum/element/mob_holder, "mouse_[body_color]")
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
@@ -89,17 +88,14 @@
/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
@@ -124,7 +120,3 @@
/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/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index c24dc6857a..dbdb5c646c 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/pet
icon = 'icons/mob/pets.dmi'
mob_size = MOB_SIZE_SMALL
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
blood_volume = BLOOD_VOLUME_NORMAL
var/unique_pet = FALSE // if the mob can be renamed
var/obj/item/clothing/neck/petcollar/pcollar
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
index 175cb8e838..28063d6e52 100644
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm
@@ -14,7 +14,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
melee_damage_lower = 18
melee_damage_upper = 18
@@ -22,9 +22,11 @@
maxHealth = 50
speed = 10
glide_size = 2
- can_be_held = "sloth" //finally oranges can be held
do_footstep = TRUE
+/mob/living/simple_animal/pet/fox/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/mob_holder, "sloth") //finally oranges can be held
//Cargo Sloth
/mob/living/simple_animal/sloth/paperwork
diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm
index 95838c9acb..7f75888649 100644
--- a/code/modules/mob/living/simple_animal/friendly/snake.dm
+++ b/code/modules/mob/living/simple_animal/friendly/snake.dm
@@ -30,7 +30,7 @@
density = FALSE
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_SMALL
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST, MOB_REPTILE)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE
gold_core_spawnable = FRIENDLY_SPAWN
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
@@ -59,4 +59,4 @@
QDEL_NULL(target)
adjustBruteLoss(-2)
else
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 62c8588ac8..9ad3cbd373 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -10,7 +10,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
desc = "A mysterious being that stands by its charge, ever vigilant."
speak_emote = list("hisses")
gender = NEUTER
- mob_biotypes = list(MOB_INORGANIC)
+ mob_biotypes = NONE
bubble_icon = "guardian"
response_help = "passes through"
response_disarm = "flails at"
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index acd8da9618..b019019c71 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -6,7 +6,7 @@
icon_living = "bear"
icon_dead = "bear_dead"
icon_gib = "bear_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak = list("RAWR!","Rawr!","GRR!","Growl!")
speak_emote = list("growls", "roars")
emote_hear = list("rawrs.","grumbles.","grawls.")
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index bb1f1284b5..524c220fa4 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -37,7 +37,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
density = FALSE
mob_size = MOB_SIZE_TINY
- mob_biotypes = list(MOB_ORGANIC, MOB_BUG)
+ mob_biotypes = MOB_ORGANIC|MOB_BUG
movement_type = FLYING
gold_core_spawnable = HOSTILE_SPAWN
search_objects = 1 //have to find those plant trays!
diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
index 2b5b5236ed..07572fff83 100644
--- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
@@ -2,7 +2,7 @@
/mob/living/simple_animal/hostile/boss/paper_wizard
name = "Mjor the Creative"
desc = "A wizard with a taste for the arts."
- mob_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_HUMANOID
boss_abilities = list(/datum/action/boss/wizard_summon_minions, /datum/action/boss/wizard_mimic)
faction = list("hostile","stickman")
del_on_death = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 4122cab6d9..36968a1ab0 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -7,7 +7,7 @@
icon_living = "carp"
icon_dead = "carp_dead"
icon_gib = "carp_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2)
@@ -17,10 +17,9 @@
emote_taunt = list("gnashes")
taunt_chance = 30
speed = 0
- maxHealth = 25
- health = 25
+ maxHealth = 35
+ health = 35
spacewalk = TRUE
-
harm_intent_damage = 8
obj_damage = 50
melee_damage_lower = 15
@@ -28,7 +27,6 @@
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
speak_emote = list("gnashes")
-
//Space carp aren't affected by cold.
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -37,6 +35,19 @@
movement_type = FLYING
pressure_resistance = 200
gold_core_spawnable = HOSTILE_SPAWN
+ //some carps heal over time
+ var/regen_cooldown = 0 //Used for how long it takes before a healing will take place default in 60 seconds
+ var/regen_amount = 0 //How much is healed pre regen cooldown
+
+/mob/living/simple_animal/hostile/carp/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
+ . = ..()
+ if(regen_amount)
+ regen_cooldown = world.time + REGENERATION_DELAY
+
+/mob/living/simple_animal/hostile/carp/Life()
+ . = ..()
+ if(regen_amount && regen_cooldown < world.time)
+ heal_overall_damage(regen_amount)
/mob/living/simple_animal/hostile/carp/AttackingTarget()
. = ..()
@@ -59,8 +70,11 @@
icon_living = "megacarp"
icon_dead = "megacarp_dead"
icon_gib = "megacarp_gib"
- maxHealth = 20
- health = 20
+
+ regen_amount = 6
+
+ maxHealth = 30
+ health = 30
pixel_x = -16
mob_size = MOB_SIZE_LARGE
@@ -68,35 +82,26 @@
melee_damage_lower = 20
melee_damage_upper = 20
- var/regen_cooldown = 0
-
/mob/living/simple_animal/hostile/carp/megacarp/Initialize()
. = ..()
name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]"
- melee_damage_lower += rand(2, 10)
+ melee_damage_lower += rand(4, 10)
melee_damage_upper += rand(10,20)
- maxHealth += rand(30,60)
+ maxHealth += rand(40,60)
move_to_delay = rand(3,7)
-/mob/living/simple_animal/hostile/carp/megacarp/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
- . = ..()
- if(.)
- regen_cooldown = world.time + REGENERATION_DELAY
-
-/mob/living/simple_animal/hostile/carp/megacarp/Life()
- . = ..()
- if(regen_cooldown < world.time)
- heal_overall_damage(4)
-
/mob/living/simple_animal/hostile/carp/cayenne
name = "Cayenne"
desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot."
gender = FEMALE
+
+ regen_amount = 8
+
speak_emote = list("squeaks")
maxHealth = 90
health = 90
gold_core_spawnable = NO_SPAWN
- faction = list(ROLE_SYNDICATE)
+ faction = list(ROLE_SYNDICATE, "carp") //They are still a carp
AIStatus = AI_OFF
harm_intent_damage = 12
diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm
index 5181e920d7..4e3375caf7 100644
--- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm
+++ b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm
@@ -22,7 +22,7 @@
attacktext = "slashes at"
attack_sound = 'sound/weapons/circsawhit.ogg'
a_intent = INTENT_HARM
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
loot = list(/obj/effect/mob_spawn/human/corpse/cat_butcher, /obj/item/circular_saw)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm
index 44f7f9c9f8..2d438dbf1c 100644
--- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm
@@ -7,7 +7,7 @@
icon_living = "eyeball"
icon_gib = ""
gender = NEUTER
- mob_biotypes = list(MOB_ORGANIC)
+ mob_biotypes = MOB_ORGANIC
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 3d411738c1..479b102b36 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -4,7 +4,7 @@
icon_state = "faithless"
icon_living = "faithless"
icon_dead = "faithless_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
gender = MALE
speak_chance = 0
turns_per_move = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 20ce5ac751..cc7b1e19d1 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -22,7 +22,7 @@
icon_state = "guard"
icon_living = "guard"
icon_dead = "guard_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_BUG)
+ mob_biotypes = MOB_ORGANIC|MOB_BUG
speak_emote = list("chitters")
emote_hear = list("chitters")
speak_chance = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm
index 3bc8715c5c..db232c20c4 100644
--- a/code/modules/mob/living/simple_animal/hostile/goose.dm
+++ b/code/modules/mob/living/simple_animal/hostile/goose.dm
@@ -6,7 +6,7 @@
icon_state = "goose" // sprites by cogwerks from goonstation, used with permission
icon_living = "goose"
icon_dead = "goose_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
index 6866df01d5..6d864576a1 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
@@ -9,7 +9,7 @@
icon_state = "crawling"
icon_living = "crawling"
icon_dead = "dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 80
maxHealth = 220
health = 220
diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm
index 5ee2549054..89303702f3 100644
--- a/code/modules/mob/living/simple_animal/hostile/illusion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm
@@ -6,7 +6,7 @@
icon_living = "static"
icon_dead = "null"
gender = NEUTER
- mob_biotypes = list()
+ mob_biotypes = NONE
melee_damage_lower = 5
melee_damage_upper = 5
a_intent = INTENT_HARM
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
index deb88d677b..ea01e4b659 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
@@ -10,7 +10,7 @@
icon_state = "leaper"
icon_living = "leaper"
icon_dead = "leaper_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
maxHealth = 300
health = 300
ranged = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
index 607db5d54f..91e17e8e57 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
@@ -7,7 +7,7 @@
icon_state = "arachnid"
icon_living = "arachnid"
icon_dead = "arachnid_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_BUG)
+ mob_biotypes = MOB_ORGANIC|MOB_BUG
melee_damage_lower = 30
melee_damage_upper = 30
maxHealth = 300
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
index b786637592..b2e6fa9704 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
@@ -13,7 +13,7 @@
icon_state = "mook"
icon_living = "mook"
icon_dead = "mook_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
pixel_x = -16
maxHealth = 45
health = 45
diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
index 2e783d84d8..c025ba58db 100644
--- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm
@@ -23,7 +23,7 @@
desc = "Death to Nanotrasen. This variant comes in MECHA DEATH flavour."
wanted_objects = list()
search_objects = 0
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
var/spawn_mecha_type = /obj/mecha/combat/marauder/mauler/loaded
var/obj/mecha/mecha //Ref to pilot's mecha instance
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 899e901827..6b20b158d8 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -28,7 +28,7 @@ Difficulty: Medium
icon_state = "miner"
icon_living = "miner"
icon = 'icons/mob/broadMobs.dmi'
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
light_color = "#E4C7C5"
movement_type = GROUND
speak_emote = list("roars")
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 65ee6a69f2..d544671d3e 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -432,6 +432,7 @@ Difficulty: Very Hard
H.dropItemToGround(W)
var/datum/job/clown/C = new /datum/job/clown()
C.equip(H)
+ C.after_spawn(H, H, TRUE)
qdel(C)
affected_targets.Add(H)
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 d7c52efe1d..9ee51c0c4f 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
@@ -6,7 +6,7 @@
a_intent = INTENT_HARM
sentience_type = SENTIENCE_BOSS
environment_smash = ENVIRONMENT_SMASH_RWALLS
- mob_biotypes = list(MOB_ORGANIC, MOB_EPIC)
+ mob_biotypes = MOB_ORGANIC|MOB_EPIC
obj_damage = 400
light_range = 3
faction = list("mining", "boss")
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index bbdd7ab4b0..16a55421b8 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -12,7 +12,7 @@
maxHealth = 250
health = 250
gender = NEUTER
- mob_biotypes = list(MOB_INORGANIC)
+ mob_biotypes = NONE
harm_intent_damage = 5
melee_damage_lower = 8
@@ -197,8 +197,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
return 0
return ..()
-
-
/mob/living/simple_animal/hostile/mimic/copy/ranged
var/obj/item/gun/TrueGun = null
var/obj/item/gun/magic/Zapstick
@@ -229,14 +227,13 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
casingtype = initial(M.ammo_type)
if(istype(G, /obj/item/gun/energy))
Zapgun = G
- var/selectfiresetting = Zapgun.select
- var/obj/item/ammo_casing/energy/E = Zapgun.ammo_type[selectfiresetting]
+ var/obj/item/ammo_casing/energy/E = Zapgun.ammo_type[Zapgun.current_firemode_index]
projectiletype = initial(E.projectile_type)
/mob/living/simple_animal/hostile/mimic/copy/ranged/OpenFire(the_target)
if(Zapgun)
if(Zapgun.cell)
- var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.select]
+ var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.current_firemode_index]
if(Zapgun.cell.charge >= shot.e_cost)
Zapgun.cell.use(shot.e_cost)
Zapgun.update_icon()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
index 2fbcf376dd..1cbabd41dd 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
@@ -8,7 +8,7 @@
icon_aggro = "Basilisk_alert"
icon_dead = "Basilisk_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
move_to_delay = 20
projectiletype = /obj/item/projectile/temp/basilisk
projectilesound = 'sound/weapons/pierce.ogg'
@@ -131,7 +131,7 @@
/obj/item/projectile/temp/basilisk/magmawing/on_hit(atom/target, blocked = FALSE)
. = ..()
- if(.)
+ if(. && isliving(target))
var/mob/living/L = target
if (istype(L))
L.adjust_fire_stacks(0.1)
@@ -144,7 +144,7 @@
/obj/item/projectile/temp/basilisk/icewing/on_hit(atom/target, blocked = FALSE)
. = ..()
- if(.)
+ if(. && isliving(target))
var/mob/living/L = target
L.apply_status_effect(/datum/status_effect/freon/watcher)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
index e4046138cd..8687b2d14c 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
@@ -5,7 +5,7 @@
icon_state = "curseblob"
icon_living = "curseblob"
icon_aggro = "curseblob"
- mob_biotypes = list(MOB_SPIRIT)
+ mob_biotypes = MOB_SPIRIT
movement_type = FLYING
move_to_delay = 5
vision_range = 20
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
index f1e7494beb..0d62eb260d 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
@@ -62,8 +62,9 @@
/mob/living/simple_animal/hostile/asteroid/elite/herald/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
. = ..()
- playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
-
+ if(.)
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+
/datum/action/innate/elite_attack/herald_trishot
name = "Triple Shot"
button_icon_state = "herald_trishot"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm
index c02f0c46c7..25e38652e1 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm
@@ -8,7 +8,7 @@
icon_aggro = "Goldgrub_alert"
icon_dead = "Goldgrub_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
vision_range = 2
aggro_vision_range = 9
move_to_delay = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index c17e98a7db..87abc1ea14 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -8,7 +8,7 @@
icon_aggro = "Goliath_alert"
icon_dead = "Goliath_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 10
ranged = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
index 9e9fbaeab8..fd3221d900 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm
@@ -6,7 +6,7 @@
icon_state = "gutlunch"
icon_living = "gutlunch"
icon_dead = "gutlunch"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak_emote = list("warbles", "quavers")
emote_hear = list("trills.")
emote_see = list("sniffs.", "burps.")
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 9e398ce0da..11de9df70b 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -7,7 +7,7 @@
icon_aggro = "Hivelord_alert"
icon_dead = "Hivelord_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC)
+ mob_biotypes = MOB_ORGANIC
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 14
ranged = 1
@@ -98,7 +98,7 @@
icon_aggro = "legion"
icon_dead = "legion"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
obj_damage = 60
melee_damage_lower = 15
melee_damage_upper = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm
index 543ffe6131..ed2a407b8e 100644
--- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm
+++ b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm
@@ -6,7 +6,7 @@
icon_living = "nanotrasen"
icon_dead = null
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 12
turns_per_move = 5
response_help = "pokes"
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index 918a2d8acc..363e3ec573 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -4,7 +4,7 @@
icon_state = "otherthing"
icon_living = "otherthing"
icon_dead = "otherthing-dead"
- mob_biotypes = list(MOB_INORGANIC)
+ mob_biotypes = NONE
health = 80
maxHealth = 80
obj_damage = 100
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index 174ae0b9fb..1b2212bf55 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -5,7 +5,7 @@
icon_state = "piratemelee"
icon_living = "piratemelee"
icon_dead = "pirate_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 0
turns_per_move = 5
response_help = "pushes"
@@ -43,7 +43,7 @@
var/obj/effect/light_emitter/red_energy_sword/sord
do_footstep = TRUE
-
+
/mob/living/simple_animal/hostile/pirate/melee/space
name = "Space Pirate Swashbuckler"
icon_state = "piratespace"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
index c518cbe083..cc17759cc6 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
@@ -10,7 +10,7 @@
response_help = "brushes aside"
response_disarm = "flails at"
response_harm = "hits"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak_chance = 0
maxHealth = 15
health = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index d2c8f1f270..ca14d4ae67 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -6,7 +6,7 @@
icon_living = "clown"
icon_dead = "clown_dead"
icon_gib = "clown_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
turns_per_move = 5
response_help = "pokes"
response_disarm = "gently pushes aside"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
index 47734abebc..ef51d8621b 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm
@@ -4,7 +4,7 @@
icon_state = "frog"
icon_living = "frog"
icon_dead = "frog_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak = list("ribbit","croak")
emote_see = list("hops in a circle.", "shakes.")
speak_chance = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
index bfe8349192..48d16f63f3 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
@@ -4,7 +4,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "ghost"
icon_living = "ghost"
- mob_biotypes = list(MOB_SPIRIT)
+ mob_biotypes = MOB_SPIRIT
speak_chance = 0
turns_per_move = 5
response_help = "passes through"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
index c50ace8871..29b0c0b701 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
@@ -5,7 +5,7 @@
icon_living = "old"
icon_dead = "old_dead"
icon_gib = "clown_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
gender = MALE
turns_per_move = 5
response_help = "pokes"
diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm
index f66814f01f..c99c7a04b5 100644
--- a/code/modules/mob/living/simple_animal/hostile/russian.dm
+++ b/code/modules/mob/living/simple_animal/hostile/russian.dm
@@ -6,7 +6,7 @@
icon_living = "russianmelee"
icon_dead = "russianmelee_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 0
turns_per_move = 5
response_help = "pokes"
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index 48b69a1f5c..51c55cbf65 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -6,7 +6,7 @@
icon_living = "skeleton"
icon_dead = "skeleton"
gender = NEUTER
- mob_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
+ mob_biotypes = MOB_UNDEAD|MOB_HUMANOID
turns_per_move = 5
speak_emote = list("rattles")
emote_see = list("rattles")
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 1e1fa9d41b..d17a45b2fb 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -9,7 +9,7 @@
icon_dead = "human_male"
gender = NEUTER
a_intent = INTENT_HARM
- mob_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_HUMANOID
response_help = "touches"
response_disarm = "pushes"
diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm
index fa5cb151ed..855d55938d 100644
--- a/code/modules/mob/living/simple_animal/hostile/stickman.dm
+++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm
@@ -5,7 +5,7 @@
icon_living = "stickman"
icon_dead = "stickman_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_HUMANOID
gender = MALE
speak_chance = 0
turns_per_move = 5
@@ -40,7 +40,7 @@
minimum_distance = 5
icon_state = "stickmanranged"
icon_living = "stickmanranged"
- casingtype = /obj/item/ammo_casing/c45/nostamina
+ casingtype = /obj/item/ammo_casing/c10mm
projectilesound = 'sound/misc/bang.ogg'
loot = list(/obj/item/gun/ballistic/automatic/pistol/stickman)
@@ -51,7 +51,7 @@
icon_state = "stickdog"
icon_living = "stickdog"
icon_dead = "stickdog_dead"
- mob_biotypes = list(MOB_INORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_BEAST
/mob/living/simple_animal/hostile/stickman/Initialize(mapload, var/wizard_summoned)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 96a75f6b4f..0947a3090b 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -22,7 +22,7 @@
icon_living = "syndicate"
icon_dead = "syndicate_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 0
turns_per_move = 5
response_help = "pokes"
@@ -284,7 +284,7 @@
icon_living = "viscerator_attack"
pass_flags = PASSTABLE | PASSMOB
a_intent = INTENT_HARM
- mob_biotypes = list(MOB_ROBOTIC)
+ mob_biotypes = MOB_ROBOTIC
health = 25
maxHealth = 25
melee_damage_lower = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm
index f047a7aed1..f97613fe8f 100644
--- a/code/modules/mob/living/simple_animal/hostile/wizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm
@@ -5,7 +5,7 @@
icon_state = "wizard"
icon_living = "wizard"
icon_dead = "wizard_dead"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 0
turns_per_move = 3
response_help = "pokes"
diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
index ec7451dc2e..88b5bcc373 100644
--- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
@@ -8,7 +8,7 @@
icon_aggro = "Fugu0"
icon_dead = "Fugu_dead"
icon_gib = "syndicate_gib"
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
mouse_opacity = MOUSE_OPACITY_ICON
move_to_delay = 5
friendly = "floats near"
diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm
index 7d89941687..ae3f0465d5 100644
--- a/code/modules/mob/living/simple_animal/hostile/zombie.dm
+++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm
@@ -4,7 +4,7 @@
icon = 'icons/mob/simple_human.dmi'
icon_state = "zombie"
icon_living = "zombie"
- mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 0
stat_attack = UNCONSCIOUS //braains
maxHealth = 100
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index 64ffa147cf..6aa7f8b401 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -6,7 +6,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "shade"
icon_living = "shade"
- mob_biotypes = list(MOB_SPIRIT)
+ mob_biotypes = MOB_SPIRIT
maxHealth = 40
health = 40
spacewalk = TRUE
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 52e2673dd6..0e39f43263 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -321,20 +321,18 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
set name = "Examine"
set category = "IC"
- if(!client)
- return
-
- if(!(SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, A) & COMPONENT_ALLOW_EXAMINE) && ((client.eye != src && client.eye != loc) || (isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src)))))
- //cameras & co don't allow users to examine far away things, also shift-click catcher may issue examinate() calls for out-of-sight turfs
+ if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src)))
+ // shift-click catcher may issue examinate() calls for out-of-sight turfs
return
if(is_blind(src))
- to_chat(src, "Something is there but you can't see it. ")
+ to_chat(src, "Something is there but you can't see it! ")
return
face_atom(A)
var/list/result = A.examine(src)
to_chat(src, result.Join("\n"))
+ SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, A)
//same as above
//note: ghosts can point, this is intended
@@ -810,7 +808,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
//Can the mob interact() with an atom?
/mob/proc/can_interact_with(atom/A)
- return IsAdminGhost(src) || Adjacent(A)
+ return IsAdminGhost(src) || Adjacent(A) || A.hasSiliconAccessInArea(src)
//Can the mob use Topic to interact with machines
/mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 1402b78908..7d446e4ef0 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -121,4 +121,7 @@
var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to
- var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
+ var/siliconaccessareas = list()
+ var/siliconaccesstoggle = FALSE
+
+ var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
\ No newline at end of file
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 393adb68d2..b25531f0e0 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -147,6 +147,10 @@
. += newletter
return sanitize(.)
+//Ratvarian Slurring!
+
+#define CLOCK_CULT_SLUR(phrase) sanitize(text2ratvar(phrase))
+
///Adds stuttering to the message passed in
/proc/stutter(phrase)
phrase = html_decode(phrase)
@@ -402,6 +406,29 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
return
return TRUE
+/atom/proc/hasSiliconAccessInArea(mob/user)
+ return user && (issilicon(user) || (user.siliconaccesstoggle && (get_area(src) in user.siliconaccessareas)))
+
+/mob/proc/toggleSiliconAccessArea(area/area)
+ if (area in siliconaccessareas)
+ siliconaccessareas -= area
+ to_chat(src,"You lost control of [area]! ")
+ return FALSE
+ else
+ if (LAZYLEN(siliconaccessareas) < HIJACK_APC_MAX_AMOUNT)
+ siliconaccessareas += area
+ to_chat(src,"You successfully took control of [area]. ")
+ else
+ to_chat(src,"You are connected to too many APCs! Too many more will fry your brain. ")
+ return FALSE
+ return TRUE
+
+/mob/proc/getImplant(type)
+ return
+
+/mob/living/getImplant(type)
+ return locate(type) in implants
+
/proc/offer_control(mob/M)
to_chat(M, "Control of your mob has been offered to dead players.")
if(usr)
diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm
index 3e67a14874..11f5145478 100644
--- a/code/modules/modular_computers/computers/item/computer_ui.dm
+++ b/code/modules/modular_computers/computers/item/computer_ui.dm
@@ -14,7 +14,7 @@
return 0
// Robots don't really need to see the screen, their wireless connection works as long as computer is on.
- if(!screen_on && !issilicon(user))
+ if(!screen_on && !hasSiliconAccessInArea(user))
if(ui)
ui.close()
return 0
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index f661f0ec10..b54bc9f2be 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -87,7 +87,7 @@
if(IsAdminGhost(user))
return TRUE
- if(issilicon(user))
+ if(computer && computer.hasSiliconAccessInArea(user))
return TRUE
if(ishuman(user))
diff --git a/code/modules/newscaster/_news.dm b/code/modules/newscaster/_news.dm
new file mode 100644
index 0000000000..6c6f10fdcc
--- /dev/null
+++ b/code/modules/newscaster/_news.dm
@@ -0,0 +1,2 @@
+/datum/news
+ var/author = ""
diff --git a/code/modules/newscaster/feed_channel.dm b/code/modules/newscaster/feed_channel.dm
new file mode 100644
index 0000000000..278c9c7ad1
--- /dev/null
+++ b/code/modules/newscaster/feed_channel.dm
@@ -0,0 +1,33 @@
+/datum/news/feed_channel
+ var/channel_name = ""
+ var/list/datum/news/feed_message/messages = list()
+ var/locked = FALSE
+ var/censored = 0
+ var/list/authorCensorTime = list()
+ var/list/DclassCensorTime = list()
+ var/authorCensor
+ var/is_admin_channel = 0
+
+/datum/news/feed_channel/proc/returnAuthor(censor)
+ if(censor == -1)
+ censor = authorCensor
+ var/txt = "[GLOB.news_network.redactedText]"
+ if(!censor)
+ txt = author
+ return txt
+
+/datum/news/feed_channel/proc/toggleCensorDclass()
+ if(censored)
+ DclassCensorTime.Add(GLOB.news_network.lastAction*-1)
+ else
+ DclassCensorTime.Add(GLOB.news_network.lastAction)
+ censored = !censored
+ GLOB.news_network.lastAction ++
+
+/datum/news/feed_channel/proc/toggleCensorAuthor()
+ if(authorCensor)
+ authorCensorTime.Add(GLOB.news_network.lastAction*-1)
+ else
+ authorCensorTime.Add(GLOB.news_network.lastAction)
+ authorCensor = !authorCensor
+ GLOB.news_network.lastAction ++
diff --git a/code/modules/newscaster/feed_comment.dm b/code/modules/newscaster/feed_comment.dm
new file mode 100644
index 0000000000..ff5ebac028
--- /dev/null
+++ b/code/modules/newscaster/feed_comment.dm
@@ -0,0 +1,3 @@
+/datum/news/feed_comment
+ var/body = ""
+ var/time_stamp = ""
diff --git a/code/modules/newscaster/feed_message.dm b/code/modules/newscaster/feed_message.dm
new file mode 100644
index 0000000000..573b3f772d
--- /dev/null
+++ b/code/modules/newscaster/feed_message.dm
@@ -0,0 +1,46 @@
+/datum/news/feed_message
+ var/body =""
+ var/list/authorCensorTime = list()
+ var/list/bodyCensorTime = list()
+ var/is_admin_message = 0
+ var/icon/img = null
+ var/time_stamp = ""
+ var/list/datum/news/feed_comment/comments = list()
+ var/locked = FALSE
+ var/caption = ""
+ var/creationTime
+ var/authorCensor
+ var/bodyCensor
+ var/photo_file
+
+/datum/news/feed_message/proc/returnAuthor(censor)
+ if(censor == -1)
+ censor = authorCensor
+ var/txt = "[GLOB.news_network.redactedText]"
+ if(!censor)
+ txt = author
+ return txt
+
+/datum/news/feed_message/proc/returnBody(censor)
+ if(censor == -1)
+ censor = bodyCensor
+ var/txt = "[GLOB.news_network.redactedText]"
+ if(!censor)
+ txt = body
+ return txt
+
+/datum/news/feed_message/proc/toggleCensorAuthor()
+ if(authorCensor)
+ authorCensorTime.Add(GLOB.news_network.lastAction*-1)
+ else
+ authorCensorTime.Add(GLOB.news_network.lastAction)
+ authorCensor = !authorCensor
+ GLOB.news_network.lastAction ++
+
+/datum/news/feed_message/proc/toggleCensorBody()
+ if(bodyCensor)
+ bodyCensorTime.Add(GLOB.news_network.lastAction*-1)
+ else
+ bodyCensorTime.Add(GLOB.news_network.lastAction)
+ bodyCensor = !bodyCensor
+ GLOB.news_network.lastAction ++
diff --git a/code/modules/newscaster/ghostread.dm b/code/modules/newscaster/ghostread.dm
new file mode 100644
index 0000000000..77cb1a03c8
--- /dev/null
+++ b/code/modules/newscaster/ghostread.dm
@@ -0,0 +1,52 @@
+/mob/dead/observer/verb/read_news()
+ set name = "Read Newscaster"
+ set desc = "Open a list of available news channels"
+ set category = "Ghost"
+
+ var/datum/browser/B = new(src, "ghost_news_list", "Chanenl List", 450, 600)
+ B.set_content(render_news_channel_list())
+ B.open()
+
+/mob/dead/observer/Topic(href, href_list)
+ . = ..()
+ if(href_list["show_news_channel"])
+ var/datum/D = locate(href_list["show_news_channel"])
+ if(istype(D, /datum/news/feed_channel)) //safety
+ render_news_channel(D)
+
+/mob/dead/observer/proc/render_news_channel_list()
+ var/datum/news_network/news_network = GLOB.news_network
+ var/list/content = list()
+ for(var/i in news_network.network_channels)
+ var/datum/news/feed_channel/FC = i
+ content += "[FC.channel_name] ([length(FC.messages)] messages)[FC.locked? " (LOCKED)":""][FC.censored? " (CENSORED)":""][FC.is_admin_channel? " (ADMIN)":""] "
+ return content.Join(" ")
+
+/mob/dead/observer/proc/render_news_channel(datum/news/feed_channel/FC)
+ var/list/content = list()
+ content += "[FC.channel_name]: \[created by: [FC.returnAuthor(-1)] \] "
+ if(FC.censored)
+ content += "ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice. "
+ content += "No further feed story additions are allowed while the D-Notice is in effect. "
+ if(!length(FC.messages))
+ content += "This channel is empty. "
+ else
+ for(var/i in FC.messages)
+ var/datum/news/feed_message/FM = i
+ content += "-[FM.returnBody(-1)] "
+ if(FM.img)
+ src << browse_rsc(FM.img, "tmp_photo[i].png")
+ content += " "
+ if(FM.caption)
+ content += "[FM.caption] "
+ content += " "
+ content += "\[Story by [FM.returnAuthor(-1)] \] - ([FM.time_stamp]) "
+ content += "[FM.comments.len] comment[FM.comments.len > 1 ? "s" : ""] "
+ for(var/c in FM.comments)
+ var/datum/news/feed_comment/comment = c
+ content += "[comment.body] [comment.author] [comment.time_stamp] "
+ if(FM.locked)
+ content += "Comments locked "
+ var/datum/browser/popup = new(src, "ghost_news_channel", 450, 900)
+ popup.set_content(content.Join(""))
+ popup.open()
diff --git a/code/modules/newscaster/news_network.dm b/code/modules/newscaster/news_network.dm
new file mode 100644
index 0000000000..5e056addee
--- /dev/null
+++ b/code/modules/newscaster/news_network.dm
@@ -0,0 +1,72 @@
+GLOBAL_DATUM_INIT(news_network, /datum/news_network, new)
+
+/// Contains all the news datum of a newscaster system.
+/datum/news_network
+ var/list/datum/news/feed_channel/network_channels = list()
+ var/datum/news/wanted_message/wanted_issue
+ var/lastAction
+ var/redactedText = "\[REDACTED\]"
+
+/datum/news_network/New()
+ CreateFeedChannel("Station Announcements", "SS13", 1)
+ wanted_issue = new /datum/news/wanted_message
+
+/datum/news_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = 0)
+ var/datum/news/feed_channel/newChannel = new /datum/news/feed_channel
+ newChannel.channel_name = channel_name
+ newChannel.author = author
+ newChannel.locked = locked
+ newChannel.is_admin_channel = adminChannel
+ network_channels += newChannel
+
+/datum/news_network/proc/SubmitArticle(msg, author, channel_name, datum/picture/picture, adminMessage = 0, allow_comments = 1)
+ var/datum/news/feed_message/newMsg = new /datum/news/feed_message
+ newMsg.author = author
+ newMsg.body = msg
+ newMsg.time_stamp = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)
+ newMsg.is_admin_message = adminMessage
+ newMsg.locked = !allow_comments
+ if(picture)
+ newMsg.img = picture.picture_image
+ newMsg.caption = picture.caption
+ newMsg.photo_file = save_photo(picture.picture_image)
+ for(var/datum/news/feed_channel/FC in network_channels)
+ if(FC.channel_name == channel_name)
+ FC.messages += newMsg
+ break
+ for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
+ NEWSCASTER.newsAlert(channel_name)
+ lastAction ++
+ newMsg.creationTime = lastAction
+
+/datum/news_network/proc/submitWanted(criminal, body, scanned_user, datum/picture/picture, adminMsg = 0, newMessage = 0)
+ wanted_issue.active = 1
+ wanted_issue.criminal = criminal
+ wanted_issue.body = body
+ wanted_issue.scannedUser = scanned_user
+ wanted_issue.isAdminMsg = adminMsg
+ if(picture)
+ wanted_issue.img = picture.picture_image
+ wanted_issue.photo_file = save_photo(picture.picture_image)
+ if(newMessage)
+ for(var/obj/machinery/newscaster/N in GLOB.allCasters)
+ N.newsAlert()
+ N.update_icon()
+
+/datum/news_network/proc/deleteWanted()
+ wanted_issue.active = 0
+ wanted_issue.criminal = null
+ wanted_issue.body = null
+ wanted_issue.scannedUser = null
+ wanted_issue.img = null
+ for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
+ NEWSCASTER.update_icon()
+
+/datum/news_network/proc/save_photo(icon/photo)
+ var/photo_file = copytext_char(md5("\icon[photo]"), 1, 6)
+ if(!fexists("[GLOB.log_directory]/photos/[photo_file].png"))
+ //Clean up repeated frames
+ var/icon/clean = new /icon()
+ clean.Insert(photo, "", SOUTH, 1, 0)
+ fcopy(clean, "[GLOB.log_directory]/photos/[photo_file].png")
+ return photo_file
diff --git a/code/game/machinery/newscaster.dm b/code/modules/newscaster/newscaster_machine.dm
similarity index 66%
rename from code/game/machinery/newscaster.dm
rename to code/modules/newscaster/newscaster_machine.dm
index a9b4461085..cb2016a1a1 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/modules/newscaster/newscaster_machine.dm
@@ -1,175 +1,5 @@
-GLOBAL_DATUM_INIT(news_network, /datum/newscaster/feed_network, new)
GLOBAL_LIST_EMPTY(allCasters)
-/datum/newscaster
-
-/datum/newscaster/feed_comment
- var/author = ""
- var/body = ""
- var/time_stamp = ""
-
-/datum/newscaster/feed_message
- var/author =""
- var/body =""
- var/list/authorCensorTime = list()
- var/list/bodyCensorTime = list()
- var/is_admin_message = 0
- var/icon/img = null
- var/time_stamp = ""
- var/list/datum/newscaster/feed_comment/comments = list()
- var/locked = FALSE
- var/caption = ""
- var/creationTime
- var/authorCensor
- var/bodyCensor
- var/photo_file
-
-/datum/newscaster/feed_message/proc/returnAuthor(censor)
- if(censor == -1)
- censor = authorCensor
- var/txt = "[GLOB.news_network.redactedText]"
- if(!censor)
- txt = author
- return txt
-
-/datum/newscaster/feed_message/proc/returnBody(censor)
- if(censor == -1)
- censor = bodyCensor
- var/txt = "[GLOB.news_network.redactedText]"
- if(!censor)
- txt = body
- return txt
-
-/datum/newscaster/feed_message/proc/toggleCensorAuthor()
- if(authorCensor)
- authorCensorTime.Add(GLOB.news_network.lastAction*-1)
- else
- authorCensorTime.Add(GLOB.news_network.lastAction)
- authorCensor = !authorCensor
- GLOB.news_network.lastAction ++
-
-/datum/newscaster/feed_message/proc/toggleCensorBody()
- if(bodyCensor)
- bodyCensorTime.Add(GLOB.news_network.lastAction*-1)
- else
- bodyCensorTime.Add(GLOB.news_network.lastAction)
- bodyCensor = !bodyCensor
- GLOB.news_network.lastAction ++
-
-/datum/newscaster/feed_channel
- var/channel_name = ""
- var/list/datum/newscaster/feed_message/messages = list()
- var/locked = FALSE
- var/author = ""
- var/censored = 0
- var/list/authorCensorTime = list()
- var/list/DclassCensorTime = list()
- var/authorCensor
- var/is_admin_channel = 0
-
-/datum/newscaster/feed_channel/proc/returnAuthor(censor)
- if(censor == -1)
- censor = authorCensor
- var/txt = "[GLOB.news_network.redactedText]"
- if(!censor)
- txt = author
- return txt
-
-/datum/newscaster/feed_channel/proc/toggleCensorDclass()
- if(censored)
- DclassCensorTime.Add(GLOB.news_network.lastAction*-1)
- else
- DclassCensorTime.Add(GLOB.news_network.lastAction)
- censored = !censored
- GLOB.news_network.lastAction ++
-
-/datum/newscaster/feed_channel/proc/toggleCensorAuthor()
- if(authorCensor)
- authorCensorTime.Add(GLOB.news_network.lastAction*-1)
- else
- authorCensorTime.Add(GLOB.news_network.lastAction)
- authorCensor = !authorCensor
- GLOB.news_network.lastAction ++
-
-/datum/newscaster/wanted_message
- var/active
- var/criminal
- var/body
- var/scannedUser
- var/isAdminMsg
- var/icon/img
- var/photo_file
-
-/datum/newscaster/feed_network
- var/list/datum/newscaster/feed_channel/network_channels = list()
- var/datum/newscaster/wanted_message/wanted_issue
- var/lastAction
- var/redactedText = "\[REDACTED\]"
-
-/datum/newscaster/feed_network/New()
- CreateFeedChannel("Station Announcements", "SS13", 1)
- wanted_issue = new /datum/newscaster/wanted_message
-
-/datum/newscaster/feed_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = 0)
- var/datum/newscaster/feed_channel/newChannel = new /datum/newscaster/feed_channel
- newChannel.channel_name = channel_name
- newChannel.author = author
- newChannel.locked = locked
- newChannel.is_admin_channel = adminChannel
- network_channels += newChannel
-
-/datum/newscaster/feed_network/proc/SubmitArticle(msg, author, channel_name, datum/picture/picture, adminMessage = 0, allow_comments = 1)
- var/datum/newscaster/feed_message/newMsg = new /datum/newscaster/feed_message
- newMsg.author = author
- newMsg.body = msg
- newMsg.time_stamp = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)
- newMsg.is_admin_message = adminMessage
- newMsg.locked = !allow_comments
- if(picture)
- newMsg.img = picture.picture_image
- newMsg.caption = picture.caption
- newMsg.photo_file = save_photo(picture.picture_image)
- for(var/datum/newscaster/feed_channel/FC in network_channels)
- if(FC.channel_name == channel_name)
- FC.messages += newMsg
- break
- for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
- NEWSCASTER.newsAlert(channel_name)
- lastAction ++
- newMsg.creationTime = lastAction
-
-/datum/newscaster/feed_network/proc/submitWanted(criminal, body, scanned_user, datum/picture/picture, adminMsg = 0, newMessage = 0)
- wanted_issue.active = 1
- wanted_issue.criminal = criminal
- wanted_issue.body = body
- wanted_issue.scannedUser = scanned_user
- wanted_issue.isAdminMsg = adminMsg
- if(picture)
- wanted_issue.img = picture.picture_image
- wanted_issue.photo_file = save_photo(picture.picture_image)
- if(newMessage)
- for(var/obj/machinery/newscaster/N in GLOB.allCasters)
- N.newsAlert()
- N.update_icon()
-
-/datum/newscaster/feed_network/proc/deleteWanted()
- wanted_issue.active = 0
- wanted_issue.criminal = null
- wanted_issue.body = null
- wanted_issue.scannedUser = null
- wanted_issue.img = null
- for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
- NEWSCASTER.update_icon()
-
-/datum/newscaster/feed_network/proc/save_photo(icon/photo)
- var/photo_file = copytext_char(md5("\icon[photo]"), 1, 6)
- if(!fexists("[GLOB.log_directory]/photos/[photo_file].png"))
- //Clean up repeated frames
- var/icon/clean = new /icon()
- clean.Insert(photo, "", SOUTH, 1, 0)
- fcopy(clean, "[GLOB.log_directory]/photos/[photo_file].png")
- return photo_file
-
/obj/item/wallframe/newscaster
name = "newscaster frame"
desc = "Used to build newscasters, just secure to the wall."
@@ -177,7 +7,6 @@ GLOBAL_LIST_EMPTY(allCasters)
materials = list(MAT_METAL=14000, MAT_GLASS=8000)
result_path = /obj/machinery/newscaster
-
/obj/machinery/newscaster
name = "newscaster"
desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!"
@@ -200,7 +29,7 @@ GLOBAL_LIST_EMPTY(allCasters)
var/datum/picture/picture
var/channel_name = ""
var/c_locked=0
- var/datum/newscaster/feed_channel/viewing_channel = null
+ var/datum/news/feed_channel/viewing_channel = null
var/allow_comments = 1
/obj/machinery/newscaster/security_unit
@@ -294,7 +123,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if( isemptylist(GLOB.news_network.network_channels) )
dat+="No active channels found... "
else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/CHANNEL in GLOB.news_network.network_channels)
if(CHANNEL.is_admin_channel)
dat+="[CHANNEL.channel_name] "
else
@@ -333,7 +162,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if(7)
dat+="ERROR: Could not submit Feed Channel to Network. "
var/list/existing_authors = list()
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.authorCensor)
existing_authors += GLOB.news_network.redactedText
else
@@ -343,7 +172,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if(channel_name=="" || channel_name == "\[REDACTED\]")
dat+="Invalid channel name. "
var/check = 0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.channel_name == channel_name)
check = 1
break
@@ -356,7 +185,7 @@ GLOBAL_LIST_EMPTY(allCasters)
var/total_num=length(GLOB.news_network.network_channels)
var/active_num=total_num
var/message_num=0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(!FC.censored)
message_num += length(FC.messages)
else
@@ -375,7 +204,7 @@ GLOBAL_LIST_EMPTY(allCasters)
dat+="No feed messages found in channel... "
else
var/i = 0
- for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages)
+ for(var/datum/news/feed_message/MESSAGE in viewing_channel.messages)
i++
dat+="-[MESSAGE.returnBody(-1)] "
if(MESSAGE.img)
@@ -386,7 +215,7 @@ GLOBAL_LIST_EMPTY(allCasters)
dat+=" "
dat+="\[Story by [MESSAGE.returnAuthor(-1)] \] - ([MESSAGE.time_stamp]) "
dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""] "
- for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
+ for(var/datum/news/feed_comment/comment in MESSAGE.comments)
dat+="[comment.body] [comment.author] [comment.time_stamp] "
if(MESSAGE.locked)
dat+="Comments locked "
@@ -402,7 +231,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if(isemptylist(GLOB.news_network.network_channels))
dat+="No feed channels found active... "
else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/CHANNEL in GLOB.news_network.network_channels)
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("*** ") : ""] "
dat+="Cancel "
if(11)
@@ -413,7 +242,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if(isemptylist(GLOB.news_network.network_channels))
dat+="No feed channels found active... "
else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/CHANNEL in GLOB.news_network.network_channels)
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("*** ") : ""] "
dat+="Back "
if(12)
@@ -422,11 +251,11 @@ GLOBAL_LIST_EMPTY(allCasters)
if(isemptylist(viewing_channel.messages))
dat+="No feed messages found in channel... "
else
- for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages)
+ for(var/datum/news/feed_message/MESSAGE in viewing_channel.messages)
dat+="-[MESSAGE.returnBody(-1)] \[Story by [MESSAGE.returnAuthor(-1)] \] "
dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")] "
dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"] "
- for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
+ for(var/datum/news/feed_comment/comment in MESSAGE.comments)
dat+="[comment.body] X [comment.author] [comment.time_stamp] "
dat+="Back "
if(13)
@@ -439,7 +268,7 @@ GLOBAL_LIST_EMPTY(allCasters)
if(isemptylist(viewing_channel.messages))
dat+="No feed messages found in channel... "
else
- for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages)
+ for(var/datum/news/feed_message/MESSAGE in viewing_channel.messages)
dat+="-[MESSAGE.returnBody(-1)] \[Story by [MESSAGE.returnAuthor(-1)] \] "
dat+="Back "
if(14)
@@ -509,7 +338,7 @@ GLOBAL_LIST_EMPTY(allCasters)
/obj/machinery/newscaster/Topic(href, href_list)
if(..())
return
- if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || issilicon(usr))
+ if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || hasSiliconAccessInArea(usr))
usr.set_machine(src)
scan_user(usr)
if(href_list["set_channel_name"])
@@ -520,13 +349,13 @@ GLOBAL_LIST_EMPTY(allCasters)
updateUsrDialog()
else if(href_list["submit_new_channel"])
var/list/existing_authors = list()
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.authorCensor)
existing_authors += GLOB.news_network.redactedText
else
existing_authors += FC.author
var/check = 0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
if(FC.channel_name == channel_name)
check = 1
break
@@ -542,7 +371,7 @@ GLOBAL_LIST_EMPTY(allCasters)
updateUsrDialog()
else if(href_list["set_channel_receiving"])
var/list/available_channels = list()
- for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/F in GLOB.news_network.network_channels)
if( (!F.locked || F.author == scanned_user) && !F.censored)
available_channels += F.channel_name
channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels
@@ -632,33 +461,33 @@ GLOBAL_LIST_EMPTY(allCasters)
screen=18
updateUsrDialog()
else if(href_list["censor_channel_author"])
- var/datum/newscaster/feed_channel/FC = locate(href_list["censor_channel_author"])
+ var/datum/news/feed_channel/FC = locate(href_list["censor_channel_author"])
if(FC.is_admin_channel)
alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok")
return
FC.toggleCensorAuthor()
updateUsrDialog()
else if(href_list["censor_channel_story_author"])
- var/datum/newscaster/feed_message/MSG = locate(href_list["censor_channel_story_author"])
+ var/datum/news/feed_message/MSG = locate(href_list["censor_channel_story_author"])
if(MSG.is_admin_message)
alert("This message was created by a Nanotrasen Officer. You cannot censor its author.","Ok")
return
MSG.toggleCensorAuthor()
updateUsrDialog()
else if(href_list["censor_channel_story_body"])
- var/datum/newscaster/feed_message/MSG = locate(href_list["censor_channel_story_body"])
+ var/datum/news/feed_message/MSG = locate(href_list["censor_channel_story_body"])
if(MSG.is_admin_message)
alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok")
return
MSG.toggleCensorBody()
updateUsrDialog()
else if(href_list["pick_d_notice"])
- var/datum/newscaster/feed_channel/FC = locate(href_list["pick_d_notice"])
+ var/datum/news/feed_channel/FC = locate(href_list["pick_d_notice"])
viewing_channel = FC
screen=13
updateUsrDialog()
else if(href_list["toggle_d_notice"])
- var/datum/newscaster/feed_channel/FC = locate(href_list["toggle_d_notice"])
+ var/datum/news/feed_channel/FC = locate(href_list["toggle_d_notice"])
if(FC.is_admin_channel)
alert("This channel was created by a Nanotrasen Officer. You cannot place a D-Notice upon it.","Ok")
return
@@ -677,21 +506,21 @@ GLOBAL_LIST_EMPTY(allCasters)
viewing_channel = null
updateUsrDialog()
else if(href_list["show_channel"])
- var/datum/newscaster/feed_channel/FC = locate(href_list["show_channel"])
+ var/datum/news/feed_channel/FC = locate(href_list["show_channel"])
viewing_channel = FC
screen = 9
updateUsrDialog()
else if(href_list["pick_censor_channel"])
- var/datum/newscaster/feed_channel/FC = locate(href_list["pick_censor_channel"])
+ var/datum/news/feed_channel/FC = locate(href_list["pick_censor_channel"])
viewing_channel = FC
screen = 12
updateUsrDialog()
else if(href_list["new_comment"])
- var/datum/newscaster/feed_message/FM = locate(href_list["new_comment"])
+ var/datum/news/feed_message/FM = locate(href_list["new_comment"])
var/cominput = copytext_char(stripped_input(usr, "Write your message:", "New comment", null), 140)
if(cominput)
scan_user(usr)
- var/datum/newscaster/feed_comment/FC = new/datum/newscaster/feed_comment
+ var/datum/news/feed_comment/FC = new/datum/news/feed_comment
FC.author = scanned_user
FC.body = cominput
FC.time_stamp = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)
@@ -699,14 +528,14 @@ GLOBAL_LIST_EMPTY(allCasters)
usr.log_message("(as [scanned_user]) commented on message [FM.returnBody(-1)] -- [FC.body]", LOG_COMMENT)
updateUsrDialog()
else if(href_list["del_comment"])
- var/datum/newscaster/feed_comment/FC = locate(href_list["del_comment"])
- var/datum/newscaster/feed_message/FM = locate(href_list["del_comment_msg"])
+ var/datum/news/feed_comment/FC = locate(href_list["del_comment"])
+ var/datum/news/feed_message/FM = locate(href_list["del_comment_msg"])
if(istype(FC) && istype(FM))
FM.comments -= FC
qdel(FC)
updateUsrDialog()
else if(href_list["lock_comment"])
- var/datum/newscaster/feed_message/FM = locate(href_list["lock_comment"])
+ var/datum/news/feed_message/FM = locate(href_list["lock_comment"])
FM.locked ^= 1
updateUsrDialog()
else if(href_list["set_comment"])
@@ -831,7 +660,7 @@ GLOBAL_LIST_EMPTY(allCasters)
/obj/machinery/newscaster/proc/print_paper()
SSblackbox.record_feedback("amount", "newspapers_printed", 1)
var/obj/item/newspaper/NEWSPAPER = new /obj/item/newspaper
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ for(var/datum/news/feed_channel/FC in GLOB.news_network.network_channels)
NEWSPAPER.news_content += FC
if(GLOB.news_network.wanted_issue.active)
NEWSPAPER.wantedAuthor = GLOB.news_network.wanted_issue.scannedUser
@@ -843,7 +672,6 @@ GLOBAL_LIST_EMPTY(allCasters)
NEWSPAPER.creationTime = GLOB.news_network.lastAction
paper_remaining--
-
/obj/machinery/newscaster/proc/remove_alert()
alert = FALSE
update_icon()
@@ -858,178 +686,3 @@ GLOBAL_LIST_EMPTY(allCasters)
else
say("Attention! Wanted issue distributed!")
playsound(loc, 'sound/machines/warning-buzzer.ogg', 75, 1)
-
-
-/obj/item/newspaper
- name = "newspaper"
- desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations."
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "newspaper"
- lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi'
- w_class = WEIGHT_CLASS_SMALL
- attack_verb = list("bapped")
- var/screen = 0
- var/pages = 0
- var/curr_page = 0
- var/list/datum/newscaster/feed_channel/news_content = list()
- var/scribble=""
- var/scribble_page = null
- var/wantedAuthor
- var/wantedCriminal
- var/wantedBody
- var/wantedPhoto
- var/creationTime
-
-/obj/item/newspaper/suicide_act(mob/user)
- user.visible_message("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization! ")
- user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide")
- var/mob/living/carbon/human/H = user
- var/obj/W = new /obj/item/reagent_containers/food/drinks/bottle/whiskey(H.loc)
- playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), 1)
- W.reagents.trans_to(H, W.reagents.total_volume)
- user.visible_message("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku! ")
-
- return(TOXLOSS)
-
-/obj/item/newspaper/attack_self(mob/user)
- if(ishuman(user))
- var/mob/living/carbon/human/human_user = user
- var/dat
- pages = 0
- switch(screen)
- if(0) //Cover
- dat+=" The Griffon
"
- dat+="Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities
"
- if(isemptylist(news_content))
- if(wantedAuthor)
- dat+="Contents:** Important Security Announcement** \[page [pages+2]\] "
- else
- dat+="Other than the title, the rest of the newspaper is unprinted... "
- else
- dat+="Contents:"
- for(var/datum/newscaster/feed_channel/NP in news_content)
- pages++
- if(wantedAuthor)
- dat+="** Important Security Announcement** \[page [pages+2]\] "
- var/temp_page=0
- for(var/datum/newscaster/feed_channel/NP in news_content)
- temp_page++
- dat+="[NP.channel_name] \[page [temp_page+1]\] "
- dat+=" "
- if(scribble_page==curr_page)
- dat+="There is a small scribble near the end of this page... It reads: \"[scribble]\" "
- dat+= " "
- if(1) // X channel pages inbetween.
- for(var/datum/newscaster/feed_channel/NP in news_content)
- pages++
- var/datum/newscaster/feed_channel/C = news_content[curr_page]
- dat += "[C.channel_name] \[created by: [C.returnAuthor(notContent(C.authorCensorTime))] \] "
- if(notContent(C.DclassCensorTime))
- dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice . Its contents were not transferred to the newspaper at the time of printing."
- else
- if(isemptylist(C.messages))
- dat+="No Feed stories stem from this channel..."
- else
- var/i = 0
- for(var/datum/newscaster/feed_message/MESSAGE in C.messages)
- if(MESSAGE.creationTime > creationTime)
- if(i == 0)
- dat+="No Feed stories stem from this channel..."
- break
- if(i == 0)
- dat+=""
- i++
- dat+="-[MESSAGE.returnBody(notContent(MESSAGE.bodyCensorTime))] "
- if(MESSAGE.img)
- user << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
- dat+=" "
- dat+="\[Story by [MESSAGE.returnAuthor(notContent(MESSAGE.authorCensorTime))] \] "
- dat+=" "
- if(scribble_page==curr_page)
- dat+="There is a small scribble near the end of this page... It reads: \"[scribble]\" "
- dat+= " "
- if(2) //Last page
- for(var/datum/newscaster/feed_channel/NP in news_content)
- pages++
- if(wantedAuthor!=null)
- dat+="Wanted Issue:
"
- dat+="Criminal name : [wantedCriminal] "
- dat+="Description : [wantedBody] "
- dat+="Photo: : "
- if(wantedPhoto)
- user << browse_rsc(wantedPhoto, "tmp_photow.png")
- dat+=" "
- else
- dat+="None"
- else
- dat+="Apart from some uninteresting classified ads, there's nothing on this page... "
- if(scribble_page==curr_page)
- dat+="There is a small scribble near the end of this page... It reads: \"[scribble]\" "
- dat+= " "
- dat+="[curr_page+1]
"
- human_user << browse(dat, "window=newspaper_main;size=300x400")
- onclose(human_user, "newspaper_main")
- else
- to_chat(user, "The paper is full of unintelligible symbols!")
-
-/obj/item/newspaper/proc/notContent(list/L)
- if(!L.len)
- return 0
- for(var/i=L.len;i>0;i--)
- var/num = abs(L[i])
- if(creationTime <= num)
- continue
- else
- if(L[i] > 0)
- return 1
- else
- return 0
- return 0
-
-/obj/item/newspaper/Topic(href, href_list)
- var/mob/living/U = usr
- ..()
- if((src in U.contents) || (isturf(loc) && in_range(src, U)))
- U.set_machine(src)
- if(href_list["next_page"])
- if(curr_page == pages+1)
- return //Don't need that at all, but anyway.
- if(curr_page == pages) //We're at the middle, get to the end
- screen = 2
- else
- if(curr_page == 0) //We're at the start, get to the middle
- screen=1
- curr_page++
- playsound(loc, "pageturn", 50, 1)
- else if(href_list["prev_page"])
- if(curr_page == 0)
- return
- if(curr_page == 1)
- screen = 0
- else
- if(curr_page == pages+1) //we're at the end, let's go back to the middle.
- screen = 1
- curr_page--
- playsound(loc, "pageturn", 50, 1)
- if(ismob(loc))
- attack_self(loc)
-
-/obj/item/newspaper/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/pen))
- if(!user.is_literate())
- to_chat(user, "You scribble illegibly on [src]! ")
- return
- if(scribble_page == curr_page)
- to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you? ")
- else
- var/s = stripped_input(user, "Write something", "Newspaper")
- if (!s)
- return
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- scribble_page = curr_page
- scribble = s
- attack_self(user)
- else
- return ..()
diff --git a/code/modules/newscaster/newspaper.dm b/code/modules/newscaster/newspaper.dm
new file mode 100644
index 0000000000..0afb36a7e7
--- /dev/null
+++ b/code/modules/newscaster/newspaper.dm
@@ -0,0 +1,173 @@
+/obj/item/newspaper
+ name = "newspaper"
+ desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations."
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "newspaper"
+ lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi'
+ w_class = WEIGHT_CLASS_SMALL
+ attack_verb = list("bapped")
+ var/screen = 0
+ var/pages = 0
+ var/curr_page = 0
+ var/list/datum/news/feed_channel/news_content = list()
+ var/scribble=""
+ var/scribble_page = null
+ var/wantedAuthor
+ var/wantedCriminal
+ var/wantedBody
+ var/wantedPhoto
+ var/creationTime
+
+/obj/item/newspaper/suicide_act(mob/user)
+ user.visible_message("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization! ")
+ user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide")
+ var/mob/living/carbon/human/H = user
+ var/obj/W = new /obj/item/reagent_containers/food/drinks/bottle/whiskey(H.loc)
+ playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), 1)
+ W.reagents.trans_to(H, W.reagents.total_volume)
+ user.visible_message("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku! ")
+
+ return(TOXLOSS)
+
+/obj/item/newspaper/attack_self(mob/user)
+ if(ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ var/dat
+ pages = 0
+ switch(screen)
+ if(0) //Cover
+ dat+="The Griffon
"
+ dat+="Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities
"
+ if(isemptylist(news_content))
+ if(wantedAuthor)
+ dat+="Contents:** Important Security Announcement** \[page [pages+2]\] "
+ else
+ dat+="Other than the title, the rest of the newspaper is unprinted... "
+ else
+ dat+="Contents:"
+ for(var/datum/news/feed_channel/NP in news_content)
+ pages++
+ if(wantedAuthor)
+ dat+="** Important Security Announcement** \[page [pages+2]\] "
+ var/temp_page=0
+ for(var/datum/news/feed_channel/NP in news_content)
+ temp_page++
+ dat+="[NP.channel_name] \[page [temp_page+1]\] "
+ dat+=" "
+ if(scribble_page==curr_page)
+ dat+="There is a small scribble near the end of this page... It reads: \"[scribble]\" "
+ dat+= " "
+ if(1) // X channel pages inbetween.
+ for(var/datum/news/feed_channel/NP in news_content)
+ pages++
+ var/datum/news/feed_channel/C = news_content[curr_page]
+ dat += "[C.channel_name] \[created by: [C.returnAuthor(notContent(C.authorCensorTime))] \] "
+ if(notContent(C.DclassCensorTime))
+ dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice . Its contents were not transferred to the newspaper at the time of printing."
+ else
+ if(isemptylist(C.messages))
+ dat+="No Feed stories stem from this channel..."
+ else
+ var/i = 0
+ for(var/datum/news/feed_message/MESSAGE in C.messages)
+ if(MESSAGE.creationTime > creationTime)
+ if(i == 0)
+ dat+="No Feed stories stem from this channel..."
+ break
+ if(i == 0)
+ dat+=""
+ i++
+ dat+="-[MESSAGE.returnBody(notContent(MESSAGE.bodyCensorTime))] "
+ if(MESSAGE.img)
+ user << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
+ dat+=" "
+ dat+="\[Story by [MESSAGE.returnAuthor(notContent(MESSAGE.authorCensorTime))] \] "
+ dat+=" "
+ if(scribble_page==curr_page)
+ dat+="There is a small scribble near the end of this page... It reads: \"[scribble]\" "
+ dat+= " "
+ if(2) //Last page
+ for(var/datum/news/feed_channel/NP in news_content)
+ pages++
+ if(wantedAuthor!=null)
+ dat+="Wanted Issue:
"
+ dat+="Criminal name : [wantedCriminal] "
+ dat+="Description : [wantedBody] "
+ dat+="Photo: : "
+ if(wantedPhoto)
+ user << browse_rsc(wantedPhoto, "tmp_photow.png")
+ dat+=" "
+ else
+ dat+="None"
+ else
+ dat+="Apart from some uninteresting classified ads, there's nothing on this page... "
+ if(scribble_page==curr_page)
+ dat+="There is a small scribble near the end of this page... It reads: \"[scribble]\" "
+ dat+= " "
+ dat+="[curr_page+1]
"
+ human_user << browse(dat, "window=newspaper_main;size=300x400")
+ onclose(human_user, "newspaper_main")
+ else
+ to_chat(user, "The paper is full of unintelligible symbols!")
+
+/obj/item/newspaper/proc/notContent(list/L)
+ if(!L.len)
+ return 0
+ for(var/i=L.len;i>0;i--)
+ var/num = abs(L[i])
+ if(creationTime <= num)
+ continue
+ else
+ if(L[i] > 0)
+ return 1
+ else
+ return 0
+ return 0
+
+/obj/item/newspaper/Topic(href, href_list)
+ var/mob/living/U = usr
+ ..()
+ if((src in U.contents) || (isturf(loc) && in_range(src, U)))
+ U.set_machine(src)
+ if(href_list["next_page"])
+ if(curr_page == pages+1)
+ return //Don't need that at all, but anyway.
+ if(curr_page == pages) //We're at the middle, get to the end
+ screen = 2
+ else
+ if(curr_page == 0) //We're at the start, get to the middle
+ screen=1
+ curr_page++
+ playsound(loc, "pageturn", 50, 1)
+ else if(href_list["prev_page"])
+ if(curr_page == 0)
+ return
+ if(curr_page == 1)
+ screen = 0
+ else
+ if(curr_page == pages+1) //we're at the end, let's go back to the middle.
+ screen = 1
+ curr_page--
+ playsound(loc, "pageturn", 50, 1)
+ if(ismob(loc))
+ attack_self(loc)
+
+/obj/item/newspaper/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/pen))
+ if(!user.is_literate())
+ to_chat(user, "You scribble illegibly on [src]! ")
+ return
+ if(scribble_page == curr_page)
+ to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you? ")
+ else
+ var/s = stripped_input(user, "Write something", "Newspaper")
+ if (!s)
+ return
+ if(!user.canUseTopic(src, BE_CLOSE))
+ return
+ scribble_page = curr_page
+ scribble = s
+ attack_self(user)
+ else
+ return ..()
diff --git a/code/modules/newscaster/wanted_message.dm b/code/modules/newscaster/wanted_message.dm
new file mode 100644
index 0000000000..58eb234f02
--- /dev/null
+++ b/code/modules/newscaster/wanted_message.dm
@@ -0,0 +1,8 @@
+/datum/news/wanted_message
+ var/active
+ var/criminal
+ var/body
+ var/scannedUser
+ var/isAdminMsg
+ var/icon/img
+ var/photo_file
diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm
index 7ee71db1f1..323deed5c4 100644
--- a/code/modules/ninja/outfit.dm
+++ b/code/modules/ninja/outfit.dm
@@ -1,6 +1,6 @@
/datum/outfit/ninja
name = "Space Ninja"
- uniform = /obj/item/clothing/under/color/black
+ uniform = /obj/item/clothing/under/color/black/trackless
suit = /obj/item/clothing/suit/space/space_ninja
glasses = /obj/item/clothing/glasses/night
mask = /obj/item/clothing/mask/gas/space_ninja
diff --git a/code/modules/oracle_ui/hookup_procs.dm b/code/modules/oracle_ui/hookup_procs.dm
index 0a092caf30..18d7bbfd8c 100644
--- a/code/modules/oracle_ui/hookup_procs.dm
+++ b/code/modules/oracle_ui/hookup_procs.dm
@@ -35,9 +35,9 @@
return ..()
/obj/machinery/oui_canview(mob/user)
- if(user.has_unlimited_silicon_privilege)
+ if(user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user))
return TRUE
- if(!can_interact())
+ if(!can_interact(user))
return FALSE
if(iscyborg(user))
return can_see(user, src, 7)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 6a674fa6b1..982afa49c8 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -106,6 +106,8 @@
var/update_overlay = -1
var/icon_update_needed = FALSE
var/obj/machinery/computer/apc_control/remote_control = null
+ var/mob/living/carbon/hijacker
+ var/hijackerlast = TRUE
/obj/machinery/power/apc/unlocked
locked = FALSE
@@ -260,7 +262,7 @@
. += "Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface. "
- if(issilicon(user))
+ if(area.hasSiliconAccessInArea(user))
. += "Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"]. "
// update the APC icon to show the three base states
@@ -299,12 +301,15 @@
if(!(update_state & UPSTATE_ALLGOOD))
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
-
+ var/hijackerreturn
+ if (hijacker)
+ var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack)
+ hijackerreturn = H && !H.stealthmode
if(update & 2)
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD)
SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco3-[hijackerreturn ? "3" : charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
if(operating)
SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
@@ -319,6 +324,8 @@
light_color = LIGHT_COLOR_BLUE
if(APC_FULLY_CHARGED)
light_color = LIGHT_COLOR_GREEN
+ if (hijackerreturn)
+ light_color = LIGHT_COLOR_YELLOW
set_light(lon_range)
else if(update_state & UPSTATE_BLUESCREEN)
light_color = LIGHT_COLOR_BLUE
@@ -387,14 +394,19 @@
else if(environ==2)
update_overlay |= APC_UPOVERLAY_ENVIRON2
-
var/results = 0
- if(last_update_state == update_state && last_update_overlay == update_overlay)
+ var/hijackerreturn
+ if (hijacker)
+ var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack)
+ hijackerreturn = H && !H.stealthmode
+ if(last_update_state == update_state && last_update_overlay == update_overlay && hijackerreturn == hijackerlast)
return 0
if(last_update_state != update_state)
results += 1
- if(last_update_overlay != update_overlay)
+ if(last_update_overlay != update_overlay || hijackerreturn != hijackerlast)
results += 2
+ if (hijackerreturn != hijackerlast)
+ hijackerlast = hijackerreturn
return results
// Used in process so it doesn't update the icon too much
@@ -534,7 +546,7 @@
/obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params)
- if(issilicon(user) && get_dist(src,user)>1)
+ if(area.hasSiliconAccessInArea(user) && get_dist(src,user)>1)
return attack_hand(user)
if (istype(W, /obj/item/stock_parts/cell) && opened)
@@ -741,7 +753,7 @@
/obj/machinery/power/apc/AltClick(mob/user)
. = ..()
- if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc))
+ if(!user.canUseTopic(src, !area.hasSiliconAccessInArea(user)) || !isturf(loc))
return
togglelock(user)
return TRUE
@@ -756,7 +768,7 @@
else if(stat & (BROKEN|MAINT))
to_chat(user, "Nothing happens! ")
else
- if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack)
+ if((allowed(usr) || area.hasSiliconAccessInArea(usr)) && !wires.is_cut(WIRE_IDSCAN) && !malfhack)
locked = !locked
to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface. ")
update_icon()
@@ -833,6 +845,11 @@
if((stat & MAINT) && !opened) //no board; no interface
return
+/obj/machinery/power/apc/oui_canview(mob/user)
+ if(user.has_unlimited_silicon_privilege || area.hasSiliconAccessInArea(user))
+ return TRUE
+ return ..()
+
/obj/machinery/power/apc/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)
@@ -842,8 +859,12 @@
ui.open()
/obj/machinery/power/apc/ui_data(mob/user)
+ var/obj/item/implant/hijack/H = user.getImplant(/obj/item/implant/hijack)
+ var/abilitiesavail = FALSE
+ if (H && !H.stealthmode && H.toggled)
+ abilitiesavail = TRUE
var/list/data = list(
- "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)),
+ "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !area.hasSiliconAccessInArea(user),
"lock_nightshift" = nightshift_requires_auth,
"failTime" = failure_timer,
"isOperating" = operating,
@@ -853,11 +874,14 @@
"chargingStatus" = charging,
"totalLoad" = DisplayPower(lastused_total),
"coverLocked" = coverlocked,
- "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console(),
+ "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console() || area.hasSiliconAccessInArea(user),
"malfStatus" = get_malf_status(user),
"emergencyLights" = !emergency_lights,
"nightshiftLights" = nightshift_lights,
-
+ "hijackable" = HAS_TRAIT(user,TRAIT_HIJACKER),
+ "hijacker" = hijacker == user ? TRUE : FALSE,
+ "drainavail" = cell && cell.percent() >= 85 && abilitiesavail,
+ "lockdownavail" = cell && cell.percent() >= 35 && abilitiesavail,
"powerChannels" = list(
list(
"title" = "Equipment",
@@ -925,17 +949,12 @@
/obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic()
if(IsAdminGhost(user))
return TRUE
+ if (user == hijacker || (area.hasSiliconAccessInArea(user) && !aidisabled))
+ return TRUE
if(user.has_unlimited_silicon_privilege)
var/mob/living/silicon/ai/AI = user
var/mob/living/silicon/robot/robot = user
- if ( \
- src.aidisabled || \
- malfhack && istype(malfai) && \
- ( \
- (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \
- (istype(robot) && (robot in malfai.connected_robots)) \
- ) \
- )
+ if (src.aidisabled || malfhack && istype(malfai) && ((istype(AI) && (malfai!=AI && malfai != AI.parent)) || (istype(robot) && (robot in malfai.connected_robots))))
if(!loud)
to_chat(user, "\The [src] has eee disabled! ")
return FALSE
@@ -945,11 +964,15 @@
. = ..()
if (!. && !QDELETED(remote_control))
. = remote_control.can_interact(user)
+ if (hijacker == user && area.hasSiliconAccessInArea(user))
+ return TRUE
/obj/machinery/power/apc/ui_status(mob/user)
. = ..()
if (!QDELETED(remote_control) && user == remote_control.operator)
. = UI_INTERACTIVE
+ if (user == hijacker && area.hasSiliconAccessInArea(user))
+ . = UI_INTERACTIVE
/obj/machinery/power/apc/ui_act(action, params)
if(..() || !can_use(usr, 1))
@@ -959,7 +982,10 @@
failure_timer = 0
update_icon()
update()
- var/authorized = (!locked || usr.has_unlimited_silicon_privilege || (integration_cog && (is_servant_of_ratvar(usr))))
+ if (action == "hijack" && can_use(usr, 1)) //don't need auth for hijack button
+ hijack(usr)
+ return
+ var/authorized = (!locked || usr.has_unlimited_silicon_privilege || area.hasSiliconAccessInArea(usr) || (integration_cog && (is_servant_of_ratvar(usr))))
if((action == "toggle_nightshift") && (!nightshift_requires_auth || authorized))
toggle_nightshift_lights()
return TRUE
@@ -967,7 +993,7 @@
return
switch(action)
if("lock")
- if(usr.has_unlimited_silicon_privilege)
+ if(usr.has_unlimited_silicon_privilege || area.hasSiliconAccessInArea(usr))
if((obj_flags & EMAGGED) || (stat & (BROKEN|MAINT)))
to_chat(usr, "The APC does not respond to the command.")
else
@@ -1001,7 +1027,7 @@
update()
return TRUE
if("overload")
- if(usr.has_unlimited_silicon_privilege)
+ if(usr.has_unlimited_silicon_privilege || area.hasSiliconAccessInArea(usr))
overload_lighting()
return TRUE
if("hack")
@@ -1023,7 +1049,26 @@
L.no_emergency = emergency_lights
INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE)
CHECK_TICK
- return TRUE
+ if("drain")
+ cell.use(cell.charge)
+ hijacker.toggleSiliconAccessArea(area)
+ hijacker = null
+ set_hijacked_lighting()
+ update_icon()
+ var/obj/item/implant/hijack/H = usr.getImplant(/obj/item/implant/hijack)
+ H.stealthcooldown = world.time + 2 MINUTES
+ energy_fail(30 SECONDS * (cell.charge / cell.maxcharge))
+ if("lockdown")
+ var/celluse = rand(20,35)
+ celluse = celluse /100
+ for (var/obj/machinery/door/D in GLOB.airlocks)
+ if (get_area(D) == area)
+ INVOKE_ASYNC(D,/obj/machinery/door.proc/hostile_lockdown,usr, FALSE)
+ addtimer(CALLBACK(D,/obj/machinery/door.proc/disable_lockdown, FALSE), 30 SECONDS)
+ cell.charge -= cell.maxcharge*celluse
+ var/obj/item/implant/hijack/H = usr.getImplant(/obj/item/implant/hijack)
+ H.stealthcooldown = world.time + 3 MINUTES
+ return TRUE
/obj/machinery/power/apc/proc/toggle_breaker()
if(!is_operational() || failure_timer)
@@ -1032,6 +1077,39 @@
update()
update_icon()
+/obj/machinery/power/apc/proc/hijack(mob/living/L)
+ if (!istype(L))
+ return
+ if (hijacker && hijacker != L)
+ var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
+ to_chat(L, "Someone already has control of this APC. Beginning counter-hijack. ")
+ H.hijacking = TRUE
+ if (do_after(L,20 SECONDS,target=src))
+ hijacker.toggleSiliconAccessArea(area)
+ if (L.toggleSiliconAccessArea(area))
+ hijacker = L
+ update_icon()
+ set_hijacked_lighting()
+ H.hijacking = FALSE
+ return
+ else
+ to_chat(L, "Aborting. ")
+ H.hijacking = FALSE
+ return
+ to_chat(L, "Beginning hijack of APC. ")
+ var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
+ H.hijacking = TRUE
+ if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src))
+ if (L.toggleSiliconAccessArea(area))
+ hijacker = L
+ update_icon()
+ set_hijacked_lighting()
+ H.hijacking = FALSE
+ else
+ to_chat(L, "Aborting. ")
+ H.hijacking = FALSE
+ return
+
/obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf)
if(!istype(malf))
return
@@ -1438,6 +1516,17 @@
L.update(FALSE)
CHECK_TICK
+/obj/machinery/power/apc/proc/set_hijacked_lighting()
+ set waitfor = FALSE
+ var/hijackerreturn
+ if (hijacker)
+ var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack)
+ hijackerreturn = H && !H.stealthmode
+ for(var/obj/machinery/light/L in area)
+ L.hijacked = hijackerreturn
+ L.update(FALSE)
+ CHECK_TICK
+
/obj/machinery/power/apc/proc/update_nightshift_auth_requirement()
nightshift_requires_auth = nightshift_toggle_requires_auth()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 441eb27621..5ca09036ad 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -220,6 +220,7 @@
var/bulb_emergency_colour = "#FF3232" // determines the colour of the light while it's in emergency mode
var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode
var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode
+ var/hijacked = FALSE // if true, the light is in a hijacked area
/obj/machinery/light/broken
status = LIGHT_BROKEN
@@ -298,7 +299,10 @@
if(emergency_mode || (A && A.fire))
icon_state = "[base_state]_emergency"
else
- icon_state = "[base_state]"
+ if (hijacked)
+ icon_state = "[base_state]_hijacked"
+ else
+ icon_state = "[base_state]"
if(on)
var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
glowybit.alpha = CLAMP(light_power*250, 30, 200)
@@ -326,6 +330,10 @@
var/area/A = get_base_area(src)
if (A && A.fire)
CO = bulb_emergency_colour
+ else if (hijacked)
+ BR = BR * 1.5
+ PO = PO * 1.5
+ CO = color ? color : LIGHT_COLOR_YELLOW
else if (nightshift_enabled)
BR = nightshift_brightness
PO = nightshift_light_power
@@ -355,7 +363,7 @@
if(on != on_gs)
on_gs = on
if(on)
- static_power_used = brightness * 14.4 //20W per unit luminosity
+ static_power_used = brightness * 14.4 * (hijacked ? 2 : 1) //20W per unit luminosity
addStaticPower(static_power_used, STATIC_LIGHT)
else
removeStaticPower(static_power_used, STATIC_LIGHT)
diff --git a/code/modules/projectiles/ammunition/caseless/arrow.dm b/code/modules/projectiles/ammunition/caseless/arrow.dm
new file mode 100644
index 0000000000..e0ca637a8b
--- /dev/null
+++ b/code/modules/projectiles/ammunition/caseless/arrow.dm
@@ -0,0 +1,8 @@
+/obj/item/ammo_casing/caseless/arrow
+ name = "wooden arrow"
+ desc = "An arrow made of wood, typically fired from a bow."
+ projectile_type = /obj/item/projectile/bullet/reusable/arrow
+ caliber = "arrow"
+ icon_state = "arrow"
+ throwforce = 3 //good luck hitting someone with the pointy end of the arrow
+ throw_speed = 3
\ No newline at end of file
diff --git a/code/modules/projectiles/ammunition/energy/gravity.dm b/code/modules/projectiles/ammunition/energy/gravity.dm
index eabb4f66d7..be7b618803 100644
--- a/code/modules/projectiles/ammunition/energy/gravity.dm
+++ b/code/modules/projectiles/ammunition/energy/gravity.dm
@@ -15,15 +15,15 @@
. = ..()
/obj/item/ammo_casing/energy/gravity/repulse
- projectile_type = /obj/item/projectile/gravityrepulse
+ projectile_type = /obj/item/projectile/gravity/repulse
select_name = "repulse"
/obj/item/ammo_casing/energy/gravity/attract
- projectile_type = /obj/item/projectile/gravityattract
+ projectile_type = /obj/item/projectile/gravity/attract
select_name = "attract"
/obj/item/ammo_casing/energy/gravity/chaos
- projectile_type = /obj/item/projectile/gravitychaos
+ projectile_type = /obj/item/projectile/gravity/chaos
select_name = "chaos"
diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm
index 42b03e4245..c7e3820177 100644
--- a/code/modules/projectiles/ammunition/energy/plasma.dm
+++ b/code/modules/projectiles/ammunition/energy/plasma.dm
@@ -12,4 +12,4 @@
/obj/item/ammo_casing/energy/plasma/weak
projectile_type = /obj/item/projectile/plasma/weak
- e_cost = 100
\ No newline at end of file
+ e_cost = 100
diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm
index 7c2b62c02c..2abc472138 100644
--- a/code/modules/projectiles/ammunition/energy/stun.dm
+++ b/code/modules/projectiles/ammunition/energy/stun.dm
@@ -5,6 +5,10 @@
e_cost = 200
harmful = FALSE
+/obj/item/ammo_casing/energy/electrode/security
+ projectile_type = /obj/item/projectile/energy/electrode/security
+ e_cost = 100
+
/obj/item/ammo_casing/energy/electrode/spec
e_cost = 100
@@ -13,6 +17,7 @@
e_cost = 100
/obj/item/ammo_casing/energy/electrode/hos
+ projectile_type = /obj/item/projectile/energy/electrode/security/hos
e_cost = 200
/obj/item/ammo_casing/energy/electrode/old
@@ -27,4 +32,4 @@
click_cooldown_override = 3.5
/obj/item/ammo_casing/energy/disabler/secborg
- e_cost = 50
\ No newline at end of file
+ e_cost = 50
diff --git a/code/modules/projectiles/boxes_magazines/external/magweapon.dm b/code/modules/projectiles/boxes_magazines/external/magweapon.dm
index fa90170ace..a1b7f58698 100644
--- a/code/modules/projectiles/boxes_magazines/external/magweapon.dm
+++ b/code/modules/projectiles/boxes_magazines/external/magweapon.dm
@@ -13,7 +13,7 @@
name = "magpistol magazine (non-lethal disabler)"
icon_state = "smallmagmag"
ammo_type = /obj/item/ammo_casing/caseless/magnetic/weak/disabler
- max_ammo = 15
+ max_ammo = 16
/obj/item/ammo_box/magazine/mmag/small/lethal
name = "magpistol magazine (lethal)"
diff --git a/code/modules/projectiles/boxes_magazines/internal/bow.dm b/code/modules/projectiles/boxes_magazines/internal/bow.dm
new file mode 100644
index 0000000000..9ce1565606
--- /dev/null
+++ b/code/modules/projectiles/boxes_magazines/internal/bow.dm
@@ -0,0 +1,6 @@
+/obj/item/ammo_box/magazine/internal/bow
+ name = "bow... magazine?" //shouldn't be seeing this
+ ammo_type = /obj/item/ammo_casing/caseless/arrow
+ caliber = "arrow"
+ max_ammo = 1
+ start_empty = 1
\ No newline at end of file
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 0c2b5e013e..29d31b28fd 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -28,10 +28,19 @@
trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
var/sawn_desc = null //description change if weapon is sawn-off
var/sawn_off = FALSE
- var/burst_size = 1 //how large a burst is
- var/fire_delay = 0 //rate of fire for burst firing and semi auto
- var/firing_burst = 0 //Prevent the weapon from firing again while already firing
- var/semicd = 0 //cooldown handler
+
+ /// Weapon is burst fire if this is above 1
+ var/burst_size = 1
+ /// The time between shots in burst.
+ var/burst_shot_delay = 3
+ /// The time between firing actions, this means between bursts if this is burst weapon. The reason this is 0 is because you are still, by default, limited by clickdelay.
+ var/fire_delay = 0
+ /// Last world.time this was fired
+ var/last_fire = 0
+ /// Currently firing, whether or not it's a burst or not.
+ var/firing = FALSE
+ /// Used in gun-in-mouth execution/suicide and similar, while TRUE nothing should work on this like firing or modification and so on and so forth.
+ var/busy_action = FALSE
var/weapon_weight = WEAPON_LIGHT //currently only used for inaccuracy
var/spread = 0 //Spread induced by the gun itself.
var/burst_spread = 0 //Spread induced by the gun itself during burst fire per iteration. Only checked if spread is 0.
@@ -42,6 +51,7 @@
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
var/obj/item/firing_pin/pin = /obj/item/firing_pin //standard firing pin for most guns
+ var/no_pin_required = FALSE //whether the gun can be fired without a pin
var/obj/item/flashlight/gun_light
var/can_flashlight = 0
@@ -70,17 +80,24 @@
/obj/item/gun/Initialize()
. = ..()
if(pin)
- pin = new pin(src)
+ if(no_pin_required)
+ pin = null
+ else
+ pin = new pin(src)
if(gun_light)
alight = new (src)
if(zoomable)
azoom = new (src)
/obj/item/gun/Destroy()
- QDEL_NULL(pin)
- QDEL_NULL(gun_light)
- QDEL_NULL(bayonet)
- QDEL_NULL(chambered)
+ if(pin)
+ QDEL_NULL(pin)
+ if(gun_light)
+ QDEL_NULL(gun_light)
+ if(bayonet)
+ QDEL_NULL(bayonet)
+ if(chambered)
+ QDEL_NULL(chambered)
return ..()
/obj/item/gun/CheckParts(list/parts_list)
@@ -94,6 +111,8 @@
/obj/item/gun/examine(mob/user)
. = ..()
+ if(no_pin_required)
+ return
if(pin)
. += "It has \a [pin] installed."
else
@@ -117,13 +136,12 @@
to_chat(user, "*click* ")
playsound(src, "gun_dry_fire", 30, 1)
-
/obj/item/gun/proc/shoot_live_shot(mob/living/user as mob|obj, pointblank = 0, mob/pbtarget = null, message = 1)
if(recoil)
shake_camera(user, recoil + 1, recoil)
if(isliving(user)) //CIT CHANGE - makes gun recoil cause staminaloss
- user.adjustStaminaLossBuffered(getstamcost(user)*(firing_burst && burst_size >= 2 ? 1/burst_size : 1)) //CIT CHANGE - ditto
+ user.adjustStaminaLossBuffered(getstamcost(user)*(firing && burst_size >= 2 ? 1/burst_size : 1)) //CIT CHANGE - ditto
if(suppressed)
playsound(user, fire_sound, 10, 1)
@@ -143,9 +161,12 @@
/obj/item/gun/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
+ process_afterattack(target, user, flag, params)
+
+/obj/item/gun/proc/process_afterattack(atom/target, mob/living/user, flag, params)
if(!target)
return
- if(firing_burst)
+ if(firing)
return
if(flag) //It's adjacent, is the user, or is on the user's person
if(target in user.contents) //can't shoot stuff inside us.
@@ -169,7 +190,6 @@
handle_suicide(user, target, params)
return
-
//Exclude lasertag guns from the TRAIT_CLUMSY check.
if(clumsy_check)
if(istype(user))
@@ -201,8 +221,6 @@
process_fire(target, user, TRUE, params, null, bonus_spread)
-
-
/obj/item/gun/can_trigger_gun(mob/living/user)
. = ..()
if(!.)
@@ -214,6 +232,8 @@
return FALSE
/obj/item/gun/proc/handle_pins(mob/living/user)
+ if(no_pin_required)
+ return TRUE
if(pin)
if(pin.pin_auth(user) || (pin.obj_flags & EMAGGED))
return TRUE
@@ -227,54 +247,29 @@
/obj/item/gun/proc/recharge_newshot()
return
-/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
- if(!user || !firing_burst)
- firing_burst = FALSE
- return FALSE
- if(!issilicon(user))
- if(iteration > 1 && !(user.is_holding(src))) //for burst firing
- firing_burst = FALSE
- return FALSE
- if(chambered && chambered.BB)
- if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
- if(chambered.harmful) // Is the bullet chambered harmful?
- to_chat(user, " [src] is lethally chambered! You don't want to risk harming anyone... ")
- return
- if(randomspread)
- sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread), 1)
- else //Smart spread
- sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread), 1)
- before_firing(target,user)
- if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src))
- shoot_with_empty_chamber(user)
- firing_burst = FALSE
- return FALSE
- else
- if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
- shoot_live_shot(user, 1, target, message)
- else
- shoot_live_shot(user, 0, target, message)
- if (iteration >= burst_size)
- firing_burst = FALSE
- else
- shoot_with_empty_chamber(user)
- firing_burst = FALSE
- return FALSE
- process_chamber()
- update_icon()
- return TRUE
+/obj/item/gun/proc/on_cooldown()
+ return busy_action || firing || ((last_fire + fire_delay) > world.time)
/obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
add_fingerprint(user)
- if(semicd)
+ if(on_cooldown())
return
+ firing = TRUE
+ . = do_fire(target, user, message, params, zone_override, bonus_spread)
+ firing = FALSE
+ last_fire = world.time
+ if(user)
+ user.update_inv_hands()
+ SEND_SIGNAL(user, COMSIG_LIVING_GUN_PROCESS_FIRE, target, params, zone_override)
+
+/obj/item/gun/proc/do_fire(atom/target, mob/living/user, message = TRUE, params, zone_override = "", bonus_spread = 0)
var/sprd = 0
var/randomized_gun_spread = 0
var/rand_spr = rand()
if(spread)
- randomized_gun_spread = rand(0, spread)
+ randomized_gun_spread = rand(0, spread)
else if(burst_size > 1 && burst_spread)
randomized_gun_spread = rand(0, burst_spread)
if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex
@@ -282,9 +277,12 @@
var/randomized_bonus_spread = rand(0, bonus_spread)
if(burst_size > 1)
- firing_burst = TRUE
- for(var/i = 1 to burst_size)
- addtimer(CALLBACK(src, .proc/process_burst, user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1))
+ do_burst_shot(user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, 1)
+ for(var/i in 2 to burst_size)
+ sleep(burst_shot_delay)
+ if(QDELETED(src))
+ break
+ do_burst_shot(user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i)
else
if(chambered)
sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
@@ -302,21 +300,46 @@
return
process_chamber()
update_icon()
- semicd = TRUE
- addtimer(CALLBACK(src, .proc/reset_semicd), fire_delay)
- if(user)
- user.update_inv_hands()
- SEND_SIGNAL(user, COMSIG_LIVING_GUN_PROCESS_FIRE, target, params, zone_override)
SSblackbox.record_feedback("tally", "gun_fired", 1, type)
return TRUE
-/obj/item/gun/update_icon()
- ..()
-
-
-/obj/item/gun/proc/reset_semicd()
- semicd = FALSE
+/obj/item/gun/proc/do_burst_shot(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
+ if(!user || !firing)
+ firing = FALSE
+ return FALSE
+ if(!issilicon(user))
+ if(iteration > 1 && !(user.is_holding(src))) //for burst firing
+ firing = FALSE
+ return FALSE
+ if(chambered && chambered.BB)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
+ if(chambered.harmful) // Is the bullet chambered harmful?
+ to_chat(user, " [src] is lethally chambered! You don't want to risk harming anyone... ")
+ return
+ if(randomspread)
+ sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread), 1)
+ else //Smart spread
+ sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread), 1)
+ before_firing(target,user)
+ if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src))
+ shoot_with_empty_chamber(user)
+ firing = FALSE
+ return FALSE
+ else
+ if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
+ shoot_live_shot(user, 1, target, message)
+ else
+ shoot_live_shot(user, 0, target, message)
+ if (iteration >= burst_size)
+ firing = FALSE
+ else
+ shoot_with_empty_chamber(user)
+ firing = FALSE
+ return FALSE
+ process_chamber()
+ update_icon()
+ return TRUE
/obj/item/gun/attack(mob/M as mob, mob/user)
if(user.a_intent == INTENT_HARM) //Flogging
@@ -437,7 +460,7 @@
if(!ishuman(user) || !ishuman(target))
return
- if(semicd)
+ if(on_cooldown())
return
if(user == target)
@@ -447,7 +470,7 @@
target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger... ", \
"[user] points [src] at your head, ready to pull the trigger... ")
- semicd = TRUE
+ busy_action = TRUE
if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH))
if(user)
@@ -455,10 +478,10 @@
user.visible_message("[user] decided not to shoot. ")
else if(target && target.Adjacent(user))
target.visible_message("[user] has decided to spare [target] ", "[user] has decided to spare your life! ")
- semicd = FALSE
+ busy_action = FALSE
return
- semicd = FALSE
+ busy_action = FALSE
target.visible_message("[user] pulls the trigger! ", "[user] pulls the trigger! ")
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index bcb212a031..0ff0c79f1e 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -5,7 +5,7 @@
var/automatic_burst_overlay = TRUE
can_suppress = TRUE
burst_size = 3
- fire_delay = 2
+ burst_shot_delay = 2
actions_types = list(/datum/action/item_action/toggle_firemode)
/obj/item/gun/ballistic/automatic/proto
@@ -77,11 +77,9 @@
/obj/item/gun/ballistic/automatic/proc/enable_burst()
burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
/obj/item/gun/ballistic/automatic/proc/disable_burst()
burst_size = 1
- fire_delay = 0
/obj/item/gun/ballistic/automatic/can_shoot()
return get_ammo()
@@ -100,7 +98,7 @@
item_state = "c20r"
mag_type = /obj/item/ammo_box/magazine/smgm45
fire_sound = 'sound/weapons/gunshot_smg.ogg'
- fire_delay = 2
+ burst_shot_delay = 2
burst_size = 2
pin = /obj/item/firing_pin/implant/pindicate
can_bayonet = TRUE
@@ -130,7 +128,7 @@
mag_type = /obj/item/ammo_box/magazine/wt550m9
can_suppress = FALSE
burst_size = 2
- fire_delay = 1
+ burst_shot_delay = 1
can_bayonet = TRUE
knife_x_offset = 25
knife_y_offset = 12
@@ -165,7 +163,7 @@
can_suppress = FALSE
var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
burst_size = 3
- fire_delay = 2
+ burst_shot_delay = 2
pin = /obj/item/firing_pin/implant/pindicate
/obj/item/gun/ballistic/automatic/m90/Initialize()
@@ -212,7 +210,6 @@
if(0)
select = 1
burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
to_chat(user, "You switch to [burst_size]-rnd burst. ")
if(1)
select = 2
@@ -220,7 +217,6 @@
if(2)
select = 0
burst_size = 1
- fire_delay = 0
to_chat(user, "You switch to semi-auto. ")
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
update_icon()
@@ -237,7 +233,7 @@
fire_sound = 'sound/weapons/gunshot_smg.ogg'
can_suppress = FALSE
burst_size = 4
- fire_delay = 1
+ burst_shot_delay = 1
/obj/item/gun/ballistic/automatic/ar
name = "\improper NT-ARG 'Boarder'"
@@ -249,7 +245,7 @@
fire_sound = 'sound/weapons/gunshot_smg.ogg'
can_suppress = FALSE
burst_size = 3
- fire_delay = 1
+ burst_shot_delay = 1
// Bulldog shotgun //
@@ -264,7 +260,6 @@
fire_sound = 'sound/weapons/gunshot.ogg'
can_suppress = FALSE
burst_size = 1
- fire_delay = 0
pin = /obj/item/firing_pin/implant/pindicate
actions_types = list()
@@ -301,7 +296,7 @@
var/cover_open = FALSE
can_suppress = FALSE
burst_size = 3
- fire_delay = 1
+ burst_shot_delay = 1
spread = 7
pin = /obj/item/firing_pin/implant/pindicate
@@ -421,7 +416,7 @@
mag_type = /obj/item/ammo_box/magazine/recharge
fire_delay = 2
can_suppress = FALSE
- burst_size = 0
+ burst_size = 1
actions_types = list()
fire_sound = 'sound/weapons/laser.ogg'
casing_ejector = FALSE
diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm
new file mode 100644
index 0000000000..448e2915d9
--- /dev/null
+++ b/code/modules/projectiles/guns/ballistic/bow.dm
@@ -0,0 +1,53 @@
+/obj/item/gun/ballistic/bow
+ name = "wooden bow"
+ desc = "Some sort of primitive projectile weapon. Used to fire arrows."
+ icon_state = "bow"
+ item_state = "bow"
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY //need both hands to fire
+ force = 5
+ mag_type = /obj/item/ammo_box/magazine/internal/bow
+ fire_sound = 'sound/weapons/bowfire.wav'
+ slot_flags = ITEM_SLOT_BACK
+ item_flags = NONE
+ casing_ejector = FALSE
+ inaccuracy_modifier = 0.33 //to counteract the innaccuracy from WEAPON_HEAVY, bows are supposed to be accurate but only able to be fired with both hands
+ pin = null
+ no_pin_required = TRUE
+ trigger_guard = TRIGGER_GUARD_NONE //so ashwalkers can use it
+
+/obj/item/gun/ballistic/bow/shoot_with_empty_chamber()
+ return
+
+/obj/item/gun/ballistic/bow/chamber_round()
+ chambered = magazine.get_round(1)
+
+/obj/item/gun/ballistic/bow/afterattack()
+ . = ..()
+ if (chambered)
+ chambered = null
+ magazine.get_round(0)
+ update_icon()
+
+/obj/item/gun/ballistic/bow/attack_self(mob/living/user)
+ if (chambered)
+ var/obj/item/ammo_casing/AC = magazine.get_round(0)
+ user.put_in_hands(AC)
+ chambered = null
+ to_chat(user, "You gently release the bowstring, removing the arrow. ")
+ else if (get_ammo())
+ to_chat(user, "You draw back the bowstring. ")
+ playsound(src, 'sound/weapons/bowdraw.wav', 75, 0) //gets way too high pitched if the freq varies
+ chamber_round()
+ update_icon()
+
+/obj/item/gun/ballistic/bow/attackby(obj/item/I, mob/user, params)
+ if (magazine.attackby(I, user, params, 1))
+ to_chat(user, "You notch the arrow. ")
+ update_icon()
+
+/obj/item/gun/ballistic/bow/update_icon()
+ icon_state = "bow_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]"
+
+/obj/item/gun/ballistic/bow/can_shoot()
+ return chambered
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 5f67194b29..68f212ba30 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -79,6 +79,7 @@
/obj/item/gun/ballistic/automatic/pistol/stickman
name = "flat gun"
desc = "A 2 dimensional gun.. what?"
+ can_suppress = FALSE
icon_state = "flatgun"
/obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 3ca732eb0b..be43bc48fd 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -1,3 +1,16 @@
+/*
+ * Energy guns that draw from a cell to fire.
+ *
+ * This is a bit weird but this is how it currently works:
+ * When switching shots, it clears the chamber, and loads the correct energy ammo casing if there is enough energy to fire it.
+ * If there's no projectile in the casing, it creates it now.
+ * Otherwise the chamber stays null.
+ * After firing, it actually deducts the energy and then clears the chamber and does the above again.
+ * It detects if a successful fire is done by checking if the chambered energy ammo casing still has its projectile intact.
+ *
+ * It might be good in the future to move away from ammo casinsgs and instead use a datum-firemode system, but that would make handling firing,
+ * which the casing does as of now, a little interesting to implement.
+ */
/obj/item/gun/energy
icon_state = "energy"
name = "energy gun"
@@ -7,8 +20,10 @@
var/obj/item/stock_parts/cell/cell //What type of power cell this uses
var/cell_type = /obj/item/stock_parts/cell
var/modifystate = 0
- var/list/ammo_type = list(/obj/item/ammo_casing/energy)
- var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next.
+ /// = TRUE/FALSE decides if the user can switch to it of their own accord
+ var/list/ammo_type = list(/obj/item/ammo_casing/energy = TRUE)
+ /// The index of the ammo_types/firemodes which we're using right now
+ var/current_firemode_index = 1
var/can_charge = 1 //Can it be charged in a recharger?
var/automatic_charge_overlays = TRUE //Do we handle overlays with base update_icon()?
var/charge_sections = 4
@@ -21,6 +36,9 @@
var/use_cyborg_cell = FALSE //whether the gun drains the cyborg user's cell instead, not to be confused with EGUN_SELFCHARGE_BORG
var/dead_cell = FALSE //set to true so the gun is given an empty cell
+ /// SET THIS TO TRUE IF YOU OVERRIDE altafterattack() or ANY right click action! If this is FALSE, the gun will show in examine its default right click behavior, which is to switch modes.
+ var/right_click_overridden = FALSE
+
/obj/item/gun/energy/emp_act(severity)
. = ..()
if(!(. & EMP_PROTECT_CONTENTS))
@@ -46,22 +64,18 @@
START_PROCESSING(SSobj, src)
update_icon()
-/obj/item/gun/energy/proc/update_ammo_types()
- var/obj/item/ammo_casing/energy/shot
- for (var/i = 1, i <= ammo_type.len, i++)
- var/shottype = ammo_type[i]
- shot = new shottype(src)
- ammo_type[i] = shot
- shot = ammo_type[select]
- fire_sound = shot.fire_sound
- fire_delay = shot.delay
-
/obj/item/gun/energy/Destroy()
- QDEL_NULL(cell)
- QDEL_LIST(ammo_type)
- STOP_PROCESSING(SSobj, src)
+ if(flags_1 & INITIALIZED_1)
+ QDEL_NULL(cell)
+ QDEL_LIST(ammo_type)
+ STOP_PROCESSING(SSobj, src)
return ..()
+/obj/item/gun/energy/examine(mob/user)
+ . = ..()
+ if(!right_click_overridden)
+ . += "Right click in combat mode to switch modes. "
+
/obj/item/gun/energy/process()
if(selfcharge && cell?.charge < cell.maxcharge)
charge_tick++
@@ -82,13 +96,14 @@
recharge_newshot(TRUE)
update_icon()
-/obj/item/gun/energy/attack_self(mob/living/user as mob)
- if(ammo_type.len > 1)
+// ATTACK SELF IGNORING PARENT RETURN VALUE
+/obj/item/gun/energy/attack_self(mob/living/user)
+ . = ..()
+ if(can_select_fire(user))
select_fire(user)
- update_icon()
/obj/item/gun/energy/can_shoot()
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
return !QDELETED(cell) ? (cell.charge >= shot.e_cost) : FALSE
/obj/item/gun/energy/recharge_newshot(no_cyborg_drain)
@@ -98,11 +113,11 @@
if(iscyborg(loc))
var/mob/living/silicon/robot/R = loc
if(R.cell)
- var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] //Necessary to find cost of shot
if(R.cell.use(shot.e_cost)) //Take power from the borg...
cell.give(shot.e_cost) //... to recharge the shot
if(!chambered)
- var/obj/item/ammo_casing/energy/AC = ammo_type[select]
+ var/obj/item/ammo_casing/energy/AC = ammo_type[current_firemode_index]
if(cell.charge >= AC.e_cost) //if there's enough power in the cell cell...
chambered = AC //...prepare a new shot based on the current ammo type selected
if(!chambered.BB)
@@ -115,29 +130,104 @@
chambered = null //either way, released the prepared shot
recharge_newshot() //try to charge a new shot
-/obj/item/gun/energy/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
+/obj/item/gun/energy/do_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
if(!chambered && can_shoot())
process_chamber() // If the gun was drained and then recharged, load a new shot.
return ..()
-/obj/item/gun/energy/process_burst(mob/living/user, atom/target, message = TRUE, params = null, zone_override="", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
+/obj/item/gun/energy/do_burst_shot(mob/living/user, atom/target, message = TRUE, params = null, zone_override="", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
if(!chambered && can_shoot())
process_chamber() // Ditto.
return ..()
-/obj/item/gun/energy/proc/select_fire(mob/living/user)
- select++
- if (select > ammo_type.len)
- select = 1
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
- fire_sound = shot.fire_sound
- fire_delay = shot.delay
- if (shot.select_name)
- to_chat(user, "[src] is now set to [shot.select_name]. ")
- chambered = null
- recharge_newshot(TRUE)
+// Firemodes/Ammotypes
+
+/obj/item/gun/energy/proc/update_ammo_types()
+ var/obj/item/ammo_casing/energy/C
+ for(var/i in 1 to length(ammo_type))
+ var/v = ammo_type[i]
+ var/user_can_select = ammo_type[v]
+ if(istype(v, /obj/item/ammo_casing/energy)) //already set
+ ammo_type[v] = isnull(user_can_select)? TRUE : user_can_select
+ else
+ C = new v(src) //if you put non energycasing/type stuff in here you deserve the runtime
+ ammo_type[i] = C
+ ammo_type[C] = isnull(user_can_select)? TRUE : user_can_select
+ set_firemode_index(initial(current_firemode_index))
+
+/obj/item/gun/energy/proc/set_firemode_index(index, mob/user_for_feedback)
+ chambered = null //unchamber whatever we have chambered
+ if(index > length(ammo_type))
+ index = 1
+ else if(index < 1)
+ index = length(ammo_type)
+ var/obj/item/ammo_casing/energy/C = ammo_type[index] //energy weapons should not have no casings, if it does you deserve the runtime.
+ current_firemode_index = index
+ fire_sound = C.fire_sound
+ fire_delay = C.delay
+ if(user_for_feedback)
+ to_chat(user_for_feedback, "[src] is now set to [C.select_name || C]. ")
+ post_set_firemode()
update_icon(TRUE)
- return
+
+/obj/item/gun/energy/proc/post_set_firemode(recharge_newshot = TRUE)
+ if(recharge_newshot)
+ recharge_newshot(TRUE)
+
+/obj/item/gun/energy/proc/set_firemode_to_next(mob/user_for_feedback)
+ return set_firemode_index(++current_firemode_index, user_for_feedback)
+
+/obj/item/gun/energy/proc/set_firemode_to_prev(mob/user_for_feedback)
+ return set_firemode_index(--current_firemode_index, user_for_feedback)
+
+/obj/item/gun/energy/proc/get_firemode_index(casing_type)
+ var/obj/item/ammo_casing/energy/E = locate(casing_type) in ammo_type
+ if(E)
+ return ammo_type.Find(E)
+
+/obj/item/gun/energy/proc/set_firemode_to_type(casing_type)
+ var/index = get_firemode_index(casing_type)
+ if(index)
+ set_firemode_index(index)
+
+/// This is the proc used in general for when a user switches firemodes. Just goes to next firemode by default.
+/obj/item/gun/energy/proc/select_fire(mob/living/user)
+ return user_set_firemode_to_next(user)
+
+/obj/item/gun/energy/proc/can_select_fire(mob/living/user)
+ return TRUE
+
+#define INCREMENT_OR_WRAP(i) i = (i >= length(ammo_type))? 1 : (i + 1)
+#define DECREMENT_OR_WRAP(i) i = (i <= 1)? length(ammo_type) : (i - 1)
+#define IS_VALID_INDEX(i) (ammo_type[ammo_type[i]])
+/obj/item/gun/energy/proc/user_set_firemode_to_next(mob/user_for_feedback)
+ var/current_index = current_firemode_index
+ var/new_index = current_index
+ INCREMENT_OR_WRAP(new_index)
+ if(!IS_VALID_INDEX(new_index))
+ var/initial_index = new_index
+ while(!IS_VALID_INDEX(new_index) && (new_index != initial_index))
+ new_index = INCREMENT_OR_WRAP(new_index)
+ if(initial_index == new_index) //cycled through without finding another
+ new_index = current_index
+
+ set_firemode_index(new_index, user_for_feedback)
+
+/obj/item/gun/energy/proc/user_set_firemode_to_prev(mob/user_for_feedback)
+ var/current_index = current_firemode_index
+ var/new_index = current_index
+ DECREMENT_OR_WRAP(new_index)
+ if(!IS_VALID_INDEX(new_index))
+ var/initial_index = new_index
+ while(!IS_VALID_INDEX(new_index) && (new_index != initial_index))
+ new_index = DECREMENT_OR_WRAP(new_index)
+ if(initial_index == new_index) //cycled through without finding another
+ new_index = current_index
+
+ set_firemode_index(new_index, user_for_feedback)
+#undef INCREMENT_OR_WRAP
+#undef DECREMENT_OR_WRAP
+#undef IS_VALID_INDEX
/obj/item/gun/energy/update_icon(force_update)
if(QDELETED(src))
@@ -157,7 +247,7 @@
if(!initial(item_state))
itemState = icon_state
if (modifystate)
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
add_overlay("[icon_state]_[shot.select_name]")
iconState += "_[shot.select_name]"
if(itemState)
@@ -176,6 +266,9 @@
if(itemState)
itemState += "[ratio]"
item_state = itemState
+ if(ismob(loc)) //forces inhands to update
+ var/mob/M = loc
+ M.update_inv_hands()
/obj/item/gun/energy/suicide_act(mob/living/user)
if (istype(user) && can_shoot() && can_trigger_gun(user) && user.get_bodypart(BODY_ZONE_HEAD))
@@ -185,7 +278,7 @@
user.visible_message("[user] melts [user.p_their()] face off with [src]! ")
playsound(loc, fire_sound, 50, 1, -1)
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
cell.use(shot.e_cost)
update_icon()
return(FIRELOSS)
@@ -207,13 +300,12 @@
STOP_PROCESSING(SSobj, src)
. = ..()
-
/obj/item/gun/energy/ignition_effect(atom/A, mob/living/user)
- if(!can_shoot() || !ammo_type[select])
+ if(!can_shoot() || !ammo_type[current_firemode_index])
shoot_with_empty_chamber()
. = ""
else
- var/obj/item/ammo_casing/energy/E = ammo_type[select]
+ var/obj/item/ammo_casing/energy/E = ammo_type[current_firemode_index]
var/obj/item/projectile/energy/BB = E.BB
if(!BB)
. = ""
@@ -235,3 +327,9 @@
playsound(user, BB.hitsound, 50, 1)
cell.use(E.e_cost)
. = "[user] casually lights their [A.name] with [src]. Damn. "
+
+/obj/item/gun/energy/altafterattack(atom/target, mob/user, proximity_flags, params)
+ if(!right_click_overridden)
+ select_fire(user)
+ return TRUE
+ return ..()
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index 163deae0ed..efe107a3f8 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -97,7 +97,7 @@
pin = null
can_charge = 0
ammo_x_offset = 1
- ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
+ ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
selfcharge = EGUN_SELFCHARGE
var/fail_tick = 0
var/fail_chance = 0
@@ -113,18 +113,21 @@
..()
/obj/item/gun/energy/e_gun/nuclear/proc/failcheck()
- if(prob(fail_chance) && isliving(loc))
- var/mob/living/M = loc
+ if(prob(fail_chance))
switch(fail_tick)
if(0 to 200)
fail_tick += (2*(fail_chance))
- M.rad_act(400)
- to_chat(M, "Your [name] feels warmer. ")
+ radiation_pulse(src, 50)
+ var/mob/M = (ismob(loc) && loc) || (ismob(loc.loc) && loc.loc) //thank you short circuiting. if you powergame and nest these guns deeply you get to suffer no-warning radiation death.
+ if(M)
+ to_chat(M, "Your [name] feels warmer. ")
if(201 to INFINITY)
SSobj.processing.Remove(src)
- M.rad_act(800)
- crit_fail = 1
- to_chat(M, "Your [name]'s reactor overloads! ")
+ radiation_pulse(src, 200)
+ crit_fail = TRUE
+ var/mob/M = (ismob(loc) && loc) || (ismob(loc.loc) && loc.loc)
+ if(M)
+ to_chat(M, "Your [name]'s reactor overloads! ")
/obj/item/gun/energy/e_gun/nuclear/emp_act(severity)
. = ..()
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 32f3416faf..f45b5a29ba 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -202,7 +202,7 @@
if(!ishuman(user) || !ishuman(target))
return
- if(semicd)
+ if(on_cooldown())
return
if(user == target)
@@ -212,7 +212,7 @@
target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger... ", \
"[user] points [src] at your head, ready to pull the trigger... ")
- semicd = TRUE
+ busy_action = TRUE
if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH))
if(user)
@@ -220,10 +220,10 @@
user.visible_message("[user] decided not to shoot. ")
else if(target && target.Adjacent(user))
target.visible_message("[user] has decided to spare [target] ", "[user] has decided to spare your life! ")
- semicd = FALSE
+ busy_action = FALSE
return
- semicd = FALSE
+ busy_action = FALSE
target.visible_message("[user] pulls the trigger! ", "[user] pulls the trigger! ")
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index f0b38f2d4e..9c6ec446bb 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -36,7 +36,7 @@
/obj/item/gun/energy/decloner/update_icon()
..()
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
if(!QDELETED(cell) && (cell.charge > shot.e_cost))
add_overlay("decloner_spin")
@@ -185,7 +185,7 @@
var/atmos_link = FALSE
/obj/item/gun/energy/wormhole_projector/update_icon()
- icon_state = "[initial(icon_state)][select]"
+ icon_state = "[initial(icon_state)][current_firemode_index]"
item_state = icon_state
/obj/item/gun/energy/wormhole_projector/update_ammo_types()
@@ -320,7 +320,7 @@
/obj/item/gun/energy/emitter/update_icon()
..()
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
if(!QDELETED(cell) && (cell.charge > shot.e_cost))
add_overlay("emitter_carbine_empty")
else
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 55d11c52d1..d700db817c 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -18,10 +18,23 @@
/obj/item/gun/energy/e_gun/advtaser
name = "hybrid taser"
- desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams."
+ desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams. Right click in combat mode to fire a taser shot with a cooldown. "
icon_state = "advtaser"
- ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/electrode)
+ ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/electrode/security = FALSE)
ammo_x_offset = 2
+ // Not enough guns have altfire systems like this yet for this to be a universal framework.
+ var/last_altfire = 0
+ var/altfire_delay = 15
+
+/obj/item/gun/energy/e_gun/advtaser/altafterattack(atom/target, mob/user, proximity_flag, params)
+ . = TRUE
+ if(last_altfire + altfire_delay > world.time)
+ return
+ var/current_index = current_firemode_index
+ set_firemode_to_type(/obj/item/ammo_casing/energy/electrode)
+ process_afterattack(target, user, proximity_flag, params)
+ set_firemode_index(current_index)
+ last_altfire = world.time
/obj/item/gun/energy/e_gun/advtaser/cyborg
name = "cyborg taser"
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index 52236ab695..57bbd13cf7 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -73,6 +73,12 @@
user.adjustOxyLoss(500)
charges--
+/obj/item/gun/magic/wand/death/debug
+ desc = "In some obscure circles, this is known as the 'cloning tester's friend'."
+ max_charges = 500
+ variable_charges = FALSE
+ can_charge = TRUE
+ recharge_rate = 1
/////////////////////////////////////
//WAND OF HEALING
diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm
index c53e28ea29..ec5eee7b6b 100644
--- a/code/modules/projectiles/guns/misc/beam_rifle.dm
+++ b/code/modules/projectiles/guns/misc/beam_rifle.dm
@@ -43,6 +43,7 @@
var/lastangle = 0
var/aiming_lastangle = 0
+ var/last_aimbeam = 0
var/mob/current_user = null
var/list/obj/effect/projectile/tracer/current_tracers
@@ -186,8 +187,9 @@
/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE)
var/diff = abs(aiming_lastangle - lastangle)
- check_user()
- if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update)
+ if(!check_user())
+ return
+ if(((diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD) || ((last_aimbeam + 1) > world.time)) && !force_update)
return
aiming_lastangle = lastangle
var/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/P = new
@@ -208,6 +210,7 @@
targloc = get_turf_in_angle(lastangle, curloc, 10)
P.preparePixelProjectile(targloc, current_user, current_user.client.mouseParams, 0)
P.fire(lastangle)
+ last_aimbeam = world.time
/obj/item/gun/energy/beam_rifle/process()
if(!aiming)
@@ -296,27 +299,17 @@
if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher))
return
process_aim()
- if(aiming_time_left <= aiming_time_fire_threshold && check_user())
+ if(aiming_time_left <= aiming_time_fire_threshold && check_user() && ((lastfire + delay) <= world.time))
sync_ammo()
- afterattack(M.client.mouseObject, M, FALSE, M.client.mouseParams, passthrough = TRUE)
+ do_fire(M.client.mouseObject, M, FALSE, M.client.mouseParams, M.zone_selected)
stop_aiming()
QDEL_LIST(current_tracers)
return ..()
-/obj/item/gun/energy/beam_rifle/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE)
- if(flag) //It's adjacent, is the user, or is on the user's person
- if(target in user.contents) //can't shoot stuff inside us.
- return
- if(!ismob(target) || user.a_intent == INTENT_HARM) //melee attack
- return
- if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected)
- return
- if(!passthrough && (aiming_time > aiming_time_fire_threshold))
- return
- if(lastfire > world.time + delay)
- return
- lastfire = world.time
+/obj/item/gun/energy/beam_rifle/do_fire(atom/target, mob/living/user, message = TRUE, params, zone_override = "", bonus_spread = 0)
. = ..()
+ if(.)
+ lastfire = world.time
stop_aiming()
/obj/item/gun/energy/beam_rifle/proc/sync_ammo()
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index 0465a611cd..e754a9c070 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -23,6 +23,8 @@
if(proximity_flag)
if(istype(target, /obj/item/gun))
var/obj/item/gun/G = target
+ if(G.no_pin_required)
+ return
if(G.pin && (force_replace || G.pin.pin_removeable))
G.pin.forceMove(get_turf(G))
G.pin.gun_remove(user)
@@ -69,13 +71,10 @@
if(gun)
qdel(gun)
-
-
/obj/item/firing_pin/magic
name = "magic crystal shard"
desc = "A small enchanted shard which allows magical weapons to fire."
-
// Test pin, works only near firing range.
/obj/item/firing_pin/test_range
name = "test-range firing pin"
@@ -229,3 +228,16 @@
if(gun)
gun.pin = null
return ..()
+
+//Station Locked
+
+/obj/item/firing_pin/away
+ name = "station locked pin"
+ desc = "A firing pin that only will fire when off the station."
+
+/obj/item/firing_pin/away/pin_auth(mob/living/user)
+ var/area/station_area = get_area(src)
+ if(!station_area || is_station_level(station_area.z))
+ to_chat(user, "The pin beeps, refusing to fire. ")
+ return FALSE
+ return TRUE
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index a902c545b8..4521e4ea13 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -90,6 +90,10 @@
var/decayedRange //stores original range
var/reflect_range_decrease = 5 //amount of original range that falls off when reflecting, so it doesn't go forever
var/is_reflectable = FALSE // Can it be reflected or not?
+
+ /// factor to multiply by for zone accuracy percent.
+ var/zone_accuracy_factor = 1
+
//Effects
var/stun = 0
var/knockdown = 0
@@ -185,10 +189,6 @@
else
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color())
- if(iscarbon(L) && !HAS_TRAIT(L, TRAIT_NOMARROW))
- var/mob/living/carbon/C = L
- C.bleed(damage)
- else
L.add_splatter_floor(target_loca)
else if(impact_effect_type && !hitscan)
new impact_effect_type(target_loca, hitx, hity)
@@ -211,11 +211,8 @@
L.on_hit(src)
var/reagent_note
- if(reagents && reagents.reagent_list)
- reagent_note = " REAGENTS:"
- for(var/datum/reagent/R in reagents.reagent_list)
- reagent_note += R.type + " ("
- reagent_note += num2text(R.volume) + ") "
+ if(reagents)
+ reagent_note = reagents.log_list()
if(ismob(firer))
log_combat(firer, L, "shot", src, reagent_note)
@@ -253,7 +250,8 @@
return TRUE
var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
- def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
+ if(check_zone(def_zone) != BODY_ZONE_CHEST)
+ def_zone = ran_zone(def_zone, max(100-(7*distance), 5) * zone_accuracy_factor) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
if(isturf(A) && hitsound_wall)
var/volume = CLAMP(vol_by_damage() + 20, 0, 100)
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index 02ec167b80..c28d85511e 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -61,7 +61,7 @@
/obj/item/projectile/bullet/pellet/shotgun_buckshot
name = "buckshot pellet"
- damage = 10
+ damage = 12.5
/obj/item/projectile/bullet/pellet/shotgun_rubbershot
name = "rubbershot pellet"
diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm
index bea5dbc140..5e3ae53806 100644
--- a/code/modules/projectiles/projectile/bullets/sniper.dm
+++ b/code/modules/projectiles/projectile/bullets/sniper.dm
@@ -7,6 +7,7 @@
knockdown = 100
dismemberment = 50
armour_penetration = 50
+ zone_accuracy_factor = 100 //guarunteed 100%
var/breakthings = TRUE
/obj/item/projectile/bullet/p50/on_hit(atom/target, blocked = 0)
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
index 88e70154d1..3bb1b3794e 100644
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ b/code/modules/projectiles/projectile/energy/stun.dm
@@ -2,11 +2,11 @@
name = "electrode"
icon_state = "spark"
color = "#FFFF00"
- nodamage = 1
+ nodamage = TRUE
knockdown = 60
knockdown_stamoverride = 36
knockdown_stam_max = 50
- stutter = 5
+ stutter = 10
jitter = 20
hitsound = 'sound/weapons/taserhit.ogg'
range = 7
@@ -14,6 +14,7 @@
muzzle_type = /obj/effect/projectile/muzzle/stun
impact_type = /obj/effect/projectile/impact/stun
var/tase_duration = 50
+ var/strong_tase = TRUE
/obj/item/projectile/energy/electrode/on_hit(atom/target, blocked = FALSE)
. = ..()
@@ -26,10 +27,24 @@
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))
- C.apply_status_effect(STATUS_EFFECT_TASED, tase_duration)
+ else if(tase_duration && (C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
+ C.apply_status_effect(strong_tase? STATUS_EFFECT_TASED : STATUS_EFFECT_TASED_WEAK, tase_duration)
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
do_sparks(1, TRUE, src)
..()
+
+/obj/item/projectile/energy/electrode/security
+ tase_duration = 30
+ knockdown = 0
+ stamina = 10
+ knockdown_stamoverride = 0
+ knockdown_stam_max = 0
+ strong_tase = FALSE
+ range = 12
+
+/obj/item/projectile/energy/electrode/security/hos
+ knockdown = 100
+ knockdown_stamoverride = 30
+ knockdown_stam_max = null
diff --git a/code/modules/projectiles/projectile/reusable/arrow.dm b/code/modules/projectiles/projectile/reusable/arrow.dm
new file mode 100644
index 0000000000..f1c9638fd9
--- /dev/null
+++ b/code/modules/projectiles/projectile/reusable/arrow.dm
@@ -0,0 +1,6 @@
+/obj/item/projectile/bullet/reusable/arrow
+ name = "wooden arrow"
+ desc = "Woosh!"
+ damage = 15
+ icon_state = "arrow"
+ ammo_type = /obj/item/ammo_casing/caseless/arrow
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm
index 0ef9bc6653..ba21ecb28c 100644
--- a/code/modules/projectiles/projectile/special/gravity.dm
+++ b/code/modules/projectiles/projectile/special/gravity.dm
@@ -1,90 +1,65 @@
-/obj/item/projectile/gravityrepulse
+/obj/item/projectile/gravity
+ name = "gravity bolt"
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "chronofield"
+ hitsound = 'sound/weapons/wave.ogg'
+ damage = 0
+ damage_type = BRUTE
+ nodamage = TRUE
+ var/power = 4
+ var/list/thrown = list() //normally we wouldn't need this but incase on_hit is called multiple times, yeah.. this is a good idea.
+
+/obj/item/projectile/gravity/Initialize(mapload)
+ . = ..()
+ var/obj/item/ammo_casing/energy/gravity/G = loc
+ if(istype(G))
+ power = min(G.gun.power, 15)
+
+/obj/item/projectile/gravity/on_hit()
+ . = ..()
+ var/turf/T = get_turf(src)
+ var/list/tothrow = list()
+ var/list/cachedrange = range(T, power)
+ for(var/mob/M in cachedrange)
+ tothrow += M
+ for(var/obj/O in cachedrange)
+ tothrow += O
+ var/safety = 50
+ for(var/i in tothrow)
+ if(!safety)
+ break
+ var/atom/movable/AM = i
+ if((AM == src) || (AM == firer) || (AM.move_resist > MOVE_FORCE_EXTREMELY_STRONG) || AM.anchored || thrown[AM])
+ continue
+ thrown[AM] = TRUE
+ safety--
+ var/target = get_target(T, AM)
+ if(!target)
+ return FALSE
+ AM.throw_at(target, power + 1, 1)
+ for(var/turf/F in range(T,power))
+ new /obj/effect/temp_visual/gravpush(F)
+
+/obj/item/projectile/gravity/proc/get_target(turf/origin, atom/movable/AM)
+ return origin
+
+/obj/item/projectile/gravity/repulse
name = "repulsion bolt"
- icon = 'icons/effects/effects.dmi'
- icon_state = "chronofield"
- hitsound = 'sound/weapons/wave.ogg'
- damage = 0
- damage_type = BRUTE
- nodamage = 1
color = "#33CCFF"
- var/turf/T
- var/power = 4
- var/list/thrown_items = list()
-/obj/item/projectile/gravityrepulse/Initialize()
- . = ..()
- var/obj/item/ammo_casing/energy/gravity/repulse/C = loc
- if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items
- power = min(C.gun.power, 15)
+/obj/item/projectile/gravity/repulse/get_target(turf/origin, atom/movable/AM)
+ return get_turf_in_angle(Get_Angle(origin, AM), origin, power)
-/obj/item/projectile/gravityrepulse/on_hit()
- . = ..()
- T = get_turf(src)
- for(var/atom/movable/A in range(T, power))
- if(A == src || (firer && A == src.firer) || A.anchored || thrown_items[A])
- continue
- var/throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(A, src)))
- A.throw_at(throwtarget,power+1,1)
- thrown_items[A] = A
- for(var/turf/F in range(T,power))
- new /obj/effect/temp_visual/gravpush(F)
-
-/obj/item/projectile/gravityattract
+/obj/item/projectile/gravity/attract
name = "attraction bolt"
- icon = 'icons/effects/effects.dmi'
- icon_state = "chronofield"
- hitsound = 'sound/weapons/wave.ogg'
- damage = 0
- damage_type = BRUTE
- nodamage = 1
color = "#FF6600"
- var/turf/T
- var/power = 4
- var/list/thrown_items = list()
-/obj/item/projectile/gravityattract/Initialize()
- . = ..()
- var/obj/item/ammo_casing/energy/gravity/attract/C = loc
- if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items
- power = min(C.gun.power, 15)
+/obj/item/projectile/gravity/attract/get_target(turf/origin, atom/movable/AM)
+ return origin
-/obj/item/projectile/gravityattract/on_hit()
- . = ..()
- T = get_turf(src)
- for(var/atom/movable/A in range(T, power))
- if(A == src || (firer && A == src.firer) || A.anchored || thrown_items[A])
- continue
- A.throw_at(T, power+1, 1)
- thrown_items[A] = A
- for(var/turf/F in range(T,power))
- new /obj/effect/temp_visual/gravpush(F)
-
-/obj/item/projectile/gravitychaos
+/obj/item/projectile/gravity/chaos
name = "gravitational blast"
- icon = 'icons/effects/effects.dmi'
- icon_state = "chronofield"
- hitsound = 'sound/weapons/wave.ogg'
- damage = 0
- damage_type = BRUTE
- nodamage = 1
color = "#101010"
- var/turf/T
- var/power = 4
- var/list/thrown_items = list()
-/obj/item/projectile/gravitychaos/Initialize()
- . = ..()
- var/obj/item/ammo_casing/energy/gravity/chaos/C = loc
- if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items
- power = min(C.gun.power, 15)
-
-/obj/item/projectile/gravitychaos/on_hit()
- . = ..()
- T = get_turf(src)
- for(var/atom/movable/A in range(T, power))
- if(A == src|| (firer && A == src.firer) || A.anchored || thrown_items[A])
- continue
- A.throw_at(get_edge_target_turf(A, pick(GLOB.cardinals)), power+1, 1)
- thrown_items[A] = A
- for(var/turf/Z in range(T,power))
- new /obj/effect/temp_visual/gravpush(Z)
+/obj/item/projectile/gravity/chaos/get_target(turf/origin, atom/movable/AM)
+ return get_turf_in_angle(rand(0, 359), origin, power)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 0abdc9a739..f41a6956a1 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -319,7 +319,7 @@
if(!is_operational())
return
var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN)
- if(!usr.canUseTopic(src, !issilicon(usr)))
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
if(saved_recipes[name] && alert("\"[name]\" already exists, do you want to overwrite it?",, "Yes", "No") == "No")
return
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 44148c85a7..66c663e2e4 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -261,7 +261,7 @@
return
vol_each = min(reagents.total_volume / amount, 50)
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/pill/P
var/target_loc = drop_location()
@@ -288,7 +288,7 @@
reagents.trans_to(P,vol_each)
else
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/food/condiment/pack/P = new/obj/item/reagent_containers/food/condiment/pack(drop_location())
@@ -314,7 +314,7 @@
return
vol_each = min(reagents.total_volume / amount, 40)
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/pill/P
@@ -332,7 +332,7 @@
if(condi)
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/food/condiment/P = new(drop_location())
P.originalname = name
@@ -345,7 +345,7 @@
amount_full = round(reagents.total_volume / 30)
vol_part = ((reagents.total_volume*1000) % 30000) / 1000 //% operator doesn't support decimals.
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/glass/bottle/P
@@ -373,7 +373,7 @@
amount_full = round(reagents.total_volume / 60)
vol_part = reagents.total_volume % 60
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/glass/bottle/vial/small/P
@@ -408,7 +408,7 @@
vol_each = min(reagents.total_volume / amount, 20)
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)))
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
var/obj/item/reagent_containers/syringe/dart/D
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index bba5371ef8..3dea44cf40 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -170,7 +170,7 @@
if(!A.mutable)
return
if(A)
- var/new_name = stripped_input(usr, "Name the disease", "New name", "", MAX_NAME_LEN)
+ var/new_name = sanitize_name(html_encode(params["name"]))
if(!new_name || ..())
return
A.AssignName(new_name)
@@ -181,27 +181,30 @@
if(!istype(A) || !A.mutable)
to_chat(usr, "ERROR: Cannot replicate virus strain. ")
return
+ wait = TRUE
+ addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 50)
A = A.Copy()
var/list/data = list("blood_DNA" = "UNKNOWN DNA", "blood_type" = "SY", "viruses" = list(A))
var/obj/item/reagent_containers/glass/bottle/B = new(drop_location())
B.name = "[A.name] culture bottle"
B.desc = "A small bottle. Contains [A.agent] culture in synthblood medium."
- B.reagents.add_reagent(/datum/reagent/blood, 20, data)
- wait = TRUE
+ B.reagents.add_reagent(/datum/reagent/blood/synthetics, 10, data)
update_icon()
var/turf/source_turf = get_turf(src)
log_virus("A culture bottle was printed for the virus [A.admin_details()] at [loc_name(source_turf)] by [key_name(usr)]")
- addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 50)
+
. = TRUE
if("create_vaccine_bottle")
+ wait = TRUE
+ addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 400)
var/id = params["index"]
var/datum/disease/D = SSdisease.archive_diseases[id]
var/obj/item/reagent_containers/glass/bottle/B = new(drop_location())
B.name = "[D.name] vaccine bottle"
B.reagents.add_reagent(/datum/reagent/vaccine, 15, list(id))
- wait = TRUE
+
update_icon()
- addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 200)
+
. = TRUE
/obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 7e1b7ec018..b17c2dfb37 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -142,7 +142,7 @@
/obj/machinery/reagentgrinder/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave
. = ..()
- if(operating || !user.canUseTopic(src, !issilicon(user)))
+ if(operating || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
var/list/options = list()
@@ -170,10 +170,10 @@
for(var/key in options)
choice = key
else
- choice = show_radial_menu(user, src, options, require_near = !issilicon(user))
+ choice = show_radial_menu(user, src, options, require_near = !hasSiliconAccessInArea(user))
// post choice verification
- if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !issilicon(user)))
+ if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
switch(choice)
@@ -190,7 +190,7 @@
/obj/machinery/reagentgrinder/examine(mob/user)
. = ..()
- if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
+ if(!in_range(user, src) && !hasSiliconAccessInArea(user) && !isobserver(user))
. += "You're too far away to examine [src]'s contents and display! "
return
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 810124b2ba..ccdbbcc915 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -725,11 +725,15 @@ All effects don't start immediately, but rather get worse over time; the rate is
var/dorf_mode
/datum/reagent/consumable/ethanol/manly_dorf/on_mob_metabolize(mob/living/M)
+ var/real_dorf = isdwarf(M) //_species(H, /datum/species/dwarf)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.dna.check_mutation(DWARFISM) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE))
+ if(H.dna.check_mutation(DWARFISM) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE) || real_dorf)
to_chat(H, "Now THAT is MANLY! ")
- boozepwr = 5 //We've had worse in the mines
+ if(real_dorf)
+ boozepwr = 100 // Don't want dwarves to die because of a low booze power
+ else
+ boozepwr = 5 //We've had worse in the mines
dorf_mode = TRUE
/datum/reagent/consumable/ethanol/manly_dorf/on_mob_life(mob/living/carbon/M)
@@ -1509,6 +1513,23 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.stuttering = min(M.stuttering + 3, 3)
..()
+/datum/reagent/consumable/ethanol/cogchamp
+ name = "CogChamp"
+ description = "Now you can fill yourself with the power of Ratvar!"
+ color = rgb(255, 201, 49)
+ boozepwr = 10
+ quality = DRINK_FANTASTIC
+ taste_description = "a brass taste with a hint of oil"
+ glass_icon_state = "cogchamp"
+ glass_name = "CogChamp"
+ glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!"
+ value = 8.13
+
+/datum/reagent/consumable/ethanol/cogchamp/on_mob_life(mob/living/carbon/M)
+ M.clockcultslurring = min(M.clockcultslurring + 3, 3)
+ M.stuttering = min(M.stuttering + 3, 3)
+ ..()
+
/datum/reagent/consumable/ethanol/triple_sec
name = "Triple Sec"
description = "A sweet and vibrant orange liqueur."
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index b6cb387b81..52eee9f8ea 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -383,7 +383,7 @@
name = "Hot Chocolate"
description = "Made with love! And coco beans."
nutriment_factor = 3 * REAGENTS_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
+ color = "#660000" // rgb: 221, 202, 134
taste_description = "creamy chocolate"
glass_icon_state = "chocolateglass"
glass_name = "glass of chocolate"
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index b8b5bad902..1b1d3c87ab 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -216,6 +216,14 @@
..()
. = 1
+/datum/reagent/medicine/rezadone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ . = ..()
+ if(iscarbon(M))
+ var/mob/living/carbon/patient = M
+ if(reac_volume >= 5 && HAS_TRAIT_FROM(patient, TRAIT_HUSK, "burn") && patient.getFireLoss() < THRESHOLD_UNHUSK) //One carp yields 12u rezadone.
+ patient.cure_husk("burn")
+ patient.visible_message("[patient]'s body rapidly absorbs moisture from the enviroment, taking on a more healthy appearance.")
+
/datum/reagent/medicine/spaceacillin
name = "Spaceacillin"
description = "Spaceacillin will prevent a patient from conventionally spreading any diseases they are currently infected with."
@@ -436,6 +444,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
if(show_message)
to_chat(M, "You feel your burns and bruises healing! It stings like hell! ")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
+ //Has to be at less than THRESHOLD_UNHUSK burn damage and have 100 synthflesh before unhusking. Corpses dont metabolize.
+ if(HAS_TRAIT_FROM(M, TRAIT_HUSK, "burn") && M.getFireLoss() < THRESHOLD_UNHUSK && M.reagents.has_reagent(/datum/reagent/medicine/synthflesh, 100))
+ M.cure_husk("burn")
+ M.visible_message("Most of [M]'s burnt off or charred flesh has been restored.")
..()
/datum/reagent/medicine/synthflesh/overdose_start(mob/living/M)
@@ -982,7 +994,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/stimulants/on_mob_metabolize(mob/living/L)
..()
- L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
+ L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-0.5, blacklisted_movetypes=(FLYING|FLOATING))
/datum/reagent/medicine/stimulants/on_mob_end_metabolize(mob/living/L)
L.remove_movespeed_modifier(type)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index c7e574594b..6984aceef5 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -770,7 +770,7 @@
..()
if(!istype(H))
return
- if(!H.dna || !H.dna.species || !(MOB_ORGANIC in H.mob_biotypes))
+ if(!H.dna || !H.dna.species || !(H.mob_biotypes & MOB_ORGANIC))
return
if(isjellyperson(H))
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 9c659fa90c..e4550ec6a9 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -260,7 +260,7 @@
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
..()
- if(MOB_BUG in M.mob_biotypes)
+ if(M.mob_biotypes & MOB_BUG)
var/damage = min(round(0.4*reac_volume, 0.1),10)
M.adjustToxLoss(damage)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 23176f8a05..6d5c546e7e 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -105,11 +105,11 @@
/obj/item/reagent_containers/proc/bartender_check(atom/target)
. = FALSE
var/turf/T = get_turf(src)
- if(!T || target.CanPass(src, T) || !thrownby || !thrownby.actions)
+ if(!T || !target.CanPass(src, T) || !thrownby || !thrownby.actions)
return
- for(var/datum/action/innate/drink_fling/D in thrownby.actions)
- if(D.active)
- return TRUE
+ var/datum/action/innate/D = get_action_of_type(thrownby, /datum/action/innate/drink_fling)
+ if(D?.active)
+ return TRUE
/obj/item/reagent_containers/proc/ForceResetRotation()
transform = initial(transform)
@@ -131,13 +131,14 @@
if(thrownby)
log_combat(thrownby, M, "splashed", R)
reagents.reaction(target, TOUCH)
-
+
else if(bartender_check(target) && thrown)
visible_message("[src] lands onto the [target.name] without spilling a single drop. ")
transform = initial(transform)
addtimer(CALLBACK(src, .proc/ForceResetRotation), 1)
return
+
else
if(isturf(target) && reagents.reagent_list.len && thrownby)
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]")
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index f4bb5e0d08..fd4282b1b0 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -85,17 +85,17 @@
/obj/item/reagent_containers/hypospray/medipen
name = "epinephrine medipen"
- desc = "A rapid and safe way to stabilize patients in critical condition for personnel without advanced medical knowledge."
+ desc = "A rapid and safe way to stabilize patients in critical condition for personnel without advanced medical knowledge. Contains a powerful preservative that can delay decomposition when applied to a dead body."
icon_state = "medipen"
item_state = "medipen"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- amount_per_transfer_from_this = 10
- volume = 10
+ amount_per_transfer_from_this = 13
+ volume = 13
ignore_flags = 1 //so you can medipen through hardsuits
reagent_flags = DRAWABLE
flags_1 = null
- list_reagents = list(/datum/reagent/medicine/epinephrine = 10)
+ list_reagents = list(/datum/reagent/medicine/epinephrine = 10, /datum/reagent/toxin/formaldehyde = 3)
/obj/item/reagent_containers/hypospray/medipen/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins to choke on \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
@@ -423,18 +423,21 @@
else
unload_hypo(vial,user)
-/obj/item/hypospray/mkii/verb/modes()
- set name = "Toggle Application Mode"
- set category = "Object"
- set src in usr
- var/mob/M = usr
- switch(mode)
- if(HYPO_SPRAY)
- mode = HYPO_INJECT
- to_chat(M, "[src] is now set to inject contents on application.")
- if(HYPO_INJECT)
- mode = HYPO_SPRAY
- to_chat(M, "[src] is now set to spray contents on application.")
+/obj/item/hypospray/mkii/CtrlClick(mob/living/user)
+ . = ..()
+ if(user.canUseTopic(src, FALSE) && user.get_active_held_item(src))
+ switch(mode)
+ if(HYPO_SPRAY)
+ mode = HYPO_INJECT
+ to_chat(user, "[src] is now set to inject contents on application.")
+ if(HYPO_INJECT)
+ mode = HYPO_SPRAY
+ to_chat(user, "[src] is now set to spray contents on application.")
+ return TRUE
+
+/obj/item/hypospray/mkii/examine(mob/user)
+ . = ..()
+ . += "Ctrl-Click it to toggle its mode from spraying to injecting and vice versa. "
#undef HYPO_SPRAY
#undef HYPO_INJECT
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index e8c8d14141..4562f348fc 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -172,6 +172,7 @@
/obj/item/reagent_containers/spray/drying_agent
name = "drying agent spray"
desc = "A spray bottle for drying agent."
+ icon_state = "cleaner_drying"
volume = 100
list_reagents = list(/datum/reagent/drying_agent = 100)
amount_per_transfer_from_this = 2
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
index c3e3993cb2..bfc92d24d8 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
@@ -1,11 +1,11 @@
///////////////////////////////////
-//////////Autolathe Designs ///////
+//////////Autolathe Designs////////
///////////////////////////////////
-////////////////
-///Construction//
-////////////////
+//////////////////
+///Construction///
+//////////////////
/datum/design/rods
name = "Metal Rod"
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
index c413f546f0..6affacf1b1 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
@@ -1,8 +1,8 @@
///////////////////////////////////
-//////////Autolathe Designs ///////
+/////////Autolathe Designs/////////
///////////////////////////////////
///////////
-///Tools //
+///Tools///
///////////
/datum/design/bucket
name = "Bucket"
@@ -52,7 +52,8 @@
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/multitool
- category = list("initial","Tools")
+ category = list("initial","Tools","Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/analyzer
name = "Analyzer"
diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm
index b4ac5f109d..69e695afac 100644
--- a/code/modules/research/designs/mining_designs.dm
+++ b/code/modules/research/designs/mining_designs.dm
@@ -62,6 +62,26 @@
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
+/datum/design/plasteel_pick
+ name = "plasteel-tipped pickaxe"
+ desc = "A pickaxe with a plasteel pick head. Less robust at cracking rock walls and digging up dirt than the titanium pickaxe, but better at cracking open skulls."
+ id = "plasteel_pick"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL=2000, MAT_PLASMA=2000)
+ build_path = /obj/item/pickaxe/plasteel
+ category = list("Mining Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/titanium_pick
+ name = "titanium-tipped pickaxe"
+ desc = "A pickaxe with a titanium pick head. Extremely robust at cracking rock walls and digging up dirt, but less than the plasteel pickaxe at cracking open skulls."
+ id = "titanium_pick"
+ build_type = PROTOLATHE
+ materials = list(MAT_TITANIUM = 4000)
+ build_path = /obj/item/pickaxe/titanium
+ category = list("Mining Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO
+
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well."
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 0059e0c417..72b2c91e4c 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -250,10 +250,10 @@
name = "Plant Data Disk"
desc = "A disk for storing plant genetic data."
id = "diskplantgene"
- build_type = PROTOLATHE
+ build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL=200, MAT_GLASS=100)
build_path = /obj/item/disk/plantgene
- category = list("Electronics")
+ category = list("Electronics","Imported")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/roastingstick
@@ -289,6 +289,16 @@
////////////Janitor Designs//////////////
/////////////////////////////////////////
+/datum/design/mop
+ name = "Mop"
+ desc = "Just your everyday standard mop."
+ id = "mop"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
+ build_path = /obj/item/mop
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
/datum/design/advmop
name = "Advanced Mop"
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
@@ -405,7 +415,7 @@
/datum/design/holosigncombifan
name = "ATMOS Holo-Combifan Projector"
- desc = "A holographic projector that creates holographic barriesr that prevent changes in atmospheric and temperature conditions."
+ desc = "A holographic projector that creates holographic barriers that prevent changes in atmospheric and temperature conditions."
id = "holosigncombifan"
build_type = PROTOLATHE
materials = list(MAT_METAL = 7500, MAT_GLASS = 2500, MAT_SILVER = 2500, MAT_GOLD = 2500, MAT_TITANIUM = 1750)
diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm
index 300fe6c68a..cf1c0563d5 100644
--- a/code/modules/research/designs/tool_designs.dm
+++ b/code/modules/research/designs/tool_designs.dm
@@ -27,7 +27,7 @@
desc = "A tool that can construct and deconstruct walls, airlocks and floors on the fly."
id = "rcd_loaded"
build_type = PROTOLATHE
- materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) // costs more than what it did in the autolathe, this one comes loaded.
+ materials = list(MAT_METAL = 36000) // costs more than what it did in the autolathe, this one comes loaded.
build_path = /obj/item/construction/rcd/loaded
category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index 1d65edbe9a..467679fea6 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -225,6 +225,16 @@
category = list("Firing Pins")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+/datum/design/pin_away
+ name = "Station Locked Pin"
+ desc = "This is a security firing pin which only authorizes users who are off station."
+ id = "pin_away"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 1500, MAT_GLASS = 2000)
+ build_path = /obj/item/firing_pin/away
+ category = list("Firing Pins")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
//////////////
//Guns////////
//////////////
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 659a83c703..25e8b82cc4 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -2,7 +2,7 @@
name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy."
layer = BELOW_OBJ_LAYER
- var/consoleless_interface = FALSE //Whether it can be used without a console.
+ var/consoleless_interface = TRUE //Whether it can be used without a console.
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
var/list/categories = list()
var/datum/component/remote_materials/materials
diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm
index 623c40462a..336803c011 100644
--- a/code/modules/research/machinery/departmental_circuit_imprinter.dm
+++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm
@@ -4,10 +4,9 @@
icon_state = "circuit_imprinter"
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department
requires_console = FALSE
- consoleless_interface = TRUE
/obj/machinery/rnd/production/circuit_imprinter/department/science
name = "department circuit imprinter (Science)"
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE
- department_tag = "Science"
\ No newline at end of file
+ department_tag = "Science"
diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm
index 0f9257cbeb..afea8248f3 100644
--- a/code/modules/research/machinery/departmental_protolathe.dm
+++ b/code/modules/research/machinery/departmental_protolathe.dm
@@ -4,7 +4,6 @@
icon_state = "protolathe"
circuit = /obj/item/circuitboard/machine/protolathe/department
requires_console = FALSE
- consoleless_interface = TRUE
/obj/machinery/rnd/production/protolathe/department/engineering
name = "department protolathe (Engineering)"
@@ -40,4 +39,4 @@
name = "department protolathe (Security)"
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY
department_tag = "Security"
- circuit = /obj/item/circuitboard/machine/protolathe/department/security
\ No newline at end of file
+ circuit = /obj/item/circuitboard/machine/protolathe/department/security
diff --git a/code/modules/research/machinery/techfab.dm b/code/modules/research/machinery/techfab.dm
index 885f27c2cb..f93560ed10 100644
--- a/code/modules/research/machinery/techfab.dm
+++ b/code/modules/research/machinery/techfab.dm
@@ -31,5 +31,4 @@
console_link = FALSE
production_animation = "protolathe_n"
requires_console = FALSE
- consoleless_interface = TRUE
allowed_buildtypes = PROTOLATHE | IMPRINTER
diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm
index f9d931b3de..dec263368b 100644
--- a/code/modules/research/nanites/nanite_chamber_computer.dm
+++ b/code/modules/research/nanites/nanite_chamber_computer.dm
@@ -89,7 +89,7 @@
var/mob/living/L = chamber.occupant
- if(!(MOB_ORGANIC in L.mob_biotypes) && !(MOB_UNDEAD in L.mob_biotypes))
+ if(!(L.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)))
data["status_msg"] = "Occupant not compatible with nanites."
return data
diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm
index df439e4496..6dd1b3ee82 100644
--- a/code/modules/research/nanites/nanite_programs/healing.dm
+++ b/code/modules/research/nanites/nanite_programs/healing.dm
@@ -125,7 +125,7 @@
if(!parts.len)
return FALSE
else
- if(!(MOB_ROBOTIC in host_mob.mob_biotypes))
+ if(!(host_mob.mob_biotypes & MOB_ROBOTIC))
return FALSE
return ..()
diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm
index c0d19e0375..f1cd19b2a2 100644
--- a/code/modules/research/nanites/public_chamber.dm
+++ b/code/modules/research/nanites/public_chamber.dm
@@ -137,7 +137,7 @@
var/mob/living/L = occupant
if(SEND_SIGNAL(L, COMSIG_HAS_NANITES))
return
- if((MOB_ORGANIC in L.mob_biotypes) || (MOB_UNDEAD in L.mob_biotypes))
+ if(L.mob_biotypes & (MOB_ORGANIC | MOB_UNDEAD))
inject_nanites()
/obj/machinery/public_nanite_chamber/open_machine()
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index d33ef29155..71cfe7c0f5 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -52,13 +52,12 @@ Nothing else in the console has ID requirements.
research_control = FALSE
/proc/CallMaterialName(ID)
+ if(GLOB.chemical_reagents_list[ID])
+ var/datum/reagent/reagent = GLOB.chemical_reagents_list[ID]
+ return reagent.name
if (ID[1] == "$" && GLOB.materials_list[ID])
var/datum/material/material = GLOB.materials_list[ID]
return material.name
-
- else if(GLOB.chemical_reagents_list[ID])
- var/datum/reagent/reagent = GLOB.chemical_reagents_list[ID]
- return reagent.name
return "ERROR: Report This"
/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index e29cf28f34..befaf3d96a 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -22,7 +22,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
if(works_from_distance)
user.Beam(T, icon_state = "rped_upgrade", time = 5)
T.exchange_parts(user, src)
- return FALSE
+ return TRUE
return ..()
/obj/item/storage/part_replacer/afterattack(obj/machinery/T, mob/living/user, adjacent, params)
@@ -60,6 +60,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
new /obj/item/stock_parts/manipulator(src)
new /obj/item/stock_parts/micro_laser(src)
new /obj/item/stock_parts/matter_bin(src)
+ new /obj/item/stock_parts/cell/high(src)
/obj/item/storage/part_replacer/bluespace/tier2
@@ -70,6 +71,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
new /obj/item/stock_parts/manipulator/nano(src)
new /obj/item/stock_parts/micro_laser/high(src)
new /obj/item/stock_parts/matter_bin/adv(src)
+ new /obj/item/stock_parts/cell/super(src)
/obj/item/storage/part_replacer/bluespace/tier3
@@ -80,6 +82,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
new /obj/item/stock_parts/manipulator/pico(src)
new /obj/item/stock_parts/micro_laser/ultra(src)
new /obj/item/stock_parts/matter_bin/super(src)
+ new /obj/item/stock_parts/cell/hyper(src)
/obj/item/storage/part_replacer/bluespace/tier4
@@ -90,6 +93,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
new /obj/item/stock_parts/manipulator/femto(src)
new /obj/item/stock_parts/micro_laser/quadultra(src)
new /obj/item/stock_parts/matter_bin/bluespace(src)
+ new /obj/item/stock_parts/cell/bluespace(src)
/obj/item/storage/part_replacer/cargo //used in a cargo crate
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index f1ea74d516..b269e29b63 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -191,7 +191,7 @@
prereq_ids = list("base")
design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin",
"atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod",
- "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine")
+ "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "rcd_ammo")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6000)
export_price = 5000
@@ -602,7 +602,7 @@
display_name = "Basic Tools"
description = "Basic mechanical, electronic, surgical and botanical tools."
prereq_ids = list("base")
- design_ids = list("screwdriver", "wrench", "wirecutters", "crowbar", "multitool", "welding_tool", "tscanner", "analyzer", "cable_coil", "pipe_painter", "airlock_painter", "scalpel", "circular_saw", "surgicaldrill", "retractor", "cautery", "hemostat", "cultivator", "plant_analyzer", "shovel", "spade", "hatchet")
+ design_ids = list("screwdriver", "wrench", "wirecutters", "crowbar", "multitool", "welding_tool", "tscanner", "analyzer", "cable_coil", "pipe_painter", "airlock_painter", "scalpel", "circular_saw", "surgicaldrill", "retractor", "cautery", "hemostat", "cultivator", "plant_analyzer", "shovel", "spade", "hatchet", "mop")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500)
export_price = 5000
@@ -620,7 +620,7 @@
display_name = "Advanced Mining Technology"
description = "Efficiency Level 127" //dumb mc references
prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma")
- design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv", "ore_silo")
+ design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv", "ore_silo", "plasteel_pick", "titanium_pick")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -666,7 +666,7 @@
display_name = "Weapon Development Technology"
description = "Our researchers have found new to weaponize just about everything now."
prereq_ids = list("engineering")
- design_ids = list("pin_testing", "tele_shield", "lasercarbine")
+ design_ids = list("pin_testing", "tele_shield", "lasercarbine", "pin_away")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
export_price = 5000
diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm
index e5e856c630..ea131fb996 100644
--- a/code/modules/spells/spell_types/rightandwrong.dm
+++ b/code/modules/spells/spell_types/rightandwrong.dm
@@ -102,6 +102,12 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
var/gun_type = pick(GLOB.summoned_guns)
var/obj/item/gun/G = new gun_type(get_turf(H))
G.unlock()
+ var/datum/antagonist/survivalist/guns/our_antag_datum = H.mind.has_antag_datum(/datum/antagonist/survivalist/guns)
+ if(our_antag_datum)
+ var/datum/objective/hoard/O = new()
+ O.owner = H
+ O.set_target(G)
+ our_antag_datum.objectives += O
playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, 1)
var/in_hand = H.put_in_hands(G) // not always successful
@@ -128,6 +134,13 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
var/obj/item/M = new magic_type(get_turf(H))
playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, 1)
+ var/datum/antagonist/survivalist/magic/our_antag_datum = H.mind.has_antag_datum(/datum/antagonist/survivalist/magic)
+ if(istype(our_antag_datum))
+ var/datum/objective/hoard/O = new()
+ O.owner = H
+ O.set_target(M)
+ our_antag_datum.objectives += O
+
var/in_hand = H.put_in_hands(M)
to_chat(H, "\A [M] appears [in_hand ? "in your hand" : "at your feet"]! ")
diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm
index e098fe389d..44fdd1eb55 100644
--- a/code/modules/spells/spell_types/wizard.dm
+++ b/code/modules/spells/spell_types/wizard.dm
@@ -248,6 +248,7 @@
mutations = list(BLINDMUT)
duration = 300
sound = 'sound/magic/blind.ogg'
+
/obj/effect/proc_holder/spell/aoe_turf/repulse
name = "Repulse"
desc = "This spell throws everything around the user away."
@@ -266,15 +267,22 @@
action_icon_state = "repulse"
/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, stun_amt = 50)
+ var/list/mobs = list()
+ var/list/objs = list()
var/list/thrownatoms = list()
var/atom/throwtarget
var/distfromcaster
playMagSound()
for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously.
- for(var/atom/movable/AM in T)
- thrownatoms += AM
-
+ for(var/mob/M in T)
+ mobs += M
+ for(var/obj/O in T)
+ objs += O
+ thrownatoms = mobs + objs //mobs first
+ var/safety = 50
for(var/am in thrownatoms)
+ if(!safety)
+ break
var/atom/movable/AM = am
if(AM == user || AM.anchored)
continue
@@ -299,6 +307,7 @@
M.Knockdown(stun_amt, override_hardstun = stun_amt * 0.2)
to_chat(M, "You're thrown back by [user]! ")
AM.throw_at(throwtarget, ((CLAMP((maxthrow - (CLAMP(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
+ safety--
/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?!
name = "Tail Sweep"
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 097be23c40..c9affe92f9 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -5,6 +5,7 @@
force = 3
throwforce = 3
icon = 'icons/mob/human_parts.dmi'
+ w_class = WEIGHT_CLASS_SMALL
icon_state = ""
layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor
var/mob/living/carbon/owner = null
diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm
index 40fe90a829..a94abafe4c 100644
--- a/code/modules/surgery/experimental_dissection.dm
+++ b/code/modules/surgery/experimental_dissection.dm
@@ -24,8 +24,8 @@
/datum/surgery_step/dissection
name = "dissection"
- implements = list(/obj/item/scalpel/augment = 75, /obj/item/scalpel/advanced = 60, /obj/item/scalpel = 45, /obj/item/kitchen/knife = 20, /obj/item/shard = 10)// special tools not only cut down time but also improve probability, doesn't use TOOL_SCALPEL because different scalpels have different probs
- time = 125
+ implements = list(/obj/item/scalpel/alien = 100, /obj/item/scalpel/advanced = 99, /obj/item/scalpel = 90, /obj/item/kitchen/knife = 45, /obj/item/shard = 25)// special tools not only cut down time but also improve probability, doesn't use TOOL_SCALPEL because different scalpels have different probs
+ time = 100
silicons_obey_prob = TRUE
repeatable = TRUE
@@ -110,4 +110,4 @@
requires_tech = TRUE
replaced_by = null
-#undef BASE_HUMAN_REWARD
\ No newline at end of file
+#undef BASE_HUMAN_REWARD
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index dfbf4ee21e..44e92e464b 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -51,7 +51,7 @@
clear_eye_trauma()
. = ..()
var/mob/living/carbon/C = .
- if(C)
+ if(!QDELETED(C))
if(ishuman(C) && eye_color)
var/mob/living/carbon/human/H = C
H.eye_color = old_eye_color
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 77aa302f8c..5767e84c73 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -6,7 +6,7 @@
slot = ORGAN_SLOT_HEART
healing_factor = STANDARD_ORGAN_HEALING
- decay_factor = 2.5 * STANDARD_ORGAN_DECAY //designed to fail about 5 minutes after death
+ decay_factor = 2 * STANDARD_ORGAN_DECAY
low_threshold_passed = "Prickles of pain appear then die out from within your chest... "
high_threshold_passed = "Something inside your chest hurts, and the pain isn't subsiding. You notice yourself breathing far faster than before. "
diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm
index 61f1e71d2e..70252cfb49 100644
--- a/code/modules/tgs/core/core.dm
+++ b/code/modules/tgs/core/core.dm
@@ -1,47 +1,60 @@
-/world/TgsNew(datum/tgs_event_handler/event_handler)
- var/tgs_version = world.params[TGS_VERSION_PARAMETER]
- if(!tgs_version)
+/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
+ var/current_api = TGS_READ_GLOBAL(tgs)
+ if(current_api)
+ TGS_ERROR_LOG("TgsNew(): TGS API datum already set ([current_api])! Was TgsNew() called more than once?")
return
- var/path = SelectTgsApi(tgs_version)
- if(!path)
- TGS_ERROR_LOG("Found unsupported API version: [tgs_version]. If this is a valid version please report this, backporting is done on demand.")
+#ifdef TGS_V3_API
+ minimum_required_security_level = TGS_SECURITY_TRUSTED
+#endif
+ var/raw_parameter = world.params[TGS_VERSION_PARAMETER]
+ if(!raw_parameter)
+ return
- TGS_INFO_LOG("Activating API for version [tgs_version]")
- var/datum/tgs_api/new_api = new path
+ var/datum/tgs_version/version = new(raw_parameter)
+ if(!version.Valid(FALSE))
+ TGS_ERROR_LOG("Failed to validate TGS version parameter: [raw_parameter]!")
+ return
- var/result = new_api.OnWorldNew(event_handler ? event_handler : new /datum/tgs_event_handler/tgs_default)
- if(result && result != TGS_UNIMPLEMENTED)
- TGS_WRITE_GLOBAL(tgs, new_api)
- else
+ var/api_datum
+ switch(version.suite)
+ if(3)
+#ifndef TGS_V3_API
+ TGS_ERROR_LOG("Detected V3 API but TGS_V3_API isn't defined!")
+#else
+ switch(version.major)
+ if(2)
+ api_datum = /datum/tgs_api/v3210
+#endif
+ if(4)
+ switch(version.major)
+ if(0)
+ api_datum = /datum/tgs_api/v4
+
+ var/datum/tgs_version/max_api_version = TgsMaximumAPIVersion();
+ if(version.suite != null && version.major != null && version.minor != null && version.patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter)
+ TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.")
+ api_datum = /datum/tgs_api/latest
+
+ if(!api_datum)
+ TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
+ return
+
+ TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]")
+ var/datum/tgs_api/new_api = new api_datum(version)
+
+ TGS_WRITE_GLOBAL(tgs, new_api)
+
+ var/result = new_api.OnWorldNew(event_handler, minimum_required_security_level)
+ if(!result || result == TGS_UNIMPLEMENTED)
+ TGS_WRITE_GLOBAL(tgs, null)
TGS_ERROR_LOG("Failed to activate API!")
-/world/proc/SelectTgsApi(tgs_version)
- //remove the old 3.0 header
- tgs_version = replacetext(tgs_version, "/tg/station 13 Server v", "")
-
- var/list/version_bits = splittext(tgs_version, ".")
-
- var/super = text2num(version_bits[1])
- var/major = text2num(version_bits[2])
- var/minor = text2num(version_bits[3])
- var/patch = text2num(version_bits[4])
-
- switch(super)
- if(3)
- switch(major)
- if(2)
- return /datum/tgs_api/v3210
-
- if(super != null && major != null && minor != null && patch != null && tgs_version > TgsMaximumAPIVersion())
- TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.")
- return /datum/tgs_api/latest
-
/world/TgsMaximumAPIVersion()
- return "4.0.0.0"
+ return new /datum/tgs_version("4.0.x.x")
/world/TgsMinimumAPIVersion()
- return "3.2.0.0"
+ return new /datum/tgs_version("3.2.0.0")
/world/TgsInitializationComplete()
var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
@@ -71,7 +84,9 @@
return TGS_READ_GLOBAL(tgs) != null
/world/TgsVersion()
- return world.params[TGS_VERSION_PARAMETER]
+ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
+ if(api)
+ return api.version
/world/TgsInstanceName()
var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
@@ -116,6 +131,11 @@
if(api)
api.ChatPrivateMessage(message, user)
+/world/TgsSecurityLevel()
+ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
+ if(api)
+ api.SecurityLevel()
+
/*
The MIT License
diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm
index 6af39a75df..fb2508059a 100644
--- a/code/modules/tgs/core/datum.dm
+++ b/code/modules/tgs/core/datum.dm
@@ -1,9 +1,14 @@
TGS_DEFINE_AND_SET_GLOBAL(tgs, null)
/datum/tgs_api
+ var/datum/tgs_version/version
+
+/datum/tgs_api/New(datum/tgs_version/version)
+ . = ..()
+ src.version = version
/datum/tgs_api/latest
- parent_type = /datum/tgs_api/v3210
+ parent_type = /datum/tgs_api/v4
TGS_PROTECT_DATUM(/datum/tgs_api)
@@ -46,6 +51,9 @@ TGS_PROTECT_DATUM(/datum/tgs_api)
/datum/tgs_api/proc/ChatPrivateMessage(message, admin_only)
return TGS_UNIMPLEMENTED
+/datum/tgs_api/proc/SecurityLevel()
+ return TGS_UNIMPLEMENTED
+
/*
The MIT License
diff --git a/code/modules/tgs/core/default_event_handler.dm b/code/modules/tgs/core/default_event_handler.dm
deleted file mode 100644
index 716715bb26..0000000000
--- a/code/modules/tgs/core/default_event_handler.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/datum/tgs_event_handler/tgs_default/HandleEvent(event_code)
- //TODO
- return
-
-/*
-The MIT License
-
-Copyright (c) 2017 Jordan Brown
-
-Permission is hereby granted, free of charge,
-to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to
-deal in the Software without restriction, including
-without limitation the rights to use, copy, modify,
-merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom
-the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm
new file mode 100644
index 0000000000..b97745611f
--- /dev/null
+++ b/code/modules/tgs/core/tgs_version.dm
@@ -0,0 +1,22 @@
+/datum/tgs_version/New(raw_parameter)
+ src.raw_parameter = raw_parameter
+ deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "")
+ var/list/version_bits = splittext(deprefixed_parameter, ".")
+
+ suite = text2num(version_bits[1])
+ if(version_bits.len > 1)
+ major = text2num(version_bits[2])
+ if(version_bits.len > 2)
+ minor = text2num(version_bits[3])
+ if(version_bits.len == 4)
+ patch = text2num(version_bits[4])
+
+/datum/tgs_version/proc/Valid(allow_wildcards = FALSE)
+ if(suite == null)
+ return FALSE
+ if(allow_wildcards)
+ return TRUE
+ return !Wildcard()
+
+/datum/tgs_version/Wildcard()
+ return major == null || minor == null || patch == null
diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm
index 7ca906c840..247f1fda5d 100644
--- a/code/modules/tgs/includes.dm
+++ b/code/modules/tgs/includes.dm
@@ -1,6 +1,10 @@
#include "core\_definitions.dm"
#include "core\core.dm"
#include "core\datum.dm"
-#include "core\default_event_handler.dm"
+#include "core\tgs_version.dm"
+#ifdef TGS_V3_API
#include "v3210\api.dm"
#include "v3210\commands.dm"
+#endif
+#include "v4\api.dm"
+#include "v4\commands.dm"
diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm
index 2a95f7861e..c536995b04 100644
--- a/code/modules/tgs/v3210/api.dm
+++ b/code/modules/tgs/v3210/api.dm
@@ -56,8 +56,9 @@
/datum/tgs_api/v3210/proc/file2list(filename)
return splittext(trim_left(trim_right(file2text(filename))), "\n")
-/datum/tgs_api/v3210/OnWorldNew(datum/tgs_event_handler/event_handler) //don't use event handling in this version
+/datum/tgs_api/v3210/OnWorldNew(datum/tgs_event_handler/event_handler, minimum_required_security_level) //don't use event handling in this version
. = FALSE
+
comms_key = world.params[SERVICE_WORLD_PARAM]
instance_name = world.params[SERVICE_INSTANCE_PARAM]
if(!instance_name)
@@ -170,6 +171,7 @@
var/datum/tgs_revision_information/ri = new
ri.commit = commit
ri.origin_commit = originmastercommit
+ return ri
/datum/tgs_api/v3210/EndProcess()
sleep(world.tick_lag) //flush the buffers
@@ -187,9 +189,12 @@
/datum/tgs_api/v3210/ChatTargetedBroadcast(message, admin_only)
ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message]")
-/datum/tgs_api/v3210/ChatPrivateMessage(message, admin_only)
+/datum/tgs_api/v3210/ChatPrivateMessage(message, datum/tgs_chat_user/user)
return TGS_UNIMPLEMENTED
+/datum/tgs_api/v3210/SecurityLevel()
+ return TGS_SECURITY_TRUSTED
+
#undef REBOOT_MODE_NORMAL
#undef REBOOT_MODE_HARD
#undef REBOOT_MODE_SHUTDOWN
diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm
new file mode 100644
index 0000000000..b61cddbeba
--- /dev/null
+++ b/code/modules/tgs/v4/api.dm
@@ -0,0 +1,342 @@
+#define TGS4_PARAM_INFO_JSON "tgs_json"
+
+#define TGS4_INTEROP_ACCESS_IDENTIFIER "tgs_tok"
+
+#define TGS4_RESPONSE_SUCCESS "tgs_succ"
+
+#define TGS4_TOPIC_CHANGE_PORT "tgs_port"
+#define TGS4_TOPIC_CHANGE_REBOOT_MODE "tgs_rmode"
+#define TGS4_TOPIC_CHAT_COMMAND "tgs_chat_comm"
+#define TGS4_TOPIC_EVENT "tgs_event"
+#define TGS4_TOPIC_INTEROP_RESPONSE "tgs_interop"
+
+#define TGS4_COMM_NEW_PORT "tgs_new_port"
+#define TGS4_COMM_VALIDATE "tgs_validate"
+#define TGS4_COMM_SERVER_PRIMED "tgs_prime"
+#define TGS4_COMM_WORLD_REBOOT "tgs_reboot"
+#define TGS4_COMM_END_PROCESS "tgs_kill"
+#define TGS4_COMM_CHAT "tgs_chat_send"
+
+#define TGS4_PARAMETER_COMMAND "tgs_com"
+#define TGS4_PARAMETER_DATA "tgs_data"
+
+#define TGS4_PORT_CRITFAIL_MESSAGE " Must exit to let watchdog reboot..."
+
+#define EXPORT_TIMEOUT_DS 200
+
+/datum/tgs_api/v4
+ var/access_identifier
+ var/instance_name
+ var/json_path
+ var/chat_channels_json_path
+ var/chat_commands_json_path
+ var/server_commands_json_path
+ var/reboot_mode = TGS_REBOOT_MODE_NORMAL
+ var/security_level
+
+ var/requesting_new_port = FALSE
+
+ var/list/intercepted_message_queue
+
+ var/list/custom_commands
+
+ var/list/cached_test_merges
+ var/datum/tgs_revision_information/cached_revision
+
+ var/datum/tgs_event_handler/event_handler
+
+ var/export_lock = FALSE
+ var/list/last_interop_response
+
+/datum/tgs_api/v4/ApiVersion()
+ return "4.0.0.0"
+
+/datum/tgs_api/v4/OnWorldNew(datum/tgs_event_handler/event_handler, minimum_required_security_level)
+ json_path = world.params[TGS4_PARAM_INFO_JSON]
+ if(!json_path)
+ TGS_ERROR_LOG("Missing [TGS4_PARAM_INFO_JSON] world parameter!")
+ return
+ var/json_file = file2text(json_path)
+ if(!json_file)
+ TGS_ERROR_LOG("Missing specified json file: [json_path]")
+ return
+ var/cached_json = json_decode(json_file)
+ if(!cached_json)
+ TGS_ERROR_LOG("Failed to decode info json: [json_file]")
+ return
+
+ access_identifier = cached_json["accessIdentifier"]
+ server_commands_json_path = cached_json["serverCommandsJson"]
+
+ if(cached_json["apiValidateOnly"])
+ TGS_INFO_LOG("Validating API and exiting...")
+ Export(TGS4_COMM_VALIDATE, list(TGS4_PARAMETER_DATA = "[minimum_required_security_level]"))
+ del(world)
+
+ security_level = cached_json["securityLevel"]
+ chat_channels_json_path = cached_json["chatChannelsJson"]
+ chat_commands_json_path = cached_json["chatCommandsJson"]
+ src.event_handler = event_handler
+ instance_name = cached_json["instanceName"]
+
+ ListCustomCommands()
+
+ var/list/revisionData = cached_json["revision"]
+ if(revisionData)
+ cached_revision = new
+ cached_revision.commit = revisionData["commitSha"]
+ cached_revision.origin_commit = revisionData["originCommitSha"]
+
+ cached_test_merges = list()
+ var/list/json = cached_json["testMerges"]
+ for(var/entry in json)
+ var/datum/tgs_revision_information/test_merge/tm = new
+ tm.time_merged = text2num(entry["timeMerged"])
+
+ var/list/revInfo = entry["revision"]
+ if(revInfo)
+ tm.commit = revInfo["commitSha"]
+ tm.origin_commit = revInfo["originCommitSha"]
+
+ tm.title = entry["titleAtMerge"]
+ tm.body = entry["bodyAtMerge"]
+ tm.url = entry["url"]
+ tm.author = entry["author"]
+ tm.number = entry["number"]
+ tm.pull_request_commit = entry["pullRequestRevision"]
+ tm.comment = entry["comment"]
+
+ cached_test_merges += tm
+
+ return TRUE
+
+/datum/tgs_api/v4/OnInitializationComplete()
+ Export(TGS4_COMM_SERVER_PRIMED)
+
+ var/tgs4_secret_sleep_offline_sauce = 24051994
+ var/old_sleep_offline = world.sleep_offline
+ world.sleep_offline = tgs4_secret_sleep_offline_sauce
+ sleep(1)
+ if(world.sleep_offline == tgs4_secret_sleep_offline_sauce) //if not someone changed it
+ world.sleep_offline = old_sleep_offline
+
+/datum/tgs_api/v4/OnTopic(T)
+ var/list/params = params2list(T)
+ var/their_sCK = params[TGS4_INTEROP_ACCESS_IDENTIFIER]
+ if(!their_sCK)
+ return FALSE //continue world/Topic
+
+ if(their_sCK != access_identifier)
+ return "Invalid comms key!";
+
+ var/command = params[TGS4_PARAMETER_COMMAND]
+ if(!command)
+ return "No command!"
+
+ . = TGS4_RESPONSE_SUCCESS
+
+ switch(command)
+ if(TGS4_TOPIC_CHAT_COMMAND)
+ var/result = HandleCustomCommand(params[TGS4_PARAMETER_DATA])
+ if(result == null)
+ result = "Error running chat command!"
+ return result
+ if(TGS4_TOPIC_EVENT)
+ intercepted_message_queue = list()
+ var/list/event_notification = json_decode(params[TGS4_PARAMETER_DATA])
+ var/list/event_parameters = event_notification["Parameters"]
+
+ var/list/event_call = list(event_notification["Type"])
+ if(event_parameters)
+ event_call += event_parameters
+
+ if(event_handler != null)
+ event_handler.HandleEvent(arglist(event_call))
+
+ . = json_encode(intercepted_message_queue)
+ intercepted_message_queue = null
+ return
+ if(TGS4_TOPIC_INTEROP_RESPONSE)
+ last_interop_response = json_decode(params[TGS4_PARAMETER_DATA])
+ return
+ if(TGS4_TOPIC_CHANGE_PORT)
+ var/new_port = text2num(params[TGS4_PARAMETER_DATA])
+ if (!(new_port > 0))
+ return "Invalid port: [new_port]"
+
+ //the topic still completes, miraculously
+ //I honestly didn't believe byond could do it
+ if(event_handler != null)
+ event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port)
+ if(!world.OpenPort(new_port))
+ return "Port change failed!"
+ return
+ if(TGS4_TOPIC_CHANGE_REBOOT_MODE)
+ var/new_reboot_mode = text2num(params[TGS4_PARAMETER_DATA])
+ if(event_handler != null)
+ event_handler.HandleEvent(TGS_EVENT_REBOOT_MODE_CHANGE, reboot_mode, new_reboot_mode)
+ reboot_mode = new_reboot_mode
+ return
+
+ return "Unknown command: [command]"
+
+/datum/tgs_api/v4/proc/Export(command, list/data, override_requesting_new_port = FALSE)
+ if(!data)
+ data = list()
+ data[TGS4_PARAMETER_COMMAND] = command
+ var/json = json_encode(data)
+
+ while(requesting_new_port && !override_requesting_new_port)
+ sleep(1)
+
+ //we need some port open at this point to facilitate return communication
+ if(!world.port)
+ requesting_new_port = TRUE
+ if(!world.OpenPort(0)) //open any port
+ TGS_ERROR_LOG("Unable to open random port to retrieve new port![TGS4_PORT_CRITFAIL_MESSAGE]")
+ del(world)
+
+ //request a new port
+ export_lock = FALSE
+ var/list/new_port_json = Export(TGS4_COMM_NEW_PORT, list(TGS4_PARAMETER_DATA = "[world.port]"), TRUE) //stringify this on purpose
+
+ if(!new_port_json)
+ TGS_ERROR_LOG("No new port response from server![TGS4_PORT_CRITFAIL_MESSAGE]")
+ del(world)
+
+ var/new_port = new_port_json[TGS4_PARAMETER_DATA]
+ if(!isnum(new_port) || new_port <= 0)
+ TGS_ERROR_LOG("Malformed new port json ([json_encode(new_port_json)])![TGS4_PORT_CRITFAIL_MESSAGE]")
+ del(world)
+
+ if(new_port != world.port && !world.OpenPort(new_port))
+ TGS_ERROR_LOG("Unable to open port [new_port]![TGS4_PORT_CRITFAIL_MESSAGE]")
+ del(world)
+ requesting_new_port = FALSE
+
+ while(export_lock)
+ sleep(1)
+ export_lock = TRUE
+
+ last_interop_response = null
+ fdel(server_commands_json_path)
+ text2file(json, server_commands_json_path)
+
+ for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I)
+ sleep(1)
+
+ if(!last_interop_response)
+ TGS_ERROR_LOG("Failed to get export result for: [json]")
+ else
+ . = last_interop_response
+
+ export_lock = FALSE
+
+/datum/tgs_api/v4/OnReboot()
+ var/list/result = Export(TGS4_COMM_WORLD_REBOOT)
+ if(!result)
+ return
+
+ //okay so the standard TGS4 proceedure is: right before rebooting change the port to whatever was sent to us in the above json's data parameter
+
+ var/port = result[TGS4_PARAMETER_DATA]
+ if(!isnum(port))
+ return //this is valid, server may just want use to reboot
+
+ if(port == 0)
+ //to byond 0 means any port and "none" means close vOv
+ port = "none"
+
+ if(!world.OpenPort(port))
+ TGS_ERROR_LOG("Unable to set port to [port]!")
+
+/datum/tgs_api/v4/InstanceName()
+ return instance_name
+
+/datum/tgs_api/v4/TestMerges()
+ return cached_test_merges
+
+/datum/tgs_api/v4/EndProcess()
+ Export(TGS4_COMM_END_PROCESS)
+
+/datum/tgs_api/v4/Revision()
+ return cached_revision
+
+/datum/tgs_api/v4/ChatBroadcast(message, list/channels)
+ var/list/ids
+ if(length(channels))
+ ids = list()
+ for(var/I in channels)
+ var/datum/tgs_chat_channel/channel = I
+ ids += channel.id
+ message = list("message" = message, "channelIds" = ids)
+ if(intercepted_message_queue)
+ intercepted_message_queue += list(message)
+ else
+ Export(TGS4_COMM_CHAT, message)
+
+/datum/tgs_api/v4/ChatTargetedBroadcast(message, admin_only)
+ var/list/channels = list()
+ for(var/I in ChatChannelInfo())
+ var/datum/tgs_chat_channel/channel = I
+ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only)))
+ channels += channel.id
+ message = list("message" = message, "channelIds" = channels)
+ if(intercepted_message_queue)
+ intercepted_message_queue += list(message)
+ else
+ Export(TGS4_COMM_CHAT, message)
+
+/datum/tgs_api/v4/ChatPrivateMessage(message, datum/tgs_chat_user/user)
+ message = list("message" = message, "channelIds" = list(user.channel.id))
+ if(intercepted_message_queue)
+ intercepted_message_queue += list(message)
+ else
+ Export(TGS4_COMM_CHAT, message)
+
+/datum/tgs_api/v4/ChatChannelInfo()
+ . = list()
+ //no caching cause tgs may change this
+ var/list/json = json_decode(file2text(chat_channels_json_path))
+ for(var/I in json)
+ . += DecodeChannel(I)
+
+/datum/tgs_api/v4/proc/DecodeChannel(channel_json)
+ var/datum/tgs_chat_channel/channel = new
+ channel.id = channel_json["id"]
+ channel.friendly_name = channel_json["friendlyName"]
+ channel.connection_name = channel_json["connectionName"]
+ channel.is_admin_channel = channel_json["isAdminChannel"]
+ channel.is_private_channel = channel_json["isPrivateChannel"]
+ channel.custom_tag = channel_json["tag"]
+ return channel
+
+/datum/tgs_api/v4/SecurityLevel()
+ return security_level
+
+/*
+The MIT License
+
+Copyright (c) 2017 Jordan Brown
+
+Permission is hereby granted, free of charge,
+to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to
+deal in the Software without restriction, including
+without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom
+the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
diff --git a/code/modules/tgs/v4/commands.dm b/code/modules/tgs/v4/commands.dm
new file mode 100644
index 0000000000..af21a86fb6
--- /dev/null
+++ b/code/modules/tgs/v4/commands.dm
@@ -0,0 +1,69 @@
+/datum/tgs_api/v4/proc/ListCustomCommands()
+ var/results = list()
+ custom_commands = list()
+ for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command)
+ var/datum/tgs_chat_command/stc = new I
+ var/command_name = stc.name
+ if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\""))
+ TGS_ERROR_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!")
+ continue
+
+ if(results[command_name])
+ var/datum/other = custom_commands[command_name]
+ TGS_ERROR_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!")
+ continue
+ results += list(list("name" = command_name, "help_text" = stc.help_text, "admin_only" = stc.admin_only))
+ custom_commands[command_name] = stc
+
+ var/commands_file = chat_commands_json_path
+ if(!commands_file)
+ return
+ text2file(json_encode(results), commands_file)
+
+/datum/tgs_api/v4/proc/HandleCustomCommand(command_json)
+ var/list/data = json_decode(command_json)
+ var/command = data["command"]
+ var/user = data["user"]
+ var/params = data["params"]
+
+ var/datum/tgs_chat_user/u = new
+ u.id = user["id"]
+ u.friendly_name = user["friendlyName"]
+ u.mention = user["mention"]
+ u.channel = DecodeChannel(user["channel"])
+
+ var/datum/tgs_chat_command/sc = custom_commands[command]
+ if(sc)
+ var/result = sc.Run(u, params)
+ if(result == null)
+ result = ""
+ return result
+ return "Unknown command: [command]!"
+
+/*
+
+The MIT License
+
+Copyright (c) 2017 Jordan Brown
+
+Permission is hereby granted, free of charge,
+to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to
+deal in the Software without restriction, including
+without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom
+the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm
index fc30d171fb..959f096d05 100644
--- a/code/modules/tgui/states.dm
+++ b/code/modules/tgui/states.dm
@@ -103,7 +103,7 @@
return UI_CLOSE
var/dist = get_dist(src_object, src)
- if(dist <= 1) // Open and interact if 1-0 tiles away.
+ if(dist <= 1 || src_object.hasSiliconAccessInArea(src)) // Open and interact if 1-0 tiles away.
return UI_INTERACTIVE
else if(dist <= 2) // View only if 2-3 tiles away.
return UI_UPDATE
diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm
index 2bcfb40c45..9c09a7334a 100644
--- a/code/modules/uplink/uplink_devices.dm
+++ b/code/modules/uplink/uplink_devices.dm
@@ -57,3 +57,22 @@
/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20)
. = ..()
AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount)
+
+/obj/item/uplink/debug
+ name = "debug uplink"
+
+/obj/item/uplink/debug/Initialize(mapload, owner, tc_amount = 9000)
+ . = ..()
+ var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
+ hidden_uplink.name = "debug uplink"
+ hidden_uplink.debug = TRUE
+
+/obj/item/uplink/nuclear/debug
+ name = "debug nuclear uplink"
+
+/obj/item/uplink/nuclear/debug/Initialize(mapload, owner, tc_amount = 9000)
+ . = ..()
+ var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
+ hidden_uplink.set_gamemode(/datum/game_mode/nuclear)
+ hidden_uplink.name = "debug nuclear uplink"
+ hidden_uplink.debug = TRUE
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index b75f212ba9..52f6efd3df 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -157,6 +157,7 @@
category = "Role-Restricted"
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
surplus = 0
+ cant_discount = TRUE
/datum/uplink_item/badass
category = "(Pointless) Badassery"
@@ -164,4 +165,4 @@
//Discounts (dynamically filled above)
/datum/uplink_item/discounts
- category = "Discounted Gear"
\ No newline at end of file
+ category = "Discounted Gear"
diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm
index 5e2c09ec13..fcbe0fb9a6 100644
--- a/code/modules/uplink/uplink_items/uplink_clothing.dm
+++ b/code/modules/uplink/uplink_items/uplink_clothing.dm
@@ -78,3 +78,9 @@
cost = 30
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
exclude_modes = list()
+
+/datum/uplink_item/suits/thiefgloves
+ name = "Thieving Gloves"
+ desc = "A pair of gloves that are insulated and frictionless, allowing you to steal easily from anyone you see."
+ item = /obj/item/clothing/gloves/thief
+ cost = 4
\ No newline at end of file
diff --git a/code/modules/uplink/uplink_items/uplink_implants.dm b/code/modules/uplink/uplink_items/uplink_implants.dm
index d8a31a9b9c..02b8b1e01d 100644
--- a/code/modules/uplink/uplink_items/uplink_implants.dm
+++ b/code/modules/uplink/uplink_items/uplink_implants.dm
@@ -29,6 +29,22 @@
item = /obj/item/storage/box/syndie_kit/imp_freedom
cost = 5
+/datum/uplink_item/implants/hijack
+ name = "Hijack Implant"
+ desc = "An implant that will let you hack into the APCs on station, allowing you to control them at will and the machinery within those rooms."
+ item = /obj/item/implanter/hijack
+ cost = 14 //really overkill, 14 tc, can still get caught in a room you haven't hijacked and you're fucked.
+ surplus = 0 //nope not having hijack implants with surplus crates nope nope nope nope
+ restricted = TRUE
+
+/datum/uplink_item/implants/radio
+ name = "Internal Syndicate Radio Implant"
+ desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \
+ Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection."
+ item = /obj/item/storage/box/syndie_kit/imp_radio
+ cost = 4
+ restricted = TRUE
+
/datum/uplink_item/implants/microbomb
name = "Microbomb Implant"
desc = "An implant injected into the body, and later activated either manually or automatically upon death. \
@@ -47,14 +63,6 @@
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
restricted = TRUE
-/datum/uplink_item/implants/radio
- name = "Internal Syndicate Radio Implant"
- desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \
- Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection."
- item = /obj/item/storage/box/syndie_kit/imp_radio
- cost = 4
- restricted = TRUE
-
/datum/uplink_item/implants/reviver
name = "Reviver Implant"
desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon."
diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm
index 0d0dd40b36..5dafd3935c 100644
--- a/code/modules/vending/assist.dm
+++ b/code/modules/vending/assist.dm
@@ -17,4 +17,8 @@
/obj/item/beacon = 2)
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/assist
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/assist
+ icon_state = "refill_engi"
\ No newline at end of file
diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm
index 8b9c8e2e01..35b1a1da7a 100644
--- a/code/modules/vending/cartridge.dm
+++ b/code/modules/vending/cartridge.dm
@@ -14,4 +14,8 @@
/obj/item/cartridge/captain = 3,
/obj/item/cartridge/quartermaster = 10)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/cart
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/cart
+ icon_state = "refill_pda"
diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm
index 9ba8c53f6c..be74cc675b 100644
--- a/code/modules/vending/drinnerware.dm
+++ b/code/modules/vending/drinnerware.dm
@@ -27,4 +27,8 @@
/obj/item/reagent_containers/food/condiment/enzyme = 1,
/obj/item/reagent_containers/glass/bottle/cryoxadone = 2) // Bartender can literally make this with upgraded parts, or it gets stolen from medical.
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/dinnerware
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/dinnerware
+ icon_state = "refill_cook"
\ No newline at end of file
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index ad65b5311f..15da7cab15 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -28,4 +28,8 @@
/obj/item/rcd_ammo/large = 5
)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/engivend
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/engivend
+ icon_state = "refill_engi"
\ No newline at end of file
diff --git a/code/modules/vending/kinkmate.dm b/code/modules/vending/kinkmate.dm
index f840f391fa..39d5db8de8 100644
--- a/code/modules/vending/kinkmate.dm
+++ b/code/modules/vending/kinkmate.dm
@@ -1,7 +1,6 @@
/obj/machinery/vending/kink
name = "KinkMate"
desc = "A vending machine for all your unmentionable desires."
- icon = 'icons/obj/citvending.dmi'
icon_state = "kink"
circuit = /obj/item/circuitboard/machine/kinkmate
product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
@@ -44,5 +43,4 @@
/obj/item/vending_refill/kink
machine_name = "KinkMate"
- icon = 'modular_citadel/icons/vending_restock.dmi'
icon_state = "refill_kink"
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index 03241c4a86..37ce00069c 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -55,4 +55,8 @@
/obj/item/seeds/random = 2)
premium = list(/obj/item/reagent_containers/spray/waterflower = 1)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/hydroseeds
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/hydroseeds
+ icon_state = "refill_hydro"
diff --git a/code/modules/vending/nutrimax.dm b/code/modules/vending/nutrimax.dm
index 392eecfc22..42b7848ac1 100644
--- a/code/modules/vending/nutrimax.dm
+++ b/code/modules/vending/nutrimax.dm
@@ -17,4 +17,8 @@
contraband = list(/obj/item/reagent_containers/glass/bottle/ammonia = 10,
/obj/item/reagent_containers/glass/bottle/diethylamine = 5)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/hydronutrients
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/hydronutrients
+ icon_state = "refill_hydro"
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index 6cf8136c50..666071e254 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -36,4 +36,4 @@
F.update_brightness()
/obj/item/vending_refill/security
- icon_state = "snackorange"
+ icon_state = "refill_games"
diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm
index efb0905f6b..9dda649b24 100644
--- a/code/modules/vending/snack.dm
+++ b/code/modules/vending/snack.dm
@@ -4,22 +4,25 @@
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
icon_state = "snack"
- products = list(/obj/item/reagent_containers/food/snacks/candy = 6,
- /obj/item/reagent_containers/food/drinks/dry_ramen = 6,
- /obj/item/reagent_containers/food/snacks/chips = 6,
- /obj/item/reagent_containers/food/snacks/sosjerky = 6,
- /obj/item/reagent_containers/food/snacks/no_raisin = 6,
- /obj/item/reagent_containers/food/snacks/spacetwinkie = 6,
- /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6)
+ products = list(/obj/item/reagent_containers/food/snacks/candy = 5,
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 5,
+ /obj/item/reagent_containers/food/drinks/dry_ramen = 5,
+ /obj/item/reagent_containers/food/snacks/chips = 5,
+ /obj/item/reagent_containers/food/snacks/sosjerky = 5,
+ /obj/item/reagent_containers/food/snacks/no_raisin = 5,
+ /obj/item/reagent_containers/food/snacks/spacetwinkie = 5,
+ /obj/item/reagent_containers/food/snacks/cheesiehonkers = 5,
+ /obj/item/reagent_containers/food/snacks/cornchips = 5)
contraband = list(
- /obj/item/reagent_containers/food/snacks/cracker = 12,
- /obj/item/reagent_containers/food/snacks/beans = 2,
- /obj/item/reagent_containers/food/snacks/honeybar = 6,
- /obj/item/reagent_containers/food/snacks/syndicake = 6)
+ /obj/item/reagent_containers/food/snacks/cracker = 10,
+ /obj/item/reagent_containers/food/snacks/honeybar = 5,
+ /obj/item/reagent_containers/food/snacks/syndicake = 5,
+ /obj/item/reagent_containers/food/snacks/beans = 2)
premium = list(
/obj/item/reagent_containers/food/snacks/lollipop = 2,
/obj/item/reagent_containers/food/snacks/spiderlollipop = 2,
/obj/item/reagent_containers/food/snacks/chococoin = 1,
+ /obj/item/storage/box/marshmallow = 1,
/obj/item/storage/box/donkpockets = 2)
refill_canister = /obj/item/vending_refill/snack
diff --git a/code/modules/vending/sovietvend.dm b/code/modules/vending/sovietvend.dm
index 5157f68410..c62cf53612 100644
--- a/code/modules/vending/sovietvend.dm
+++ b/code/modules/vending/sovietvend.dm
@@ -1,7 +1,6 @@
/obj/machinery/vending/sovietvend
name = "KomradeVendtink"
desc = "Rodina-mat' zovyot!"
- icon = 'icons/obj/citvending.dmi'
icon_state = "soviet"
vend_reply = "The fascist and capitalist svin'ya shall fall, komrade!"
product_slogans = "Quality worth waiting in line for!; Get Hammer and Sickled!; Sosvietsky soyuz above all!; With capitalist pigsky, you would have paid a fortunetink! ; Craftink in Motherland herself!"
diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm
index 95838bbadd..9783607a21 100644
--- a/code/modules/vending/sustenance.dm
+++ b/code/modules/vending/sustenance.dm
@@ -12,4 +12,8 @@
/obj/item/tank/internals/emergency_oxygen = 6,
/obj/item/clothing/mask/breath = 6)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
+ refill_canister = /obj/item/vending_refill/sustenance
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/sustenance
+ icon_state = "refill_cook"
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index cd643e4220..5d2e08734e 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -20,7 +20,6 @@
/obj/item/clothing/under/rank/security/grey = 5,
/obj/item/clothing/under/pants/khaki = 5)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 5,
- /obj/item/clothing/suit/security/officer = 5,
/obj/item/clothing/head/beret/sec/navyofficer = 5)
refill_canister = /obj/item/vending_refill/wardrobe/sec_wardrobe
@@ -400,3 +399,35 @@
/obj/item/vending_refill/wardrobe/viro_wardrobe
machine_name = "ViroDrobe"
+
+/obj/machinery/vending/wardrobe/cap_wardrobe
+ name = "Captain's Wardrobe"
+ desc = "The latest and greatest in Nanotrasen fashion for your great leader."
+ icon_state = "capsdrobe"
+ icon_deny = "capsdrobe-deny"
+ product_ads = "Only the greatest for a commander such as ours."
+ req_access = list(ACCESS_CAPTAIN)
+ vend_reply = "A wonderful day to you, great leader."
+ products = list(/obj/item/clothing/suit/hooded/wintercoat/captain = 1,
+ /obj/item/storage/backpack/captain = 1,
+ /obj/item/storage/backpack/satchel/cap = 1,
+ /obj/item/storage/backpack/duffelbag/captain = 1,
+ /obj/item/clothing/neck/cloak/cap = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 2,
+ /obj/item/clothing/under/rank/captain = 1,
+ /obj/item/clothing/under/rank/captain/skirt = 1,
+ /obj/item/clothing/head/caphat = 1,
+ /obj/item/clothing/head/caphat/parade = 1,
+ /obj/item/clothing/head/caphat/beret = 1,
+ /obj/item/clothing/head/caphat/beret/white = 1,
+ /obj/item/clothing/under/captainparade = 1,
+ /obj/item/clothing/suit/captunic = 1,
+ /obj/item/clothing/under/rank/captain/femformal = 1,
+ /obj/item/clothing/glasses/sunglasses/gar/supergar = 1,
+ /obj/item/clothing/gloves/color/captain = 1)
+ refill_canister = /obj/item/vending_refill/wardrobe/cap_wardrobe
+
+/obj/item/vending_refill/wardrobe/cap_wardrobe
+ machine_name = "Captain's Wardrobe"
+ icon_state = "refill_caps"
+
\ No newline at end of file
diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm
index 2a8d5ef733..c027cea6e5 100644
--- a/code/modules/vending/youtool.dm
+++ b/code/modules/vending/youtool.dm
@@ -19,4 +19,8 @@
premium = list(/obj/item/clothing/gloves/color/yellow = 2,
/obj/item/weldingtool/hugetank = 2)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
+ refill_canister = /obj/item/vending_refill/tool
resistance_flags = FIRE_PROOF
+
+/obj/item/vending_refill/tool
+ icon_state = "refill_engi"
\ No newline at end of file
diff --git a/code/modules/vore/eating/belly_obj.dm b/code/modules/vore/eating/belly_obj.dm
index f88f6bd6e8..460ea74225 100644
--- a/code/modules/vore/eating/belly_obj.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -533,9 +533,6 @@
//Yes, it's ""safe"" to drop items here
/obj/belly/AllowDrop()
return TRUE
-/*
-/obj/belly/onDropInto(var/atom/movable/AM)
- return null */
//Handle a mob struggling
// Called from /mob/living/carbon/relaymove()
diff --git a/code/modules/vore/eating/digest_act.dm b/code/modules/vore/eating/digest_act.dm
index ce67a3d296..c0c9423d10 100644
--- a/code/modules/vore/eating/digest_act.dm
+++ b/code/modules/vore/eating/digest_act.dm
@@ -71,14 +71,6 @@
/////////////
// Some special treatment
/////////////
-/*
-//PDAs need to lose their ID to not take it with them, so we can get a digested ID
-/obj/item/pda/digest_act(var/atom/movable/item_storage = null)
- if(id)
- id = null
-
- . = ..()
-*/
/obj/item/reagent_containers/food/digest_act(var/atom/movable/item_storage = null)
if(isbelly(item_storage))
@@ -92,15 +84,6 @@
. = ..()
-/*
-/obj/item/holder/digest_act(var/atom/movable/item_storage = null)
- for(var/mob/living/M in contents)
- if(item_storage)
- M.forceMove(item_storage)
- held_mob = null
-
- . = ..() */
-
/obj/item/organ/digest_act(var/atom/movable/item_storage = null)
if((. = ..()))
. += 70 //Organs give a little more
diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm
index 4b50ade7e3..bf41c46332 100644
--- a/code/modules/vore/eating/living.dm
+++ b/code/modules/vore/eating/living.dm
@@ -404,10 +404,4 @@
taste_message += "they haven't bothered to set their flavor text"
else
taste_message += "a plain old normal [src]"
-
-/* if(ishuman(src))
- var/mob/living/carbon/human/H = src
- if(H.touching.reagent_list.len) //Just the first one otherwise I'll go insane.
- var/datum/reagent/R = H.touching.reagent_list[1]
- taste_message += " You also get the flavor of [R.taste_description] from something on them"*/
return taste_message
diff --git a/code/modules/vore/eating/voreitems.dm b/code/modules/vore/eating/voreitems.dm
index 4e6bdaa1e0..3ec4ba1956 100644
--- a/code/modules/vore/eating/voreitems.dm
+++ b/code/modules/vore/eating/voreitems.dm
@@ -30,33 +30,3 @@
H.visible_message("[H] contracts strangely, spewing out contents on the floor! ", \
"You spew out everything inside you on the floor! ")
return BULLET_ACT_HIT
-
-
-////////////////////////// Anti-Noms Drugs //////////////////////////
-/*
-/datum/reagent/medicine/ickypak
- name = "Ickypak"
- description = "A foul-smelling green liquid, for inducing muscle contractions to expel accidentally ingested things."
- reagent_state = LIQUID
- color = "#0E900E"
- metabolization_rate = 0.25 * REAGENTS_METABOLISM
-
-/datum/reagent/medicine/ickypak/on_mob_life(var/mob/living/M, method=INGEST)
- if(prob(10))
- M.visible_message("[M] retches! ", \
- "You don't feel good... ")
- for(var/I in M.vore_organs)
- var/datum/belly/B = M.vore_organs[I]
- for(var/atom/movable/A in B.internal_contents)
- if(prob(55))
- playsound(M, 'sound/effects/splat.ogg', 50, 1)
- B.release_specific_contents(A)
- M.visible_message("[M] contracts strangely, spewing out something! ", \
- "You spew out something from inside you! ")
- return ..()
-
-/datum/chemical_reaction/ickypak
- name = "Ickypak"
- id = /datum/reagent/medicine/ickypak
- results = list(/datum/reagent/medicine/ickypak = 2)
- required_reagents = list(/datum/reagent/chlorine = 2 , /datum/reagent/oil = 1) */
\ No newline at end of file
diff --git a/code/modules/vore/resizing/grav_pull_vr.dm b/code/modules/vore/resizing/grav_pull_vr.dm
deleted file mode 100644
index 921d1ab2b9..0000000000
--- a/code/modules/vore/resizing/grav_pull_vr.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-//
-// Gravity Pull effect which draws in movable objects to its center.
-// In this case, "number" refers to the range. directions is ignored.
-//
-/datum/effect/effect/system/grav_pull
- var/pull_radius = 3
- var/pull_anchored = 0
- var/break_windows = 0
-
-/datum/effect/effect/system/grav_pull/set_up(range, num, loca)
- pull_radius = range
- number = num
- if(istype(loca, /turf/))
- location = loca
- else
- location = get_turf(loca)
-
-/datum/effect/effect/system/grav_pull/start()
- spawn(0)
- if(holder)
- src.location = get_turf(holder)
- for(var/i=0, i < number, i++)
- do_pull()
- sleep(25)
-
-/datum/effect/effect/system/grav_pull/proc/do_pull()
- //following is adapted from supermatter and singulo code
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 1
-
- // Let's just make this one loop.
- for(var/atom/X in orange(pull_radius, location))
- // Movable atoms only
- if(istype(X, /atom/movable))
- if(istype(X, /obj/effect/overlay)) continue
- if(X && !istype(X, /mob/living/carbon/human))
- if(break_windows && istype(X, /obj/structure/window)) //shatter windows
- var/obj/structure/window/W = X
- W.ex_act(2.0)
-
- if(istype(X, /obj))
- var/obj/O = X
- if(O.anchored)
- if (!pull_anchored) continue // Don't pull anchored stuff unless configured
- step_towards(X, location) // step just once if anchored
- continue
-
- step_towards(X, location) // Step twice
- step_towards(X, location)
-
- else if(istype(X,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = X
- if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
- var/obj/item/clothing/shoes/magboots/M = H.shoes
- if(M.magpulse)
- step_towards(H, location) //step just once with magboots
- continue
- step_towards(H, location) //step twice
- step_towards(H, location)
-
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
- return
diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/code/modules/vore/resizing/holder_micro_vr.dm
deleted file mode 100644
index 1f1aacf98d..0000000000
--- a/code/modules/vore/resizing/holder_micro_vr.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-// Micro Holders - Extends /obj/item/holder
-
-/obj/item/holder/micro
- name = "micro"
- desc = "Another crewmember, small enough to fit in your hand."
- icon_state = "micro"
- slot_flags = SLOT_FEET | SLOT_HEAD | SLOT_ID
- w_class = 2
- item_icons = null // Override value from parent. We don't have magic sprites.
- pixel_y = 0 // Override value from parent.
-
-/obj/item/holder/micro/examine(var/mob/user)
- . = list()
- for(var/mob/living/M in contents)
- . += M.examine(user)
-
-/obj/item/holder/MouseDrop(mob/M as mob)
- ..()
- if(M != usr) return
- if(usr == src) return
- if(!Adjacent(usr)) return
- if(istype(M,/mob/living/silicon/ai)) return
- for(var/mob/living/carbon/human/O in contents)
- O.show_inv(usr)
-
-/obj/item/holder/micro/attack_self(var/mob/living/user)
- for(var/mob/living/carbon/human/M in contents)
- M.help_shake_act(user)
-
-/obj/item/holder/micro/update_state()
- // If any items have been dropped by contained mob, drop them to floor.
- for(var/obj/O in contents)
- O.forceMove(get_turf(src))
- ..()
diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm
deleted file mode 100644
index 052be48c2d..0000000000
--- a/code/modules/vore/resizing/resize_vr.dm
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-//these aren't defines so they can stay in this file
-GLOBAL_VAR_CONST(SIZESCALE_HUGE, 2)
-GLOBAL_VAR_CONST(SIZESCALE_BIG, 1.5)
-GLOBAL_VAR_CONST(SIZESCALE_NORMAL, 1)
-GLOBAL_VAR_CONST(SIZESCALE_SMALL, 0.85)
-GLOBAL_VAR_CONST(SIZESCALE_TINY, 0.60)
-
-GLOBAL_VAR_CONST(SIZESCALE_A_HUGEBIG, (GLOB.SIZESCALE_HUGE + GLOB.SIZESCALE_BIG) / 2)
-GLOBAL_VAR_CONST(SIZESCALE_A_BIGNORMAL, (GLOB.SIZESCALE_BIG + GLOB.SIZESCALE_NORMAL) / 2)
-GLOBAL_VAR_CONST(SIZESCALE_A_NORMALSMALL,(GLOB.SIZESCALE_NORMAL + GLOB.SIZESCALE_SMALL) / 2)
-GLOBAL_VAR_CONST(SIZESCALE_A_SMALLTINY,(GLOB.SIZESCALE_SMALL + GLOB.SIZESCALE_TINY) / 2)
-*/
-// Adding needed defines to /mob/living
-// Note: Polaris had this on /mob/living/carbon/human We need it higher up for animals and stuff.
-/mob/living
- var/size_multiplier = 1 //multiplier for the mob's icon size
-
-// Define holder_type on types we want to be scoop-able
-//mob/living/carbon/human
-// holder_type = /obj/item/holder/micro
-
-/**
- * Scale up the size of a mob's icon by the size_multiplier.
- * NOTE: mob/living/carbon/human/update_transform() has a more complicated system and
- * is already applying this transform. BUT, it does not call ..()
- * as long as that is true, we should be fine. If that changes we need to
- * re-evaluate.
- */
-/mob/living/update_transform()
- ASSERT(!iscarbon(src))
- var/matrix/M = matrix()
- M.Scale(size_multiplier)
- M.Translate(0, 16*(size_multiplier-1))
- src.transform = M
-
-/**
- * Get the effective size of a mob.
- * Currently this is based only on size_multiplier for micro/macro stuff,
- * but in the future we may also incorporate the "mob_size", so that
- * a macro mouse is still only effectively "normal" or a micro dragon is still large etc.
- */
-/mob/living/proc/get_effective_size()
- return src.size_multiplier
-
-/**
- * Resizes the mob immediately to the desired mod, animating it growing/shrinking.
- * It can be used by anything that calls it.
- */
-/mob/living/proc/sizescale(var/new_size)
- var/matrix/sizescale = matrix() // Defines the matrix to change the player's size
- sizescale.Scale(new_size) //Change the size of the matrix
-
- if(new_size >= SIZESCALE_NORMAL)
- sizescale.Translate(0, -1 * (1 - new_size) * 16) //Move the player up in the tile so their feet align with the bottom
-
- animate(src, transform = sizescale, time = 5) //Animate the player resizing
- size_multiplier = new_size //Change size_multiplier so that other items can interact with them
-
-/*
- * Verb proc for a command that lets players change their size OOCly.
- * Ace was here! Redid this a little so we'd use math for shrinking characters. This is the old code.
-
-/mob/living/proc/set_size()
- set name = "Set Character Size"
- set category = "Vore"
- var/nagmessage = "DO NOT ABUSE THESE COMMANDS. They are not here for you to play with. \
- We were originally going to remove them but kept them for popular demand. \
- Do not abuse their existence outside of ERP scenes where they apply, \
- or reverting OOCly unwanted changes like someone lolshooting the crew with a shrink ray. -Ace"
-
- var/size_name = input(nagmessage, "Pick a Size") in player_sizes_list
- if (size_name && player_sizes_list[size_name])
- src.sizescale(player_sizes_list[size_name])
- message_admins("[key_name(src)] used the sizescale command in-game to be [size_name]. \
- ([src ? "JMP " : "null"])")
-
-/** Add the set_size() proc to usable verbs. */
-/hook/living_new/proc/sizescale_setup(mob/living/M)
- M.verbs += /mob/living/proc/set_size
- return 1
-
-
- * Attempt to scoop up this mob up into M's hands, if the size difference is large enough.
- * @return false if normal code should continue, 1 to prevent normal code.
-
-/mob/living/proc/attempt_to_scoop(var/mob/living/carbon/human/M)
- if(!istype(M))
- return 0;
- if(M.buckled)
- usr << "You have to unbuckle \the [M] before you pick them up. "
- return 0
- if(M.get_effective_size() - src.get_effective_size() >= 0.75)
- var/obj/item/holder/m_holder = get_scooped(M)
- if (m_holder)
- return 1
- else
- return 0; // Unable to scoop, let other code run
-*/
-/*
- * Handle bumping into someone with helping intent.
- * Called from /mob/living/Bump() in the 'brohugs all around' section.
- * @return false if normal code should continue, 1 to prevent normal code.
- * // TODO - can the now_pushing = 0 be moved up? What does it do anyway?
- */
-/mob/living/proc/handle_micro_bump_helping(var/mob/living/tmob)
- if(src.get_effective_size() <= SIZESCALE_A_SMALLTINY && tmob.get_effective_size() <= SIZESCALE_A_SMALLTINY)
- // Both small! Go ahead and
- now_pushing = 0
- src.forceMove(tmob.loc)
- return 1
- if(abs(src.get_effective_size() - tmob.get_effective_size()) >= 0.20)
- now_pushing = 0
- src.forceMove(tmob.loc)
-
- if(src.get_effective_size() > tmob.get_effective_size())
-/* var/mob/living/carbon/human/tmob = src
- if(istype(tmob) && istype(tmob.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You carefully slither around [tmob]."
- M << "[src]'s huge tail slithers past beside you!"
- else
-*/
- src.forceMove(tmob.loc)
- src << "You carefully step over [tmob]."
- tmob << "[src] steps over you carefully!"
- if(tmob.get_effective_size() > src.get_effective_size())
-/* var/mob/living/carbon/human/M = M
- if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You jump over [M]'s thick tail."
- M << "[src] bounds over your tail."
- else
-*/
- src.forceMove(tmob.loc)
- src << "You run between [tmob]'s legs."
- tmob << "[src] runs between your legs."
- return 1
-
-/**
- * Handle bumping into someone without mutual help intent.
- * Called from /mob/living/Bump()
- * NW was here, adding even more options for stomping!
- *
- * @return false if normal code should continue, 1 to prevent normal code.
- */
-/mob/living/proc/handle_micro_bump_other(var/mob/living/tmob)
- ASSERT(isliving(tmob)) // Baby don't hurt me
-
- if(src.a_intent == "disarm" && src.canmove && !src.buckled)
- // If bigger than them by at least 0.75, move onto them and print message.
- if((src.get_effective_size() - tmob.get_effective_size()) >= 0.20)
- now_pushing = 0
- src.forceMove(tmob.loc)
- tmob.Stun(4)
-/*
- var/mob/living/carbon/human/H = src
- if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You carefully squish [tmob] under your tail!"
- tmob << "[src] pins you under their tail!"
- else
-*/
- src << "You pin [tmob] beneath your foot!"
- tmob << "[src] pins you beneath their foot!"
- return 1
-
- if(src.a_intent == "harm" && src.canmove && !src.buckled)
- if((src.get_effective_size() - tmob.get_effective_size()) >= 0.20)
- now_pushing = 0
- src.forceMove(tmob.loc)
- tmob.adjustStaminaLoss(35)
- tmob.adjustBruteLoss(5)
-/* var/mob/living/carbon/human/M = src
- if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You steamroller over [tmob] with your heavy tail!"
- tmob << "[src] ploughs you down mercilessly with their heavy tail!"
- else
-*/
- src << "You bring your foot down heavily upon [tmob]!"
- tmob << "[src] steps carelessly on your body!"
- return 1
-
- // until I figure out grabbing micros with the godawful pull code...
- if(src.a_intent == "grab" && src.canmove && !src.buckled)
- if((src.get_effective_size() - tmob.get_effective_size()) >= 0.20)
- now_pushing = 0
- tmob.adjustStaminaLoss(15)
- src.forceMove(tmob.loc)
- src << "You press [tmob] beneath your foot!"
- tmob << "[src] presses you beneath their foot!"
-/*
- var/mob/living/carbon/human/M = src
- if(istype(M) && !M.shoes)
- // User is a human (capable of scooping) and not wearing shoes! Scoop into foot slot!
- equip_to_slot_if_possible(tmob.get_scooped(M), slot_shoes, 0, 1)
- if(istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You wrap up [tmob] with your powerful tail!"
- tmob << "[src] binds you with their powerful tail!"
- else
- src << "You clench your toes around [tmob]'s body!"
- tmob << "[src] grabs your body with their toes!"
- else if(istype(M) && istype(M.tail_style, /datum/sprite_accessory/tail/taur/naga))
- src << "You carefully squish [tmob] under your tail!"
- tmob << "[src] pins you under their tail!"
- else
- src << "You pin [tmob] beneath your foot!"
- tmob << "[src] pins you beneath their foot!"
- return 1
-*/
diff --git a/code/modules/vore/resizing/sizechemicals.dm b/code/modules/vore/resizing/sizechemicals.dm
deleted file mode 100644
index 612e8c9fde..0000000000
--- a/code/modules/vore/resizing/sizechemicals.dm
+++ /dev/null
@@ -1,110 +0,0 @@
-
-////////////////////////////
-/// shrinking serum ///
-////////////////////////////
-
-/datum/reagent/medicine/macrocillin
- name = "Macrocillin"
- description = "Glowing yellow liquid."
- reagent_state = LIQUID
- color = "#FFFF00" // rgb: 255, 255, 0
- overdose_threshold = 20
-
-/datum/reagent/medicine/macrocillin/on_mob_life(mob/living/M, method=INGEST)
- for(var/size in list(SIZESCALE_SMALL, SIZESCALE_NORMAL, SIZESCALE_BIG, SIZESCALE_HUGE))
- if(M.size_multiplier < size)
- M.sizescale(size)
- M << "You grow! "
- break
- if(M.reagents.has_reagent(/datum/reagent/medicine/macrocillin))
- M.reagents.remove_reagent(/datum/reagent/medicine/macrocillin, 20)
- ..()
-
-/datum/reagent/medicine/microcillin
- name = "Microcillin"
- description = "Murky purple liquid."
- reagent_state = LIQUID
- color = "#800080"
- overdose_threshold = 20
-
-/datum/reagent/microcillin/on_mob_life(mob/living/M, method=INGEST)
- for(var/size in list(SIZESCALE_BIG, SIZESCALE_NORMAL, SIZESCALE_SMALL, SIZESCALE_TINY))
- if(M.size_multiplier > size)
- M.sizescale(size)
- M << "You shrink! "
- break;
- if(M.reagents.has_reagent(/datum/reagent/medicine/microcillin))
- M.reagents.remove_reagent(/datum/reagent/medicine/microcillin, 20)
-
- ..()
-
-/datum/reagent/medicine/normalcillin
- name = "Normalcillin"
- description = "Translucent cyan liquid."
- reagent_state = LIQUID
- color = "#00FFFF"
- overdose_threshold = 20
-
-/datum/reagent/medicine/normalcillin/on_mob_life(mob/living/M, method=INGEST)
- if(M.size_multiplier > SIZESCALE_BIG)
- M.sizescale(SIZESCALE_BIG)
- M << "You shrink! "
- else if(M.size_multiplier > SIZESCALE_NORMAL)
- M.sizescale(SIZESCALE_NORMAL)
- M << "You shrink! "
- else if(M.size_multiplier < SIZESCALE_NORMAL)
- M.sizescale(SIZESCALE_NORMAL)
- M << "You grow! "
- else if(M.size_multiplier < SIZESCALE_SMALL)
- M.sizescale(SIZESCALE_SMALL)
- M << "You grow! "
-
- if(M.reagents.has_reagent(/datum/reagent/medicine/normalcillin))
- M.reagents.remove_reagent(/datum/reagent/medicine/normalcillin, 20)
- ..()
-
-
-/datum/reagent/medicine/sizeoxadone
- name = "Sizeoxadone"
- description = "A volatile liquid used as a precursor to size-altering chemicals. Causes dizziness if taken unprocessed."
- reagent_state = LIQUID
- color = "#1E90FF"
- overdose_threshold = 30
- metabolization_rate = 0.8 * REAGENTS_METABOLISM
-
-/datum/reagent/sizeoxadone/on_mob_life(var/mob/living/carbon/M, var/removed)
- if(M.hallucination < volume && prob(20))
- M.hallucination += 5
- if(!M.confused) M.confused = 1
- M.confused = max(M.confused, 20)
- return
-
-/datum/reagent/medicine/sizeoxadone/overdose_process(mob/living/M)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
- M.adjustToxLoss(1)
- ..()
- . = 1
-
-////////////////////////// Anti-Noms Drugs //////////////////////////
-
-/datum/reagent/medicine/ickypak
- name = "Ickypak"
- description = "A foul-smelling green liquid, for inducing muscle contractions to expel accidentally ingested things."
- reagent_state = LIQUID
- color = "#0E900E"
- metabolization_rate = 0.25 * REAGENTS_METABOLISM
-
-/datum/reagent/medicine/ickypak/on_mob_life(var/mob/living/M, method=INGEST)
- ..()
- if(M.hallucination < volume && prob(20))
- M.hallucination += 5
- M.adjustToxLoss(-5)
-
- for(var/I in M.vore_organs)
- var/datum/belly/B = M.vore_organs[I]
- for(var/atom/movable/A in B.internal_contents)
- if(prob(55))
- playsound(M, 'sound/effects/splat.ogg', 50, 1)
- B.release_vore_contents(A)
- ..()
- . = 1
\ No newline at end of file
diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm
deleted file mode 100644
index 156b220df3..0000000000
--- a/code/modules/vore/resizing/sizegun_vr.dm
+++ /dev/null
@@ -1,173 +0,0 @@
-//
-// Size Gun
-//
-/*
-/obj/item/gun/energy/sizegun
- name = "shrink ray"
- desc = "A highly advanced ray gun with two settings: Shrink and Grow. Warning: Do not insert into mouth."
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "sizegun-shrink100" // Someone can probably do better. -Ace
- item_state = null //so the human update icon uses the icon_state instead
- fire_sound = 'sound/weapons/wave.ogg'
- charge_cost = 100
- projectile_type = /obj/item/projectile/beam/shrinklaser
- modifystate = "sizegun-shrink"
- selfcharge = EGUN_SELFCHARGE
- firemodes = list(
- list(mode_name = "grow",
- projectile_type = /obj/item/projectile/beam/growlaser,
- modifystate = "sizegun-grow",
- fire_sound = 'sound/weapons/pulse3.ogg'
- ),
- list(mode_name = "shrink",
- projectile_type = /obj/item/projectile/beam/shrinklaser,
- modifystate = "sizegun-shrink",
- fire_sound = 'sound/weapons/wave.ogg'
- ))
-
-//
-// Beams for size gun
-//
-// tracers TBD
-
-/obj/item/projectile/beam/shrinklaser
- name = "shrink beam"
- icon_state = "xray"
- nodamage = 1
- damage = 0
- check_armour = "laser"
-
- muzzle_type = /obj/effect/projectile/xray/muzzle
- tracer_type = /obj/effect/projectile/xray/tracer
- impact_type = /obj/effect/projectile/xray/impact
-
-/obj/item/projectile/beam/shrinklaser/on_hit(var/atom/target, var/blocked = 0)
- . = ..()
- if(isliving(target))
- var/mob/living/M = target
- switch(M.size_multiplier)
- if(SIZESCALE_HUGE to INFINITY)
- M.sizescale(SIZESCALE_BIG)
- if(SIZESCALE_BIG to SIZESCALE_HUGE)
- M.sizescale(SIZESCALE_NORMAL)
- if(SIZESCALE_NORMAL to SIZESCALE_BIG)
- M.sizescale(SIZESCALE_SMALL)
- if((0 - INFINITY) to SIZESCALE_NORMAL)
- M.sizescale(SIZESCALE_TINY)
- M.update_transform()
- return BULLET_ACT_HIT
-
-/obj/item/projectile/beam/growlaser
- name = "growth beam"
- icon_state = "bluelaser"
- nodamage = 1
- damage = 0
- check_armour = "laser"
-
- muzzle_type = /obj/effect/projectile/laser_blue/muzzle
- tracer_type = /obj/effect/projectile/laser_blue/tracer
- impact_type = /obj/effect/projectile/laser_blue/impact
-
-/obj/item/projectile/beam/growlaser/on_hit(var/atom/target, var/blocked = 0)
- . = ..()
- if(isliving(target))
- var/mob/living/M = target
- switch(M.size_multiplier)
- if(SIZESCALE_BIG to SIZESCALE_HUGE)
- M.sizescale(SIZESCALE_HUGE)
- if(SIZESCALE_NORMAL to SIZESCALE_BIG)
- M.sizescale(SIZESCALE_BIG)
- if(SIZESCALE_SMALL to SIZESCALE_NORMAL)
- M.sizescale(SIZESCALE_NORMAL)
- if((0 - INFINITY) to SIZESCALE_TINY)
- M.sizescale(SIZESCALE_SMALL)
- M.update_transform()
- return BULLET_ACT_HIT
-*/
-
-datum/design/sizeray
- name = "Size Ray"
- desc = "Abuse bluespace tech to alter living matter scale."
- id = "sizeray"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 1000, MAT_GLASS = 1000, MAT_DIAMOND = 2500, MAT_URANIUM = 2500, MAT_TITANIUM = 1000)
- build_path = /obj/item/gun/energy/laser/sizeray
- category = list("Weapons")
-
-/obj/item/projectile/sizeray
- name = "sizeray beam"
- icon_state = "omnilaser"
- hitsound = null
- damage = 0
- damage_type = STAMINA
- flag = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
-
-/obj/item/projectile/sizeray/shrinkray
- icon_state="bluelaser"
-
-/obj/item/projectile/sizeray/growthray
- icon_state="laser"
-
-/obj/item/projectile/sizeray/shrinkray/on_hit(var/atom/target, var/blocked = 0)
- . = ..()
- if(isliving(target))
- var/mob/living/M = target
- switch(M.size_multiplier)
- if(SIZESCALE_HUGE to INFINITY)
- M.sizescale(SIZESCALE_BIG)
- if(SIZESCALE_BIG to SIZESCALE_HUGE)
- M.sizescale(SIZESCALE_NORMAL)
- if(SIZESCALE_NORMAL to SIZESCALE_BIG)
- M.sizescale(SIZESCALE_SMALL)
- if((0 - INFINITY) to SIZESCALE_NORMAL)
- M.sizescale(SIZESCALE_TINY)
- M.update_transform()
- return BULLET_ACT_
-
-/obj/item/projectile/sizeray/growthray/on_hit(var/atom/target, var/blocked = 0)
- . = ..()
- if(isliving(target))
- var/mob/living/M = target
- switch(M.size_multiplier)
- if(SIZESCALE_BIG to SIZESCALE_HUGE)
- M.sizescale(SIZESCALE_HUGE)
- if(SIZESCALE_NORMAL to SIZESCALE_BIG)
- M.sizescale(SIZESCALE_BIG)
- if(SIZESCALE_SMALL to SIZESCALE_NORMAL)
- M.sizescale(SIZESCALE_NORMAL)
- if((0 - INFINITY) to SIZESCALE_TINY)
- M.sizescale(SIZESCALE_SMALL)
- M.update_transform()
- return BULLET_ACT_HIT
-
-/obj/item/ammo_casing/energy/laser/growthray
- projectile_type = /obj/item/projectile/sizeray/growthray
- select_name = "Growth"
-
-/obj/item/ammo_casing/energy/laser/shrinkray
- projectile_type = /obj/item/projectile/sizeray/shrinkray
- select_name = "Shrink"
-
-
-//Gun here
-/obj/item/gun/energy/laser/sizeray
- name = "size ray"
- icon_state = "bluetag"
- desc = "Size manipulator using bluespace breakthroughs."
- item_state = null //so the human update icon uses the icon_state instead.
- ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray, /obj/item/ammo_casing/energy/laser/growthray)
- selfcharge = EGUN_SELFCHARGE
- charge_delay = 5
- ammo_x_offset = 2
- clumsy_check = 1
-
- attackby(obj/item/W, mob/user)
- if(W==src)
- if(icon_state=="bluetag")
- icon_state="redtag"
- ammo_type = list(/obj/item/ammo_casing/energy/laser/growthray)
- else
- icon_state="bluetag"
- ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray)
- return ..()
\ No newline at end of file
diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm
index 59c6a321e6..3d045ba31e 100644
--- a/code/modules/zombie/organs.dm
+++ b/code/modules/zombie/organs.dm
@@ -45,7 +45,9 @@
if(!owner)
return
if(!(src in owner.internal_organs))
- Remove()
+ Remove(owner)
+ if(owner.mob_biotypes & MOB_MINERAL)//does not process in inorganic things
+ return
if (causes_damage && !iszombie(owner) && owner.stat != DEAD)
owner.adjustToxLoss(1)
if (prob(10))
diff --git a/config/config.txt b/config/config.txt
index 6d302a5512..0ab0cc911e 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -6,6 +6,7 @@ $include comms.txt
$include antag_rep.txt
$include donator_groupings.txt
$include dynamic_config.txt
+$include plushies/defines.txt
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
# Example usage:
@@ -384,6 +385,15 @@ MAPROTATION
## When it's set to zero, the map will be randomly picked each round
ALLOW_MAP_VOTING 1
+## Map voting type
+## Determines what kind of vote the map vote is
+## Options are:
+## PLURALITY (default, only vote for one option)
+## APPROVAL (can vote for as many as you want), I
+## IRV (vote by ranked choice, winner determined by instant runoff algorithm)
+## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm)
+MAP_VOTE_TYPE SCORE
+
## Map rotate chance delta
## This is the chance of map rotation factored to the round length.
## A value of 1 would mean the map rotation chance is the round length in minutes (hour long round == 60% rotation chance)
@@ -438,8 +448,14 @@ MINUTE_CLICK_LIMIT 400
##How long to wait between messaging admins about occurences of a unique error
#ERROR_MSG_DELAY 50
-## Send a message to IRC when starting a new game
-#IRC_ANNOUNCE_NEW_GAME
+## Chat Announce Options
+## Various messages to be sent to game chats
+## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4
+## If using TGS4, the string option can be set as a chat channel tag to limit the message to channels of that tag type (case-sensitive)
+## i.e. CHAT_ANNOUNCE_NEW_GAME chat_channel_tag
+
+## Send a message with the station name starting a new game
+#CHAT_ANNOUNCE_NEW_GAME
## Allow admin hrefs that don't use the new token system, will eventually be removed
DEBUG_ADMIN_HREFS
@@ -490,3 +506,5 @@ FAIL2TOPIC_MAX_FAILS 5
## Firewall rule name used on physical server
FAIL2TOPIC_RULE_NAME _dd_fail2topic
+## Enable automatic profiling - Byond 513.1506 and newer only.
+#AUTO_PROFILE
diff --git a/config/dynamic_config.txt b/config/dynamic_config.txt
index 2ddebdf37a..25bc763d0b 100644
--- a/config/dynamic_config.txt
+++ b/config/dynamic_config.txt
@@ -1,3 +1,13 @@
+## Dynamic storytellers weights: how likely each storyteller is to show up. This is adjusted by voting and recency.
+STORYTELLER_WEIGHT CHAOTIC 2
+STORYTELLER_WEIGHT TEAMWORK 4
+STORYTELLER_WEIGHT CONVERSION 2
+STORYTELLER_WEIGHT RANDOM 6
+STORYTELLER_WEIGHT INTRIGUE 6
+STORYTELLER_WEIGHT STORY 6
+STORYTELLER_WEIGHT CALM 6
+STORYTELLER_WEIGHT EXTENDED 0
+
## Injection delays: how long (in minutes) will pass before a midround or latejoin antag is injected.
DYNAMIC_MIDROUND_DELAY_MIN 5
DYNAMIC_MIDROUND_DELAY_MAX 15
@@ -92,6 +102,7 @@ DYNAMIC_WEIGHT RADIATION_STORM 1
DYNAMIC_WEIGHT LATEJOIN_TRAITOR 7
DYNAMIC_WEIGHT LATEJOIN_REVOLUTION 2
DYNAMIC_WEIGHT LATEJOIN_BLOODSUCKER 4
+DYNAMIC_WEIGHT LATEJOIN_COLLECTOR 5
## Threat cost. This is decreased from the mode's threat when the rule is executed.
DYNAMIC_COST TRAITOR 10
@@ -153,6 +164,7 @@ DYNAMIC_COST RADIATION_STORM 3
DYNAMIC_COST LATEJOIN_TRAITOR 5
DYNAMIC_COST LATEJOIN_REVOLUTION 20
DYNAMIC_COST LATEJOIN_BLOODSUCKER 10
+DYNAMIC_COST LATEJOIN_COLLECTOR 1
## 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+.
@@ -210,6 +222,7 @@ DYNAMIC_REQUIREMENTS RADIATION_STORM 5 5 5 5 5 5 5 5 5 5
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
+DYNAMIC_REQUIREMENTS LATEJOIN_COLLECTOR 10 10 10 10 10 10 10 10 10 10
## An alternative, static requirement used instead when pop is over mode's high_pop_limit.
DYNAMIC_HIGH_POPULATION_REQUIREMENT TRAITOR 50
@@ -267,6 +280,7 @@ DYNAMIC_HIGH_POPULATION_REQUIREMENT RADIATION_STORM 5
DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_TRAITOR 15
DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_REVOLUTION 50
DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_BLOODSUCKER 15
+DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_COLLECTOR 10
## Dynamic traitor stuff
diff --git a/config/game_options.txt b/config/game_options.txt
index 0fa4db519d..b2b0ac0abd 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -426,6 +426,7 @@ ROUNDSTART_RACES lizard
ROUNDSTART_RACES plasmaman
#ROUNDSTART_RACES shadow
ROUNDSTART_RACES felinid
+ROUNDSTART_RACES dwarf
## Races that are better than humans in some ways, but worse in others
#ROUNDSTART_RACES jelly
diff --git a/config/plushies/defines.txt b/config/plushies/defines.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/config/plushies/plushie_config.txt b/config/plushies/plushie_config.txt
new file mode 100644
index 0000000000..7cd1d88f3e
--- /dev/null
+++ b/config/plushies/plushie_config.txt
@@ -0,0 +1,2 @@
+# EXAMPLE
+# SNOWFLAKE_PLUSHIES example {"name":"example","desc":"thanks, coders.","icon_state":"","attack_verb":["thumped","whomped","bumped"],"squeak_override":{"sound/weapons/magout.ogg":1}}
diff --git a/config/plushies/sprites.dmi b/config/plushies/sprites.dmi
new file mode 100644
index 0000000000..2970010b2b
Binary files /dev/null and b/config/plushies/sprites.dmi differ
diff --git a/dependencies.sh b/dependencies.sh
index 0f66dcab1a..a2f6873a32 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -17,7 +17,7 @@ export RUST_G_VERSION=0.4.2
export BSQL_VERSION=v1.4.0.0
#node version
-export NODE_VERSION=8
+export NODE_VERSION=12
# PHP version
export PHP_VERSION=5.6
diff --git a/html/changelogs/AutoChangeLog-pr-10277.yml b/html/changelogs/AutoChangeLog-pr-10277.yml
new file mode 100644
index 0000000000..d2c873d010
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10277.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - refactor: "Custom snowflake plushies are now in config rather than code."
diff --git a/html/changelogs/AutoChangeLog-pr-10596.yml b/html/changelogs/AutoChangeLog-pr-10596.yml
new file mode 100644
index 0000000000..7f56a256a0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10596.yml
@@ -0,0 +1,5 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "hijack implant"
+ - code_imp: "changed mentions of the issilion proc to hasSiliconAccessInArea based on what the proc is used for"
diff --git a/html/changelogs/AutoChangeLog-pr-10623.yml b/html/changelogs/AutoChangeLog-pr-10623.yml
new file mode 100644
index 0000000000..623560f7d2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10623.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - rscadd: "Lots of new traitor objectives"
diff --git a/html/changelogs/AutoChangeLog-pr-10700.yml b/html/changelogs/AutoChangeLog-pr-10700.yml
new file mode 100644
index 0000000000..296ebe4d99
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10700.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "The anomalous honking crystal should now properly clown your mind."
diff --git a/html/changelogs/AutoChangeLog-pr-10774.yml b/html/changelogs/AutoChangeLog-pr-10774.yml
new file mode 100644
index 0000000000..f596bdcddb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10774.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - tweak: "nuke explosion is now full dev radius for anti lag purposes"
diff --git a/html/changelogs/AutoChangeLog-pr-10787.yml b/html/changelogs/AutoChangeLog-pr-10787.yml
new file mode 100644
index 0000000000..ee221b69f3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10787.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "thief's gloves"
diff --git a/html/changelogs/AutoChangeLog-pr-10792.yml b/html/changelogs/AutoChangeLog-pr-10792.yml
new file mode 100644
index 0000000000..78c86a838a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10792.yml
@@ -0,0 +1,4 @@
+author: "Naksu"
+delete-after: True
+changes:
+ - bugfix: "Odysseus chem synthesizing now works again."
diff --git a/html/changelogs/AutoChangeLog-pr-10798.yml b/html/changelogs/AutoChangeLog-pr-10798.yml
new file mode 100644
index 0000000000..637343c7b6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10798.yml
@@ -0,0 +1,5 @@
+author: "necromanceranne"
+delete-after: True
+changes:
+ - rscdel: "Removed the formal security officer jacket from the secdrobe"
+ - tweak: "formal security jackets are now armor vests"
diff --git a/html/changelogs/AutoChangeLog-pr-10861.yml b/html/changelogs/AutoChangeLog-pr-10861.yml
new file mode 100644
index 0000000000..5071cc30f9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10861.yml
@@ -0,0 +1,4 @@
+author: "ancientpower"
+delete-after: True
+changes:
+ - rscadd: "Ported drink sliding from /vg/station."
diff --git a/html/changelogs/AutoChangeLog-pr-10868.yml b/html/changelogs/AutoChangeLog-pr-10868.yml
new file mode 100644
index 0000000000..629f93585a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10868.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "Holographic fans won't display above mobs and other objects anymore."
diff --git a/html/changelogs/AutoChangeLog-pr-10870.yml b/html/changelogs/AutoChangeLog-pr-10870.yml
new file mode 100644
index 0000000000..672e6abdbc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10870.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed paraplegics appearing as shoeless."
diff --git a/html/changelogs/AutoChangeLog-pr-10881.yml b/html/changelogs/AutoChangeLog-pr-10881.yml
new file mode 100644
index 0000000000..7c00713eae
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10881.yml
@@ -0,0 +1,6 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - refactor: "Refactored mob holders into an element."
+ - bugfix: "Fixed a few minor issues with that feature. such as mismatching sprites for certain held mobs and a slight lack of safety checks."
+ - rscdel: "holdable mobs can't force themselves into people's hands anymore."
diff --git a/html/changelogs/AutoChangeLog-pr-10883.yml b/html/changelogs/AutoChangeLog-pr-10883.yml
new file mode 100644
index 0000000000..f99613d846
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10883.yml
@@ -0,0 +1,4 @@
+author: "ancientpower"
+delete-after: True
+changes:
+ - tweak: "Ghosts are now literate."
diff --git a/html/changelogs/AutoChangeLog-pr-10885.yml b/html/changelogs/AutoChangeLog-pr-10885.yml
new file mode 100644
index 0000000000..bcc19eb9d2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10885.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Milkies fix."
diff --git a/html/changelogs/AutoChangeLog-pr-10892.yml b/html/changelogs/AutoChangeLog-pr-10892.yml
new file mode 100644
index 0000000000..88f12ef378
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10892.yml
@@ -0,0 +1,5 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - refactor: "Guncode and energy guns have been refactored a bit."
+ - rscadd: "You can now combat mode ight click on an energy gun to attempt to switch firing modes. This only works on guns without right click functions overridden."
diff --git a/html/changelogs/AutoChangeLog-pr-10894.yml b/html/changelogs/AutoChangeLog-pr-10894.yml
new file mode 100644
index 0000000000..770308755d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10894.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Carps have evolved to take more damage"
diff --git a/html/changelogs/AutoChangeLog-pr-10898.yml b/html/changelogs/AutoChangeLog-pr-10898.yml
new file mode 100644
index 0000000000..7c7198105f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10898.yml
@@ -0,0 +1,5 @@
+author: "EmeraldSundisk"
+delete-after: True
+changes:
+ - bugfix: "Connects mining's disposal unit on Delta."
+ - tweak: "Slight visual adjustments to the immediate affected area."
diff --git a/html/changelogs/AutoChangeLog-pr-10899.yml b/html/changelogs/AutoChangeLog-pr-10899.yml
new file mode 100644
index 0000000000..f1542b2b09
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10899.yml
@@ -0,0 +1,6 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "restock crates for each vender"
+ - rscadd: "restock units for all station venders"
+ - bugfix: "Sec-vender missing icon"
diff --git a/html/changelogs/AutoChangeLog-pr-10900.yml b/html/changelogs/AutoChangeLog-pr-10900.yml
new file mode 100644
index 0000000000..0f79245c73
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10900.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "Atmos reaction priority works now."
diff --git a/html/changelogs/AutoChangeLog-pr-10901.yml b/html/changelogs/AutoChangeLog-pr-10901.yml
new file mode 100644
index 0000000000..57c1d821f7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10901.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "Box station captain office issues
+maping: Gulag on box can now be accessed"
diff --git a/html/changelogs/AutoChangeLog-pr-10902.yml b/html/changelogs/AutoChangeLog-pr-10902.yml
new file mode 100644
index 0000000000..9a60860f3f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10902.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed some mounted defibrillator issue with the altclicking functionality."
diff --git a/html/changelogs/AutoChangeLog-pr-10903.yml b/html/changelogs/AutoChangeLog-pr-10903.yml
new file mode 100644
index 0000000000..a353d6594a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10903.yml
@@ -0,0 +1,5 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscadd: "Formaldehyde prevents organ decay and corpses' miasma production at 1u in the body."
+ - rscadd: "Epinephrine pens now contain 3u formaldehyde. This should not kill you."
diff --git a/html/changelogs/AutoChangeLog-pr-10905.yml b/html/changelogs/AutoChangeLog-pr-10905.yml
new file mode 100644
index 0000000000..de9374bd12
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10905.yml
@@ -0,0 +1,6 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - tweak: "Standard RCD ammo can now be printed from Engineering-keyed techfabs once you hit Industrial Engineering."
+ - tweak: "Consoleless interfaces are now default - this means unrestricted protolathes and circuit imprinters can now be interfaced with by interacting with the machine itself."
+ - bugfix: "Multitools can now actually be printed from Engineering and Science protolathes/techfabs once you unlock Basic Tools."
diff --git a/html/changelogs/AutoChangeLog-pr-10906.yml b/html/changelogs/AutoChangeLog-pr-10906.yml
new file mode 100644
index 0000000000..ef725e921e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10906.yml
@@ -0,0 +1,5 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscadd: "Husking (from being burned to shit) can now be reverted! 5u rezadone or 100u synthflesh, at below 50 burn."
+ - balance: "Turning a body into a burnt husk now takes more effort. 300 burn's worth of effort."
diff --git a/html/changelogs/AutoChangeLog-pr-10907.yml b/html/changelogs/AutoChangeLog-pr-10907.yml
new file mode 100644
index 0000000000..af893e9415
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10907.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed no-grav lavaland labor/mining shuttle areas."
diff --git a/html/changelogs/AutoChangeLog-pr-10913.yml b/html/changelogs/AutoChangeLog-pr-10913.yml
new file mode 100644
index 0000000000..8bf549a154
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10913.yml
@@ -0,0 +1,4 @@
+author: "Feasel"
+delete-after: True
+changes:
+ - balance: "Buffed dissection success chances."
diff --git a/html/changelogs/AutoChangeLog-pr-10915.yml b/html/changelogs/AutoChangeLog-pr-10915.yml
new file mode 100644
index 0000000000..88f0c1652e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10915.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "shoes can now fit magpistols again."
diff --git a/html/changelogs/AutoChangeLog-pr-10916.yml b/html/changelogs/AutoChangeLog-pr-10916.yml
new file mode 100644
index 0000000000..05d9b007b1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10916.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "Projectiles now always hit chest if targeting chest, snipers have 100% targeting zone accuracy. All other cases are unchanged."
diff --git a/html/changelogs/AutoChangeLog-pr-10917.yml b/html/changelogs/AutoChangeLog-pr-10917.yml
new file mode 100644
index 0000000000..f6e5997348
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10917.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - tweak: "The MK2 hypospray now"
diff --git a/html/changelogs/AutoChangeLog-pr-10918.yml b/html/changelogs/AutoChangeLog-pr-10918.yml
new file mode 100644
index 0000000000..bf47d0accf
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10918.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - config: "Made dwarves into a roundstart races"
diff --git a/html/changelogs/AutoChangeLog-pr-10919.yml b/html/changelogs/AutoChangeLog-pr-10919.yml
new file mode 100644
index 0000000000..0fa6420e39
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10919.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixing accidental nerfs to the magpistol magazine."
diff --git a/html/changelogs/AutoChangeLog-pr-10921.yml b/html/changelogs/AutoChangeLog-pr-10921.yml
new file mode 100644
index 0000000000..d6d551b40d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10921.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "The Lavaland's Herald speech sound should only play if they are actually speaking."
diff --git a/html/changelogs/AutoChangeLog-pr-10922.yml b/html/changelogs/AutoChangeLog-pr-10922.yml
new file mode 100644
index 0000000000..c71630fd0d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10922.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - tweak: "The lawyer's PDA cartridge has been rebranded to something more accurate to its true nature."
diff --git a/html/changelogs/AutoChangeLog-pr-10924.yml b/html/changelogs/AutoChangeLog-pr-10924.yml
new file mode 100644
index 0000000000..d419928dd2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10924.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed whitelisted/donor loadouts"
diff --git a/html/changelogs/AutoChangeLog-pr-10926.yml b/html/changelogs/AutoChangeLog-pr-10926.yml
new file mode 100644
index 0000000000..9662402d1b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10926.yml
@@ -0,0 +1,9 @@
+author: "keronshb"
+delete-after: True
+changes:
+ - rscadd: "Added repairable turrets"
+ - rscadd: "Adds Tiny Fans to the pirate ship"
+ - tweak: "changes some reinforced windows to plastinanium pirate windows"
+ - tweak: "made the pirate shuttle + turrets bomb resistant"
+ - tweak: "made most pirate machines + consoles indestructible"
+ - tweak: "increased pirate turret health"
diff --git a/html/changelogs/AutoChangeLog-pr-10929.yml b/html/changelogs/AutoChangeLog-pr-10929.yml
new file mode 100644
index 0000000000..fa9413f25a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10929.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Childproofs double-esword and hypereuplastic blade toys."
diff --git a/html/changelogs/AutoChangeLog-pr-10930.yml b/html/changelogs/AutoChangeLog-pr-10930.yml
new file mode 100644
index 0000000000..4121a00b9b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10930.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - tweak: "Meteor Timer back to 3-5 minutes"
diff --git a/html/changelogs/AutoChangeLog-pr-10934.yml b/html/changelogs/AutoChangeLog-pr-10934.yml
new file mode 100644
index 0000000000..61ef7ec04f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10934.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - refactor: "Refactored ghostreading/etc"
diff --git a/html/changelogs/AutoChangeLog-pr-10935.yml b/html/changelogs/AutoChangeLog-pr-10935.yml
new file mode 100644
index 0000000000..f35855854f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10935.yml
@@ -0,0 +1,5 @@
+author: "KrabSpider"
+delete-after: True
+changes:
+ - imageadd: "The Van Dyke is no longer Fu Manchu."
+ - imagedel: "Gets rid of a Fu Manchu imitation."
diff --git a/html/changelogs/AutoChangeLog-pr-10936.yml b/html/changelogs/AutoChangeLog-pr-10936.yml
new file mode 100644
index 0000000000..2303f157ab
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10936.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "Cyborgization will now de-gang people, even gangheads."
diff --git a/html/changelogs/AutoChangeLog-pr-10937.yml b/html/changelogs/AutoChangeLog-pr-10937.yml
new file mode 100644
index 0000000000..1c56882ccc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10937.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - admin: "The debug outfit is now kitted out for whatever debbuging needs."
diff --git a/html/changelogs/AutoChangeLog-pr-10942.yml b/html/changelogs/AutoChangeLog-pr-10942.yml
new file mode 100644
index 0000000000..2a30ace3aa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10942.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - rscadd: "map voting doesn't suck anymore"
diff --git a/html/changelogs/AutoChangeLog-pr-10943.yml b/html/changelogs/AutoChangeLog-pr-10943.yml
new file mode 100644
index 0000000000..f45d8b1d39
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10943.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed a little inconvenience with the character setup preview dummy having extra unwarranted bits."
diff --git a/html/changelogs/AutoChangeLog-pr-10948.yml b/html/changelogs/AutoChangeLog-pr-10948.yml
new file mode 100644
index 0000000000..f9da9463fc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10948.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Stopped role restricted uplink items from being discounted despite not being purchasable most times."
diff --git a/html/changelogs/AutoChangeLog-pr-10950.yml b/html/changelogs/AutoChangeLog-pr-10950.yml
new file mode 100644
index 0000000000..8258db1d69
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10950.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "beam rifle runtime fix during aiming_beam"
diff --git a/html/changelogs/AutoChangeLog-pr-10951.yml b/html/changelogs/AutoChangeLog-pr-10951.yml
new file mode 100644
index 0000000000..20bc444967
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10951.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "fail2topic runtime fix: taking out an ip while incrementing index resulted in accessing the next-next entry instead of the next and results in out of bound errors."
diff --git a/html/changelogs/AutoChangeLog-pr-10955.yml b/html/changelogs/AutoChangeLog-pr-10955.yml
new file mode 100644
index 0000000000..46ff62efaf
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10955.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "gravity gun repulse and chaos now work in all angles, rather than just basic cardinals and diagonals. fun."
diff --git a/html/changelogs/AutoChangeLog-pr-10957.yml b/html/changelogs/AutoChangeLog-pr-10957.yml
new file mode 100644
index 0000000000..b655b85fb9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10957.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "Dynamic now defaults to \"classic\" storyteller instead of just failing if the vote didn't choose a storyteller."
diff --git a/html/changelogs/AutoChangeLog-pr-10960.yml b/html/changelogs/AutoChangeLog-pr-10960.yml
new file mode 100644
index 0000000000..6033533590
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10960.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - bugfix: "the plant dudes can actually make plant disks now"
diff --git a/html/changelogs/AutoChangeLog-pr-10961.yml b/html/changelogs/AutoChangeLog-pr-10961.yml
new file mode 100644
index 0000000000..eaaafab472
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10961.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed an issue with the nearsighted prescription glasses taking over worn eyewear."
diff --git a/html/changelogs/AutoChangeLog-pr-10966.yml b/html/changelogs/AutoChangeLog-pr-10966.yml
new file mode 100644
index 0000000000..bdc78a2b01
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10966.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - bugfix: "Mining no longer lead to spess"
diff --git a/html/changelogs/AutoChangeLog-pr-10967.yml b/html/changelogs/AutoChangeLog-pr-10967.yml
new file mode 100644
index 0000000000..f242dd57bc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10967.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed AI unanchoring not properly removing the no teleport trait. My bad."
diff --git a/html/changelogs/AutoChangeLog-pr-10969.yml b/html/changelogs/AutoChangeLog-pr-10969.yml
new file mode 100644
index 0000000000..fdd53cdd2f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10969.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "crowbarring manifests off crates"
diff --git a/html/changelogs/AutoChangeLog-pr-10971.yml b/html/changelogs/AutoChangeLog-pr-10971.yml
new file mode 100644
index 0000000000..e7882646f8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10971.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Alien stools and chairs"
diff --git a/html/changelogs/AutoChangeLog-pr-10972.yml b/html/changelogs/AutoChangeLog-pr-10972.yml
new file mode 100644
index 0000000000..9cc2e64687
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10972.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "Bone armor/Dagger are now crafting from bones rather then crafting menu"
diff --git a/html/changelogs/AutoChangeLog-pr-10973.yml b/html/changelogs/AutoChangeLog-pr-10973.yml
new file mode 100644
index 0000000000..8946cddb43
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10973.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Firing pins that only works when not on station"
diff --git a/html/changelogs/AutoChangeLog-pr-10974.yml b/html/changelogs/AutoChangeLog-pr-10974.yml
new file mode 100644
index 0000000000..7f668256b3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10974.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "antag quirk blacklisting works now"
diff --git a/html/changelogs/AutoChangeLog-pr-10976.yml b/html/changelogs/AutoChangeLog-pr-10976.yml
new file mode 100644
index 0000000000..34ef082829
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10976.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed another issue with hering comsig."
diff --git a/html/changelogs/AutoChangeLog-pr-10981.yml b/html/changelogs/AutoChangeLog-pr-10981.yml
new file mode 100644
index 0000000000..df0d7990cb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10981.yml
@@ -0,0 +1,4 @@
+author: "IHOPMommyLich"
+delete-after: True
+changes:
+ - tweak: "Changed the multiplicative_slowdown of Stimulants from -1 to -0.5"
diff --git a/html/changelogs/AutoChangeLog-pr-10984.yml b/html/changelogs/AutoChangeLog-pr-10984.yml
new file mode 100644
index 0000000000..137536b430
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10984.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "Heads of staff have been better screened by NT before being promoted"
diff --git a/html/changelogs/AutoChangeLog-pr-10987.yml b/html/changelogs/AutoChangeLog-pr-10987.yml
new file mode 100644
index 0000000000..abea439a86
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10987.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - imageadd: "Fixed dozen missing privates sprites."
diff --git a/html/changelogs/AutoChangeLog-pr-10988.yml b/html/changelogs/AutoChangeLog-pr-10988.yml
new file mode 100644
index 0000000000..ebd9de7689
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10988.yml
@@ -0,0 +1,4 @@
+author: "YakumoChen"
+delete-after: True
+changes:
+ - tweak: "Observe is back in the OOC tab"
diff --git a/html/changelogs/AutoChangeLog-pr-10989.yml b/html/changelogs/AutoChangeLog-pr-10989.yml
new file mode 100644
index 0000000000..0a5b2ad3c8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10989.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "A little fix concerning some R&D and reagents."
diff --git a/html/changelogs/AutoChangeLog-pr-10992.yml b/html/changelogs/AutoChangeLog-pr-10992.yml
new file mode 100644
index 0000000000..1d6d10396b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10992.yml
@@ -0,0 +1,4 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - balance: "Buckshot individual pellet damage up from 10 to 12.5. Still firing 6 pellets."
diff --git a/html/changelogs/AutoChangeLog-pr-10994.yml b/html/changelogs/AutoChangeLog-pr-10994.yml
new file mode 100644
index 0000000000..c27a1afc00
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10994.yml
@@ -0,0 +1,4 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - balance: "Nar'Sie runes no longer benefit from runed floors."
diff --git a/html/changelogs/AutoChangeLog-pr-10996.yml b/html/changelogs/AutoChangeLog-pr-10996.yml
new file mode 100644
index 0000000000..8bb7646cd6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10996.yml
@@ -0,0 +1,6 @@
+author: "PersianXerxes"
+delete-after: True
+changes:
+ - rscadd: "SMES and PACMAN attached to gulag Security to power electrified windows
+remove: Removed Sec vendor from gulag Security"
+ - tweak: "Separation of gulag and public mining"
diff --git a/html/changelogs/AutoChangeLog-pr-10997.yml b/html/changelogs/AutoChangeLog-pr-10997.yml
new file mode 100644
index 0000000000..a380a04f68
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10997.yml
@@ -0,0 +1,12 @@
+author: "Owai-Seek"
+delete-after: True
+changes:
+ - rscadd: "Bacon and Eggs food item. Delicious! Added a Lemony Poppy Seed Muffin."
+ - tweak: "Snack Vendor has Chocolates, Tortilla Chips, and a Marshmallow Box"
+ - balance: "Mops can now be printed at service lathe once tools are researched."
+ - balance: "Biobags can hold most organic limbs/organs, but not brains, implants, or cybernetics."
+ - balance: "Trash Bag can now hold limbs (but not heads.)"
+ - balance: "Most snack vendor items reduced by 1."
+ - bugfix: "Trash Cans are now actually craftable, and only require metal instead of plastic."
+ - imageadd: "Bacon and Eggs, Drying Agent Bottle."
+ - imageadd: "Mugs now show reagent colors of contained reagents. Thanks Seris!"
diff --git a/html/changelogs/AutoChangeLog-pr-11000.yml b/html/changelogs/AutoChangeLog-pr-11000.yml
new file mode 100644
index 0000000000..5e496af81f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11000.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - balance: "makes RCDs cost a better amount"
diff --git a/html/changelogs/AutoChangeLog-pr-11001.yml b/html/changelogs/AutoChangeLog-pr-11001.yml
new file mode 100644
index 0000000000..1cfa8977b4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11001.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - bugfix: "Fixed the pandemic naming and the radiation healing symptom UI crashing"
diff --git a/html/changelogs/AutoChangeLog-pr-11003.yml b/html/changelogs/AutoChangeLog-pr-11003.yml
new file mode 100644
index 0000000000..4c551c4d09
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11003.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "Energy weapons now once again have their lens in contents."
diff --git a/html/changelogs/AutoChangeLog-pr-11005.yml b/html/changelogs/AutoChangeLog-pr-11005.yml
new file mode 100644
index 0000000000..d0576c7ba8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11005.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - tweak: "Hyposprays now switch modes on CTRL click, instead of alt, as it was already reserved for dispension amount."
diff --git a/html/changelogs/AutoChangeLog-pr-11012.yml b/html/changelogs/AutoChangeLog-pr-11012.yml
new file mode 100644
index 0000000000..1d233f0692
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11012.yml
@@ -0,0 +1,4 @@
+author: "keronshb"
+delete-after: True
+changes:
+ - rscadd: "Adds the CogChamp drink and Sprite"
diff --git a/html/changelogs/AutoChangeLog-pr-11013.yml b/html/changelogs/AutoChangeLog-pr-11013.yml
new file mode 100644
index 0000000000..a9806d796d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11013.yml
@@ -0,0 +1,5 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - rscadd: "Added Plasteel Pickaxe"
+ - rscadd: "Added Titanium Pickaxe"
diff --git a/html/changelogs/AutoChangeLog-pr-11018.yml b/html/changelogs/AutoChangeLog-pr-11018.yml
new file mode 100644
index 0000000000..2795317861
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11018.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "pais are no longer muted for literally a whole hour on emp."
diff --git a/html/changelogs/AutoChangeLog-pr-11020.yml b/html/changelogs/AutoChangeLog-pr-11020.yml
new file mode 100644
index 0000000000..52677b98e9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11020.yml
@@ -0,0 +1,4 @@
+author: "Zellular"
+delete-after: True
+changes:
+ - imageadd: "Movement state for pupdozer and its decals"
diff --git a/html/changelogs/AutoChangeLog-pr-11022.yml b/html/changelogs/AutoChangeLog-pr-11022.yml
new file mode 100644
index 0000000000..ac317e56b0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11022.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "auto profiler subsystem from tg"
diff --git a/html/changelogs/AutoChangeLog-pr-11024.yml b/html/changelogs/AutoChangeLog-pr-11024.yml
new file mode 100644
index 0000000000..3af136f15e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11024.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "Brig cells now are more accurate by using timeofday instead of realtime"
diff --git a/html/changelogs/AutoChangeLog-pr-11026.yml b/html/changelogs/AutoChangeLog-pr-11026.yml
new file mode 100644
index 0000000000..c99aad2d14
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11026.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "The suit full of spiders also known as a ninja now is a tactical turtleneck"
+ - balance: "The Wiznerds now dont have suits set to max"
diff --git a/html/changelogs/AutoChangeLog-pr-11027.yml b/html/changelogs/AutoChangeLog-pr-11027.yml
new file mode 100644
index 0000000000..4e5f5b46ba
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11027.yml
@@ -0,0 +1,5 @@
+author: "ShadeAware"
+delete-after: True
+changes:
+ - rscadd: "The Captain's Wardrobe, a special one-of-a-kind and ID-locked wardrobe for the Captain that holds all of their snowflakey gear.
+Remove: Snowflake gear from the Captain's locker, since now it has its own vendor."
diff --git a/html/changelogs/AutoChangeLog-pr-11029.yml b/html/changelogs/AutoChangeLog-pr-11029.yml
new file mode 100644
index 0000000000..17f34bbfa6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11029.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - tweak: "default should be... default"
diff --git a/html/changelogs/AutoChangeLog-pr-11032.yml b/html/changelogs/AutoChangeLog-pr-11032.yml
new file mode 100644
index 0000000000..6d026e444a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11032.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "Cryo now actually transfers reagents at tier 4 on enter rather than every 80 machine fire()-process()s regardless of if it was \"reset\" by open/close."
diff --git a/html/changelogs/AutoChangeLog-pr-11035.yml b/html/changelogs/AutoChangeLog-pr-11035.yml
new file mode 100644
index 0000000000..94a57db904
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11035.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "ctf claymores now actually spawn (and fit)."
diff --git a/html/changelogs/AutoChangeLog-pr-11038.yml b/html/changelogs/AutoChangeLog-pr-11038.yml
new file mode 100644
index 0000000000..b157c31af8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11038.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "STOP_PROCESSING now removes from currentrun to prevent another process cycle from happening where it shouldn't."
diff --git a/html/changelogs/AutoChangeLog-pr-11042.yml b/html/changelogs/AutoChangeLog-pr-11042.yml
new file mode 100644
index 0000000000..4238f76b75
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11042.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - balance: "The pandemic can no longer make vaccines or synthblood as quickly."
diff --git a/html/changelogs/AutoChangeLog-pr-11043.yml b/html/changelogs/AutoChangeLog-pr-11043.yml
new file mode 100644
index 0000000000..28217af630
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11043.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - bugfix: "apc icons"
diff --git a/html/changelogs/AutoChangeLog-pr-11044.yml b/html/changelogs/AutoChangeLog-pr-11044.yml
new file mode 100644
index 0000000000..7dec153778
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11044.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - rscadd: "The syndicate uplinks interface has been redone in TGUI Next"
diff --git a/html/changelogs/AutoChangeLog-pr-11045.yml b/html/changelogs/AutoChangeLog-pr-11045.yml
new file mode 100644
index 0000000000..9e3e0a9ee4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11045.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "Flat guns can no longer be suppressed"
diff --git a/html/changelogs/AutoChangeLog-pr-11046.yml b/html/changelogs/AutoChangeLog-pr-11046.yml
new file mode 100644
index 0000000000..c40286e901
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11046.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "replaced stickmans .45 caliber with 10mm, for consistency."
diff --git a/html/changelogs/AutoChangeLog-pr-11051.yml b/html/changelogs/AutoChangeLog-pr-11051.yml
new file mode 100644
index 0000000000..8ac7939b00
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11051.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "hand teleporters now require 30 deciseconds of still movement by the user to dispel portals. there's a beam effect too."
diff --git a/html/changelogs/AutoChangeLog-pr-11056.yml b/html/changelogs/AutoChangeLog-pr-11056.yml
new file mode 100644
index 0000000000..b56efb3557
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11056.yml
@@ -0,0 +1,4 @@
+author: "necromanceranne"
+delete-after: True
+changes:
+ - rscdel: "Bullets causing bleed rates equal to unmitigated damage through all forms of defense."
diff --git a/html/changelogs/AutoChangeLog-pr-11061.yml b/html/changelogs/AutoChangeLog-pr-11061.yml
new file mode 100644
index 0000000000..5225edc141
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11061.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "Gang tower shield is no longer transparent"
diff --git a/html/changelogs/AutoChangeLog-pr-11062.yml b/html/changelogs/AutoChangeLog-pr-11062.yml
new file mode 100644
index 0000000000..b9bc85b1c1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11062.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "Organ healing rate doubled. Organ decay rate halved to match its define (15 minutes for full decay, so at around 8-10 minutes it'll be really fucked)."
diff --git a/html/changelogs/AutoChangeLog-pr-11063.yml b/html/changelogs/AutoChangeLog-pr-11063.yml
new file mode 100644
index 0000000000..c729fb5ed9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11063.yml
@@ -0,0 +1,4 @@
+author: "Zellular"
+delete-after: True
+changes:
+ - tweak: "Tweaked the movement state for the pupdozer's eyes"
diff --git a/html/changelogs/AutoChangeLog-pr-11070.yml b/html/changelogs/AutoChangeLog-pr-11070.yml
new file mode 100644
index 0000000000..3c923bddb0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11070.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - tweak: "Storage now caches max screen size and only stores when being opened by a non ghost, meaning ghosts will no longer distort living player screens when viewing storage."
diff --git a/html/changelogs/AutoChangeLog-pr-11076.yml b/html/changelogs/AutoChangeLog-pr-11076.yml
new file mode 100644
index 0000000000..e0f187a038
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11076.yml
@@ -0,0 +1,4 @@
+author: "nemvar"
+delete-after: True
+changes:
+ - code_imp: "Changed mob biotypes from lists to flags."
diff --git a/html/changelogs/AutoChangeLog-pr-11079.yml b/html/changelogs/AutoChangeLog-pr-11079.yml
new file mode 100644
index 0000000000..b613b6c867
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11079.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - tweak: "Valentines can now be converted by bloodsuckers"
diff --git a/html/changelogs/AutoChangeLog-pr-11081.yml b/html/changelogs/AutoChangeLog-pr-11081.yml
new file mode 100644
index 0000000000..2fcb15b7aa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11081.yml
@@ -0,0 +1,4 @@
+author: "Detective-Google"
+delete-after: True
+changes:
+ - bugfix: "valentines candy no longer prefbreaks"
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 26f81b70df..7a28827903 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index 6843bac6bf..070034d778 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 6e95eae960..d0bd304808 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi
index bb00742a17..c6bda60d38 100644
Binary files a/icons/mob/suit_digi.dmi and b/icons/mob/suit_digi.dmi differ
diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi
index fd0893b300..75f84347b6 100644
Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ
diff --git a/icons/obj/citvending.dmi b/icons/obj/citvending.dmi
deleted file mode 100644
index 8f836b7eb5..0000000000
Binary files a/icons/obj/citvending.dmi and /dev/null differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index e329720cf7..1ff87b26e4 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index 7e0d03abd5..515d6212c0 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index b03a1cdeae..17d6024586 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi
index 93acc07453..2639d6860a 100644
Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index a719150f11..670269da00 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/implants.dmi b/icons/obj/implants.dmi
index 8dc2f08fdc..a6d4697673 100644
Binary files a/icons/obj/implants.dmi and b/icons/obj/implants.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index cb3870dc61..9128654a5b 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index 396d681f22..675005da91 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index a7593e4a55..f2e98aff32 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi
index c6f25f1b29..3abb25d8b2 100644
Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 1ba953d284..1f84da44d4 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 4aa54a2308..a92af16e96 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 143171f414..b11e43d665 100644
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/obj/vending_restock.dmi b/icons/obj/vending_restock.dmi
index a59fdd0f52..035c01de6b 100644
Binary files a/icons/obj/vending_restock.dmi and b/icons/obj/vending_restock.dmi differ
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 6ee9e6e824..9f3d8911ec 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -151,6 +151,7 @@ h1.alert, h2.alert {color: #000000;}
.extremelybig {font-size: 5;}
.greentext {color: #00FF00; font-size: 3;}
.redtext {color: #FF0000; font-size: 3;}
+.yellowtext {color: #FFCC00; font-size: 3;}
.clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
.spooky {color: #FF9100;}
diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index 3a586d061d..5c7d5a39e9 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -10,12 +10,6 @@
var/hidden_undershirt = FALSE
var/hidden_socks = FALSE
-//Species vars
-/datum/species
- var/list/cum_fluids = list("semen")
- var/list/milk_fluids = list("milk")
- var/list/femcum_fluids = list("femcum")
-
//Mob procs
/mob/living/carbon/human/proc/underwear_toggle()
set name = "Toggle undergarments"
@@ -46,20 +40,12 @@
var/list/obj/item/organ/genital/genit_list = list()
if(!client?.prefs.arousable || (aphro && (client?.prefs.cit_toggles & NO_APHRO)) || (maso && !HAS_TRAIT(src, TRAIT_MASO)))
return // no adjusting made here
- if(strength>0)
- for(var/obj/item/organ/genital/G in internal_organs)
- if(!G.aroused_state && prob(strength*G.sensitivity))
- G.set_aroused_state(TRUE)
- G.update_appearance()
- if(G.aroused_state)
- genit_list += G
- else
- for(var/obj/item/organ/genital/G in internal_organs)
- if(G.aroused_state && prob(strength*G.sensitivity))
- G.set_aroused_state(FALSE)
- G.update_appearance()
- if(G.aroused_state)
- genit_list += G
+ for(var/obj/item/organ/genital/G in internal_organs)
+ if(G.genital_flags & GENITAL_CAN_AROUSE && !G.aroused_state && prob(strength*G.sensitivity))
+ G.set_aroused_state(strength > 0)
+ G.update_appearance()
+ if(G.aroused_state)
+ genit_list += G
return genit_list
/obj/item/organ/genital/proc/climaxable(mob/living/carbon/human/H, silent = FALSE) //returns the fluid source (ergo reagents holder) if found.
diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm
index ca01ef46cb..b7f178bca5 100644
--- a/modular_citadel/code/modules/arousal/genitals.dm
+++ b/modular_citadel/code/modules/arousal/genitals.dm
@@ -32,23 +32,20 @@
else
update()
-/obj/item/organ/genital/Destroy()
- if(linked_organ)
- update_link(TRUE)//this should remove any other links it has
- return ..()
-
/obj/item/organ/genital/proc/set_aroused_state(new_state)
+ if(!(genital_flags & GENITAL_CAN_AROUSE))
+ return FALSE
if(!((HAS_TRAIT(owner,TRAIT_PERMABONER) && !new_state) || HAS_TRAIT(owner,TRAIT_NEVERBONER) && new_state))
aroused_state = new_state
return aroused_state
-/obj/item/organ/genital/proc/update(removing = FALSE)
+/obj/item/organ/genital/proc/update()
if(QDELETED(src))
return
update_size()
update_appearance()
- if(linked_organ_slot || (linked_organ && removing))
- update_link(removing)
+ if(linked_organ_slot || (linked_organ && !owner))
+ update_link()
//exposure and through-clothing code
/mob/living/carbon
@@ -113,17 +110,7 @@
set desc = "Allows you to toggle which genitals are showing signs of arousal."
var/list/genital_list = list()
for(var/obj/item/organ/genital/G in internal_organs)
- var/datum/sprite_accessory/S
- switch(G.type)
- if(/obj/item/organ/genital/penis)
- S = GLOB.cock_shapes_list[G.shape]
- if(/obj/item/organ/genital/testicles)
- S = GLOB.balls_shapes_list[G.shape]
- if(/obj/item/organ/genital/vagina)
- S = GLOB.vagina_shapes_list[G.shape]
- if(/obj/item/organ/genital/breasts)
- S = GLOB.breasts_shapes_list[G.shape]
- if(S?.alt_aroused)
+ if(G.genital_flags & GENITAL_CAN_AROUSE)
genital_list += G
if(!genital_list.len) //There's nothing that can show arousal
return
@@ -174,19 +161,18 @@
return TRUE
return FALSE
-/obj/item/organ/genital/proc/update_link(removing = FALSE)
- if(!removing && owner)
+/obj/item/organ/genital/proc/update_link()
+ if(owner)
if(linked_organ)
- return
+ return FALSE
linked_organ = owner.getorganslot(linked_organ_slot)
if(linked_organ)
linked_organ.linked_organ = src
linked_organ.upon_link()
upon_link()
return TRUE
- else
- if(linked_organ)
- linked_organ.linked_organ = null
+ if(linked_organ)
+ linked_organ.linked_organ = null
linked_organ = null
return FALSE
@@ -200,10 +186,13 @@
update()
RegisterSignal(owner, COMSIG_MOB_DEATH, .proc/update_appearance)
-/obj/item/organ/genital/Remove(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE)
- update(TRUE)
- if(!QDELETED(owner))
- UnregisterSignal(owner, COMSIG_MOB_DEATH)
+/obj/item/organ/genital/Remove(special = FALSE)
+ . = ..()
+ var/mob/living/carbon/human/H = .
+ update()
+ if(!QDELETED(H))
+ UnregisterSignal(H, COMSIG_MOB_DEATH)
+ H.update_genitals()
//proc to give a player their genitals and stuff when they log in
/mob/living/carbon/human/proc/give_genitals(clean = FALSE)//clean will remove all pre-existing genitals. proc will then give them any genitals that are enabled in their DNA
@@ -238,12 +227,6 @@
/obj/item/organ/genital/proc/get_features(mob/living/carbon/human/H)
return
-/datum/species/proc/genitals_layertext(layer)
- switch(layer)
- if(GENITALS_BEHIND_LAYER)
- return "BEHIND"
- if(GENITALS_FRONT_LAYER)
- return "FRONT"
//procs to handle sprite overlays being applied to humans
@@ -262,8 +245,90 @@
update_genitals()
/mob/living/carbon/human/proc/update_genitals()
- if(!QDELETED(src))
- dna.species.handle_genitals(src)
+ if(QDELETED(src))
+ return
+ var/static/list/relevant_layers = list("[GENITALS_BEHIND_LAYER]" = "BEHIND", "[GENITALS_FRONT_LAYER]" = "FRONT")
+ var/static/list/layers_num
+ if(!layers_num)
+ for(var/L in relevant_layers)
+ LAZYSET(layers_num, L, text2num(L))
+ for(var/L in relevant_layers) //Less hardcode
+ remove_overlay(layers_num[L])
+ remove_overlay(GENITALS_EXPOSED_LAYER)
+ if(!LAZYLEN(internal_organs) || ((NOGENITALS in dna.species.species_traits) && !genital_override) || HAS_TRAIT(src, TRAIT_HUSK))
+ return
+
+ //start scanning for genitals
+
+ var/list/gen_index[GENITAL_LAYER_INDEX_LENGTH]
+ var/list/genitals_to_add
+ var/list/fully_exposed
+ for(var/obj/item/organ/genital/G in internal_organs)
+ if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes
+ LAZYADD(gen_index[G.layer_index], G)
+ for(var/L in gen_index)
+ if(L) //skip nulls
+ LAZYADD(genitals_to_add, L)
+ if(!genitals_to_add)
+ return
+ //Now we added all genitals that aren't internal and should be rendered
+ //start applying overlays
+ for(var/layer in relevant_layers)
+ var/list/standing = list()
+ var/layertext = relevant_layers[layer]
+ for(var/A in genitals_to_add)
+ var/obj/item/organ/genital/G = A
+ var/datum/sprite_accessory/S
+ var/size = G.size
+ switch(G.type)
+ if(/obj/item/organ/genital/penis)
+ S = GLOB.cock_shapes_list[G.shape]
+ if(/obj/item/organ/genital/testicles)
+ S = GLOB.balls_shapes_list[G.shape]
+ if(/obj/item/organ/genital/vagina)
+ S = GLOB.vagina_shapes_list[G.shape]
+ if(/obj/item/organ/genital/breasts)
+ S = GLOB.breasts_shapes_list[G.shape]
+
+ if(!S || S.icon_state == "none")
+ continue
+ var/aroused_state = G.aroused_state && S.alt_aroused
+
+ var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
+ if(S.center)
+ genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
+
+ if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
+ genital_overlay.color = "#[skintone2hex(skin_tone)]"
+ else
+ switch(S.color_src)
+ if("cock_color")
+ genital_overlay.color = "#[dna.features["cock_color"]]"
+ if("balls_color")
+ genital_overlay.color = "#[dna.features["balls_color"]]"
+ if("breasts_color")
+ genital_overlay.color = "#[dna.features["breasts_color"]]"
+ if("vag_color")
+ genital_overlay.color = "#[dna.features["vag_color"]]"
+
+ genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][dna.species.use_skintones ? "_s" : ""]_[aroused_state]_[layertext]"
+
+ if(layer == GENITALS_FRONT_LAYER && CHECK_BITFIELD(G.genital_flags, GENITAL_THROUGH_CLOTHES))
+ genital_overlay.layer = -GENITALS_EXPOSED_LAYER
+ LAZYADD(fully_exposed, genital_overlay) // to be added to a layer with higher priority than clothes, hence the name of the bitflag.
+ else
+ standing += genital_overlay
+
+ if(LAZYLEN(standing))
+ overlays_standing[layers_num[layer]] = standing
+
+ if(LAZYLEN(fully_exposed))
+ overlays_standing[GENITALS_EXPOSED_LAYER] = fully_exposed
+ apply_overlay(GENITALS_EXPOSED_LAYER)
+
+ for(var/L in relevant_layers)
+ apply_overlay(layers_num[L])
+
//Checks to see if organs are new on the mob, and changes their colours so that they don't get crazy colours.
/mob/living/carbon/human/proc/emergent_genital_call()
@@ -292,86 +357,3 @@
else if (willyCheck == FALSE)
dna.features["cock_color"] = dna.features["breasts_color"]
return TRUE
-
-/datum/species/proc/handle_genitals(mob/living/carbon/human/H)//more like handle sadness
- if(!H)//no args
- CRASH("H = null")
- if(!LAZYLEN(H.internal_organs) || ((NOGENITALS in species_traits) && !H.genital_override) || HAS_TRAIT(H, TRAIT_HUSK))
- return
- var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_FRONT_LAYER)
-
- for(var/L in relevant_layers) //Less hardcode
- H.remove_overlay(L)
- H.remove_overlay(GENITALS_EXPOSED_LAYER)
- //start scanning for genitals
-
- var/list/gen_index[GENITAL_LAYER_INDEX_LENGTH]
- var/list/genitals_to_add
- var/list/fully_exposed
- for(var/obj/item/organ/genital/G in H.internal_organs)
- if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes
- LAZYADD(gen_index[G.layer_index], G)
- for(var/L in gen_index)
- if(L) //skip nulls
- LAZYADD(genitals_to_add, L)
- if(!genitals_to_add)
- return
- //Now we added all genitals that aren't internal and should be rendered
- //start applying overlays
- for(var/layer in relevant_layers)
- var/list/standing = list()
- var/layertext = genitals_layertext(layer)
- for(var/A in genitals_to_add)
- var/obj/item/organ/genital/G = A
- var/datum/sprite_accessory/S
- var/size = G.size
- var/aroused_state = G.aroused_state
- switch(G.type)
- if(/obj/item/organ/genital/penis)
- S = GLOB.cock_shapes_list[G.shape]
- if(/obj/item/organ/genital/testicles)
- S = GLOB.balls_shapes_list[G.shape]
- if(/obj/item/organ/genital/vagina)
- S = GLOB.vagina_shapes_list[G.shape]
- if(/obj/item/organ/genital/breasts)
- S = GLOB.breasts_shapes_list[G.shape]
-
- if(!S || S.icon_state == "none")
- continue
-
- var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
- genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
-
- if(S.center)
- genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
-
- if(use_skintones && H.dna.features["genitals_use_skintone"])
- genital_overlay.color = "#[skintone2hex(H.skin_tone)]"
- else
- switch(S.color_src)
- if("cock_color")
- genital_overlay.color = "#[H.dna.features["cock_color"]]"
- if("balls_color")
- genital_overlay.color = "#[H.dna.features["balls_color"]]"
- if("breasts_color")
- genital_overlay.color = "#[H.dna.features["breasts_color"]]"
- if("vag_color")
- genital_overlay.color = "#[H.dna.features["vag_color"]]"
-
- genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]-s_[aroused_state]_[layertext]"
-
- if(layer == GENITALS_FRONT_LAYER && CHECK_BITFIELD(G.genital_flags, GENITAL_THROUGH_CLOTHES))
- genital_overlay.layer = -GENITALS_EXPOSED_LAYER
- LAZYADD(fully_exposed, genital_overlay) // to be added to a layer with higher priority than clothes, hence the name of the bitflag.
- else
- standing += genital_overlay
-
- if(LAZYLEN(standing))
- H.overlays_standing[layer] = standing
-
- if(LAZYLEN(fully_exposed))
- H.overlays_standing[GENITALS_EXPOSED_LAYER] = fully_exposed
- H.apply_overlay(GENITALS_EXPOSED_LAYER)
-
- for(var/L in relevant_layers)
- H.apply_overlay(L)
diff --git a/modular_citadel/code/modules/arousal/genitals_sprite_accessories.dm b/modular_citadel/code/modules/arousal/genitals_sprite_accessories.dm
index 0c1763b8e2..594fc83e46 100644
--- a/modular_citadel/code/modules/arousal/genitals_sprite_accessories.dm
+++ b/modular_citadel/code/modules/arousal/genitals_sprite_accessories.dm
@@ -85,36 +85,36 @@
//Vaginas
/datum/sprite_accessory/vagina
icon = 'modular_citadel/icons/obj/genitals/vagina_onmob.dmi'
- icon_state = null
name = "vagina"
color_src = "vag_color"
+ alt_aroused = TRUE
/datum/sprite_accessory/vagina/human
icon_state = "human"
name = "Human"
- alt_aroused = TRUE
/datum/sprite_accessory/vagina/tentacles
icon_state = "tentacle"
name = "Tentacle"
- alt_aroused = TRUE
/datum/sprite_accessory/vagina/dentata
icon_state = "dentata"
name = "Dentata"
- alt_aroused = TRUE
/datum/sprite_accessory/vagina/hairy
icon_state = "hairy"
name = "Hairy"
+ alt_aroused = FALSE
/datum/sprite_accessory/vagina/spade
icon_state = "spade"
name = "Spade"
+ alt_aroused = FALSE
/datum/sprite_accessory/vagina/furred
icon_state = "furred"
name = "Furred"
+ alt_aroused = FALSE
/datum/sprite_accessory/vagina/gaping
icon_state = "gaping"
@@ -125,7 +125,6 @@
icon = 'modular_citadel/icons/obj/genitals/breasts_onmob.dmi'
name = "breasts"
color_src = "breasts_color"
- alt_aroused = TRUE
/datum/sprite_accessory/breasts/pair
icon_state = "pair"
diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm
index d1f1a08ea8..dc7923e448 100644
--- a/modular_citadel/code/modules/arousal/organs/breasts.dm
+++ b/modular_citadel/code/modules/arousal/organs/breasts.dm
@@ -1,3 +1,6 @@
+#define BREASTS_ICON_MIN_SIZE 1
+#define BREASTS_ICON_MAX_SIZE 6
+
/obj/item/organ/genital/breasts
name = "breasts"
desc = "Female milk producing organs."
@@ -9,7 +12,7 @@
fluid_id = /datum/reagent/consumable/milk
fluid_rate = MILK_RATE
shape = "pair"
- genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION
+ genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION|GENITAL_CAN_AROUSE
masturbation_verb = "massage"
arousal_verb = "Your breasts start feeling sensitive"
unarousal_verb = "Your breasts no longer feel sensitive"
@@ -46,22 +49,24 @@
desc += " You estimate that they're [uppertext(size)]-cups."
if(CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION) && aroused_state)
- desc += " They're leaking [initial(fluid_id.name)]."
- var/string
+ var/datum/reagent/R = GLOB.chemical_reagents_list[fluid_id]
+ if(R)
+ desc += " They're leaking [lowertext(R.name)]."
+ var/datum/sprite_accessory/S = GLOB.breasts_shapes_list[shape]
+ var/icon_shape = S ? S.icon_state : "pair"
+ var/icon_size = CLAMP(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE)
+ icon_state = "breasts_[icon_shape]_[breast_values[icon_size]]"
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
color = "#[skintone2hex(H.skin_tone)]"
- string = "breasts_[GLOB.breasts_shapes_icons[shape]]_[size]-s"
+ icon_state += "_s"
else
color = "#[owner.dna.features["breasts_color"]]"
- string = "breasts_[GLOB.breasts_shapes_icons[shape]]_[size]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
- icon_state = sanitize_text(string)
H.update_genitals()
- icon_state = sanitize_text(string)
//Allows breasts to grow and change size, with sprite changes too.
//maximum wah
@@ -120,7 +125,6 @@
color = "#[D.features["breasts_color"]]"
size = D.features["breasts_size"]
shape = D.features["breasts_shape"]
- fluid_id = D.features["breasts_fluid"]
if(!D.features["breasts_producing"])
DISABLE_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
if(!isnum(size))
@@ -129,3 +133,6 @@
cached_size = size
size = breast_values[size]
prev_size = cached_size
+
+#undef BREASTS_ICON_MIN_SIZE
+#undef BREASTS_ICON_MAX_SIZE
\ No newline at end of file
diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm
index c6d3c764ac..38f463a97c 100644
--- a/modular_citadel/code/modules/arousal/organs/penis.dm
+++ b/modular_citadel/code/modules/arousal/organs/penis.dm
@@ -8,13 +8,13 @@
masturbation_verb = "stroke"
arousal_verb = "You pop a boner"
unarousal_verb = "Your boner goes down"
- genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH
+ genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
linked_organ_slot = ORGAN_SLOT_TESTICLES
fluid_transfer_factor = 0.5
size = 2 //arbitrary value derived from length and girth for sprites.
layer_index = PENIS_LAYER_INDEX
var/length = 6 //inches
- var/prev_length = 6 //really should be renamed to prev_length
+ var/prev_length = 6
var/girth = 4.38
var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm
@@ -73,22 +73,21 @@
/obj/item/organ/genital/penis/update_appearance()
. = ..()
- var/string
+ var/datum/sprite_accessory/S = GLOB.cock_shapes_list[shape]
+ var/icon_shape = S ? S.icon_state : "human"
+ icon_state = "penis_[icon_shape]_[size]"
var/lowershape = lowertext(shape)
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth."
-
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
color = "#[skintone2hex(H.skin_tone)]"
- string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]-s"
+ icon_state += "_s"
else
color = "#[owner.dna.features["cock_color"]]"
- string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
- icon_state = sanitize_text(string)
H.update_genitals()
/obj/item/organ/genital/penis/get_features(mob/living/carbon/human/H)
diff --git a/modular_citadel/code/modules/arousal/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm
index e5b34926de..eb6c1536cb 100644
--- a/modular_citadel/code/modules/arousal/organs/testicles.dm
+++ b/modular_citadel/code/modules/arousal/organs/testicles.dm
@@ -43,19 +43,19 @@
/obj/item/organ/genital/testicles/update_appearance()
. = ..()
desc = "You see an [size_name] pair of testicles."
+ var/datum/sprite_accessory/S = GLOB.balls_shapes_list[shape]
+ var/icon_shape = S ? S.icon_state : "single"
+ icon_state = "testicles_[icon_shape]_[size]"
if(owner)
- var/string
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
color = "#[skintone2hex(H.skin_tone)]"
- string = "testicles_[GLOB.balls_shapes_icons[shape]]_[size]-s"
+ icon_state += "_s"
else
color = "#[owner.dna.features["balls_color"]]"
- string = "testicles_[GLOB.balls_shapes_icons[shape]]_[size]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
- icon_state = sanitize_text(string)
H.update_genitals()
/obj/item/organ/genital/testicles/get_features(mob/living/carbon/human/H)
@@ -68,7 +68,6 @@
shape = D.features["balls_shape"]
if(D.features["balls_shape"] == "Hidden")
ENABLE_BITFIELD(genital_flags, GENITAL_INTERNAL)
- fluid_id = D.features["balls_fluid"]
fluid_rate = D.features["balls_cum_rate"]
fluid_mult = D.features["balls_cum_mult"]
fluid_efficiency = D.features["balls_efficiency"]
diff --git a/modular_citadel/code/modules/arousal/organs/vagina.dm b/modular_citadel/code/modules/arousal/organs/vagina.dm
index 3f1bcc5f9b..311afe75b0 100644
--- a/modular_citadel/code/modules/arousal/organs/vagina.dm
+++ b/modular_citadel/code/modules/arousal/organs/vagina.dm
@@ -6,7 +6,7 @@
zone = BODY_ZONE_PRECISE_GROIN
slot = "vagina"
size = 1 //There is only 1 size right now
- genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH
+ genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
masturbation_verb = "finger"
arousal_verb = "You feel wetness on your crotch"
unarousal_verb = "You no longer feel wet"
@@ -22,7 +22,7 @@
/obj/item/organ/genital/vagina/update_appearance()
. = ..()
- var/string //Keeping this code here, so making multiple sprites for the different kinds is easier.
+ icon_state = "vagina"
var/lowershape = lowertext(shape)
var/details
@@ -55,13 +55,11 @@
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
color = "#[skintone2hex(H.skin_tone)]"
- string = "vagina-s"
+ icon_state += "_s"
else
color = "#[owner.dna.features["vag_color"]]"
- string = "vagina"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
- icon_state = sanitize_text(string)
H.update_genitals()
/obj/item/organ/genital/vagina/get_features(mob/living/carbon/human/H)
diff --git a/modular_citadel/code/modules/client/loadout/_security.dm b/modular_citadel/code/modules/client/loadout/_security.dm
index 7a49b1f049..c9591540e6 100644
--- a/modular_citadel/code/modules/client/loadout/_security.dm
+++ b/modular_citadel/code/modules/client/loadout/_security.dm
@@ -5,7 +5,7 @@
restricted_roles = list("Head of Security")
/datum/gear/navybluehosberet
- name = "Head of security's Naviblue beret"
+ name = "Head of security's navyblue beret"
category = SLOT_HEAD
path = /obj/item/clothing/head/beret/sec/navyhos
restricted_roles = list("Head of Security")
@@ -13,13 +13,13 @@
/datum/gear/navybluejackethos
name = "head of security's navyblue jacket"
category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/security/hos
+ path = /obj/item/clothing/suit/armor/hos/navyblue
restricted_roles = list("Head of Security")
/datum/gear/navybluejacketofficer
name = "security officer's navyblue jacket"
category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/security/officer
+ path = /obj/item/clothing/suit/armor/navyblue
restricted_roles = list("Security Officer")
/datum/gear/navyblueofficerberet
@@ -37,7 +37,7 @@
/datum/gear/navybluejacketwarden
name = "warden navyblue jacket"
category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/security/warden
+ path = /obj/item/clothing/suit/armor/vest/warden/navyblue
restricted_roles = list("Warden")
/datum/gear/navybluewardenberet
diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm
index 5584181a70..334f301dca 100644
--- a/modular_citadel/code/modules/client/preferences_savefile.dm
+++ b/modular_citadel/code/modules/client/preferences_savefile.dm
@@ -57,13 +57,11 @@
WRITE_FILE(S["feature_balls_size"], features["balls_size"])
WRITE_FILE(S["feature_balls_shape"], features["balls_shape"])
WRITE_FILE(S["feature_balls_sack_size"], features["balls_sack_size"])
- WRITE_FILE(S["feature_balls_fluid"], features["balls_fluid"])
//breasts features
WRITE_FILE(S["feature_has_breasts"], features["has_breasts"])
WRITE_FILE(S["feature_breasts_size"], features["breasts_size"])
WRITE_FILE(S["feature_breasts_shape"], features["breasts_shape"])
WRITE_FILE(S["feature_breasts_color"], features["breasts_color"])
- WRITE_FILE(S["feature_breasts_fluid"], features["breasts_fluid"])
WRITE_FILE(S["feature_breasts_producing"], features["breasts_producing"])
//vagina features
WRITE_FILE(S["feature_has_vag"], features["has_vag"])
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index 03a4a56147..e1d204c74d 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -557,3 +557,13 @@
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mutantrace_variation = NONE
+
+/obj/item/toy/plush/mammal/dog/fritz
+ icon = 'icons/obj/custom.dmi'
+ icon_state = "fritz"
+ item_state = "fritz"
+ attack_verb = list("barked", "boofed", "shotgun'd")
+ obj_flags = UNIQUE_RENAME
+ unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
+ mutantrace_variation = NONE
+
diff --git a/modular_citadel/code/modules/custom_loadout/read_from_file.dm b/modular_citadel/code/modules/custom_loadout/read_from_file.dm
index 78124b0324..004757add4 100644
--- a/modular_citadel/code/modules/custom_loadout/read_from_file.dm
+++ b/modular_citadel/code/modules/custom_loadout/read_from_file.dm
@@ -18,13 +18,13 @@ GLOBAL_LIST(custom_item_list)
if(copytext(line,1,3) == "//") //Commented line, ignore. 3 == length("//") + 1
continue
var/ckey_str_sep = findtext(line, "|") //Process our stuff..
- var/char_str_sep = findtext(line, "|", ckey_str_sep + length(ckey_str_sep))
- var/job_str_sep = findtext(line, "|", char_str_sep + length(char_str_sep))
- var/item_str_sep = findtext(line, "|", job_str_sep + length(job_str_sep))
+ var/char_str_sep = findtext(line, "|", ckey_str_sep + length(line[ckey_str_sep]))
+ var/job_str_sep = findtext(line, "|", char_str_sep + length(line[char_str_sep]))
+ var/item_str_sep = findtext(line, "|", job_str_sep + length(line[job_str_sep]))
var/ckey_str = ckey(copytext(line, 1, ckey_str_sep))
- var/char_str = copytext(line, ckey_str_sep + length(ckey_str_sep), char_str_sep)
- var/job_str = copytext(line, char_str_sep + length(char_str_sep), job_str_sep)
- var/item_str = copytext(line, job_str_sep + length(job_str_sep), item_str_sep)
+ var/char_str = copytext(line, ckey_str_sep + length(line[ckey_str_sep]), char_str_sep)
+ var/job_str = copytext(line, char_str_sep + length(line[char_str_sep]), job_str_sep)
+ var/item_str = copytext(line, job_str_sep + length(line[job_str_sep]), item_str_sep)
if(!ckey_str || !char_str || !job_str || !item_str || !length(ckey_str) || !length(char_str) || !length(job_str) || !length(item_str))
log_admin("Errored custom_items_whitelist line: [line] - Component/separator missing!")
if(!islist(GLOB.custom_item_list[ckey_str]))
@@ -42,7 +42,7 @@ GLOBAL_LIST(custom_item_list)
for(var/item_string in item_strings)
var/path_str_sep = findtext(item_string, "=")
var/path = copytext(item_string, 1, path_str_sep) //Path to spawn
- var/amount = copytext(item_string, path_str_sep + length(path_str_sep)) //Amount to spawn
+ var/amount = copytext(item_string, path_str_sep + length(item_string[path_str_sep])) //Amount to spawn
//world << "DEBUG: Item string [item_string] processed"
amount = text2num(amount)
path = text2path(path)
diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
index 47de736c3b..f7c0b343c3 100644
--- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
+++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
@@ -46,34 +46,22 @@
cell.use(shot.e_cost)//... drain the cell cell
chambered = 0 //either way, released the prepared shot
-/obj/item/gun/energy/pumpaction/select_fire(mob/living/user) //makes it so that it doesn't rack itself when changing firing modes unless already racked
- select++
- if (select > ammo_type.len)
- select = 1
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
- fire_sound = shot.fire_sound
- fire_delay = shot.delay
- if (shot.select_name)
- to_chat(user, "[src] is now set to [shot.select_name]. ")
- if(chambered)
- chambered = 0
- recharge_newshot(1)
- update_icon()
- if(ismob(loc)) //forces inhands to update
- var/mob/M = loc
- M.update_inv_hands()
- return
+/obj/item/gun/energy/pumpaction/post_set_firemode()
+ var/has_shot = chambered
+ . = ..(recharge_newshot = FALSE)
+ if(has_shot)
+ recharge_newshot(TRUE)
/obj/item/gun/energy/pumpaction/update_icon() //adds racked indicators
..()
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
if(chambered)
add_overlay("[icon_state]_rack_[shot.select_name]")
else
add_overlay("[icon_state]_rack_empty")
/obj/item/gun/energy/pumpaction/proc/pump(mob/M) //pumping proc. Checks if the gun is empty and plays a different sound if it is.
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
if(cell.charge < shot.e_cost)
playsound(M, 'sound/weapons/laserPumpEmpty.ogg', 100, 1) //Ends with three beeps made from highly processed knife honing noises
else
@@ -102,7 +90,7 @@
/obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file, style_flags = NONE) //ammo counter for inhands
. = ..()
var/ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1)
- var/obj/item/ammo_casing/energy/shot = ammo_type[select]
+ var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]
if(isinhands)
if(cell.charge < shot.e_cost)
var/mutable_appearance/ammo_inhand = mutable_appearance(icon_file, "[item_state]_empty")
diff --git a/modular_citadel/icons/mob/markings_notmammals.dmi b/modular_citadel/icons/mob/markings_notmammals.dmi
index 79c97968ed..43452c8d14 100644
Binary files a/modular_citadel/icons/mob/markings_notmammals.dmi and b/modular_citadel/icons/mob/markings_notmammals.dmi differ
diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi
index a77a109eb9..50c29bb75f 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/genitals/breasts.dmi b/modular_citadel/icons/obj/genitals/breasts.dmi
index d70207ee69..24656062d2 100644
Binary files a/modular_citadel/icons/obj/genitals/breasts.dmi and b/modular_citadel/icons/obj/genitals/breasts.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi
index 371041b6f4..578086c4c3 100644
Binary files a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi and b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/penis.dmi b/modular_citadel/icons/obj/genitals/penis.dmi
index 517758b248..c3fd184a7c 100644
Binary files a/modular_citadel/icons/obj/genitals/penis.dmi and b/modular_citadel/icons/obj/genitals/penis.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/penis_onmob.dmi b/modular_citadel/icons/obj/genitals/penis_onmob.dmi
index 4f84c52360..4a92bffa2a 100644
Binary files a/modular_citadel/icons/obj/genitals/penis_onmob.dmi and b/modular_citadel/icons/obj/genitals/penis_onmob.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi b/modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi
index ae2339e2e0..e8efbec216 100644
Binary files a/modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi and b/modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/testicles.dmi b/modular_citadel/icons/obj/genitals/testicles.dmi
index 3d7a5f4f48..386eab0956 100644
Binary files a/modular_citadel/icons/obj/genitals/testicles.dmi and b/modular_citadel/icons/obj/genitals/testicles.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/vagina.dmi b/modular_citadel/icons/obj/genitals/vagina.dmi
index 39bdd48e89..1bbe62ba0e 100644
Binary files a/modular_citadel/icons/obj/genitals/vagina.dmi and b/modular_citadel/icons/obj/genitals/vagina.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi
index ab71b22e3b..6c34ffadfa 100644
Binary files a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi and b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi differ
diff --git a/modular_citadel/icons/vending_restock.dmi b/modular_citadel/icons/vending_restock.dmi
deleted file mode 100644
index 5df68f4e4c..0000000000
Binary files a/modular_citadel/icons/vending_restock.dmi and /dev/null differ
diff --git a/sound/weapons/bowdraw.wav b/sound/weapons/bowdraw.wav
new file mode 100644
index 0000000000..bba8a87e06
Binary files /dev/null and b/sound/weapons/bowdraw.wav differ
diff --git a/sound/weapons/bowfire.wav b/sound/weapons/bowfire.wav
new file mode 100644
index 0000000000..c079d43475
Binary files /dev/null and b/sound/weapons/bowfire.wav differ
diff --git a/strings/flavor_objectives/ninja_helping.txt b/strings/flavor_objectives/ninja_helping.txt
new file mode 100644
index 0000000000..1280939b5c
--- /dev/null
+++ b/strings/flavor_objectives/ninja_helping.txt
@@ -0,0 +1,6 @@
+Nanotrasen want to make sure that their employees are on the up-and-up. Try to find any blackmail you can.
+Increase productivity however you can.
+You are a security ninja. Answer to the Head of Security, and follow space law.
+You are a cargo ninja. Answer to the Quartermaster, and do what they say.
+Nanotrasen want you to ensure maximum morale. Protect the members of the crew who are on break.
+Ensure that all the paperwork is being done.
\ No newline at end of file
diff --git a/strings/flavor_objectives/ninja_syndie.txt b/strings/flavor_objectives/ninja_syndie.txt
new file mode 100644
index 0000000000..4527c693f4
--- /dev/null
+++ b/strings/flavor_objectives/ninja_syndie.txt
@@ -0,0 +1,5 @@
+The Gorlex Marauders want you to teach the heads of staff a lesson they will never forget.
+Waffle Co. wants you To cause as much humorous terrorism against Nanotrasen as possible! How? We don’t care as long as it’s entertaining! Be as creative and exciting as possible when carrying out your dirty deeds. Have fun!
+The Tiger Cooperative want you to kill one of the station's beloved pets. Make a show of it, though you don't have to reveal yourself.
+The Animal Rights Consortium needs you to save the innocent non-humanoid creatures aboard Citadel Station by any means necessary. Use your best judgement to decide whether an animal or xenobiological is abused, but if they are, ensure the abuser is punished. Avoid killing too many people if possible, and if you do harm any creatures, you will be terminated upon extraction.
+Donk Co. wants ransom money, and you are going to get it. Your goal is to kidnap and crewmember you can get your hands on and hold them hostage until you get something of significant value. Try to work out the best deal you can. Remember that Higher Value Targets are generally going to get a better deal so try to prioritize heads of staff if possible. We do not approve of mindless killing of Nanotrasen employees, so don’t do it.
\ No newline at end of file
diff --git a/strings/flavor_objectives/traitor.txt b/strings/flavor_objectives/traitor.txt
new file mode 100644
index 0000000000..6d54c8ed9d
--- /dev/null
+++ b/strings/flavor_objectives/traitor.txt
@@ -0,0 +1,8 @@
+The Gorlex Marauders want you to teach the heads of staff a lesson they will never forget.
+Show Nanotrasen the utility of a 40% oxygen atmosphere.
+Waffle Co. wants you To cause as much humorous terrorism against Nanotrasen as possible! How? We don’t care as long as it’s entertaining! Be as creative and exciting as possible when carrying out your dirty deeds. Have fun!
+Kill one of the station's beloved pets. Make a show of it, though you don't have to reveal yourself.
+The Tiger Cooperative want you to get their illegal technology spread through the station.
+The Animal Rights Consortium needs you to save the innocent non-humanoid creatures aboard Citadel Station by any means necessary. Use your best judgement to decide whether an animal or xenobiological is abused, but if they are, ensure the abuser is punished. Avoid killing too many people if possible, and if you do harm any creatures, you will be terminated upon extraction.
+Donk Co. wants ransom money, and you are going to get it. Your goal is to kidnap and crewmember you can get your hands on and hold them hostage until you get something of significant value. Try to work out the best deal you can. Remember that Higher Value Targets are generally going to get a better deal so try to prioritize heads of staff if possible. We do not approve of mindless killing of Nanotrasen employees, so don’t do it.
+The Gorlex Marauders want you to steal as many shoes as possible. Lay broken glass everywhere.
\ No newline at end of file
diff --git a/strings/flavor_objectives/traitor/assistant.txt b/strings/flavor_objectives/traitor/assistant.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/strings/flavor_objectives/traitor/engineering.txt b/strings/flavor_objectives/traitor/engineering.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/strings/flavor_objectives/traitor/medical.txt b/strings/flavor_objectives/traitor/medical.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/strings/flavor_objectives/traitor/science.txt b/strings/flavor_objectives/traitor/science.txt
new file mode 100644
index 0000000000..6367e78da2
--- /dev/null
+++ b/strings/flavor_objectives/traitor/science.txt
@@ -0,0 +1 @@
+The Tiger Cooperative want you to slow down the process of research as much as possible.
\ No newline at end of file
diff --git a/strings/flavor_objectives/wizard.txt b/strings/flavor_objectives/wizard.txt
new file mode 100644
index 0000000000..e65a6052bc
--- /dev/null
+++ b/strings/flavor_objectives/wizard.txt
@@ -0,0 +1,4 @@
+Cause as much creative mayhem as you can aboard the station! The more outlandish your methods of achieving this, the better! Make sure there's a decent amount of crew alive to tell of your tale.
+The Wizard Federation have sent you to take over the station by force. Kill the captain and take their place. The magocracy starts now.
+You are the slipperiest wizard there ever was. Be loud, cause a ruckus, start a manhunt, and keep it going for as long as you can.
+The crew must be shown the wonders of magic. Do some tricks for them. If they stop moving, that means they're in awe.
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index d183c5a60b..203d5a22de 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -153,6 +153,7 @@
#include "code\__HELPERS\type2type_vr.dm"
#include "code\__HELPERS\typelists.dm"
#include "code\__HELPERS\unsorted.dm"
+#include "code\__HELPERS\vector.dm"
#include "code\__HELPERS\view.dm"
#include "code\__HELPERS\sorts\__main.dm"
#include "code\__HELPERS\sorts\InsertSort.dm"
@@ -234,6 +235,7 @@
#include "code\controllers\configuration\entries\fail2topic.dm"
#include "code\controllers\configuration\entries\game_options.dm"
#include "code\controllers\configuration\entries\general.dm"
+#include "code\controllers\configuration\entries\plushies.dm"
#include "code\controllers\subsystem\acid.dm"
#include "code\controllers\subsystem\adjacent_air.dm"
#include "code\controllers\subsystem\air.dm"
@@ -273,6 +275,7 @@
#include "code\controllers\subsystem\pathfinder.dm"
#include "code\controllers\subsystem\persistence.dm"
#include "code\controllers\subsystem\ping.dm"
+#include "code\controllers\subsystem\profiler.dm"
#include "code\controllers\subsystem\radiation.dm"
#include "code\controllers\subsystem\radio.dm"
#include "code\controllers\subsystem\research.dm"
@@ -291,7 +294,6 @@
#include "code\controllers\subsystem\vis_overlays.dm"
#include "code\controllers\subsystem\vore.dm"
#include "code\controllers\subsystem\vote.dm"
-#include "code\controllers\subsystem\weather.dm"
#include "code\controllers\subsystem\processing\chemistry.dm"
#include "code\controllers\subsystem\processing\circuit.dm"
#include "code\controllers\subsystem\processing\fastprocess.dm"
@@ -302,6 +304,7 @@
#include "code\controllers\subsystem\processing\processing.dm"
#include "code\controllers\subsystem\processing\projectiles.dm"
#include "code\controllers\subsystem\processing\quirks.dm"
+#include "code\controllers\subsystem\processing\weather.dm"
#include "code\controllers\subsystem\processing\wet_floors.dm"
#include "code\datums\action.dm"
#include "code\datums\ai_laws.dm"
@@ -489,12 +492,12 @@
#include "code\datums\elements\dusts_on_leaving_area.dm"
#include "code\datums\elements\earhealing.dm"
#include "code\datums\elements\ghost_role_eligibility.dm"
+#include "code\datums\elements\mob_holder.dm"
#include "code\datums\elements\wuv.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
#include "code\datums\helper_datums\icon_snapshot.dm"
#include "code\datums\helper_datums\teleport.dm"
-#include "code\datums\helper_datums\topic_input.dm"
#include "code\datums\looping_sounds\_looping_sound.dm"
#include "code\datums\looping_sounds\item_sounds.dm"
#include "code\datums\looping_sounds\machinery_sounds.dm"
@@ -587,6 +590,7 @@
#include "code\game\gamemodes\game_mode.dm"
#include "code\game\gamemodes\objective.dm"
#include "code\game\gamemodes\objective_items.dm"
+#include "code\game\gamemodes\objective_sabotage.dm"
#include "code\game\gamemodes\bloodsucker\bloodsucker.dm"
#include "code\game\gamemodes\bloodsucker\hunter.dm"
#include "code\game\gamemodes\brother\traitor_bro.dm"
@@ -669,7 +673,6 @@
#include "code\game\machinery\magnet.dm"
#include "code\game\machinery\mass_driver.dm"
#include "code\game\machinery\navbeacon.dm"
-#include "code\game\machinery\newscaster.dm"
#include "code\game\machinery\PDApainter.dm"
#include "code\game\machinery\quantum_pad.dm"
#include "code\game\machinery\recharger.dm"
@@ -872,6 +875,7 @@
#include "code\game\objects\items\cosmetics.dm"
#include "code\game\objects\items\courtroom.dm"
#include "code\game\objects\items\crayons.dm"
+#include "code\game\objects\items\debug_items.dm"
#include "code\game\objects\items\defib.dm"
#include "code\game\objects\items\dehy_carp.dm"
#include "code\game\objects\items\dice.dm"
@@ -984,6 +988,7 @@
#include "code\game\objects\items\implants\implant_exile.dm"
#include "code\game\objects\items\implants\implant_explosive.dm"
#include "code\game\objects\items\implants\implant_freedom.dm"
+#include "code\game\objects\items\implants\implant_hijack.dm"
#include "code\game\objects\items\implants\implant_krav_maga.dm"
#include "code\game\objects\items\implants\implant_mindshield.dm"
#include "code\game\objects\items\implants\implant_misc.dm"
@@ -1397,6 +1402,7 @@
#include "code\modules\antagonists\clockcult\clock_structures\traps\brass_skewer.dm"
#include "code\modules\antagonists\clockcult\clock_structures\traps\power_null.dm"
#include "code\modules\antagonists\clockcult\clock_structures\traps\steam_vent.dm"
+#include "code\modules\antagonists\collector\collector.dm"
#include "code\modules\antagonists\cult\blood_magic.dm"
#include "code\modules\antagonists\cult\cult.dm"
#include "code\modules\antagonists\cult\cult_comms.dm"
@@ -2131,7 +2137,6 @@
#include "code\modules\mob\living\damage_procs.dm"
#include "code\modules\mob\living\death.dm"
#include "code\modules\mob\living\emote.dm"
-#include "code\modules\mob\living\inhand_holder.dm"
#include "code\modules\mob\living\life.dm"
#include "code\modules\mob\living\living.dm"
#include "code\modules\mob\living\living_defense.dm"
@@ -2205,7 +2210,6 @@
#include "code\modules\mob\living\carbon\human\dummy.dm"
#include "code\modules\mob\living\carbon\human\emote.dm"
#include "code\modules\mob\living\carbon\human\examine.dm"
-#include "code\modules\mob\living\carbon\human\examine_vr.dm"
#include "code\modules\mob\living\carbon\human\human.dm"
#include "code\modules\mob\living\carbon\human\human_defense.dm"
#include "code\modules\mob\living\carbon\human\human_defines.dm"
@@ -2468,6 +2472,15 @@
#include "code\modules\modular_computers\hardware\printer.dm"
#include "code\modules\modular_computers\hardware\recharger.dm"
#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
+#include "code\modules\newscaster\_news.dm"
+#include "code\modules\newscaster\feed_channel.dm"
+#include "code\modules\newscaster\feed_comment.dm"
+#include "code\modules\newscaster\feed_message.dm"
+#include "code\modules\newscaster\ghostread.dm"
+#include "code\modules\newscaster\news_network.dm"
+#include "code\modules\newscaster\newscaster_machine.dm"
+#include "code\modules\newscaster\newspaper.dm"
+#include "code\modules\newscaster\wanted_message.dm"
#include "code\modules\ninja\__ninjaDefines.dm"
#include "code\modules\ninja\energy_katana.dm"
#include "code\modules\ninja\ninja_event.dm"
@@ -2585,6 +2598,7 @@
#include "code\modules\projectiles\ammunition\ballistic\smg.dm"
#include "code\modules\projectiles\ammunition\ballistic\sniper.dm"
#include "code\modules\projectiles\ammunition\caseless\_caseless.dm"
+#include "code\modules\projectiles\ammunition\caseless\arrow.dm"
#include "code\modules\projectiles\ammunition\caseless\ferromagnetic.dm"
#include "code\modules\projectiles\ammunition\caseless\foam.dm"
#include "code\modules\projectiles\ammunition\caseless\misc.dm"
@@ -2615,6 +2629,7 @@
#include "code\modules\projectiles\boxes_magazines\external\toy.dm"
#include "code\modules\projectiles\boxes_magazines\internal\_cylinder.dm"
#include "code\modules\projectiles\boxes_magazines\internal\_internal.dm"
+#include "code\modules\projectiles\boxes_magazines\internal\bow.dm"
#include "code\modules\projectiles\boxes_magazines\internal\grenade.dm"
#include "code\modules\projectiles\boxes_magazines\internal\misc.dm"
#include "code\modules\projectiles\boxes_magazines\internal\revolver.dm"
@@ -2625,6 +2640,7 @@
#include "code\modules\projectiles\guns\energy.dm"
#include "code\modules\projectiles\guns\magic.dm"
#include "code\modules\projectiles\guns\ballistic\automatic.dm"
+#include "code\modules\projectiles\guns\ballistic\bow.dm"
#include "code\modules\projectiles\guns\ballistic\laser_gatling.dm"
#include "code\modules\projectiles\guns\ballistic\launchers.dm"
#include "code\modules\projectiles\guns\ballistic\magweapon.dm"
@@ -2677,6 +2693,7 @@
#include "code\modules\projectiles\projectile\energy\tesla.dm"
#include "code\modules\projectiles\projectile\magic\spellcard.dm"
#include "code\modules\projectiles\projectile\reusable\_reusable.dm"
+#include "code\modules\projectiles\projectile\reusable\arrow.dm"
#include "code\modules\projectiles\projectile\reusable\foam_dart.dm"
#include "code\modules\projectiles\projectile\reusable\magspear.dm"
#include "code\modules\projectiles\projectile\special\curse.dm"
diff --git a/tgui-next/README.md b/tgui-next/README.md
index df801684c6..beb7aaff80 100644
--- a/tgui-next/README.md
+++ b/tgui-next/README.md
@@ -65,6 +65,9 @@ Run one of the following:
hot module replacement and logging facilities in all running instances
of tgui. In short, this means that you will instantly see changes in the
game as you code it. Very useful, highly recommended.
+ In order to use, you should start the game server first, connect to it so dreamseeker is
+ open, then start the dev server. You'll know if it's hooked correctly if data gets dumped
+ to the log when tgui windows are opened.
- `bin/tgui --dev --reload` - reload byond cache once.
- `bin/tgui --dev --debug` - run server with debug logging enabled.
- `bin/tgui --dev --no-hot` - disable hot module replacement (helps when
@@ -220,7 +223,6 @@ This way, `Button` can pull out the `className` generated by the `Box`.
```
`Box` units, like width, height and margins can be defined in two ways:
-
- By plain numbers (1 unit equals `0.5em`);
- In absolute measures, by providing a full unit string (e.g. `100px`).
@@ -239,6 +241,8 @@ Props:
- `height: number` - Box height.
- `minHeight: number` - Box minimum height.
- `maxHeight: number` - Box maximum height.
+- `fontSize: number` - Font size.
+- `fontFamily: string` - Font family.
- `lineHeight: number` - Directly affects the height of text lines.
Useful for adjusting button height.
- `inline: boolean` - Forces the `Box` to appear as an `inline-block`,
@@ -254,6 +258,7 @@ all available horizontal space.
- `opacity: number` - Opacity, from 0 to 1.
- `bold: boolean` - Make text bold.
- `italic: boolean` - Make text italic.
+- `nowrap: boolean` - Stops text from wrapping.
- `textAlign: string` - Align text inside the box.
- `left` (default)
- `center`
@@ -293,11 +298,55 @@ over the button.
- `bottom` (default) - Show tooltip below the button.
- `left` - Show tooltip on the left of the button.
- `right` - Show tooltip on the right of the button.
+- `ellipsis: boolean` - If button width is constrained, button text will
+be truncated with an ellipsis. Be careful however, because this prop breaks
+the baseline alignment.
- `title: string` - A native browser tooltip, which appears when hovering
over the button.
- `content/children: any` - Content to render inside the button.
- `onClick: function` - Called when element is clicked.
+### `Button.Checkbox`
+
+A ghetto checkbox, made entirely using existing Button API.
+
+Props:
+
+- See inherited props: [Button](#button)
+- `checked: boolean` - Boolean value, which marks the checkbox as checked.
+
+### `Button.Confirm`
+
+A button with a an extra confirmation step, using native button component.
+
+Props:
+
+- See inherited props: [Button](#button)
+- `confirmMessage: string` - Text to display after first click; defaults to "Confirm?"
+- `confirmColor: string` - Color to display after first click; default to "bad"
+
+### `Button.Input`
+
+A button that turns into an input box after the first click. Turns back into a button after the user hits enter, defocuses, or hits escape. Enter and defocus commit, while escape cancels.
+
+Props:
+ - See inherited props: [Box](#box)
+ - `fluid`: fill availible horizontal space
+ - `onCommit: (e, value) => void`: function that is called after the user defocuses the input or presses enter
+ - `currentValue: string`: default string to display when the input is shown
+ - `defaultValue: string`: default value emitted if the user leaves the box blank when hitting enter or defocusing. If left undefined, will cancel the change on a blank defocus/enter
+
+### `Collapsible`
+
+Displays contents when open, acts as a fluid button when closed. Click to toggle, closed by default.
+
+Props:
+ - See inherited props: [Box](#box)
+ - `children: any` - What is collapsed when closed
+ - `title: string` - Text to display on the button for collapsing
+ - `color: string` - Color of the button; see [Button](#button)
+ - `buttons: any` - Buttons or other content to render inline with the button
+
### `ColorBox`
Displays a 1-character wide colored square. Can be used as a status indicator,
@@ -319,6 +368,21 @@ Props:
- See inherited props: [Box](#box)
+### `Dropdown`
+
+A simple dropdown box component. Lets the user select from a list of options and displays selected entry.
+
+Props:
+
+ - See inherited props: [Box](#box)
+ - `options: string[]` - An array of strings which will be displayed in the dropdown when open
+ - `selected: string` - Currently selected entry
+ - `width: number` - Width of dropdown button and resulting menu
+ - `over: boolean` - dropdown renders over instead of below
+ - `color: string` - color of dropdown button
+ - `onClick: (e) => void` - Called when dropdown button is clicked
+ - `onSelected: (value) => void` - Called when a value is picked from the list, `value` is the value that was picked
+
### `Flex`
Quickly manage the layout, alignment, and sizing of grid columns, navigation, components, and more with a full suite of responsive flexbox utilities.
@@ -350,6 +414,10 @@ two flex items as far as possible from each other.
Props:
- See inherited props: [Box](#box)
+- `spacing: number` - Spacing between flex items, in integer units
+(1 unit - 0.5em). Does not directly relate to a flex css property
+(adds a modifier class under the hood), and only integer numbers are
+supported.
- `direction: string` - This establishes the main-axis, thus defining the
direction flex items are placed in the flex container.
- `row` (default) - left to right.
@@ -406,6 +474,7 @@ remaining space is distributed. It can be a length (e.g. `20%`, `5rem`, etc.),
an `auto` or `content` keyword.
- `align: string` - This allows the default alignment (or the one specified by align-items) to be overridden for individual flex items. See: [Flex](#flex).
+
### `Grid`
Helps you to divide horizontal space into two or more equal sections.
@@ -432,7 +501,7 @@ Props:
Props:
-- See inherited props: [Table.Cell](#table-cell)
+- See inherited props: [Table.Cell](#tablecell)
- `size: number` (default: 1) - Size of the column relative to other columns.
### `Icon`
@@ -445,7 +514,6 @@ Renders one of the FontAwesome icons of your choice.
To smoothen the transition from v4 to v5, we have added a v4 semantic to
transform names with `-o` suffixes to FA Regular icons. For example:
-
- `square` will get transformed to `fas square`
- `square-o` will get transformed to `far square`
@@ -470,7 +538,9 @@ Props:
- See inherited props: [Box](#box)
- `value: string` - Value of an input.
+- `placeholder: string` - Text placed into Input box when value is otherwise nothing. Clears automatically when focused.
- `fluid: boolean` - Fill all available horizontal space.
+- `selfClear: boolean` - Clear after hitting enter, as well as remain focused when this happens. Useful for things like chat inputs
- `onChange: (e, value) => void` - An event, which fires when you commit
the text by either unfocusing the input box, or by pressing the Enter key.
- `onInput: (e, value) => void` - An event, which fires on every keypress.
@@ -562,6 +632,9 @@ dragging the input.
- `stepPixelSize: number` (default: 1) - Screen distance mouse needs
to travel to adjust value by one `step`.
- `width: string|number` - Width of the element, in `Box` units or pixels.
+- `height: string|numer` - Height of the element, in `Box` units or pixels.
+- `lineHeight: string|number` - lineHeight of the element, in `Box` units or pixels.
+- `fontSize: string|number` - fontSize of the element, in `Box` units or pixels.
- `format: value => value` - Format value using this function before
displaying it.
- `suppressFlicker: number` - A number in milliseconds, for which the input
@@ -738,6 +811,8 @@ Props:
- `vertical: boolean` - Use a vertical configuration, where tabs will appear
stacked on the left side of the container.
+- `altSelection` - Whether the tab buttons select via standard select (color change) or by adding a white indicator to the selected tab.
+ Intended for usage on interfaces where tab color has relevance.
- `children: Tab[]` - This component only accepts tabs as its children.
### `Tabs.Tab`
diff --git a/tgui-next/bin/tgui b/tgui-next/bin/tgui
old mode 100644
new mode 100755
diff --git a/tgui-next/packages/tgui/interfaces/Apc.js b/tgui-next/packages/tgui/interfaces/Apc.js
index d74c3e8e57..c899ea8ae7 100644
--- a/tgui-next/packages/tgui/interfaces/Apc.js
+++ b/tgui-next/packages/tgui/interfaces/Apc.js
@@ -201,6 +201,29 @@ export const Apc = props => {
onClick={() => act('toggle_nightshift')} />
)} />
+ {data.hijackable && (
+
+ act('hijack')} />
+ act('lockdown')} />
+ act('drain')} />
+
+ )} />
+ )}
);
};
diff --git a/tgui-next/packages/tgui/interfaces/Uplink.js b/tgui-next/packages/tgui/interfaces/Uplink.js
index 075355221a..4f2b047c9b 100644
--- a/tgui-next/packages/tgui/interfaces/Uplink.js
+++ b/tgui-next/packages/tgui/interfaces/Uplink.js
@@ -103,6 +103,7 @@ export class Uplink extends Component {
compact={compact_mode}
items={items}
hoveredItem={hoveredItem}
+ telecrystals={telecrystals}
onBuyMouseOver={item => this.setHoveredItem(item)}
onBuyMouseOut={item => this.setHoveredItem({})}
onBuy={item => act(ref, 'buy', {
diff --git a/tgui-next/packages/tgui/public/tgui.bundle.js b/tgui-next/packages/tgui/public/tgui.bundle.js
index 8e869deefc..3e11dba928 100644
--- a/tgui-next/packages/tgui/public/tgui.bundle.js
+++ b/tgui-next/packages/tgui/public/tgui.bundle.js
@@ -1,3 +1,3 @@
-!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=164)}([function(e,t,n){"use strict";var o=n(5),r=n(18).f,a=n(24),i=n(22),c=n(89),l=n(122),u=n(61);e.exports=function(e,t){var n,s,d,p,f,m=e.target,h=e.global,C=e.stat;if(n=h?o:C?o[m]||c(m,{}):(o[m]||{}).prototype)for(s in t){if(p=t[s],d=e.noTargetGet?(f=r(n,s))&&f.value:n[s],!u(h?s:m+(C?".":"#")+s,e.forced)&&d!==undefined){if(typeof p==typeof d)continue;l(p,d)}(e.sham||d&&d.sham)&&a(p,"sham",!0),i(n,s,p,e)}}},function(e,t,n){"use strict";t.__esModule=!0;var o=n(386);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(t[e]=o[e])}))},function(e,t,n){"use strict";t.__esModule=!0,t.Chart=t.Tooltip=t.Toast=t.TitleBar=t.Tabs=t.Table=t.Section=t.ProgressBar=t.NumberInput=t.NoticeBox=t.LabeledList=t.Input=t.Icon=t.Grid=t.Flex=t.Dropdown=t.Dimmer=t.Collapsible=t.ColorBox=t.Button=t.Box=t.BlockQuote=t.AnimatedNumber=void 0;var o=n(158);t.AnimatedNumber=o.AnimatedNumber;var r=n(391);t.BlockQuote=r.BlockQuote;var a=n(17);t.Box=a.Box;var i=n(114);t.Button=i.Button;var c=n(393);t.ColorBox=c.ColorBox;var l=n(394);t.Collapsible=l.Collapsible;var u=n(395);t.Dimmer=u.Dimmer;var s=n(396);t.Dropdown=s.Dropdown;var d=n(397);t.Flex=d.Flex;var p=n(161);t.Grid=p.Grid;var f=n(87);t.Icon=f.Icon;var m=n(160);t.Input=m.Input;var h=n(163);t.LabeledList=h.LabeledList;var C=n(398);t.NoticeBox=C.NoticeBox;var g=n(399);t.NumberInput=g.NumberInput;var b=n(400);t.ProgressBar=b.ProgressBar;var v=n(401);t.Section=v.Section;var N=n(162);t.Table=N.Table;var V=n(402);t.Tabs=V.Tabs;var y=n(403);t.TitleBar=y.TitleBar;var _=n(117);t.Toast=_.Toast;var x=n(159);t.Tooltip=x.Tooltip;var k=n(404);t.Chart=k.Chart},function(e,t,n){"use strict";t.__esModule=!0,t.useBackend=t.backendReducer=t.backendUpdate=void 0;var o=n(37),r=n(19);t.backendUpdate=function(e){return{type:"backendUpdate",payload:e}};t.backendReducer=function(e,t){var n=t.type,r=t.payload;if("backendUpdate"===n){var a=Object.assign({},e.config,{},r.config),i=Object.assign({},e.data,{},r.static_data,{},r.data),c=a.status!==o.UI_DISABLED,l=a.status===o.UI_INTERACTIVE;return Object.assign({},e,{config:a,data:i,visible:c,interactive:l})}return e};t.useBackend=function(e){var t=e.state,n=(e.dispatch,t.config.ref);return Object.assign({},t,{act:function(e,t){return void 0===t&&(t={}),(0,r.act)(n,e,t)}})}},function(e,t,n){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){"use strict";(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n(118))},function(e,t,n){"use strict";e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var o,r=n(9),a=n(5),i=n(6),c=n(15),l=n(74),u=n(24),s=n(22),d=n(13).f,p=n(36),f=n(53),m=n(11),h=n(58),C=a.DataView,g=C&&C.prototype,b=a.Int8Array,v=b&&b.prototype,N=a.Uint8ClampedArray,V=N&&N.prototype,y=b&&p(b),_=v&&p(v),x=Object.prototype,k=x.isPrototypeOf,w=m("toStringTag"),L=h("TYPED_ARRAY_TAG"),B=!(!a.ArrayBuffer||!C),S=B&&!!f&&"Opera"!==l(a.opera),I=!1,T={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},A=function(e){var t=l(e);return"DataView"===t||c(T,t)},E=function(e){return i(e)&&c(T,l(e))};for(o in T)a[o]||(S=!1);if((!S||"function"!=typeof y||y===Function.prototype)&&(y=function(){throw TypeError("Incorrect invocation")},S))for(o in T)a[o]&&f(a[o],y);if((!S||!_||_===x)&&(_=y.prototype,S))for(o in T)a[o]&&f(a[o].prototype,_);if(S&&p(V)!==_&&f(V,_),r&&!c(_,w))for(o in I=!0,d(_,w,{get:function(){return i(this)?this[L]:undefined}}),T)a[o]&&u(a[o],L,o);B&&f&&p(g)!==x&&f(g,x),e.exports={NATIVE_ARRAY_BUFFER:B,NATIVE_ARRAY_BUFFER_VIEWS:S,TYPED_ARRAY_TAG:I&&L,aTypedArray:function(e){if(E(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(f){if(k.call(y,e))return e}else for(var t in T)if(c(T,o)){var n=a[t];if(n&&(e===n||k.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n){if(r){if(n)for(var o in T){var i=a[o];i&&c(i.prototype,e)&&delete i.prototype[e]}_[e]&&!n||s(_,e,n?t:S&&v[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var o,i;if(r){if(f){if(n)for(o in T)(i=a[o])&&c(i,e)&&delete i[e];if(y[e]&&!n)return;try{return s(y,e,n?t:S&&b[e]||t)}catch(l){}}for(o in T)!(i=a[o])||i[e]&&!n||s(i,e,t)}},isView:A,isTypedArray:E,TypedArray:y,TypedArrayPrototype:_}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e){if(!o(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t,n){"use strict";var o=n(4);e.exports=!o((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var o=n(29),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){"use strict";var o=n(5),r=n(91),a=n(15),i=n(58),c=n(95),l=n(125),u=r("wks"),s=o.Symbol,d=l?s:i;e.exports=function(e){return a(u,e)||(c&&a(s,e)?u[e]=s[e]:u[e]=d("Symbol."+e)),u[e]}},function(e,t,n){"use strict";t.__esModule=!0,t.isFalsy=t.pureComponentHooks=t.shallowDiffers=t.normalizeChildren=t.classes=void 0;t.classes=function(e){for(var t="",n=0;n_;_++)if((p||_ in N)&&(b=V(g=N[_],_,v),e))if(t)k[_]=b;else if(b)switch(e){case 3:return!0;case 5:return g;case 6:return _;case 2:l.call(k,g)}else if(s)return!1;return d?-1:u||s?s:k}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6)}},function(e,t,n){"use strict";t.__esModule=!0,t.Box=t.computeBoxProps=t.unit=void 0;var o=n(1),r=n(12),a=n(392),i=n(37);function c(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}var l=function(e){return"string"==typeof e?e:"number"==typeof e?6*e+"px":void 0};t.unit=l;var u=function(e){return"string"==typeof e&&i.CSS_COLORS.includes(e)},s=function(e){return function(t,n){(0,r.isFalsy)(n)||(t[e]=n)}},d=function(e){return function(t,n){(0,r.isFalsy)(n)||(t[e]=l(n))}},p=function(e,t){return function(n,o){(0,r.isFalsy)(o)||(n[e]=t)}},f=function(e,t){return function(n,o){if(!(0,r.isFalsy)(o))for(var a=0;a0&&(t.style=l),t};t.computeBoxProps=C;var g=function(e){var t=e.as,n=void 0===t?"div":t,i=e.className,l=e.content,s=e.children,d=c(e,["as","className","content","children"]),p=e.textColor||e.color,f=e.backgroundColor;if("function"==typeof s)return s(C(e));var m=C(d);return(0,o.createVNode)(a.VNodeFlags.HtmlElement,n,(0,r.classes)([i,u(p)&&"color-"+p,u(f)&&"color-bg-"+f]),l||s,a.ChildFlags.UnknownChildren,m)};t.Box=g,g.defaultHooks=r.pureComponentHooks;var b=function(e){var t=e.children,n=c(e,["children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({position:"relative"},n,{children:(0,o.createComponentVNode)(2,g,{fillPositionedParent:!0,children:t})})))};b.defaultHooks=r.pureComponentHooks,g.Forced=b},function(e,t,n){"use strict";var o=n(9),r=n(71),a=n(46),i=n(23),c=n(33),l=n(15),u=n(119),s=Object.getOwnPropertyDescriptor;t.f=o?s:function(e,t){if(e=i(e),t=c(t,!0),u)try{return s(e,t)}catch(n){}if(l(e,t))return a(!r.f.call(e,t),e[t])}},function(e,t,n){"use strict";t.__esModule=!0,t.winset=t.winget=t.act=t.runCommand=t.callByondAsync=t.callByond=t.tridentVersion=void 0;var o,r=n(31),a=(o=navigator.userAgent.match(/Trident\/(\d+).+?;/i)[1])?parseInt(o,10):null;t.tridentVersion=a;var i=function(e,t){return void 0===t&&(t={}),"byond://"+e+"?"+(0,r.buildQueryString)(t)},c=function(e,t){void 0===t&&(t={}),window.location.href=i(e,t)};t.callByond=c;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 window.location.href=i(e,Object.assign({},t,{callback:"__callbacks__["+n+"]"})),o};t.callByondAsync=l;t.runCommand=function(e){return c("winset",{command:e})};t.act=function(e,t,n){return void 0===n&&(n={}),c("",Object.assign({src:e,action:t},n))};var u=function(e,t){var n;return regeneratorRuntime.async((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,regeneratorRuntime.awrap(l("winget",{id:e,property:t}));case 2:return n=o.sent,o.abrupt("return",n[t]);case 4:case"end":return o.stop()}}))};t.winget=u;t.winset=function(e,t,n){var o;return c("winset",((o={})[e+"."+t]=n,o))}},function(e,t,n){"use strict";t.__esModule=!0,t.toFixed=t.round=t.clamp=void 0;t.clamp=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),Math.max(t,Math.min(e,n))};t.round=function(e){return Math.round(e)};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(t)}},function(e,t,n){"use strict";e.exports=function(e){if(e==undefined)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var o=n(5),r=n(24),a=n(15),i=n(89),c=n(90),l=n(34),u=l.get,s=l.enforce,d=String(String).split("String");(e.exports=function(e,t,n,c){var l=!!c&&!!c.unsafe,u=!!c&&!!c.enumerable,p=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||r(n,"name",t),s(n).source=d.join("string"==typeof t?t:"")),e!==o?(l?!p&&e[t]&&(u=!0):delete e[t],u?e[t]=n:r(e,t,n)):u?e[t]=n:i(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||c(this)}))},function(e,t,n){"use strict";var o=n(57),r=n(21);e.exports=function(e){return o(r(e))}},function(e,t,n){"use strict";var o=n(9),r=n(13),a=n(46);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(123),r=n(15),a=n(129),i=n(13).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},function(e,t,n){"use strict";var o=n(21),r=/"/g;e.exports=function(e,t,n,a){var i=String(o(e)),c="<"+t;return""!==n&&(c+=" "+n+'="'+String(a).replace(r,""")+'"'),c+">"+i+""+t+">"}},function(e,t,n){"use strict";var o=n(4);e.exports=function(e){return o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},function(e,t,n){"use strict";t.__esModule=!0,t.zipWith=t.zip=t.reduce=t.sortBy=t.map=t.toArray=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[]};var o=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;oc)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n0?r:o)(e)}},function(e,t,n){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){"use strict";t.__esModule=!0,t.buildQueryString=t.decodeHtmlEntities=t.toTitleCase=t.capitalize=t.testGlobPattern=t.multiline=void 0;t.multiline=function o(e){if(Array.isArray(e))return o(e.join(""));var t,n=e.split("\n"),r=n,a=Array.isArray(r),i=0;for(r=a?r:r[Symbol.iterator]();;){var c;if(a){if(i>=r.length)break;c=r[i++]}else{if((i=r.next()).done)break;c=i.value}for(var l=c,u=0;u",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={}.toString;e.exports=function(e){return o.call(e).slice(8,-1)}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){"use strict";var o,r,a,i=n(121),c=n(5),l=n(6),u=n(24),s=n(15),d=n(72),p=n(59),f=c.WeakMap;if(i){var m=new f,h=m.get,C=m.has,g=m.set;o=function(e,t){return g.call(m,e,t),t},r=function(e){return h.call(m,e)||{}},a=function(e){return C.call(m,e)}}else{var b=d("state");p[b]=!0,o=function(e,t){return u(e,b,t),t},r=function(e){return s(e,b)?e[b]:{}},a=function(e){return s(e,b)}}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(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){"use strict";var o=n(123),r=n(5),a=function(e){return"function"==typeof e?e:undefined};e.exports=function(e,t){return arguments.length<2?a(o[e])||a(r[e]):o[e]&&o[e][t]||r[e]&&r[e][t]}},function(e,t,n){"use strict";var o=n(15),r=n(14),a=n(72),i=n(102),c=a("IE_PROTO"),l=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=r(e),o(e,c)?e[c]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},function(e,t,n){"use strict";t.__esModule=!0,t.getGasColor=t.getGasLabel=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=t.UI_CLOSE=t.UI_DISABLED=t.UI_UPDATE=t.UI_INTERACTIVE=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{captain:"#c06616",security:"#e74c3c",medbay:"#3498db",science:"#9b59b6",engineering:"#f1c40f",cargo:"#f39c12",centcom:"#00c100",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:"Red Team",freq:1215,color:"#ff4444"},{name:"Blue Team",freq:1217,color:"#3434fd"},{name:"CentCom",freq:1337,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:"Medical",freq:1355,color:"#57b8f0"},{name:"Engineering",freq:1357,color:"#f37746"},{name:"Security",freq:1359,color:"#dd3535"},{name:"AI Private",freq:1447,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"}];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}},function(e,t,n){"use strict";e.exports=!1},function(e,t,n){"use strict";var o=n(4);e.exports=function(e,t){var n=[][e];return!n||!o((function(){n.call(null,t||function(){throw 1},1)}))}},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(9),i=n(113),c=n(7),l=n(77),u=n(55),s=n(46),d=n(24),p=n(10),f=n(137),m=n(151),h=n(33),C=n(15),g=n(74),b=n(6),v=n(42),N=n(53),V=n(47).f,y=n(152),_=n(16).forEach,x=n(54),k=n(13),w=n(18),L=n(34),B=n(79),S=L.get,I=L.set,T=k.f,A=w.f,E=Math.round,P=r.RangeError,O=l.ArrayBuffer,M=l.DataView,R=c.NATIVE_ARRAY_BUFFER_VIEWS,F=c.TYPED_ARRAY_TAG,D=c.TypedArray,j=c.TypedArrayPrototype,z=c.aTypedArrayConstructor,H=c.isTypedArray,G=function(e,t){for(var n=0,o=t.length,r=new(z(e))(o);o>n;)r[n]=t[n++];return r},U=function(e,t){T(e,t,{get:function(){return S(this)[t]}})},K=function(e){var t;return e instanceof O||"ArrayBuffer"==(t=g(e))||"SharedArrayBuffer"==t},Y=function(e,t){return H(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},q=function(e,t){return Y(e,t=h(t,!0))?s(2,e[t]):A(e,t)},W=function(e,t,n){return!(Y(e,t=h(t,!0))&&b(n)&&C(n,"value"))||C(n,"get")||C(n,"set")||n.configurable||C(n,"writable")&&!n.writable||C(n,"enumerable")&&!n.enumerable?T(e,t,n):(e[t]=n.value,e)};a?(R||(w.f=q,k.f=W,U(j,"buffer"),U(j,"byteOffset"),U(j,"byteLength"),U(j,"length")),o({target:"Object",stat:!0,forced:!R},{getOwnPropertyDescriptor:q,defineProperty:W}),e.exports=function(e,t,n){var a=e.match(/\d+$/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,s="set"+e,h=r[c],C=h,g=C&&C.prototype,k={},w=function(e,t){var n=S(e);return n.view[l](t*a+n.byteOffset,!0)},L=function(e,t,o){var r=S(e);n&&(o=(o=E(o))<0?0:o>255?255:255&o),r.view[s](t*a+r.byteOffset,o,!0)},A=function(e,t){T(e,t,{get:function(){return w(this,t)},set:function(e){return L(this,t,e)},enumerable:!0})};R?i&&(C=t((function(e,t,n,o){return u(e,C,c),B(b(t)?K(t)?o!==undefined?new h(t,m(n,a),o):n!==undefined?new h(t,m(n,a)):new h(t):H(t)?G(C,t):y.call(C,t):new h(f(t)),e,C)})),N&&N(C,D),_(V(h),(function(e){e in C||d(C,e,h[e])})),C.prototype=g):(C=t((function(e,t,n,o){u(e,C,c);var r,i,l,s=0,d=0;if(b(t)){if(!K(t))return H(t)?G(C,t):y.call(C,t);r=t,d=m(n,a);var h=t.byteLength;if(o===undefined){if(h%a)throw P("Wrong length");if((i=h-d)<0)throw P("Wrong length")}else if((i=p(o)*a)+d>h)throw P("Wrong length");l=i/a}else l=f(t),r=new O(i=l*a);for(I(e,{buffer:r,byteOffset:d,byteLength:i,length:l,view:new M(r)});sdocument.F=Object<\/script>"),e.close(),p=e.F;n--;)delete p[s][a[n]];return p()};e.exports=Object.create||function(e,t){var n;return null!==e?(d[s]=o(e),n=new d,d[s]=null,n[u]=e):n=p(),t===undefined?n:r(n,t)},i[u]=!0},function(e,t,n){"use strict";var o=n(13).f,r=n(15),a=n(11)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&o(e,a,{configurable:!0,value:t})}},function(e,t,n){"use strict";var o=n(11),r=n(42),a=n(24),i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a(c,i,r(null)),e.exports=function(e){c[i][e]=!0}},function(e,t,n){"use strict";var o=n(8),r=n(30),a=n(11)("species");e.exports=function(e,t){var n,i=o(e).constructor;return i===undefined||(n=o(i)[a])==undefined?t:r(n)}},function(e,t,n){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var o=n(124),r=n(93).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return o(e,r)}},function(e,t,n){"use strict";var o=n(30);e.exports=function(e,t,n){if(o(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var o=n(33),r=n(13),a=n(46);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},function(e,t,n){"use strict";var o=n(59),r=n(6),a=n(15),i=n(13).f,c=n(58),l=n(67),u=c("meta"),s=0,d=Object.isExtensible||function(){return!0},p=function(e){i(e,u,{value:{objectID:"O"+ ++s,weakData:{}}})},f=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,u)){if(!d(e))return"F";if(!t)return"E";p(e)}return e[u].objectID},getWeakData:function(e,t){if(!a(e,u)){if(!d(e))return!0;if(!t)return!1;p(e)}return e[u].weakData},onFreeze:function(e){return l&&f.REQUIRED&&d(e)&&!a(e,u)&&p(e),e}};o[u]=!0},function(e,t,n){"use strict";t.__esModule=!0,t.createLogger=void 0;n(154);var o=n(19),r=0,a=1,i=2,c=3,l=4,u=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),a=2;a=i){var c=[t].concat(r).map((function(e){return"string"==typeof e?e:e instanceof Error?e.stack||String(e):JSON.stringify(e)})).filter((function(e){return e})).join(" ")+"\nUser Agent: "+navigator.userAgent;(0,o.act)(window.__ref__,"tgui:log",{log:c})}};t.createLogger=function(e){return{debug:function(){for(var t=arguments.length,n=new Array(t),o=0;os;)if((c=l[s++])!=c)return!0}else for(;u>s;s++)if((e||s in l)&&l[s]===n)return e||s||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},function(e,t,n){"use strict";var o=n(4),r=/#|\.prototype\./,a=function(e,t){var n=c[i(e)];return n==u||n!=l&&("function"==typeof t?o(t):!!t)},i=a.normalize=function(e){return String(e).replace(r,".").toLowerCase()},c=a.data={},l=a.NATIVE="N",u=a.POLYFILL="P";e.exports=a},function(e,t,n){"use strict";var o=n(124),r=n(93);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t,n){"use strict";var o=n(6),r=n(52),a=n(11)("species");e.exports=function(e,t){var n;return r(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!r(n.prototype)?o(n)&&null===(n=n[a])&&(n=undefined):n=undefined),new(n===undefined?Array:n)(0===t?0:t)}},function(e,t,n){"use strict";var o=n(4),r=n(11),a=n(96),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var o=n(22);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},function(e,t,n){"use strict";var o=n(4);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(e,t,n){"use strict";var o=n(8),r=n(98),a=n(10),i=n(48),c=n(99),l=n(132),u=function(e,t){this.stopped=e,this.result=t};(e.exports=function(e,t,n,s,d){var p,f,m,h,C,g,b,v=i(t,n,s?2:1);if(d)p=e;else{if("function"!=typeof(f=c(e)))throw TypeError("Target is not iterable");if(r(f)){for(m=0,h=a(e.length);h>m;m++)if((C=s?v(o(b=e[m])[0],b[1]):v(e[m]))&&C instanceof u)return C;return new u(!1)}p=f.call(e)}for(g=p.next;!(b=g.call(p)).done;)if("object"==typeof(C=l(p,v,b.value,s))&&C&&C instanceof u)return C;return new u(!1)}).stop=function(e){return new u(!0,e)}},function(e,t,n){"use strict";t.__esModule=!0,t.InterfaceLockNoticeBox=void 0;var o=n(1),r=n(2);t.InterfaceLockNoticeBox=function(e){var t=e.siliconUser,n=e.locked,a=e.onLockStatusChange,i=e.accessText;return t?(0,o.createComponentVNode)(2,r.NoticeBox,{children:(0,o.createComponentVNode)(2,r.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:"Interface lock status:"}),(0,o.createComponentVNode)(2,r.Flex.Item,{grow:1}),(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.Button,{m:0,color:"gray",icon:n?"lock":"unlock",content:n?"Locked":"Unlocked",onClick:function(){a&&a(!n)}})})]})}):(0,o.createComponentVNode)(2,r.NoticeBox,{children:["Swipe ",i||"an ID card"," ","to ",n?"unlock":"lock"," this interface."]})}},function(e,t,n){"use strict";t.__esModule=!0,t.compose=t.flow=void 0;t.flow=function o(){for(var e=arguments.length,t=new Array(e),n=0;n1?r-1:0),i=1;i=c.length)break;s=c[u++]}else{if((u=c.next()).done)break;s=u.value}var d=s;Array.isArray(d)?n=o.apply(void 0,d).apply(void 0,[n].concat(a)):d&&(n=d.apply(void 0,[n].concat(a)))}return n}};t.compose=function(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),a=1;a=0:d>p;p+=f)p in s&&(l=n(l,s[p],p,u));return l}};e.exports={left:c(!1),right:c(!0)}},function(e,t,n){"use strict";var o=n(5),r=n(9),a=n(7).NATIVE_ARRAY_BUFFER,i=n(24),c=n(66),l=n(4),u=n(55),s=n(29),d=n(10),p=n(137),f=n(217),m=n(47).f,h=n(13).f,C=n(97),g=n(43),b=n(34),v=b.get,N=b.set,V="ArrayBuffer",y="DataView",_="Wrong length",x=o[V],k=x,w=o[y],L=o.RangeError,B=f.pack,S=f.unpack,I=function(e){return[255&e]},T=function(e){return[255&e,e>>8&255]},A=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},E=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},P=function(e){return B(e,23,4)},O=function(e){return B(e,52,8)},M=function(e,t){h(e.prototype,t,{get:function(){return v(this)[t]}})},R=function(e,t,n,o){var r=p(n),a=v(e);if(r+t>a.byteLength)throw L("Wrong index");var i=v(a.buffer).bytes,c=r+a.byteOffset,l=i.slice(c,c+t);return o?l:l.reverse()},F=function(e,t,n,o,r,a){var i=p(n),c=v(e);if(i+t>c.byteLength)throw L("Wrong index");for(var l=v(c.buffer).bytes,u=i+c.byteOffset,s=o(+r),d=0;dH;)(D=z[H++])in k||i(k,D,x[D]);j.constructor=k}var G=new w(new k(2)),U=w.prototype.setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||c(w.prototype,{setInt8:function(e,t){U.call(this,e,t<<24>>24)},setUint8:function(e,t){U.call(this,e,t<<24>>24)}},{unsafe:!0})}else k=function(e){u(this,k,V);var t=p(e);N(this,{bytes:C.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},w=function(e,t,n){u(this,w,y),u(e,k,y);var o=v(e).byteLength,a=s(t);if(a<0||a>o)throw L("Wrong offset");if(a+(n=n===undefined?o-a:d(n))>o)throw L(_);N(this,{buffer:e,byteLength:n,byteOffset:a}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},r&&(M(k,"byteLength"),M(w,"buffer"),M(w,"byteLength"),M(w,"byteOffset")),c(w.prototype,{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return E(R(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return E(R(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return S(R(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return S(R(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){F(this,1,e,I,t)},setUint8:function(e,t){F(this,1,e,I,t)},setInt16:function(e,t){F(this,2,e,T,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){F(this,2,e,T,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){F(this,4,e,A,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){F(this,4,e,A,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){F(this,4,e,P,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){F(this,8,e,O,t,arguments.length>2?arguments[2]:undefined)}});g(k,V),g(w,y),e.exports={ArrayBuffer:k,DataView:w}},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(61),i=n(22),c=n(50),l=n(68),u=n(55),s=n(6),d=n(4),p=n(75),f=n(43),m=n(79);e.exports=function(e,t,n){var h=-1!==e.indexOf("Map"),C=-1!==e.indexOf("Weak"),g=h?"set":"add",b=r[e],v=b&&b.prototype,N=b,V={},y=function(e){var t=v[e];i(v,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(C&&!s(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return C&&!s(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(C&&!s(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(a(e,"function"!=typeof b||!(C||v.forEach&&!d((function(){(new b).entries().next()})))))N=n.getConstructor(t,e,h,g),c.REQUIRED=!0;else if(a(e,!0)){var _=new N,x=_[g](C?{}:-0,1)!=_,k=d((function(){_.has(1)})),w=p((function(e){new b(e)})),L=!C&&d((function(){for(var e=new b,t=5;t--;)e[g](t,t);return!e.has(-0)}));w||((N=t((function(t,n){u(t,N,e);var o=m(new b,t,N);return n!=undefined&&l(n,o[g],o,h),o}))).prototype=v,v.constructor=N),(k||L)&&(y("delete"),y("has"),h&&y("get")),(L||x)&&y(g),C&&v.clear&&delete v.clear}return V[e]=N,o({global:!0,forced:N!=b},V),f(N,e),C||n.setStrong(N,e,h),N}},function(e,t,n){"use strict";var o=n(6),r=n(53);e.exports=function(e,t,n){var a,i;return r&&"function"==typeof(a=t.constructor)&&a!==n&&o(i=a.prototype)&&i!==n.prototype&&r(e,i),e}},function(e,t,n){"use strict";var o=Math.expm1,r=Math.exp;e.exports=!o||o(10)>22025.465794806718||o(10)<22025.465794806718||-2e-17!=o(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:r(e)-1}:o},function(e,t,n){"use strict";e.exports="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},function(e,t,n){"use strict";var o=n(38),r=n(5),a=n(4);e.exports=o||!a((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete r[e]}))},function(e,t,n){"use strict";var o=n(8);e.exports=function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){"use strict";var o,r,a=n(83),i=RegExp.prototype.exec,c=String.prototype.replace,l=i,u=(o=/a/,r=/b*/g,i.call(o,"a"),i.call(r,"a"),0!==o.lastIndex||0!==r.lastIndex),s=/()??/.exec("")[1]!==undefined;(u||s)&&(l=function(e){var t,n,o,r,l=this;return s&&(n=new RegExp("^"+l.source+"$(?!\\s)",a.call(l))),u&&(t=l.lastIndex),o=i.call(l,e),u&&o&&(l.lastIndex=l.global?o.index+o[0].length:t),s&&o&&o.length>1&&c.call(o[0],n,(function(){for(r=1;r")})),s=!a((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,d){var p=i(e),f=!a((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),m=f&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!f||!m||"replace"===e&&!u||"split"===e&&!s){var h=/./[p],C=n(p,""[e],(function(e,t,n,o,r){return t.exec===c?f&&!r?{done:!0,value:h.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}})),g=C[0],b=C[1];r(String.prototype,e,g),r(RegExp.prototype,p,2==t?function(e,t){return b.call(e,this,t)}:function(e){return b.call(e,this)}),d&&o(RegExp.prototype[p],"sham",!0)}}},function(e,t,n){"use strict";var o=n(32),r=n(84);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var a=n.call(e,t);if("object"!=typeof a)throw TypeError("RegExp exec method returned something other than an Object or null");return a}if("RegExp"!==o(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},function(e,t,n){"use strict";t.__esModule=!0,t.Icon=void 0;var o=n(1),r=n(12),a=n(17);var i=/-o$/,c=function(e){var t=e.name,n=e.size,c=e.spin,l=e.className,u=e.style,s=void 0===u?{}:u,d=e.rotation,p=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,["name","size","spin","className","style","rotation"]);n&&(s["font-size"]=100*n+"%"),"number"==typeof d&&(s.transform="rotate("+d+"deg)");var f=i.test(t),m=t.replace(i,"");return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"i",className:(0,r.classes)([l,f?"far":"fas","fa-"+m,c&&"fa-spin"]),style:s},p)))};t.Icon=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";var o=n(5),r=n(6),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},function(e,t,n){"use strict";var o=n(5),r=n(24);e.exports=function(e,t){try{r(o,e,t)}catch(n){o[e]=t}return t}},function(e,t,n){"use strict";var o=n(120),r=Function.toString;"function"!=typeof o.inspectSource&&(o.inspectSource=function(e){return r.call(e)}),e.exports=o.inspectSource},function(e,t,n){"use strict";var o=n(38),r=n(120);(e.exports=function(e,t){return r[e]||(r[e]=t!==undefined?t:{})})("versions",[]).push({version:"3.4.8",mode:o?"pure":"global",copyright:"\xa9 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){"use strict";var o=n(35),r=n(47),a=n(94),i=n(8);e.exports=o("Reflect","ownKeys")||function(e){var t=r.f(i(e)),n=a.f;return n?t.concat(n(e)):t}},function(e,t,n){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){"use strict";t.f=Object.getOwnPropertySymbols},function(e,t,n){"use strict";var o=n(4);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){return!String(Symbol())}))},function(e,t,n){"use strict";var o,r,a=n(5),i=n(73),c=a.process,l=c&&c.versions,u=l&&l.v8;u?r=(o=u.split("."))[0]+o[1]:i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=o[1]),e.exports=r&&+r},function(e,t,n){"use strict";var o=n(14),r=n(41),a=n(10);e.exports=function(e){for(var t=o(this),n=a(t.length),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,u=l===undefined?n:r(l,n);u>c;)t[c++]=e;return t}},function(e,t,n){"use strict";var o=n(11),r=n(65),a=o("iterator"),i=Array.prototype;e.exports=function(e){return e!==undefined&&(r.Array===e||i[a]===e)}},function(e,t,n){"use strict";var o=n(74),r=n(65),a=n(11)("iterator");e.exports=function(e){if(e!=undefined)return e[a]||e["@@iterator"]||r[o(e)]}},function(e,t,n){"use strict";var o={};o[n(11)("toStringTag")]="z",e.exports="[object z]"===String(o)},function(e,t,n){"use strict";var o=n(0),r=n(202),a=n(36),i=n(53),c=n(43),l=n(24),u=n(22),s=n(11),d=n(38),p=n(65),f=n(134),m=f.IteratorPrototype,h=f.BUGGY_SAFARI_ITERATORS,C=s("iterator"),g=function(){return this};e.exports=function(e,t,n,s,f,b,v){r(n,t,s);var N,V,y,_=function(e){if(e===f&&B)return B;if(!h&&e in w)return w[e];switch(e){case"keys":case"values":case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},x=t+" Iterator",k=!1,w=e.prototype,L=w[C]||w["@@iterator"]||f&&w[f],B=!h&&L||_(f),S="Array"==t&&w.entries||L;if(S&&(N=a(S.call(new e)),m!==Object.prototype&&N.next&&(d||a(N)===m||(i?i(N,m):"function"!=typeof N[C]&&l(N,C,g)),c(N,x,!0,!0),d&&(p[x]=g))),"values"==f&&L&&"values"!==L.name&&(k=!0,B=function(){return L.call(this)}),d&&!v||w[C]===B||l(w,C,B),p[t]=B,f)if(V={values:_("values"),keys:b?B:_("keys"),entries:_("entries")},v)for(y in V)!h&&!k&&y in w||u(w,y,V[y]);else o({target:t,proto:!0,forced:h||k},V);return V}},function(e,t,n){"use strict";var o=n(4);e.exports=!o((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},function(e,t,n){"use strict";var o=n(10),r=n(104),a=n(21),i=Math.ceil,c=function(e){return function(t,n,c){var l,u,s=String(a(t)),d=s.length,p=c===undefined?" ":String(c),f=o(n);return f<=d||""==p?s:(l=f-d,(u=r.call(p,i(l/p.length))).length>l&&(u=u.slice(0,l)),e?s+u:u+s)}};e.exports={start:c(!1),end:c(!0)}},function(e,t,n){"use strict";var o=n(29),r=n(21);e.exports="".repeat||function(e){var t=String(r(this)),n="",a=o(e);if(a<0||a==Infinity)throw RangeError("Wrong number of repetitions");for(;a>0;(a>>>=1)&&(t+=t))1&a&&(n+=t);return n}},function(e,t,n){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t,n){"use strict";var o,r,a,i=n(5),c=n(4),l=n(32),u=n(48),s=n(127),d=n(88),p=n(146),f=i.location,m=i.setImmediate,h=i.clearImmediate,C=i.process,g=i.MessageChannel,b=i.Dispatch,v=0,N={},V=function(e){if(N.hasOwnProperty(e)){var t=N[e];delete N[e],t()}},y=function(e){return function(){V(e)}},_=function(e){V(e.data)},x=function(e){i.postMessage(e+"",f.protocol+"//"+f.host)};m&&h||(m=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return N[++v]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},o(v),v},h=function(e){delete N[e]},"process"==l(C)?o=function(e){C.nextTick(y(e))}:b&&b.now?o=function(e){b.now(y(e))}:g&&!p?(a=(r=new g).port2,r.port1.onmessage=_,o=u(a.postMessage,a,1)):!i.addEventListener||"function"!=typeof postMessage||i.importScripts||c(x)?o="onreadystatechange"in d("script")?function(e){s.appendChild(d("script")).onreadystatechange=function(){s.removeChild(this),V(e)}}:function(e){setTimeout(y(e),0)}:(o=x,i.addEventListener("message",_,!1))),e.exports={set:m,clear:h}},function(e,t,n){"use strict";var o=n(6),r=n(32),a=n(11)("match");e.exports=function(e){var t;return o(e)&&((t=e[a])!==undefined?!!t:"RegExp"==r(e))}},function(e,t,n){"use strict";var o=n(29),r=n(21),a=function(e){return function(t,n){var a,i,c=String(r(t)),l=o(n),u=c.length;return l<0||l>=u?e?"":undefined:(a=c.charCodeAt(l))<55296||a>56319||l+1===u||(i=c.charCodeAt(l+1))<56320||i>57343?e?c.charAt(l):a:e?c.slice(l,l+2):i-56320+(a-55296<<10)+65536}};e.exports={codeAt:a(!1),charAt:a(!0)}},function(e,t,n){"use strict";var o=n(107);e.exports=function(e){if(o(e))throw TypeError("The method doesn't accept regular expressions");return e}},function(e,t,n){"use strict";var o=n(11)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[o]=!1,"/./"[e](t)}catch(r){}}return!1}},function(e,t,n){"use strict";var o=n(108).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},function(e,t,n){"use strict";var o=n(4),r=n(81);e.exports=function(e){return o((function(){return!!r[e]()||"\u200b\x85\u180e"!="\u200b\x85\u180e"[e]()||r[e].name!==e}))}},function(e,t,n){"use strict";var o=n(5),r=n(4),a=n(75),i=n(7).NATIVE_ARRAY_BUFFER_VIEWS,c=o.ArrayBuffer,l=o.Int8Array;e.exports=!i||!r((function(){l(1)}))||!r((function(){new l(-1)}))||!a((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||r((function(){return 1!==new l(new c(2),1,undefined).length}))},function(e,t,n){"use strict";t.__esModule=!0,t.ButtonInput=t.ButtonConfirm=t.ButtonCheckbox=t.Button=void 0;var o=n(1),r=n(12),a=n(19),i=n(115),c=n(51),l=n(116),u=n(17),s=n(87),d=n(159);n(160),n(161);function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function f(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}var m=(0,c.createLogger)("Button"),h=function(e){var t=e.className,n=e.fluid,c=e.icon,p=e.color,h=e.disabled,C=e.selected,g=e.tooltip,b=e.tooltipPosition,v=e.ellipsis,N=e.content,V=e.iconRotation,y=e.iconSpin,_=e.children,x=e.onclick,k=e.onClick,w=f(e,["className","fluid","icon","color","disabled","selected","tooltip","tooltipPosition","ellipsis","content","iconRotation","iconSpin","children","onclick","onClick"]),L=!(!N&&!_);return x&&m.warn("Lowercase 'onclick' is not supported on Button and lowercase prop names are discouraged in general. Please use a camelCase'onClick' instead and read: https://infernojs.org/docs/guides/event-handling"),(0,o.normalizeProps)((0,o.createComponentVNode)(2,u.Box,Object.assign({as:"span",className:(0,r.classes)(["Button",n&&"Button--fluid",h&&"Button--disabled",C&&"Button--selected",L&&"Button--hasContent",v&&"Button--ellipsis",p&&"string"==typeof p?"Button--color--"+p:"Button--color--default",t]),tabIndex:!h&&"0",unselectable:a.tridentVersion<=4,onclick:function(e){(0,l.refocusLayout)(),!h&&k&&k(e)},onKeyDown:function(e){var t=window.event?e.which:e.keyCode;return t===i.KEY_SPACE||t===i.KEY_ENTER?(e.preventDefault(),void(!h&&k&&k(e))):t===i.KEY_ESCAPE?(e.preventDefault(),void(0,l.refocusLayout)()):void 0}},w,{children:[c&&(0,o.createComponentVNode)(2,s.Icon,{name:c,rotation:V,spin:y}),N,_,g&&(0,o.createComponentVNode)(2,d.Tooltip,{content:g,position:b})]})))};t.Button=h,h.defaultHooks=r.pureComponentHooks;var C=function(e){var t=e.checked,n=f(e,["checked"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({color:"transparent",icon:t?"check-square-o":"square-o",selected:t},n)))};t.ButtonCheckbox=C,h.Checkbox=C;var g=function(e){function t(){var t;return(t=e.call(this)||this).state={clickedOnce:!1},t.handleClick=function(){t.state.clickedOnce&&t.setClickedOnce(!1)},t}p(t,e);var n=t.prototype;return n.setClickedOnce=function(e){var t=this;this.setState({clickedOnce:e}),e?setTimeout((function(){return window.addEventListener("click",t.handleClick)})):window.removeEventListener("click",this.handleClick)},n.render=function(){var e=this,t=this.props,n=t.confirmMessage,r=void 0===n?"Confirm?":n,a=t.confirmColor,i=void 0===a?"bad":a,c=t.color,l=t.content,u=t.onClick,s=f(t,["confirmMessage","confirmColor","color","content","onClick"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({content:this.state.clickedOnce?r:l,color:this.state.clickedOnce?i:c,onClick:function(){return e.state.clickedOnce?u():e.setClickedOnce(!0)}},s)))},t}(o.Component);t.ButtonConfirm=g,h.Confirm=g;var b=function(e){function t(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={inInput:!1},t}p(t,e);var n=t.prototype;return n.setInInput=function(e){if(this.setState({inInput:e}),this.inputRef){var t=this.inputRef.current;if(e){t.value=this.props.currentValue||"";try{t.focus(),t.select()}catch(n){}}}},n.commitResult=function(e){if(this.inputRef){var t=this.inputRef.current;if(""!==t.value)return void this.props.onCommit(e,t.value);if(!this.props.defaultValue)return;this.props.onCommit(e,this.props.defaultValue)}},n.render=function(){var e=this,t=this.props,n=t.fluid,a=t.content,c=t.color,l=void 0===c?"default":c,s=(t.placeholder,t.maxLength,f(t,["fluid","content","color","placeholder","maxLength"]));return(0,o.normalizeProps)((0,o.createComponentVNode)(2,u.Box,Object.assign({className:(0,r.classes)(["Button",n&&"Button--fluid","Button--color--"+l])},s,{onClick:function(){return e.setInInput(!0)},children:[(0,o.createVNode)(1,"div",null,a,0),(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:this.state.inInput?undefined:"none","text-align":"left"},onBlur:function(t){e.state.inInput&&(e.setInInput(!1),e.commitResult(t))},onKeyDown:function(t){if(t.keyCode===i.KEY_ENTER)return e.setInInput(!1),void e.commitResult(t);t.keyCode===i.KEY_ESCAPE&&e.setInInput(!1)}},null,this.inputRef)]})))},t}(o.Component);t.ButtonInput=b,h.Input=b},function(e,t,n){"use strict";t.__esModule=!0,t.hotKeyReducer=t.hotKeyMiddleware=t.releaseHeldKeys=t.KEY_MINUS=t.KEY_EQUAL=t.KEY_Z=t.KEY_Y=t.KEY_X=t.KEY_W=t.KEY_V=t.KEY_U=t.KEY_T=t.KEY_S=t.KEY_R=t.KEY_Q=t.KEY_P=t.KEY_O=t.KEY_N=t.KEY_M=t.KEY_L=t.KEY_K=t.KEY_J=t.KEY_I=t.KEY_H=t.KEY_G=t.KEY_F=t.KEY_E=t.KEY_D=t.KEY_C=t.KEY_B=t.KEY_A=t.KEY_9=t.KEY_8=t.KEY_7=t.KEY_6=t.KEY_5=t.KEY_4=t.KEY_3=t.KEY_2=t.KEY_1=t.KEY_0=t.KEY_SPACE=t.KEY_ESCAPE=t.KEY_ALT=t.KEY_CTRL=t.KEY_SHIFT=t.KEY_ENTER=t.KEY_TAB=t.KEY_BACKSPACE=void 0;var o=n(51),r=n(19),a=(0,o.createLogger)("hotkeys");t.KEY_BACKSPACE=8;t.KEY_TAB=9;t.KEY_ENTER=13;t.KEY_SHIFT=16;t.KEY_CTRL=17;t.KEY_ALT=18;t.KEY_ESCAPE=27;t.KEY_SPACE=32;t.KEY_0=48;t.KEY_1=49;t.KEY_2=50;t.KEY_3=51;t.KEY_4=52;t.KEY_5=53;t.KEY_6=54;t.KEY_7=55;t.KEY_8=56;t.KEY_9=57;t.KEY_A=65;t.KEY_B=66;t.KEY_C=67;t.KEY_D=68;t.KEY_E=69;t.KEY_F=70;t.KEY_G=71;t.KEY_H=72;t.KEY_I=73;t.KEY_J=74;t.KEY_K=75;t.KEY_L=76;t.KEY_M=77;t.KEY_N=78;t.KEY_O=79;t.KEY_P=80;t.KEY_Q=81;t.KEY_R=82;t.KEY_S=83;t.KEY_T=84;t.KEY_U=85;t.KEY_V=86;t.KEY_W=87;t.KEY_X=88;t.KEY_Y=89;t.KEY_Z=90;t.KEY_EQUAL=187;t.KEY_MINUS=189;var i=[17,18,16],c=[27,13,32,9,17,16],l={},u=function(e,t,n,o){var r="";return e&&(r+="Ctrl+"),t&&(r+="Alt+"),n&&(r+="Shift+"),r+=o>=48&&o<=90?String.fromCharCode(o):"["+o+"]"},s=function(e){var t=window.event?e.which:e.keyCode,n=e.ctrlKey,o=e.altKey,r=e.shiftKey;return{keyCode:t,ctrlKey:n,altKey:o,shiftKey:r,hasModifierKeys:n||o||r,keyString:u(n,o,r,t)}},d=function(){for(var e=0,t=Object.keys(l);e4&&function(e,t){if(!e.defaultPrevented){var n=e.target&&e.target.localName;if("input"!==n&&"textarea"!==n){var o=s(e),i=o.keyCode,u=o.ctrlKey,d=o.shiftKey;u||d||c.includes(i)||("keydown"!==t||l[i]?"keyup"===t&&l[i]&&(a.debug("passthrough",t,o),(0,r.callByond)("",{__keyup:i})):(a.debug("passthrough",t,o),(0,r.callByond)("",{__keydown:i})))}}}(e,t),function(e,t,n){if("keyup"===t){var o=s(e),r=o.ctrlKey,c=o.altKey,l=o.keyCode,u=o.hasModifierKeys,d=o.keyString;u&&!i.includes(l)&&(a.log(d),r&&c&&8===l&&setTimeout((function(){throw new Error("OOPSIE WOOPSIE!! UwU We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!")})),n({type:"hotKey",payload:o}))}}(e,t,n)},document.addEventListener("keydown",(function(e){var n=window.event?e.which:e.keyCode;t(e,"keydown"),l[n]=!0})),document.addEventListener("keyup",(function(e){var n=window.event?e.which:e.keyCode;t(e,"keyup"),l[n]=!1})),r.tridentVersion>4&&function(e){var t;document.addEventListener("focusout",(function(){t=setTimeout(e)})),document.addEventListener("focusin",(function(){clearTimeout(t)})),window.addEventListener("beforeunload",e)}((function(){d()})),function(e){return function(t){return e(t)}}};t.hotKeyReducer=function(e,t){var n=t.type,o=t.payload;if("hotKey"===n){var r=o.ctrlKey,a=o.altKey,i=o.keyCode;return r&&a&&187===i?Object.assign({},e,{showKitchenSink:!e.showKitchenSink}):e}return e}},function(e,t,n){"use strict";t.__esModule=!0,t.refocusLayout=void 0;var o=n(19);t.refocusLayout=function(){if(!(o.tridentVersion<=4)){var e=document.getElementById("Layout__content");e&&e.focus()}}},function(e,t,n){"use strict";t.__esModule=!0,t.toastReducer=t.showToast=t.Toast=void 0;var o,r=n(1),a=n(12),i=function(e){var t=e.content,n=e.children;return(0,r.createVNode)(1,"div","Layout__toast",[t,n],0)};t.Toast=i,i.defaultHooks=a.pureComponentHooks;t.showToast=function(e,t){o&&clearTimeout(o),o=setTimeout((function(){o=undefined,e({type:"hideToast"})}),5e3),e({type:"showToast",payload:{text:t}})};t.toastReducer=function(e,t){var n=t.type,o=t.payload;if("showToast"===n){var r=o.text;return Object.assign({},e,{toastText:r})}return"hideToast"===n?Object.assign({},e,{toastText:null}):e}},function(e,t,n){"use strict";var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(r){"object"==typeof window&&(o=window)}e.exports=o},function(e,t,n){"use strict";var o=n(9),r=n(4),a=n(88);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var o=n(5),r=n(89),a=o["__core-js_shared__"]||r("__core-js_shared__",{});e.exports=a},function(e,t,n){"use strict";var o=n(5),r=n(90),a=o.WeakMap;e.exports="function"==typeof a&&/native code/.test(r(a))},function(e,t,n){"use strict";var o=n(15),r=n(92),a=n(18),i=n(13);e.exports=function(e,t){for(var n=r(t),c=i.f,l=a.f,u=0;ul;)o(c,n=t[l++])&&(~a(u,n)||u.push(n));return u}},function(e,t,n){"use strict";var o=n(95);e.exports=o&&!Symbol.sham&&"symbol"==typeof Symbol()},function(e,t,n){"use strict";var o=n(9),r=n(13),a=n(8),i=n(62);e.exports=o?Object.defineProperties:function(e,t){a(e);for(var n,o=i(t),c=o.length,l=0;c>l;)r.f(e,n=o[l++],t[n]);return e}},function(e,t,n){"use strict";var o=n(35);e.exports=o("document","documentElement")},function(e,t,n){"use strict";var o=n(23),r=n(47).f,a={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(e){try{return r(e)}catch(t){return i.slice()}};e.exports.f=function(e){return i&&"[object Window]"==a.call(e)?c(e):r(o(e))}},function(e,t,n){"use strict";var o=n(11);t.f=o},function(e,t,n){"use strict";var o=n(14),r=n(41),a=n(10),i=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),c=a(n.length),l=r(e,c),u=r(t,c),s=arguments.length>2?arguments[2]:undefined,d=i((s===undefined?c:r(s,c))-u,c-l),p=1;for(u0;)u in n?n[l]=n[u]:delete n[l],l+=p,u+=p;return n}},function(e,t,n){"use strict";var o=n(52),r=n(10),a=n(48);e.exports=function i(e,t,n,c,l,u,s,d){for(var p,f=l,m=0,h=!!s&&a(s,d,3);m0&&o(p))f=i(e,t,p,r(p.length),f,u-1)-1;else{if(f>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[f]=p}f++}m++}return f}},function(e,t,n){"use strict";var o=n(8);e.exports=function(e,t,n,r){try{return r?t(o(n)[0],n[1]):t(n)}catch(i){var a=e["return"];throw a!==undefined&&o(a.call(e)),i}}},function(e,t,n){"use strict";var o=n(23),r=n(44),a=n(65),i=n(34),c=n(101),l=i.set,u=i.getterFor("Array Iterator");e.exports=c(Array,"Array",(function(e,t){l(this,{type:"Array Iterator",target:o(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,o=e.index++;return!t||o>=t.length?(e.target=undefined,{value:undefined,done:!0}):"keys"==n?{value:o,done:!1}:"values"==n?{value:t[o],done:!1}:{value:[o,t[o]],done:!1}}),"values"),a.Arguments=a.Array,r("keys"),r("values"),r("entries")},function(e,t,n){"use strict";var o,r,a,i=n(36),c=n(24),l=n(15),u=n(11),s=n(38),d=u("iterator"),p=!1;[].keys&&("next"in(a=[].keys())?(r=i(i(a)))!==Object.prototype&&(o=r):p=!0),o==undefined&&(o={}),s||l(o,d)||c(o,d,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:p}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e){if(!o(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},function(e,t,n){"use strict";var o=n(23),r=n(29),a=n(10),i=n(39),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,s=i("lastIndexOf");e.exports=u||s?function(e){if(u)return l.apply(this,arguments)||0;var t=o(this),n=a(t.length),i=n-1;for(arguments.length>1&&(i=c(i,r(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in t&&t[i]===e)return i||0;return-1}:l},function(e,t,n){"use strict";var o=n(29),r=n(10);e.exports=function(e){if(e===undefined)return 0;var t=o(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},function(e,t,n){"use strict";var o=n(30),r=n(6),a=[].slice,i={},c=function(e,t,n){if(!(t in i)){for(var o=[],r=0;r1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),a(s.prototype,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return C(this,0===e?0:e,t)}}:{add:function(e){return C(this,e=0===e?0:e,e)}}),d&&o(s.prototype,"size",{get:function(){return f(this).size}}),s},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);u(e,t,(function(e,t){m(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),s(t)}}},function(e,t,n){"use strict";var o=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:o(1+e)}},function(e,t,n){"use strict";var o=n(6),r=Math.floor;e.exports=function(e){return!o(e)&&isFinite(e)&&r(e)===e}},function(e,t,n){"use strict";var o=n(5),r=n(56).trim,a=n(81),i=o.parseInt,c=/^[+-]?0[Xx]/,l=8!==i(a+"08")||22!==i(a+"0x16");e.exports=l?function(e,t){var n=r(String(e));return i(n,t>>>0||(c.test(n)?16:10))}:i},function(e,t,n){"use strict";var o=n(9),r=n(62),a=n(23),i=n(71).f,c=function(e){return function(t){for(var n,c=a(t),l=r(c),u=l.length,s=0,d=[];u>s;)n=l[s++],o&&!i.call(c,n)||d.push(e?[n,c[n]]:c[n]);return d}};e.exports={entries:c(!0),values:c(!1)}},function(e,t,n){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){"use strict";var o=n(5);e.exports=o.Promise},function(e,t,n){"use strict";var o=n(73);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(o)},function(e,t,n){"use strict";var o,r,a,i,c,l,u,s,d=n(5),p=n(18).f,f=n(32),m=n(106).set,h=n(146),C=d.MutationObserver||d.WebKitMutationObserver,g=d.process,b=d.Promise,v="process"==f(g),N=p(d,"queueMicrotask"),V=N&&N.value;V||(o=function(){var e,t;for(v&&(e=g.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},v?i=function(){g.nextTick(o)}:C&&!h?(c=!0,l=document.createTextNode(""),new C(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c}):b&&b.resolve?(u=b.resolve(undefined),s=u.then,i=function(){s.call(u,o)}):i=function(){m.call(d,o)}),e.exports=V||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},function(e,t,n){"use strict";var o=n(8),r=n(6),a=n(149);e.exports=function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";var o=n(30),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},function(e,t,n){"use strict";var o=n(73);e.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o)},function(e,t,n){"use strict";var o=n(347);e.exports=function(e,t){var n=o(e);if(n%t)throw RangeError("Wrong offset");return n}},function(e,t,n){"use strict";var o=n(14),r=n(10),a=n(99),i=n(98),c=n(48),l=n(7).aTypedArrayConstructor;e.exports=function(e){var t,n,u,s,d,p,f=o(e),m=arguments.length,h=m>1?arguments[1]:undefined,C=h!==undefined,g=a(f);if(g!=undefined&&!i(g))for(p=(d=g.call(f)).next,f=[];!(s=p.call(d)).done;)f.push(s.value);for(C&&m>2&&(h=c(h,arguments[2],2)),n=r(f.length),u=new(l(this))(n),t=0;n>t;t++)u[t]=C?h(f[t],t):f[t];return u}},function(e,t,n){"use strict";var o=n(66),r=n(50).getWeakData,a=n(8),i=n(6),c=n(55),l=n(68),u=n(16),s=n(15),d=n(34),p=d.set,f=d.getterFor,m=u.find,h=u.findIndex,C=0,g=function(e){return e.frozen||(e.frozen=new b)},b=function(){this.entries=[]},v=function(e,t){return m(e.entries,(function(e){return e[0]===t}))};b.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=h(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,u){var d=e((function(e,o){c(e,d,t),p(e,{type:t,id:C++,frozen:undefined}),o!=undefined&&l(o,e[u],e,n)})),m=f(t),h=function(e,t,n){var o=m(e),i=r(a(t),!0);return!0===i?g(o).set(t,n):i[o.id]=n,e};return o(d.prototype,{"delete":function(e){var t=m(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t)["delete"](e):n&&s(n,t.id)&&delete n[t.id]},has:function(e){var t=m(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t).has(e):n&&s(n,t.id)}}),o(d.prototype,n?{get:function(e){var t=m(this);if(i(e)){var n=r(e);return!0===n?g(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return h(this,e,t)}}:{add:function(e){return h(this,e,!0)}}),d}}},function(e,t,n){"use strict";t.__esModule=!0,t.setupHotReloading=t.sendLogEntry=void 0;t.sendLogEntry=function(e,t){};t.setupHotReloading=function(){0}},function(e,t,n){"use strict";t.__esModule=!0,t.resizeStartHandler=t.dragStartHandler=t.setupDrag=void 0;var o,r,a,i,c,l=n(156),u=n(19),s=(0,n(51).createLogger)("drag"),d=!1,p=!1,f=[0,0],m=function(e){return(0,u.winget)(e,"pos").then((function(e){return[e.x,e.y]}))},h=function(e,t){return(0,u.winset)(e,"pos",t[0]+","+t[1])},C=function(e){var t,n,r,a;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return s.log("setting up"),o=e.config.window,i.next=4,regeneratorRuntime.awrap(m(o));case 4:t=i.sent,f=[t[0]-window.screenLeft,t[1]-window.screenTop],n=g(t),r=n[0],a=n[1],r&&h(o,a),s.debug("current state",{ref:o,screenOffset:f});case 9:case"end":return i.stop()}}))};t.setupDrag=C;var g=function(e){var t=e[0],n=e[1],o=!1;return t<0?(t=0,o=!0):t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth,o=!0),n<0?(n=0,o=!0):n+window.innerHeight>window.screen.availHeight&&(n=window.screen.availHeight-window.innerHeight,o=!0),[o,[t,n]]};t.dragStartHandler=function(e){s.log("drag start"),d=!0,r=[window.screenLeft-e.screenX,window.screenTop-e.screenY],document.addEventListener("mousemove",v),document.addEventListener("mouseup",b),v(e)};var b=function y(e){s.log("drag end"),v(e),document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",y),d=!1},v=function(e){d&&(e.preventDefault(),h(o,(0,l.vecAdd)([e.screenX,e.screenY],f,r)))};t.resizeStartHandler=function(e,t){return function(n){a=[e,t],s.log("resize start",a),p=!0,r=[window.screenLeft-n.screenX,window.screenTop-n.screenY],i=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",V),document.addEventListener("mouseup",N),V(n)}};var N=function _(e){s.log("resize end",c),V(e),document.removeEventListener("mousemove",V),document.removeEventListener("mouseup",_),p=!1},V=function(e){p&&(e.preventDefault(),(c=(0,l.vecAdd)(i,(0,l.vecMultiply)(a,(0,l.vecAdd)([e.screenX,e.screenY],(0,l.vecInverse)([window.screenLeft,window.screenTop]),r,[1,1]))))[0]=Math.max(c[0],250),c[1]=Math.max(c[1],120),function(e,t){(0,u.winset)(e,"size",t[0]+","+t[1])}(o,c))}},function(e,t,n){"use strict";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=t.vecCreate=void 0;var o=n(28);t.vecCreate=function(){for(var e=arguments.length,t=new Array(e),n=0;n35;return(0,o.createVNode)(1,"div",(0,r.classes)(["Tooltip",i&&"Tooltip--long",a&&"Tooltip--"+a]),null,1,{"data-tooltip":t})}},function(e,t,n){"use strict";t.__esModule=!0,t.Input=void 0;var o=n(1),r=n(12),a=n(17);function i(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}var c=function(e){return(0,r.isFalsy)(e)?"":e},l=function(e){var t,n;function l(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={editing:!1},t.handleInput=function(e){var n=t.state.editing,o=t.props.onInput;n||t.setEditing(!0),o&&o(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,o=t.props.onChange;n&&(t.setEditing(!1),o&&o(e,e.target.value))},t.handleKeyDown=function(e){var n=t.props,o=n.onInput,r=n.onChange,a=n.onEnter;return 13===e.keyCode?(t.setEditing(!1),r&&r(e,e.target.value),o&&o(e,e.target.value),a&&a(e,e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):27===e.keyCode?(t.setEditing(!1),e.target.value=c(t.props.value),void e.target.blur()):void 0},t}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=l.prototype;return u.componentDidMount=function(){var e=this.props.value,t=this.inputRef.current;t&&(t.value=c(e))},u.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.inputRef.current;a&&!n&&o!==r&&(a.value=c(r))},u.setEditing=function(e){this.setState({editing:e})},u.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,c=i(e,["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder"]),l=c.className,u=c.fluid,s=i(c,["className","fluid"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Input",u&&"Input--fluid",l])},s,{children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),(0,o.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t},null,this.inputRef)]})))},l}(o.Component);t.Input=l},function(e,t,n){"use strict";t.__esModule=!0,t.GridColumn=t.Grid=void 0;var o=n(1),r=n(162),a=n(12);function i(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}var c=function(e){var t=e.children,n=i(e,["children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table,Object.assign({},n,{children:(0,o.createComponentVNode)(2,r.Table.Row,{children:t})})))};t.Grid=c,c.defaultHooks=a.pureComponentHooks;var l=function(e){var t=e.size,n=void 0===t?1:t,a=e.style,c=i(e,["size","style"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table.Cell,Object.assign({style:Object.assign({width:n+"%"},a)},c)))};t.GridColumn=l,c.defaultHooks=a.pureComponentHooks,c.Column=l},function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var o=n(1),r=n(12),a=n(17);function i(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}var c=function(e){var t=e.collapsing,n=e.className,c=e.content,l=e.children,u=i(e,["collapsing","className","content","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"table",className:(0,r.classes)(["Table",t&&"Table--collapsing",n])},u,{children:(0,o.createVNode)(1,"tbody",null,[c,l],0)})))};t.Table=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.header,c=i(e,["className","header"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"tr",className:(0,r.classes)(["Table__row",n&&"Table__row--header",t])},c)))};t.TableRow=l,l.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.className,n=e.collapsing,c=e.header,l=i(e,["className","collapsing","header"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"td",className:(0,r.classes)(["Table__cell",n&&"Table__cell--collapsing",c&&"Table__cell--header",t])},l)))};t.TableCell=u,u.defaultHooks=r.pureComponentHooks,c.Row=l,c.Cell=u},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListDivider=t.LabeledListItem=t.LabeledList=void 0;var o=n(1),r=n(12),a=n(17),i=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=i,i.defaultHooks=r.pureComponentHooks;var c=function(e){var t=e.className,n=e.label,i=e.labelColor,c=void 0===i?"label":i,l=e.color,u=e.buttons,s=e.content,d=e.children;return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:c,className:(0,r.classes)(["LabeledList__cell","LabeledList__label"]),content:n+":"}),(0,o.createComponentVNode)(2,a.Box,{as:"td",color:l,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:u?undefined:2,children:[s,d]}),u&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",u,0)],0)};t.LabeledListItem=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.size,n=void 0===t?1:t;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,null,1,{style:{"padding-bottom":(0,a.unit)(n)}}),2)};t.LabeledListDivider=l,l.defaultHooks=r.pureComponentHooks,i.Item=c,i.Divider=l},function(e,t,n){n(165),n(166),n(167),n(168),n(169),n(170),e.exports=n(171)},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n(172),n(173),n(174),n(175),n(176),n(177),n(178),n(179),n(180),n(181),n(182),n(183),n(184),n(185),n(186),n(187),n(188),n(189),n(190),n(191),n(192),n(193),n(194),n(195),n(197),n(199),n(200),n(201),n(133),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(218),n(219),n(220),n(221),n(222),n(224),n(225),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(256),n(257),n(258),n(259),n(260),n(261),n(263),n(264),n(266),n(268),n(269),n(270),n(271),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(292),n(293),n(294),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(344),n(345),n(346),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385);var o=n(1);n(387),n(388);var r=n(389),a=(n(154),n(3)),i=n(19),c=n(155),l=n(51),u=n(157),s=n(496),d=(0,l.createLogger)(),p=(0,s.createStore)(),f=document.getElementById("react-root"),m=!0,h=!1,C=function(){for(p.subscribe((function(){!function(){if(!h){0;try{var e=p.getState();if(m){if(d.log("initial render",e),!(0,u.getRoute)(e)){if(d.info("loading old tgui"),h=!0,window.update=window.initialize=function(){},i.tridentVersion<=4)return void setTimeout((function(){location.href="tgui-fallback.html?ref="+window.__ref__}),10);document.getElementById("data").textContent=JSON.stringify(e),(0,r.loadCSS)("v4shim.css"),(0,r.loadCSS)("tgui.css");var t=document.getElementsByTagName("head")[0],a=document.createElement("script");return a.type="text/javascript",a.src="tgui.js",void t.appendChild(a)}(0,c.setupDrag)(e)}var l=n(498).Layout,s=(0,o.createComponentVNode)(2,l,{state:e,dispatch:p.dispatch});(0,o.render)(s,f)}catch(C){d.error("rendering error",C)}m&&(m=!1)}}()})),window.update=window.initialize=function(e){var t=function(e){var t=function(e,t){return"object"==typeof t&&null!==t&&t.__number__?parseFloat(t.__number__):t};i.tridentVersion<=4&&(t=undefined);try{return JSON.parse(e,t)}catch(o){d.log(o),d.log("What we got:",e);var n=o&&o.message;throw new Error("JSON parsing error: "+n)}}(e);p.dispatch((0,a.backendUpdate)(t))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}(0,r.loadCSS)("font-awesome.css")};i.tridentVersion<=4&&"loading"===document.readyState?document.addEventListener("DOMContentLoaded",C):C()},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(35),i=n(38),c=n(9),l=n(95),u=n(125),s=n(4),d=n(15),p=n(52),f=n(6),m=n(8),h=n(14),C=n(23),g=n(33),b=n(46),v=n(42),N=n(62),V=n(47),y=n(128),_=n(94),x=n(18),k=n(13),w=n(71),L=n(24),B=n(22),S=n(91),I=n(72),T=n(59),A=n(58),E=n(11),P=n(129),O=n(25),M=n(43),R=n(34),F=n(16).forEach,D=I("hidden"),j=E("toPrimitive"),z=R.set,H=R.getterFor("Symbol"),G=Object.prototype,U=r.Symbol,K=a("JSON","stringify"),Y=x.f,q=k.f,W=y.f,$=w.f,Q=S("symbols"),X=S("op-symbols"),J=S("string-to-symbol-registry"),Z=S("symbol-to-string-registry"),ee=S("wks"),te=r.QObject,ne=!te||!te.prototype||!te.prototype.findChild,oe=c&&s((function(){return 7!=v(q({},"a",{get:function(){return q(this,"a",{value:7}).a}})).a}))?function(e,t,n){var o=Y(G,t);o&&delete G[t],q(e,t,n),o&&e!==G&&q(G,t,o)}:q,re=function(e,t){var n=Q[e]=v(U.prototype);return z(n,{type:"Symbol",tag:e,description:t}),c||(n.description=t),n},ae=l&&"symbol"==typeof U.iterator?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof U},ie=function(e,t,n){e===G&&ie(X,t,n),m(e);var o=g(t,!0);return m(n),d(Q,o)?(n.enumerable?(d(e,D)&&e[D][o]&&(e[D][o]=!1),n=v(n,{enumerable:b(0,!1)})):(d(e,D)||q(e,D,b(1,{})),e[D][o]=!0),oe(e,o,n)):q(e,o,n)},ce=function(e,t){m(e);var n=C(t),o=N(n).concat(pe(n));return F(o,(function(t){c&&!ue.call(n,t)||ie(e,t,n[t])})),e},le=function(e,t){return t===undefined?v(e):ce(v(e),t)},ue=function(e){var t=g(e,!0),n=$.call(this,t);return!(this===G&&d(Q,t)&&!d(X,t))&&(!(n||!d(this,t)||!d(Q,t)||d(this,D)&&this[D][t])||n)},se=function(e,t){var n=C(e),o=g(t,!0);if(n!==G||!d(Q,o)||d(X,o)){var r=Y(n,o);return!r||!d(Q,o)||d(n,D)&&n[D][o]||(r.enumerable=!0),r}},de=function(e){var t=W(C(e)),n=[];return F(t,(function(e){d(Q,e)||d(T,e)||n.push(e)})),n},pe=function(e){var t=e===G,n=W(t?X:C(e)),o=[];return F(n,(function(e){!d(Q,e)||t&&!d(G,e)||o.push(Q[e])})),o};(l||(B((U=function(){if(this instanceof U)throw TypeError("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==undefined?String(arguments[0]):undefined,t=A(e),n=function o(e){this===G&&o.call(X,e),d(this,D)&&d(this[D],t)&&(this[D][t]=!1),oe(this,t,b(1,e))};return c&&ne&&oe(G,t,{configurable:!0,set:n}),re(t,e)}).prototype,"toString",(function(){return H(this).tag})),w.f=ue,k.f=ie,x.f=se,V.f=y.f=de,_.f=pe,c&&(q(U.prototype,"description",{configurable:!0,get:function(){return H(this).description}}),i||B(G,"propertyIsEnumerable",ue,{unsafe:!0}))),u||(P.f=function(e){return re(E(e),e)}),o({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:U}),F(N(ee),(function(e){O(e)})),o({target:"Symbol",stat:!0,forced:!l},{"for":function(e){var t=String(e);if(d(J,t))return J[t];var n=U(t);return J[t]=n,Z[n]=t,n},keyFor:function(e){if(!ae(e))throw TypeError(e+" is not a symbol");if(d(Z,e))return Z[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),o({target:"Object",stat:!0,forced:!l,sham:!c},{create:le,defineProperty:ie,defineProperties:ce,getOwnPropertyDescriptor:se}),o({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:de,getOwnPropertySymbols:pe}),o({target:"Object",stat:!0,forced:s((function(){_.f(1)}))},{getOwnPropertySymbols:function(e){return _.f(h(e))}}),K)&&o({target:"JSON",stat:!0,forced:!l||s((function(){var e=U();return"[null]"!=K([e])||"{}"!=K({a:e})||"{}"!=K(Object(e))}))},{stringify:function(e,t,n){for(var o,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(o=t,(f(t)||e!==undefined)&&!ae(e))return p(t)||(t=function(e,t){if("function"==typeof o&&(t=o.call(this,e,t)),!ae(t))return t}),r[1]=t,K.apply(null,r)}});U.prototype[j]||L(U.prototype,j,U.prototype.valueOf),M(U,"Symbol"),T[D]=!0},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(5),i=n(15),c=n(6),l=n(13).f,u=n(122),s=a.Symbol;if(r&&"function"==typeof s&&(!("description"in s.prototype)||s().description!==undefined)){var d={},p=function(){var e=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]),t=this instanceof p?new s(e):e===undefined?s():s(e);return""===e&&(d[t]=!0),t};u(p,s);var f=p.prototype=s.prototype;f.constructor=p;var m=f.toString,h="Symbol(test)"==String(s("test")),C=/^Symbol\((.*)\)[^)]+$/;l(f,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=m.call(e);if(i(d,e))return"";var n=h?t.slice(7,-1):t.replace(C,"$1");return""===n?undefined:n}}),o({global:!0,forced:!0},{Symbol:p})}},function(e,t,n){"use strict";n(25)("asyncIterator")},function(e,t,n){"use strict";n(25)("hasInstance")},function(e,t,n){"use strict";n(25)("isConcatSpreadable")},function(e,t,n){"use strict";n(25)("iterator")},function(e,t,n){"use strict";n(25)("match")},function(e,t,n){"use strict";n(25)("replace")},function(e,t,n){"use strict";n(25)("search")},function(e,t,n){"use strict";n(25)("species")},function(e,t,n){"use strict";n(25)("split")},function(e,t,n){"use strict";n(25)("toPrimitive")},function(e,t,n){"use strict";n(25)("toStringTag")},function(e,t,n){"use strict";n(25)("unscopables")},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(52),i=n(6),c=n(14),l=n(10),u=n(49),s=n(63),d=n(64),p=n(11),f=n(96),m=p("isConcatSpreadable"),h=9007199254740991,C="Maximum allowed index exceeded",g=f>=51||!r((function(){var e=[];return e[m]=!1,e.concat()[0]!==e})),b=d("concat"),v=function(e){if(!i(e))return!1;var t=e[m];return t!==undefined?!!t:a(e)};o({target:"Array",proto:!0,forced:!g||!b},{concat:function(e){var t,n,o,r,a,i=c(this),d=s(i,0),p=0;for(t=-1,o=arguments.length;th)throw TypeError(C);for(n=0;n=h)throw TypeError(C);u(d,p++,a)}return d.length=p,d}})},function(e,t,n){"use strict";var o=n(0),r=n(130),a=n(44);o({target:"Array",proto:!0},{copyWithin:r}),a("copyWithin")},function(e,t,n){"use strict";var o=n(0),r=n(16).every;o({target:"Array",proto:!0,forced:n(39)("every")},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(97),a=n(44);o({target:"Array",proto:!0},{fill:r}),a("fill")},function(e,t,n){"use strict";var o=n(0),r=n(16).filter,a=n(4),i=n(64)("filter"),c=i&&!a((function(){[].filter.call({length:-1,0:1},(function(e){throw e}))}));o({target:"Array",proto:!0,forced:!i||!c},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(16).find,a=n(44),i=!0;"find"in[]&&Array(1).find((function(){i=!1})),o({target:"Array",proto:!0,forced:i},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("find")},function(e,t,n){"use strict";var o=n(0),r=n(16).findIndex,a=n(44),i=!0;"findIndex"in[]&&Array(1).findIndex((function(){i=!1})),o({target:"Array",proto:!0,forced:i},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("findIndex")},function(e,t,n){"use strict";var o=n(0),r=n(131),a=n(14),i=n(10),c=n(29),l=n(63);o({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:undefined,t=a(this),n=i(t.length),o=l(t,0);return o.length=r(o,t,t,n,0,e===undefined?1:c(e)),o}})},function(e,t,n){"use strict";var o=n(0),r=n(131),a=n(14),i=n(10),c=n(30),l=n(63);o({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),o=i(n.length);return c(e),(t=l(n,0)).length=r(t,n,n,o,0,1,e,arguments.length>1?arguments[1]:undefined),t}})},function(e,t,n){"use strict";var o=n(0),r=n(196);o({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},function(e,t,n){"use strict";var o=n(16).forEach,r=n(39);e.exports=r("forEach")?function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}:[].forEach},function(e,t,n){"use strict";var o=n(0),r=n(198);o({target:"Array",stat:!0,forced:!n(75)((function(e){Array.from(e)}))},{from:r})},function(e,t,n){"use strict";var o=n(48),r=n(14),a=n(132),i=n(98),c=n(10),l=n(49),u=n(99);e.exports=function(e){var t,n,s,d,p,f=r(e),m="function"==typeof this?this:Array,h=arguments.length,C=h>1?arguments[1]:undefined,g=C!==undefined,b=0,v=u(f);if(g&&(C=o(C,h>2?arguments[2]:undefined,2)),v==undefined||m==Array&&i(v))for(n=new m(t=c(f.length));t>b;b++)l(n,b,g?C(f[b],b):f[b]);else for(p=(d=v.call(f)).next,n=new m;!(s=p.call(d)).done;b++)l(n,b,g?a(d,C,[s.value,b],!0):s.value);return n.length=b,n}},function(e,t,n){"use strict";var o=n(0),r=n(60).includes,a=n(44);o({target:"Array",proto:!0},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("includes")},function(e,t,n){"use strict";var o=n(0),r=n(60).indexOf,a=n(39),i=[].indexOf,c=!!i&&1/[1].indexOf(1,-0)<0,l=a("indexOf");o({target:"Array",proto:!0,forced:c||l},{indexOf:function(e){return c?i.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";n(0)({target:"Array",stat:!0},{isArray:n(52)})},function(e,t,n){"use strict";var o=n(134).IteratorPrototype,r=n(42),a=n(46),i=n(43),c=n(65),l=function(){return this};e.exports=function(e,t,n){var u=t+" Iterator";return e.prototype=r(o,{next:a(1,n)}),i(e,u,!1,!0),c[u]=l,e}},function(e,t,n){"use strict";var o=n(0),r=n(57),a=n(23),i=n(39),c=[].join,l=r!=Object,u=i("join",",");o({target:"Array",proto:!0,forced:l||u},{join:function(e){return c.call(a(this),e===undefined?",":e)}})},function(e,t,n){"use strict";var o=n(0),r=n(136);o({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},function(e,t,n){"use strict";var o=n(0),r=n(16).map,a=n(4),i=n(64)("map"),c=i&&!a((function(){[].map.call({length:-1,0:1},(function(e){throw e}))}));o({target:"Array",proto:!0,forced:!i||!c},{map:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(49);o({target:"Array",stat:!0,forced:r((function(){function e(){}return!(Array.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)a(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var o=n(0),r=n(76).left;o({target:"Array",proto:!0,forced:n(39)("reduce")},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(76).right;o({target:"Array",proto:!0,forced:n(39)("reduceRight")},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(52),i=n(41),c=n(10),l=n(23),u=n(49),s=n(64),d=n(11)("species"),p=[].slice,f=Math.max;o({target:"Array",proto:!0,forced:!s("slice")},{slice:function(e,t){var n,o,s,m=l(this),h=c(m.length),C=i(e,h),g=i(t===undefined?h:t,h);if(a(m)&&("function"!=typeof(n=m.constructor)||n!==Array&&!a(n.prototype)?r(n)&&null===(n=n[d])&&(n=undefined):n=undefined,n===Array||n===undefined))return p.call(m,C,g);for(o=new(n===undefined?Array:n)(f(g-C,0)),s=0;C1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(30),a=n(14),i=n(4),c=n(39),l=[],u=l.sort,s=i((function(){l.sort(undefined)})),d=i((function(){l.sort(null)})),p=c("sort");o({target:"Array",proto:!0,forced:s||!d||p},{sort:function(e){return e===undefined?u.call(a(this)):u.call(a(this),r(e))}})},function(e,t,n){"use strict";n(54)("Array")},function(e,t,n){"use strict";var o=n(0),r=n(41),a=n(29),i=n(10),c=n(14),l=n(63),u=n(49),s=n(64),d=Math.max,p=Math.min,f=9007199254740991,m="Maximum allowed length exceeded";o({target:"Array",proto:!0,forced:!s("splice")},{splice:function(e,t){var n,o,s,h,C,g,b=c(this),v=i(b.length),N=r(e,v),V=arguments.length;if(0===V?n=o=0:1===V?(n=0,o=v-N):(n=V-2,o=p(d(a(t),0),v-N)),v+n-o>f)throw TypeError(m);for(s=l(b,o),h=0;hv-o+n;h--)delete b[h-1]}else if(n>o)for(h=v-o;h>N;h--)g=h+n-1,(C=h+o-1)in b?b[g]=b[C]:delete b[g];for(h=0;h>1,h=23===t?r(2,-24)-r(2,-77):0,C=e<0||0===e&&1/e<0?1:0,g=0;for((e=o(e))!=e||e===1/0?(u=e!=e?1:0,l=f):(l=a(i(e)/c),e*(s=r(2,-l))<1&&(l--,s*=2),(e+=l+m>=1?h/s:h*r(2,1-m))*s>=2&&(l++,s/=2),l+m>=f?(u=0,l=f):l+m>=1?(u=(e*s-1)*r(2,t),l+=m):(u=e*r(2,m-1)*r(2,t),l=0));t>=8;d[g++]=255&u,u/=256,t-=8);for(l=l<0;d[g++]=255&l,l/=256,p-=8);return d[--g]|=128*C,d},unpack:function(e,t){var n,o=e.length,a=8*o-t-1,i=(1<>1,l=a-7,u=o-1,s=e[u--],d=127&s;for(s>>=7;l>0;d=256*d+e[u],u--,l-=8);for(n=d&(1<<-l)-1,d>>=-l,l+=t;l>0;n=256*n+e[u],u--,l-=8);if(0===d)d=1-c;else{if(d===i)return n?NaN:s?-1/0:1/0;n+=r(2,t),d-=c}return(s?-1:1)*n*r(2,d-t)}}},function(e,t,n){"use strict";var o=n(0),r=n(7);o({target:"ArrayBuffer",stat:!0,forced:!r.NATIVE_ARRAY_BUFFER_VIEWS},{isView:r.isView})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(77),i=n(8),c=n(41),l=n(10),u=n(45),s=a.ArrayBuffer,d=a.DataView,p=s.prototype.slice;o({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:r((function(){return!new s(2).slice(1,undefined).byteLength}))},{slice:function(e,t){if(p!==undefined&&t===undefined)return p.call(i(this),e);for(var n=i(this).byteLength,o=c(e,n),r=c(t===undefined?n:t,n),a=new(u(this,s))(l(r-o)),f=new d(this),m=new d(a),h=0;o9999?"+":"";return n+r(a(e),n?6:4,0)+"-"+r(this.getUTCMonth()+1,2,0)+"-"+r(this.getUTCDate(),2,0)+"T"+r(this.getUTCHours(),2,0)+":"+r(this.getUTCMinutes(),2,0)+":"+r(this.getUTCSeconds(),2,0)+"."+r(t,3,0)+"Z"}:l},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(14),i=n(33);o({target:"Date",proto:!0,forced:r((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=a(this),n=i(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){"use strict";var o=n(24),r=n(226),a=n(11)("toPrimitive"),i=Date.prototype;a in i||o(i,a,r)},function(e,t,n){"use strict";var o=n(8),r=n(33);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return r(o(this),"number"!==e)}},function(e,t,n){"use strict";var o=n(22),r=Date.prototype,a="Invalid Date",i=r.toString,c=r.getTime;new Date(NaN)+""!=a&&o(r,"toString",(function(){var e=c.call(this);return e==e?i.call(this):a}))},function(e,t,n){"use strict";n(0)({target:"Function",proto:!0},{bind:n(138)})},function(e,t,n){"use strict";var o=n(6),r=n(13),a=n(36),i=n(11)("hasInstance"),c=Function.prototype;i in c||r.f(c,i,{value:function(e){if("function"!=typeof this||!o(e))return!1;if(!o(this.prototype))return e instanceof this;for(;e=a(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){"use strict";var o=n(9),r=n(13).f,a=Function.prototype,i=a.toString,c=/^\s*function ([^ (]*)/;!o||"name"in a||r(a,"name",{configurable:!0,get:function(){try{return i.call(this).match(c)[1]}catch(e){return""}}})},function(e,t,n){"use strict";var o=n(5);n(43)(o.JSON,"JSON",!0)},function(e,t,n){"use strict";var o=n(78),r=n(139);e.exports=o("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},function(e,t,n){"use strict";var o=n(0),r=n(140),a=Math.acosh,i=Math.log,c=Math.sqrt,l=Math.LN2;o({target:"Math",stat:!0,forced:!a||710!=Math.floor(a(Number.MAX_VALUE))||a(Infinity)!=Infinity},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?i(e)+l:r(e-1+c(e-1)*c(e+1))}})},function(e,t,n){"use strict";var o=n(0),r=Math.asinh,a=Math.log,i=Math.sqrt;o({target:"Math",stat:!0,forced:!(r&&1/r(0)>0)},{asinh:function c(e){return isFinite(e=+e)&&0!=e?e<0?-c(-e):a(e+i(e*e+1)):e}})},function(e,t,n){"use strict";var o=n(0),r=Math.atanh,a=Math.log;o({target:"Math",stat:!0,forced:!(r&&1/r(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:a((1+e)/(1-e))/2}})},function(e,t,n){"use strict";var o=n(0),r=n(105),a=Math.abs,i=Math.pow;o({target:"Math",stat:!0},{cbrt:function(e){return r(e=+e)*i(a(e),1/3)}})},function(e,t,n){"use strict";var o=n(0),r=Math.floor,a=Math.log,i=Math.LOG2E;o({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-r(a(e+.5)*i):32}})},function(e,t,n){"use strict";var o=n(0),r=n(80),a=Math.cosh,i=Math.abs,c=Math.E;o({target:"Math",stat:!0,forced:!a||a(710)===Infinity},{cosh:function(e){var t=r(i(e)-1)+1;return(t+1/(t*c*c))*(c/2)}})},function(e,t,n){"use strict";var o=n(0),r=n(80);o({target:"Math",stat:!0,forced:r!=Math.expm1},{expm1:r})},function(e,t,n){"use strict";n(0)({target:"Math",stat:!0},{fround:n(241)})},function(e,t,n){"use strict";var o=n(105),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),u=a(2,-126),s=function(e){return e+1/i-1/i};e.exports=Math.fround||function(e){var t,n,a=r(e),d=o(e);return al||n!=n?d*Infinity:d*n}},function(e,t,n){"use strict";var o=n(0),r=Math.hypot,a=Math.abs,i=Math.sqrt;o({target:"Math",stat:!0,forced:!!r&&r(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,o,r=0,c=0,l=arguments.length,u=0;c0?(o=n/u)*o:n;return u===Infinity?Infinity:u*i(r)}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=Math.imul;o({target:"Math",stat:!0,forced:r((function(){return-5!=a(4294967295,5)||2!=a.length}))},{imul:function(e,t){var n=+e,o=+t,r=65535&n,a=65535&o;return 0|r*a+((65535&n>>>16)*a+r*(65535&o>>>16)<<16>>>0)}})},function(e,t,n){"use strict";var o=n(0),r=Math.log,a=Math.LOG10E;o({target:"Math",stat:!0},{log10:function(e){return r(e)*a}})},function(e,t,n){"use strict";n(0)({target:"Math",stat:!0},{log1p:n(140)})},function(e,t,n){"use strict";var o=n(0),r=Math.log,a=Math.LN2;o({target:"Math",stat:!0},{log2:function(e){return r(e)/a}})},function(e,t,n){"use strict";n(0)({target:"Math",stat:!0},{sign:n(105)})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(80),i=Math.abs,c=Math.exp,l=Math.E;o({target:"Math",stat:!0,forced:r((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return i(e=+e)<1?(a(e)-a(-e))/2:(c(e-1)-c(-e-1))*(l/2)}})},function(e,t,n){"use strict";var o=n(0),r=n(80),a=Math.exp;o({target:"Math",stat:!0},{tanh:function(e){var t=r(e=+e),n=r(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(a(e)+a(-e))}})},function(e,t,n){"use strict";n(43)(Math,"Math",!0)},function(e,t,n){"use strict";var o=n(0),r=Math.ceil,a=Math.floor;o({target:"Math",stat:!0},{trunc:function(e){return(e>0?a:r)(e)}})},function(e,t,n){"use strict";var o=n(9),r=n(5),a=n(61),i=n(22),c=n(15),l=n(32),u=n(79),s=n(33),d=n(4),p=n(42),f=n(47).f,m=n(18).f,h=n(13).f,C=n(56).trim,g="Number",b=r[g],v=b.prototype,N=l(p(v))==g,V=function(e){var t,n,o,r,a,i,c,l,u=s(e,!1);if("string"==typeof u&&u.length>2)if(43===(t=(u=C(u)).charCodeAt(0))||45===t){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:o=2,r=49;break;case 79:case 111:o=8,r=55;break;default:return+u}for(i=(a=u.slice(2)).length,c=0;cr)return NaN;return parseInt(a,o)}return+u};if(a(g,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var y,_=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof _&&(N?d((function(){v.valueOf.call(n)})):l(n)!=g)?u(new b(V(t)),n,_):V(t)},x=o?f(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;x.length>k;k++)c(b,y=x[k])&&!c(_,y)&&h(_,y,m(b,y));_.prototype=v,v.constructor=_,i(r,g,_)}},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{isFinite:n(255)})},function(e,t,n){"use strict";var o=n(5).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{isInteger:n(141)})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},function(e,t,n){"use strict";var o=n(0),r=n(141),a=Math.abs;o({target:"Number",stat:!0},{isSafeInteger:function(e){return r(e)&&a(e)<=9007199254740991}})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){"use strict";var o=n(0),r=n(262);o({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},function(e,t,n){"use strict";var o=n(5),r=n(56).trim,a=n(81),i=o.parseFloat,c=1/i(a+"-0")!=-Infinity;e.exports=c?function(e){var t=r(String(e)),n=i(t);return 0===n&&"-"==t.charAt(0)?-0:n}:i},function(e,t,n){"use strict";var o=n(0),r=n(142);o({target:"Number",stat:!0,forced:Number.parseInt!=r},{parseInt:r})},function(e,t,n){"use strict";var o=n(0),r=n(29),a=n(265),i=n(104),c=n(4),l=1..toFixed,u=Math.floor,s=function p(e,t,n){return 0===t?n:t%2==1?p(e,t-1,n*e):p(e*e,t/2,n)},d=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t};o({target:"Number",proto:!0,forced:l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){l.call({})}))},{toFixed:function(e){var t,n,o,c,l=a(this),p=r(e),f=[0,0,0,0,0,0],m="",h="0",C=function(e,t){for(var n=-1,o=t;++n<6;)o+=e*f[n],f[n]=o%1e7,o=u(o/1e7)},g=function(e){for(var t=6,n=0;--t>=0;)n+=f[t],f[t]=u(n/e),n=n%e*1e7},b=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==f[e]){var n=String(f[e]);t=""===t?n:t+i.call("0",7-n.length)+n}return t};if(p<0||p>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(m="-",l=-l),l>1e-21)if(n=(t=d(l*s(2,69,1))-69)<0?l*s(2,-t,1):l/s(2,t,1),n*=4503599627370496,(t=52-t)>0){for(C(0,n),o=p;o>=7;)C(1e7,0),o-=7;for(C(s(10,o,1),0),o=t-1;o>=23;)g(1<<23),o-=23;g(1<0?m+((c=h.length)<=p?"0."+i.call("0",p-c)+h:h.slice(0,c-p)+"."+h.slice(c-p)):m+h}})},function(e,t,n){"use strict";var o=n(32);e.exports=function(e){if("number"!=typeof e&&"Number"!=o(e))throw TypeError("Incorrect invocation");return+e}},function(e,t,n){"use strict";var o=n(0),r=n(267);o({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},function(e,t,n){"use strict";var o=n(9),r=n(4),a=n(62),i=n(94),c=n(71),l=n(14),u=n(57),s=Object.assign,d=Object.defineProperty;e.exports=!s||r((function(){if(o&&1!==s({b:1},s(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(e){t[e]=e})),7!=s({},e)[n]||"abcdefghijklmnopqrst"!=a(s({},t)).join("")}))?function(e,t){for(var n=l(e),r=arguments.length,s=1,d=i.f,p=c.f;r>s;)for(var f,m=u(arguments[s++]),h=d?a(m).concat(d(m)):a(m),C=h.length,g=0;C>g;)f=h[g++],o&&!p.call(m,f)||(n[f]=m[f]);return n}:s},function(e,t,n){"use strict";n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(42)})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(30),l=n(13);r&&o({target:"Object",proto:!0,forced:a},{__defineGetter__:function(e,t){l.f(i(this),e,{get:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var o=n(0),r=n(9);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperties:n(126)})},function(e,t,n){"use strict";var o=n(0),r=n(9);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperty:n(13).f})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(30),l=n(13);r&&o({target:"Object",proto:!0,forced:a},{__defineSetter__:function(e,t){l.f(i(this),e,{set:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var o=n(0),r=n(143).entries;o({target:"Object",stat:!0},{entries:function(e){return r(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(67),a=n(4),i=n(6),c=n(50).onFreeze,l=Object.freeze;o({target:"Object",stat:!0,forced:a((function(){l(1)})),sham:!r},{freeze:function(e){return l&&i(e)?l(c(e)):e}})},function(e,t,n){"use strict";var o=n(0),r=n(68),a=n(49);o({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,(function(e,n){a(t,e,n)}),undefined,!0),t}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(23),i=n(18).f,c=n(9),l=r((function(){i(1)}));o({target:"Object",stat:!0,forced:!c||l,sham:!c},{getOwnPropertyDescriptor:function(e,t){return i(a(e),t)}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(92),i=n(23),c=n(18),l=n(49);o({target:"Object",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(e){for(var t,n,o=i(e),r=c.f,u=a(o),s={},d=0;u.length>d;)(n=r(o,t=u[d++]))!==undefined&&l(s,t,n);return s}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(128).f;o({target:"Object",stat:!0,forced:r((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:a})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(14),i=n(36),c=n(102);o({target:"Object",stat:!0,forced:r((function(){i(1)})),sham:!c},{getPrototypeOf:function(e){return i(a(e))}})},function(e,t,n){"use strict";n(0)({target:"Object",stat:!0},{is:n(144)})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(6),i=Object.isExtensible;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isExtensible:function(e){return!!a(e)&&(!i||i(e))}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(6),i=Object.isFrozen;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isFrozen:function(e){return!a(e)||!!i&&i(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(6),i=Object.isSealed;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isSealed:function(e){return!a(e)||!!i&&i(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(14),a=n(62);o({target:"Object",stat:!0,forced:n(4)((function(){a(1)}))},{keys:function(e){return a(r(e))}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(33),l=n(36),u=n(18).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupGetter__:function(e){var t,n=i(this),o=c(e,!0);do{if(t=u(n,o))return t.get}while(n=l(n))}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(33),l=n(36),u=n(18).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupSetter__:function(e){var t,n=i(this),o=c(e,!0);do{if(t=u(n,o))return t.set}while(n=l(n))}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(50).onFreeze,i=n(67),c=n(4),l=Object.preventExtensions;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{preventExtensions:function(e){return l&&r(e)?l(a(e)):e}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(50).onFreeze,i=n(67),c=n(4),l=Object.seal;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{seal:function(e){return l&&r(e)?l(a(e)):e}})},function(e,t,n){"use strict";n(0)({target:"Object",stat:!0},{setPrototypeOf:n(53)})},function(e,t,n){"use strict";var o=n(100),r=n(22),a=n(291);o||r(Object.prototype,"toString",a,{unsafe:!0})},function(e,t,n){"use strict";var o=n(100),r=n(74);e.exports=o?{}.toString:function(){return"[object "+r(this)+"]"}},function(e,t,n){"use strict";var o=n(0),r=n(143).values;o({target:"Object",stat:!0},{values:function(e){return r(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(142);o({global:!0,forced:parseInt!=r},{parseInt:r})},function(e,t,n){"use strict";var o,r,a,i,c=n(0),l=n(38),u=n(5),s=n(35),d=n(145),p=n(22),f=n(66),m=n(43),h=n(54),C=n(6),g=n(30),b=n(55),v=n(32),N=n(90),V=n(68),y=n(75),_=n(45),x=n(106).set,k=n(147),w=n(148),L=n(295),B=n(149),S=n(296),I=n(34),T=n(61),A=n(11),E=n(96),P=A("species"),O="Promise",M=I.get,R=I.set,F=I.getterFor(O),D=d,j=u.TypeError,z=u.document,H=u.process,G=s("fetch"),U=B.f,K=U,Y="process"==v(H),q=!!(z&&z.createEvent&&u.dispatchEvent),W=0,$=T(O,(function(){if(!(N(D)!==String(D))){if(66===E)return!0;if(!Y&&"function"!=typeof PromiseRejectionEvent)return!0}if(l&&!D.prototype["finally"])return!0;if(E>=51&&/native code/.test(D))return!1;var e=D.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[P]=t,!(e.then((function(){}))instanceof t)})),Q=$||!y((function(e){D.all(e)["catch"]((function(){}))})),X=function(e){var t;return!(!C(e)||"function"!=typeof(t=e.then))&&t},J=function(e,t,n){if(!t.notified){t.notified=!0;var o=t.reactions;k((function(){for(var r=t.value,a=1==t.state,i=0;o.length>i;){var c,l,u,s=o[i++],d=a?s.ok:s.fail,p=s.resolve,f=s.reject,m=s.domain;try{d?(a||(2===t.rejection&&ne(e,t),t.rejection=1),!0===d?c=r:(m&&m.enter(),c=d(r),m&&(m.exit(),u=!0)),c===s.promise?f(j("Promise-chain cycle")):(l=X(c))?l.call(c,p,f):p(c)):f(r)}catch(h){m&&!u&&m.exit(),f(h)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&ee(e,t)}))}},Z=function(e,t,n){var o,r;q?((o=z.createEvent("Event")).promise=t,o.reason=n,o.initEvent(e,!1,!0),u.dispatchEvent(o)):o={promise:t,reason:n},(r=u["on"+e])?r(o):"unhandledrejection"===e&&L("Unhandled promise rejection",n)},ee=function(e,t){x.call(u,(function(){var n,o=t.value;if(te(t)&&(n=S((function(){Y?H.emit("unhandledRejection",o,e):Z("unhandledrejection",e,o)})),t.rejection=Y||te(t)?2:1,n.error))throw n.value}))},te=function(e){return 1!==e.rejection&&!e.parent},ne=function(e,t){x.call(u,(function(){Y?H.emit("rejectionHandled",e):Z("rejectionhandled",e,t.value)}))},oe=function(e,t,n,o){return function(r){e(t,n,r,o)}},re=function(e,t,n,o){t.done||(t.done=!0,o&&(t=o),t.value=n,t.state=2,J(e,t,!0))},ae=function ie(e,t,n,o){if(!t.done){t.done=!0,o&&(t=o);try{if(e===n)throw j("Promise can't be resolved itself");var r=X(n);r?k((function(){var o={done:!1};try{r.call(n,oe(ie,e,o,t),oe(re,e,o,t))}catch(a){re(e,o,a,t)}})):(t.value=n,t.state=1,J(e,t,!1))}catch(a){re(e,{done:!1},a,t)}}};$&&(D=function(e){b(this,D,O),g(e),o.call(this);var t=M(this);try{e(oe(ae,this,t),oe(re,this,t))}catch(n){re(this,t,n)}},(o=function(e){R(this,{type:O,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:W,value:undefined})}).prototype=f(D.prototype,{then:function(e,t){var n=F(this),o=U(_(this,D));return o.ok="function"!=typeof e||e,o.fail="function"==typeof t&&t,o.domain=Y?H.domain:undefined,n.parent=!0,n.reactions.push(o),n.state!=W&&J(this,n,!1),o.promise},"catch":function(e){return this.then(undefined,e)}}),r=function(){var e=new o,t=M(e);this.promise=e,this.resolve=oe(ae,e,t),this.reject=oe(re,e,t)},B.f=U=function(e){return e===D||e===a?new r(e):K(e)},l||"function"!=typeof d||(i=d.prototype.then,p(d.prototype,"then",(function(e,t){var n=this;return new D((function(e,t){i.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof G&&c({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return w(D,G.apply(u,arguments))}}))),c({global:!0,wrap:!0,forced:$},{Promise:D}),m(D,O,!1,!0),h(O),a=s(O),c({target:O,stat:!0,forced:$},{reject:function(e){var t=U(this);return t.reject.call(undefined,e),t.promise}}),c({target:O,stat:!0,forced:l||$},{resolve:function(e){return w(l&&this===a?D:this,e)}}),c({target:O,stat:!0,forced:Q},{all:function(e){var t=this,n=U(t),o=n.resolve,r=n.reject,a=S((function(){var n=g(t.resolve),a=[],i=0,c=1;V(e,(function(e){var l=i++,u=!1;a.push(undefined),c++,n.call(t,e).then((function(e){u||(u=!0,a[l]=e,--c||o(a))}),r)})),--c||o(a)}));return a.error&&r(a.value),n.promise},race:function(e){var t=this,n=U(t),o=n.reject,r=S((function(){var r=g(t.resolve);V(e,(function(e){r.call(t,e).then(n.resolve,o)}))}));return r.error&&o(r.value),n.promise}})},function(e,t,n){"use strict";var o=n(5);e.exports=function(e,t){var n=o.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},function(e,t,n){"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},function(e,t,n){"use strict";var o=n(0),r=n(38),a=n(145),i=n(4),c=n(35),l=n(45),u=n(148),s=n(22);o({target:"Promise",proto:!0,real:!0,forced:!!a&&i((function(){a.prototype["finally"].call({then:function(){}},(function(){}))}))},{"finally":function(e){var t=l(this,c("Promise")),n="function"==typeof e;return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),r||"function"!=typeof a||a.prototype["finally"]||s(a.prototype,"finally",c("Promise").prototype["finally"])},function(e,t,n){"use strict";var o=n(0),r=n(35),a=n(30),i=n(8),c=n(4),l=r("Reflect","apply"),u=Function.apply;o({target:"Reflect",stat:!0,forced:!c((function(){l((function(){}))}))},{apply:function(e,t,n){return a(e),i(n),l?l(e,t,n):u.call(e,t,n)}})},function(e,t,n){"use strict";var o=n(0),r=n(35),a=n(30),i=n(8),c=n(6),l=n(42),u=n(138),s=n(4),d=r("Reflect","construct"),p=s((function(){function e(){}return!(d((function(){}),[],e)instanceof e)})),f=!s((function(){d((function(){}))})),m=p||f;o({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(e,t){a(e),i(t);var n=arguments.length<3?e:a(arguments[2]);if(f&&!p)return d(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var o=[null];return o.push.apply(o,t),new(u.apply(e,o))}var r=n.prototype,s=l(c(r)?r:Object.prototype),m=Function.apply.call(e,s,t);return c(m)?m:s}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(8),i=n(33),c=n(13);o({target:"Reflect",stat:!0,forced:n(4)((function(){Reflect.defineProperty(c.f({},1,{value:1}),1,{value:2})})),sham:!r},{defineProperty:function(e,t,n){a(e);var o=i(t,!0);a(n);try{return c.f(e,o,n),!0}catch(r){return!1}}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(18).f;o({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=a(r(e),t);return!(n&&!n.configurable)&&delete e[t]}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(8),i=n(15),c=n(18),l=n(36);o({target:"Reflect",stat:!0},{get:function u(e,t){var n,o,s=arguments.length<3?e:arguments[2];return a(e)===s?e[t]:(n=c.f(e,t))?i(n,"value")?n.value:n.get===undefined?undefined:n.get.call(s):r(o=l(e))?u(o,t,s):void 0}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(8),i=n(18);o({target:"Reflect",stat:!0,sham:!r},{getOwnPropertyDescriptor:function(e,t){return i.f(a(e),t)}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(36);o({target:"Reflect",stat:!0,sham:!n(102)},{getPrototypeOf:function(e){return a(r(e))}})},function(e,t,n){"use strict";n(0)({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=Object.isExtensible;o({target:"Reflect",stat:!0},{isExtensible:function(e){return r(e),!a||a(e)}})},function(e,t,n){"use strict";n(0)({target:"Reflect",stat:!0},{ownKeys:n(92)})},function(e,t,n){"use strict";var o=n(0),r=n(35),a=n(8);o({target:"Reflect",stat:!0,sham:!n(67)},{preventExtensions:function(e){a(e);try{var t=r("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(6),i=n(15),c=n(4),l=n(13),u=n(18),s=n(36),d=n(46);o({target:"Reflect",stat:!0,forced:c((function(){var e=l.f({},"a",{configurable:!0});return!1!==Reflect.set(s(e),"a",1,e)}))},{set:function p(e,t,n){var o,c,f=arguments.length<4?e:arguments[3],m=u.f(r(e),t);if(!m){if(a(c=s(e)))return p(c,t,n,f);m=d(0)}if(i(m,"value")){if(!1===m.writable||!a(f))return!1;if(o=u.f(f,t)){if(o.get||o.set||!1===o.writable)return!1;o.value=n,l.f(f,t,o)}else l.f(f,t,d(0,n));return!0}return m.set!==undefined&&(m.set.call(f,n),!0)}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(135),i=n(53);i&&o({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){r(e),a(t);try{return i(e,t),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var o=n(9),r=n(5),a=n(61),i=n(79),c=n(13).f,l=n(47).f,u=n(107),s=n(83),d=n(22),p=n(4),f=n(54),m=n(11)("match"),h=r.RegExp,C=h.prototype,g=/a/g,b=/a/g,v=new h(g)!==g;if(o&&a("RegExp",!v||p((function(){return b[m]=!1,h(g)!=g||h(b)==b||"/a/i"!=h(g,"i")})))){for(var N=function(e,t){var n=this instanceof N,o=u(e),r=t===undefined;return!n&&o&&e.constructor===N&&r?e:i(v?new h(o&&!r?e.source:e,t):h((o=e instanceof N)?e.source:e,o&&r?s.call(e):t),n?this:C,N)},V=function(e){e in N||c(N,e,{configurable:!0,get:function(){return h[e]},set:function(t){h[e]=t}})},y=l(h),_=0;y.length>_;)V(y[_++]);C.constructor=N,N.prototype=C,d(r,"RegExp",N)}f("RegExp")},function(e,t,n){"use strict";var o=n(0),r=n(84);o({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},function(e,t,n){"use strict";var o=n(9),r=n(13),a=n(83);o&&"g"!=/./g.flags&&r.f(RegExp.prototype,"flags",{configurable:!0,get:a})},function(e,t,n){"use strict";var o=n(22),r=n(8),a=n(4),i=n(83),c=RegExp.prototype,l=c.toString,u=a((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),s="toString"!=l.name;(u||s)&&o(RegExp.prototype,"toString",(function(){var e=r(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(n===undefined&&e instanceof RegExp&&!("flags"in c)?i.call(e):n)}),{unsafe:!0})},function(e,t,n){"use strict";var o=n(78),r=n(139);e.exports=o("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},function(e,t,n){"use strict";var o=n(0),r=n(108).codeAt;o({target:"String",proto:!0},{codePointAt:function(e){return r(this,e)}})},function(e,t,n){"use strict";var o,r=n(0),a=n(18).f,i=n(10),c=n(109),l=n(21),u=n(110),s=n(38),d="".endsWith,p=Math.min,f=u("endsWith");r({target:"String",proto:!0,forced:!!(s||f||(o=a(String.prototype,"endsWith"),!o||o.writable))&&!f},{endsWith:function(e){var t=String(l(this));c(e);var n=arguments.length>1?arguments[1]:undefined,o=i(t.length),r=n===undefined?o:p(i(n),o),a=String(e);return d?d.call(t,a,r):t.slice(r-a.length,r)===a}})},function(e,t,n){"use strict";var o=n(0),r=n(41),a=String.fromCharCode,i=String.fromCodePoint;o({target:"String",stat:!0,forced:!!i&&1!=i.length},{fromCodePoint:function(e){for(var t,n=[],o=arguments.length,i=0;o>i;){if(t=+arguments[i++],r(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?a(t):a(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){"use strict";var o=n(0),r=n(109),a=n(21);o({target:"String",proto:!0,forced:!n(110)("includes")},{includes:function(e){return!!~String(a(this)).indexOf(r(e),arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(108).charAt,r=n(34),a=n(101),i=r.set,c=r.getterFor("String Iterator");a(String,"String",(function(e){i(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=c(this),n=t.string,r=t.index;return r>=n.length?{value:undefined,done:!0}:(e=o(n,r),t.index+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var o=n(85),r=n(8),a=n(10),i=n(21),c=n(111),l=n(86);o("match",1,(function(e,t,n){return[function(t){var n=i(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](String(n))},function(e){var o=n(t,e,this);if(o.done)return o.value;var i=r(e),u=String(this);if(!i.global)return l(i,u);var s=i.unicode;i.lastIndex=0;for(var d,p=[],f=0;null!==(d=l(i,u));){var m=String(d[0]);p[f]=m,""===m&&(i.lastIndex=c(u,a(i.lastIndex),s)),f++}return 0===f?null:p}]}))},function(e,t,n){"use strict";var o=n(0),r=n(103).end;o({target:"String",proto:!0,forced:n(150)},{padEnd:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(103).start;o({target:"String",proto:!0,forced:n(150)},{padStart:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(23),a=n(10);o({target:"String",stat:!0},{raw:function(e){for(var t=r(e.raw),n=a(t.length),o=arguments.length,i=[],c=0;n>c;)i.push(String(t[c++])),c]*>)/g,h=/\$([$&'`]|\d\d?)/g;o("replace",2,(function(e,t,n){return[function(n,o){var r=l(this),a=n==undefined?undefined:n[e];return a!==undefined?a.call(n,r,o):t.call(String(r),n,o)},function(e,a){var l=n(t,e,this,a);if(l.done)return l.value;var f=r(e),m=String(this),h="function"==typeof a;h||(a=String(a));var C=f.global;if(C){var g=f.unicode;f.lastIndex=0}for(var b=[];;){var v=s(f,m);if(null===v)break;if(b.push(v),!C)break;""===String(v[0])&&(f.lastIndex=u(m,i(f.lastIndex),g))}for(var N,V="",y=0,_=0;_=y&&(V+=m.slice(y,k)+I,y=k+x.length)}return V+m.slice(y)}];function o(e,n,o,r,i,c){var l=o+e.length,u=r.length,s=h;return i!==undefined&&(i=a(i),s=m),t.call(c,s,(function(t,a){var c;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,o);case"'":return n.slice(l);case"<":c=i[a.slice(1,-1)];break;default:var s=+a;if(0===s)return t;if(s>u){var d=f(s/10);return 0===d?t:d<=u?r[d-1]===undefined?a.charAt(1):r[d-1]+a.charAt(1):t}c=r[s-1]}return c===undefined?"":c}))}}))},function(e,t,n){"use strict";var o=n(85),r=n(8),a=n(21),i=n(144),c=n(86);o("search",1,(function(e,t,n){return[function(t){var n=a(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](String(n))},function(e){var o=n(t,e,this);if(o.done)return o.value;var a=r(e),l=String(this),u=a.lastIndex;i(u,0)||(a.lastIndex=0);var s=c(a,l);return i(a.lastIndex,u)||(a.lastIndex=u),null===s?-1:s.index}]}))},function(e,t,n){"use strict";var o=n(85),r=n(107),a=n(8),i=n(21),c=n(45),l=n(111),u=n(10),s=n(86),d=n(84),p=n(4),f=[].push,m=Math.min,h=!p((function(){return!RegExp(4294967295,"y")}));o("split",2,(function(e,t,n){var o;return o="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var o=String(i(this)),a=n===undefined?4294967295:n>>>0;if(0===a)return[];if(e===undefined)return[o];if(!r(e))return t.call(o,e,a);for(var c,l,u,s=[],p=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),m=0,h=new RegExp(e.source,p+"g");(c=d.call(h,o))&&!((l=h.lastIndex)>m&&(s.push(o.slice(m,c.index)),c.length>1&&c.index=a));)h.lastIndex===c.index&&h.lastIndex++;return m===o.length?!u&&h.test("")||s.push(""):s.push(o.slice(m)),s.length>a?s.slice(0,a):s}:"0".split(undefined,0).length?function(e,n){return e===undefined&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=i(this),a=t==undefined?undefined:t[e];return a!==undefined?a.call(t,r,n):o.call(String(r),t,n)},function(e,r){var i=n(o,e,this,r,o!==t);if(i.done)return i.value;var d=a(e),p=String(this),f=c(d,RegExp),C=d.unicode,g=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(h?"y":"g"),b=new f(h?d:"^(?:"+d.source+")",g),v=r===undefined?4294967295:r>>>0;if(0===v)return[];if(0===p.length)return null===s(b,p)?[p]:[];for(var N=0,V=0,y=[];V1?arguments[1]:undefined,t.length)),o=String(e);return d?d.call(t,o,n):t.slice(n,n+o.length)===o}})},function(e,t,n){"use strict";var o=n(0),r=n(56).trim;o({target:"String",proto:!0,forced:n(112)("trim")},{trim:function(){return r(this)}})},function(e,t,n){"use strict";var o=n(0),r=n(56).end,a=n(112)("trimEnd"),i=a?function(){return r(this)}:"".trimEnd;o({target:"String",proto:!0,forced:a},{trimEnd:i,trimRight:i})},function(e,t,n){"use strict";var o=n(0),r=n(56).start,a=n(112)("trimStart"),i=a?function(){return r(this)}:"".trimStart;o({target:"String",proto:!0,forced:a},{trimStart:i,trimLeft:i})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("big")},{big:function(){return r(this,"big","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("blink")},{blink:function(){return r(this,"blink","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("bold")},{bold:function(){return r(this,"b","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("fixed")},{fixed:function(){return r(this,"tt","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("fontcolor")},{fontcolor:function(e){return r(this,"font","color",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("fontsize")},{fontsize:function(e){return r(this,"font","size",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("italics")},{italics:function(){return r(this,"i","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("link")},{link:function(e){return r(this,"a","href",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("small")},{small:function(){return r(this,"small","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("strike")},{strike:function(){return r(this,"strike","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("sub")},{sub:function(){return r(this,"sub","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("sup")},{sup:function(){return r(this,"sup","","")}})},function(e,t,n){"use strict";n(40)("Float32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";var o=n(29);e.exports=function(e){var t=o(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},function(e,t,n){"use strict";n(40)("Float64",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Int8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Int16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Int32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}),!0)},function(e,t,n){"use strict";n(40)("Uint16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Uint32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";var o=n(7),r=n(130),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("copyWithin",(function(e,t){return r.call(a(this),e,t,arguments.length>2?arguments[2]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).every,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("every",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(97),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("fill",(function(e){return r.apply(a(this),arguments)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).filter,a=n(45),i=o.aTypedArray,c=o.aTypedArrayConstructor;(0,o.exportTypedArrayMethod)("filter",(function(e){for(var t=r(i(this),e,arguments.length>1?arguments[1]:undefined),n=a(this,this.constructor),o=0,l=t.length,u=new(c(n))(l);l>o;)u[o]=t[o++];return u}))},function(e,t,n){"use strict";var o=n(7),r=n(16).find,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("find",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).findIndex,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("findIndex",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).forEach,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("forEach",(function(e){r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(113);(0,n(7).exportTypedArrayStaticMethod)("from",n(152),o)},function(e,t,n){"use strict";var o=n(7),r=n(60).includes,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("includes",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(60).indexOf,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("indexOf",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(5),r=n(7),a=n(133),i=n(11)("iterator"),c=o.Uint8Array,l=a.values,u=a.keys,s=a.entries,d=r.aTypedArray,p=r.exportTypedArrayMethod,f=c&&c.prototype[i],m=!!f&&("values"==f.name||f.name==undefined),h=function(){return l.call(d(this))};p("entries",(function(){return s.call(d(this))})),p("keys",(function(){return u.call(d(this))})),p("values",h,!m),p(i,h,!m)},function(e,t,n){"use strict";var o=n(7),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=[].join;a("join",(function(e){return i.apply(r(this),arguments)}))},function(e,t,n){"use strict";var o=n(7),r=n(136),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("lastIndexOf",(function(e){return r.apply(a(this),arguments)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).map,a=n(45),i=o.aTypedArray,c=o.aTypedArrayConstructor;(0,o.exportTypedArrayMethod)("map",(function(e){return r(i(this),e,arguments.length>1?arguments[1]:undefined,(function(e,t){return new(c(a(e,e.constructor)))(t)}))}))},function(e,t,n){"use strict";var o=n(7),r=n(113),a=o.aTypedArrayConstructor;(0,o.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(a(this))(t);t>e;)n[e]=arguments[e++];return n}),r)},function(e,t,n){"use strict";var o=n(7),r=n(76).left,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduce",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(76).right,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduceRight",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=Math.floor;a("reverse",(function(){for(var e,t=r(this).length,n=i(t/2),o=0;o1?arguments[1]:undefined,1),n=this.length,o=i(e),c=r(o.length),u=0;if(c+t>n)throw RangeError("Wrong length");for(;ua;)s[a]=n[a++];return s}),a((function(){new Int8Array(1).slice()})))},function(e,t,n){"use strict";var o=n(7),r=n(16).some,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("some",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=[].sort;a("sort",(function(e){return i.call(r(this),e)}))},function(e,t,n){"use strict";var o=n(7),r=n(10),a=n(41),i=n(45),c=o.aTypedArray;(0,o.exportTypedArrayMethod)("subarray",(function(e,t){var n=c(this),o=n.length,l=a(e,o);return new(i(n,n.constructor))(n.buffer,n.byteOffset+l*n.BYTES_PER_ELEMENT,r((t===undefined?o:a(t,o))-l))}))},function(e,t,n){"use strict";var o=n(5),r=n(7),a=n(4),i=o.Int8Array,c=r.aTypedArray,l=r.exportTypedArrayMethod,u=[].toLocaleString,s=[].slice,d=!!i&&a((function(){u.call(new i(1))}));l("toLocaleString",(function(){return u.apply(d?s.call(c(this)):c(this),arguments)}),a((function(){return[1,2].toLocaleString()!=new i([1,2]).toLocaleString()}))||!a((function(){i.prototype.toLocaleString.call([1,2])})))},function(e,t,n){"use strict";var o=n(7).exportTypedArrayMethod,r=n(4),a=n(5).Uint8Array,i=a&&a.prototype||{},c=[].toString,l=[].join;r((function(){c.call({})}))&&(c=function(){return l.call(this)});var u=i.toString!=c;o("toString",c,u)},function(e,t,n){"use strict";var o,r=n(5),a=n(66),i=n(50),c=n(78),l=n(153),u=n(6),s=n(34).enforce,d=n(121),p=!r.ActiveXObject&&"ActiveXObject"in r,f=Object.isExtensible,m=function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}},h=e.exports=c("WeakMap",m,l);if(d&&p){o=l.getConstructor(m,"WeakMap",!0),i.REQUIRED=!0;var C=h.prototype,g=C["delete"],b=C.has,v=C.get,N=C.set;a(C,{"delete":function(e){if(u(e)&&!f(e)){var t=s(this);return t.frozen||(t.frozen=new o),g.call(this,e)||t.frozen["delete"](e)}return g.call(this,e)},has:function(e){if(u(e)&&!f(e)){var t=s(this);return t.frozen||(t.frozen=new o),b.call(this,e)||t.frozen.has(e)}return b.call(this,e)},get:function(e){if(u(e)&&!f(e)){var t=s(this);return t.frozen||(t.frozen=new o),b.call(this,e)?v.call(this,e):t.frozen.get(e)}return v.call(this,e)},set:function(e,t){if(u(e)&&!f(e)){var n=s(this);n.frozen||(n.frozen=new o),b.call(this,e)?N.call(this,e,t):n.frozen.set(e,t)}else N.call(this,e,t);return this}})}},function(e,t,n){"use strict";n(78)("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),n(153))},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(106);o({global:!0,bind:!0,enumerable:!0,forced:!r.setImmediate||!r.clearImmediate},{setImmediate:a.set,clearImmediate:a.clear})},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(147),i=n(32),c=r.process,l="process"==i(c);o({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=l&&c.domain;a(t?t.bind(e):e)}})},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(73),i=[].slice,c=function(e){return function(t,n){var o=arguments.length>2,r=o?i.call(arguments,2):undefined;return e(o?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};o({global:!0,bind:!0,forced:/MSIE .\./.test(a)},{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},function(e,t,n){"use strict";t.__esModule=!0,t._CI=Ie,t._HI=D,t._M=Te,t._MCCC=Oe,t._ME=Ee,t._MFCC=Me,t._MP=Be,t._MR=Ne,t.__render=ze,t.createComponentVNode=function(e,t,n,o,r){var i=new T(1,null,null,e=function(e,t){if(12&e)return e;if(t.prototype&&t.prototype.render)return 4;if(t.render)return 32776;return 8}(e,t),o,function(e,t,n){var o=(32768&e?t.render:t).defaultProps;if(a(o))return n;if(a(n))return s(o,null);return B(n,o)}(e,t,n),function(e,t,n){if(4&e)return n;var o=(32768&e?t.render:t).defaultHooks;if(a(o))return n;if(a(n))return o;return B(n,o)}(e,t,r),t);k.createVNode&&k.createVNode(i);return i},t.createFragment=P,t.createPortal=function(e,t){var n=D(e);return A(1024,1024,null,n,0,null,n.key,t)},t.createRef=function(){return{current:null}},t.createRenderer=function(e){return function(t,n,o,r){e||(e=t),He(n,e,o,r)}},t.createTextVNode=E,t.createVNode=A,t.directClone=O,t.findDOMfromVNode=N,t.forwardRef=function(e){return{render:e}},t.getFlagsForElementVnode=function(e){switch(e){case"svg":return 32;case"input":return 64;case"select":return 256;case"textarea":return 128;case f:return 8192;default:return 1}},t.linkEvent=function(e,t){if(c(t))return{data:e,event:t};return null},t.normalizeProps=function(e){var t=e.props;if(t){var n=e.flags;481&n&&(void 0!==t.children&&a(e.children)&&F(e,t.children),void 0!==t.className&&(e.className=t.className||null,t.className=undefined)),void 0!==t.key&&(e.key=t.key,t.key=undefined),void 0!==t.ref&&(e.ref=8&n?s(e.ref,t.ref):t.ref,t.ref=undefined)}return e},t.render=He,t.rerender=We,t.version=t.options=t.Fragment=t.EMPTY_OBJ=t.Component=void 0;var o=Array.isArray;function r(e){var t=typeof e;return"string"===t||"number"===t}function a(e){return null==e}function i(e){return null===e||!1===e||!0===e||void 0===e}function c(e){return"function"==typeof e}function l(e){return"string"==typeof e}function u(e){return null===e}function s(e,t){var n={};if(e)for(var o in e)n[o]=e[o];if(t)for(var r in t)n[r]=t[r];return n}function d(e){return!u(e)&&"object"==typeof e}var p={};t.EMPTY_OBJ=p;var f="$F";function m(e){return e.substr(2).toLowerCase()}function h(e,t){e.appendChild(t)}function C(e,t,n){u(n)?h(e,t):e.insertBefore(t,n)}function g(e,t){e.removeChild(t)}function b(e){for(var t;(t=e.shift())!==undefined;)t()}function v(e,t,n){var o=e.children;return 4&n?o.$LI:8192&n?2===e.childFlags?o:o[t?0:o.length-1]:o}function N(e,t){for(var n;e;){if(2033&(n=e.flags))return e.dom;e=v(e,t,n)}return null}function V(e,t){do{var n=e.flags;if(2033&n)return void g(t,e.dom);var o=e.children;if(4&n&&(e=o.$LI),8&n&&(e=o),8192&n){if(2!==e.childFlags){for(var r=0,a=o.length;r0,m=u(p),h=l(p)&&p[0]===I;f||m||h?(n=n||t.slice(0,s),(f||h)&&(d=O(d)),(m||h)&&(d.key=I+s),n.push(d)):n&&n.push(d),d.flags|=65536}}a=0===(n=n||t).length?1:8}else(n=t).flags|=65536,81920&t.flags&&(n=O(t)),a=2;return e.children=n,e.childFlags=a,e}function D(e){return i(e)||r(e)?E(e,null):o(e)?P(e,0,null):16384&e.flags?O(e):e}var j="http://www.w3.org/1999/xlink",z="http://www.w3.org/XML/1998/namespace",H={"xlink:actuate":j,"xlink:arcrole":j,"xlink:href":j,"xlink:role":j,"xlink:show":j,"xlink:title":j,"xlink:type":j,"xml:base":z,"xml:lang":z,"xml:space":z};function G(e){return{onClick:e,onDblClick:e,onFocusIn:e,onFocusOut:e,onKeyDown:e,onKeyPress:e,onKeyUp:e,onMouseDown:e,onMouseMove:e,onMouseUp:e,onTouchEnd:e,onTouchMove:e,onTouchStart:e}}var U=G(0),K=G(null),Y=G(!0);function q(e,t){var n=t.$EV;return n||(n=t.$EV=G(null)),n[e]||1==++U[e]&&(K[e]=function(e){var t="onClick"===e||"onDblClick"===e?function(e){return function(t){0===t.button?$(t,!0,e,Z(t)):t.stopPropagation()}}(e):function(e){return function(t){$(t,!1,e,Z(t))}}(e);return document.addEventListener(m(e),t),t}(e)),n}function W(e,t){var n=t.$EV;n&&n[e]&&(0==--U[e]&&(document.removeEventListener(m(e),K[e]),K[e]=null),n[e]=null)}function $(e,t,n,o){var r=function(e){return c(e.composedPath)?e.composedPath()[0]:e.target}(e);do{if(t&&r.disabled)return;var a=r.$EV;if(a){var i=a[n];if(i&&(o.dom=r,i.event?i.event(i.data,e):i(e),e.cancelBubble))return}r=r.parentNode}while(!u(r))}function Q(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function X(){return this.defaultPrevented}function J(){return this.cancelBubble}function Z(e){var t={dom:document};return e.isDefaultPrevented=X,e.isPropagationStopped=J,e.stopPropagation=Q,Object.defineProperty(e,"currentTarget",{configurable:!0,get:function(){return t.dom}}),t}function ee(e,t,n){if(e[t]){var o=e[t];o.event?o.event(o.data,n):o(n)}else{var r=t.toLowerCase();e[r]&&e[r](n)}}function te(e,t){var n=function(n){var o=this.$V;if(o){var r=o.props||p,a=o.dom;if(l(e))ee(r,e,n);else for(var i=0;i-1&&t.options[i]&&(c=t.options[i].value),n&&a(c)&&(c=e.defaultValue),le(o,c)}}var de,pe,fe=te("onInput",he),me=te("onChange");function he(e,t,n){var o=e.value,r=t.value;if(a(o)){if(n){var i=e.defaultValue;a(i)||i===r||(t.defaultValue=i,t.value=i)}}else r!==o&&(t.defaultValue=o,t.value=o)}function Ce(e,t,n,o,r,a){64&e?ce(o,n):256&e?se(o,n,r,t):128&e&&he(o,n,r),a&&(n.$V=t)}function ge(e,t,n){64&e?function(e,t){oe(t.type)?(ne(e,"change",ae),ne(e,"click",ie)):ne(e,"input",re)}(t,n):256&e?function(e){ne(e,"change",ue)}(t):128&e&&function(e,t){ne(e,"input",fe),t.onChange&&ne(e,"change",me)}(t,n)}function be(e){return e.type&&oe(e.type)?!a(e.checked):!a(e.value)}function ve(e){e&&!S(e,null)&&e.current&&(e.current=null)}function Ne(e,t,n){e&&(c(e)||void 0!==e.current)&&n.push((function(){S(e,t)||void 0===e.current||(e.current=t)}))}function Ve(e,t){ye(e),V(e,t)}function ye(e){var t,n=e.flags,o=e.children;if(481&n){t=e.ref;var r=e.props;ve(t);var i=e.childFlags;if(!u(r))for(var l=Object.keys(r),s=0,d=l.length;s0;for(var c in i&&(a=be(n))&&ge(t,o,n),n)Le(c,null,n[c],o,r,a,null);i&&Ce(t,e,o,n,!0,a)}function Se(e,t,n){var o=D(e.render(t,e.state,n)),r=n;return c(e.getChildContext)&&(r=s(n,e.getChildContext())),e.$CX=r,o}function Ie(e,t,n,o,r,a){var i=new t(n,o),l=i.$N=Boolean(t.getDerivedStateFromProps||i.getSnapshotBeforeUpdate);if(i.$SVG=r,i.$L=a,e.children=i,i.$BS=!1,i.context=o,i.props===p&&(i.props=n),l)i.state=_(i,n,i.state);else if(c(i.componentWillMount)){i.$BR=!0,i.componentWillMount();var s=i.$PS;if(!u(s)){var d=i.state;if(u(d))i.state=s;else for(var f in s)d[f]=s[f];i.$PS=null}i.$BR=!1}return i.$LI=Se(i,n,o),i}function Te(e,t,n,o,r,a){var i=e.flags|=16384;481&i?Ee(e,t,n,o,r,a):4&i?function(e,t,n,o,r,a){var i=Ie(e,e.type,e.props||p,n,o,a);Te(i.$LI,t,i.$CX,o,r,a),Oe(e.ref,i,a)}(e,t,n,o,r,a):8&i?(!function(e,t,n,o,r,a){Te(e.children=D(function(e,t){return 32768&e.flags?e.type.render(e.props||p,e.ref,t):e.type(e.props||p,t)}(e,n)),t,n,o,r,a)}(e,t,n,o,r,a),Me(e,a)):512&i||16&i?Ae(e,t,r):8192&i?function(e,t,n,o,r,a){var i=e.children,c=e.childFlags;12&c&&0===i.length&&(c=e.childFlags=2,i=e.children=M());2===c?Te(i,n,r,o,r,a):Pe(i,n,t,o,r,a)}(e,n,t,o,r,a):1024&i&&function(e,t,n,o,r){Te(e.children,e.ref,t,!1,null,r);var a=M();Ae(a,n,o),e.dom=a.dom}(e,n,t,r,a)}function Ae(e,t,n){var o=e.dom=document.createTextNode(e.children);u(t)||C(t,o,n)}function Ee(e,t,n,o,r,i){var c=e.flags,l=e.props,s=e.className,d=e.children,p=e.childFlags,f=e.dom=function(e,t){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}(e.type,o=o||(32&c)>0);if(a(s)||""===s||(o?f.setAttribute("class",s):f.className=s),16===p)w(f,d);else if(1!==p){var m=o&&"foreignObject"!==e.type;2===p?(16384&d.flags&&(e.children=d=O(d)),Te(d,f,n,m,null,i)):8!==p&&4!==p||Pe(d,f,n,m,null,i)}u(t)||C(t,f,r),u(l)||Be(e,c,l,f,o),Ne(e.ref,f,i)}function Pe(e,t,n,o,r,a){for(var i=0;i0,u!==s){var m=u||p;if((c=s||p)!==p)for(var h in(d=(448&r)>0)&&(f=be(c)),c){var C=m[h],g=c[h];C!==g&&Le(h,C,g,l,o,f,e)}if(m!==p)for(var b in m)a(c[b])&&!a(m[b])&&Le(b,m[b],null,l,o,f,e)}var v=t.children,N=t.className;e.className!==N&&(a(N)?l.removeAttribute("class"):o?l.setAttribute("class",N):l.className=N);4096&r?function(e,t){e.textContent!==t&&(e.textContent=t)}(l,v):Fe(e.childFlags,t.childFlags,e.children,v,l,n,o&&"foreignObject"!==t.type,null,e,i);d&&Ce(r,t,l,c,!1,f);var V=t.ref,y=e.ref;y!==V&&(ve(y),Ne(V,l,i))}(e,t,o,r,f,d):4&f?function(e,t,n,o,r,a,i){var l=t.children=e.children;if(u(l))return;l.$L=i;var d=t.props||p,f=t.ref,m=e.ref,h=l.state;if(!l.$N){if(c(l.componentWillReceiveProps)){if(l.$BR=!0,l.componentWillReceiveProps(d,o),l.$UN)return;l.$BR=!1}u(l.$PS)||(h=s(h,l.$PS),l.$PS=null)}De(l,h,d,n,o,r,!1,a,i),m!==f&&(ve(m),Ne(f,l,i))}(e,t,n,o,r,l,d):8&f?function(e,t,n,o,r,i,l){var u=!0,s=t.props||p,d=t.ref,f=e.props,m=!a(d),h=e.children;m&&c(d.onComponentShouldUpdate)&&(u=d.onComponentShouldUpdate(f,s));if(!1!==u){m&&c(d.onComponentWillUpdate)&&d.onComponentWillUpdate(f,s);var C=t.type,g=D(32768&t.flags?C.render(s,d,o):C(s,o));Re(h,g,n,o,r,i,l),t.children=g,m&&c(d.onComponentDidUpdate)&&d.onComponentDidUpdate(f,s)}else t.children=h}(e,t,n,o,r,l,d):16&f?function(e,t){var n=t.children,o=t.dom=e.dom;n!==e.children&&(o.nodeValue=n)}(e,t):512&f?t.dom=e.dom:8192&f?function(e,t,n,o,r,a){var i=e.children,c=t.children,l=e.childFlags,u=t.childFlags,s=null;12&u&&0===c.length&&(u=t.childFlags=2,c=t.children=M());var d=0!=(2&u);if(12&l){var p=i.length;(8&l&&8&u||d||!d&&c.length>p)&&(s=N(i[p-1],!1).nextSibling)}Fe(l,u,i,c,n,o,r,s,e,a)}(e,t,n,o,r,d):function(e,t,n,o){var r=e.ref,a=t.ref,c=t.children;if(Fe(e.childFlags,t.childFlags,e.children,c,r,n,!1,null,e,o),t.dom=e.dom,r!==a&&!i(c)){var l=c.dom;g(r,l),h(a,l)}}(e,t,o,d)}function Fe(e,t,n,o,r,a,i,c,l,u){switch(e){case 2:switch(t){case 2:Re(n,o,r,a,i,c,u);break;case 1:Ve(n,r);break;case 16:ye(n),w(r,o);break;default:!function(e,t,n,o,r,a){ye(e),Pe(t,n,o,r,N(e,!0),a),V(e,n)}(n,o,r,a,i,u)}break;case 1:switch(t){case 2:Te(o,r,a,i,c,u);break;case 1:break;case 16:w(r,o);break;default:Pe(o,r,a,i,c,u)}break;case 16:switch(t){case 16:!function(e,t,n){e!==t&&(""!==e?n.firstChild.nodeValue=t:w(n,t))}(n,o,r);break;case 2:xe(r),Te(o,r,a,i,c,u);break;case 1:xe(r);break;default:xe(r),Pe(o,r,a,i,c,u)}break;default:switch(t){case 16:_e(n),w(r,o);break;case 2:ke(r,l,n),Te(o,r,a,i,c,u);break;case 1:ke(r,l,n);break;default:var s=0|n.length,d=0|o.length;0===s?d>0&&Pe(o,r,a,i,c,u):0===d?ke(r,l,n):8===t&&8===e?function(e,t,n,o,r,a,i,c,l,u){var s,d,p=a-1,f=i-1,m=0,h=e[m],C=t[m];e:{for(;h.key===C.key;){if(16384&C.flags&&(t[m]=C=O(C)),Re(h,C,n,o,r,c,u),e[m]=C,++m>p||m>f)break e;h=e[m],C=t[m]}for(h=e[p],C=t[f];h.key===C.key;){if(16384&C.flags&&(t[f]=C=O(C)),Re(h,C,n,o,r,c,u),e[p]=C,p--,f--,m>p||m>f)break e;h=e[p],C=t[f]}}if(m>p){if(m<=f)for(d=(s=f+1)f)for(;m<=p;)Ve(e[m++],n);else!function(e,t,n,o,r,a,i,c,l,u,s,d,p){var f,m,h,C=0,g=c,b=c,v=a-c+1,V=i-c+1,_=new Int32Array(V+1),x=v===o,k=!1,w=0,L=0;if(r<4||(v|V)<32)for(C=g;C<=a;++C)if(f=e[C],Lc?k=!0:w=c,16384&m.flags&&(t[c]=m=O(m)),Re(f,m,l,n,u,s,p),++L;break}!x&&c>i&&Ve(f,l)}else x||Ve(f,l);else{var B={};for(C=b;C<=i;++C)B[t[C].key]=C;for(C=g;C<=a;++C)if(f=e[C],Lg;)Ve(e[g++],l);_[c-b]=C+1,w>c?k=!0:w=c,16384&(m=t[c]).flags&&(t[c]=m=O(m)),Re(f,m,l,n,u,s,p),++L}else x||Ve(f,l);else x||Ve(f,l)}if(x)ke(l,d,e),Pe(t,l,n,u,s,p);else if(k){var S=function(e){var t=0,n=0,o=0,r=0,a=0,i=0,c=0,l=e.length;l>je&&(je=l,de=new Int32Array(l),pe=new Int32Array(l));for(;n>1]]0&&(pe[n]=de[a-1]),de[a]=n)}a=r+1;var u=new Int32Array(a);i=de[a-1];for(;a-- >0;)u[a]=i,i=pe[i],de[a]=0;return u}(_);for(c=S.length-1,C=V-1;C>=0;C--)0===_[C]?(16384&(m=t[w=C+b]).flags&&(t[w]=m=O(m)),Te(m,l,n,u,(h=w+1)=0;C--)0===_[C]&&(16384&(m=t[w=C+b]).flags&&(t[w]=m=O(m)),Te(m,l,n,u,(h=w+1)i?i:a,p=0;pi)for(p=d;p0&&b(r),x.v=!1,c(n)&&n(),c(k.renderComplete)&&k.renderComplete(i,t)}function He(e,t,n,o){void 0===n&&(n=null),void 0===o&&(o=p),ze(e,t,n,o)}"undefined"!=typeof document&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);var Ge=[],Ue="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},Ke=!1;function Ye(e,t,n,o){var r=e.$PS;if(c(t)&&(t=t(r?s(e.state,r):e.state,e.props,e.context)),a(r))e.$PS=t;else for(var i in t)r[i]=t[i];if(e.$BR)c(n)&&e.$L.push(n.bind(e));else{if(!x.v&&0===Ge.length)return void $e(e,o,n);if(-1===Ge.indexOf(e)&&Ge.push(e),Ke||(Ke=!0,Ue(We)),c(n)){var l=e.$QU;l||(l=e.$QU=[]),l.push(n)}}}function qe(e){for(var t=e.$QU,n=0,o=t.length;n0&&b(r),x.v=!1}else e.state=e.$PS,e.$PS=null;c(n)&&n.call(e)}}var Qe=function(e,t){this.state=null,this.$BR=!1,this.$BS=!0,this.$PS=null,this.$LI=null,this.$UN=!1,this.$CX=null,this.$QU=null,this.$N=!1,this.$L=null,this.$SVG=!1,this.props=e||p,this.context=t||p};t.Component=Qe,Qe.prototype.forceUpdate=function(e){this.$UN||Ye(this,{},e,!0)},Qe.prototype.setState=function(e,t){this.$UN||this.$BS||Ye(this,e,t,!1)},Qe.prototype.render=function(e,t,n){return null};t.version="7.3.3"},function(e,t,n){"use strict";var o=function(e){var t,n=Object.prototype,o=n.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function l(e,t,n,o){var r=t&&t.prototype instanceof h?t:h,a=Object.create(r.prototype),i=new L(o||[]);return a._invoke=function(e,t,n){var o=s;return function(r,a){if(o===p)throw new Error("Generator is already running");if(o===f){if("throw"===r)throw a;return S()}for(n.method=r,n.arg=a;;){var i=n.delegate;if(i){var c=x(i,n);if(c){if(c===m)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===s)throw o=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=p;var l=u(e,t,n);if("normal"===l.type){if(o=n.done?f:d,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=f,n.method="throw",n.arg=l.arg)}}}(e,n,i),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(o){return{type:"throw",arg:o}}}e.wrap=l;var s="suspendedStart",d="suspendedYield",p="executing",f="completed",m={};function h(){}function C(){}function g(){}var b={};b[a]=function(){return this};var v=Object.getPrototypeOf,N=v&&v(v(B([])));N&&N!==n&&o.call(N,a)&&(b=N);var V=g.prototype=h.prototype=Object.create(b);function y(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function _(e){var t;this._invoke=function(n,r){function a(){return new Promise((function(t,a){!function i(t,n,r,a){var c=u(e[t],e,n);if("throw"!==c.type){var l=c.arg,s=l.value;return s&&"object"==typeof s&&o.call(s,"__await")?Promise.resolve(s.__await).then((function(e){i("next",e,r,a)}),(function(e){i("throw",e,r,a)})):Promise.resolve(s).then((function(e){l.value=e,r(l)}),(function(e){return i("throw",e,r,a)}))}a(c.arg)}(n,r,t,a)}))}return t=t?t.then(a,a):a()}}function x(e,n){var o=e.iterator[n.method];if(o===t){if(n.delegate=null,"throw"===n.method){if(e.iterator["return"]&&(n.method="return",n.arg=t,x(e,n),"throw"===n.method))return m;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var r=u(o,e.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,m;var a=r.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function k(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function L(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(k,this),this.reset(!0)}function B(e){if(e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function n(){for(;++r=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(l&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),m}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;w(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,o){return this.delegate={iterator:B(e),resultName:n,nextLoc:o},"next"===this.method&&(this.arg=t),m}},e}(e.exports);try{regeneratorRuntime=o}catch(r){Function("r","regeneratorRuntime = r")(o)}},function(e,t,n){"use strict";window.Int32Array||(window.Int32Array=Array)},function(e,t,n){"use strict";(function(e){
+!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=164)}([function(e,t,n){"use strict";var o=n(5),r=n(18).f,a=n(24),i=n(22),c=n(89),l=n(122),u=n(61);e.exports=function(e,t){var n,s,d,p,f,m=e.target,h=e.global,C=e.stat;if(n=h?o:C?o[m]||c(m,{}):(o[m]||{}).prototype)for(s in t){if(p=t[s],d=e.noTargetGet?(f=r(n,s))&&f.value:n[s],!u(h?s:m+(C?".":"#")+s,e.forced)&&d!==undefined){if(typeof p==typeof d)continue;l(p,d)}(e.sham||d&&d.sham)&&a(p,"sham",!0),i(n,s,p,e)}}},function(e,t,n){"use strict";t.__esModule=!0;var o=n(386);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(t[e]=o[e])}))},function(e,t,n){"use strict";t.__esModule=!0,t.Chart=t.Tooltip=t.Toast=t.TitleBar=t.Tabs=t.Table=t.Section=t.ProgressBar=t.NumberInput=t.NoticeBox=t.LabeledList=t.Input=t.Icon=t.Grid=t.Flex=t.Dropdown=t.Dimmer=t.Collapsible=t.ColorBox=t.Button=t.Box=t.BlockQuote=t.AnimatedNumber=void 0;var o=n(158);t.AnimatedNumber=o.AnimatedNumber;var r=n(391);t.BlockQuote=r.BlockQuote;var a=n(17);t.Box=a.Box;var i=n(114);t.Button=i.Button;var c=n(393);t.ColorBox=c.ColorBox;var l=n(394);t.Collapsible=l.Collapsible;var u=n(395);t.Dimmer=u.Dimmer;var s=n(396);t.Dropdown=s.Dropdown;var d=n(397);t.Flex=d.Flex;var p=n(161);t.Grid=p.Grid;var f=n(87);t.Icon=f.Icon;var m=n(160);t.Input=m.Input;var h=n(163);t.LabeledList=h.LabeledList;var C=n(398);t.NoticeBox=C.NoticeBox;var g=n(399);t.NumberInput=g.NumberInput;var b=n(400);t.ProgressBar=b.ProgressBar;var v=n(401);t.Section=v.Section;var N=n(162);t.Table=N.Table;var V=n(402);t.Tabs=V.Tabs;var y=n(403);t.TitleBar=y.TitleBar;var _=n(117);t.Toast=_.Toast;var x=n(159);t.Tooltip=x.Tooltip;var k=n(404);t.Chart=k.Chart},function(e,t,n){"use strict";t.__esModule=!0,t.useBackend=t.backendReducer=t.backendUpdate=void 0;var o=n(37),r=n(19);t.backendUpdate=function(e){return{type:"backendUpdate",payload:e}};t.backendReducer=function(e,t){var n=t.type,r=t.payload;if("backendUpdate"===n){var a=Object.assign({},e.config,{},r.config),i=Object.assign({},e.data,{},r.static_data,{},r.data),c=a.status!==o.UI_DISABLED,l=a.status===o.UI_INTERACTIVE;return Object.assign({},e,{config:a,data:i,visible:c,interactive:l})}return e};t.useBackend=function(e){var t=e.state,n=(e.dispatch,t.config.ref);return Object.assign({},t,{act:function(e,t){return void 0===t&&(t={}),(0,r.act)(n,e,t)}})}},function(e,t,n){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){"use strict";(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n(118))},function(e,t,n){"use strict";e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var o,r=n(9),a=n(5),i=n(6),c=n(15),l=n(74),u=n(24),s=n(22),d=n(13).f,p=n(36),f=n(53),m=n(11),h=n(58),C=a.DataView,g=C&&C.prototype,b=a.Int8Array,v=b&&b.prototype,N=a.Uint8ClampedArray,V=N&&N.prototype,y=b&&p(b),_=v&&p(v),x=Object.prototype,k=x.isPrototypeOf,w=m("toStringTag"),L=h("TYPED_ARRAY_TAG"),B=!(!a.ArrayBuffer||!C),S=B&&!!f&&"Opera"!==l(a.opera),I=!1,T={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},A=function(e){var t=l(e);return"DataView"===t||c(T,t)},E=function(e){return i(e)&&c(T,l(e))};for(o in T)a[o]||(S=!1);if((!S||"function"!=typeof y||y===Function.prototype)&&(y=function(){throw TypeError("Incorrect invocation")},S))for(o in T)a[o]&&f(a[o],y);if((!S||!_||_===x)&&(_=y.prototype,S))for(o in T)a[o]&&f(a[o].prototype,_);if(S&&p(V)!==_&&f(V,_),r&&!c(_,w))for(o in I=!0,d(_,w,{get:function(){return i(this)?this[L]:undefined}}),T)a[o]&&u(a[o],L,o);B&&f&&p(g)!==x&&f(g,x),e.exports={NATIVE_ARRAY_BUFFER:B,NATIVE_ARRAY_BUFFER_VIEWS:S,TYPED_ARRAY_TAG:I&&L,aTypedArray:function(e){if(E(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(f){if(k.call(y,e))return e}else for(var t in T)if(c(T,o)){var n=a[t];if(n&&(e===n||k.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n){if(r){if(n)for(var o in T){var i=a[o];i&&c(i.prototype,e)&&delete i.prototype[e]}_[e]&&!n||s(_,e,n?t:S&&v[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var o,i;if(r){if(f){if(n)for(o in T)(i=a[o])&&c(i,e)&&delete i[e];if(y[e]&&!n)return;try{return s(y,e,n?t:S&&b[e]||t)}catch(l){}}for(o in T)!(i=a[o])||i[e]&&!n||s(i,e,t)}},isView:A,isTypedArray:E,TypedArray:y,TypedArrayPrototype:_}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e){if(!o(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t,n){"use strict";var o=n(4);e.exports=!o((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var o=n(30),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){"use strict";var o=n(5),r=n(91),a=n(15),i=n(58),c=n(95),l=n(125),u=r("wks"),s=o.Symbol,d=l?s:i;e.exports=function(e){return a(u,e)||(c&&a(s,e)?u[e]=s[e]:u[e]=d("Symbol."+e)),u[e]}},function(e,t,n){"use strict";t.__esModule=!0,t.isFalsy=t.pureComponentHooks=t.shallowDiffers=t.normalizeChildren=t.classes=void 0;t.classes=function(e){for(var t="",n=0;n_;_++)if((p||_ in N)&&(b=V(g=N[_],_,v),e))if(t)k[_]=b;else if(b)switch(e){case 3:return!0;case 5:return g;case 6:return _;case 2:l.call(k,g)}else if(s)return!1;return d?-1:u||s?s:k}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6)}},function(e,t,n){"use strict";t.__esModule=!0,t.Box=t.computeBoxProps=t.unit=void 0;var o=n(1),r=n(12),a=n(392),i=n(37);function c(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}var l=function(e){return"string"==typeof e?e:"number"==typeof e?6*e+"px":void 0};t.unit=l;var u=function(e){return"string"==typeof e&&i.CSS_COLORS.includes(e)},s=function(e){return function(t,n){(0,r.isFalsy)(n)||(t[e]=n)}},d=function(e){return function(t,n){(0,r.isFalsy)(n)||(t[e]=l(n))}},p=function(e,t){return function(n,o){(0,r.isFalsy)(o)||(n[e]=t)}},f=function(e,t){return function(n,o){if(!(0,r.isFalsy)(o))for(var a=0;a0&&(t.style=l),t};t.computeBoxProps=C;var g=function(e){var t=e.as,n=void 0===t?"div":t,i=e.className,l=e.content,s=e.children,d=c(e,["as","className","content","children"]),p=e.textColor||e.color,f=e.backgroundColor;if("function"==typeof s)return s(C(e));var m=C(d);return(0,o.createVNode)(a.VNodeFlags.HtmlElement,n,(0,r.classes)([i,u(p)&&"color-"+p,u(f)&&"color-bg-"+f]),l||s,a.ChildFlags.UnknownChildren,m)};t.Box=g,g.defaultHooks=r.pureComponentHooks;var b=function(e){var t=e.children,n=c(e,["children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({position:"relative"},n,{children:(0,o.createComponentVNode)(2,g,{fillPositionedParent:!0,children:t})})))};b.defaultHooks=r.pureComponentHooks,g.Forced=b},function(e,t,n){"use strict";var o=n(9),r=n(71),a=n(46),i=n(23),c=n(33),l=n(15),u=n(119),s=Object.getOwnPropertyDescriptor;t.f=o?s:function(e,t){if(e=i(e),t=c(t,!0),u)try{return s(e,t)}catch(n){}if(l(e,t))return a(!r.f.call(e,t),e[t])}},function(e,t,n){"use strict";t.__esModule=!0,t.winset=t.winget=t.act=t.runCommand=t.callByondAsync=t.callByond=t.tridentVersion=void 0;var o,r=n(28),a=(o=navigator.userAgent.match(/Trident\/(\d+).+?;/i)[1])?parseInt(o,10):null;t.tridentVersion=a;var i=function(e,t){return void 0===t&&(t={}),"byond://"+e+"?"+(0,r.buildQueryString)(t)},c=function(e,t){void 0===t&&(t={}),window.location.href=i(e,t)};t.callByond=c;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 window.location.href=i(e,Object.assign({},t,{callback:"__callbacks__["+n+"]"})),o};t.callByondAsync=l;t.runCommand=function(e){return c("winset",{command:e})};t.act=function(e,t,n){return void 0===n&&(n={}),c("",Object.assign({src:e,action:t},n))};var u=function(e,t){var n;return regeneratorRuntime.async((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,regeneratorRuntime.awrap(l("winget",{id:e,property:t}));case 2:return n=o.sent,o.abrupt("return",n[t]);case 4:case"end":return o.stop()}}))};t.winget=u;t.winset=function(e,t,n){var o;return c("winset",((o={})[e+"."+t]=n,o))}},function(e,t,n){"use strict";t.__esModule=!0,t.toFixed=t.round=t.clamp=void 0;t.clamp=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),Math.max(t,Math.min(e,n))};t.round=function(e){return Math.round(e)};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(t)}},function(e,t,n){"use strict";e.exports=function(e){if(e==undefined)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var o=n(5),r=n(24),a=n(15),i=n(89),c=n(90),l=n(34),u=l.get,s=l.enforce,d=String(String).split("String");(e.exports=function(e,t,n,c){var l=!!c&&!!c.unsafe,u=!!c&&!!c.enumerable,p=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||r(n,"name",t),s(n).source=d.join("string"==typeof t?t:"")),e!==o?(l?!p&&e[t]&&(u=!0):delete e[t],u?e[t]=n:r(e,t,n)):u?e[t]=n:i(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||c(this)}))},function(e,t,n){"use strict";var o=n(57),r=n(21);e.exports=function(e){return o(r(e))}},function(e,t,n){"use strict";var o=n(9),r=n(13),a=n(46);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(123),r=n(15),a=n(129),i=n(13).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},function(e,t,n){"use strict";var o=n(21),r=/"/g;e.exports=function(e,t,n,a){var i=String(o(e)),c="<"+t;return""!==n&&(c+=" "+n+'="'+String(a).replace(r,""")+'"'),c+">"+i+""+t+">"}},function(e,t,n){"use strict";var o=n(4);e.exports=function(e){return o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},function(e,t,n){"use strict";t.__esModule=!0,t.buildQueryString=t.decodeHtmlEntities=t.toTitleCase=t.capitalize=t.testGlobPattern=t.multiline=void 0;t.multiline=function o(e){if(Array.isArray(e))return o(e.join(""));var t,n=e.split("\n"),r=n,a=Array.isArray(r),i=0;for(r=a?r:r[Symbol.iterator]();;){var c;if(a){if(i>=r.length)break;c=r[i++]}else{if((i=r.next()).done)break;c=i.value}for(var l=c,u=0;u",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";t.__esModule=!0,t.zipWith=t.zip=t.reduce=t.sortBy=t.map=t.toArray=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[]};var o=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;oc)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n0?r:o)(e)}},function(e,t,n){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){"use strict";var o={}.toString;e.exports=function(e){return o.call(e).slice(8,-1)}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){"use strict";var o,r,a,i=n(121),c=n(5),l=n(6),u=n(24),s=n(15),d=n(72),p=n(59),f=c.WeakMap;if(i){var m=new f,h=m.get,C=m.has,g=m.set;o=function(e,t){return g.call(m,e,t),t},r=function(e){return h.call(m,e)||{}},a=function(e){return C.call(m,e)}}else{var b=d("state");p[b]=!0,o=function(e,t){return u(e,b,t),t},r=function(e){return s(e,b)?e[b]:{}},a=function(e){return s(e,b)}}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(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){"use strict";var o=n(123),r=n(5),a=function(e){return"function"==typeof e?e:undefined};e.exports=function(e,t){return arguments.length<2?a(o[e])||a(r[e]):o[e]&&o[e][t]||r[e]&&r[e][t]}},function(e,t,n){"use strict";var o=n(15),r=n(14),a=n(72),i=n(102),c=a("IE_PROTO"),l=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=r(e),o(e,c)?e[c]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},function(e,t,n){"use strict";t.__esModule=!0,t.getGasColor=t.getGasLabel=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=t.UI_CLOSE=t.UI_DISABLED=t.UI_UPDATE=t.UI_INTERACTIVE=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{captain:"#c06616",security:"#e74c3c",medbay:"#3498db",science:"#9b59b6",engineering:"#f1c40f",cargo:"#f39c12",centcom:"#00c100",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:"Red Team",freq:1215,color:"#ff4444"},{name:"Blue Team",freq:1217,color:"#3434fd"},{name:"CentCom",freq:1337,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:"Medical",freq:1355,color:"#57b8f0"},{name:"Engineering",freq:1357,color:"#f37746"},{name:"Security",freq:1359,color:"#dd3535"},{name:"AI Private",freq:1447,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"}];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}},function(e,t,n){"use strict";e.exports=!1},function(e,t,n){"use strict";var o=n(4);e.exports=function(e,t){var n=[][e];return!n||!o((function(){n.call(null,t||function(){throw 1},1)}))}},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(9),i=n(113),c=n(7),l=n(77),u=n(55),s=n(46),d=n(24),p=n(10),f=n(137),m=n(151),h=n(33),C=n(15),g=n(74),b=n(6),v=n(42),N=n(53),V=n(47).f,y=n(152),_=n(16).forEach,x=n(54),k=n(13),w=n(18),L=n(34),B=n(79),S=L.get,I=L.set,T=k.f,A=w.f,E=Math.round,P=r.RangeError,O=l.ArrayBuffer,M=l.DataView,R=c.NATIVE_ARRAY_BUFFER_VIEWS,F=c.TYPED_ARRAY_TAG,D=c.TypedArray,j=c.TypedArrayPrototype,z=c.aTypedArrayConstructor,H=c.isTypedArray,G=function(e,t){for(var n=0,o=t.length,r=new(z(e))(o);o>n;)r[n]=t[n++];return r},U=function(e,t){T(e,t,{get:function(){return S(this)[t]}})},K=function(e){var t;return e instanceof O||"ArrayBuffer"==(t=g(e))||"SharedArrayBuffer"==t},Y=function(e,t){return H(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},q=function(e,t){return Y(e,t=h(t,!0))?s(2,e[t]):A(e,t)},W=function(e,t,n){return!(Y(e,t=h(t,!0))&&b(n)&&C(n,"value"))||C(n,"get")||C(n,"set")||n.configurable||C(n,"writable")&&!n.writable||C(n,"enumerable")&&!n.enumerable?T(e,t,n):(e[t]=n.value,e)};a?(R||(w.f=q,k.f=W,U(j,"buffer"),U(j,"byteOffset"),U(j,"byteLength"),U(j,"length")),o({target:"Object",stat:!0,forced:!R},{getOwnPropertyDescriptor:q,defineProperty:W}),e.exports=function(e,t,n){var a=e.match(/\d+$/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,s="set"+e,h=r[c],C=h,g=C&&C.prototype,k={},w=function(e,t){var n=S(e);return n.view[l](t*a+n.byteOffset,!0)},L=function(e,t,o){var r=S(e);n&&(o=(o=E(o))<0?0:o>255?255:255&o),r.view[s](t*a+r.byteOffset,o,!0)},A=function(e,t){T(e,t,{get:function(){return w(this,t)},set:function(e){return L(this,t,e)},enumerable:!0})};R?i&&(C=t((function(e,t,n,o){return u(e,C,c),B(b(t)?K(t)?o!==undefined?new h(t,m(n,a),o):n!==undefined?new h(t,m(n,a)):new h(t):H(t)?G(C,t):y.call(C,t):new h(f(t)),e,C)})),N&&N(C,D),_(V(h),(function(e){e in C||d(C,e,h[e])})),C.prototype=g):(C=t((function(e,t,n,o){u(e,C,c);var r,i,l,s=0,d=0;if(b(t)){if(!K(t))return H(t)?G(C,t):y.call(C,t);r=t,d=m(n,a);var h=t.byteLength;if(o===undefined){if(h%a)throw P("Wrong length");if((i=h-d)<0)throw P("Wrong length")}else if((i=p(o)*a)+d>h)throw P("Wrong length");l=i/a}else l=f(t),r=new O(i=l*a);for(I(e,{buffer:r,byteOffset:d,byteLength:i,length:l,view:new M(r)});sdocument.F=Object<\/script>"),e.close(),p=e.F;n--;)delete p[s][a[n]];return p()};e.exports=Object.create||function(e,t){var n;return null!==e?(d[s]=o(e),n=new d,d[s]=null,n[u]=e):n=p(),t===undefined?n:r(n,t)},i[u]=!0},function(e,t,n){"use strict";var o=n(13).f,r=n(15),a=n(11)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&o(e,a,{configurable:!0,value:t})}},function(e,t,n){"use strict";var o=n(11),r=n(42),a=n(24),i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a(c,i,r(null)),e.exports=function(e){c[i][e]=!0}},function(e,t,n){"use strict";var o=n(8),r=n(31),a=n(11)("species");e.exports=function(e,t){var n,i=o(e).constructor;return i===undefined||(n=o(i)[a])==undefined?t:r(n)}},function(e,t,n){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var o=n(124),r=n(93).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return o(e,r)}},function(e,t,n){"use strict";var o=n(31);e.exports=function(e,t,n){if(o(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var o=n(33),r=n(13),a=n(46);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},function(e,t,n){"use strict";var o=n(59),r=n(6),a=n(15),i=n(13).f,c=n(58),l=n(67),u=c("meta"),s=0,d=Object.isExtensible||function(){return!0},p=function(e){i(e,u,{value:{objectID:"O"+ ++s,weakData:{}}})},f=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,u)){if(!d(e))return"F";if(!t)return"E";p(e)}return e[u].objectID},getWeakData:function(e,t){if(!a(e,u)){if(!d(e))return!0;if(!t)return!1;p(e)}return e[u].weakData},onFreeze:function(e){return l&&f.REQUIRED&&d(e)&&!a(e,u)&&p(e),e}};o[u]=!0},function(e,t,n){"use strict";t.__esModule=!0,t.createLogger=void 0;n(154);var o=n(19),r=0,a=1,i=2,c=3,l=4,u=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),a=2;a=i){var c=[t].concat(r).map((function(e){return"string"==typeof e?e:e instanceof Error?e.stack||String(e):JSON.stringify(e)})).filter((function(e){return e})).join(" ")+"\nUser Agent: "+navigator.userAgent;(0,o.act)(window.__ref__,"tgui:log",{log:c})}};t.createLogger=function(e){return{debug:function(){for(var t=arguments.length,n=new Array(t),o=0;os;)if((c=l[s++])!=c)return!0}else for(;u>s;s++)if((e||s in l)&&l[s]===n)return e||s||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},function(e,t,n){"use strict";var o=n(4),r=/#|\.prototype\./,a=function(e,t){var n=c[i(e)];return n==u||n!=l&&("function"==typeof t?o(t):!!t)},i=a.normalize=function(e){return String(e).replace(r,".").toLowerCase()},c=a.data={},l=a.NATIVE="N",u=a.POLYFILL="P";e.exports=a},function(e,t,n){"use strict";var o=n(124),r=n(93);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t,n){"use strict";var o=n(6),r=n(52),a=n(11)("species");e.exports=function(e,t){var n;return r(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!r(n.prototype)?o(n)&&null===(n=n[a])&&(n=undefined):n=undefined),new(n===undefined?Array:n)(0===t?0:t)}},function(e,t,n){"use strict";var o=n(4),r=n(11),a=n(96),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var o=n(22);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},function(e,t,n){"use strict";var o=n(4);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(e,t,n){"use strict";var o=n(8),r=n(98),a=n(10),i=n(48),c=n(99),l=n(132),u=function(e,t){this.stopped=e,this.result=t};(e.exports=function(e,t,n,s,d){var p,f,m,h,C,g,b,v=i(t,n,s?2:1);if(d)p=e;else{if("function"!=typeof(f=c(e)))throw TypeError("Target is not iterable");if(r(f)){for(m=0,h=a(e.length);h>m;m++)if((C=s?v(o(b=e[m])[0],b[1]):v(e[m]))&&C instanceof u)return C;return new u(!1)}p=f.call(e)}for(g=p.next;!(b=g.call(p)).done;)if("object"==typeof(C=l(p,v,b.value,s))&&C&&C instanceof u)return C;return new u(!1)}).stop=function(e){return new u(!0,e)}},function(e,t,n){"use strict";t.__esModule=!0,t.InterfaceLockNoticeBox=void 0;var o=n(1),r=n(2);t.InterfaceLockNoticeBox=function(e){var t=e.siliconUser,n=e.locked,a=e.onLockStatusChange,i=e.accessText;return t?(0,o.createComponentVNode)(2,r.NoticeBox,{children:(0,o.createComponentVNode)(2,r.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,r.Flex.Item,{children:"Interface lock status:"}),(0,o.createComponentVNode)(2,r.Flex.Item,{grow:1}),(0,o.createComponentVNode)(2,r.Flex.Item,{children:(0,o.createComponentVNode)(2,r.Button,{m:0,color:"gray",icon:n?"lock":"unlock",content:n?"Locked":"Unlocked",onClick:function(){a&&a(!n)}})})]})}):(0,o.createComponentVNode)(2,r.NoticeBox,{children:["Swipe ",i||"an ID card"," ","to ",n?"unlock":"lock"," this interface."]})}},function(e,t,n){"use strict";t.__esModule=!0,t.compose=t.flow=void 0;t.flow=function o(){for(var e=arguments.length,t=new Array(e),n=0;n1?r-1:0),i=1;i=c.length)break;s=c[u++]}else{if((u=c.next()).done)break;s=u.value}var d=s;Array.isArray(d)?n=o.apply(void 0,d).apply(void 0,[n].concat(a)):d&&(n=d.apply(void 0,[n].concat(a)))}return n}};t.compose=function(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),a=1;a=0:d>p;p+=f)p in s&&(l=n(l,s[p],p,u));return l}};e.exports={left:c(!1),right:c(!0)}},function(e,t,n){"use strict";var o=n(5),r=n(9),a=n(7).NATIVE_ARRAY_BUFFER,i=n(24),c=n(66),l=n(4),u=n(55),s=n(30),d=n(10),p=n(137),f=n(217),m=n(47).f,h=n(13).f,C=n(97),g=n(43),b=n(34),v=b.get,N=b.set,V="ArrayBuffer",y="DataView",_="Wrong length",x=o[V],k=x,w=o[y],L=o.RangeError,B=f.pack,S=f.unpack,I=function(e){return[255&e]},T=function(e){return[255&e,e>>8&255]},A=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},E=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},P=function(e){return B(e,23,4)},O=function(e){return B(e,52,8)},M=function(e,t){h(e.prototype,t,{get:function(){return v(this)[t]}})},R=function(e,t,n,o){var r=p(n),a=v(e);if(r+t>a.byteLength)throw L("Wrong index");var i=v(a.buffer).bytes,c=r+a.byteOffset,l=i.slice(c,c+t);return o?l:l.reverse()},F=function(e,t,n,o,r,a){var i=p(n),c=v(e);if(i+t>c.byteLength)throw L("Wrong index");for(var l=v(c.buffer).bytes,u=i+c.byteOffset,s=o(+r),d=0;dH;)(D=z[H++])in k||i(k,D,x[D]);j.constructor=k}var G=new w(new k(2)),U=w.prototype.setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||c(w.prototype,{setInt8:function(e,t){U.call(this,e,t<<24>>24)},setUint8:function(e,t){U.call(this,e,t<<24>>24)}},{unsafe:!0})}else k=function(e){u(this,k,V);var t=p(e);N(this,{bytes:C.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},w=function(e,t,n){u(this,w,y),u(e,k,y);var o=v(e).byteLength,a=s(t);if(a<0||a>o)throw L("Wrong offset");if(a+(n=n===undefined?o-a:d(n))>o)throw L(_);N(this,{buffer:e,byteLength:n,byteOffset:a}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},r&&(M(k,"byteLength"),M(w,"buffer"),M(w,"byteLength"),M(w,"byteOffset")),c(w.prototype,{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return E(R(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return E(R(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return S(R(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return S(R(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){F(this,1,e,I,t)},setUint8:function(e,t){F(this,1,e,I,t)},setInt16:function(e,t){F(this,2,e,T,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){F(this,2,e,T,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){F(this,4,e,A,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){F(this,4,e,A,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){F(this,4,e,P,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){F(this,8,e,O,t,arguments.length>2?arguments[2]:undefined)}});g(k,V),g(w,y),e.exports={ArrayBuffer:k,DataView:w}},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(61),i=n(22),c=n(50),l=n(68),u=n(55),s=n(6),d=n(4),p=n(75),f=n(43),m=n(79);e.exports=function(e,t,n){var h=-1!==e.indexOf("Map"),C=-1!==e.indexOf("Weak"),g=h?"set":"add",b=r[e],v=b&&b.prototype,N=b,V={},y=function(e){var t=v[e];i(v,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(C&&!s(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return C&&!s(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(C&&!s(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(a(e,"function"!=typeof b||!(C||v.forEach&&!d((function(){(new b).entries().next()})))))N=n.getConstructor(t,e,h,g),c.REQUIRED=!0;else if(a(e,!0)){var _=new N,x=_[g](C?{}:-0,1)!=_,k=d((function(){_.has(1)})),w=p((function(e){new b(e)})),L=!C&&d((function(){for(var e=new b,t=5;t--;)e[g](t,t);return!e.has(-0)}));w||((N=t((function(t,n){u(t,N,e);var o=m(new b,t,N);return n!=undefined&&l(n,o[g],o,h),o}))).prototype=v,v.constructor=N),(k||L)&&(y("delete"),y("has"),h&&y("get")),(L||x)&&y(g),C&&v.clear&&delete v.clear}return V[e]=N,o({global:!0,forced:N!=b},V),f(N,e),C||n.setStrong(N,e,h),N}},function(e,t,n){"use strict";var o=n(6),r=n(53);e.exports=function(e,t,n){var a,i;return r&&"function"==typeof(a=t.constructor)&&a!==n&&o(i=a.prototype)&&i!==n.prototype&&r(e,i),e}},function(e,t,n){"use strict";var o=Math.expm1,r=Math.exp;e.exports=!o||o(10)>22025.465794806718||o(10)<22025.465794806718||-2e-17!=o(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:r(e)-1}:o},function(e,t,n){"use strict";e.exports="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},function(e,t,n){"use strict";var o=n(38),r=n(5),a=n(4);e.exports=o||!a((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete r[e]}))},function(e,t,n){"use strict";var o=n(8);e.exports=function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){"use strict";var o,r,a=n(83),i=RegExp.prototype.exec,c=String.prototype.replace,l=i,u=(o=/a/,r=/b*/g,i.call(o,"a"),i.call(r,"a"),0!==o.lastIndex||0!==r.lastIndex),s=/()??/.exec("")[1]!==undefined;(u||s)&&(l=function(e){var t,n,o,r,l=this;return s&&(n=new RegExp("^"+l.source+"$(?!\\s)",a.call(l))),u&&(t=l.lastIndex),o=i.call(l,e),u&&o&&(l.lastIndex=l.global?o.index+o[0].length:t),s&&o&&o.length>1&&c.call(o[0],n,(function(){for(r=1;r")})),s=!a((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,d){var p=i(e),f=!a((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),m=f&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!f||!m||"replace"===e&&!u||"split"===e&&!s){var h=/./[p],C=n(p,""[e],(function(e,t,n,o,r){return t.exec===c?f&&!r?{done:!0,value:h.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}})),g=C[0],b=C[1];r(String.prototype,e,g),r(RegExp.prototype,p,2==t?function(e,t){return b.call(e,this,t)}:function(e){return b.call(e,this)}),d&&o(RegExp.prototype[p],"sham",!0)}}},function(e,t,n){"use strict";var o=n(32),r=n(84);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var a=n.call(e,t);if("object"!=typeof a)throw TypeError("RegExp exec method returned something other than an Object or null");return a}if("RegExp"!==o(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},function(e,t,n){"use strict";t.__esModule=!0,t.Icon=void 0;var o=n(1),r=n(12),a=n(17);var i=/-o$/,c=function(e){var t=e.name,n=e.size,c=e.spin,l=e.className,u=e.style,s=void 0===u?{}:u,d=e.rotation,p=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,["name","size","spin","className","style","rotation"]);n&&(s["font-size"]=100*n+"%"),"number"==typeof d&&(s.transform="rotate("+d+"deg)");var f=i.test(t),m=t.replace(i,"");return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"i",className:(0,r.classes)([l,f?"far":"fas","fa-"+m,c&&"fa-spin"]),style:s},p)))};t.Icon=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";var o=n(5),r=n(6),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},function(e,t,n){"use strict";var o=n(5),r=n(24);e.exports=function(e,t){try{r(o,e,t)}catch(n){o[e]=t}return t}},function(e,t,n){"use strict";var o=n(120),r=Function.toString;"function"!=typeof o.inspectSource&&(o.inspectSource=function(e){return r.call(e)}),e.exports=o.inspectSource},function(e,t,n){"use strict";var o=n(38),r=n(120);(e.exports=function(e,t){return r[e]||(r[e]=t!==undefined?t:{})})("versions",[]).push({version:"3.4.8",mode:o?"pure":"global",copyright:"\xa9 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){"use strict";var o=n(35),r=n(47),a=n(94),i=n(8);e.exports=o("Reflect","ownKeys")||function(e){var t=r.f(i(e)),n=a.f;return n?t.concat(n(e)):t}},function(e,t,n){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){"use strict";t.f=Object.getOwnPropertySymbols},function(e,t,n){"use strict";var o=n(4);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){return!String(Symbol())}))},function(e,t,n){"use strict";var o,r,a=n(5),i=n(73),c=a.process,l=c&&c.versions,u=l&&l.v8;u?r=(o=u.split("."))[0]+o[1]:i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=o[1]),e.exports=r&&+r},function(e,t,n){"use strict";var o=n(14),r=n(41),a=n(10);e.exports=function(e){for(var t=o(this),n=a(t.length),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,u=l===undefined?n:r(l,n);u>c;)t[c++]=e;return t}},function(e,t,n){"use strict";var o=n(11),r=n(65),a=o("iterator"),i=Array.prototype;e.exports=function(e){return e!==undefined&&(r.Array===e||i[a]===e)}},function(e,t,n){"use strict";var o=n(74),r=n(65),a=n(11)("iterator");e.exports=function(e){if(e!=undefined)return e[a]||e["@@iterator"]||r[o(e)]}},function(e,t,n){"use strict";var o={};o[n(11)("toStringTag")]="z",e.exports="[object z]"===String(o)},function(e,t,n){"use strict";var o=n(0),r=n(202),a=n(36),i=n(53),c=n(43),l=n(24),u=n(22),s=n(11),d=n(38),p=n(65),f=n(134),m=f.IteratorPrototype,h=f.BUGGY_SAFARI_ITERATORS,C=s("iterator"),g=function(){return this};e.exports=function(e,t,n,s,f,b,v){r(n,t,s);var N,V,y,_=function(e){if(e===f&&B)return B;if(!h&&e in w)return w[e];switch(e){case"keys":case"values":case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},x=t+" Iterator",k=!1,w=e.prototype,L=w[C]||w["@@iterator"]||f&&w[f],B=!h&&L||_(f),S="Array"==t&&w.entries||L;if(S&&(N=a(S.call(new e)),m!==Object.prototype&&N.next&&(d||a(N)===m||(i?i(N,m):"function"!=typeof N[C]&&l(N,C,g)),c(N,x,!0,!0),d&&(p[x]=g))),"values"==f&&L&&"values"!==L.name&&(k=!0,B=function(){return L.call(this)}),d&&!v||w[C]===B||l(w,C,B),p[t]=B,f)if(V={values:_("values"),keys:b?B:_("keys"),entries:_("entries")},v)for(y in V)!h&&!k&&y in w||u(w,y,V[y]);else o({target:t,proto:!0,forced:h||k},V);return V}},function(e,t,n){"use strict";var o=n(4);e.exports=!o((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},function(e,t,n){"use strict";var o=n(10),r=n(104),a=n(21),i=Math.ceil,c=function(e){return function(t,n,c){var l,u,s=String(a(t)),d=s.length,p=c===undefined?" ":String(c),f=o(n);return f<=d||""==p?s:(l=f-d,(u=r.call(p,i(l/p.length))).length>l&&(u=u.slice(0,l)),e?s+u:u+s)}};e.exports={start:c(!1),end:c(!0)}},function(e,t,n){"use strict";var o=n(30),r=n(21);e.exports="".repeat||function(e){var t=String(r(this)),n="",a=o(e);if(a<0||a==Infinity)throw RangeError("Wrong number of repetitions");for(;a>0;(a>>>=1)&&(t+=t))1&a&&(n+=t);return n}},function(e,t,n){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t,n){"use strict";var o,r,a,i=n(5),c=n(4),l=n(32),u=n(48),s=n(127),d=n(88),p=n(146),f=i.location,m=i.setImmediate,h=i.clearImmediate,C=i.process,g=i.MessageChannel,b=i.Dispatch,v=0,N={},V=function(e){if(N.hasOwnProperty(e)){var t=N[e];delete N[e],t()}},y=function(e){return function(){V(e)}},_=function(e){V(e.data)},x=function(e){i.postMessage(e+"",f.protocol+"//"+f.host)};m&&h||(m=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return N[++v]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},o(v),v},h=function(e){delete N[e]},"process"==l(C)?o=function(e){C.nextTick(y(e))}:b&&b.now?o=function(e){b.now(y(e))}:g&&!p?(a=(r=new g).port2,r.port1.onmessage=_,o=u(a.postMessage,a,1)):!i.addEventListener||"function"!=typeof postMessage||i.importScripts||c(x)?o="onreadystatechange"in d("script")?function(e){s.appendChild(d("script")).onreadystatechange=function(){s.removeChild(this),V(e)}}:function(e){setTimeout(y(e),0)}:(o=x,i.addEventListener("message",_,!1))),e.exports={set:m,clear:h}},function(e,t,n){"use strict";var o=n(6),r=n(32),a=n(11)("match");e.exports=function(e){var t;return o(e)&&((t=e[a])!==undefined?!!t:"RegExp"==r(e))}},function(e,t,n){"use strict";var o=n(30),r=n(21),a=function(e){return function(t,n){var a,i,c=String(r(t)),l=o(n),u=c.length;return l<0||l>=u?e?"":undefined:(a=c.charCodeAt(l))<55296||a>56319||l+1===u||(i=c.charCodeAt(l+1))<56320||i>57343?e?c.charAt(l):a:e?c.slice(l,l+2):i-56320+(a-55296<<10)+65536}};e.exports={codeAt:a(!1),charAt:a(!0)}},function(e,t,n){"use strict";var o=n(107);e.exports=function(e){if(o(e))throw TypeError("The method doesn't accept regular expressions");return e}},function(e,t,n){"use strict";var o=n(11)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[o]=!1,"/./"[e](t)}catch(r){}}return!1}},function(e,t,n){"use strict";var o=n(108).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},function(e,t,n){"use strict";var o=n(4),r=n(81);e.exports=function(e){return o((function(){return!!r[e]()||"\u200b\x85\u180e"!="\u200b\x85\u180e"[e]()||r[e].name!==e}))}},function(e,t,n){"use strict";var o=n(5),r=n(4),a=n(75),i=n(7).NATIVE_ARRAY_BUFFER_VIEWS,c=o.ArrayBuffer,l=o.Int8Array;e.exports=!i||!r((function(){l(1)}))||!r((function(){new l(-1)}))||!a((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||r((function(){return 1!==new l(new c(2),1,undefined).length}))},function(e,t,n){"use strict";t.__esModule=!0,t.ButtonInput=t.ButtonConfirm=t.ButtonCheckbox=t.Button=void 0;var o=n(1),r=n(12),a=n(19),i=n(115),c=n(51),l=n(116),u=n(17),s=n(87),d=n(159);n(160),n(161);function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function f(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}var m=(0,c.createLogger)("Button"),h=function(e){var t=e.className,n=e.fluid,c=e.icon,p=e.color,h=e.disabled,C=e.selected,g=e.tooltip,b=e.tooltipPosition,v=e.ellipsis,N=e.content,V=e.iconRotation,y=e.iconSpin,_=e.children,x=e.onclick,k=e.onClick,w=f(e,["className","fluid","icon","color","disabled","selected","tooltip","tooltipPosition","ellipsis","content","iconRotation","iconSpin","children","onclick","onClick"]),L=!(!N&&!_);return x&&m.warn("Lowercase 'onclick' is not supported on Button and lowercase prop names are discouraged in general. Please use a camelCase'onClick' instead and read: https://infernojs.org/docs/guides/event-handling"),(0,o.normalizeProps)((0,o.createComponentVNode)(2,u.Box,Object.assign({as:"span",className:(0,r.classes)(["Button",n&&"Button--fluid",h&&"Button--disabled",C&&"Button--selected",L&&"Button--hasContent",v&&"Button--ellipsis",p&&"string"==typeof p?"Button--color--"+p:"Button--color--default",t]),tabIndex:!h&&"0",unselectable:a.tridentVersion<=4,onclick:function(e){(0,l.refocusLayout)(),!h&&k&&k(e)},onKeyDown:function(e){var t=window.event?e.which:e.keyCode;return t===i.KEY_SPACE||t===i.KEY_ENTER?(e.preventDefault(),void(!h&&k&&k(e))):t===i.KEY_ESCAPE?(e.preventDefault(),void(0,l.refocusLayout)()):void 0}},w,{children:[c&&(0,o.createComponentVNode)(2,s.Icon,{name:c,rotation:V,spin:y}),N,_,g&&(0,o.createComponentVNode)(2,d.Tooltip,{content:g,position:b})]})))};t.Button=h,h.defaultHooks=r.pureComponentHooks;var C=function(e){var t=e.checked,n=f(e,["checked"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({color:"transparent",icon:t?"check-square-o":"square-o",selected:t},n)))};t.ButtonCheckbox=C,h.Checkbox=C;var g=function(e){function t(){var t;return(t=e.call(this)||this).state={clickedOnce:!1},t.handleClick=function(){t.state.clickedOnce&&t.setClickedOnce(!1)},t}p(t,e);var n=t.prototype;return n.setClickedOnce=function(e){var t=this;this.setState({clickedOnce:e}),e?setTimeout((function(){return window.addEventListener("click",t.handleClick)})):window.removeEventListener("click",this.handleClick)},n.render=function(){var e=this,t=this.props,n=t.confirmMessage,r=void 0===n?"Confirm?":n,a=t.confirmColor,i=void 0===a?"bad":a,c=t.color,l=t.content,u=t.onClick,s=f(t,["confirmMessage","confirmColor","color","content","onClick"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({content:this.state.clickedOnce?r:l,color:this.state.clickedOnce?i:c,onClick:function(){return e.state.clickedOnce?u():e.setClickedOnce(!0)}},s)))},t}(o.Component);t.ButtonConfirm=g,h.Confirm=g;var b=function(e){function t(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={inInput:!1},t}p(t,e);var n=t.prototype;return n.setInInput=function(e){if(this.setState({inInput:e}),this.inputRef){var t=this.inputRef.current;if(e){t.value=this.props.currentValue||"";try{t.focus(),t.select()}catch(n){}}}},n.commitResult=function(e){if(this.inputRef){var t=this.inputRef.current;if(""!==t.value)return void this.props.onCommit(e,t.value);if(!this.props.defaultValue)return;this.props.onCommit(e,this.props.defaultValue)}},n.render=function(){var e=this,t=this.props,n=t.fluid,a=t.content,c=t.color,l=void 0===c?"default":c,s=(t.placeholder,t.maxLength,f(t,["fluid","content","color","placeholder","maxLength"]));return(0,o.normalizeProps)((0,o.createComponentVNode)(2,u.Box,Object.assign({className:(0,r.classes)(["Button",n&&"Button--fluid","Button--color--"+l])},s,{onClick:function(){return e.setInInput(!0)},children:[(0,o.createVNode)(1,"div",null,a,0),(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:this.state.inInput?undefined:"none","text-align":"left"},onBlur:function(t){e.state.inInput&&(e.setInInput(!1),e.commitResult(t))},onKeyDown:function(t){if(t.keyCode===i.KEY_ENTER)return e.setInInput(!1),void e.commitResult(t);t.keyCode===i.KEY_ESCAPE&&e.setInInput(!1)}},null,this.inputRef)]})))},t}(o.Component);t.ButtonInput=b,h.Input=b},function(e,t,n){"use strict";t.__esModule=!0,t.hotKeyReducer=t.hotKeyMiddleware=t.releaseHeldKeys=t.KEY_MINUS=t.KEY_EQUAL=t.KEY_Z=t.KEY_Y=t.KEY_X=t.KEY_W=t.KEY_V=t.KEY_U=t.KEY_T=t.KEY_S=t.KEY_R=t.KEY_Q=t.KEY_P=t.KEY_O=t.KEY_N=t.KEY_M=t.KEY_L=t.KEY_K=t.KEY_J=t.KEY_I=t.KEY_H=t.KEY_G=t.KEY_F=t.KEY_E=t.KEY_D=t.KEY_C=t.KEY_B=t.KEY_A=t.KEY_9=t.KEY_8=t.KEY_7=t.KEY_6=t.KEY_5=t.KEY_4=t.KEY_3=t.KEY_2=t.KEY_1=t.KEY_0=t.KEY_SPACE=t.KEY_ESCAPE=t.KEY_ALT=t.KEY_CTRL=t.KEY_SHIFT=t.KEY_ENTER=t.KEY_TAB=t.KEY_BACKSPACE=void 0;var o=n(51),r=n(19),a=(0,o.createLogger)("hotkeys");t.KEY_BACKSPACE=8;t.KEY_TAB=9;t.KEY_ENTER=13;t.KEY_SHIFT=16;t.KEY_CTRL=17;t.KEY_ALT=18;t.KEY_ESCAPE=27;t.KEY_SPACE=32;t.KEY_0=48;t.KEY_1=49;t.KEY_2=50;t.KEY_3=51;t.KEY_4=52;t.KEY_5=53;t.KEY_6=54;t.KEY_7=55;t.KEY_8=56;t.KEY_9=57;t.KEY_A=65;t.KEY_B=66;t.KEY_C=67;t.KEY_D=68;t.KEY_E=69;t.KEY_F=70;t.KEY_G=71;t.KEY_H=72;t.KEY_I=73;t.KEY_J=74;t.KEY_K=75;t.KEY_L=76;t.KEY_M=77;t.KEY_N=78;t.KEY_O=79;t.KEY_P=80;t.KEY_Q=81;t.KEY_R=82;t.KEY_S=83;t.KEY_T=84;t.KEY_U=85;t.KEY_V=86;t.KEY_W=87;t.KEY_X=88;t.KEY_Y=89;t.KEY_Z=90;t.KEY_EQUAL=187;t.KEY_MINUS=189;var i=[17,18,16],c=[27,13,32,9,17,16],l={},u=function(e,t,n,o){var r="";return e&&(r+="Ctrl+"),t&&(r+="Alt+"),n&&(r+="Shift+"),r+=o>=48&&o<=90?String.fromCharCode(o):"["+o+"]"},s=function(e){var t=window.event?e.which:e.keyCode,n=e.ctrlKey,o=e.altKey,r=e.shiftKey;return{keyCode:t,ctrlKey:n,altKey:o,shiftKey:r,hasModifierKeys:n||o||r,keyString:u(n,o,r,t)}},d=function(){for(var e=0,t=Object.keys(l);e4&&function(e,t){if(!e.defaultPrevented){var n=e.target&&e.target.localName;if("input"!==n&&"textarea"!==n){var o=s(e),i=o.keyCode,u=o.ctrlKey,d=o.shiftKey;u||d||c.includes(i)||("keydown"!==t||l[i]?"keyup"===t&&l[i]&&(a.debug("passthrough",t,o),(0,r.callByond)("",{__keyup:i})):(a.debug("passthrough",t,o),(0,r.callByond)("",{__keydown:i})))}}}(e,t),function(e,t,n){if("keyup"===t){var o=s(e),r=o.ctrlKey,c=o.altKey,l=o.keyCode,u=o.hasModifierKeys,d=o.keyString;u&&!i.includes(l)&&(a.log(d),r&&c&&8===l&&setTimeout((function(){throw new Error("OOPSIE WOOPSIE!! UwU We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!")})),n({type:"hotKey",payload:o}))}}(e,t,n)},document.addEventListener("keydown",(function(e){var n=window.event?e.which:e.keyCode;t(e,"keydown"),l[n]=!0})),document.addEventListener("keyup",(function(e){var n=window.event?e.which:e.keyCode;t(e,"keyup"),l[n]=!1})),r.tridentVersion>4&&function(e){var t;document.addEventListener("focusout",(function(){t=setTimeout(e)})),document.addEventListener("focusin",(function(){clearTimeout(t)})),window.addEventListener("beforeunload",e)}((function(){d()})),function(e){return function(t){return e(t)}}};t.hotKeyReducer=function(e,t){var n=t.type,o=t.payload;if("hotKey"===n){var r=o.ctrlKey,a=o.altKey,i=o.keyCode;return r&&a&&187===i?Object.assign({},e,{showKitchenSink:!e.showKitchenSink}):e}return e}},function(e,t,n){"use strict";t.__esModule=!0,t.refocusLayout=void 0;var o=n(19);t.refocusLayout=function(){if(!(o.tridentVersion<=4)){var e=document.getElementById("Layout__content");e&&e.focus()}}},function(e,t,n){"use strict";t.__esModule=!0,t.toastReducer=t.showToast=t.Toast=void 0;var o,r=n(1),a=n(12),i=function(e){var t=e.content,n=e.children;return(0,r.createVNode)(1,"div","Layout__toast",[t,n],0)};t.Toast=i,i.defaultHooks=a.pureComponentHooks;t.showToast=function(e,t){o&&clearTimeout(o),o=setTimeout((function(){o=undefined,e({type:"hideToast"})}),5e3),e({type:"showToast",payload:{text:t}})};t.toastReducer=function(e,t){var n=t.type,o=t.payload;if("showToast"===n){var r=o.text;return Object.assign({},e,{toastText:r})}return"hideToast"===n?Object.assign({},e,{toastText:null}):e}},function(e,t,n){"use strict";var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(r){"object"==typeof window&&(o=window)}e.exports=o},function(e,t,n){"use strict";var o=n(9),r=n(4),a=n(88);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var o=n(5),r=n(89),a=o["__core-js_shared__"]||r("__core-js_shared__",{});e.exports=a},function(e,t,n){"use strict";var o=n(5),r=n(90),a=o.WeakMap;e.exports="function"==typeof a&&/native code/.test(r(a))},function(e,t,n){"use strict";var o=n(15),r=n(92),a=n(18),i=n(13);e.exports=function(e,t){for(var n=r(t),c=i.f,l=a.f,u=0;ul;)o(c,n=t[l++])&&(~a(u,n)||u.push(n));return u}},function(e,t,n){"use strict";var o=n(95);e.exports=o&&!Symbol.sham&&"symbol"==typeof Symbol()},function(e,t,n){"use strict";var o=n(9),r=n(13),a=n(8),i=n(62);e.exports=o?Object.defineProperties:function(e,t){a(e);for(var n,o=i(t),c=o.length,l=0;c>l;)r.f(e,n=o[l++],t[n]);return e}},function(e,t,n){"use strict";var o=n(35);e.exports=o("document","documentElement")},function(e,t,n){"use strict";var o=n(23),r=n(47).f,a={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(e){try{return r(e)}catch(t){return i.slice()}};e.exports.f=function(e){return i&&"[object Window]"==a.call(e)?c(e):r(o(e))}},function(e,t,n){"use strict";var o=n(11);t.f=o},function(e,t,n){"use strict";var o=n(14),r=n(41),a=n(10),i=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),c=a(n.length),l=r(e,c),u=r(t,c),s=arguments.length>2?arguments[2]:undefined,d=i((s===undefined?c:r(s,c))-u,c-l),p=1;for(u0;)u in n?n[l]=n[u]:delete n[l],l+=p,u+=p;return n}},function(e,t,n){"use strict";var o=n(52),r=n(10),a=n(48);e.exports=function i(e,t,n,c,l,u,s,d){for(var p,f=l,m=0,h=!!s&&a(s,d,3);m0&&o(p))f=i(e,t,p,r(p.length),f,u-1)-1;else{if(f>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[f]=p}f++}m++}return f}},function(e,t,n){"use strict";var o=n(8);e.exports=function(e,t,n,r){try{return r?t(o(n)[0],n[1]):t(n)}catch(i){var a=e["return"];throw a!==undefined&&o(a.call(e)),i}}},function(e,t,n){"use strict";var o=n(23),r=n(44),a=n(65),i=n(34),c=n(101),l=i.set,u=i.getterFor("Array Iterator");e.exports=c(Array,"Array",(function(e,t){l(this,{type:"Array Iterator",target:o(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,o=e.index++;return!t||o>=t.length?(e.target=undefined,{value:undefined,done:!0}):"keys"==n?{value:o,done:!1}:"values"==n?{value:t[o],done:!1}:{value:[o,t[o]],done:!1}}),"values"),a.Arguments=a.Array,r("keys"),r("values"),r("entries")},function(e,t,n){"use strict";var o,r,a,i=n(36),c=n(24),l=n(15),u=n(11),s=n(38),d=u("iterator"),p=!1;[].keys&&("next"in(a=[].keys())?(r=i(i(a)))!==Object.prototype&&(o=r):p=!0),o==undefined&&(o={}),s||l(o,d)||c(o,d,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:p}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e){if(!o(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},function(e,t,n){"use strict";var o=n(23),r=n(30),a=n(10),i=n(39),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,s=i("lastIndexOf");e.exports=u||s?function(e){if(u)return l.apply(this,arguments)||0;var t=o(this),n=a(t.length),i=n-1;for(arguments.length>1&&(i=c(i,r(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in t&&t[i]===e)return i||0;return-1}:l},function(e,t,n){"use strict";var o=n(30),r=n(10);e.exports=function(e){if(e===undefined)return 0;var t=o(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},function(e,t,n){"use strict";var o=n(31),r=n(6),a=[].slice,i={},c=function(e,t,n){if(!(t in i)){for(var o=[],r=0;r1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),a(s.prototype,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return C(this,0===e?0:e,t)}}:{add:function(e){return C(this,e=0===e?0:e,e)}}),d&&o(s.prototype,"size",{get:function(){return f(this).size}}),s},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);u(e,t,(function(e,t){m(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),s(t)}}},function(e,t,n){"use strict";var o=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:o(1+e)}},function(e,t,n){"use strict";var o=n(6),r=Math.floor;e.exports=function(e){return!o(e)&&isFinite(e)&&r(e)===e}},function(e,t,n){"use strict";var o=n(5),r=n(56).trim,a=n(81),i=o.parseInt,c=/^[+-]?0[Xx]/,l=8!==i(a+"08")||22!==i(a+"0x16");e.exports=l?function(e,t){var n=r(String(e));return i(n,t>>>0||(c.test(n)?16:10))}:i},function(e,t,n){"use strict";var o=n(9),r=n(62),a=n(23),i=n(71).f,c=function(e){return function(t){for(var n,c=a(t),l=r(c),u=l.length,s=0,d=[];u>s;)n=l[s++],o&&!i.call(c,n)||d.push(e?[n,c[n]]:c[n]);return d}};e.exports={entries:c(!0),values:c(!1)}},function(e,t,n){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){"use strict";var o=n(5);e.exports=o.Promise},function(e,t,n){"use strict";var o=n(73);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(o)},function(e,t,n){"use strict";var o,r,a,i,c,l,u,s,d=n(5),p=n(18).f,f=n(32),m=n(106).set,h=n(146),C=d.MutationObserver||d.WebKitMutationObserver,g=d.process,b=d.Promise,v="process"==f(g),N=p(d,"queueMicrotask"),V=N&&N.value;V||(o=function(){var e,t;for(v&&(e=g.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},v?i=function(){g.nextTick(o)}:C&&!h?(c=!0,l=document.createTextNode(""),new C(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c}):b&&b.resolve?(u=b.resolve(undefined),s=u.then,i=function(){s.call(u,o)}):i=function(){m.call(d,o)}),e.exports=V||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},function(e,t,n){"use strict";var o=n(8),r=n(6),a=n(149);e.exports=function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";var o=n(31),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},function(e,t,n){"use strict";var o=n(73);e.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o)},function(e,t,n){"use strict";var o=n(347);e.exports=function(e,t){var n=o(e);if(n%t)throw RangeError("Wrong offset");return n}},function(e,t,n){"use strict";var o=n(14),r=n(10),a=n(99),i=n(98),c=n(48),l=n(7).aTypedArrayConstructor;e.exports=function(e){var t,n,u,s,d,p,f=o(e),m=arguments.length,h=m>1?arguments[1]:undefined,C=h!==undefined,g=a(f);if(g!=undefined&&!i(g))for(p=(d=g.call(f)).next,f=[];!(s=p.call(d)).done;)f.push(s.value);for(C&&m>2&&(h=c(h,arguments[2],2)),n=r(f.length),u=new(l(this))(n),t=0;n>t;t++)u[t]=C?h(f[t],t):f[t];return u}},function(e,t,n){"use strict";var o=n(66),r=n(50).getWeakData,a=n(8),i=n(6),c=n(55),l=n(68),u=n(16),s=n(15),d=n(34),p=d.set,f=d.getterFor,m=u.find,h=u.findIndex,C=0,g=function(e){return e.frozen||(e.frozen=new b)},b=function(){this.entries=[]},v=function(e,t){return m(e.entries,(function(e){return e[0]===t}))};b.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=h(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,u){var d=e((function(e,o){c(e,d,t),p(e,{type:t,id:C++,frozen:undefined}),o!=undefined&&l(o,e[u],e,n)})),m=f(t),h=function(e,t,n){var o=m(e),i=r(a(t),!0);return!0===i?g(o).set(t,n):i[o.id]=n,e};return o(d.prototype,{"delete":function(e){var t=m(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t)["delete"](e):n&&s(n,t.id)&&delete n[t.id]},has:function(e){var t=m(this);if(!i(e))return!1;var n=r(e);return!0===n?g(t).has(e):n&&s(n,t.id)}}),o(d.prototype,n?{get:function(e){var t=m(this);if(i(e)){var n=r(e);return!0===n?g(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return h(this,e,t)}}:{add:function(e){return h(this,e,!0)}}),d}}},function(e,t,n){"use strict";t.__esModule=!0,t.setupHotReloading=t.sendLogEntry=void 0;t.sendLogEntry=function(e,t){};t.setupHotReloading=function(){0}},function(e,t,n){"use strict";t.__esModule=!0,t.resizeStartHandler=t.dragStartHandler=t.setupDrag=void 0;var o,r,a,i,c,l=n(156),u=n(19),s=(0,n(51).createLogger)("drag"),d=!1,p=!1,f=[0,0],m=function(e){return(0,u.winget)(e,"pos").then((function(e){return[e.x,e.y]}))},h=function(e,t){return(0,u.winset)(e,"pos",t[0]+","+t[1])},C=function(e){var t,n,r,a;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return s.log("setting up"),o=e.config.window,i.next=4,regeneratorRuntime.awrap(m(o));case 4:t=i.sent,f=[t[0]-window.screenLeft,t[1]-window.screenTop],n=g(t),r=n[0],a=n[1],r&&h(o,a),s.debug("current state",{ref:o,screenOffset:f});case 9:case"end":return i.stop()}}))};t.setupDrag=C;var g=function(e){var t=e[0],n=e[1],o=!1;return t<0?(t=0,o=!0):t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth,o=!0),n<0?(n=0,o=!0):n+window.innerHeight>window.screen.availHeight&&(n=window.screen.availHeight-window.innerHeight,o=!0),[o,[t,n]]};t.dragStartHandler=function(e){s.log("drag start"),d=!0,r=[window.screenLeft-e.screenX,window.screenTop-e.screenY],document.addEventListener("mousemove",v),document.addEventListener("mouseup",b),v(e)};var b=function y(e){s.log("drag end"),v(e),document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",y),d=!1},v=function(e){d&&(e.preventDefault(),h(o,(0,l.vecAdd)([e.screenX,e.screenY],f,r)))};t.resizeStartHandler=function(e,t){return function(n){a=[e,t],s.log("resize start",a),p=!0,r=[window.screenLeft-n.screenX,window.screenTop-n.screenY],i=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",V),document.addEventListener("mouseup",N),V(n)}};var N=function _(e){s.log("resize end",c),V(e),document.removeEventListener("mousemove",V),document.removeEventListener("mouseup",_),p=!1},V=function(e){p&&(e.preventDefault(),(c=(0,l.vecAdd)(i,(0,l.vecMultiply)(a,(0,l.vecAdd)([e.screenX,e.screenY],(0,l.vecInverse)([window.screenLeft,window.screenTop]),r,[1,1]))))[0]=Math.max(c[0],250),c[1]=Math.max(c[1],120),function(e,t){(0,u.winset)(e,"size",t[0]+","+t[1])}(o,c))}},function(e,t,n){"use strict";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=t.vecCreate=void 0;var o=n(29);t.vecCreate=function(){for(var e=arguments.length,t=new Array(e),n=0;n35;return(0,o.createVNode)(1,"div",(0,r.classes)(["Tooltip",i&&"Tooltip--long",a&&"Tooltip--"+a]),null,1,{"data-tooltip":t})}},function(e,t,n){"use strict";t.__esModule=!0,t.Input=void 0;var o=n(1),r=n(12),a=n(17);function i(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}var c=function(e){return(0,r.isFalsy)(e)?"":e},l=function(e){var t,n;function l(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={editing:!1},t.handleInput=function(e){var n=t.state.editing,o=t.props.onInput;n||t.setEditing(!0),o&&o(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,o=t.props.onChange;n&&(t.setEditing(!1),o&&o(e,e.target.value))},t.handleKeyDown=function(e){var n=t.props,o=n.onInput,r=n.onChange,a=n.onEnter;return 13===e.keyCode?(t.setEditing(!1),r&&r(e,e.target.value),o&&o(e,e.target.value),a&&a(e,e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):27===e.keyCode?(t.setEditing(!1),e.target.value=c(t.props.value),void e.target.blur()):void 0},t}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=l.prototype;return u.componentDidMount=function(){var e=this.props.value,t=this.inputRef.current;t&&(t.value=c(e))},u.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.inputRef.current;a&&!n&&o!==r&&(a.value=c(r))},u.setEditing=function(e){this.setState({editing:e})},u.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,c=i(e,["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder"]),l=c.className,u=c.fluid,s=i(c,["className","fluid"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Input",u&&"Input--fluid",l])},s,{children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),(0,o.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t},null,this.inputRef)]})))},l}(o.Component);t.Input=l},function(e,t,n){"use strict";t.__esModule=!0,t.GridColumn=t.Grid=void 0;var o=n(1),r=n(162),a=n(12);function i(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}var c=function(e){var t=e.children,n=i(e,["children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table,Object.assign({},n,{children:(0,o.createComponentVNode)(2,r.Table.Row,{children:t})})))};t.Grid=c,c.defaultHooks=a.pureComponentHooks;var l=function(e){var t=e.size,n=void 0===t?1:t,a=e.style,c=i(e,["size","style"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Table.Cell,Object.assign({style:Object.assign({width:n+"%"},a)},c)))};t.GridColumn=l,c.defaultHooks=a.pureComponentHooks,c.Column=l},function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var o=n(1),r=n(12),a=n(17);function i(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}var c=function(e){var t=e.collapsing,n=e.className,c=e.content,l=e.children,u=i(e,["collapsing","className","content","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"table",className:(0,r.classes)(["Table",t&&"Table--collapsing",n])},u,{children:(0,o.createVNode)(1,"tbody",null,[c,l],0)})))};t.Table=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.className,n=e.header,c=i(e,["className","header"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"tr",className:(0,r.classes)(["Table__row",n&&"Table__row--header",t])},c)))};t.TableRow=l,l.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.className,n=e.collapsing,c=e.header,l=i(e,["className","collapsing","header"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"td",className:(0,r.classes)(["Table__cell",n&&"Table__cell--collapsing",c&&"Table__cell--header",t])},l)))};t.TableCell=u,u.defaultHooks=r.pureComponentHooks,c.Row=l,c.Cell=u},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListDivider=t.LabeledListItem=t.LabeledList=void 0;var o=n(1),r=n(12),a=n(17),i=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=i,i.defaultHooks=r.pureComponentHooks;var c=function(e){var t=e.className,n=e.label,i=e.labelColor,c=void 0===i?"label":i,l=e.color,u=e.buttons,s=e.content,d=e.children;return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:c,className:(0,r.classes)(["LabeledList__cell","LabeledList__label"]),content:n+":"}),(0,o.createComponentVNode)(2,a.Box,{as:"td",color:l,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:u?undefined:2,children:[s,d]}),u&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",u,0)],0)};t.LabeledListItem=c,c.defaultHooks=r.pureComponentHooks;var l=function(e){var t=e.size,n=void 0===t?1:t;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,null,1,{style:{"padding-bottom":(0,a.unit)(n)}}),2)};t.LabeledListDivider=l,l.defaultHooks=r.pureComponentHooks,i.Item=c,i.Divider=l},function(e,t,n){n(165),n(166),n(167),n(168),n(169),n(170),e.exports=n(171)},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n(172),n(173),n(174),n(175),n(176),n(177),n(178),n(179),n(180),n(181),n(182),n(183),n(184),n(185),n(186),n(187),n(188),n(189),n(190),n(191),n(192),n(193),n(194),n(195),n(197),n(199),n(200),n(201),n(133),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(218),n(219),n(220),n(221),n(222),n(224),n(225),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(256),n(257),n(258),n(259),n(260),n(261),n(263),n(264),n(266),n(268),n(269),n(270),n(271),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(292),n(293),n(294),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(344),n(345),n(346),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385);var o=n(1);n(387),n(388);var r=n(389),a=(n(154),n(3)),i=n(19),c=n(155),l=n(51),u=n(157),s=n(497),d=(0,l.createLogger)(),p=(0,s.createStore)(),f=document.getElementById("react-root"),m=!0,h=!1,C=function(){for(p.subscribe((function(){!function(){if(!h){0;try{var e=p.getState();if(m){if(d.log("initial render",e),!(0,u.getRoute)(e)){if(d.info("loading old tgui"),h=!0,window.update=window.initialize=function(){},i.tridentVersion<=4)return void setTimeout((function(){location.href="tgui-fallback.html?ref="+window.__ref__}),10);document.getElementById("data").textContent=JSON.stringify(e),(0,r.loadCSS)("v4shim.css"),(0,r.loadCSS)("tgui.css");var t=document.getElementsByTagName("head")[0],a=document.createElement("script");return a.type="text/javascript",a.src="tgui.js",void t.appendChild(a)}(0,c.setupDrag)(e)}var l=n(499).Layout,s=(0,o.createComponentVNode)(2,l,{state:e,dispatch:p.dispatch});(0,o.render)(s,f)}catch(C){d.error("rendering error",C)}m&&(m=!1)}}()})),window.update=window.initialize=function(e){var t=function(e){var t=function(e,t){return"object"==typeof t&&null!==t&&t.__number__?parseFloat(t.__number__):t};i.tridentVersion<=4&&(t=undefined);try{return JSON.parse(e,t)}catch(o){d.log(o),d.log("What we got:",e);var n=o&&o.message;throw new Error("JSON parsing error: "+n)}}(e);p.dispatch((0,a.backendUpdate)(t))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}(0,r.loadCSS)("font-awesome.css")};i.tridentVersion<=4&&"loading"===document.readyState?document.addEventListener("DOMContentLoaded",C):C()},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(35),i=n(38),c=n(9),l=n(95),u=n(125),s=n(4),d=n(15),p=n(52),f=n(6),m=n(8),h=n(14),C=n(23),g=n(33),b=n(46),v=n(42),N=n(62),V=n(47),y=n(128),_=n(94),x=n(18),k=n(13),w=n(71),L=n(24),B=n(22),S=n(91),I=n(72),T=n(59),A=n(58),E=n(11),P=n(129),O=n(25),M=n(43),R=n(34),F=n(16).forEach,D=I("hidden"),j=E("toPrimitive"),z=R.set,H=R.getterFor("Symbol"),G=Object.prototype,U=r.Symbol,K=a("JSON","stringify"),Y=x.f,q=k.f,W=y.f,$=w.f,Q=S("symbols"),X=S("op-symbols"),J=S("string-to-symbol-registry"),Z=S("symbol-to-string-registry"),ee=S("wks"),te=r.QObject,ne=!te||!te.prototype||!te.prototype.findChild,oe=c&&s((function(){return 7!=v(q({},"a",{get:function(){return q(this,"a",{value:7}).a}})).a}))?function(e,t,n){var o=Y(G,t);o&&delete G[t],q(e,t,n),o&&e!==G&&q(G,t,o)}:q,re=function(e,t){var n=Q[e]=v(U.prototype);return z(n,{type:"Symbol",tag:e,description:t}),c||(n.description=t),n},ae=l&&"symbol"==typeof U.iterator?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof U},ie=function(e,t,n){e===G&&ie(X,t,n),m(e);var o=g(t,!0);return m(n),d(Q,o)?(n.enumerable?(d(e,D)&&e[D][o]&&(e[D][o]=!1),n=v(n,{enumerable:b(0,!1)})):(d(e,D)||q(e,D,b(1,{})),e[D][o]=!0),oe(e,o,n)):q(e,o,n)},ce=function(e,t){m(e);var n=C(t),o=N(n).concat(pe(n));return F(o,(function(t){c&&!ue.call(n,t)||ie(e,t,n[t])})),e},le=function(e,t){return t===undefined?v(e):ce(v(e),t)},ue=function(e){var t=g(e,!0),n=$.call(this,t);return!(this===G&&d(Q,t)&&!d(X,t))&&(!(n||!d(this,t)||!d(Q,t)||d(this,D)&&this[D][t])||n)},se=function(e,t){var n=C(e),o=g(t,!0);if(n!==G||!d(Q,o)||d(X,o)){var r=Y(n,o);return!r||!d(Q,o)||d(n,D)&&n[D][o]||(r.enumerable=!0),r}},de=function(e){var t=W(C(e)),n=[];return F(t,(function(e){d(Q,e)||d(T,e)||n.push(e)})),n},pe=function(e){var t=e===G,n=W(t?X:C(e)),o=[];return F(n,(function(e){!d(Q,e)||t&&!d(G,e)||o.push(Q[e])})),o};(l||(B((U=function(){if(this instanceof U)throw TypeError("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==undefined?String(arguments[0]):undefined,t=A(e),n=function o(e){this===G&&o.call(X,e),d(this,D)&&d(this[D],t)&&(this[D][t]=!1),oe(this,t,b(1,e))};return c&&ne&&oe(G,t,{configurable:!0,set:n}),re(t,e)}).prototype,"toString",(function(){return H(this).tag})),w.f=ue,k.f=ie,x.f=se,V.f=y.f=de,_.f=pe,c&&(q(U.prototype,"description",{configurable:!0,get:function(){return H(this).description}}),i||B(G,"propertyIsEnumerable",ue,{unsafe:!0}))),u||(P.f=function(e){return re(E(e),e)}),o({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:U}),F(N(ee),(function(e){O(e)})),o({target:"Symbol",stat:!0,forced:!l},{"for":function(e){var t=String(e);if(d(J,t))return J[t];var n=U(t);return J[t]=n,Z[n]=t,n},keyFor:function(e){if(!ae(e))throw TypeError(e+" is not a symbol");if(d(Z,e))return Z[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),o({target:"Object",stat:!0,forced:!l,sham:!c},{create:le,defineProperty:ie,defineProperties:ce,getOwnPropertyDescriptor:se}),o({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:de,getOwnPropertySymbols:pe}),o({target:"Object",stat:!0,forced:s((function(){_.f(1)}))},{getOwnPropertySymbols:function(e){return _.f(h(e))}}),K)&&o({target:"JSON",stat:!0,forced:!l||s((function(){var e=U();return"[null]"!=K([e])||"{}"!=K({a:e})||"{}"!=K(Object(e))}))},{stringify:function(e,t,n){for(var o,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(o=t,(f(t)||e!==undefined)&&!ae(e))return p(t)||(t=function(e,t){if("function"==typeof o&&(t=o.call(this,e,t)),!ae(t))return t}),r[1]=t,K.apply(null,r)}});U.prototype[j]||L(U.prototype,j,U.prototype.valueOf),M(U,"Symbol"),T[D]=!0},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(5),i=n(15),c=n(6),l=n(13).f,u=n(122),s=a.Symbol;if(r&&"function"==typeof s&&(!("description"in s.prototype)||s().description!==undefined)){var d={},p=function(){var e=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]),t=this instanceof p?new s(e):e===undefined?s():s(e);return""===e&&(d[t]=!0),t};u(p,s);var f=p.prototype=s.prototype;f.constructor=p;var m=f.toString,h="Symbol(test)"==String(s("test")),C=/^Symbol\((.*)\)[^)]+$/;l(f,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=m.call(e);if(i(d,e))return"";var n=h?t.slice(7,-1):t.replace(C,"$1");return""===n?undefined:n}}),o({global:!0,forced:!0},{Symbol:p})}},function(e,t,n){"use strict";n(25)("asyncIterator")},function(e,t,n){"use strict";n(25)("hasInstance")},function(e,t,n){"use strict";n(25)("isConcatSpreadable")},function(e,t,n){"use strict";n(25)("iterator")},function(e,t,n){"use strict";n(25)("match")},function(e,t,n){"use strict";n(25)("replace")},function(e,t,n){"use strict";n(25)("search")},function(e,t,n){"use strict";n(25)("species")},function(e,t,n){"use strict";n(25)("split")},function(e,t,n){"use strict";n(25)("toPrimitive")},function(e,t,n){"use strict";n(25)("toStringTag")},function(e,t,n){"use strict";n(25)("unscopables")},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(52),i=n(6),c=n(14),l=n(10),u=n(49),s=n(63),d=n(64),p=n(11),f=n(96),m=p("isConcatSpreadable"),h=9007199254740991,C="Maximum allowed index exceeded",g=f>=51||!r((function(){var e=[];return e[m]=!1,e.concat()[0]!==e})),b=d("concat"),v=function(e){if(!i(e))return!1;var t=e[m];return t!==undefined?!!t:a(e)};o({target:"Array",proto:!0,forced:!g||!b},{concat:function(e){var t,n,o,r,a,i=c(this),d=s(i,0),p=0;for(t=-1,o=arguments.length;th)throw TypeError(C);for(n=0;n=h)throw TypeError(C);u(d,p++,a)}return d.length=p,d}})},function(e,t,n){"use strict";var o=n(0),r=n(130),a=n(44);o({target:"Array",proto:!0},{copyWithin:r}),a("copyWithin")},function(e,t,n){"use strict";var o=n(0),r=n(16).every;o({target:"Array",proto:!0,forced:n(39)("every")},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(97),a=n(44);o({target:"Array",proto:!0},{fill:r}),a("fill")},function(e,t,n){"use strict";var o=n(0),r=n(16).filter,a=n(4),i=n(64)("filter"),c=i&&!a((function(){[].filter.call({length:-1,0:1},(function(e){throw e}))}));o({target:"Array",proto:!0,forced:!i||!c},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(16).find,a=n(44),i=!0;"find"in[]&&Array(1).find((function(){i=!1})),o({target:"Array",proto:!0,forced:i},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("find")},function(e,t,n){"use strict";var o=n(0),r=n(16).findIndex,a=n(44),i=!0;"findIndex"in[]&&Array(1).findIndex((function(){i=!1})),o({target:"Array",proto:!0,forced:i},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("findIndex")},function(e,t,n){"use strict";var o=n(0),r=n(131),a=n(14),i=n(10),c=n(30),l=n(63);o({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:undefined,t=a(this),n=i(t.length),o=l(t,0);return o.length=r(o,t,t,n,0,e===undefined?1:c(e)),o}})},function(e,t,n){"use strict";var o=n(0),r=n(131),a=n(14),i=n(10),c=n(31),l=n(63);o({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),o=i(n.length);return c(e),(t=l(n,0)).length=r(t,n,n,o,0,1,e,arguments.length>1?arguments[1]:undefined),t}})},function(e,t,n){"use strict";var o=n(0),r=n(196);o({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},function(e,t,n){"use strict";var o=n(16).forEach,r=n(39);e.exports=r("forEach")?function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}:[].forEach},function(e,t,n){"use strict";var o=n(0),r=n(198);o({target:"Array",stat:!0,forced:!n(75)((function(e){Array.from(e)}))},{from:r})},function(e,t,n){"use strict";var o=n(48),r=n(14),a=n(132),i=n(98),c=n(10),l=n(49),u=n(99);e.exports=function(e){var t,n,s,d,p,f=r(e),m="function"==typeof this?this:Array,h=arguments.length,C=h>1?arguments[1]:undefined,g=C!==undefined,b=0,v=u(f);if(g&&(C=o(C,h>2?arguments[2]:undefined,2)),v==undefined||m==Array&&i(v))for(n=new m(t=c(f.length));t>b;b++)l(n,b,g?C(f[b],b):f[b]);else for(p=(d=v.call(f)).next,n=new m;!(s=p.call(d)).done;b++)l(n,b,g?a(d,C,[s.value,b],!0):s.value);return n.length=b,n}},function(e,t,n){"use strict";var o=n(0),r=n(60).includes,a=n(44);o({target:"Array",proto:!0},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}}),a("includes")},function(e,t,n){"use strict";var o=n(0),r=n(60).indexOf,a=n(39),i=[].indexOf,c=!!i&&1/[1].indexOf(1,-0)<0,l=a("indexOf");o({target:"Array",proto:!0,forced:c||l},{indexOf:function(e){return c?i.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";n(0)({target:"Array",stat:!0},{isArray:n(52)})},function(e,t,n){"use strict";var o=n(134).IteratorPrototype,r=n(42),a=n(46),i=n(43),c=n(65),l=function(){return this};e.exports=function(e,t,n){var u=t+" Iterator";return e.prototype=r(o,{next:a(1,n)}),i(e,u,!1,!0),c[u]=l,e}},function(e,t,n){"use strict";var o=n(0),r=n(57),a=n(23),i=n(39),c=[].join,l=r!=Object,u=i("join",",");o({target:"Array",proto:!0,forced:l||u},{join:function(e){return c.call(a(this),e===undefined?",":e)}})},function(e,t,n){"use strict";var o=n(0),r=n(136);o({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},function(e,t,n){"use strict";var o=n(0),r=n(16).map,a=n(4),i=n(64)("map"),c=i&&!a((function(){[].map.call({length:-1,0:1},(function(e){throw e}))}));o({target:"Array",proto:!0,forced:!i||!c},{map:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(49);o({target:"Array",stat:!0,forced:r((function(){function e(){}return!(Array.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)a(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var o=n(0),r=n(76).left;o({target:"Array",proto:!0,forced:n(39)("reduce")},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(76).right;o({target:"Array",proto:!0,forced:n(39)("reduceRight")},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(52),i=n(41),c=n(10),l=n(23),u=n(49),s=n(64),d=n(11)("species"),p=[].slice,f=Math.max;o({target:"Array",proto:!0,forced:!s("slice")},{slice:function(e,t){var n,o,s,m=l(this),h=c(m.length),C=i(e,h),g=i(t===undefined?h:t,h);if(a(m)&&("function"!=typeof(n=m.constructor)||n!==Array&&!a(n.prototype)?r(n)&&null===(n=n[d])&&(n=undefined):n=undefined,n===Array||n===undefined))return p.call(m,C,g);for(o=new(n===undefined?Array:n)(f(g-C,0)),s=0;C1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(31),a=n(14),i=n(4),c=n(39),l=[],u=l.sort,s=i((function(){l.sort(undefined)})),d=i((function(){l.sort(null)})),p=c("sort");o({target:"Array",proto:!0,forced:s||!d||p},{sort:function(e){return e===undefined?u.call(a(this)):u.call(a(this),r(e))}})},function(e,t,n){"use strict";n(54)("Array")},function(e,t,n){"use strict";var o=n(0),r=n(41),a=n(30),i=n(10),c=n(14),l=n(63),u=n(49),s=n(64),d=Math.max,p=Math.min,f=9007199254740991,m="Maximum allowed length exceeded";o({target:"Array",proto:!0,forced:!s("splice")},{splice:function(e,t){var n,o,s,h,C,g,b=c(this),v=i(b.length),N=r(e,v),V=arguments.length;if(0===V?n=o=0:1===V?(n=0,o=v-N):(n=V-2,o=p(d(a(t),0),v-N)),v+n-o>f)throw TypeError(m);for(s=l(b,o),h=0;hv-o+n;h--)delete b[h-1]}else if(n>o)for(h=v-o;h>N;h--)g=h+n-1,(C=h+o-1)in b?b[g]=b[C]:delete b[g];for(h=0;h>1,h=23===t?r(2,-24)-r(2,-77):0,C=e<0||0===e&&1/e<0?1:0,g=0;for((e=o(e))!=e||e===1/0?(u=e!=e?1:0,l=f):(l=a(i(e)/c),e*(s=r(2,-l))<1&&(l--,s*=2),(e+=l+m>=1?h/s:h*r(2,1-m))*s>=2&&(l++,s/=2),l+m>=f?(u=0,l=f):l+m>=1?(u=(e*s-1)*r(2,t),l+=m):(u=e*r(2,m-1)*r(2,t),l=0));t>=8;d[g++]=255&u,u/=256,t-=8);for(l=l<0;d[g++]=255&l,l/=256,p-=8);return d[--g]|=128*C,d},unpack:function(e,t){var n,o=e.length,a=8*o-t-1,i=(1<>1,l=a-7,u=o-1,s=e[u--],d=127&s;for(s>>=7;l>0;d=256*d+e[u],u--,l-=8);for(n=d&(1<<-l)-1,d>>=-l,l+=t;l>0;n=256*n+e[u],u--,l-=8);if(0===d)d=1-c;else{if(d===i)return n?NaN:s?-1/0:1/0;n+=r(2,t),d-=c}return(s?-1:1)*n*r(2,d-t)}}},function(e,t,n){"use strict";var o=n(0),r=n(7);o({target:"ArrayBuffer",stat:!0,forced:!r.NATIVE_ARRAY_BUFFER_VIEWS},{isView:r.isView})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(77),i=n(8),c=n(41),l=n(10),u=n(45),s=a.ArrayBuffer,d=a.DataView,p=s.prototype.slice;o({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:r((function(){return!new s(2).slice(1,undefined).byteLength}))},{slice:function(e,t){if(p!==undefined&&t===undefined)return p.call(i(this),e);for(var n=i(this).byteLength,o=c(e,n),r=c(t===undefined?n:t,n),a=new(u(this,s))(l(r-o)),f=new d(this),m=new d(a),h=0;o9999?"+":"";return n+r(a(e),n?6:4,0)+"-"+r(this.getUTCMonth()+1,2,0)+"-"+r(this.getUTCDate(),2,0)+"T"+r(this.getUTCHours(),2,0)+":"+r(this.getUTCMinutes(),2,0)+":"+r(this.getUTCSeconds(),2,0)+"."+r(t,3,0)+"Z"}:l},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(14),i=n(33);o({target:"Date",proto:!0,forced:r((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=a(this),n=i(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){"use strict";var o=n(24),r=n(226),a=n(11)("toPrimitive"),i=Date.prototype;a in i||o(i,a,r)},function(e,t,n){"use strict";var o=n(8),r=n(33);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return r(o(this),"number"!==e)}},function(e,t,n){"use strict";var o=n(22),r=Date.prototype,a="Invalid Date",i=r.toString,c=r.getTime;new Date(NaN)+""!=a&&o(r,"toString",(function(){var e=c.call(this);return e==e?i.call(this):a}))},function(e,t,n){"use strict";n(0)({target:"Function",proto:!0},{bind:n(138)})},function(e,t,n){"use strict";var o=n(6),r=n(13),a=n(36),i=n(11)("hasInstance"),c=Function.prototype;i in c||r.f(c,i,{value:function(e){if("function"!=typeof this||!o(e))return!1;if(!o(this.prototype))return e instanceof this;for(;e=a(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){"use strict";var o=n(9),r=n(13).f,a=Function.prototype,i=a.toString,c=/^\s*function ([^ (]*)/;!o||"name"in a||r(a,"name",{configurable:!0,get:function(){try{return i.call(this).match(c)[1]}catch(e){return""}}})},function(e,t,n){"use strict";var o=n(5);n(43)(o.JSON,"JSON",!0)},function(e,t,n){"use strict";var o=n(78),r=n(139);e.exports=o("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},function(e,t,n){"use strict";var o=n(0),r=n(140),a=Math.acosh,i=Math.log,c=Math.sqrt,l=Math.LN2;o({target:"Math",stat:!0,forced:!a||710!=Math.floor(a(Number.MAX_VALUE))||a(Infinity)!=Infinity},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?i(e)+l:r(e-1+c(e-1)*c(e+1))}})},function(e,t,n){"use strict";var o=n(0),r=Math.asinh,a=Math.log,i=Math.sqrt;o({target:"Math",stat:!0,forced:!(r&&1/r(0)>0)},{asinh:function c(e){return isFinite(e=+e)&&0!=e?e<0?-c(-e):a(e+i(e*e+1)):e}})},function(e,t,n){"use strict";var o=n(0),r=Math.atanh,a=Math.log;o({target:"Math",stat:!0,forced:!(r&&1/r(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:a((1+e)/(1-e))/2}})},function(e,t,n){"use strict";var o=n(0),r=n(105),a=Math.abs,i=Math.pow;o({target:"Math",stat:!0},{cbrt:function(e){return r(e=+e)*i(a(e),1/3)}})},function(e,t,n){"use strict";var o=n(0),r=Math.floor,a=Math.log,i=Math.LOG2E;o({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-r(a(e+.5)*i):32}})},function(e,t,n){"use strict";var o=n(0),r=n(80),a=Math.cosh,i=Math.abs,c=Math.E;o({target:"Math",stat:!0,forced:!a||a(710)===Infinity},{cosh:function(e){var t=r(i(e)-1)+1;return(t+1/(t*c*c))*(c/2)}})},function(e,t,n){"use strict";var o=n(0),r=n(80);o({target:"Math",stat:!0,forced:r!=Math.expm1},{expm1:r})},function(e,t,n){"use strict";n(0)({target:"Math",stat:!0},{fround:n(241)})},function(e,t,n){"use strict";var o=n(105),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),u=a(2,-126),s=function(e){return e+1/i-1/i};e.exports=Math.fround||function(e){var t,n,a=r(e),d=o(e);return al||n!=n?d*Infinity:d*n}},function(e,t,n){"use strict";var o=n(0),r=Math.hypot,a=Math.abs,i=Math.sqrt;o({target:"Math",stat:!0,forced:!!r&&r(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,o,r=0,c=0,l=arguments.length,u=0;c0?(o=n/u)*o:n;return u===Infinity?Infinity:u*i(r)}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=Math.imul;o({target:"Math",stat:!0,forced:r((function(){return-5!=a(4294967295,5)||2!=a.length}))},{imul:function(e,t){var n=+e,o=+t,r=65535&n,a=65535&o;return 0|r*a+((65535&n>>>16)*a+r*(65535&o>>>16)<<16>>>0)}})},function(e,t,n){"use strict";var o=n(0),r=Math.log,a=Math.LOG10E;o({target:"Math",stat:!0},{log10:function(e){return r(e)*a}})},function(e,t,n){"use strict";n(0)({target:"Math",stat:!0},{log1p:n(140)})},function(e,t,n){"use strict";var o=n(0),r=Math.log,a=Math.LN2;o({target:"Math",stat:!0},{log2:function(e){return r(e)/a}})},function(e,t,n){"use strict";n(0)({target:"Math",stat:!0},{sign:n(105)})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(80),i=Math.abs,c=Math.exp,l=Math.E;o({target:"Math",stat:!0,forced:r((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return i(e=+e)<1?(a(e)-a(-e))/2:(c(e-1)-c(-e-1))*(l/2)}})},function(e,t,n){"use strict";var o=n(0),r=n(80),a=Math.exp;o({target:"Math",stat:!0},{tanh:function(e){var t=r(e=+e),n=r(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(a(e)+a(-e))}})},function(e,t,n){"use strict";n(43)(Math,"Math",!0)},function(e,t,n){"use strict";var o=n(0),r=Math.ceil,a=Math.floor;o({target:"Math",stat:!0},{trunc:function(e){return(e>0?a:r)(e)}})},function(e,t,n){"use strict";var o=n(9),r=n(5),a=n(61),i=n(22),c=n(15),l=n(32),u=n(79),s=n(33),d=n(4),p=n(42),f=n(47).f,m=n(18).f,h=n(13).f,C=n(56).trim,g="Number",b=r[g],v=b.prototype,N=l(p(v))==g,V=function(e){var t,n,o,r,a,i,c,l,u=s(e,!1);if("string"==typeof u&&u.length>2)if(43===(t=(u=C(u)).charCodeAt(0))||45===t){if(88===(n=u.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:o=2,r=49;break;case 79:case 111:o=8,r=55;break;default:return+u}for(i=(a=u.slice(2)).length,c=0;cr)return NaN;return parseInt(a,o)}return+u};if(a(g,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var y,_=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof _&&(N?d((function(){v.valueOf.call(n)})):l(n)!=g)?u(new b(V(t)),n,_):V(t)},x=o?f(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;x.length>k;k++)c(b,y=x[k])&&!c(_,y)&&h(_,y,m(b,y));_.prototype=v,v.constructor=_,i(r,g,_)}},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{isFinite:n(255)})},function(e,t,n){"use strict";var o=n(5).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{isInteger:n(141)})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},function(e,t,n){"use strict";var o=n(0),r=n(141),a=Math.abs;o({target:"Number",stat:!0},{isSafeInteger:function(e){return r(e)&&a(e)<=9007199254740991}})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){"use strict";n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){"use strict";var o=n(0),r=n(262);o({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},function(e,t,n){"use strict";var o=n(5),r=n(56).trim,a=n(81),i=o.parseFloat,c=1/i(a+"-0")!=-Infinity;e.exports=c?function(e){var t=r(String(e)),n=i(t);return 0===n&&"-"==t.charAt(0)?-0:n}:i},function(e,t,n){"use strict";var o=n(0),r=n(142);o({target:"Number",stat:!0,forced:Number.parseInt!=r},{parseInt:r})},function(e,t,n){"use strict";var o=n(0),r=n(30),a=n(265),i=n(104),c=n(4),l=1..toFixed,u=Math.floor,s=function p(e,t,n){return 0===t?n:t%2==1?p(e,t-1,n*e):p(e*e,t/2,n)},d=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t};o({target:"Number",proto:!0,forced:l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){l.call({})}))},{toFixed:function(e){var t,n,o,c,l=a(this),p=r(e),f=[0,0,0,0,0,0],m="",h="0",C=function(e,t){for(var n=-1,o=t;++n<6;)o+=e*f[n],f[n]=o%1e7,o=u(o/1e7)},g=function(e){for(var t=6,n=0;--t>=0;)n+=f[t],f[t]=u(n/e),n=n%e*1e7},b=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==f[e]){var n=String(f[e]);t=""===t?n:t+i.call("0",7-n.length)+n}return t};if(p<0||p>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(m="-",l=-l),l>1e-21)if(n=(t=d(l*s(2,69,1))-69)<0?l*s(2,-t,1):l/s(2,t,1),n*=4503599627370496,(t=52-t)>0){for(C(0,n),o=p;o>=7;)C(1e7,0),o-=7;for(C(s(10,o,1),0),o=t-1;o>=23;)g(1<<23),o-=23;g(1<0?m+((c=h.length)<=p?"0."+i.call("0",p-c)+h:h.slice(0,c-p)+"."+h.slice(c-p)):m+h}})},function(e,t,n){"use strict";var o=n(32);e.exports=function(e){if("number"!=typeof e&&"Number"!=o(e))throw TypeError("Incorrect invocation");return+e}},function(e,t,n){"use strict";var o=n(0),r=n(267);o({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},function(e,t,n){"use strict";var o=n(9),r=n(4),a=n(62),i=n(94),c=n(71),l=n(14),u=n(57),s=Object.assign,d=Object.defineProperty;e.exports=!s||r((function(){if(o&&1!==s({b:1},s(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(e){t[e]=e})),7!=s({},e)[n]||"abcdefghijklmnopqrst"!=a(s({},t)).join("")}))?function(e,t){for(var n=l(e),r=arguments.length,s=1,d=i.f,p=c.f;r>s;)for(var f,m=u(arguments[s++]),h=d?a(m).concat(d(m)):a(m),C=h.length,g=0;C>g;)f=h[g++],o&&!p.call(m,f)||(n[f]=m[f]);return n}:s},function(e,t,n){"use strict";n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(42)})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(31),l=n(13);r&&o({target:"Object",proto:!0,forced:a},{__defineGetter__:function(e,t){l.f(i(this),e,{get:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var o=n(0),r=n(9);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperties:n(126)})},function(e,t,n){"use strict";var o=n(0),r=n(9);o({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperty:n(13).f})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(31),l=n(13);r&&o({target:"Object",proto:!0,forced:a},{__defineSetter__:function(e,t){l.f(i(this),e,{set:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var o=n(0),r=n(143).entries;o({target:"Object",stat:!0},{entries:function(e){return r(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(67),a=n(4),i=n(6),c=n(50).onFreeze,l=Object.freeze;o({target:"Object",stat:!0,forced:a((function(){l(1)})),sham:!r},{freeze:function(e){return l&&i(e)?l(c(e)):e}})},function(e,t,n){"use strict";var o=n(0),r=n(68),a=n(49);o({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,(function(e,n){a(t,e,n)}),undefined,!0),t}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(23),i=n(18).f,c=n(9),l=r((function(){i(1)}));o({target:"Object",stat:!0,forced:!c||l,sham:!c},{getOwnPropertyDescriptor:function(e,t){return i(a(e),t)}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(92),i=n(23),c=n(18),l=n(49);o({target:"Object",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(e){for(var t,n,o=i(e),r=c.f,u=a(o),s={},d=0;u.length>d;)(n=r(o,t=u[d++]))!==undefined&&l(s,t,n);return s}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(128).f;o({target:"Object",stat:!0,forced:r((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:a})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(14),i=n(36),c=n(102);o({target:"Object",stat:!0,forced:r((function(){i(1)})),sham:!c},{getPrototypeOf:function(e){return i(a(e))}})},function(e,t,n){"use strict";n(0)({target:"Object",stat:!0},{is:n(144)})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(6),i=Object.isExtensible;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isExtensible:function(e){return!!a(e)&&(!i||i(e))}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(6),i=Object.isFrozen;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isFrozen:function(e){return!a(e)||!!i&&i(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(4),a=n(6),i=Object.isSealed;o({target:"Object",stat:!0,forced:r((function(){i(1)}))},{isSealed:function(e){return!a(e)||!!i&&i(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(14),a=n(62);o({target:"Object",stat:!0,forced:n(4)((function(){a(1)}))},{keys:function(e){return a(r(e))}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(33),l=n(36),u=n(18).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupGetter__:function(e){var t,n=i(this),o=c(e,!0);do{if(t=u(n,o))return t.get}while(n=l(n))}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(82),i=n(14),c=n(33),l=n(36),u=n(18).f;r&&o({target:"Object",proto:!0,forced:a},{__lookupSetter__:function(e){var t,n=i(this),o=c(e,!0);do{if(t=u(n,o))return t.set}while(n=l(n))}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(50).onFreeze,i=n(67),c=n(4),l=Object.preventExtensions;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{preventExtensions:function(e){return l&&r(e)?l(a(e)):e}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(50).onFreeze,i=n(67),c=n(4),l=Object.seal;o({target:"Object",stat:!0,forced:c((function(){l(1)})),sham:!i},{seal:function(e){return l&&r(e)?l(a(e)):e}})},function(e,t,n){"use strict";n(0)({target:"Object",stat:!0},{setPrototypeOf:n(53)})},function(e,t,n){"use strict";var o=n(100),r=n(22),a=n(291);o||r(Object.prototype,"toString",a,{unsafe:!0})},function(e,t,n){"use strict";var o=n(100),r=n(74);e.exports=o?{}.toString:function(){return"[object "+r(this)+"]"}},function(e,t,n){"use strict";var o=n(0),r=n(143).values;o({target:"Object",stat:!0},{values:function(e){return r(e)}})},function(e,t,n){"use strict";var o=n(0),r=n(142);o({global:!0,forced:parseInt!=r},{parseInt:r})},function(e,t,n){"use strict";var o,r,a,i,c=n(0),l=n(38),u=n(5),s=n(35),d=n(145),p=n(22),f=n(66),m=n(43),h=n(54),C=n(6),g=n(31),b=n(55),v=n(32),N=n(90),V=n(68),y=n(75),_=n(45),x=n(106).set,k=n(147),w=n(148),L=n(295),B=n(149),S=n(296),I=n(34),T=n(61),A=n(11),E=n(96),P=A("species"),O="Promise",M=I.get,R=I.set,F=I.getterFor(O),D=d,j=u.TypeError,z=u.document,H=u.process,G=s("fetch"),U=B.f,K=U,Y="process"==v(H),q=!!(z&&z.createEvent&&u.dispatchEvent),W=0,$=T(O,(function(){if(!(N(D)!==String(D))){if(66===E)return!0;if(!Y&&"function"!=typeof PromiseRejectionEvent)return!0}if(l&&!D.prototype["finally"])return!0;if(E>=51&&/native code/.test(D))return!1;var e=D.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[P]=t,!(e.then((function(){}))instanceof t)})),Q=$||!y((function(e){D.all(e)["catch"]((function(){}))})),X=function(e){var t;return!(!C(e)||"function"!=typeof(t=e.then))&&t},J=function(e,t,n){if(!t.notified){t.notified=!0;var o=t.reactions;k((function(){for(var r=t.value,a=1==t.state,i=0;o.length>i;){var c,l,u,s=o[i++],d=a?s.ok:s.fail,p=s.resolve,f=s.reject,m=s.domain;try{d?(a||(2===t.rejection&&ne(e,t),t.rejection=1),!0===d?c=r:(m&&m.enter(),c=d(r),m&&(m.exit(),u=!0)),c===s.promise?f(j("Promise-chain cycle")):(l=X(c))?l.call(c,p,f):p(c)):f(r)}catch(h){m&&!u&&m.exit(),f(h)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&ee(e,t)}))}},Z=function(e,t,n){var o,r;q?((o=z.createEvent("Event")).promise=t,o.reason=n,o.initEvent(e,!1,!0),u.dispatchEvent(o)):o={promise:t,reason:n},(r=u["on"+e])?r(o):"unhandledrejection"===e&&L("Unhandled promise rejection",n)},ee=function(e,t){x.call(u,(function(){var n,o=t.value;if(te(t)&&(n=S((function(){Y?H.emit("unhandledRejection",o,e):Z("unhandledrejection",e,o)})),t.rejection=Y||te(t)?2:1,n.error))throw n.value}))},te=function(e){return 1!==e.rejection&&!e.parent},ne=function(e,t){x.call(u,(function(){Y?H.emit("rejectionHandled",e):Z("rejectionhandled",e,t.value)}))},oe=function(e,t,n,o){return function(r){e(t,n,r,o)}},re=function(e,t,n,o){t.done||(t.done=!0,o&&(t=o),t.value=n,t.state=2,J(e,t,!0))},ae=function ie(e,t,n,o){if(!t.done){t.done=!0,o&&(t=o);try{if(e===n)throw j("Promise can't be resolved itself");var r=X(n);r?k((function(){var o={done:!1};try{r.call(n,oe(ie,e,o,t),oe(re,e,o,t))}catch(a){re(e,o,a,t)}})):(t.value=n,t.state=1,J(e,t,!1))}catch(a){re(e,{done:!1},a,t)}}};$&&(D=function(e){b(this,D,O),g(e),o.call(this);var t=M(this);try{e(oe(ae,this,t),oe(re,this,t))}catch(n){re(this,t,n)}},(o=function(e){R(this,{type:O,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:W,value:undefined})}).prototype=f(D.prototype,{then:function(e,t){var n=F(this),o=U(_(this,D));return o.ok="function"!=typeof e||e,o.fail="function"==typeof t&&t,o.domain=Y?H.domain:undefined,n.parent=!0,n.reactions.push(o),n.state!=W&&J(this,n,!1),o.promise},"catch":function(e){return this.then(undefined,e)}}),r=function(){var e=new o,t=M(e);this.promise=e,this.resolve=oe(ae,e,t),this.reject=oe(re,e,t)},B.f=U=function(e){return e===D||e===a?new r(e):K(e)},l||"function"!=typeof d||(i=d.prototype.then,p(d.prototype,"then",(function(e,t){var n=this;return new D((function(e,t){i.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof G&&c({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return w(D,G.apply(u,arguments))}}))),c({global:!0,wrap:!0,forced:$},{Promise:D}),m(D,O,!1,!0),h(O),a=s(O),c({target:O,stat:!0,forced:$},{reject:function(e){var t=U(this);return t.reject.call(undefined,e),t.promise}}),c({target:O,stat:!0,forced:l||$},{resolve:function(e){return w(l&&this===a?D:this,e)}}),c({target:O,stat:!0,forced:Q},{all:function(e){var t=this,n=U(t),o=n.resolve,r=n.reject,a=S((function(){var n=g(t.resolve),a=[],i=0,c=1;V(e,(function(e){var l=i++,u=!1;a.push(undefined),c++,n.call(t,e).then((function(e){u||(u=!0,a[l]=e,--c||o(a))}),r)})),--c||o(a)}));return a.error&&r(a.value),n.promise},race:function(e){var t=this,n=U(t),o=n.reject,r=S((function(){var r=g(t.resolve);V(e,(function(e){r.call(t,e).then(n.resolve,o)}))}));return r.error&&o(r.value),n.promise}})},function(e,t,n){"use strict";var o=n(5);e.exports=function(e,t){var n=o.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},function(e,t,n){"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},function(e,t,n){"use strict";var o=n(0),r=n(38),a=n(145),i=n(4),c=n(35),l=n(45),u=n(148),s=n(22);o({target:"Promise",proto:!0,real:!0,forced:!!a&&i((function(){a.prototype["finally"].call({then:function(){}},(function(){}))}))},{"finally":function(e){var t=l(this,c("Promise")),n="function"==typeof e;return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),r||"function"!=typeof a||a.prototype["finally"]||s(a.prototype,"finally",c("Promise").prototype["finally"])},function(e,t,n){"use strict";var o=n(0),r=n(35),a=n(31),i=n(8),c=n(4),l=r("Reflect","apply"),u=Function.apply;o({target:"Reflect",stat:!0,forced:!c((function(){l((function(){}))}))},{apply:function(e,t,n){return a(e),i(n),l?l(e,t,n):u.call(e,t,n)}})},function(e,t,n){"use strict";var o=n(0),r=n(35),a=n(31),i=n(8),c=n(6),l=n(42),u=n(138),s=n(4),d=r("Reflect","construct"),p=s((function(){function e(){}return!(d((function(){}),[],e)instanceof e)})),f=!s((function(){d((function(){}))})),m=p||f;o({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(e,t){a(e),i(t);var n=arguments.length<3?e:a(arguments[2]);if(f&&!p)return d(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var o=[null];return o.push.apply(o,t),new(u.apply(e,o))}var r=n.prototype,s=l(c(r)?r:Object.prototype),m=Function.apply.call(e,s,t);return c(m)?m:s}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(8),i=n(33),c=n(13);o({target:"Reflect",stat:!0,forced:n(4)((function(){Reflect.defineProperty(c.f({},1,{value:1}),1,{value:2})})),sham:!r},{defineProperty:function(e,t,n){a(e);var o=i(t,!0);a(n);try{return c.f(e,o,n),!0}catch(r){return!1}}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(18).f;o({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=a(r(e),t);return!(n&&!n.configurable)&&delete e[t]}})},function(e,t,n){"use strict";var o=n(0),r=n(6),a=n(8),i=n(15),c=n(18),l=n(36);o({target:"Reflect",stat:!0},{get:function u(e,t){var n,o,s=arguments.length<3?e:arguments[2];return a(e)===s?e[t]:(n=c.f(e,t))?i(n,"value")?n.value:n.get===undefined?undefined:n.get.call(s):r(o=l(e))?u(o,t,s):void 0}})},function(e,t,n){"use strict";var o=n(0),r=n(9),a=n(8),i=n(18);o({target:"Reflect",stat:!0,sham:!r},{getOwnPropertyDescriptor:function(e,t){return i.f(a(e),t)}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(36);o({target:"Reflect",stat:!0,sham:!n(102)},{getPrototypeOf:function(e){return a(r(e))}})},function(e,t,n){"use strict";n(0)({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=Object.isExtensible;o({target:"Reflect",stat:!0},{isExtensible:function(e){return r(e),!a||a(e)}})},function(e,t,n){"use strict";n(0)({target:"Reflect",stat:!0},{ownKeys:n(92)})},function(e,t,n){"use strict";var o=n(0),r=n(35),a=n(8);o({target:"Reflect",stat:!0,sham:!n(67)},{preventExtensions:function(e){a(e);try{var t=r("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(6),i=n(15),c=n(4),l=n(13),u=n(18),s=n(36),d=n(46);o({target:"Reflect",stat:!0,forced:c((function(){var e=l.f({},"a",{configurable:!0});return!1!==Reflect.set(s(e),"a",1,e)}))},{set:function p(e,t,n){var o,c,f=arguments.length<4?e:arguments[3],m=u.f(r(e),t);if(!m){if(a(c=s(e)))return p(c,t,n,f);m=d(0)}if(i(m,"value")){if(!1===m.writable||!a(f))return!1;if(o=u.f(f,t)){if(o.get||o.set||!1===o.writable)return!1;o.value=n,l.f(f,t,o)}else l.f(f,t,d(0,n));return!0}return m.set!==undefined&&(m.set.call(f,n),!0)}})},function(e,t,n){"use strict";var o=n(0),r=n(8),a=n(135),i=n(53);i&&o({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){r(e),a(t);try{return i(e,t),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var o=n(9),r=n(5),a=n(61),i=n(79),c=n(13).f,l=n(47).f,u=n(107),s=n(83),d=n(22),p=n(4),f=n(54),m=n(11)("match"),h=r.RegExp,C=h.prototype,g=/a/g,b=/a/g,v=new h(g)!==g;if(o&&a("RegExp",!v||p((function(){return b[m]=!1,h(g)!=g||h(b)==b||"/a/i"!=h(g,"i")})))){for(var N=function(e,t){var n=this instanceof N,o=u(e),r=t===undefined;return!n&&o&&e.constructor===N&&r?e:i(v?new h(o&&!r?e.source:e,t):h((o=e instanceof N)?e.source:e,o&&r?s.call(e):t),n?this:C,N)},V=function(e){e in N||c(N,e,{configurable:!0,get:function(){return h[e]},set:function(t){h[e]=t}})},y=l(h),_=0;y.length>_;)V(y[_++]);C.constructor=N,N.prototype=C,d(r,"RegExp",N)}f("RegExp")},function(e,t,n){"use strict";var o=n(0),r=n(84);o({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},function(e,t,n){"use strict";var o=n(9),r=n(13),a=n(83);o&&"g"!=/./g.flags&&r.f(RegExp.prototype,"flags",{configurable:!0,get:a})},function(e,t,n){"use strict";var o=n(22),r=n(8),a=n(4),i=n(83),c=RegExp.prototype,l=c.toString,u=a((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),s="toString"!=l.name;(u||s)&&o(RegExp.prototype,"toString",(function(){var e=r(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(n===undefined&&e instanceof RegExp&&!("flags"in c)?i.call(e):n)}),{unsafe:!0})},function(e,t,n){"use strict";var o=n(78),r=n(139);e.exports=o("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),r)},function(e,t,n){"use strict";var o=n(0),r=n(108).codeAt;o({target:"String",proto:!0},{codePointAt:function(e){return r(this,e)}})},function(e,t,n){"use strict";var o,r=n(0),a=n(18).f,i=n(10),c=n(109),l=n(21),u=n(110),s=n(38),d="".endsWith,p=Math.min,f=u("endsWith");r({target:"String",proto:!0,forced:!!(s||f||(o=a(String.prototype,"endsWith"),!o||o.writable))&&!f},{endsWith:function(e){var t=String(l(this));c(e);var n=arguments.length>1?arguments[1]:undefined,o=i(t.length),r=n===undefined?o:p(i(n),o),a=String(e);return d?d.call(t,a,r):t.slice(r-a.length,r)===a}})},function(e,t,n){"use strict";var o=n(0),r=n(41),a=String.fromCharCode,i=String.fromCodePoint;o({target:"String",stat:!0,forced:!!i&&1!=i.length},{fromCodePoint:function(e){for(var t,n=[],o=arguments.length,i=0;o>i;){if(t=+arguments[i++],r(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?a(t):a(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){"use strict";var o=n(0),r=n(109),a=n(21);o({target:"String",proto:!0,forced:!n(110)("includes")},{includes:function(e){return!!~String(a(this)).indexOf(r(e),arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(108).charAt,r=n(34),a=n(101),i=r.set,c=r.getterFor("String Iterator");a(String,"String",(function(e){i(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=c(this),n=t.string,r=t.index;return r>=n.length?{value:undefined,done:!0}:(e=o(n,r),t.index+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var o=n(85),r=n(8),a=n(10),i=n(21),c=n(111),l=n(86);o("match",1,(function(e,t,n){return[function(t){var n=i(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](String(n))},function(e){var o=n(t,e,this);if(o.done)return o.value;var i=r(e),u=String(this);if(!i.global)return l(i,u);var s=i.unicode;i.lastIndex=0;for(var d,p=[],f=0;null!==(d=l(i,u));){var m=String(d[0]);p[f]=m,""===m&&(i.lastIndex=c(u,a(i.lastIndex),s)),f++}return 0===f?null:p}]}))},function(e,t,n){"use strict";var o=n(0),r=n(103).end;o({target:"String",proto:!0,forced:n(150)},{padEnd:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(103).start;o({target:"String",proto:!0,forced:n(150)},{padStart:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var o=n(0),r=n(23),a=n(10);o({target:"String",stat:!0},{raw:function(e){for(var t=r(e.raw),n=a(t.length),o=arguments.length,i=[],c=0;n>c;)i.push(String(t[c++])),c]*>)/g,h=/\$([$&'`]|\d\d?)/g;o("replace",2,(function(e,t,n){return[function(n,o){var r=l(this),a=n==undefined?undefined:n[e];return a!==undefined?a.call(n,r,o):t.call(String(r),n,o)},function(e,a){var l=n(t,e,this,a);if(l.done)return l.value;var f=r(e),m=String(this),h="function"==typeof a;h||(a=String(a));var C=f.global;if(C){var g=f.unicode;f.lastIndex=0}for(var b=[];;){var v=s(f,m);if(null===v)break;if(b.push(v),!C)break;""===String(v[0])&&(f.lastIndex=u(m,i(f.lastIndex),g))}for(var N,V="",y=0,_=0;_=y&&(V+=m.slice(y,k)+I,y=k+x.length)}return V+m.slice(y)}];function o(e,n,o,r,i,c){var l=o+e.length,u=r.length,s=h;return i!==undefined&&(i=a(i),s=m),t.call(c,s,(function(t,a){var c;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,o);case"'":return n.slice(l);case"<":c=i[a.slice(1,-1)];break;default:var s=+a;if(0===s)return t;if(s>u){var d=f(s/10);return 0===d?t:d<=u?r[d-1]===undefined?a.charAt(1):r[d-1]+a.charAt(1):t}c=r[s-1]}return c===undefined?"":c}))}}))},function(e,t,n){"use strict";var o=n(85),r=n(8),a=n(21),i=n(144),c=n(86);o("search",1,(function(e,t,n){return[function(t){var n=a(this),o=t==undefined?undefined:t[e];return o!==undefined?o.call(t,n):new RegExp(t)[e](String(n))},function(e){var o=n(t,e,this);if(o.done)return o.value;var a=r(e),l=String(this),u=a.lastIndex;i(u,0)||(a.lastIndex=0);var s=c(a,l);return i(a.lastIndex,u)||(a.lastIndex=u),null===s?-1:s.index}]}))},function(e,t,n){"use strict";var o=n(85),r=n(107),a=n(8),i=n(21),c=n(45),l=n(111),u=n(10),s=n(86),d=n(84),p=n(4),f=[].push,m=Math.min,h=!p((function(){return!RegExp(4294967295,"y")}));o("split",2,(function(e,t,n){var o;return o="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var o=String(i(this)),a=n===undefined?4294967295:n>>>0;if(0===a)return[];if(e===undefined)return[o];if(!r(e))return t.call(o,e,a);for(var c,l,u,s=[],p=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),m=0,h=new RegExp(e.source,p+"g");(c=d.call(h,o))&&!((l=h.lastIndex)>m&&(s.push(o.slice(m,c.index)),c.length>1&&c.index=a));)h.lastIndex===c.index&&h.lastIndex++;return m===o.length?!u&&h.test("")||s.push(""):s.push(o.slice(m)),s.length>a?s.slice(0,a):s}:"0".split(undefined,0).length?function(e,n){return e===undefined&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=i(this),a=t==undefined?undefined:t[e];return a!==undefined?a.call(t,r,n):o.call(String(r),t,n)},function(e,r){var i=n(o,e,this,r,o!==t);if(i.done)return i.value;var d=a(e),p=String(this),f=c(d,RegExp),C=d.unicode,g=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(h?"y":"g"),b=new f(h?d:"^(?:"+d.source+")",g),v=r===undefined?4294967295:r>>>0;if(0===v)return[];if(0===p.length)return null===s(b,p)?[p]:[];for(var N=0,V=0,y=[];V1?arguments[1]:undefined,t.length)),o=String(e);return d?d.call(t,o,n):t.slice(n,n+o.length)===o}})},function(e,t,n){"use strict";var o=n(0),r=n(56).trim;o({target:"String",proto:!0,forced:n(112)("trim")},{trim:function(){return r(this)}})},function(e,t,n){"use strict";var o=n(0),r=n(56).end,a=n(112)("trimEnd"),i=a?function(){return r(this)}:"".trimEnd;o({target:"String",proto:!0,forced:a},{trimEnd:i,trimRight:i})},function(e,t,n){"use strict";var o=n(0),r=n(56).start,a=n(112)("trimStart"),i=a?function(){return r(this)}:"".trimStart;o({target:"String",proto:!0,forced:a},{trimStart:i,trimLeft:i})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("big")},{big:function(){return r(this,"big","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("blink")},{blink:function(){return r(this,"blink","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("bold")},{bold:function(){return r(this,"b","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("fixed")},{fixed:function(){return r(this,"tt","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("fontcolor")},{fontcolor:function(e){return r(this,"font","color",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("fontsize")},{fontsize:function(e){return r(this,"font","size",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("italics")},{italics:function(){return r(this,"i","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("link")},{link:function(e){return r(this,"a","href",e)}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("small")},{small:function(){return r(this,"small","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("strike")},{strike:function(){return r(this,"strike","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("sub")},{sub:function(){return r(this,"sub","","")}})},function(e,t,n){"use strict";var o=n(0),r=n(26);o({target:"String",proto:!0,forced:n(27)("sup")},{sup:function(){return r(this,"sup","","")}})},function(e,t,n){"use strict";n(40)("Float32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";var o=n(30);e.exports=function(e){var t=o(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},function(e,t,n){"use strict";n(40)("Float64",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Int8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Int16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Int32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Uint8",(function(e){return function(t,n,o){return e(this,t,n,o)}}),!0)},function(e,t,n){"use strict";n(40)("Uint16",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";n(40)("Uint32",(function(e){return function(t,n,o){return e(this,t,n,o)}}))},function(e,t,n){"use strict";var o=n(7),r=n(130),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("copyWithin",(function(e,t){return r.call(a(this),e,t,arguments.length>2?arguments[2]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).every,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("every",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(97),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("fill",(function(e){return r.apply(a(this),arguments)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).filter,a=n(45),i=o.aTypedArray,c=o.aTypedArrayConstructor;(0,o.exportTypedArrayMethod)("filter",(function(e){for(var t=r(i(this),e,arguments.length>1?arguments[1]:undefined),n=a(this,this.constructor),o=0,l=t.length,u=new(c(n))(l);l>o;)u[o]=t[o++];return u}))},function(e,t,n){"use strict";var o=n(7),r=n(16).find,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("find",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).findIndex,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("findIndex",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).forEach,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("forEach",(function(e){r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(113);(0,n(7).exportTypedArrayStaticMethod)("from",n(152),o)},function(e,t,n){"use strict";var o=n(7),r=n(60).includes,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("includes",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(60).indexOf,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("indexOf",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(5),r=n(7),a=n(133),i=n(11)("iterator"),c=o.Uint8Array,l=a.values,u=a.keys,s=a.entries,d=r.aTypedArray,p=r.exportTypedArrayMethod,f=c&&c.prototype[i],m=!!f&&("values"==f.name||f.name==undefined),h=function(){return l.call(d(this))};p("entries",(function(){return s.call(d(this))})),p("keys",(function(){return u.call(d(this))})),p("values",h,!m),p(i,h,!m)},function(e,t,n){"use strict";var o=n(7),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=[].join;a("join",(function(e){return i.apply(r(this),arguments)}))},function(e,t,n){"use strict";var o=n(7),r=n(136),a=o.aTypedArray;(0,o.exportTypedArrayMethod)("lastIndexOf",(function(e){return r.apply(a(this),arguments)}))},function(e,t,n){"use strict";var o=n(7),r=n(16).map,a=n(45),i=o.aTypedArray,c=o.aTypedArrayConstructor;(0,o.exportTypedArrayMethod)("map",(function(e){return r(i(this),e,arguments.length>1?arguments[1]:undefined,(function(e,t){return new(c(a(e,e.constructor)))(t)}))}))},function(e,t,n){"use strict";var o=n(7),r=n(113),a=o.aTypedArrayConstructor;(0,o.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(a(this))(t);t>e;)n[e]=arguments[e++];return n}),r)},function(e,t,n){"use strict";var o=n(7),r=n(76).left,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduce",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=n(76).right,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("reduceRight",(function(e){return r(a(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=Math.floor;a("reverse",(function(){for(var e,t=r(this).length,n=i(t/2),o=0;o1?arguments[1]:undefined,1),n=this.length,o=i(e),c=r(o.length),u=0;if(c+t>n)throw RangeError("Wrong length");for(;ua;)s[a]=n[a++];return s}),a((function(){new Int8Array(1).slice()})))},function(e,t,n){"use strict";var o=n(7),r=n(16).some,a=o.aTypedArray;(0,o.exportTypedArrayMethod)("some",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var o=n(7),r=o.aTypedArray,a=o.exportTypedArrayMethod,i=[].sort;a("sort",(function(e){return i.call(r(this),e)}))},function(e,t,n){"use strict";var o=n(7),r=n(10),a=n(41),i=n(45),c=o.aTypedArray;(0,o.exportTypedArrayMethod)("subarray",(function(e,t){var n=c(this),o=n.length,l=a(e,o);return new(i(n,n.constructor))(n.buffer,n.byteOffset+l*n.BYTES_PER_ELEMENT,r((t===undefined?o:a(t,o))-l))}))},function(e,t,n){"use strict";var o=n(5),r=n(7),a=n(4),i=o.Int8Array,c=r.aTypedArray,l=r.exportTypedArrayMethod,u=[].toLocaleString,s=[].slice,d=!!i&&a((function(){u.call(new i(1))}));l("toLocaleString",(function(){return u.apply(d?s.call(c(this)):c(this),arguments)}),a((function(){return[1,2].toLocaleString()!=new i([1,2]).toLocaleString()}))||!a((function(){i.prototype.toLocaleString.call([1,2])})))},function(e,t,n){"use strict";var o=n(7).exportTypedArrayMethod,r=n(4),a=n(5).Uint8Array,i=a&&a.prototype||{},c=[].toString,l=[].join;r((function(){c.call({})}))&&(c=function(){return l.call(this)});var u=i.toString!=c;o("toString",c,u)},function(e,t,n){"use strict";var o,r=n(5),a=n(66),i=n(50),c=n(78),l=n(153),u=n(6),s=n(34).enforce,d=n(121),p=!r.ActiveXObject&&"ActiveXObject"in r,f=Object.isExtensible,m=function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}},h=e.exports=c("WeakMap",m,l);if(d&&p){o=l.getConstructor(m,"WeakMap",!0),i.REQUIRED=!0;var C=h.prototype,g=C["delete"],b=C.has,v=C.get,N=C.set;a(C,{"delete":function(e){if(u(e)&&!f(e)){var t=s(this);return t.frozen||(t.frozen=new o),g.call(this,e)||t.frozen["delete"](e)}return g.call(this,e)},has:function(e){if(u(e)&&!f(e)){var t=s(this);return t.frozen||(t.frozen=new o),b.call(this,e)||t.frozen.has(e)}return b.call(this,e)},get:function(e){if(u(e)&&!f(e)){var t=s(this);return t.frozen||(t.frozen=new o),b.call(this,e)?v.call(this,e):t.frozen.get(e)}return v.call(this,e)},set:function(e,t){if(u(e)&&!f(e)){var n=s(this);n.frozen||(n.frozen=new o),b.call(this,e)?N.call(this,e,t):n.frozen.set(e,t)}else N.call(this,e,t);return this}})}},function(e,t,n){"use strict";n(78)("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),n(153))},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(106);o({global:!0,bind:!0,enumerable:!0,forced:!r.setImmediate||!r.clearImmediate},{setImmediate:a.set,clearImmediate:a.clear})},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(147),i=n(32),c=r.process,l="process"==i(c);o({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=l&&c.domain;a(t?t.bind(e):e)}})},function(e,t,n){"use strict";var o=n(0),r=n(5),a=n(73),i=[].slice,c=function(e){return function(t,n){var o=arguments.length>2,r=o?i.call(arguments,2):undefined;return e(o?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};o({global:!0,bind:!0,forced:/MSIE .\./.test(a)},{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},function(e,t,n){"use strict";t.__esModule=!0,t._CI=Ie,t._HI=D,t._M=Te,t._MCCC=Oe,t._ME=Ee,t._MFCC=Me,t._MP=Be,t._MR=Ne,t.__render=ze,t.createComponentVNode=function(e,t,n,o,r){var i=new T(1,null,null,e=function(e,t){if(12&e)return e;if(t.prototype&&t.prototype.render)return 4;if(t.render)return 32776;return 8}(e,t),o,function(e,t,n){var o=(32768&e?t.render:t).defaultProps;if(a(o))return n;if(a(n))return s(o,null);return B(n,o)}(e,t,n),function(e,t,n){if(4&e)return n;var o=(32768&e?t.render:t).defaultHooks;if(a(o))return n;if(a(n))return o;return B(n,o)}(e,t,r),t);k.createVNode&&k.createVNode(i);return i},t.createFragment=P,t.createPortal=function(e,t){var n=D(e);return A(1024,1024,null,n,0,null,n.key,t)},t.createRef=function(){return{current:null}},t.createRenderer=function(e){return function(t,n,o,r){e||(e=t),He(n,e,o,r)}},t.createTextVNode=E,t.createVNode=A,t.directClone=O,t.findDOMfromVNode=N,t.forwardRef=function(e){return{render:e}},t.getFlagsForElementVnode=function(e){switch(e){case"svg":return 32;case"input":return 64;case"select":return 256;case"textarea":return 128;case f:return 8192;default:return 1}},t.linkEvent=function(e,t){if(c(t))return{data:e,event:t};return null},t.normalizeProps=function(e){var t=e.props;if(t){var n=e.flags;481&n&&(void 0!==t.children&&a(e.children)&&F(e,t.children),void 0!==t.className&&(e.className=t.className||null,t.className=undefined)),void 0!==t.key&&(e.key=t.key,t.key=undefined),void 0!==t.ref&&(e.ref=8&n?s(e.ref,t.ref):t.ref,t.ref=undefined)}return e},t.render=He,t.rerender=We,t.version=t.options=t.Fragment=t.EMPTY_OBJ=t.Component=void 0;var o=Array.isArray;function r(e){var t=typeof e;return"string"===t||"number"===t}function a(e){return null==e}function i(e){return null===e||!1===e||!0===e||void 0===e}function c(e){return"function"==typeof e}function l(e){return"string"==typeof e}function u(e){return null===e}function s(e,t){var n={};if(e)for(var o in e)n[o]=e[o];if(t)for(var r in t)n[r]=t[r];return n}function d(e){return!u(e)&&"object"==typeof e}var p={};t.EMPTY_OBJ=p;var f="$F";function m(e){return e.substr(2).toLowerCase()}function h(e,t){e.appendChild(t)}function C(e,t,n){u(n)?h(e,t):e.insertBefore(t,n)}function g(e,t){e.removeChild(t)}function b(e){for(var t;(t=e.shift())!==undefined;)t()}function v(e,t,n){var o=e.children;return 4&n?o.$LI:8192&n?2===e.childFlags?o:o[t?0:o.length-1]:o}function N(e,t){for(var n;e;){if(2033&(n=e.flags))return e.dom;e=v(e,t,n)}return null}function V(e,t){do{var n=e.flags;if(2033&n)return void g(t,e.dom);var o=e.children;if(4&n&&(e=o.$LI),8&n&&(e=o),8192&n){if(2!==e.childFlags){for(var r=0,a=o.length;r0,m=u(p),h=l(p)&&p[0]===I;f||m||h?(n=n||t.slice(0,s),(f||h)&&(d=O(d)),(m||h)&&(d.key=I+s),n.push(d)):n&&n.push(d),d.flags|=65536}}a=0===(n=n||t).length?1:8}else(n=t).flags|=65536,81920&t.flags&&(n=O(t)),a=2;return e.children=n,e.childFlags=a,e}function D(e){return i(e)||r(e)?E(e,null):o(e)?P(e,0,null):16384&e.flags?O(e):e}var j="http://www.w3.org/1999/xlink",z="http://www.w3.org/XML/1998/namespace",H={"xlink:actuate":j,"xlink:arcrole":j,"xlink:href":j,"xlink:role":j,"xlink:show":j,"xlink:title":j,"xlink:type":j,"xml:base":z,"xml:lang":z,"xml:space":z};function G(e){return{onClick:e,onDblClick:e,onFocusIn:e,onFocusOut:e,onKeyDown:e,onKeyPress:e,onKeyUp:e,onMouseDown:e,onMouseMove:e,onMouseUp:e,onTouchEnd:e,onTouchMove:e,onTouchStart:e}}var U=G(0),K=G(null),Y=G(!0);function q(e,t){var n=t.$EV;return n||(n=t.$EV=G(null)),n[e]||1==++U[e]&&(K[e]=function(e){var t="onClick"===e||"onDblClick"===e?function(e){return function(t){0===t.button?$(t,!0,e,Z(t)):t.stopPropagation()}}(e):function(e){return function(t){$(t,!1,e,Z(t))}}(e);return document.addEventListener(m(e),t),t}(e)),n}function W(e,t){var n=t.$EV;n&&n[e]&&(0==--U[e]&&(document.removeEventListener(m(e),K[e]),K[e]=null),n[e]=null)}function $(e,t,n,o){var r=function(e){return c(e.composedPath)?e.composedPath()[0]:e.target}(e);do{if(t&&r.disabled)return;var a=r.$EV;if(a){var i=a[n];if(i&&(o.dom=r,i.event?i.event(i.data,e):i(e),e.cancelBubble))return}r=r.parentNode}while(!u(r))}function Q(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function X(){return this.defaultPrevented}function J(){return this.cancelBubble}function Z(e){var t={dom:document};return e.isDefaultPrevented=X,e.isPropagationStopped=J,e.stopPropagation=Q,Object.defineProperty(e,"currentTarget",{configurable:!0,get:function(){return t.dom}}),t}function ee(e,t,n){if(e[t]){var o=e[t];o.event?o.event(o.data,n):o(n)}else{var r=t.toLowerCase();e[r]&&e[r](n)}}function te(e,t){var n=function(n){var o=this.$V;if(o){var r=o.props||p,a=o.dom;if(l(e))ee(r,e,n);else for(var i=0;i-1&&t.options[i]&&(c=t.options[i].value),n&&a(c)&&(c=e.defaultValue),le(o,c)}}var de,pe,fe=te("onInput",he),me=te("onChange");function he(e,t,n){var o=e.value,r=t.value;if(a(o)){if(n){var i=e.defaultValue;a(i)||i===r||(t.defaultValue=i,t.value=i)}}else r!==o&&(t.defaultValue=o,t.value=o)}function Ce(e,t,n,o,r,a){64&e?ce(o,n):256&e?se(o,n,r,t):128&e&&he(o,n,r),a&&(n.$V=t)}function ge(e,t,n){64&e?function(e,t){oe(t.type)?(ne(e,"change",ae),ne(e,"click",ie)):ne(e,"input",re)}(t,n):256&e?function(e){ne(e,"change",ue)}(t):128&e&&function(e,t){ne(e,"input",fe),t.onChange&&ne(e,"change",me)}(t,n)}function be(e){return e.type&&oe(e.type)?!a(e.checked):!a(e.value)}function ve(e){e&&!S(e,null)&&e.current&&(e.current=null)}function Ne(e,t,n){e&&(c(e)||void 0!==e.current)&&n.push((function(){S(e,t)||void 0===e.current||(e.current=t)}))}function Ve(e,t){ye(e),V(e,t)}function ye(e){var t,n=e.flags,o=e.children;if(481&n){t=e.ref;var r=e.props;ve(t);var i=e.childFlags;if(!u(r))for(var l=Object.keys(r),s=0,d=l.length;s0;for(var c in i&&(a=be(n))&&ge(t,o,n),n)Le(c,null,n[c],o,r,a,null);i&&Ce(t,e,o,n,!0,a)}function Se(e,t,n){var o=D(e.render(t,e.state,n)),r=n;return c(e.getChildContext)&&(r=s(n,e.getChildContext())),e.$CX=r,o}function Ie(e,t,n,o,r,a){var i=new t(n,o),l=i.$N=Boolean(t.getDerivedStateFromProps||i.getSnapshotBeforeUpdate);if(i.$SVG=r,i.$L=a,e.children=i,i.$BS=!1,i.context=o,i.props===p&&(i.props=n),l)i.state=_(i,n,i.state);else if(c(i.componentWillMount)){i.$BR=!0,i.componentWillMount();var s=i.$PS;if(!u(s)){var d=i.state;if(u(d))i.state=s;else for(var f in s)d[f]=s[f];i.$PS=null}i.$BR=!1}return i.$LI=Se(i,n,o),i}function Te(e,t,n,o,r,a){var i=e.flags|=16384;481&i?Ee(e,t,n,o,r,a):4&i?function(e,t,n,o,r,a){var i=Ie(e,e.type,e.props||p,n,o,a);Te(i.$LI,t,i.$CX,o,r,a),Oe(e.ref,i,a)}(e,t,n,o,r,a):8&i?(!function(e,t,n,o,r,a){Te(e.children=D(function(e,t){return 32768&e.flags?e.type.render(e.props||p,e.ref,t):e.type(e.props||p,t)}(e,n)),t,n,o,r,a)}(e,t,n,o,r,a),Me(e,a)):512&i||16&i?Ae(e,t,r):8192&i?function(e,t,n,o,r,a){var i=e.children,c=e.childFlags;12&c&&0===i.length&&(c=e.childFlags=2,i=e.children=M());2===c?Te(i,n,r,o,r,a):Pe(i,n,t,o,r,a)}(e,n,t,o,r,a):1024&i&&function(e,t,n,o,r){Te(e.children,e.ref,t,!1,null,r);var a=M();Ae(a,n,o),e.dom=a.dom}(e,n,t,r,a)}function Ae(e,t,n){var o=e.dom=document.createTextNode(e.children);u(t)||C(t,o,n)}function Ee(e,t,n,o,r,i){var c=e.flags,l=e.props,s=e.className,d=e.children,p=e.childFlags,f=e.dom=function(e,t){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}(e.type,o=o||(32&c)>0);if(a(s)||""===s||(o?f.setAttribute("class",s):f.className=s),16===p)w(f,d);else if(1!==p){var m=o&&"foreignObject"!==e.type;2===p?(16384&d.flags&&(e.children=d=O(d)),Te(d,f,n,m,null,i)):8!==p&&4!==p||Pe(d,f,n,m,null,i)}u(t)||C(t,f,r),u(l)||Be(e,c,l,f,o),Ne(e.ref,f,i)}function Pe(e,t,n,o,r,a){for(var i=0;i0,u!==s){var m=u||p;if((c=s||p)!==p)for(var h in(d=(448&r)>0)&&(f=be(c)),c){var C=m[h],g=c[h];C!==g&&Le(h,C,g,l,o,f,e)}if(m!==p)for(var b in m)a(c[b])&&!a(m[b])&&Le(b,m[b],null,l,o,f,e)}var v=t.children,N=t.className;e.className!==N&&(a(N)?l.removeAttribute("class"):o?l.setAttribute("class",N):l.className=N);4096&r?function(e,t){e.textContent!==t&&(e.textContent=t)}(l,v):Fe(e.childFlags,t.childFlags,e.children,v,l,n,o&&"foreignObject"!==t.type,null,e,i);d&&Ce(r,t,l,c,!1,f);var V=t.ref,y=e.ref;y!==V&&(ve(y),Ne(V,l,i))}(e,t,o,r,f,d):4&f?function(e,t,n,o,r,a,i){var l=t.children=e.children;if(u(l))return;l.$L=i;var d=t.props||p,f=t.ref,m=e.ref,h=l.state;if(!l.$N){if(c(l.componentWillReceiveProps)){if(l.$BR=!0,l.componentWillReceiveProps(d,o),l.$UN)return;l.$BR=!1}u(l.$PS)||(h=s(h,l.$PS),l.$PS=null)}De(l,h,d,n,o,r,!1,a,i),m!==f&&(ve(m),Ne(f,l,i))}(e,t,n,o,r,l,d):8&f?function(e,t,n,o,r,i,l){var u=!0,s=t.props||p,d=t.ref,f=e.props,m=!a(d),h=e.children;m&&c(d.onComponentShouldUpdate)&&(u=d.onComponentShouldUpdate(f,s));if(!1!==u){m&&c(d.onComponentWillUpdate)&&d.onComponentWillUpdate(f,s);var C=t.type,g=D(32768&t.flags?C.render(s,d,o):C(s,o));Re(h,g,n,o,r,i,l),t.children=g,m&&c(d.onComponentDidUpdate)&&d.onComponentDidUpdate(f,s)}else t.children=h}(e,t,n,o,r,l,d):16&f?function(e,t){var n=t.children,o=t.dom=e.dom;n!==e.children&&(o.nodeValue=n)}(e,t):512&f?t.dom=e.dom:8192&f?function(e,t,n,o,r,a){var i=e.children,c=t.children,l=e.childFlags,u=t.childFlags,s=null;12&u&&0===c.length&&(u=t.childFlags=2,c=t.children=M());var d=0!=(2&u);if(12&l){var p=i.length;(8&l&&8&u||d||!d&&c.length>p)&&(s=N(i[p-1],!1).nextSibling)}Fe(l,u,i,c,n,o,r,s,e,a)}(e,t,n,o,r,d):function(e,t,n,o){var r=e.ref,a=t.ref,c=t.children;if(Fe(e.childFlags,t.childFlags,e.children,c,r,n,!1,null,e,o),t.dom=e.dom,r!==a&&!i(c)){var l=c.dom;g(r,l),h(a,l)}}(e,t,o,d)}function Fe(e,t,n,o,r,a,i,c,l,u){switch(e){case 2:switch(t){case 2:Re(n,o,r,a,i,c,u);break;case 1:Ve(n,r);break;case 16:ye(n),w(r,o);break;default:!function(e,t,n,o,r,a){ye(e),Pe(t,n,o,r,N(e,!0),a),V(e,n)}(n,o,r,a,i,u)}break;case 1:switch(t){case 2:Te(o,r,a,i,c,u);break;case 1:break;case 16:w(r,o);break;default:Pe(o,r,a,i,c,u)}break;case 16:switch(t){case 16:!function(e,t,n){e!==t&&(""!==e?n.firstChild.nodeValue=t:w(n,t))}(n,o,r);break;case 2:xe(r),Te(o,r,a,i,c,u);break;case 1:xe(r);break;default:xe(r),Pe(o,r,a,i,c,u)}break;default:switch(t){case 16:_e(n),w(r,o);break;case 2:ke(r,l,n),Te(o,r,a,i,c,u);break;case 1:ke(r,l,n);break;default:var s=0|n.length,d=0|o.length;0===s?d>0&&Pe(o,r,a,i,c,u):0===d?ke(r,l,n):8===t&&8===e?function(e,t,n,o,r,a,i,c,l,u){var s,d,p=a-1,f=i-1,m=0,h=e[m],C=t[m];e:{for(;h.key===C.key;){if(16384&C.flags&&(t[m]=C=O(C)),Re(h,C,n,o,r,c,u),e[m]=C,++m>p||m>f)break e;h=e[m],C=t[m]}for(h=e[p],C=t[f];h.key===C.key;){if(16384&C.flags&&(t[f]=C=O(C)),Re(h,C,n,o,r,c,u),e[p]=C,p--,f--,m>p||m>f)break e;h=e[p],C=t[f]}}if(m>p){if(m<=f)for(d=(s=f+1)f)for(;m<=p;)Ve(e[m++],n);else!function(e,t,n,o,r,a,i,c,l,u,s,d,p){var f,m,h,C=0,g=c,b=c,v=a-c+1,V=i-c+1,_=new Int32Array(V+1),x=v===o,k=!1,w=0,L=0;if(r<4||(v|V)<32)for(C=g;C<=a;++C)if(f=e[C],Lc?k=!0:w=c,16384&m.flags&&(t[c]=m=O(m)),Re(f,m,l,n,u,s,p),++L;break}!x&&c>i&&Ve(f,l)}else x||Ve(f,l);else{var B={};for(C=b;C<=i;++C)B[t[C].key]=C;for(C=g;C<=a;++C)if(f=e[C],Lg;)Ve(e[g++],l);_[c-b]=C+1,w>c?k=!0:w=c,16384&(m=t[c]).flags&&(t[c]=m=O(m)),Re(f,m,l,n,u,s,p),++L}else x||Ve(f,l);else x||Ve(f,l)}if(x)ke(l,d,e),Pe(t,l,n,u,s,p);else if(k){var S=function(e){var t=0,n=0,o=0,r=0,a=0,i=0,c=0,l=e.length;l>je&&(je=l,de=new Int32Array(l),pe=new Int32Array(l));for(;n>1]]0&&(pe[n]=de[a-1]),de[a]=n)}a=r+1;var u=new Int32Array(a);i=de[a-1];for(;a-- >0;)u[a]=i,i=pe[i],de[a]=0;return u}(_);for(c=S.length-1,C=V-1;C>=0;C--)0===_[C]?(16384&(m=t[w=C+b]).flags&&(t[w]=m=O(m)),Te(m,l,n,u,(h=w+1)=0;C--)0===_[C]&&(16384&(m=t[w=C+b]).flags&&(t[w]=m=O(m)),Te(m,l,n,u,(h=w+1)i?i:a,p=0;pi)for(p=d;p0&&b(r),x.v=!1,c(n)&&n(),c(k.renderComplete)&&k.renderComplete(i,t)}function He(e,t,n,o){void 0===n&&(n=null),void 0===o&&(o=p),ze(e,t,n,o)}"undefined"!=typeof document&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);var Ge=[],Ue="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},Ke=!1;function Ye(e,t,n,o){var r=e.$PS;if(c(t)&&(t=t(r?s(e.state,r):e.state,e.props,e.context)),a(r))e.$PS=t;else for(var i in t)r[i]=t[i];if(e.$BR)c(n)&&e.$L.push(n.bind(e));else{if(!x.v&&0===Ge.length)return void $e(e,o,n);if(-1===Ge.indexOf(e)&&Ge.push(e),Ke||(Ke=!0,Ue(We)),c(n)){var l=e.$QU;l||(l=e.$QU=[]),l.push(n)}}}function qe(e){for(var t=e.$QU,n=0,o=t.length;n0&&b(r),x.v=!1}else e.state=e.$PS,e.$PS=null;c(n)&&n.call(e)}}var Qe=function(e,t){this.state=null,this.$BR=!1,this.$BS=!0,this.$PS=null,this.$LI=null,this.$UN=!1,this.$CX=null,this.$QU=null,this.$N=!1,this.$L=null,this.$SVG=!1,this.props=e||p,this.context=t||p};t.Component=Qe,Qe.prototype.forceUpdate=function(e){this.$UN||Ye(this,{},e,!0)},Qe.prototype.setState=function(e,t){this.$UN||this.$BS||Ye(this,e,t,!1)},Qe.prototype.render=function(e,t,n){return null};t.version="7.3.3"},function(e,t,n){"use strict";var o=function(e){var t,n=Object.prototype,o=n.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function l(e,t,n,o){var r=t&&t.prototype instanceof h?t:h,a=Object.create(r.prototype),i=new L(o||[]);return a._invoke=function(e,t,n){var o=s;return function(r,a){if(o===p)throw new Error("Generator is already running");if(o===f){if("throw"===r)throw a;return S()}for(n.method=r,n.arg=a;;){var i=n.delegate;if(i){var c=x(i,n);if(c){if(c===m)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===s)throw o=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=p;var l=u(e,t,n);if("normal"===l.type){if(o=n.done?f:d,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=f,n.method="throw",n.arg=l.arg)}}}(e,n,i),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(o){return{type:"throw",arg:o}}}e.wrap=l;var s="suspendedStart",d="suspendedYield",p="executing",f="completed",m={};function h(){}function C(){}function g(){}var b={};b[a]=function(){return this};var v=Object.getPrototypeOf,N=v&&v(v(B([])));N&&N!==n&&o.call(N,a)&&(b=N);var V=g.prototype=h.prototype=Object.create(b);function y(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function _(e){var t;this._invoke=function(n,r){function a(){return new Promise((function(t,a){!function i(t,n,r,a){var c=u(e[t],e,n);if("throw"!==c.type){var l=c.arg,s=l.value;return s&&"object"==typeof s&&o.call(s,"__await")?Promise.resolve(s.__await).then((function(e){i("next",e,r,a)}),(function(e){i("throw",e,r,a)})):Promise.resolve(s).then((function(e){l.value=e,r(l)}),(function(e){return i("throw",e,r,a)}))}a(c.arg)}(n,r,t,a)}))}return t=t?t.then(a,a):a()}}function x(e,n){var o=e.iterator[n.method];if(o===t){if(n.delegate=null,"throw"===n.method){if(e.iterator["return"]&&(n.method="return",n.arg=t,x(e,n),"throw"===n.method))return m;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var r=u(o,e.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,m;var a=r.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function k(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function L(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(k,this),this.reset(!0)}function B(e){if(e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function n(){for(;++r=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=o.call(i,"catchLoc"),u=o.call(i,"finallyLoc");if(l&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),m}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var o=n.completion;if("throw"===o.type){var r=o.arg;w(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,o){return this.delegate={iterator:B(e),resultName:n,nextLoc:o},"next"===this.method&&(this.arg=t),m}},e}(e.exports);try{regeneratorRuntime=o}catch(r){Function("r","regeneratorRuntime = r")(o)}},function(e,t,n){"use strict";window.Int32Array||(window.Int32Array=Array)},function(e,t,n){"use strict";(function(e){
/*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
-var n;n=void 0!==e?e:void 0,t.loadCSS=function(e,t,o,r){var a,i=n.document,c=i.createElement("link");if(t)a=t;else{var l=(i.body||i.getElementsByTagName("head")[0]).childNodes;a=l[l.length-1]}var u=i.styleSheets;if(r)for(var s in r)r.hasOwnProperty(s)&&c.setAttribute(s,r[s]);c.rel="stylesheet",c.href=e,c.media="only x",function f(e){if(i.body)return e();setTimeout((function(){f(e)}))}((function(){a.parentNode.insertBefore(c,t?a:a.nextSibling)}));var d=function m(e){for(var t=c.href,n=u.length;n--;)if(u[n].href===t)return e();setTimeout((function(){m(e)}))};function p(){c.addEventListener&&c.removeEventListener("load",p),c.media=o||"all"}return c.addEventListener&&c.addEventListener("load",p),c.onloadcssdefined=d,d(p),c}}).call(this,n(118))},function(e,t,n){"use strict";t.__esModule=!0,t.Achievements=t.Score=t.Achievement=void 0;var o=n(1),r=n(3),a=n(2),i=function(e){var t=e.name,n=e.desc,r=e.icon_class,i=e.value;return(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,a.Box,{className:r}),2,{style:{padding:"6px"}}),(0,o.createVNode)(1,"td",null,[(0,o.createVNode)(1,"h1",null,t,0),n,(0,o.createComponentVNode)(2,a.Box,{color:i?"good":"bad",content:i?"Unlocked":"Locked"})],0,{style:{"vertical-align":"top"}})],4,null,t)};t.Achievement=i;var c=function(e){var t=e.name,n=e.desc,r=e.icon_class,i=e.value;return(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,a.Box,{className:r}),2,{style:{padding:"6px"}}),(0,o.createVNode)(1,"td",null,[(0,o.createVNode)(1,"h1",null,t,0),n,(0,o.createComponentVNode)(2,a.Box,{color:i>0?"good":"bad",content:i>0?"Earned "+i+" times":"Locked"})],0,{style:{"vertical-align":"top"}})],4,null,t)};t.Score=c;t.Achievements=function(e){var t=(0,r.useBackend)(e).data;return(0,o.createComponentVNode)(2,a.Tabs,{children:[t.categories.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:e,children:(0,o.createComponentVNode)(2,a.Box,{as:"Table",children:t.achievements.filter((function(t){return t.category===e})).map((function(e){return e.score?(0,o.createComponentVNode)(2,c,{name:e.name,desc:e.desc,icon_class:e.icon_class,value:e.value},e.name):(0,o.createComponentVNode)(2,i,{name:e.name,desc:e.desc,icon_class:e.icon_class,value:e.value},e.name)}))})},e)})),(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:"High Scores",children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:t.highscore.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:e.name,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{className:"candystripe",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:"#"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:"Key"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:"Score"})]}),Object.keys(e.scores).map((function(n,r){return(0,o.createComponentVNode)(2,a.Table.Row,{className:"candystripe",m:2,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:r+1}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:n===t.user_ckey&&"green",textAlign:"center",children:[0===r&&(0,o.createComponentVNode)(2,a.Icon,{name:"crown",color:"gold",mr:2}),n,0===r&&(0,o.createComponentVNode)(2,a.Icon,{name:"crown",color:"gold",ml:2})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:e.scores[n]})]},n)}))]})},e.name)}))})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.BlockQuote=void 0;var o=n(1),r=n(12),a=n(17);t.BlockQuote=function(e){var t=e.className,n=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,["className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["BlockQuote",t])},n)))}},function(e,t,n){"use strict";var o,r;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=o,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(o||(t.VNodeFlags=o={})),t.ChildFlags=r,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(r||(t.ChildFlags=r={}))},function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var o=n(1),r=n(12),a=n(17);var i=function(e){var t=e.color,n=e.content,i=e.className,c=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,["color","content","className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["ColorBox",i]),color:n?null:"transparent",backgroundColor:t,content:n||"."},c)))};t.ColorBox=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Collapsible=void 0;var o=n(1),r=n(17),a=n(114);var i=function(e){var t,n;function i(t){var n;n=e.call(this,t)||this;var o=t.open;return n.state={open:o||!1},n}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,i.prototype.render=function(){var e=this,t=this.props,n=this.state.open,i=t.children,c=t.color,l=void 0===c?"default":c,u=t.title,s=t.buttons,d=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}(t,["children","color","title","buttons"]);return(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[(0,o.createVNode)(1,"div","Table",[(0,o.createVNode)(1,"div","Table__cell",(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({fluid:!0,color:l,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},d,{children:u}))),2),s&&(0,o.createVNode)(1,"div","Table__cell Table__cell--collapsing",s,0)],0),n&&(0,o.createComponentVNode)(2,r.Box,{mt:1,children:i})]})},i}(o.Component);t.Collapsible=i},function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var o=n(1),r=n(17);t.Dimmer=function(e){var t=e.style,n=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,["style"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Box,Object.assign({style:Object.assign({position:"absolute",top:0,bottom:0,left:0,right:0,"background-color":"rgba(0, 0, 0, 0.75)","z-index":1},t)},n)))}},function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var o=n(1),r=n(12),a=n(17),i=n(87);function c(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}var l=function(e){var t,n;function l(t){var n;return(n=e.call(this,t)||this).state={selected:t.selected,open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=l.prototype;return u.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},u.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},u.setSelected=function(e){this.setState({selected:e}),this.setOpen(!1),this.props.onSelected(e)},u.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){return(0,o.createVNode)(1,"div","Dropdown__menuentry",t,0,{onClick:function(n){e.setSelected(t)}},t)}));return n.length?n:"No Options Found"},u.render=function(){var e=this,t=this.props,n=t.color,l=void 0===n?"default":n,u=t.over,s=t.width,d=(t.onClick,t.selected,c(t,["color","over","width","onClick","selected"])),p=d.className,f=c(d,["className"]),m=u?!this.state.open:this.state.open,h=this.state.open?(0,o.createVNode)(1,"div",(0,r.classes)(["Dropdown__menu",u&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:s}},null,(function(t){e.menuRef=t})):null;return(0,o.createVNode)(1,"div","Dropdown",[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({width:s,className:(0,r.classes)(["Dropdown__control","Button","Button--color--"+l,p])},f,{onClick:function(t){e.setOpen(!e.state.open)},children:[(0,o.createVNode)(1,"span","Dropdown__selected-text",this.state.selected,0),(0,o.createVNode)(1,"span","Dropdown__arrow-button",(0,o.createComponentVNode)(2,i.Icon,{name:m?"chevron-up":"chevron-down"}),2)]}))),h],0)},l}(o.Component);t.Dropdown=l},function(e,t,n){"use strict";t.__esModule=!0,t.FlexItem=t.computeFlexItemProps=t.Flex=t.computeFlexProps=void 0;var o=n(1),r=n(12),a=n(17);function i(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}var c=function(e){var t=e.className,n=e.direction,o=e.wrap,a=e.align,c=e.justify,l=e.spacing,u=void 0===l?0:l,s=i(e,["className","direction","wrap","align","justify","spacing"]);return Object.assign({className:(0,r.classes)(["Flex",u>0&&"Flex--spacing--"+u,t]),style:Object.assign({},s.style,{"flex-direction":n,"flex-wrap":o,"align-items":a,"justify-content":c})},s)};t.computeFlexProps=c;var l=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},c(e))))};t.Flex=l,l.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.className,n=e.grow,o=e.order,a=e.align,c=i(e,["className","grow","order","align"]);return Object.assign({className:(0,r.classes)(["Flex__item",t]),style:Object.assign({},c.style,{"flex-grow":n,order:o,"align-self":a})},c)};t.computeFlexItemProps=u;var s=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},u(e))))};t.FlexItem=s,s.defaultHooks=r.pureComponentHooks,l.Item=s},function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var o=n(1),r=n(12),a=n(17);var i=function(e){var t=e.className,n=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,["className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["NoticeBox",t])},n)))};t.NoticeBox=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.NumberInput=void 0;var o=n(1),r=n(20),a=n(12),i=n(19),c=n(158),l=n(17);var u=function(e){var t,n;function u(t){var n;n=e.call(this,t)||this;var a=t.value;return n.inputRef=(0,o.createRef)(),n.state={value:a,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props.value;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:e.screenY,value:t,internalValue:t}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,o=t.dragging,r=t.value,a=n.props.onDrag;o&&a&&a(e,r)}),500),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,o=t.minValue,a=t.maxValue,i=t.step,c=t.stepPixelSize;n.setState((function(t){var n=Object.assign({},t),l=n.origin-e.screenY;if(t.dragging){var u=Number.isFinite(o)?o%i:0;n.internalValue=(0,r.clamp)(n.internalValue+l*i/c,o-i,a+i),n.value=(0,r.clamp)(n.internalValue-n.internalValue%i+u,o,a),n.origin=e.screenY}else Math.abs(l)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,o=t.onChange,r=t.onDrag,a=n.state,i=a.dragging,c=a.value,l=a.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!i,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),i)n.suppressFlicker(),o&&o(e,c),r&&r(e,c);else if(n.inputRef){var u=n.inputRef.current;u.value=l;try{u.focus(),u.select()}catch(s){}}},n}return n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,u.prototype.render=function(){var e=this,t=this.state,n=t.dragging,u=t.editing,s=t.value,d=t.suppressingFlicker,p=this.props,f=p.className,m=p.fluid,h=p.animated,C=p.value,g=p.unit,b=p.minValue,v=p.maxValue,N=p.height,V=p.width,y=p.lineHeight,_=p.fontSize,x=p.format,k=p.onChange,w=p.onDrag,L=C;(n||d)&&(L=s);var B=function(e){return(0,o.createVNode)(1,"div","NumberInput__content",e+(g?" "+g:""),0,{unselectable:i.tridentVersion<=4})},S=h&&!n&&!d&&(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:L,format:x,children:B})||B(x?x(L):L);return(0,o.createComponentVNode)(2,l.Box,{className:(0,a.classes)(["NumberInput",m&&"NumberInput--fluid",f]),minWidth:V,minHeight:N,lineHeight:y,fontSize:_,onMouseDown:this.handleDragStart,children:[(0,o.createVNode)(1,"div","NumberInput__barContainer",(0,o.createVNode)(1,"div","NumberInput__bar",null,1,{style:{height:(0,r.clamp)((L-b)/(v-b)*100,0,100)+"%"}}),2),S,(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:u?undefined:"none",height:N,"line-height":y,"font-size":_},onBlur:function(t){if(u){var n=(0,r.clamp)(t.target.value,b,v);e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),w&&w(t,n)}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,r.clamp)(t.target.value,b,v);return e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),void(w&&w(t,n))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef)]})},u}(o.Component);t.NumberInput=u,u.defaultHooks=a.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50}},function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBar=void 0;var o=n(1),r=n(12),a=n(20),i=function(e){var t=e.value,n=e.minValue,i=void 0===n?0:n,c=e.maxValue,l=void 0===c?1:c,u=e.ranges,s=void 0===u?{}:u,d=e.content,p=e.children,f=(t-i)/(l-i),m=d!==undefined||p!==undefined,h=e.color;if(!h)for(var C=0,g=Object.keys(s);C=v[0]&&t<=v[1]){h=b;break}}return h||(h="default"),(0,o.createVNode)(1,"div",(0,r.classes)(["ProgressBar","ProgressBar--color--"+h]),[(0,o.createVNode)(1,"div","ProgressBar__fill",null,1,{style:{width:100*(0,a.clamp)(f,0,1)+"%"}}),(0,o.createVNode)(1,"div","ProgressBar__content",[m&&d,m&&p,!m&&(0,a.toFixed)(100*f)+"%"],0)],4)};t.ProgressBar=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var o=n(1),r=n(12),a=n(17);var i=function(e){var t=e.className,n=e.title,i=e.level,c=void 0===i?1:i,l=e.buttons,u=e.content,s=e.children,d=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,["className","title","level","buttons","content","children"]),p=!(0,r.isFalsy)(n)||!(0,r.isFalsy)(l),f=!(0,r.isFalsy)(u)||!(0,r.isFalsy)(s);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Section","Section--level--"+c,t])},d,{children:[p&&(0,o.createVNode)(1,"div","Section__title",[(0,o.createVNode)(1,"span","Section__titleText",n,0),(0,o.createVNode)(1,"div","Section__buttons",l,0)],4),f&&(0,o.createVNode)(1,"div","Section__content",[u,s],0)]})))};t.Section=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Tab=t.Tabs=void 0;var o=n(1),r=n(12),a=n(17),i=n(114);function c(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}var l=function(e){var t=e,n=Array.isArray(t),o=0;for(t=n?t:t[Symbol.iterator]();;){var r;if(n){if(o>=t.length)break;r=t[o++]}else{if((o=t.next()).done)break;r=o.value}var a=r;if(!a.props||"Tab"!==a.props.__type__){var i=JSON.stringify(a,null,2);throw new Error(" only accepts children of type .This is what we received: "+i)}}},u=function(e){var t,n;function u(t){var n;return(n=e.call(this,t)||this).state={activeTabKey:null},n}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=u.prototype;return s.getActiveTab=function(){var e=this.state,t=this.props,n=(0,r.normalizeChildren)(t.children);l(n);var o=t.activeTab||e.activeTabKey,a=n.find((function(e){return(e.key||e.props.label)===o}));return a||(a=n[0],o=a&&(a.key||a.props.label)),{tabs:n,activeTab:a,activeTabKey:o}},s.render=function(){var e=this,t=this.props,n=t.className,l=t.vertical,u=(t.children,c(t,["className","vertical","children"])),s=this.getActiveTab(),d=s.tabs,p=s.activeTab,f=s.activeTabKey,m=null;return p&&(m=p.props.content||p.props.children),"function"==typeof m&&(m=m(f)),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Tabs",l&&"Tabs--vertical",n])},u,{children:[(0,o.createVNode)(1,"div","Tabs__tabBox",d.map((function(t){var n=t.props,a=n.className,l=n.label,u=(n.content,n.children,n.onClick),s=n.highlight,d=c(n,["className","label","content","children","onClick","highlight"]),p=t.key||t.props.label,m=t.active||p===f;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({className:(0,r.classes)(["Tabs__tab",m&&"Tabs__tab--active",s&&!m&&"color-yellow",a]),selected:m,color:"transparent",onClick:function(n){e.setState({activeTabKey:p}),u&&u(n,t)}},d,{children:l}),p))})),0),(0,o.createVNode)(1,"div","Tabs__content",m||null,0)]})))},u}(o.Component);t.Tabs=u;var s=function(e){return null};t.Tab=s,s.defaultProps={__type__:"Tab"},u.Tab=s},function(e,t,n){"use strict";t.__esModule=!0,t.TitleBar=void 0;var o=n(1),r=n(12),a=n(31),i=n(19),c=n(37),l=n(87),u=function(e){switch(e){case c.UI_INTERACTIVE:return"good";case c.UI_UPDATE:return"average";case c.UI_DISABLED:default:return"bad"}},s=function(e){var t=e.className,n=e.title,c=e.status,s=e.fancy,d=e.onDragStart,p=e.onClose;return(0,o.createVNode)(1,"div",(0,r.classes)(["TitleBar",t]),[(0,o.createComponentVNode)(2,l.Icon,{className:"TitleBar__statusIcon",color:u(c),name:"eye"}),(0,o.createVNode)(1,"div","TitleBar__title",n===n.toLowerCase()?(0,a.toTitleCase)(n):n,0),(0,o.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return s&&d(e)}}),!!s&&(0,o.createVNode)(1,"div","TitleBar__close TitleBar__clickable",i.tridentVersion<=4?"x":"\xd7",0,{onclick:p})],0)};t.TitleBar=s,s.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Chart=void 0;var o=n(1),r=n(28),a=n(17),i=n(12),c=n(19);var l=function(e,t,n,o){if(0===e.length)return[];var a=(0,r.zipWith)(Math.min).apply(void 0,e),i=(0,r.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(a[0]=n[0],i[0]=n[1]),o!==undefined&&(a[1]=o[0],i[1]=o[1]),(0,r.map)((function(e){return(0,r.zipWith)((function(e,t,n,o){return(e-t)/(n-t)*o}))(e,a,i,t)}))(e)},u=function(e){for(var t="",n=0;n=0||(r[n]=e[n]);return r}(t,["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"]),g=this.state.viewBox,b=l(r,g,i,c);if(b.length>0){var v=b[0],N=b[b.length-1];b.push([g[0]+h,N[1]]),b.push([g[0]+h,-h]),b.push([-h,-h]),b.push([-h,v[1]])}var V=u(b);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({position:"relative"},C,{children:function(t){return(0,o.normalizeProps)((0,o.createVNode)(1,"div",null,(0,o.createVNode)(32,"svg",null,(0,o.createVNode)(32,"polyline",null,null,1,{transform:"scale(1, -1) translate(0, -"+g[1]+")",fill:d,stroke:f,"stroke-width":h,points:V}),2,{viewBox:"0 0 "+g[0]+" "+g[1],preserveAspectRatio:"none",style:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"hidden"}}),2,Object.assign({},t),null,e.ref))}})))},r}(o.Component);s.defaultHooks=i.pureComponentHooks;var d={Line:c.tridentVersion<=4?function(e){return null}:s};t.Chart=d},function(e,t,n){"use strict";t.__esModule=!0,t.AiAirlock=void 0;var o=n(1),r=n(3),a=n(2);t.AiAirlock=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c={2:{color:"good",localStatusText:"Offline"},1:{color:"average",localStatusText:"Caution"},0:{color:"bad",localStatusText:"Optimal"}},l=c[i.power.main]||c[0],u=c[i.power.backup]||c[0],s=c[i.shock]||c[0];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main",color:l.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!i.power.main,content:"Disrupt",onClick:function(){return n("disrupt-main")}}),children:[i.power.main?"Online":"Offline"," ",i.wires.main_1&&i.wires.main_2?i.power.main_timeleft>0&&"["+i.power.main_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Backup",color:u.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!i.power.backup,content:"Disrupt",onClick:function(){return n("disrupt-backup")}}),children:[i.power.backup?"Online":"Offline"," ",i.wires.backup_1&&i.wires.backup_2?i.power.backup_timeleft>0&&"["+i.power.backup_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Electrify",color:s.color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",disabled:!(i.wires.shock&&0===i.shock),content:"Restore",onClick:function(){return n("shock-restore")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!i.wires.shock,content:"Temporary",onClick:function(){return n("shock-temp")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!i.wires.shock,content:"Permanent",onClick:function(){return n("shock-perm")}})],4),children:[2===i.shock?"Safe":"Electrified"," ",(i.wires.shock?i.shock_timeleft>0&&"["+i.shock_timeleft+"s]":"[Wires have been cut!]")||-1===i.shock_timeleft&&"[Permanent]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Access and Door Control",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.id_scanner?"power-off":"times",content:i.id_scanner?"Enabled":"Disabled",selected:i.id_scanner,disabled:!i.wires.id_scanner,onClick:function(){return n("idscan-toggle")}}),children:!i.wires.id_scanner&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Access",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.emergency?"power-off":"times",content:i.emergency?"Enabled":"Disabled",selected:i.emergency,onClick:function(){return n("emergency-toggle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.locked?"lock":"unlock",content:i.locked?"Lowered":"Raised",selected:i.locked,disabled:!i.wires.bolts,onClick:function(){return n("bolt-toggle")}}),children:!i.wires.bolts&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolt Lights",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.lights?"power-off":"times",content:i.lights?"Enabled":"Disabled",selected:i.lights,disabled:!i.wires.lights,onClick:function(){return n("light-toggle")}}),children:!i.wires.lights&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Force Sensors",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.safe?"power-off":"times",content:i.safe?"Enabled":"Disabled",selected:i.safe,disabled:!i.wires.safe,onClick:function(){return n("safe-toggle")}}),children:!i.wires.safe&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Timing Safety",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.speed?"power-off":"times",content:i.speed?"Enabled":"Disabled",selected:i.speed,disabled:!i.wires.timing,onClick:function(){return n("speed-toggle")}}),children:!i.wires.timing&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.opened?"sign-out-alt":"sign-in-alt",content:i.opened?"Open":"Closed",selected:i.opened,disabled:i.locked||i.welded,onClick:function(){return n("open-close")}}),children:!(!i.locked&&!i.welded)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("[Door is "),i.locked?"bolted":"",i.locked&&i.welded?" and ":"",i.welded?"welded":"",(0,o.createTextVNode)("!]")],0)})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.AirAlarm=void 0;var o=n(1),r=n(20),a=n(31),i=n(3),c=n(2),l=n(37),u=n(69);t.AirAlarm=function(e){var t=e.state,n=(0,i.useBackend)(e),r=n.act,a=n.data,c=a.locked&&!a.siliconUser;return(0,o.createFragment)([(0,o.createComponentVNode)(2,u.InterfaceLockNoticeBox,{siliconUser:a.siliconUser,locked:a.locked,onLockStatusChange:function(){return r("lock")}}),(0,o.createComponentVNode)(2,s,{state:t}),!c&&(0,o.createComponentVNode)(2,p,{state:t})],0)};var s=function(e){var t=(0,i.useBackend)(e).data,n=(t.environment_data||[]).filter((function(e){return e.value>=.01})),a={0:{color:"good",localStatusText:"Optimal"},1:{color:"average",localStatusText:"Caution"},2:{color:"bad",localStatusText:"Danger (Internals Required)"}},l=a[t.danger_level]||a[0];return(0,o.createComponentVNode)(2,c.Section,{title:"Air Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[n.length>0&&(0,o.createFragment)([n.map((function(e){var t=a[e.danger_level]||a[0];return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e.name,color:t.color,children:[(0,r.toFixed)(e.value,2),e.unit]},e.name)})),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Local status",color:l.color,children:l.localStatusText}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Area status",color:t.atmos_alarm||t.fire_alarm?"bad":"good",children:(t.atmos_alarm?"Atmosphere Alarm":t.fire_alarm&&"Fire Alarm")||"Nominal"})],0)||(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Warning",color:"bad",children:"Cannot obtain air sample for analysis."}),!!t.emagged&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Warning",color:"bad",children:"Safety measures offline. Device may exhibit abnormal behavior."})]})})},d={home:{title:"Air Controls",component:function(){return f}},vents:{title:"Vent Controls",component:function(){return m}},scrubbers:{title:"Scrubber Controls",component:function(){return C}},modes:{title:"Operating Mode",component:function(){return b}},thresholds:{title:"Alarm Thresholds",component:function(){return v}}},p=function(e){var t=e.state,n=(0,i.useBackend)(e),r=n.act,a=n.config,l=d[a.screen]||d.home,u=l.component();return(0,o.createComponentVNode)(2,c.Section,{title:l.title,buttons:"home"!==a.screen&&(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("tgui:view",{screen:"home"})}}),children:(0,o.createComponentVNode)(2,u,{state:t})})},f=function(e){var t=(0,i.useBackend)(e),n=t.act,r=t.data,a=r.mode,l=r.atmos_alarm;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:l?"exclamation-triangle":"exclamation",color:l&&"caution",content:"Area Atmosphere Alarm",onClick:function(){return n(l?"reset":"alarm")}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:3===a?"exclamation-triangle":"exclamation",color:3===a&&"danger",content:"Panic Siphon",onClick:function(){return n("mode",{mode:3===a?1:3})}}),(0,o.createComponentVNode)(2,c.Box,{mt:2}),(0,o.createComponentVNode)(2,c.Button,{icon:"sign-out-alt",content:"Vent Controls",onClick:function(){return n("tgui:view",{screen:"vents"})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:"filter",content:"Scrubber Controls",onClick:function(){return n("tgui:view",{screen:"scrubbers"})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:"cog",content:"Operating Mode",onClick:function(){return n("tgui:view",{screen:"modes"})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:"chart-bar",content:"Alarm Thresholds",onClick:function(){return n("tgui:view",{screen:"thresholds"})}})],4)},m=function(e){var t=e.state,n=(0,i.useBackend)(e).data.vents;return n&&0!==n.length?n.map((function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({state:t},e),e.id_tag))})):"Nothing to show"},h=function(e){var t=e.id_tag,n=e.long_name,r=e.power,l=e.checks,u=e.excheck,s=e.incheck,d=e.direction,p=e.external,f=e.internal,m=e.extdefault,h=e.intdefault,C=(0,i.useBackend)(e).act;return(0,o.createComponentVNode)(2,c.Section,{level:2,title:(0,a.decodeHtmlEntities)(n),buttons:(0,o.createComponentVNode)(2,c.Button,{icon:r?"power-off":"times",selected:r,content:r?"On":"Off",onClick:function(){return C("power",{id_tag:t,val:Number(!r)})}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Mode",children:"release"===d?"Pressurizing":"Releasing"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pressure Regulator",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"sign-in-alt",content:"Internal",selected:s,onClick:function(){return C("incheck",{id_tag:t,val:l})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"sign-out-alt",content:"External",selected:u,onClick:function(){return C("excheck",{id_tag:t,val:l})}})]}),!!s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Internal Target",children:[(0,o.createComponentVNode)(2,c.NumberInput,{value:Math.round(f),unit:"kPa",width:"75px",minValue:0,step:10,maxValue:5066,onChange:function(e,n){return C("set_internal_pressure",{id_tag:t,value:n})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"undo",disabled:h,content:"Reset",onClick:function(){return C("reset_internal_pressure",{id_tag:t})}})]}),!!u&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"External Target",children:[(0,o.createComponentVNode)(2,c.NumberInput,{value:Math.round(p),unit:"kPa",width:"75px",minValue:0,step:10,maxValue:5066,onChange:function(e,n){return C("set_external_pressure",{id_tag:t,value:n})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"undo",disabled:m,content:"Reset",onClick:function(){return C("reset_external_pressure",{id_tag:t})}})]})]})})},C=function(e){var t=e.state,n=(0,i.useBackend)(e).data.scrubbers;return n&&0!==n.length?n.map((function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({state:t},e),e.id_tag))})):"Nothing to show"},g=function(e){var t=e.long_name,n=e.power,r=e.scrubbing,u=e.id_tag,s=e.widenet,d=e.filter_types,p=(0,i.useBackend)(e).act;return(0,o.createComponentVNode)(2,c.Section,{level:2,title:(0,a.decodeHtmlEntities)(t),buttons:(0,o.createComponentVNode)(2,c.Button,{icon:n?"power-off":"times",content:n?"On":"Off",selected:n,onClick:function(){return p("power",{id_tag:u,val:Number(!n)})}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Mode",children:[(0,o.createComponentVNode)(2,c.Button,{icon:r?"filter":"sign-in-alt",color:r||"danger",content:r?"Scrubbing":"Siphoning",onClick:function(){return p("scrubbing",{id_tag:u,val:Number(!r)})}}),(0,o.createComponentVNode)(2,c.Button,{icon:s?"expand":"compress",selected:s,content:s?"Expanded range":"Normal range",onClick:function(){return p("widenet",{id_tag:u,val:Number(!s)})}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Filters",children:r&&d.map((function(e){return(0,o.createComponentVNode)(2,c.Button,{icon:e.enabled?"check-square-o":"square-o",content:(0,l.getGasLabel)(e.gas_id,e.gas_name),title:e.gas_name,selected:e.enabled,onClick:function(){return p("toggle_filter",{id_tag:u,val:e.gas_id})}},e.gas_id)}))||"N/A"})]})})},b=function(e){var t=(0,i.useBackend)(e),n=t.act,r=t.data.modes;return r&&0!==r.length?r.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:e.selected?"check-square-o":"square-o",selected:e.selected,color:e.selected&&e.danger&&"danger",content:e.name,onClick:function(){return n("mode",{mode:e.mode})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1})],4,e.mode)})):"Nothing to show"},v=function(e){var t=(0,i.useBackend)(e),n=t.act,a=t.data.thresholds;return(0,o.createVNode)(1,"table","LabeledList",[(0,o.createVNode)(1,"thead",null,(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td"),(0,o.createVNode)(1,"td","color-bad","min2",16),(0,o.createVNode)(1,"td","color-average","min1",16),(0,o.createVNode)(1,"td","color-average","max1",16),(0,o.createVNode)(1,"td","color-bad","max2",16)],4),2),(0,o.createVNode)(1,"tbody",null,a.map((function(e){return(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td","LabeledList__label",e.name,0),e.settings.map((function(e){return(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,c.Button,{content:(0,r.toFixed)(e.selected,2),onClick:function(){return n("threshold",{env:e.env,"var":e.val})}}),2,null,e.val)}))],0,null,e.name)})),0)],4,{style:{width:"100%"}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockElectronics=void 0;var o=n(1),r=n(3),a=n(2);t.AirlockElectronics=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.regions||[],l={0:{icon:"times-circle"},1:{icon:"stop-circle"},2:{icon:"check-circle"}};return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Main",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access Required",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.oneAccess?"unlock":"lock",content:i.oneAccess?"One":"All",onClick:function(){return n("one_access")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mass Modify",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"check-double",content:"Grant All",onClick:function(){return n("grant_all")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"Clear All",onClick:function(){return n("clear_all")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unrestricted Access",children:[(0,o.createComponentVNode)(2,a.Button,{icon:1&i.unres_direction?"check-square-o":"square-o",content:"North",selected:1&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"1"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:2&i.unres_direction?"check-square-o":"square-o",content:"East",selected:2&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"2"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:4&i.unres_direction?"check-square-o":"square-o",content:"South",selected:4&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"4"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:8&i.unres_direction?"check-square-o":"square-o",content:"West",selected:8&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"8"})}})]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Access",children:(0,o.createComponentVNode)(2,a.Box,{height:"261px",children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:c.map((function(e){var t=e.name,r=e.accesses||[],i=l[function(e){var t=!1,n=!1;return e.forEach((function(e){e.req?t=!0:n=!0})),!t&&n?0:t&&n?1:2}(r)].icon;return(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:i,label:t,children:function(){return r.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{icon:e.req?"check-square-o":"square-o",content:e.name,selected:e.req,onClick:function(){return n("set",{access:e.id})}})},e.id)}))}},t)}))})})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.Apc=void 0;var o=n(1),r=n(3),a=n(2),i=n(69);t.Apc=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.locked&&!c.siliconUser,u={2:{color:"good",externalPowerText:"External Power",chargingText:"Fully Charged"},1:{color:"average",externalPowerText:"Low External Power",chargingText:"Charging"},0:{color:"bad",externalPowerText:"No External Power",chargingText:"Not Charging"}},s={1:{icon:"terminal",content:"Override Programming",action:"hack"},2:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"},3:{icon:"caret-square-left",content:"Return to Main Core",action:"deoccupy"},4:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"}},d=u[c.externalPower]||u[0],p=u[c.chargingStatus]||u[0],f=c.powerChannels||[],m=s[c.malfStatus]||s[0],h=c.powerCellStatus/100;return c.failTime>0?(0,o.createComponentVNode)(2,a.NoticeBox,{children:[(0,o.createVNode)(1,"b",null,(0,o.createVNode)(1,"h3",null,"SYSTEM FAILURE",16),2),(0,o.createVNode)(1,"i",null,"I/O regulators malfunction detected! Waiting for system reboot...",16),(0,o.createVNode)(1,"br"),"Automatic reboot in ",c.failTime," seconds...",(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reboot Now",onClick:function(){return n("reboot")}})]}):(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox,{siliconUser:c.siliconUser,locked:c.locked,onLockStatusChange:function(){return n("lock")}}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main Breaker",color:d.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.isOperating?"power-off":"times",content:c.isOperating?"On":"Off",selected:c.isOperating&&!l,disabled:l,onClick:function(){return n("breaker")}}),children:["[ ",d.externalPowerText," ]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power Cell",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:"good",value:h})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",color:p.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.chargeMode?"sync":"close",content:c.chargeMode?"Auto":"Off",disabled:l,onClick:function(){return n("charge")}}),children:["[ ",p.chargingText," ]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Channels",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[f.map((function(e){var t=e.topicParams;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{inline:!0,mx:2,color:e.status>=2?"good":"bad",children:e.status>=2?"On":"Off"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:!l&&(1===e.status||3===e.status),disabled:l,onClick:function(){return n("channel",t.auto)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:"On",selected:!l&&2===e.status,disabled:l,onClick:function(){return n("channel",t.on)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:!l&&0===e.status,disabled:l,onClick:function(){return n("channel",t.off)}})],4),children:e.powerLoad},e.title)})),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Load",children:(0,o.createVNode)(1,"b",null,c.totalLoad,0)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Misc",buttons:!!c.siliconUser&&(0,o.createFragment)([!!c.malfStatus&&(0,o.createComponentVNode)(2,a.Button,{icon:m.icon,content:m.content,color:"bad",onClick:function(){return n(m.action)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:"Overload",onClick:function(){return n("overload")}})],0),children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.coverLocked?"lock":"unlock",content:c.coverLocked?"Engaged":"Disengaged",disabled:l,onClick:function(){return n("cover")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Lighting",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:c.emergencyLights?"Enabled":"Disabled",disabled:l,onClick:function(){return n("emergency_lighting")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Night Shift Lighting",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:c.nightshiftLights?"Enabled":"Disabled",disabled:l,onClick:function(){return n("toggle_nightshift")}})})]})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosAlertConsole=void 0;var o=n(1),r=n(3),a=n(2);t.AtmosAlertConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.priority||[],l=i.minor||[];return(0,o.createComponentVNode)(2,a.Section,{title:"Alarms",children:(0,o.createVNode)(1,"ul",null,[c.length>0?c.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"bad",onClick:function(){return n("clear",{zone:e})}}),2,null,e)})):(0,o.createVNode)(1,"li","color-good","No Priority Alerts",16),l.length>0?l.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"average",onClick:function(){return n("clear",{zone:e})}}),2,null,e)})):(0,o.createVNode)(1,"li","color-good","No Minor Alerts",16)],0)})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosControlConsole=void 0;var o=n(1),r=n(28),a=n(20),i=n(3),c=n(2);t.AtmosControlConsole=function(e){var t=(0,i.useBackend)(e),n=t.act,l=t.data,u=l.sensors||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:!!l.tank&&u[0].long_name,children:u.map((function(e){var t=e.gases||{};return(0,o.createComponentVNode)(2,c.Section,{title:!l.tank&&e.long_name,level:2,children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pressure",children:(0,a.toFixed)(e.pressure,2)+" kPa"}),!!e.temperature&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:(0,a.toFixed)(e.temperature,2)+" K"}),(0,r.map)((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:t,children:(0,a.toFixed)(e,2)+"%"})}))(t)]})},e.id_tag)}))}),l.tank&&(0,o.createComponentVNode)(2,c.Section,{title:"Controls",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"undo",content:"Reconnect",onClick:function(){return n("reconnect")}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Input Injector",children:(0,o.createComponentVNode)(2,c.Button,{icon:l.inputting?"power-off":"times",content:l.inputting?"Injecting":"Off",selected:l.inputting,onClick:function(){return n("input")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Input Rate",children:(0,o.createComponentVNode)(2,c.NumberInput,{value:l.inputRate,unit:"L/s",width:"63px",minValue:0,maxValue:200,suppressFlicker:2e3,onChange:function(e,t){return n("rate",{rate:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Output Regulator",children:(0,o.createComponentVNode)(2,c.Button,{icon:l.outputting?"power-off":"times",content:l.outputting?"Open":"Closed",selected:l.outputting,onClick:function(){return n("output")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Output Pressure",children:(0,o.createComponentVNode)(2,c.NumberInput,{value:parseFloat(l.outputPressure),unit:"kPa",width:"75px",minValue:0,maxValue:4500,step:10,suppressFlicker:2e3,onChange:function(e,t){return n("pressure",{pressure:t})}})})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosFilter=void 0;var o=n(1),r=n(3),a=n(2),i=n(37);t.AtmosFilter=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.filter_types||[];return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:c.on?"power-off":"times",content:c.on?"On":"Off",selected:c.on,onClick:function(){return n("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transfer Rate",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(c.rate),width:"63px",unit:"L/s",minValue:0,maxValue:200,onDrag:function(e,t){return n("rate",{rate:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:c.rate===c.max_rate,onClick:function(){return n("rate",{rate:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Filter",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{selected:e.selected,content:(0,i.getGasLabel)(e.id,e.name),onClick:function(){return n("filter",{mode:e.id})}},e.id)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosMixer=void 0;var o=n(1),r=n(3),a=n(2);t.AtmosMixer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.on?"power-off":"times",content:i.on?"On":"Off",selected:i.on,onClick:function(){return n("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Pressure",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.set_pressure),unit:"kPa",width:"75px",minValue:0,maxValue:4500,step:10,onChange:function(e,t){return n("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:i.set_pressure===i.max_pressure,onClick:function(){return n("pressure",{pressure:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Node 1",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:i.node1_concentration,unit:"%",width:"60px",minValue:0,maxValue:100,stepPixelSize:2,onDrag:function(e,t){return n("node1",{concentration:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Node 2",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:i.node2_concentration,unit:"%",width:"60px",minValue:0,maxValue:100,stepPixelSize:2,onDrag:function(e,t){return n("node2",{concentration:t})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosPump=void 0;var o=n(1),r=n(3),a=n(2);t.AtmosPump=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.on?"power-off":"times",content:i.on?"On":"Off",selected:i.on,onClick:function(){return n("power")}})}),i.max_rate?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transfer Rate",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.rate),width:"63px",unit:"L/s",minValue:0,maxValue:200,onChange:function(e,t){return n("rate",{rate:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:i.rate===i.max_rate,onClick:function(){return n("rate",{rate:"max"})}})]}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Pressure",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.pressure),unit:"kPa",width:"75px",minValue:0,maxValue:4500,step:10,onChange:function(e,t){return n("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:i.pressure===i.max_pressure,onClick:function(){return n("pressure",{pressure:"max"})}})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BankMachine=void 0;var o=n(1),r=n(3),a=n(2);t.BankMachine=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.current_balance,l=i.siphoning,u=i.station_name;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:u+" Vault",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Balance",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l?"times":"sync",content:l?"Stop Siphoning":"Siphon Credits",selected:l,onClick:function(){return n(l?"halt":"siphon")}}),children:c+" cr"})})}),(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Authorized personnel only"})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.BluespaceArtillery=void 0;var o=n(1),r=n(3),a=n(2);t.BluespaceArtillery=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.notice,l=i.connected,u=i.unlocked,s=i.target;return(0,o.createFragment)([!!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:c}),l?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Target",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"crosshairs",disabled:!u,onClick:function(){return n("recalibrate")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:s?"average":"bad",fontSize:"25px",children:s||"No Target Set"})}),(0,o.createComponentVNode)(2,a.Section,{children:u?(0,o.createComponentVNode)(2,a.Box,{style:{margin:"auto"},children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"FIRE",color:"bad",disabled:!s,fontSize:"30px",textAlign:"center",lineHeight:"46px",onClick:function(){return n("fire")}})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"bad",fontSize:"18px",children:"Bluespace artillery is currently locked."}),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:"Awaiting authorization via keycard reader from at minimum two station heads."})],4)})],4):(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance",children:(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",content:"Complete Deployment",onClick:function(){return n("build")}})})})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.Bepis=void 0;var o=n(1),r=(n(31),n(19)),a=n(2);t.Bepis=function(e){var t=e.state,n=t.config,i=t.data,c=n.ref,l=i.amount;return(0,o.createComponentVNode)(2,a.Section,{title:"Business Exploration Protocol Incubation Sink",children:[(0,o.createComponentVNode)(2,a.Section,{title:"Information",backgroundColor:"#450F44",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:i.manual_power?"Off":"On",selected:!i.manual_power,onClick:function(){return(0,r.act)(c,"toggle_power")}}),children:"All you need to know about the B.E.P.I.S. and you! The B.E.P.I.S. performs hundreds of tests a second using electrical and financial resources to invent new products, or discover new technologies otherwise overlooked for being too risky or too niche to produce!"}),(0,o.createComponentVNode)(2,a.Section,{title:"Payer's Account",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"redo-alt",content:"Reset Account",onClick:function(){return(0,r.act)(c,"account_reset")}}),children:["Console is currently being operated by ",i.account_owner?i.account_owner:"no one","."]}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{size:1.5,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored Data and Statistics",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Deposited Credits",children:i.stored_cash}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Investment Variability",children:[i.accuracy_percentage,"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Innovation Bonus",children:i.positive_cash_offset}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Risk Offset",color:"bad",children:i.negative_cash_offset}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Deposit Amount",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:l,unit:"Credits",minValue:100,maxValue:3e4,step:100,stepPixelSize:2,onChange:function(e,t){return(0,r.act)(c,"amount",{amount:t})}})})]})}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"donate",content:"Deposit Credits",disabled:1===i.manual_power||1===i.silicon_check,onClick:function(){return(0,r.act)(c,"deposit_cash")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Withdraw Credits",disabled:1===i.manual_power,onClick:function(){return(0,r.act)(c,"withdraw_cash")}})]})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Market Data and Analysis",children:[(0,o.createComponentVNode)(2,a.Box,{children:["Average technology cost: ",i.mean_value]}),i.error_name&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Previous Failure Reason: Deposited cash value too low. Please insert more money for future success."}),(0,o.createComponentVNode)(2,a.Box,{m:1}),(0,o.createComponentVNode)(2,a.Button,{icon:"microscope",disabled:1===i.manual_power,onClick:function(){return(0,r.act)(c,"begin_experiment")},content:"Begin Testing"})]})})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.BorgPanel=void 0;var o=n(1),r=n(3),a=n(2);t.BorgPanel=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.borg||{},l=i.cell||{},u=l.charge/l.maxcharge,s=i.channels||[],d=i.modules||[],p=i.upgrades||[],f=i.ais||[],m=i.laws||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:c.name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return n("rename")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Button,{icon:c.emagged?"check-square-o":"square-o",content:"Emagged",selected:c.emagged,onClick:function(){return n("toggle_emagged")}}),(0,o.createComponentVNode)(2,a.Button,{icon:c.lockdown?"check-square-o":"square-o",content:"Locked Down",selected:c.lockdown,onClick:function(){return n("toggle_lockdown")}}),(0,o.createComponentVNode)(2,a.Button,{icon:c.scrambledcodes?"check-square-o":"square-o",content:"Scrambled Codes",selected:c.scrambledcodes,onClick:function(){return n("toggle_scrambledcodes")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge",children:[l.missing?(0,o.createVNode)(1,"span","color-bad","No cell installed",16):(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,content:l.charge+" / "+l.maxcharge}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Set",onClick:function(){return n("set_charge")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Change",onClick:function(){return n("change_cell")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",content:"Remove",color:"bad",onClick:function(){return n("remove_cell")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Radio Channels",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return n("toggle_radio",{channel:e.name})}},e.name)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Module",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:c.active_module===e.type?"check-square-o":"square-o",content:e.name,selected:c.active_module===e.type,onClick:function(){return n("setmodule",{module:e.type})}},e.type)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Upgrades",children:p.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return n("toggle_upgrade",{upgrade:e.type})}},e.type)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Master AI",children:f.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.connected?"check-square-o":"square-o",content:e.name,selected:e.connected,onClick:function(){return n("slavetoai",{slavetoai:e.ref})}},e.ref)}))})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Laws",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.lawupdate?"check-square-o":"square-o",content:"Lawsync",selected:c.lawupdate,onClick:function(){return n("toggle_lawupdate")}}),children:m.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e},e)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigTimer=void 0;var o=n(1),r=n(3),a=n(2);t.BrigTimer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{title:"Cell Timer",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"clock-o",content:i.timing?"Stop":"Start",selected:i.timing,onClick:function(){return n(i.timing?"stop":"start")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:i.flash_charging?"Recharging":"Flash",disabled:i.flash_charging,onClick:function(){return n("flash")}})],4),children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",onClick:function(){return n("time",{adjust:-600})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",onClick:function(){return n("time",{adjust:-100})}})," ",String(i.minutes).padStart(2,"0"),":",String(i.seconds).padStart(2,"0")," ",(0,o.createComponentVNode)(2,a.Button,{icon:"forward",onClick:function(){return n("time",{adjust:100})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",onClick:function(){return n("time",{adjust:600})}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"hourglass-start",content:"Short",onClick:function(){return n("preset",{preset:"short"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"hourglass-start",content:"Medium",onClick:function(){return n("preset",{preset:"medium"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"hourglass-start",content:"Long",onClick:function(){return n("preset",{preset:"long"})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Canister=void 0;var o=n(1),r=n(3),a=n(2);t.Canister=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{children:["The regulator ",i.hasHoldingTank?"is":"is not"," connected to a tank."]}),(0,o.createComponentVNode)(2,a.Section,{title:"Canister",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Relabel",onClick:function(){return n("relabel")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.tankPressure})," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Port",color:i.portConnected?"good":"average",content:i.portConnected?"Connected":"Not Connected"}),!!i.isPrototype&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.restricted?"lock":"unlock",color:"caution",content:i.restricted?"Restricted to Engineering":"Public",onClick:function(){return n("restricted")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Valve",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Release Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.releasePressure/(i.maxReleasePressure-i.minReleasePressure),children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.releasePressure})," kPa"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure Regulator",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"undo",disabled:i.releasePressure===i.defaultReleasePressure,content:"Reset",onClick:function(){return n("pressure",{pressure:"reset"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",disabled:i.releasePressure<=i.minReleasePressure,content:"Min",onClick:function(){return n("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Set",onClick:function(){return n("pressure",{pressure:"input"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",disabled:i.releasePressure>=i.maxReleasePressure,content:"Max",onClick:function(){return n("pressure",{pressure:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Valve",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.valveOpen?"unlock":"lock",color:i.valveOpen?i.hasHoldingTank?"caution":"danger":null,content:i.valveOpen?"Open":"Closed",onClick:function(){return n("valve")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",buttons:!!i.hasHoldingTank&&(0,o.createComponentVNode)(2,a.Button,{icon:"eject",color:i.valveOpen&&"danger",content:"Eject",onClick:function(){return n("eject")}}),children:[!!i.hasHoldingTank&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:i.holdingTank.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.holdingTank.tankPressure})," kPa"]})]}),!i.hasHoldingTank&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No Holding Tank"})]})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.CargoExpress=t.Cargo=void 0;var o=n(1),r=n(28),a=n(19),i=n(2),c=n(69);t.Cargo=function(e){var t=e.state,n=t.config,r=t.data,c=n.ref,d=r.supplies||{},p=r.requests||[],f=r.cart||[],m=f.reduce((function(e,t){return e+t.cost}),0),h=!r.requestonly&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{inline:!0,mx:1,children:[0===f.length&&"Cart is empty",1===f.length&&"1 item",f.length>=2&&f.length+" items"," ",m>0&&"("+m+" cr)"]}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",color:"transparent",content:"Clear",onClick:function(){return(0,a.act)(c,"clear")}})],4);return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Cargo",buttons:(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:Math.round(r.points)})," credits"]}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle",children:r.docked&&!r.requestonly&&(0,o.createComponentVNode)(2,i.Button,{content:r.location,onClick:function(){return(0,a.act)(c,"send")}})||r.location}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"CentCom Message",children:r.message}),r.loan&&!r.requestonly?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Loan",children:r.loan_dispatched?(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Loaned to Centcom"}):(0,o.createComponentVNode)(2,i.Button,{content:"Loan Shuttle",disabled:!(r.away&&r.docked),onClick:function(){return(0,a.act)(c,"loan")}})}):""]})}),(0,o.createComponentVNode)(2,i.Tabs,{mt:2,children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Catalog",icon:"list",lineHeight:"23px",children:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Catalog",buttons:h,children:(0,o.createComponentVNode)(2,l,{state:t,supplies:d})})}},"catalog"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Requests ("+p.length+")",icon:"envelope",highlight:p.length>0,lineHeight:"23px",children:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Active Requests",buttons:!r.requestonly&&(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Clear",color:"transparent",onClick:function(){return(0,a.act)(c,"denyall")}}),children:(0,o.createComponentVNode)(2,u,{state:t,requests:p})})}},"requests"),!r.requestonly&&(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Checkout ("+f.length+")",icon:"shopping-cart",highlight:f.length>0,lineHeight:"23px",children:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Current Cart",buttons:h,children:(0,o.createComponentVNode)(2,s,{state:t,cart:f})})}},"cart")]})],4)};var l=function(e){var t=e.state,n=e.supplies,c=t.config,l=t.data,u=c.ref,s=function(e){var t=n[e].packs;return(0,o.createVNode)(1,"table","LabeledList",t.map((function(e){return(0,o.createVNode)(1,"tr","LabeledList__row candystripe",[(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__label",[e.name,(0,o.createTextVNode)(":")],0),(0,o.createVNode)(1,"td","LabeledList__cell",!!e.small_item&&(0,o.createFragment)([(0,o.createTextVNode)("Small Item")],4),0),(0,o.createVNode)(1,"td","LabeledList__cell",!!e.access&&(0,o.createFragment)([(0,o.createTextVNode)("Restrictions Apply")],4),0),(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",(0,o.createComponentVNode)(2,i.Button,{fluid:!0,content:(l.self_paid?Math.round(1.1*e.cost):e.cost)+" credits",tooltip:e.desc,tooltipPosition:"left",onClick:function(){return(0,a.act)(u,"add",{id:e.id})}}),2)],4,null,e.name)})),0)};return(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:(0,r.map)((function(e){var t=e.name;return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:t,children:s},t)}))(n)})},u=function(e){var t=e.state,n=e.requests,r=t.config,c=t.data,l=r.ref;return 0===n.length?(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"No Requests"}):(0,o.createVNode)(1,"table","LabeledList",n.map((function(e){return(0,o.createFragment)([(0,o.createVNode)(1,"tr","LabeledList__row candystripe",[(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__label",[(0,o.createTextVNode)("#"),e.id,(0,o.createTextVNode)(":")],0),(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__content",e.object,0),(0,o.createVNode)(1,"td","LabeledList__cell",[(0,o.createTextVNode)("By "),(0,o.createVNode)(1,"b",null,e.orderer,0)],4),(0,o.createVNode)(1,"td","LabeledList__cell",(0,o.createVNode)(1,"i",null,e.reason,0),2),(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",[e.cost,(0,o.createTextVNode)(" credits"),(0,o.createTextVNode)(" "),!c.requestonly&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"check",color:"good",onClick:function(){return(0,a.act)(l,"approve",{id:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",color:"bad",onClick:function(){return(0,a.act)(l,"deny",{id:e.id})}})],4)],0)],4)],4,e.id)})),0)},s=function(e){var t=e.state,n=e.cart,r=t.config,c=t.data,l=r.ref;return(0,o.createFragment)([0===n.length&&"Nothing in cart",n.length>0&&(0,o.createComponentVNode)(2,i.LabeledList,{children:n.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{className:"candystripe",label:"#"+e.id,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{inline:!0,mx:2,children:[!!e.paid&&(0,o.createVNode)(1,"b",null,"[Paid Privately]",16)," ",e.cost," credits"]}),(0,o.createComponentVNode)(2,i.Button,{icon:"minus",onClick:function(){return(0,a.act)(l,"remove",{id:e.id})}})],4),children:e.object},e.id)}))}),n.length>0&&!c.requestonly&&(0,o.createComponentVNode)(2,i.Box,{mt:2,children:1===c.away&&1===c.docked&&(0,o.createComponentVNode)(2,i.Button,{color:"green",style:{"line-height":"28px",padding:"0 12px"},content:"Confirm the order",onClick:function(){return(0,a.act)(l,"send")}})||(0,o.createComponentVNode)(2,i.Box,{opacity:.5,children:["Shuttle in ",c.location,"."]})})],0)};t.CargoExpress=function(e){var t=e.state,n=t.config,r=t.data,u=n.ref,s=r.supplies||{};return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.InterfaceLockNoticeBox,{siliconUser:r.siliconUser,locked:r.locked,onLockStatusChange:function(){return(0,a.act)(u,"lock")},accessText:"a QM-level ID card"}),!r.locked&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Cargo Express",buttons:(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:Math.round(r.points)})," credits"]}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Landing Location",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Cargo Bay",selected:!r.usingBeacon,onClick:function(){return(0,a.act)(u,"LZCargo")}}),(0,o.createComponentVNode)(2,i.Button,{selected:r.usingBeacon,disabled:!r.hasBeacon,onClick:function(){return(0,a.act)(u,"LZBeacon")},children:[r.beaconzone," (",r.beaconName,")"]}),(0,o.createComponentVNode)(2,i.Button,{content:r.printMsg,disabled:!r.canBuyBeacon,onClick:function(){return(0,a.act)(u,"printBeacon")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Notice",children:r.message})]})}),(0,o.createComponentVNode)(2,l,{state:t,supplies:s})],4)],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.CellularEmporium=void 0;var o=n(1),r=n(3),a=n(2);t.CellularEmporium=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.abilities;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Genetic Points",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"Readapt",disabled:!i.can_readapt,onClick:function(){return n("readapt")}}),children:i.genetic_points_remaining})})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:c.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{className:"candystripe",label:e.name,buttons:(0,o.createFragment)([e.dna_cost," ",(0,o.createComponentVNode)(2,a.Button,{content:e.owned?"Evolved":"Evolve",selected:e.owned,onClick:function(){return n("evolve",{name:e.name})}})],0),children:[e.desc,(0,o.createComponentVNode)(2,a.Box,{color:"good",children:e.helptext})]},e.name)}))})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.CentcomPodLauncher=void 0;var o=n(1),r=(n(31),n(3)),a=n(2);t.CentcomPodLauncher=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{children:"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."}),(0,o.createComponentVNode)(2,a.Section,{title:"Centcom Pod Customization (To be used against Helen Weinstein)",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Supply Bay",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Bay #1",selected:1===i.bayNumber,onClick:function(){return n("bay1")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Bay #2",selected:2===i.bayNumber,onClick:function(){return n("bay2")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Bay #3",selected:3===i.bayNumber,onClick:function(){return n("bay3")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Bay #4",selected:4===i.bayNumber,onClick:function(){return n("bay4")}}),(0,o.createComponentVNode)(2,a.Button,{content:"ERT Bay",selected:5===i.bayNumber,tooltip:"This bay is located on the western edge of CentCom. Its the\nglass room directly west of where ERT spawn, and south of the\nCentCom ferry. Useful for launching ERT/Deathsquads/etc. onto\nthe station via drop pods.",onClick:function(){return n("bay5")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Teleport to",children:[(0,o.createComponentVNode)(2,a.Button,{content:i.bay,onClick:function(){return n("teleportCentcom")}}),(0,o.createComponentVNode)(2,a.Button,{content:i.oldArea?i.oldArea:"Where you were",disabled:!i.oldArea,onClick:function(){return n("teleportBack")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Clone Mode",children:(0,o.createComponentVNode)(2,a.Button,{content:"Launch Clones",selected:i.launchClone,tooltip:"Choosing this will create a duplicate of the item to be\nlaunched in Centcom, allowing you to send one type of item\nmultiple times. Either way, the atoms are forceMoved into\nthe supplypod after it lands (but before it opens).",onClick:function(){return n("launchClone")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Launch style",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Ordered",selected:1===i.launchChoice,tooltip:'Instead of launching everything in the bay at once, this\nwill "scan" things (one turf-full at a time) in order, left\nto right and top to bottom. undoing will reset the "scanner"\nto the top-leftmost position.',onClick:function(){return n("launchOrdered")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Random",selected:2===i.launchChoice,tooltip:"Instead of launching everything in the bay at once, this\nwill launch one random turf of items at a time.",onClick:function(){return n("launchRandom")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Explosion",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Size",selected:1===i.explosionChoice,tooltip:"This will cause an explosion of whatever size you like\n(including flame range) to occur as soon as the supplypod\nlands. Dont worry, supply-pods are explosion-proof!",onClick:function(){return n("explosionCustom")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Adminbus",selected:2===i.explosionChoice,tooltip:"This will cause a maxcap explosion (dependent on server\nconfig) to occur as soon as the supplypod lands. Dont worry,\nsupply-pods are explosion-proof!",onClick:function(){return n("explosionBus")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Damage",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Damage",selected:1===i.damageChoice,tooltip:"Anyone caught under the pod when it lands will be dealt\nthis amount of brute damage. Sucks to be them!",onClick:function(){return n("damageCustom")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Gib",selected:2===i.damageChoice,tooltip:"This will attempt to gib any mob caught under the pod when\nit lands, as well as dealing a nice 5000 brute damage. Ya\nknow, just to be sure!",onClick:function(){return n("damageGib")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Effects",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Stun",selected:i.effectStun,tooltip:"Anyone who is on the turf when the supplypod is launched\nwill be stunned until the supplypod lands. They cant get\naway that easy!",onClick:function(){return n("effectStun")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Delimb",selected:i.effectLimb,tooltip:"This will cause anyone caught under the pod to lose a limb,\nexcluding their head.",onClick:function(){return n("effectLimb")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Yeet Organs",selected:i.effectOrgans,tooltip:"This will cause anyone caught under the pod to lose all\ntheir limbs and organs in a spectacular fashion.",onClick:function(){return n("effectOrgans")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Movement",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Bluespace",selected:i.effectBluespace,tooltip:"Gives the supplypod an advanced Bluespace Recyling Device.\nAfter opening, the supplypod will be warped directly to the\nsurface of a nearby NT-designated trash planet (/r/ss13).",onClick:function(){return n("effectBluespace")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Stealth",selected:i.effectStealth,tooltip:'This hides the red target icon from appearing when you\nlaunch the supplypod. Combos well with the "Invisible"\nstyle. Sneak attack, go!',onClick:function(){return n("effectStealth")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Quiet",selected:i.effectQuiet,tooltip:"This will keep the supplypod from making any sounds, except\nfor those specifically set by admins in the Sound section.",onClick:function(){return n("effectQuiet")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Reverse Mode",selected:i.effectReverse,tooltip:"This pod will not send any items. Instead, after landing,\nthe supplypod will close (similar to a normal closet closing),\nand then launch back to the right centcom bay to drop off any\nnew contents.",onClick:function(){return n("effectReverse")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Missile Mode",selected:i.effectMissile,tooltip:"This pod will not send any items. Instead, it will immediately\ndelete after landing (Similar visually to setting openDelay\n& departDelay to 0, but this looks nicer). Useful if you just\nwanna fuck some shit up. Combos well with the Missile style.",onClick:function(){return n("effectMissile")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Any Descent Angle",selected:i.effectCircle,tooltip:"This will make the supplypod come in from any angle. Im not\nsure why this feature exists, but here it is.",onClick:function(){return n("effectCircle")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Machine Gun Mode",selected:i.effectBurst,tooltip:"This will make each click launch 5 supplypods inaccuratly\naround the target turf (a 3x3 area). Combos well with the\nMissile Mode if you dont want shit lying everywhere after.",onClick:function(){return n("effectBurst")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Specific Target",selected:i.effectTarget,tooltip:"This will make the supplypod target a specific atom, instead\nof the mouses position. Smiting does this automatically!",onClick:function(){return n("effectTarget")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name/Desc",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Name/Desc",selected:i.effectName,tooltip:"Allows you to add a custom name and description.",onClick:function(){return n("effectName")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Alert Ghosts",selected:i.effectAnnounce,tooltip:"Alerts ghosts when a pod is launched. Useful if some dumb\nshit is aboutta come outta the pod.",onClick:function(){return n("effectAnnounce")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sound",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Falling Sound",selected:i.fallingSound,tooltip:"Choose a sound to play as the pod falls. Note that for this\nto work right you should know the exact length of the sound,\nin seconds.",onClick:function(){return n("fallSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Landing Sound",selected:i.landingSound,tooltip:"Choose a sound to play when the pod lands.",onClick:function(){return n("landingSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Opening Sound",selected:i.openingSound,tooltip:"Choose a sound to play when the pod opens.",onClick:function(){return n("openingSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Leaving Sound",selected:i.leavingSound,tooltip:"Choose a sound to play when the pod departs (whether that be\ndelection in the case of a bluespace pod, or leaving for\ncentcom for a reversing pod).",onClick:function(){return n("leavingSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Admin Sound Volume",selected:i.soundVolume,tooltip:"Choose the volume for the sound to play at. Default values\nare between 1 and 100, but hey, do whatever. Im a tooltip,\nnot a cop.",onClick:function(){return n("soundVolume")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Timers",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Falling Duration",selected:4!==i.fallDuration,tooltip:"Set how long the animation for the pod falling lasts. Create\ndramatic, slow falling pods!",onClick:function(){return n("fallDuration")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Landing Time",selected:20!==i.landingDelay,tooltip:"Choose the amount of time it takes for the supplypod to hit\nthe station. By default this value is 0.5 seconds.",onClick:function(){return n("landingDelay")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Opening Time",selected:30!==i.openingDelay,tooltip:"Choose the amount of time it takes for the supplypod to open\nafter landing. Useful for giving whatevers inside the pod a\nnice dramatic entrance! By default this value is 3 seconds.",onClick:function(){return n("openingDelay")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Leaving Time",selected:30!==i.departureDelay,tooltip:"Choose the amount of time it takes for the supplypod to leave\nafter landing. By default this value is 3 seconds.",onClick:function(){return n("departureDelay")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Style",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.styleChoice,tooltip:"Same color scheme as the normal station-used supplypods",onClick:function(){return n("styleStandard")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:2===i.styleChoice,tooltip:"The same as the stations upgraded blue-and-white\nBluespace Supplypods",onClick:function(){return n("styleBluespace")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Syndicate",selected:4===i.styleChoice,tooltip:"A menacing black and blood-red. Great for sending meme-ops\nin style!",onClick:function(){return n("styleSyndie")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Deathsquad",selected:5===i.styleChoice,tooltip:"A menacing black and dark blue. Great for sending deathsquads\nin style!",onClick:function(){return n("styleBlue")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Cult Pod",selected:6===i.styleChoice,tooltip:"A blood and rune covered cult pod!",onClick:function(){return n("styleCult")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Missile",selected:7===i.styleChoice,tooltip:"A large missile. Combos well with a missile mode, so the\nmissile doesnt stick around after landing.",onClick:function(){return n("styleMissile")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Syndicate Missile",selected:8===i.styleChoice,tooltip:"A large blood-red missile. Combos well with missile mode,\nso the missile doesnt stick around after landing.",onClick:function(){return n("styleSMissile")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Supply Crate",selected:9===i.styleChoice,tooltip:"A large, dark-green military supply crate.",onClick:function(){return n("styleBox")}}),(0,o.createComponentVNode)(2,a.Button,{content:"HONK",selected:10===i.styleChoice,tooltip:"A colorful, clown inspired look.",onClick:function(){return n("styleHONK")}}),(0,o.createComponentVNode)(2,a.Button,{content:"~Fruit",selected:11===i.styleChoice,tooltip:"For when an orange is angry",onClick:function(){return n("styleFruit")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Invisible",selected:12===i.styleChoice,tooltip:'Makes the supplypod invisible! Useful for when you want to\nuse this feature with a gateway or something. Combos well\nwith the "Stealth" and "Quiet Landing" effects.',onClick:function(){return n("styleInvisible")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Gondola",selected:13===i.styleChoice,tooltip:"This gondola can control when he wants to deliver his supplies\nif he has a smart enough mind, so offer up his body to ghosts\nfor maximum enjoyment. (Make sure to turn off bluespace and\nset a arbitrarily high open-time if you do!",onClick:function(){return n("styleGondola")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Show Contents (See Through Pod)",selected:14===i.styleChoice,tooltip:"By selecting this, the pod will instead look like whatevers\ninside it (as if it were the contents falling by themselves,\nwithout a pod). Useful for launching mechs at the station\nand standing tall as they soar in from the heavens.",onClick:function(){return n("styleSeeThrough")}})]})]})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:i.numObjects+" turfs in "+i.bay,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"undo Pody Bay",tooltip:"Manually undoes the possible things to launch in the\npod bay.",onClick:function(){return n("undo")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Enter Launch Mode",selected:i.giveLauncher,tooltip:"THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN",onClick:function(){return n("giveLauncher")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear Selected Bay",color:"bad",tooltip:"This will delete all objs and mobs from the selected bay.",tooltipPosition:"left",onClick:function(){return n("clearBay")}})],4)})})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemAcclimator=void 0;var o=n(1),r=n(3),a=n(2);t.ChemAcclimator=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Acclimator",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Temperature",children:[i.chem_temp," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Temperature",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:i.target_temperature,unit:"K",width:"59px",minValue:0,maxValue:1e3,step:5,stepPixelSize:2,onChange:function(e,t){return n("set_target_temperature",{temperature:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Acceptable Temp. Difference",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:i.allowed_temperature_difference,unit:"K",width:"59px",minValue:1,maxValue:i.target_temperature,stepPixelSize:2,onChange:function(e,t){n("set_allowed_temperature_difference",{temperature:t})}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:i.enabled?"On":"Off",selected:i.enabled,onClick:function(){return n("toggle_power")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:i.max_volume,unit:"u",width:"50px",minValue:i.reagent_volume,maxValue:200,step:2,stepPixelSize:2,onChange:function(e,t){return n("change_volume",{volume:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Operation",children:i.acclimate_state}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current State",children:i.emptying?"Emptying":"Filling"})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemDebugSynthesizer=void 0;var o=n(1),r=n(3),a=n(2);t.ChemDebugSynthesizer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.amount,l=i.beakerCurrentVolume,u=i.beakerMaxVolume,s=i.isBeakerLoaded,d=i.beakerContents,p=void 0===d?[]:d;return(0,o.createComponentVNode)(2,a.Section,{title:"Recipient",buttons:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",onClick:function(){return n("ejectBeaker")}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:c,unit:"u",minValue:1,maxValue:u,step:1,stepPixelSize:2,onChange:function(e,t){return n("amount",{amount:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",content:"Input",onClick:function(){return n("input")}})],4):(0,o.createComponentVNode)(2,a.Button,{icon:"plus",content:"Create Beaker",onClick:function(){return n("makecup")}}),children:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l})," / "+u+" u"]}),p.length>0?(0,o.createComponentVNode)(2,a.LabeledList,{children:p.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:[e.volume," u"]},e.name)}))}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Recipient Empty"})],0):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No Recipient"})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemFilter=t.ChemFilterPane=void 0;var o=n(1),r=n(3),a=n(2);var i=function(e){var t=(0,r.useBackend)(e).act,n=e.title,i=e.list,c=e.reagentName,l=e.onReagentInput,u=n.toLowerCase();return(0,o.createComponentVNode)(2,a.Section,{title:n,minHeight:40,ml:.5,mr:.5,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Input,{placeholder:"Reagent",width:"140px",onInput:function(e,t){return l(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return t("add",{which:u,name:c})}})],4),children:i.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"minus",content:e,onClick:function(){return t("remove",{which:u,reagent:e})}})],4,e)}))})};t.ChemFilterPane=i;var c=function(e){var t,n;function r(){var t;return(t=e.call(this)||this).state={leftReagentName:"",rightReagentName:""},t}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var c=r.prototype;return c.setLeftReagentName=function(e){this.setState({leftReagentName:e})},c.setRightReagentName=function(e){this.setState({rightReagentName:e})},c.render=function(){var e=this,t=this.props.state,n=t.data,r=n.left,c=void 0===r?[]:r,l=n.right,u=void 0===l?[]:l;return(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,i,{title:"Left",list:c,reagentName:this.state.leftReagentName,onReagentInput:function(t){return e.setLeftReagentName(t)},state:t})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,i,{title:"Right",list:u,reagentName:this.state.rightReagentName,onReagentInput:function(t){return e.setRightReagentName(t)},state:t})})]})},r}(o.Component);t.ChemFilter=c},function(e,t,n){"use strict";t.__esModule=!0,t.ChemPress=void 0;var o=n(1),r=n(3),a=n(2);t.ChemPress=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.pill_size,l=i.pill_name,u=i.pill_style,s=i.pill_styles,d=void 0===s?[]:s;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pill Volume",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:c,unit:"u",width:"43px",minValue:5,maxValue:50,step:1,stepPixelSize:2,onChange:function(e,t){return n("change_pill_size",{volume:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pill Name",children:(0,o.createComponentVNode)(2,a.Input,{value:l,onChange:function(e,t){return n("change_pill_name",{name:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pill Style",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{width:5,selected:e.id===u,textAlign:"center",color:"transparent",onClick:function(){return n("change_pill_style",{id:e.id})},children:(0,o.createComponentVNode)(2,a.Box,{mx:-1,className:e.class_name})},e.id)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemReactionChamber=void 0;var o=n(1),r=n(19),a=n(2),i=n(28),c=n(12);var l=function(e){var t,n;function l(){var t;return(t=e.call(this)||this).state={reagentName:"",reagentQuantity:1},t}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=l.prototype;return u.setReagentName=function(e){this.setState({reagentName:e})},u.setReagentQuantity=function(e){this.setState({reagentQuantity:e})},u.render=function(){var e=this,t=this.props.state,n=t.config,l=t.data,u=n.ref,s=l.emptying,d=l.reagents||[];return(0,o.createComponentVNode)(2,a.Section,{title:"Reagents",buttons:(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,color:s?"bad":"good",children:s?"Emptying":"Filling"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createVNode)(1,"tr","LabledList__row",[(0,o.createVNode)(1,"td","LabeledList__cell",(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:"",placeholder:"Reagent Name",onInput:function(t,n){return e.setReagentName(n)}}),2,{colSpan:"2"}),(0,o.createVNode)(1,"td",(0,c.classes)(["LabeledList__buttons","LabeledList__cell"]),[(0,o.createComponentVNode)(2,a.NumberInput,{value:this.state.reagentQuantity,minValue:1,maxValue:100,step:1,stepPixelSize:3,width:"39px",onDrag:function(t,n){return e.setReagentQuantity(n)}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return(0,r.act)(u,"add",{chem:e.state.reagentName,amount:e.state.reagentQuantity})}})],4)],4),(0,i.map)((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"minus",color:"bad",onClick:function(){return(0,r.act)(u,"remove",{chem:t})}}),children:e},t)}))(d)]})})},l}(o.Component);t.ChemReactionChamber=l},function(e,t,n){"use strict";t.__esModule=!0,t.ChemSplitter=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.ChemSplitter=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.straight,u=c.side,s=c.max_transfer;return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Straight",children:(0,o.createComponentVNode)(2,i.NumberInput,{value:l,unit:"u",width:"55px",minValue:1,maxValue:s,format:function(e){return(0,r.toFixed)(e,2)},step:.05,stepPixelSize:4,onChange:function(e,t){return n("set_amount",{target:"straight",amount:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Side",children:(0,o.createComponentVNode)(2,i.NumberInput,{value:u,unit:"u",width:"55px",minValue:1,maxValue:s,format:function(e){return(0,r.toFixed)(e,2)},step:.05,stepPixelSize:4,onChange:function(e,t){return n("set_amount",{target:"side",amount:t})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemSynthesizer=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.ChemSynthesizer=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.amount,u=c.current_reagent,s=c.chemicals,d=void 0===s?[]:s,p=c.possible_amounts,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:"plus",content:(0,r.toFixed)(e,0),selected:e===l,onClick:function(){return n("amount",{target:e})}},(0,r.toFixed)(e,0))}))}),(0,o.createComponentVNode)(2,i.Box,{mt:1,children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:"tint",content:e.title,width:"129px",selected:e.id===u,onClick:function(){return n("select",{reagent:e.id})}},e.id)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.CodexGigas=void 0;var o=n(1),r=n(3),a=n(2);t.CodexGigas=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:[i.name,(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Prefix",children:["Dark","Hellish","Fallen","Fiery","Sinful","Blood","Fluffy"].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:1!==i.currentSection,onClick:function(){return n(e+" ")}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Title",children:["Lord","Prelate","Count","Viscount","Vizier","Elder","Adept"].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:i.currentSection>2,onClick:function(){return n(e+" ")}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:["hal","ve","odr","neit","ci","quon","mya","folth","wren","geyr","hil","niet","twou","phi","coa"].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:i.currentSection>4,onClick:function(){return n(e)}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Suffix",children:["the Red","the Soulless","the Master","the Lord of all things","Jr."].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:4!==i.currentSection,onClick:function(){return n(" "+e)}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Submit",children:(0,o.createComponentVNode)(2,a.Button,{content:"Search",disabled:i.currentSection<4,onClick:function(){return n("search")}})})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ComputerFabricator=void 0;var o=n(1),r=(n(31),n(3)),a=n(2);t.ComputerFabricator=function(e){var t=e.state,n=(0,r.useBackend)(e),c=n.act,l=n.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{italic:!0,fontSize:"20px",children:"Your perfect device, only three steps away..."}),0!==l.state&&(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mb:1,icon:"circle",content:"Clear Order",onClick:function(){return c("clean_order")}}),(0,o.createComponentVNode)(2,i,{state:t})],0)};var i=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return 0===i.state?(0,o.createComponentVNode)(2,a.Section,{title:"Step 1",minHeight:51,children:[(0,o.createComponentVNode)(2,a.Box,{mt:5,bold:!0,textAlign:"center",fontSize:"40px",children:"Choose your Device"}),(0,o.createComponentVNode)(2,a.Box,{mt:3,children:(0,o.createComponentVNode)(2,a.Grid,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"laptop",content:"Laptop",textAlign:"center",fontSize:"30px",lineHeight:"50px",onClick:function(){return n("pick_device",{pick:"1"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"tablet-alt",content:"Tablet",textAlign:"center",fontSize:"30px",lineHeight:"50px",onClick:function(){return n("pick_device",{pick:"2"})}})})]})})]}):1===i.state?(0,o.createComponentVNode)(2,a.Section,{title:"Step 2: Customize your device",minHeight:47,buttons:(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"good",children:[i.totalprice," cr"]}),children:[(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Battery:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Allows your device to operate without external utility power\nsource. Advanced batteries increase battery life.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_battery,onClick:function(){return n("hw_battery",{battery:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Upgraded",selected:2===i.hw_battery,onClick:function(){return n("hw_battery",{battery:"2"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:3===i.hw_battery,onClick:function(){return n("hw_battery",{battery:"3"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Hard Drive:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Stores file on your device. Advanced drives can store more\nfiles, but use more power, shortening battery life.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_disk,onClick:function(){return n("hw_disk",{disk:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Upgraded",selected:2===i.hw_disk,onClick:function(){return n("hw_disk",{disk:"2"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:3===i.hw_disk,onClick:function(){return n("hw_disk",{disk:"3"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Network Card:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Allows your device to wirelessly connect to stationwide NTNet\nnetwork. Basic cards are limited to on-station use, while\nadvanced cards can operate anywhere near the station, which\nincludes asteroid outposts",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_netcard,onClick:function(){return n("hw_netcard",{netcard:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_netcard,onClick:function(){return n("hw_netcard",{netcard:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:2===i.hw_netcard,onClick:function(){return n("hw_netcard",{netcard:"2"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Nano Printer:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"A device that allows for various paperwork manipulations,\nsuch as, scanning of documents or printing new ones.\nThis device was certified EcoFriendlyPlus and is capable of\nrecycling existing paper for printing purposes.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_nanoprint,onClick:function(){return n("hw_nanoprint",{print:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_nanoprint,onClick:function(){return n("hw_nanoprint",{print:"1"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Card Reader:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Adds a slot that allows you to manipulate RFID cards.\nPlease note that this is not necessary to allow the device\nto read your identification, it is just necessary to\nmanipulate other cards.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_card,onClick:function(){return n("hw_card",{card:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_card,onClick:function(){return n("hw_card",{card:"1"})}})})]}),2!==i.devtype&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Processor Unit:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"A component critical for your device's functionality.\nIt allows you to run programs from your hard drive.\nAdvanced CPUs use more power, but allow you to run\nmore programs on background at once.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_cpu,onClick:function(){return n("hw_cpu",{cpu:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:2===i.hw_cpu,onClick:function(){return n("hw_cpu",{cpu:"2"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Tesla Relay:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"An advanced wireless power relay that allows your device\nto connect to nearby area power controller to provide\nalternative power source. This component is currently\nunavailable on tablet computers due to size restrictions.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_tesla,onClick:function(){return n("hw_tesla",{tesla:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_tesla,onClick:function(){return n("hw_tesla",{tesla:"1"})}})})]})],4)]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:3,content:"Confirm Order",color:"good",textAlign:"center",fontSize:"18px",lineHeight:"26px",onClick:function(){return n("confirm_order")}})]}):2===i.state?(0,o.createComponentVNode)(2,a.Section,{title:"Step 3: Payment",minHeight:47,children:[(0,o.createComponentVNode)(2,a.Box,{italic:!0,textAlign:"center",fontSize:"20px",children:"Your device is ready for fabrication..."}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,mt:2,textAlign:"center",fontSize:"16px",children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Please insert the required"})," ",(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"good",children:[i.totalprice," cr"]})]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,mt:1,textAlign:"center",fontSize:"18px",children:"Current:"}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,mt:.5,textAlign:"center",fontSize:"18px",color:i.credits>=i.totalprice?"good":"bad",children:[i.credits," cr"]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Purchase",disabled:i.credits=10&&e<20?i.COLORS.department.security:e>=20&&e<30?i.COLORS.department.medbay:e>=30&&e<40?i.COLORS.department.science:e>=40&&e<50?i.COLORS.department.engineering:e>=50&&e<60?i.COLORS.department.cargo:e>=200&&e<230?i.COLORS.department.centcom:i.COLORS.department.other},u=function(e){var t=e.type,n=e.value;return(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:4,color:i.COLORS.damageType[t],textAlign:"center",children:n})};t.CrewConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,s=i.sensors||[];return(0,o.createComponentVNode)(2,a.Section,{minHeight:90,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0,textAlign:"center",children:"Vitals"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Position"}),!!i.link_allowed&&(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0,children:"Tracking"})]}),s.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:(m=e.ijob,m%10==0),color:l(e.ijob),children:[e.name," (",e.assignment,")"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,a.ColorBox,{color:(t=e.oxydam,r=e.toxdam,s=e.burndam,d=e.brutedam,p=t+r+s+d,f=Math.min(Math.max(Math.ceil(p/25),0),5),c[f])})}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:null!==e.oxydam?(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:[(0,o.createComponentVNode)(2,u,{type:"oxy",value:e.oxydam}),"/",(0,o.createComponentVNode)(2,u,{type:"toxin",value:e.toxdam}),"/",(0,o.createComponentVNode)(2,u,{type:"burn",value:e.burndam}),"/",(0,o.createComponentVNode)(2,u,{type:"brute",value:e.brutedam})]}):e.life_status?"Alive":"Dead"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:null!==e.pos_x?e.area:"N/A"}),!!i.link_allowed&&(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,a.Button,{content:"Track",disabled:!e.can_track,onClick:function(){return n("select_person",{name:e.name})}})})]},e.name);var t,r,s,d,p,f,m}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Cryo=void 0;var o=n(1),r=n(3),a=n(2),i=n(435);t.Cryo=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",content:c.occupant.name?c.occupant.name:"No Occupant"}),!!c.hasOccupant&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State",content:c.occupant.stat,color:c.occupant.statstate}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",color:c.occupant.temperaturestatus,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.occupant.bodyTemperature})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.occupant.health/c.occupant.maxHealth,color:c.occupant.health>0?"good":"average",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.occupant.health})})}),[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}].map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.occupant[e.type]/100,children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.occupant[e.type]})})},e.id)}))],0)]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cell",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",content:(0,o.createComponentVNode)(2,a.Button,{icon:c.isOperating?"power-off":"times",disabled:c.isOpen,onClick:function(){return n("power")},color:c.isOperating&&"green",children:c.isOperating?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.cellTemperature})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door",children:[(0,o.createComponentVNode)(2,a.Button,{icon:c.isOpen?"unlock":"lock",onClick:function(){return n("door")},content:c.isOpen?"Open":"Closed"}),(0,o.createComponentVNode)(2,a.Button,{icon:c.autoEject?"sign-out-alt":"sign-in-alt",onClick:function(){return n("autoeject")},content:c.autoEject?"Auto":"Manual"})]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Beaker",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",disabled:!c.isBeakerLoaded,onClick:function(){return n("ejectbeaker")},content:"Eject"}),children:(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:c.isBeakerLoaded,beakerContents:c.beakerContents})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.BeakerContents=void 0;var o=n(1),r=n(2);t.BeakerContents=function(e){var t=e.beakerLoaded,n=e.beakerContents;return(0,o.createComponentVNode)(2,r.Box,{children:[!t&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"No beaker loaded."})||0===n.length&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"Beaker is empty."}),n.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{color:"label",children:[e.volume," units of ",e.name]},e.name)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PersonalCrafting=void 0;var o=n(1),r=n(28),a=n(3),i=n(2),c=function(e){var t=e.craftables,n=void 0===t?[]:t,r=(0,a.useBackend)(e),c=r.act,l=r.data,u=l.craftability,s=void 0===u?{}:u,d=l.display_compact,p=l.display_craftable_only;return n.map((function(e){return p&&!s[e.ref]?null:d?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,className:"candystripe",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",content:"Craft",disabled:!s[e.ref],tooltip:e.tool_text&&"Tools needed: "+e.tool_text,tooltipPosition:"left",onClick:function(){return c("make",{recipe:e.ref})}}),children:e.req_text},e.name):(0,o.createComponentVNode)(2,i.Section,{title:e.name,level:2,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",content:"Craft",disabled:!s[e.ref],onClick:function(){return c("make",{recipe:e.ref})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!e.req_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Required",children:e.req_text}),!!e.catalyst_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Catalyst",children:e.catalyst_text}),!!e.tool_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)}))};t.PersonalCrafting=function(e){var t=e.state,n=(0,a.useBackend)(e),l=n.act,u=n.data,s=u.busy,d=u.display_craftable_only,p=u.display_compact,f=(0,r.map)((function(e,t){return{category:t,subcategory:e,hasSubcats:"has_subcats"in e,firstSubcatName:Object.keys(e).find((function(e){return"has_subcats"!==e}))}}))(u.crafting_recipes||{}),m=!!s&&(0,o.createComponentVNode)(2,i.Dimmer,{fontSize:"40px",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Box,{mt:30,children:[(0,o.createComponentVNode)(2,i.Icon,{name:"cog",spin:1})," Crafting..."]})});return(0,o.createFragment)([m,(0,o.createComponentVNode)(2,i.Section,{title:"Personal Crafting",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:p?"check-square-o":"square-o",content:"Compact",selected:p,onClick:function(){return l("toggle_compact")}}),(0,o.createComponentVNode)(2,i.Button,{icon:d?"check-square-o":"square-o",content:"Craftable Only",selected:d,onClick:function(){return l("toggle_recipes")}})],4),children:(0,o.createComponentVNode)(2,i.Tabs,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:e.category,onClick:function(){return l("set_category",{category:e.category,subcategory:e.firstSubcatName})},children:function(){return!e.hasSubcats&&(0,o.createComponentVNode)(2,c,{craftables:e.subcategory,state:t})||(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:(0,r.map)((function(e,n){if("has_subcats"!==n)return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:n,onClick:function(){return l("set_category",{subcategory:n})},children:function(){return(0,o.createComponentVNode)(2,c,{craftables:e,state:t})}})}))(e.subcategory)})}},e.category)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.DecalPainter=void 0;var o=n(1),r=n(3),a=n(2);t.DecalPainter=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.decal_list||[],l=i.color_list||[],u=i.dir_list||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Decal Type",children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,selected:e.decal===i.decal_style,onClick:function(){return n("select decal",{decals:e.decal})}},e.decal)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Decal Color",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:"red"===e.colors?"Red":"white"===e.colors?"White":"Yellow",selected:e.colors===i.decal_color,onClick:function(){return n("select color",{colors:e.colors})}},e.colors)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Decal Direction",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:1===e.dirs?"North":2===e.dirs?"South":4===e.dirs?"East":"West",selected:e.dirs===i.decal_direction,onClick:function(){return n("selected direction",{dirs:e.dirs})}},e.dirs)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.DisposalUnit=void 0;var o=n(1),r=n(3),a=n(2);t.DisposalUnit=function(e){var t,n,i=(0,r.useBackend)(e),c=i.act,l=i.data;return l.full_pressure?(t="good",n="Ready"):l.panel_open?(t="bad",n="Power Disabled"):l.pressure_charging?(t="average",n="Pressurizing"):(t="bad",n="Off"),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State",color:t,children:n}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.per,color:"good"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Handle",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.flush?"toggle-on":"toggle-off",disabled:l.isai||l.panel_open,content:l.flush?"Disengage":"Engage",onClick:function(){return c(l.flush?"handle-0":"handle-1")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Eject",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",disabled:l.isai,content:"Eject Contents",onClick:function(){return c("eject")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",disabled:l.panel_open,selected:l.pressure_charging,onClick:function(){return c(l.pressure_charging?"pump-0":"pump-1")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.DnaVault=void 0;var o=n(1),r=n(3),a=n(2);t.DnaVault=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.completed,l=i.used,u=i.choiceA,s=i.choiceB,d=i.dna,p=i.dna_max,f=i.plants,m=i.plants_max,h=i.animals,C=i.animals_max;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"DNA Vault Database",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Human DNA",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:d/p,content:d+" / "+p+" Samples"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Plant DNA",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f/m,content:f+" / "+m+" Samples"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Animal DNA",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:h/h,content:h+" / "+C+" Samples"})})]})}),!(!c||l)&&(0,o.createComponentVNode)(2,a.Section,{title:"Personal Gene Therapy",children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,textAlign:"center",mb:1,children:"Applicable Gene Therapy Treatments"}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:u,textAlign:"center",onClick:function(){return n("gene",{choice:u})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:s,textAlign:"center",onClick:function(){return n("gene",{choice:s})}})})]})]})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.EightBallVote=void 0;var o=n(1),r=n(3),a=n(2),i=n(31);t.EightBallVote=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.question,u=c.shaking,s=c.answers,d=void 0===s?[]:s;return u?(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,textAlign:"center",fontSize:"16px",m:1,children:['"',l,'"']}),(0,o.createComponentVNode)(2,a.Grid,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:(0,i.toTitleCase)(e.answer),selected:e.selected,fontSize:"16px",lineHeight:"24px",textAlign:"center",mb:1,onClick:function(){return n("vote",{answer:e.answer})}}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,textAlign:"center",fontSize:"30px",children:e.amount})]},e.answer)}))})]}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No question is currently being asked."})}},function(e,t,n){"use strict";t.__esModule=!0,t.EmergencyShuttleConsole=void 0;var o=n(1),r=n(2),a=n(3);t.EmergencyShuttleConsole=function(e){var t=(0,a.useBackend)(e),n=t.act,i=t.data,c=i.timer_str,l=i.enabled,u=i.emagged,s=i.engines_started,d=i.authorizations_remaining,p=i.authorizations,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:"40px",textAlign:"center",fontFamily:"monospace",children:c}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",fontSize:"16px",mb:1,children:[(0,o.createComponentVNode)(2,r.Box,{inline:!0,bold:!0,children:"ENGINES:"}),(0,o.createComponentVNode)(2,r.Box,{inline:!0,color:s?"good":"average",ml:1,children:s?"Online":"Idle"})]}),(0,o.createComponentVNode)(2,r.Section,{title:"Early Launch Authorization",level:2,buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"times",content:"Repeal All",color:"bad",disabled:!l,onClick:function(){return n("abort")}}),children:[(0,o.createComponentVNode)(2,r.Grid,{children:[(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{fluid:!0,icon:"exclamation-triangle",color:"good",content:"AUTHORIZE",disabled:!l,onClick:function(){return n("authorize")}})}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{fluid:!0,icon:"minus",content:"REPEAL",disabled:!l,onClick:function(){return n("repeal")}})})]}),(0,o.createComponentVNode)(2,r.Section,{title:"Authorizations",level:3,minHeight:"150px",buttons:(0,o.createComponentVNode)(2,r.Box,{inline:!0,bold:!0,color:u?"bad":"good",children:u?"ERROR":"Remaining: "+d}),children:[f.length>0?f.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:"16px",className:"candystripe",children:[e.name," (",e.job,")"]},e.name)})):(0,o.createComponentVNode)(2,r.Box,{bold:!0,textAlign:"center",fontSize:"16px",color:"average",children:"No Active Authorizations"}),f.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:"16px",className:"candystripe",children:[e.name," (",e.job,")"]},e.name)}))]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.EngravedMessage=void 0;var o=n(1),r=n(31),a=n(3),i=n(2);t.EngravedMessage=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.admin_mode,u=c.creator_key,s=c.creator_name,d=c.has_liked,p=c.has_disliked,f=c.hidden_message,m=c.is_creator,h=c.num_likes,C=c.num_dislikes,g=c.realdate;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,textAlign:"center",fontSize:"20px",mb:2,children:(0,r.decodeHtmlEntities)(f)}),(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"arrow-up",content:" "+h,disabled:m,selected:d,textAlign:"center",fontSize:"16px",lineHeight:"24px",onClick:function(){return n("like")}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"circle",disabled:m,selected:!p&&!d,textAlign:"center",fontSize:"16px",lineHeight:"24px",onClick:function(){return n("neutral")}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"arrow-down",content:" "+C,disabled:m,selected:p,textAlign:"center",fontSize:"16px",lineHeight:"24px",onClick:function(){return n("dislike")}})})]})]}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Created On",children:g})})}),(0,o.createComponentVNode)(2,i.Section),!!l&&(0,o.createComponentVNode)(2,i.Section,{title:"Admin Panel",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Delete",color:"bad",onClick:function(){return n("delete")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Creator Ckey",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Creator Character Name",children:s})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.Gps=void 0;var o=n(1),r=n(28),a=n(70),i=n(20),c=n(156),l=n(3),u=n(2),s=function(e){return(0,r.map)(parseFloat)(e.split(", "))};t.Gps=function(e){var t=(0,l.useBackend)(e),n=t.act,d=t.data,p=d.currentArea,f=d.currentCoords,m=d.globalmode,h=d.power,C=d.tag,g=d.updating,b=(0,a.flow)([(0,r.map)((function(e,t){var n=e.dist&&Math.round((0,c.vecLength)((0,c.vecSubtract)(s(f),s(e.coords))));return Object.assign({},e,{dist:n,index:t})})),(0,r.sortBy)((function(e){return e.dist===undefined}),(function(e){return e.entrytag}))])(d.signals||[]);return(0,o.createFragment)([(0,o.createComponentVNode)(2,u.Section,{title:"Control",buttons:(0,o.createComponentVNode)(2,u.Button,{icon:"power-off",content:h?"On":"Off",selected:h,onClick:function(){return n("power")}}),children:(0,o.createComponentVNode)(2,u.LabeledList,{children:[(0,o.createComponentVNode)(2,u.LabeledList.Item,{label:"Tag",children:(0,o.createComponentVNode)(2,u.Button,{icon:"pencil-alt",content:C,onClick:function(){return n("rename")}})}),(0,o.createComponentVNode)(2,u.LabeledList.Item,{label:"Scan Mode",children:(0,o.createComponentVNode)(2,u.Button,{icon:g?"unlock":"lock",content:g?"AUTO":"MANUAL",color:!g&&"bad",onClick:function(){return n("updating")}})}),(0,o.createComponentVNode)(2,u.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,u.Button,{icon:"sync",content:m?"MAXIMUM":"LOCAL",selected:!m,onClick:function(){return n("globalmode")}})})]})}),!!h&&(0,o.createFragment)([(0,o.createComponentVNode)(2,u.Section,{title:"Current Location",children:(0,o.createComponentVNode)(2,u.Box,{fontSize:"18px",children:[p," (",f,")"]})}),(0,o.createComponentVNode)(2,u.Section,{title:"Detected Signals",children:(0,o.createComponentVNode)(2,u.Table,{children:[(0,o.createComponentVNode)(2,u.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,u.Table.Cell,{content:"Name"}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,content:"Direction"}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,content:"Coordinates"})]}),b.map((function(e){return(0,o.createComponentVNode)(2,u.Table.Row,{className:"candystripe",children:[(0,o.createComponentVNode)(2,u.Table.Cell,{bold:!0,color:"label",children:e.entrytag}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,opacity:e.dist!==undefined&&(0,i.clamp)(1.2/Math.log(Math.E+e.dist/20),.4,1),children:[e.degrees!==undefined&&(0,o.createComponentVNode)(2,u.Icon,{mr:1,size:1.2,name:"arrow-up",rotation:e.degrees}),e.dist!==undefined&&e.dist+"m"]}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,children:e.coords})]},e.entrytag+e.coords+e.index)}))]})})],4)],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.GravityGenerator=void 0;var o=n(1),r=n(3),a=n(2);t.GravityGenerator=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.breaker,l=i.charge_count,u=i.charging_state,s=i.on,d=i.operational;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:!d&&(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"No data available"})||(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Breaker",children:(0,o.createComponentVNode)(2,a.Button,{icon:c?"power-off":"times",content:c?"On":"Off",selected:c,disabled:!d,onClick:function(){return n("gentoggle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gravity Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l/100,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",children:[0===u&&(s&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Fully Charged"})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Not Charging"})),1===u&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Charging"}),2===u&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Discharging"})]})]})}),d&&0!==u&&(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"WARNING - Radiation detected"}),d&&0===u&&(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"No radiation detected"})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.GulagTeleporterConsole=void 0;var o=n(1),r=n(3),a=n(2);t.GulagTeleporterConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.teleporter,l=i.teleporter_lock,u=i.teleporter_state_open,s=i.teleporter_location,d=i.beacon,p=i.beacon_location,f=i.id,m=i.id_name,h=i.can_teleport,C=i.goal,g=void 0===C?0:C,b=i.prisoner,v=void 0===b?{}:b;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Teleporter Console",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:u?"Open":"Closed",disabled:l,selected:u,onClick:function(){return n("toggle_open")}}),(0,o.createComponentVNode)(2,a.Button,{icon:l?"lock":"unlock",content:l?"Locked":"Unlocked",selected:l,disabled:u,onClick:function(){return n("teleporter_lock")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Teleporter Unit",color:c?"good":"bad",buttons:!c&&(0,o.createComponentVNode)(2,a.Button,{content:"Reconnect",onClick:function(){return n("scan_teleporter")}}),children:c?s:"Not Connected"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Receiver Beacon",color:d?"good":"bad",buttons:!d&&(0,o.createComponentVNode)(2,a.Button,{content:"Reconnect",onClick:function(){return n("scan_beacon")}}),children:d?p:"Not Connected"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Prisoner Details",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Prisoner ID",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:f?m:"No ID",onClick:function(){return n("handle_id")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Point Goal",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:g,width:"48px",minValue:1,maxValue:1e3,onChange:function(e,t){return n("set_goal",{value:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",children:v.name?v.name:"No Occupant"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Criminal Status",children:v.crimstat?v.crimstat:"No Status"})]})}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Process Prisoner",disabled:!h,textAlign:"center",color:"bad",onClick:function(){return n("teleport")}})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.GulagItemReclaimer=void 0;var o=n(1),r=n(3),a=n(2);t.GulagItemReclaimer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.mobs||[];return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Items",children:(0,o.createComponentVNode)(2,a.Table,{children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{content:"Retrieve Items",disabled:!i.can_reclaim,onClick:function(){return n("release_items",{mobref:e.mob})}})})]},e.mob)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Holodeck=void 0;var o=n(1),r=n(3),a=n(2);t.Holodeck=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.can_toggle_safety,l=i.default_programs,u=void 0===l?[]:l,s=i.emag_programs,d=void 0===s?[]:s,p=i.emagged,f=i.program;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Default Programs",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:p?"unlock":"lock",content:"Safeties",color:"bad",disabled:!c,selected:!p,onClick:function(){return n("safety")}}),children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.name.substring(11),textAlign:"center",selected:e.type===f,onClick:function(){return n("load_program",{type:e.type})}},e.type)}))}),!!p&&(0,o.createComponentVNode)(2,a.Section,{title:"Dangerous Programs",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.name.substring(11),color:"bad",textAlign:"center",selected:e.type===f,onClick:function(){return n("load_program",{type:e.type})}},e.type)}))})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.ImplantChair=void 0;var o=n(1),r=n(3),a=n(2);t.ImplantChair=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant Information",textAlign:"center",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:i.occupant.name?i.occupant.name:"No Occupant"}),!!i.occupied&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:0===i.occupant.stat?"good":1===i.occupant.stat?"average":"bad",children:0===i.occupant.stat?"Conscious":1===i.occupant.stat?"Unconcious":"Dead"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Operations",textAlign:"center",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.open?"unlock":"lock",color:i.open?"default":"red",content:i.open?"Open":"Closed",onClick:function(){return n("door")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Implant Occupant",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"code-branch",content:i.ready?i.special_name||"Implant":"Recharging",onClick:function(){return n("implant")}}),0===i.ready&&(0,o.createComponentVNode)(2,a.Icon,{name:"cog",color:"orange",spin:!0})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Implants Remaining",children:[i.ready_implants,1===i.replenishing&&(0,o.createComponentVNode)(2,a.Icon,{name:"sync",color:"red",spin:!0})]})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.Intellicard=void 0;var o=n(1),r=n(3),a=n(2);t.Intellicard=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=u||s,l=i.name,u=i.isDead,s=i.isBraindead,d=i.health,p=i.wireless,f=i.radio,m=i.wiping,h=i.laws,C=void 0===h?[]:h;return(0,o.createComponentVNode)(2,a.Section,{title:l||"Empty Card",buttons:!!l&&(0,o.createComponentVNode)(2,a.Button,{icon:"trash",content:m?"Stop Wiping":"Wipe",disabled:u,onClick:function(){return n("wipe")}}),children:!!l&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:c?"bad":"good",children:c?"Offline":"Operation"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Software Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:d,minValue:0,maxValue:100,ranges:{good:[70,Infinity],average:[50,70],bad:[-Infinity,50]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Settings",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"signal",content:"Wireless Activity",selected:p,onClick:function(){return n("wireless")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"microphone",content:"Subspace Radio",selected:f,onClick:function(){return n("radio")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Laws",children:C.map((function(e){return(0,o.createComponentVNode)(2,a.BlockQuote,{children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.KeycardAuth=void 0;var o=n(1),r=n(3),a=n(2);t.KeycardAuth=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{children:1===i.waiting&&(0,o.createVNode)(1,"span",null,"Waiting for another device to confirm your request...",16)}),(0,o.createComponentVNode)(2,a.Box,{children:0===i.waiting&&(0,o.createFragment)([!!i.auth_required&&(0,o.createComponentVNode)(2,a.Button,{icon:"check-square",color:"red",textAlign:"center",lineHeight:"60px",fluid:!0,onClick:function(){return n("auth_swipe")},content:"Authorize"}),0===i.auth_required&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-triangle",fluid:!0,onClick:function(){return n("red_alert")},content:"Red Alert"}),(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",fluid:!0,onClick:function(){return n("emergency_maint")},content:"Emergency Maintenance Access"}),(0,o.createComponentVNode)(2,a.Button,{icon:"meteor",fluid:!0,onClick:function(){return n("bsa_unlock")},content:"Bluespace Artillery Unlock"})],4)],0)})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LaborClaimConsole=void 0;var o=n(1),r=n(31),a=n(3),i=n(2);t.LaborClaimConsole=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.can_go_home,u=c.id_points,s=c.ores,d=c.status_info,p=c.unclaimed_points;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle controls",children:(0,o.createComponentVNode)(2,i.Button,{content:"Move shuttle",disabled:!l,onClick:function(){return n("move_shuttle")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Points",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unclaimed points",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Claim points",disabled:!p,onClick:function(){return n("claim_points")}}),children:p})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Material values",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Material"}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:"Value"})]}),s.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,r.toTitleCase)(e.ore)}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{color:"label",inline:!0,children:e.value})})]},e.ore)}))]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.LanguageMenu=void 0;var o=n(1),r=n(3),a=n(2);t.LanguageMenu=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.admin_mode,l=i.is_living,u=i.omnitongue,s=i.languages,d=void 0===s?[]:s,p=i.unknown_languages,f=void 0===p?[]:p;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Known Languages",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,buttons:(0,o.createFragment)([!!l&&(0,o.createComponentVNode)(2,a.Button,{content:e.is_default?"Default Language":"Select as Default",disabled:!e.can_speak,selected:e.is_default,onClick:function(){return n("select_default",{language_name:e.name})}}),!!c&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Grant",onClick:function(){return n("grant_language",{language_name:e.name})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Remove",onClick:function(){return n("remove_language",{language_name:e.name})}})],4)],0),children:[e.desc," ","Key: ,",e.key," ",e.can_understand?"Can understand.":"Cannot understand."," ",e.can_speak?"Can speak.":"Cannot speak."]},e.name)}))})}),!!c&&(0,o.createComponentVNode)(2,a.Section,{title:"Unknown Languages",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Omnitongue "+(u?"Enabled":"Disabled"),selected:u,onClick:function(){return n("toggle_omnitongue")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:f.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Grant",onClick:function(){return n("grant_language",{language_name:e.name})}}),children:[e.desc," ","Key: ,",e.key," ",!!e.shadow&&"(gained from mob)"," ",e.can_speak?"Can speak.":"Cannot speak."]},e.name)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.LaunchpadConsole=t.LaunchpadRemote=t.LaunchpadControl=t.LaunchpadButtonPad=void 0;var o=n(1),r=n(3),a=n(2),i=function(e){var t=(0,r.useBackend)(e).act;return(0,o.createComponentVNode)(2,a.Grid,{width:"1px",children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-left",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:-1,y:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-left",mb:1,onClick:function(){return t("move_pos",{x:-1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-down",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:-1,y:-1})}})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-up",mb:1,onClick:function(){return t("move_pos",{y:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"R",mb:1,onClick:function(){return t("set_pos",{x:0,y:0})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-down",mb:1,onClick:function(){return t("move_pos",{y:-1})}})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-up",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:1,y:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-right",mb:1,onClick:function(){return t("move_pos",{x:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-right",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:1,y:-1})}})]})]})};t.LaunchpadButtonPad=i;var c=function(e){var t=e.topLevel,n=(0,r.useBackend)(e),c=n.act,l=n.data,u=l.x,s=l.y,d=l.pad_name,p=l.range;return(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Input,{value:d,width:"170px",onChange:function(e,t){return c("rename",{name:t})}}),level:t?1:2,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Remove",color:"bad",onClick:function(){return c("remove")}}),children:[(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Controls",level:2,children:(0,o.createComponentVNode)(2,i,{state:e.state})})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Target",level:2,children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"26px",children:[(0,o.createComponentVNode)(2,a.Box,{mb:1,children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:"X:"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:u,minValue:-p,maxValue:p,lineHeight:"30px",fontSize:"26px",width:"90px",height:"30px",stepPixelSize:10,onChange:function(e,t){return c("set_pos",{x:t})}})]}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:"Y:"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:s,minValue:-p,maxValue:p,stepPixelSize:10,lineHeight:"30px",fontSize:"26px",width:"90px",height:"30px",onChange:function(e,t){return c("set_pos",{y:t})}})]})]})})})]}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"upload",content:"Launch",textAlign:"center",onClick:function(){return c("launch")}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"download",content:"Pull",textAlign:"center",onClick:function(){return c("pull")}})})]})]})};t.LaunchpadControl=c;t.LaunchpadRemote=function(e){var t=(0,r.useBackend)(e).data,n=t.has_pad,i=t.pad_closed;return n?i?(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Launchpad Closed"}):(0,o.createComponentVNode)(2,c,{topLevel:!0,state:e.state}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Launchpad Connected"})};t.LaunchpadConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,l=i.launchpads,u=void 0===l?[]:l,s=i.selected_id;return u.length<=0?(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Pads Connected"}):(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{size:.6,children:(0,o.createComponentVNode)(2,a.Box,{style:{"border-right":"2px solid rgba(255, 255, 255, 0.1)"},minHeight:"190px",mr:1,children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.name,selected:s===e.id,color:"transparent",onClick:function(){return n("select_pad",{id:e.id})}},e.name)}))})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:s?(0,o.createComponentVNode)(2,c,{state:e.state}):(0,o.createComponentVNode)(2,a.Box,{children:"Please select a pad"})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechBayPowerConsole=void 0;var o=n(1),r=n(3),a=n(2);t.MechBayPowerConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data.recharge_port,c=i&&i.mech,l=c&&c.cell;return(0,o.createComponentVNode)(2,a.Section,{title:"Mech status",textAlign:"center",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Sync",onClick:function(){return n("reconnect")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:!i&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.health/c.maxhealth,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:!i&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||!l&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No cell is installed."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.charge/l.maxcharge,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l.charge})," / "+l.maxcharge]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Mule=void 0;var o=n(1),r=n(3),a=n(2),i=n(69);t.Mule=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.locked&&!c.siliconUser,u=c.siliconUser,s=c.on,d=c.cell,p=c.cellPercent,f=c.load,m=c.mode,h=c.modeStatus,C=c.haspai,g=c.autoReturn,b=c.autoPickup,v=c.reportDelivery,N=c.destination,V=c.home,y=c.id,_=c.destinations,x=void 0===_?[]:_;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox,{siliconUser:u,locked:l}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",minHeight:"110px",buttons:!l&&(0,o.createComponentVNode)(2,a.Button,{icon:s?"power-off":"times",content:s?"On":"Off",selected:s,onClick:function(){return n("power")}}),children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:d?p/100:0,color:d?"good":"bad"}),(0,o.createComponentVNode)(2,a.Grid,{mt:1,children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",color:h,children:m})})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Load",color:f?"good":"average",children:f||"None"})})})]})]}),!l&&(0,o.createComponentVNode)(2,a.Section,{title:"Controls",buttons:(0,o.createFragment)([!!f&&(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Unload",onClick:function(){return n("unload")}}),!!C&&(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject PAI",onClick:function(){return n("ejectpai")}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID",children:(0,o.createComponentVNode)(2,a.Input,{value:y,onChange:function(e,t){return n("setid",{value:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destination",children:[(0,o.createComponentVNode)(2,a.Dropdown,{over:!0,selected:N||"None",options:x,width:"150px",onSelected:function(e){return n("destination",{value:e})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"stop",content:"Stop",onClick:function(){return n("stop")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"play",content:"Go",onClick:function(){return n("go")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Home",children:[(0,o.createComponentVNode)(2,a.Dropdown,{over:!0,selected:V,options:x,width:"150px",onSelected:function(e){return n("destination",{value:e})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"home",content:"Go Home",onClick:function(){return n("home")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Settings",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:g,content:"Auto-Return",onClick:function(){return n("autored")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:b,content:"Auto-Pickup",onClick:function(){return n("autopick")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:v,content:"Report Delivery",onClick:function(){return n("report")}})]})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.NotificationPreferences=void 0;var o=n(1),r=n(3),a=n(2);t.NotificationPreferences=function(e){var t=(0,r.useBackend)(e),n=t.act,i=(t.data.ignore||[]).sort((function(e,t){var n=e.desc.toLowerCase(),o=t.desc.toLowerCase();return no?1:0}));return(0,o.createComponentVNode)(2,a.Section,{title:"Ghost Role Notifications",children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:e.enabled?"times":"check",content:e.desc,color:e.enabled?"bad":"good",onClick:function(){return n("toggle_ignore",{key:e.key})}},e.key)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtnetRelay=void 0;var o=n(1),r=n(3),a=n(2);t.NtnetRelay=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.enabled,l=i.dos_capacity,u=i.dos_overload,s=i.dos_crashed;return(0,o.createComponentVNode)(2,a.Section,{title:"Network Buffer",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",selected:c,content:c?"ENABLED":"DISABLED",onClick:function(){return n("toggle")}}),children:s?(0,o.createComponentVNode)(2,a.Box,{fontFamily:"monospace",children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:"20px",children:"NETWORK BUFFER OVERFLOW"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:"16px",children:"OVERLOAD RECOVERY MODE"}),(0,o.createComponentVNode)(2,a.Box,{children:"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."}),(0,o.createComponentVNode)(2,a.Box,{fontSize:"20px",color:"bad",children:"ADMINISTRATOR OVERRIDE"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:"16px",color:"bad",children:"CAUTION - DATA LOSS MAY OCCUR"}),(0,o.createComponentVNode)(2,a.Button,{icon:"signal",content:"PURGE BUFFER",mt:1,color:"bad",onClick:function(){return n("restart")}})]}):(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:l,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u})," GQ"," / ",l," GQ"]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosArcade=void 0;var o=n(1),r=n(3),a=n(2);t.NtosArcade=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{title:"Outbomb Cuban Pete Ultra",textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{size:2,children:[(0,o.createComponentVNode)(2,a.Box,{m:1}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Player Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.PlayerHitpoints,minValue:0,maxValue:30,ranges:{olive:[31,Infinity],good:[20,31],average:[10,20],bad:[-Infinity,10]},children:[i.PlayerHitpoints,"HP"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Player Magic",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.PlayerMP,minValue:0,maxValue:10,ranges:{purple:[11,Infinity],violet:[3,11],bad:[-Infinity,3]},children:[i.PlayerMP,"MP"]})})]}),(0,o.createComponentVNode)(2,a.Box,{my:1,mx:4}),(0,o.createComponentVNode)(2,a.Section,{backgroundColor:1===i.PauseState?"#1b3622":"#471915",children:i.Status})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.Hitpoints/45,minValue:0,maxValue:45,ranges:{good:[30,Infinity],average:[5,30],bad:[-Infinity,5]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.Hitpoints}),"HP"]}),(0,o.createComponentVNode)(2,a.Box,{m:1}),(0,o.createComponentVNode)(2,a.Section,{inline:!0,width:26,textAlign:"center",children:(0,o.createVNode)(1,"img",null,null,1,{src:i.BossID})})]})]}),(0,o.createComponentVNode)(2,a.Box,{my:1,mx:4}),(0,o.createComponentVNode)(2,a.Button,{icon:"fist-raised",tooltip:"Go in for the kill!",tooltipPosition:"top",disabled:0===i.GameActive||1===i.PauseState,onClick:function(){return n("Attack")},content:"Attack!"}),(0,o.createComponentVNode)(2,a.Button,{icon:"band-aid",tooltip:"Heal yourself!",tooltipPosition:"top",disabled:0===i.GameActive||1===i.PauseState,onClick:function(){return n("Heal")},content:"Heal!"}),(0,o.createComponentVNode)(2,a.Button,{icon:"magic",tooltip:"Recharge your magic!",tooltipPosition:"top",disabled:0===i.GameActive||1===i.PauseState,onClick:function(){return n("Recharge_Power")},content:"Recharge!"})]}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",tooltip:"One more game couldn't hurt.",tooltipPosition:"top",disabled:1===i.GameActive,onClick:function(){return n("Start_Game")},content:"Begin Game"}),(0,o.createComponentVNode)(2,a.Button,{icon:"ticket-alt",tooltip:"Claim at your local Arcade Computer for Prizes!",tooltipPosition:"top",disabled:1===i.GameActive,onClick:function(){return n("Dispense_Tickets")},content:"Claim Tickets"})]}),(0,o.createComponentVNode)(2,a.Box,{color:i.TicketCount>=1?"good":"normal",children:["Earned Tickets: ",i.TicketCount]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosConfiguration=void 0;var o=n(1),r=n(3),a=n(2);t.NtosConfiguration=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.power_usage,l=i.battery_exists,u=i.battery,s=void 0===u?{}:u,d=i.disk_size,p=i.disk_used,f=i.hardware,m=void 0===f?[]:f;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Power Supply",buttons:(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:["Power Draw: ",c,"W"]}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Battery Status",color:!l&&"average",children:l?(0,o.createComponentVNode)(2,a.ProgressBar,{value:s.charge,minValue:0,maxValue:s.max,ranges:{good:[s.max/2,Infinity],average:[s.max/4,s.max/2],bad:[-Infinity,s.max/4]},children:[s.charge," / ",s.max]}):"Not Available"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"File System",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:p,minValue:0,maxValue:d,color:"good",children:[p," GQ / ",d," GQ"]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Hardware Components",children:m.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,level:2,buttons:(0,o.createFragment)([!e.critical&&(0,o.createComponentVNode)(2,a.Button.Checkbox,{content:"Enabled",checked:e.enabled,mr:1,onClick:function(){return n("PC_toggle_component",{name:e.name})}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:["Power Usage: ",e.powerusage,"W"]})],0),children:e.desc},e.name)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosMain=void 0;var o=n(1),r=n(3),a=n(2),i={compconfig:"cog",ntndownloader:"download",filemanager:"folder",smmonitor:"radiation",alarmmonitor:"bell",cardmod:"id-card",arcade:"gamepad",ntnrc_client:"comment-alt",nttransfer:"exchange-alt",powermonitor:"plug"};t.NtosMain=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.programs,u=void 0===l?[]:l,s=c.has_light,d=c.light_on,p=c.comp_light_color;return(0,o.createFragment)([!!s&&(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{width:"144px",icon:"lightbulb",selected:d,onClick:function(){return n("PC_toggle_light")},children:["Flashlight: ",d?"ON":"OFF"]}),(0,o.createComponentVNode)(2,a.Button,{ml:1,onClick:function(){return n("PC_light_color")},children:["Color:",(0,o.createComponentVNode)(2,a.ColorBox,{ml:1,color:p})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Programs",children:(0,o.createComponentVNode)(2,a.Table,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,lineHeight:"24px",color:"transparent",icon:i[e.name]||"window-maximize-o",content:e.desc,onClick:function(){return n("PC_runprogram",{name:e.name})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,width:3,children:!!e.running&&(0,o.createComponentVNode)(2,a.Button,{lineHeight:"24px",color:"transparent",icon:"times",tooltip:"Close program",tooltipPosition:"left",onClick:function(){return n("PC_killprogram",{name:e.name})}})})]},e.name)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosNetChat=void 0;var o=n(1),r=n(3),a=n(2);(0,n(51).createLogger)("ntos chat");t.NtosNetChat=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.can_admin,l=i.adminmode,u=i.authed,s=i.username,d=i.active_channel,p=i.is_operator,f=i.all_channels,m=void 0===f?[]:f,h=i.clients,C=void 0===h?[]:h,g=i.messages,b=void 0===g?[]:g,v=null!==d,N=u||l;return(0,o.createComponentVNode)(2,a.Section,{height:"600px",children:(0,o.createComponentVNode)(2,a.Table,{height:"580px",children:(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"top",style:{width:"200px"},children:[(0,o.createComponentVNode)(2,a.Box,{height:"537px",overflowY:"scroll",children:[(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"New Channel...",onCommit:function(e,t){return n("PRG_newchannel",{new_channel_name:t})}}),m.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.chan,selected:e.id===d,color:"transparent",onClick:function(){return n("PRG_joinchannel",{id:e.id})}},e.chan)}))]}),(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,mt:1,content:s+"...",currentValue:s,onCommit:function(e,t){return n("PRG_changename",{new_name:t})}}),!!c&&(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:"ADMIN MODE: "+(l?"ON":"OFF"),color:l?"bad":"good",onClick:function(){return n("PRG_toggleadmin")}})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Box,{height:"560px",overflowY:"scroll",children:v&&(N?b.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e.msg},e.msg)})):(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",mt:4,fontSize:"40px"}),(0,o.createComponentVNode)(2,a.Box,{mt:1,bold:!0,fontSize:"18px",children:"THIS CHANNEL IS PASSWORD PROTECTED"}),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:"INPUT PASSWORD TO ACCESS"})]}))}),(0,o.createComponentVNode)(2,a.Input,{fluid:!0,selfClear:!0,mt:1,onEnter:function(e,t){return n("PRG_speak",{message:t})}})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"top",style:{width:"150px"},children:[(0,o.createComponentVNode)(2,a.Box,{height:"477px",overflowY:"scroll",children:C.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e.name},e.name)}))}),v&&N&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"Save log...",defaultValue:"new_log",onCommit:function(e,t){return n("PRG_savelog",{log_name:t})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{fluid:!0,content:"Leave Channel",onClick:function(){return n("PRG_leavechannel")}})],4),!!p&&u&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{fluid:!0,content:"Delete Channel",onClick:function(){return n("PRG_deletechannel")}}),(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"Rename Channel...",onCommit:function(e,t){return n("PRG_renamechannel",{new_name:t})}}),(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"Set Password...",onCommit:function(e,t){return n("PRG_setpassword",{new_password:t})}})],4)]})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosNetDownloader=void 0;var o=n(1),r=n(3),a=n(2);t.NtosNetDownloader=function(e){var t=e.state,n=(0,r.useBackend)(e),c=n.act,l=n.data,u=l.disk_size,s=l.disk_used,d=l.downloadable_programs,p=void 0===d?[]:d,f=l.error,m=l.hacked_programs,h=void 0===m?[]:m,C=l.hackedavailable;return(0,o.createFragment)([!!f&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:[(0,o.createComponentVNode)(2,a.Box,{mb:1,children:f}),(0,o.createComponentVNode)(2,a.Button,{content:"Reset",onClick:function(){return c("PRG_reseterror")}})]}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Disk usage",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:s,minValue:0,maxValue:u,children:s+" GQ / "+u+" GQ"})})})}),(0,o.createComponentVNode)(2,a.Section,{children:p.map((function(e){return(0,o.createComponentVNode)(2,i,{state:t,program:e},e.filename)}))}),!!C&&(0,o.createComponentVNode)(2,a.Section,{title:"UNKNOWN Software Repository",children:[(0,o.createComponentVNode)(2,a.NoticeBox,{mb:1,children:"Please note that Nanotrasen does not recommend download of software from non-official servers."}),h.map((function(e){return(0,o.createComponentVNode)(2,i,{state:t,program:e},e.filename)}))]})],0)};var i=function(e){var t=e.program,n=(0,r.useBackend)(e),i=n.act,c=n.data,l=c.disk_size,u=c.disk_used,s=c.downloadcompletion,d=c.downloading,p=c.downloadname,f=c.downloadsize,m=l-u;return(0,o.createComponentVNode)(2,a.Box,{mb:3,children:[(0,o.createComponentVNode)(2,a.Flex,{align:"baseline",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,grow:1,children:t.filedesc}),(0,o.createComponentVNode)(2,a.Flex.Item,{color:"label",nowrap:!0,children:[t.size," GQ"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2,width:"94px",textAlign:"center",children:t.filename===p&&(0,o.createComponentVNode)(2,a.ProgressBar,{color:"green",minValue:0,maxValue:f,value:s})||(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"download",content:"Download",disabled:d||t.size>m,onClick:function(){return i("PRG_downloadfile",{filename:t.filename})}})})]}),"Compatible"!==t.compatibility&&(0,o.createComponentVNode)(2,a.Box,{mt:1,italic:!0,fontSize:"12px",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{mx:1,color:"red",name:"times"}),"Incompatible!"]}),t.size>m&&(0,o.createComponentVNode)(2,a.Box,{mt:1,italic:!0,fontSize:"12px",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{mx:1,color:"red",name:"times"}),"Not enough disk space!"]}),(0,o.createComponentVNode)(2,a.Box,{mt:1,italic:!0,color:"label",fontSize:"12px",children:t.fileinfo})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosSupermatterMonitor=void 0;var o=n(1),r=n(28),a=n(70),i=n(20),c=n(3),l=n(2),u=n(37),s=function(e){return Math.log2(16+Math.max(0,e))-4};t.NtosSupermatterMonitor=function(e){var t=e.state,n=(0,c.useBackend)(e),p=n.act,f=n.data,m=f.active,h=f.SM_integrity,C=f.SM_power,g=f.SM_ambienttemp,b=f.SM_ambientpressure;if(!m)return(0,o.createComponentVNode)(2,d,{state:t});var v=(0,a.flow)([function(e){return e.filter((function(e){return e.amount>=.01}))},(0,r.sortBy)((function(e){return-e.amount}))])(f.gases||[]),N=Math.max.apply(Math,[1].concat(v.map((function(e){return e.amount}))));return(0,o.createComponentVNode)(2,l.Flex,{spacing:1,children:[(0,o.createComponentVNode)(2,l.Flex.Item,{width:"270px",children:(0,o.createComponentVNode)(2,l.Section,{title:"Metrics",children:(0,o.createComponentVNode)(2,l.LabeledList,{children:[(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:h/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:C,minValue:0,maxValue:5e3,ranges:{good:[-Infinity,5e3],average:[5e3,7e3],bad:[7e3,Infinity]},children:(0,i.toFixed)(C)+" MeV/cm3"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(g),minValue:0,maxValue:s(1e4),ranges:{teal:[-Infinity,s(80)],good:[s(80),s(373)],average:[s(373),s(1e3)],bad:[s(1e3),Infinity]},children:(0,i.toFixed)(g)+" K"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(b),minValue:0,maxValue:s(5e4),ranges:{good:[s(1),s(300)],average:[-Infinity,s(1e3)],bad:[s(1e3),+Infinity]},children:(0,i.toFixed)(b)+" kPa"})})]})})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,l.Section,{title:"Gases",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"arrow-left",content:"Back",onClick:function(){return p("PRG_clear")}}),children:(0,o.createComponentVNode)(2,l.Box.Forced,{height:24*v.length+"px",children:(0,o.createComponentVNode)(2,l.LabeledList,{children:v.map((function(e){return(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:(0,u.getGasLabel)(e.name),children:(0,o.createComponentVNode)(2,l.ProgressBar,{color:(0,u.getGasColor)(e.name),value:e.amount,minValue:0,maxValue:N,children:(0,i.toFixed)(e.amount,2)+"%"})},e.name)}))})})})})]})};var d=function(e){var t=(0,c.useBackend)(e),n=t.act,r=t.data.supermatters,a=void 0===r?[]:r;return(0,o.createComponentVNode)(2,l.Section,{title:"Detected Supermatters",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"sync",content:"Refresh",onClick:function(){return n("PRG_refresh")}}),children:(0,o.createComponentVNode)(2,l.Table,{children:a.map((function(e){return(0,o.createComponentVNode)(2,l.Table.Row,{children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:e.uid+". "+e.area_name}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,color:"label",children:"Integrity:"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,width:"120px",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:e.integrity/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,l.Button,{content:"Details",onClick:function(){return n("PRG_set",{target:e.uid})}})})]},e.uid)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosWrapper=void 0;var o=n(1),r=n(3),a=n(2),i=n(116);t.NtosWrapper=function(e){var t=e.children,n=(0,r.useBackend)(e),c=n.act,l=n.data,u=l.PC_batteryicon,s=l.PC_showbatteryicon,d=l.PC_batterypercent,p=l.PC_ntneticon,f=l.PC_apclinkicon,m=l.PC_stationtime,h=l.PC_programheaders,C=void 0===h?[]:h,g=l.PC_showexitprogram;return(0,o.createVNode)(1,"div","NtosWrapper",[(0,o.createVNode)(1,"div","NtosWrapper__header NtosHeader",[(0,o.createVNode)(1,"div","NtosHeader__left",[(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:2,children:m}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,mr:2,opacity:.33,children:"NtOS"})],4),(0,o.createVNode)(1,"div","NtosHeader__right",[C.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:e.icon})},e.icon)})),(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:p&&(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:p})}),!!s&&u&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:[u&&(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:u}),d&&d]}),f&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:f})}),!!g&&(0,o.createComponentVNode)(2,a.Button,{width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-minimize-o",tooltip:"Minimize",tooltipPosition:"bottom",onClick:function(){return c("PC_minimize")}}),!!g&&(0,o.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-close-o",tooltip:"Close",tooltipPosition:"bottom-left",onClick:function(){return c("PC_exit")}}),!g&&(0,o.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"power-off",tooltip:"Power off",tooltipPosition:"bottom-left",onClick:function(){return c("PC_shutdown")}})],0)],4,{onMouseDown:function(){(0,i.refocusLayout)()}}),(0,o.createVNode)(1,"div","NtosWrapper__content",t,0)],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.NuclearBomb=void 0;var o=n(1),r=n(12),a=n(3),i=n(2),c=function(e){var t=(0,a.useBackend)(e).act;return(0,o.createComponentVNode)(2,i.Box,{width:"185px",children:(0,o.createComponentVNode)(2,i.Grid,{width:"1px",children:[["1","4","7","C"],["2","5","8","0"],["3","6","9","E"]].map((function(e){return(0,o.createComponentVNode)(2,i.Grid.Column,{children:e.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{fluid:!0,bold:!0,mb:1,content:e,textAlign:"center",fontSize:"40px",lineHeight:"50px",width:"55px",className:(0,r.classes)(["NuclearBomb__Button","NuclearBomb__Button--keypad","NuclearBomb__Button--"+e]),onClick:function(){return t("keypad",{digit:e})}},e)}))},e[0])}))})})};t.NuclearBomb=function(e){var t=e.state,n=(0,a.useBackend)(e),r=n.act,l=n.data,u=(l.anchored,l.disk_present,l.status1),s=l.status2;return(0,o.createComponentVNode)(2,i.Box,{m:1,children:[(0,o.createComponentVNode)(2,i.Box,{mb:1,className:"NuclearBomb__displayBox",children:u}),(0,o.createComponentVNode)(2,i.Flex,{mb:1.5,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Box,{className:"NuclearBomb__displayBox",children:s})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",fontSize:"24px",lineHeight:"23px",textAlign:"center",width:"43px",ml:1,mr:"3px",mt:"3px",className:"NuclearBomb__Button NuclearBomb__Button--keypad",onClick:function(){return r("eject_disk")}})})]}),(0,o.createComponentVNode)(2,i.Flex,{ml:"3px",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,c,{state:t})}),(0,o.createComponentVNode)(2,i.Flex.Item,{ml:1,width:"129px",children:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,bold:!0,content:"ARM",textAlign:"center",fontSize:"28px",lineHeight:"32px",mb:1,className:"NuclearBomb__Button NuclearBomb__Button--C",onClick:function(){return r("arm")}}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,bold:!0,content:"ANCHOR",textAlign:"center",fontSize:"28px",lineHeight:"32px",className:"NuclearBomb__Button NuclearBomb__Button--E",onClick:function(){return r("anchor")}}),(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",color:"#9C9987",fontSize:"80px",children:(0,o.createComponentVNode)(2,i.Icon,{name:"radiation"})}),(0,o.createComponentVNode)(2,i.Box,{height:"80px",className:"NuclearBomb__NTIcon"})]})})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(1),r=n(3),a=n(2);t.OperatingComputer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.table,l=i.surgeries,u=void 0===l?[]:l,s=i.procedures,d=void 0===s?[]:s,p=i.patient,f=void 0===p?{}:p;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:"Patient State",children:[!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Table Detected"}),(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Patient State",level:2,children:f?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State",color:f.statstate,children:f.stat}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood Type",children:f.blood_type}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f.health,minValue:f.minHealth,maxValue:f.maxHealth,color:f.health>=0?"good":"average",content:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:f.health})})}),[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}].map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f[e.type]/f.maxHealth,color:"bad",content:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:f[e.type]})})},e.type)}))]}):"No Patient Detected"}),(0,o.createComponentVNode)(2,a.Section,{title:"Initiated Procedures",level:2,children:d.length?d.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,level:3,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Next Step",children:[e.next_step,e.chems_needed&&(0,o.createFragment)([(0,o.createVNode)(1,"b",null,"Required Chemicals:",16),(0,o.createVNode)(1,"br"),e.chems_needed],0)]}),!!i.alternative_step&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alternative Step",children:[e.alternative_step,e.alt_chems_needed&&(0,o.createFragment)([(0,o.createVNode)(1,"b",null,"Required Chemicals:",16),(0,o.createVNode)(1,"br"),e.alt_chems_needed],0)]})]})},e.name)})):"No Active Procedures"})]})]},"state"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:"Surgery Procedures",children:(0,o.createComponentVNode)(2,a.Section,{title:"Advanced Surgery Procedures",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"download",content:"Sync Research Database",onClick:function(){return n("sync")}}),u.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,level:2,children:e.desc},e.name)}))]})},"procedures")]})}},function(e,t,n){"use strict";t.__esModule=!0,t.OreBox=void 0;var o=n(1),r=n(31),a=n(19),i=n(2);t.OreBox=function(e){var t=e.state,n=t.config,c=t.data,l=n.ref,u=c.materials;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Ores",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Empty",onClick:function(){return(0,a.act)(l,"removeall")}}),children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Ore"}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:"Amount"})]}),u.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,r.toTitleCase)(e.name)}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{color:"label",inline:!0,children:e.amount})})]},e.type)}))]})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Box,{children:["All ores will be placed in here when you are wearing a mining stachel on your belt or in a pocket while dragging the ore box.",(0,o.createVNode)(1,"br"),"Gibtonite is not accepted."]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.OreRedemptionMachine=void 0;var o=n(1),r=n(31),a=n(3),i=n(2);t.OreRedemptionMachine=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,l=r.unclaimedPoints,u=r.materials,s=r.alloys,d=r.diskDesigns,p=r.hasDisk;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.BlockQuote,{mb:1,children:["This machine only accepts ore.",(0,o.createVNode)(1,"br"),"Gibtonite and Slag are not accepted."]}),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"label",mr:1,children:"Unclaimed points:"}),l,(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Claim",disabled:0===l,onClick:function(){return n("Claim")}})]})]}),(0,o.createComponentVNode)(2,i.Section,{children:p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{mb:1,children:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject design disk",onClick:function(){return n("diskEject")}})}),(0,o.createComponentVNode)(2,i.Table,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:["File ",e.index,": ",e.name]}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,i.Button,{disabled:!e.canupload,content:"Upload",onClick:function(){return n("diskUpload",{design:e.index})}})})]},e.index)}))})],4)||(0,o.createComponentVNode)(2,i.Button,{icon:"save",content:"Insert design disk",onClick:function(){return n("diskInsert")}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,i.Table,{children:u.map((function(e){return(0,o.createComponentVNode)(2,c,{material:e,onRelease:function(t){return n("Release",{id:e.id,sheets:t})}},e.id)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"Alloys",children:(0,o.createComponentVNode)(2,i.Table,{children:s.map((function(e){return(0,o.createComponentVNode)(2,c,{material:e,onRelease:function(t){return n("Smelt",{id:e.id,sheets:t})}},e.id)}))})})],4)};var c=function(e){var t,n;function a(){var t;return(t=e.call(this)||this).state={amount:1},t}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.prototype.render=function(){var e=this,t=this.state.amount,n=this.props,a=n.material,c=n.onRelease,l=Math.floor(a.amount);return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,r.toTitleCase)(a.name).replace("Alloy","")}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{mr:2,color:"label",inline:!0,children:a.value&&a.value+" cr"})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{mr:2,color:"label",inline:!0,children:[l," sheets"]})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:[(0,o.createComponentVNode)(2,i.NumberInput,{width:"32px",step:1,stepPixelSize:5,minValue:1,maxValue:50,value:t,onChange:function(t,n){return e.setState({amount:n})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:l<1,content:"Release",onClick:function(){return c(t)}})]})]})},a}(o.Component)},function(e,t,n){"use strict";t.__esModule=!0,t.Pandemic=t.PandemicAntibodyDisplay=t.PandemicSymptomDisplay=t.PandemicDiseaseDisplay=t.PandemicBeakerDisplay=void 0;var o=n(1),r=n(28),a=n(3),i=n(2),c=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,c=r.has_beaker,l=r.beaker_empty,u=r.has_blood,s=r.blood,d=!c||l;return(0,o.createComponentVNode)(2,i.Section,{title:"Beaker",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Empty and Eject",color:"bad",disabled:d,onClick:function(){return n("empty_eject_beaker")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"trash",content:"Empty",disabled:d,onClick:function(){return n("empty_beaker")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject",disabled:!c,onClick:function(){return n("eject_beaker")}})],4),children:c?l?(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Beaker is empty"}):u?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood DNA",children:s&&s.dna||"Unknown"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Type",children:s&&s.type||"Unknown"})]}):(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"No blood detected"}):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No beaker loaded"})})};t.PandemicBeakerDisplay=c;var l=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,c=r.is_ready;return(r.viruses||[]).map((function(e){var t=e.symptoms||[];return(0,o.createComponentVNode)(2,i.Section,{title:e.can_rename?(0,o.createComponentVNode)(2,i.Input,{value:e.name,onChange:function(t,o){return n("rename_disease",{index:e.index,name:o})}}):e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"flask",content:"Create culture bottle",disabled:!c,onClick:function(){return n("create_culture_bottle",{index:e.index})}}),children:[(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:e.description}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Agent",children:e.agent}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Spread",children:e.spread}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Possible Cure",children:e.cure})]})})]}),!!e.is_adv&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Statistics",level:2,children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Resistance",children:e.resistance}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stealth",children:e.stealth})]})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stage speed",children:e.stage_speed}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmissibility",children:e.transmission})]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Symptoms",level:2,children:t.map((function(e){return(0,o.createComponentVNode)(2,i.Collapsible,{title:e.name,children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,u,{symptom:e})})},e.name)}))})],4)]},e.name)}))};t.PandemicDiseaseDisplay=l;var u=function(e){var t=e.symptom,n=t.name,a=t.desc,c=t.stealth,l=t.resistance,u=t.stage_speed,s=t.transmission,d=t.level,p=t.neutered,f=(0,r.map)((function(e,t){return{desc:e,label:t}}))(t.threshold_desc||{});return(0,o.createComponentVNode)(2,i.Section,{title:n,level:2,buttons:!!p&&(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",children:"Neutered"}),children:[(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{size:2,children:a}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Resistance",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stealth",children:c}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stage Speed",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmission",children:s})]})})]}),f.length>0&&(0,o.createComponentVNode)(2,i.Section,{title:"Thresholds",level:3,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.label,children:e.desc},e.label)}))})})]})};t.PandemicSymptomDisplay=u;var s=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,c=r.resistances||[];return(0,o.createComponentVNode)(2,i.Section,{title:"Antibodies",children:c.length>0?(0,o.createComponentVNode)(2,i.LabeledList,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:(0,o.createComponentVNode)(2,i.Button,{icon:"eye-dropper",content:"Create vaccine bottle",disabled:!r.is_ready,onClick:function(){return n("create_vaccine_bottle",{index:e.id})}})},e.name)}))}):(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",mt:1,children:"No antibodies detected."})})};t.PandemicAntibodyDisplay=s;t.Pandemic=function(e){var t=(0,a.useBackend)(e).data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c,{state:e.state}),!!t.has_blood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,l,{state:e.state}),(0,o.createComponentVNode)(2,s,{state:e.state})],4)],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.PortableGenerator=void 0;var o=n(1),r=n(3),a=n(2);t.PortableGenerator=function(e){var t,n=(0,r.useBackend)(e),i=n.act,c=n.data;return t=c.stack_percent>50?"good":c.stack_percent>15?"average":"bad",(0,o.createFragment)([!c.anchored&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Generator not anchored."}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power switch",children:(0,o.createComponentVNode)(2,a.Button,{icon:c.active?"power-off":"times",onClick:function(){return i("toggle_power")},disabled:!c.ready_to_boot,children:c.active?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:c.sheet_name+" sheets",children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:t,children:c.sheets}),c.sheets>=1&&(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"eject",disabled:c.active,onClick:function(){return i("eject")},children:"Eject"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current sheet level",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.stack_percent/100,ranges:{good:[.1,Infinity],average:[.01,.1],bad:[-Infinity,.01]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Heat level",children:c.current_heat<100?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"good",children:"Nominal"}):c.current_heat<200?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:"Caution"}):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"bad",children:"DANGER"})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current output",children:c.power_output}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust output",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"minus",onClick:function(){return i("lower_power")},children:c.power_generated}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return i("higher_power")},children:c.power_generated})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power available",children:(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:!c.connected&&"bad",children:c.connected?c.power_available:"Unconnected"})})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.PortableScrubber=t.PortablePump=t.PortableBasicInfo=void 0;var o=n(1),r=n(3),a=n(2),i=n(37),c=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.connected,l=i.holding,u=i.on,s=i.pressure;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return n("power")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Port",color:c?"good":"average",children:c?"Connected":"Not Connected"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",minHeight:"82px",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",disabled:!l,onClick:function(){return n("eject")}}),children:l?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:l.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l.pressure})," kPa"]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No holding tank"})})],4)};t.PortableBasicInfo=c;t.PortablePump=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,l=i.direction,u=(i.holding,i.target_pressure),s=i.default_pressure,d=i.min_pressure,p=i.max_pressure;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c,{state:e.state}),(0,o.createComponentVNode)(2,a.Section,{title:"Pump",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l?"sign-in-alt":"sign-out-alt",content:l?"In":"Out",selected:l,onClick:function(){return n("direction")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:u,unit:"kPa",width:"75px",minValue:d,maxValue:p,step:10,onChange:function(e,t){return n("pressure",{pressure:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Presets",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"minus",disabled:u===d,onClick:function(){return n("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",disabled:u===s,onClick:function(){return n("pressure",{pressure:"reset"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",disabled:u===p,onClick:function(){return n("pressure",{pressure:"max"})}})]})]})})],4)};t.PortableScrubber=function(e){var t=(0,r.useBackend)(e),n=t.act,l=t.data.filter_types||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,c,{state:e.state}),(0,o.createComponentVNode)(2,a.Section,{title:"Filters",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.enabled?"check-square-o":"square-o",content:(0,i.getGasLabel)(e.gas_id,e.gas_name),selected:e.enabled,onClick:function(){return n("toggle_filter",{val:e.gas_id})}},e.id)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitor=void 0;var o=n(1),r=n(28),a=n(70),i=n(20),c=n(12),l=n(2);var u=5e5,s=function(e){var t=String(e.split(" ")[1]).toLowerCase();return["w","kw","mw","gw"].indexOf(t)},d=function(e){var t,n;function c(){var t;return(t=e.call(this)||this).state={sortByField:null},t}return n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,c.prototype.render=function(){var e=this,t=this.props.state.data,n=t.history,c=this.state.sortByField,d=n.supply[n.supply.length-1]||0,m=n.demand[n.demand.length-1]||0,h=n.supply.map((function(e,t){return[t,e]})),C=n.demand.map((function(e,t){return[t,e]})),g=Math.max.apply(Math,[u].concat(n.supply,n.demand)),b=(0,a.flow)([(0,r.map)((function(e,t){return Object.assign({},e,{id:e.name+t})})),"name"===c&&(0,r.sortBy)((function(e){return e.name})),"charge"===c&&(0,r.sortBy)((function(e){return-e.charge})),"draw"===c&&(0,r.sortBy)((function(e){return-s(e.load)}),(function(e){return-parseFloat(e.load)}))])(t.areas);return(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Flex,{spacing:1,children:[(0,o.createComponentVNode)(2,l.Flex.Item,{width:"200px",children:(0,o.createComponentVNode)(2,l.Section,{children:(0,o.createComponentVNode)(2,l.LabeledList,{children:[(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Supply",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:d,minValue:0,maxValue:g,color:"teal",content:(0,i.toFixed)(d/1e3)+" kW"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Draw",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:m,minValue:0,maxValue:g,color:"pink",content:(0,i.toFixed)(m/1e3)+" kW"})})]})})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,l.Section,{position:"relative",height:"100%",children:[(0,o.createComponentVNode)(2,l.Chart.Line,{fillPositionedParent:!0,data:h,rangeX:[0,h.length-1],rangeY:[0,g],strokeColor:"rgba(0, 181, 173, 1)",fillColor:"rgba(0, 181, 173, 0.25)"}),(0,o.createComponentVNode)(2,l.Chart.Line,{fillPositionedParent:!0,data:C,rangeX:[0,C.length-1],rangeY:[0,g],strokeColor:"rgba(224, 57, 151, 1)",fillColor:"rgba(224, 57, 151, 0.25)"})]})})]}),(0,o.createComponentVNode)(2,l.Section,{children:[(0,o.createComponentVNode)(2,l.Box,{mb:1,children:[(0,o.createComponentVNode)(2,l.Box,{inline:!0,mr:2,color:"label",children:"Sort by:"}),(0,o.createComponentVNode)(2,l.Button.Checkbox,{checked:"name"===c,content:"Name",onClick:function(){return e.setState({sortByField:"name"!==c&&"name"})}}),(0,o.createComponentVNode)(2,l.Button.Checkbox,{checked:"charge"===c,content:"Charge",onClick:function(){return e.setState({sortByField:"charge"!==c&&"charge"})}}),(0,o.createComponentVNode)(2,l.Button.Checkbox,{checked:"draw"===c,content:"Draw",onClick:function(){return e.setState({sortByField:"draw"!==c&&"draw"})}})]}),(0,o.createComponentVNode)(2,l.Table,{children:[(0,o.createComponentVNode)(2,l.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Area"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,children:"Charge"}),(0,o.createComponentVNode)(2,l.Table.Cell,{textAlign:"right",children:"Draw"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,title:"Equipment",children:"Eqp"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,title:"Lighting",children:"Lgt"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,title:"Environment",children:"Env"})]}),b.map((function(e,t){return(0,o.createVNode)(1,"tr","Table__row candystripe",[(0,o.createVNode)(1,"td",null,e.name,0),(0,o.createVNode)(1,"td","Table__cell text-right text-nowrap",(0,o.createComponentVNode)(2,p,{charging:e.charging,charge:e.charge}),2),(0,o.createVNode)(1,"td","Table__cell text-right text-nowrap",e.load,0),(0,o.createVNode)(1,"td","Table__cell text-center text-nowrap",(0,o.createComponentVNode)(2,f,{status:e.eqp}),2),(0,o.createVNode)(1,"td","Table__cell text-center text-nowrap",(0,o.createComponentVNode)(2,f,{status:e.lgt}),2),(0,o.createVNode)(1,"td","Table__cell text-center text-nowrap",(0,o.createComponentVNode)(2,f,{status:e.env}),2)],4,null,e.id)}))]})]})],4)},c}(o.Component);t.PowerMonitor=d;var p=function(e){var t=e.charging,n=e.charge;return(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Icon,{width:"18px",textAlign:"center",name:0===t&&(n>50?"battery-half":"battery-quarter")||1===t&&"bolt"||2===t&&"battery-full",color:0===t&&(n>50?"yellow":"red")||1===t&&"yellow"||2===t&&"green"}),(0,o.createComponentVNode)(2,l.Box,{inline:!0,width:"36px",textAlign:"right",children:(0,i.toFixed)(n)+"%"})],4)};p.defaultHooks=c.pureComponentHooks;var f=function(e){var t=e.status,n=Boolean(2&t),r=Boolean(1&t),a=(n?"On":"Off")+" ["+(r?"auto":"manual")+"]";return(0,o.createComponentVNode)(2,l.ColorBox,{color:n?"good":"bad",content:r?undefined:"M",title:a})};f.defaultHooks=c.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Radio=void 0;var o=n(1),r=n(28),a=n(20),i=n(3),c=n(2),l=n(37);t.Radio=function(e){var t=(0,i.useBackend)(e),n=t.act,u=t.data,s=u.freqlock,d=u.frequency,p=u.minFrequency,f=u.maxFrequency,m=u.listening,h=u.broadcasting,C=u.command,g=u.useCommand,b=u.subspace,v=u.subspaceSwitchable,N=l.RADIO_CHANNELS.find((function(e){return e.freq===d})),V=(0,r.map)((function(e,t){return{name:t,status:!!e}}))(u.channels);return(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Frequency",children:[s&&(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:"light-gray",children:(0,a.toFixed)(d/10,1)+" kHz"})||(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:10,minValue:p/10,maxValue:f/10,value:d/10,format:function(e){return(0,a.toFixed)(e,1)},onDrag:function(e,t){return n("frequency",{adjust:t-d/10})}}),N&&(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:N.color,ml:2,children:["[",N.name,"]"]})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Audio",children:[(0,o.createComponentVNode)(2,c.Button,{textAlign:"center",width:"37px",icon:m?"volume-up":"volume-mute",selected:m,onClick:function(){return n("listen")}}),(0,o.createComponentVNode)(2,c.Button,{textAlign:"center",width:"37px",icon:h?"microphone":"microphone-slash",selected:h,onClick:function(){return n("broadcast")}}),!!C&&(0,o.createComponentVNode)(2,c.Button,{ml:1,icon:"bullhorn",selected:g,content:"High volume "+(g?"ON":"OFF"),onClick:function(){return n("command")}}),!!v&&(0,o.createComponentVNode)(2,c.Button,{ml:1,icon:"bullhorn",selected:b,content:"Subspace Tx "+(b?"ON":"OFF"),onClick:function(){return n("subspace")}})]}),!!b&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Channels",children:[0===V.length&&(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:"bad",children:"No encryption keys installed."}),V.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,c.Button,{icon:e.status?"check-square-o":"square-o",selected:e.status,content:e.name,onClick:function(){return n("channel",{channel:e.name})}})},e.name)}))]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.RapidPipeDispenser=void 0;var o=n(1),r=n(12),a=n(3),i=n(2),c=["Atmospherics","Disposals","Transit Tubes"],l={Atmospherics:"wrench",Disposals:"trash-alt","Transit Tubes":"bus",Pipes:"grip-lines","Disposal Pipes":"grip-lines",Devices:"microchip","Heat Exchange":"thermometer-half","Station Equipment":"microchip"},u={grey:"#bbbbbb",amethyst:"#a365ff",blue:"#4466ff",brown:"#b26438",cyan:"#48eae8",dark:"#808080",green:"#1edd00",orange:"#ffa030",purple:"#b535ea",red:"#ff3333",violet:"#6e00f6",yellow:"#ffce26"},s=[{name:"Dispense",bitmask:1},{name:"Connect",bitmask:2},{name:"Destroy",bitmask:4},{name:"Paint",bitmask:8}];t.RapidPipeDispenser=function(e){var t=(0,a.useBackend)(e),n=t.act,d=t.data,p=d.category,f=d.categories,m=void 0===f?[]:f,h=d.selected_color,C=d.piping_layer,g=d.mode,b=d.preview_rows.flatMap((function(e){return e.previews}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Category",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:p===t,icon:l[e],color:"transparent",content:e,onClick:function(){return n("category",{category:t})}},e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Modes",children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:g&e.bitmask,content:e.name,onClick:function(){return n("mode",{mode:e.bitmask})}},e.bitmask)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Color",children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"64px",color:u[h],content:h}),Object.keys(u).map((function(e){return(0,o.createComponentVNode)(2,i.ColorBox,{ml:1,color:u[e],onClick:function(){return n("color",{paint_color:e})}},e)}))]})]})}),(0,o.createComponentVNode)(2,i.Flex,{m:-.5,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{m:.5,children:(0,o.createComponentVNode)(2,i.Section,{children:[0===p&&(0,o.createComponentVNode)(2,i.Box,{mb:1,children:[1,2,3].map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:e===C,content:"Layer "+e,onClick:function(){return n("piping_layer",{piping_layer:e})}},e)}))}),(0,o.createComponentVNode)(2,i.Box,{width:"108px",children:b.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{title:e.dir_name,selected:e.selected,style:{width:"48px",height:"48px",padding:0},onClick:function(){return n("setdir",{dir:e.dir,flipped:e.flipped})},children:(0,o.createComponentVNode)(2,i.Box,{className:(0,r.classes)(["pipes32x32",e.dir+"-"+e.icon_state]),style:{transform:"scale(1.5) translate(17%, 17%)"}})},e.dir)}))})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{m:.5,grow:1,children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Tabs,{children:m.map((function(e){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{fluid:!0,icon:l[e.cat_name],label:e.cat_name,children:function(){return e.recipes.map((function(t){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,ellipsis:!0,checked:t.selected,content:t.pipe_name,title:t.pipe_name,onClick:function(){return n("pipe_type",{pipe_type:t.pipe_index,category:e.cat_name})}},t.pipe_index)}))}},e.cat_name)}))})})})]})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SatelliteControl=void 0;var o=n(1),r=n(3),a=n(2),i=n(163);t.SatelliteControl=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.satellites||[];return(0,o.createFragment)([c.meteor_shield&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledListItem,{label:"Coverage",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.meteor_shield_coverage/c.meteor_shield_coverage_max,content:100*c.meteor_shield_coverage/c.meteor_shield_coverage_max+"%",ranges:{good:[1,Infinity],average:[.3,1],bad:[-Infinity,.3]}})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Satellite Controls",children:(0,o.createComponentVNode)(2,a.Box,{mr:-1,children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.active,content:"#"+e.id+" "+e.mode,onClick:function(){return n("toggle",{id:e.id})}},e.id)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.ScannerGate=void 0;var o=n(1),r=n(3),a=n(2),i=n(69),c=["Positive","Harmless","Minor","Medium","Harmful","Dangerous","BIOHAZARD"],l=[{name:"Human",value:"human"},{name:"Lizardperson",value:"lizard"},{name:"Flyperson",value:"fly"},{name:"Felinid",value:"felinid"},{name:"Plasmaman",value:"plasma"},{name:"Mothperson",value:"moth"},{name:"Jellyperson",value:"jelly"},{name:"Podperson",value:"pod"},{name:"Golem",value:"golem"},{name:"Zombie",value:"zombie"}],u=[{name:"Starving",value:150},{name:"Obese",value:600}];t.ScannerGate=function(e){var t=e.state,n=(0,r.useBackend)(e),a=n.act,c=n.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox,{locked:c.locked,onLockedStatusChange:function(){return a("toggle_lock")}}),!c.locked&&(0,o.createComponentVNode)(2,d,{state:t})],0)};var s={Off:{title:"Scanner Mode: Off",component:function(){return p}},Wanted:{title:"Scanner Mode: Wanted",component:function(){return f}},Guns:{title:"Scanner Mode: Guns",component:function(){return m}},Mindshield:{title:"Scanner Mode: Mindshield",component:function(){return h}},Disease:{title:"Scanner Mode: Disease",component:function(){return C}},Species:{title:"Scanner Mode: Species",component:function(){return g}},Nutrition:{title:"Scanner Mode: Nutrition",component:function(){return b}},Nanites:{title:"Scanner Mode: Nanites",component:function(){return v}}},d=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data.scan_mode,l=s[c]||s.off,u=l.component();return(0,o.createComponentVNode)(2,a.Section,{title:l.title,buttons:"Off"!==c&&(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"back",onClick:function(){return i("set_mode",{new_mode:"Off"})}}),children:(0,o.createComponentVNode)(2,u,{state:t})})},p=function(e){var t=(0,r.useBackend)(e).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:"Select a scanning mode below."}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Wanted",onClick:function(){return t("set_mode",{new_mode:"Wanted"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Guns",onClick:function(){return t("set_mode",{new_mode:"Guns"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Mindshield",onClick:function(){return t("set_mode",{new_mode:"Mindshield"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Disease",onClick:function(){return t("set_mode",{new_mode:"Disease"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Species",onClick:function(){return t("set_mode",{new_mode:"Species"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nutrition",onClick:function(){return t("set_mode",{new_mode:"Nutrition"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nanites",onClick:function(){return t("set_mode",{new_mode:"Nanites"})}})]})],4)},f=function(e){var t=e.state,n=(0,r.useBackend)(e).data.reverse;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",n?"does not have":"has"," ","any warrants for their arrest."]}),(0,o.createComponentVNode)(2,N,{state:t})],4)},m=function(e){var t=e.state,n=(0,r.useBackend)(e).data.reverse;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",n?"does not have":"has"," ","any guns."]}),(0,o.createComponentVNode)(2,N,{state:t})],4)},h=function(e){var t=e.state,n=(0,r.useBackend)(e).data.reverse;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",n?"does not have":"has"," ","a mindshield."]}),(0,o.createComponentVNode)(2,N,{state:t})],4)},C=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,l=n.data,u=l.reverse,s=l.disease_threshold;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",u?"does not have":"has"," ","a disease equal or worse than ",s,"."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e===s,content:e,onClick:function(){return i("set_disease_threshold",{new_threshold:e})}},e)}))}),(0,o.createComponentVNode)(2,N,{state:t})],4)},g=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data,u=c.reverse,s=c.target_species,d=l.find((function(e){return e.value===s}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned is ",u?"not":""," ","of the ",d.name," species.","zombie"===s&&" All zombie types will be detected, including dormant zombies."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.value===s,content:e.name,onClick:function(){return i("set_target_species",{new_species:e.value})}},e.value)}))}),(0,o.createComponentVNode)(2,N,{state:t})],4)},b=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data,l=c.reverse,s=c.target_nutrition,d=u.find((function(e){return e.value===s}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",l?"does not have":"has"," ","the ",d.name," nutrition level."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.value===s,content:e.name,onClick:function(){return i("set_target_nutrition",{new_nutrition:e.name})}},e.name)}))}),(0,o.createComponentVNode)(2,N,{state:t})],4)},v=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data,l=c.reverse,u=c.nanite_cloud;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",l?"does not have":"has"," ","nanite cloud ",u,"."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cloud ID",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:u,width:"65px",minValue:1,maxValue:100,stepPixelSize:2,onChange:function(e,t){return i("set_nanite_cloud",{new_cloud:t})}})})})}),(0,o.createComponentVNode)(2,N,{state:t})],4)},N=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data.reverse;return(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scanning Mode",children:(0,o.createComponentVNode)(2,a.Button,{content:i?"Inverted":"Default",icon:i?"random":"long-arrow-alt-right",onClick:function(){return n("toggle_reverse")},color:i?"bad":"good"})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleManipulator=void 0;var o=n(1),r=n(28),a=n(3),i=n(2);t.ShuttleManipulator=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.shuttles||[],u=c.templates||{},s=c.selected||{},d=c.existing_shuttle||{};return(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Status",children:function(){return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Table,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"JMP",onClick:function(){return n("jump_to",{type:"mobile",id:e.id})}},e.id)}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Fly",disabled:!e.can_fly,onClick:function(){return n("fly",{id:e.id})}},e.id)}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.id}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.status}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[e.mode,!!e.timer&&(0,o.createFragment)([(0,o.createTextVNode)("("),e.timeleft,(0,o.createTextVNode)(")"),(0,o.createComponentVNode)(2,i.Button,{content:"Fast Travel",disabled:!e.can_fast_travel,onClick:function(){return n("fast_travel",{id:e.id})}},e.id)],0)]})]},e.id)}))})})}},"status"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Templates",children:function(){return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Tabs,{children:(0,r.map)((function(e,t){var r=e.templates||[];return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:e.port_id,children:r.map((function(e){var t=e.shuttle_id===s.shuttle_id;return(0,o.createComponentVNode)(2,i.Section,{title:e.name,level:2,buttons:(0,o.createComponentVNode)(2,i.Button,{content:t?"Selected":"Select",selected:t,onClick:function(){return n("select_template",{shuttle_id:e.shuttle_id})}}),children:(!!e.description||!!e.admin_notes)&&(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!e.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:e.description}),!!e.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:e.admin_notes})]})},e.shuttle_id)}))},t)}))(u)})})}},"templates"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Modification",children:(0,o.createComponentVNode)(2,i.Section,{children:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{level:2,title:s.name,children:(!!s.description||!!s.admin_notes)&&(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!s.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:s.description}),!!s.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:s.admin_notes})]})}),d?(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Existing Shuttle: "+d.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Jump To",onClick:function(){return n("jump_to",{type:"mobile",id:d.id})}}),children:[d.status,!!d.timer&&(0,o.createFragment)([(0,o.createTextVNode)("("),d.timeleft,(0,o.createTextVNode)(")")],0)]})})}):(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Existing Shuttle: None"}),(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Preview",onClick:function(){return n("preview",{shuttle_id:s.shuttle_id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Load",color:"bad",onClick:function(){return n("load",{shuttle_id:s.shuttle_id})}})]})],0):"No shuttle selected"})},"modification")]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SlimeBodySwapper=t.BodyEntry=void 0;var o=n(1),r=n(3),a=n(2),i=function(e){var t=e.body,n=e.swapFunc;return(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:t.htmlcolor,children:t.name}),level:2,buttons:(0,o.createComponentVNode)(2,a.Button,{content:{owner:"You Are Here",stranger:"Occupied",available:"Swap"}[t.occupied],selected:"owner"===t.occupied,color:"stranger"===t.occupied&&"bad",onClick:function(){return n()}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",bold:!0,color:{Dead:"bad",Unconscious:"average",Conscious:"good"}[t.status],children:t.status}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Jelly",children:t.exoticblood}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:t.area})]})})};t.BodyEntry=i;t.SlimeBodySwapper=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data.bodies,l=void 0===c?[]:c;return(0,o.createComponentVNode)(2,a.Section,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i,{body:e,swapFunc:function(){return n("swap",{ref:e.ref})}},e.name)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.Signaler=void 0;var o=n(1),r=n(2),a=n(3),i=n(20);t.Signaler=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.code,u=c.frequency,s=c.minFrequency,d=c.maxFrequency;return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Grid,{children:[(0,o.createComponentVNode)(2,r.Grid.Column,{size:1.4,color:"label",children:"Frequency:"}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:s/10,maxValue:d/10,value:u/10,format:function(e){return(0,i.toFixed)(e,1)},width:13,onDrag:function(e,t){return n("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return n("reset",{reset:"freq"})}})})]}),(0,o.createComponentVNode)(2,r.Grid,{mt:.6,children:[(0,o.createComponentVNode)(2,r.Grid.Column,{size:1.4,color:"label",children:"Code:"}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:l,width:13,onDrag:function(e,t){return n("code",{code:t})}})}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return n("reset",{reset:"code"})}})})]}),(0,o.createComponentVNode)(2,r.Grid,{mt:.8,children:(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{mb:-.1,fluid:!0,icon:"arrow-up",content:"Send Signal",textAlign:"center",onClick:function(){return n("signal")}})})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SmartVend=void 0;var o=n(1),r=n(28),a=n(3),i=n(2);t.SmartVend=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data;return(0,o.createComponentVNode)(2,i.Section,{title:"Storage",buttons:!!c.isdryer&&(0,o.createComponentVNode)(2,i.Button,{icon:c.drying?"stop":"tint",onClick:function(){return n("Dry")},children:c.drying?"Stop drying":"Dry"}),children:0===c.contents.length&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:["Unfortunately, this ",c.name," is empty."]})||(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Item"}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"center",children:c.verb?c.verb:"Dispense"})]}),(0,r.map)((function(e,t){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:e.amount}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:[(0,o.createComponentVNode)(2,i.Button,{content:"One",disabled:e.amount<1,onClick:function(){return n("Release",{name:e.name,amount:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Many",disabled:e.amount<=1,onClick:function(){return n("Release",{name:e.name})}})]})]},t)}))(c.contents)]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Smes=void 0;var o=n(1),r=n(3),a=n(2);t.Smes=function(e){var t,n,i=(0,r.useBackend)(e),c=i.act,l=i.data;return t=l.capacityPercent>=100?"good":l.inputting?"average":"bad",n=l.outputting?"good":l.charge>0?"average":"bad",(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Stored Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:.01*l.capacityPercent,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.inputAttempt?"sync-alt":"times",selected:l.inputAttempt,onClick:function(){return c("tryinput")},children:l.inputAttempt?"Auto":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:t,children:l.capacityPercent>=100?"Fully Charged":l.inputting?"Charging":"Not Charging"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.inputLevel/l.inputLevelMax,content:l.inputLevel_text})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust Input",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===l.inputLevel,onClick:function(){return c("input",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===l.inputLevel,onClick:function(){return c("input",{adjust:-1e4})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:Math.round(l.inputLevel/1e3),unit:"kW",width:"65px",minValue:0,maxValue:l.inputLevelMax/1e3,onChange:function(e,t){return c("input",{target:1e3*t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:l.inputLevel===l.inputLevelMax,onClick:function(){return c("input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:l.inputLevel===l.inputLevelMax,onClick:function(){return c("input",{target:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available",children:l.inputAvailable})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.outputAttempt?"power-off":"times",selected:l.outputAttempt,onClick:function(){return c("tryoutput")},children:l.outputAttempt?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:n,children:l.outputting?"Sending":l.charge>0?"Not Sending":"No Charge"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.outputLevel/l.outputLevelMax,content:l.outputLevel_text})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust Output",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===l.outputLevel,onClick:function(){return c("output",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===l.outputLevel,onClick:function(){return c("output",{adjust:-1e4})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:Math.round(l.outputLevel/1e3),unit:"kW",width:"65px",minValue:0,maxValue:l.outputLevelMax/1e3,onChange:function(e,t){return c("output",{target:1e3*t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:l.outputLevel===l.outputLevelMax,onClick:function(){return c("output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:l.outputLevel===l.outputLevelMax,onClick:function(){return c("output",{target:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outputting",children:l.outputUsed})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SmokeMachine=void 0;var o=n(1),r=n(3),a=n(2);t.SmokeMachine=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.TankContents,l=(i.isTankLoaded,i.TankCurrentVolume),u=i.TankMaxVolume,s=i.active,d=i.setting,p=(i.screen,i.maxSetting),f=void 0===p?[]:p;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Dispersal Tank",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:s?"power-off":"times",selected:s,content:s?"On":"Off",onClick:function(){return n("power")}}),children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:l/u,ranges:{bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{initial:0,value:l||0})," / "+u]}),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Range",children:[1,2,3,4,5].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{selected:d===e,icon:"plus",content:3*e,disabled:f0?"good":"bad",children:f})]})}),(0,o.createComponentVNode)(2,a.Grid.Column,{size:1.5,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power output",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.66,Infinity],average:[.33,.66],bad:[-Infinity,.33]},minValue:0,maxValue:1,value:l,content:c+" W"})})})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracking",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:0===p,onClick:function(){return n("tracking",{mode:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"clock-o",content:"Timed",selected:1===p,onClick:function(){return n("tracking",{mode:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:2===p,disabled:!m,onClick:function(){return n("tracking",{mode:2})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Azimuth",children:[(0===p||1===p)&&(0,o.createComponentVNode)(2,a.NumberInput,{width:"52px",unit:"\xb0",step:1,stepPixelSize:2,minValue:-360,maxValue:720,value:u,onDrag:function(e,t){return n("azimuth",{value:t})}}),1===p&&(0,o.createComponentVNode)(2,a.NumberInput,{width:"80px",unit:"\xb0/m",step:.01,stepPixelSize:1,minValue:-d-.01,maxValue:d+.01,value:s,format:function(e){return(Math.sign(e)>0?"+":"-")+Math.abs(e)},onDrag:function(e,t){return n("azimuth_rate",{value:t})}}),2===p&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"label",mt:"3px",children:[u+" \xb0"," (auto)"]})]})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SpaceHeater=void 0;var o=n(1),r=n(3),a=n(2);t.SpaceHeater=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Power",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject Cell",disabled:!i.hasPowercell||!i.open,onClick:function(){return n("eject")}}),(0,o.createComponentVNode)(2,a.Button,{icon:i.on?"power-off":"times",content:i.on?"On":"Off",selected:i.on,disabled:!i.hasPowercell,onClick:function(){return n("power")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell",color:!i.hasPowercell&&"bad",children:i.hasPowercell&&(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.powerLevel/100,content:i.powerLevel+"%",ranges:{good:[.6,Infinity],average:[.3,.6],bad:[-Infinity,.3]}})||"None"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Thermostat",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Temperature",children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"18px",color:Math.abs(i.targetTemp-i.currentTemp)>50?"bad":Math.abs(i.targetTemp-i.currentTemp)>20?"average":"good",children:[i.currentTemp,"\xb0C"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Temperature",children:i.open&&(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.targetTemp),width:"65px",unit:"\xb0C",minValue:i.minTemp,maxValue:i.maxTemp,onChange:function(e,t){return n("target",{target:t})}})||i.targetTemp+"\xb0C"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",children:i.open?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"thermometer-half",content:"Auto",selected:"auto"===i.mode,onClick:function(){return n("mode",{mode:"auto"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fire-alt",content:"Heat",selected:"heat"===i.mode,onClick:function(){return n("mode",{mode:"heat"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fan",content:"Cool",selected:"cool"===i.mode,onClick:function(){return n("mode",{mode:"cool"})}})],4):"Auto"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SpawnersMenu=void 0;var o=n(1),r=n(3),a=n(2);t.SpawnersMenu=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data.spawners||[];return(0,o.createComponentVNode)(2,a.Section,{children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name+" ("+e.amount_left+" left)",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Jump",onClick:function(){return n("jump",{name:e.name})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Spawn",onClick:function(){return n("spawn",{name:e.name})}})],4),children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,mb:1,fontSize:"20px",children:e.short_desc}),(0,o.createComponentVNode)(2,a.Box,{children:e.flavor_text}),!!e.important_info&&(0,o.createComponentVNode)(2,a.Box,{mt:1,bold:!0,color:"bad",fontSize:"26px",children:e.important_info})]},e.name)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsole=void 0;var o=n(1),r=n(3),a=n(2);t.StationAlertConsole=function(e){var t=(0,r.useBackend)(e).data.alarms||[],n=t.Fire||[],i=t.Atmosphere||[],c=t.Power||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Fire Alarms",children:(0,o.createVNode)(1,"ul",null,[0===n.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),n.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Atmospherics Alarms",children:(0,o.createVNode)(1,"ul",null,[0===i.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),i.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Alarms",children:(0,o.createVNode)(1,"ul",null,[0===c.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),c.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SuitStorageUnit=void 0;var o=n(1),r=n(3),a=n(2);t.SuitStorageUnit=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.locked,l=i.open,u=i.safeties,s=i.uv_active,d=i.occupied,p=i.suit,f=i.helmet,m=i.mask,h=i.storage;return(0,o.createFragment)([!(!d||!u)&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Biological entity detected in suit chamber. Please remove before continuing with operation."}),s&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Contents are currently being decontaminated. Please wait."})||(0,o.createComponentVNode)(2,a.Section,{title:"Storage",minHeight:"260px",buttons:(0,o.createFragment)([!l&&(0,o.createComponentVNode)(2,a.Button,{icon:c?"unlock":"lock",content:c?"Unlock":"Lock",onClick:function(){return n("lock")}}),!c&&(0,o.createComponentVNode)(2,a.Button,{icon:l?"sign-out-alt":"sign-in-alt",content:l?"Close":"Open",onClick:function(){return n("door")}})],0),children:c&&(0,o.createComponentVNode)(2,a.Box,{mt:6,bold:!0,textAlign:"center",fontSize:"40px",children:[(0,o.createComponentVNode)(2,a.Box,{children:"Unit Locked"}),(0,o.createComponentVNode)(2,a.Icon,{name:"lock"})]})||l&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Helmet",children:(0,o.createComponentVNode)(2,a.Button,{icon:f?"square":"square-o",content:f||"Empty",disabled:!f,onClick:function(){return n("dispense",{item:"helmet"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Suit",children:(0,o.createComponentVNode)(2,a.Button,{icon:p?"square":"square-o",content:p||"Empty",disabled:!p,onClick:function(){return n("dispense",{item:"suit"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mask",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"square":"square-o",content:m||"Empty",disabled:!m,onClick:function(){return n("dispense",{item:"mask"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Storage",children:(0,o.createComponentVNode)(2,a.Button,{icon:h?"square":"square-o",content:h||"Empty",disabled:!h,onClick:function(){return n("dispense",{item:"storage"})}})})]})||(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"recycle",content:"Decontaminate",disabled:d&&u,textAlign:"center",onClick:function(){return n("uv")}})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.Tank=void 0;var o=n(1),r=n(3),a=n(2);t.Tank=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.tankPressure/1013,content:i.tankPressure+" kPa",ranges:{good:[.35,Infinity],average:[.15,.35],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure Regulator",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:i.ReleasePressure===i.minReleasePressure,onClick:function(){return n("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.releasePressure),width:"65px",unit:"kPa",minValue:i.minReleasePressure,maxValue:i.maxReleasePressure,onChange:function(e,t){return n("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:i.ReleasePressure===i.maxReleasePressure,onClick:function(){return n("pressure",{pressure:"max"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"",disabled:i.ReleasePressure===i.defaultReleasePressure,onClick:function(){return n("pressure",{pressure:"reset"})}})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TankDispenser=void 0;var o=n(1),r=n(3),a=n(2);t.TankDispenser=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Plasma",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.plasma?"square":"square-o",content:"Dispense",disabled:!i.plasma,onClick:function(){return n("plasma")}}),children:i.plasma}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.oxygen?"square":"square-o",content:"Dispense",disabled:!i.oxygen,onClick:function(){return n("oxygen")}}),children:i.oxygen})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Teleporter=void 0;var o=n(1),r=n(3),a=n(2);t.Teleporter=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.calibrated,l=i.calibrating,u=i.power_station,s=i.regime_set,d=i.teleporter_hub,p=i.target;return(0,o.createComponentVNode)(2,a.Section,{children:!u&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",textAlign:"center",children:"No power station linked."})||!d&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",textAlign:"center",children:"No hub linked."})||(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Regime",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"tools",content:"Change Regime",onClick:function(){return n("regimeset")}}),children:s}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Target",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"tools",content:"Set Target",onClick:function(){return n("settarget")}}),children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Calibration",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"tools",content:"Calibrate Hub",onClick:function(){return n("calibrate")}}),children:l&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"In Progress"})||c&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Optimal"})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Sub-Optimal"})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ThermoMachine=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.ThermoMachine=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:c.temperature,format:function(e){return(0,r.toFixed)(e,2)}})," K"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:c.pressure,format:function(e){return(0,r.toFixed)(e,2)}})," kPa"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Controls",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:c.on?"power-off":"times",content:c.on?"On":"Off",selected:c.on,onClick:function(){return n("power")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target Temperature",children:(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,value:Math.round(c.target),unit:"K",width:"62px",minValue:Math.round(c.min),maxValue:Math.round(c.max),step:5,stepPixelSize:3,onDrag:function(e,t){return n("target",{target:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Presets",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:c.target===c.min,title:"Minimum temperature",onClick:function(){return n("target",{target:c.min})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync",disabled:c.target===c.initial,title:"Room Temperature",onClick:function(){return n("target",{target:c.initial})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:c.target===c.max,title:"Maximum Temperature",onClick:function(){return n("target",{target:c.max})}})]})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.TurbineComputer=void 0;var o=n(1),r=n(3),a=n(2);t.TurbineComputer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=Boolean(i.compressor&&!i.compressor_broke&&i.turbine&&!i.turbine_broke);return(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:i.online?"power-off":"times",content:i.online?"Online":"Offline",selected:i.online,disabled:!c,onClick:function(){return n("toggle_power")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reconnect",onClick:function(){return n("reconnect")}})],4),children:!c&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Compressor Status",color:!i.compressor||i.compressor_broke?"bad":"good",children:i.compressor_broke?i.compressor?"Offline":"Missing":"Online"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Status",color:!i.turbine||i.turbine_broke?"bad":"good",children:i.turbine_broke?i.turbine?"Offline":"Missing":"Online"})]})||(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Speed",children:[i.rpm," RPM"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Internal Temp",children:[i.temp," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Generated Power",children:i.power})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VaultController=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.VaultController=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data;return(0,o.createComponentVNode)(2,i.Section,{title:"Lock Status: ",buttons:(0,o.createComponentVNode)(2,i.Button,{content:c.doorstatus?"Locked":"Unlocked",icon:c.doorstatus?"lock":"unlock",disabled:c.stored1?r-1:0),i=1;i1?t-1:0),o=1;o0?"good":"bad",content:i>0?"Earned "+i+" times":"Locked"})],0,{style:{"vertical-align":"top"}})],4,null,t)};t.Score=c;t.Achievements=function(e){var t=(0,r.useBackend)(e).data;return(0,o.createComponentVNode)(2,a.Tabs,{children:[t.categories.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:e,children:(0,o.createComponentVNode)(2,a.Box,{as:"Table",children:t.achievements.filter((function(t){return t.category===e})).map((function(e){return e.score?(0,o.createComponentVNode)(2,c,{name:e.name,desc:e.desc,icon_class:e.icon_class,value:e.value},e.name):(0,o.createComponentVNode)(2,i,{name:e.name,desc:e.desc,icon_class:e.icon_class,value:e.value},e.name)}))})},e)})),(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:"High Scores",children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:t.highscore.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:e.name,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{className:"candystripe",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:"#"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:"Key"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:"Score"})]}),Object.keys(e.scores).map((function(n,r){return(0,o.createComponentVNode)(2,a.Table.Row,{className:"candystripe",m:2,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{color:"label",textAlign:"center",children:r+1}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:n===t.user_ckey&&"green",textAlign:"center",children:[0===r&&(0,o.createComponentVNode)(2,a.Icon,{name:"crown",color:"gold",mr:2}),n,0===r&&(0,o.createComponentVNode)(2,a.Icon,{name:"crown",color:"gold",ml:2})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:e.scores[n]})]},n)}))]})},e.name)}))})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.BlockQuote=void 0;var o=n(1),r=n(12),a=n(17);t.BlockQuote=function(e){var t=e.className,n=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,["className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["BlockQuote",t])},n)))}},function(e,t,n){"use strict";var o,r;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=o,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(o||(t.VNodeFlags=o={})),t.ChildFlags=r,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(r||(t.ChildFlags=r={}))},function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var o=n(1),r=n(12),a=n(17);var i=function(e){var t=e.color,n=e.content,i=e.className,c=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,["color","content","className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["ColorBox",i]),color:n?null:"transparent",backgroundColor:t,content:n||"."},c)))};t.ColorBox=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Collapsible=void 0;var o=n(1),r=n(17),a=n(114);var i=function(e){var t,n;function i(t){var n;n=e.call(this,t)||this;var o=t.open;return n.state={open:o||!1},n}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,i.prototype.render=function(){var e=this,t=this.props,n=this.state.open,i=t.children,c=t.color,l=void 0===c?"default":c,u=t.title,s=t.buttons,d=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}(t,["children","color","title","buttons"]);return(0,o.createComponentVNode)(2,r.Box,{mb:1,children:[(0,o.createVNode)(1,"div","Table",[(0,o.createVNode)(1,"div","Table__cell",(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({fluid:!0,color:l,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},d,{children:u}))),2),s&&(0,o.createVNode)(1,"div","Table__cell Table__cell--collapsing",s,0)],0),n&&(0,o.createComponentVNode)(2,r.Box,{mt:1,children:i})]})},i}(o.Component);t.Collapsible=i},function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var o=n(1),r=n(17);t.Dimmer=function(e){var t=e.style,n=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,["style"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Box,Object.assign({style:Object.assign({position:"absolute",top:0,bottom:0,left:0,right:0,"background-color":"rgba(0, 0, 0, 0.75)","z-index":1},t)},n)))}},function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var o=n(1),r=n(12),a=n(17),i=n(87);function c(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}var l=function(e){var t,n;function l(t){var n;return(n=e.call(this,t)||this).state={selected:t.selected,open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=l.prototype;return u.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},u.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},u.setSelected=function(e){this.setState({selected:e}),this.setOpen(!1),this.props.onSelected(e)},u.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){return(0,o.createVNode)(1,"div","Dropdown__menuentry",t,0,{onClick:function(n){e.setSelected(t)}},t)}));return n.length?n:"No Options Found"},u.render=function(){var e=this,t=this.props,n=t.color,l=void 0===n?"default":n,u=t.over,s=t.width,d=(t.onClick,t.selected,c(t,["color","over","width","onClick","selected"])),p=d.className,f=c(d,["className"]),m=u?!this.state.open:this.state.open,h=this.state.open?(0,o.createVNode)(1,"div",(0,r.classes)(["Dropdown__menu",u&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:s}},null,(function(t){e.menuRef=t})):null;return(0,o.createVNode)(1,"div","Dropdown",[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({width:s,className:(0,r.classes)(["Dropdown__control","Button","Button--color--"+l,p])},f,{onClick:function(t){e.setOpen(!e.state.open)},children:[(0,o.createVNode)(1,"span","Dropdown__selected-text",this.state.selected,0),(0,o.createVNode)(1,"span","Dropdown__arrow-button",(0,o.createComponentVNode)(2,i.Icon,{name:m?"chevron-up":"chevron-down"}),2)]}))),h],0)},l}(o.Component);t.Dropdown=l},function(e,t,n){"use strict";t.__esModule=!0,t.FlexItem=t.computeFlexItemProps=t.Flex=t.computeFlexProps=void 0;var o=n(1),r=n(12),a=n(17);function i(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}var c=function(e){var t=e.className,n=e.direction,o=e.wrap,a=e.align,c=e.justify,l=e.spacing,u=void 0===l?0:l,s=i(e,["className","direction","wrap","align","justify","spacing"]);return Object.assign({className:(0,r.classes)(["Flex",u>0&&"Flex--spacing--"+u,t]),style:Object.assign({},s.style,{"flex-direction":n,"flex-wrap":o,"align-items":a,"justify-content":c})},s)};t.computeFlexProps=c;var l=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},c(e))))};t.Flex=l,l.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.className,n=e.grow,o=e.order,a=e.align,c=i(e,["className","grow","order","align"]);return Object.assign({className:(0,r.classes)(["Flex__item",t]),style:Object.assign({},c.style,{"flex-grow":n,order:o,"align-self":a})},c)};t.computeFlexItemProps=u;var s=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({},u(e))))};t.FlexItem=s,s.defaultHooks=r.pureComponentHooks,l.Item=s},function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var o=n(1),r=n(12),a=n(17);var i=function(e){var t=e.className,n=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,["className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["NoticeBox",t])},n)))};t.NoticeBox=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.NumberInput=void 0;var o=n(1),r=n(20),a=n(12),i=n(19),c=n(158),l=n(17);var u=function(e){var t,n;function u(t){var n;n=e.call(this,t)||this;var a=t.value;return n.inputRef=(0,o.createRef)(),n.state={value:a,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props.value;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:e.screenY,value:t,internalValue:t}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,o=t.dragging,r=t.value,a=n.props.onDrag;o&&a&&a(e,r)}),500),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,o=t.minValue,a=t.maxValue,i=t.step,c=t.stepPixelSize;n.setState((function(t){var n=Object.assign({},t),l=n.origin-e.screenY;if(t.dragging){var u=Number.isFinite(o)?o%i:0;n.internalValue=(0,r.clamp)(n.internalValue+l*i/c,o-i,a+i),n.value=(0,r.clamp)(n.internalValue-n.internalValue%i+u,o,a),n.origin=e.screenY}else Math.abs(l)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,o=t.onChange,r=t.onDrag,a=n.state,i=a.dragging,c=a.value,l=a.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!i,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),i)n.suppressFlicker(),o&&o(e,c),r&&r(e,c);else if(n.inputRef){var u=n.inputRef.current;u.value=l;try{u.focus(),u.select()}catch(s){}}},n}return n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,u.prototype.render=function(){var e=this,t=this.state,n=t.dragging,u=t.editing,s=t.value,d=t.suppressingFlicker,p=this.props,f=p.className,m=p.fluid,h=p.animated,C=p.value,g=p.unit,b=p.minValue,v=p.maxValue,N=p.height,V=p.width,y=p.lineHeight,_=p.fontSize,x=p.format,k=p.onChange,w=p.onDrag,L=C;(n||d)&&(L=s);var B=function(e){return(0,o.createVNode)(1,"div","NumberInput__content",e+(g?" "+g:""),0,{unselectable:i.tridentVersion<=4})},S=h&&!n&&!d&&(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:L,format:x,children:B})||B(x?x(L):L);return(0,o.createComponentVNode)(2,l.Box,{className:(0,a.classes)(["NumberInput",m&&"NumberInput--fluid",f]),minWidth:V,minHeight:N,lineHeight:y,fontSize:_,onMouseDown:this.handleDragStart,children:[(0,o.createVNode)(1,"div","NumberInput__barContainer",(0,o.createVNode)(1,"div","NumberInput__bar",null,1,{style:{height:(0,r.clamp)((L-b)/(v-b)*100,0,100)+"%"}}),2),S,(0,o.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:u?undefined:"none",height:N,"line-height":y,"font-size":_},onBlur:function(t){if(u){var n=(0,r.clamp)(t.target.value,b,v);e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),w&&w(t,n)}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,r.clamp)(t.target.value,b,v);return e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),void(w&&w(t,n))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef)]})},u}(o.Component);t.NumberInput=u,u.defaultHooks=a.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50}},function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBar=void 0;var o=n(1),r=n(12),a=n(20),i=function(e){var t=e.value,n=e.minValue,i=void 0===n?0:n,c=e.maxValue,l=void 0===c?1:c,u=e.ranges,s=void 0===u?{}:u,d=e.content,p=e.children,f=(t-i)/(l-i),m=d!==undefined||p!==undefined,h=e.color;if(!h)for(var C=0,g=Object.keys(s);C=v[0]&&t<=v[1]){h=b;break}}return h||(h="default"),(0,o.createVNode)(1,"div",(0,r.classes)(["ProgressBar","ProgressBar--color--"+h]),[(0,o.createVNode)(1,"div","ProgressBar__fill",null,1,{style:{width:100*(0,a.clamp)(f,0,1)+"%"}}),(0,o.createVNode)(1,"div","ProgressBar__content",[m&&d,m&&p,!m&&(0,a.toFixed)(100*f)+"%"],0)],4)};t.ProgressBar=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var o=n(1),r=n(12),a=n(17);var i=function(e){var t=e.className,n=e.title,i=e.level,c=void 0===i?1:i,l=e.buttons,u=e.content,s=e.children,d=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,["className","title","level","buttons","content","children"]),p=!(0,r.isFalsy)(n)||!(0,r.isFalsy)(l),f=!(0,r.isFalsy)(u)||!(0,r.isFalsy)(s);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Section","Section--level--"+c,t])},d,{children:[p&&(0,o.createVNode)(1,"div","Section__title",[(0,o.createVNode)(1,"span","Section__titleText",n,0),(0,o.createVNode)(1,"div","Section__buttons",l,0)],4),f&&(0,o.createVNode)(1,"div","Section__content",[u,s],0)]})))};t.Section=i,i.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Tab=t.Tabs=void 0;var o=n(1),r=n(12),a=n(17),i=n(114);function c(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}var l=function(e){var t=e,n=Array.isArray(t),o=0;for(t=n?t:t[Symbol.iterator]();;){var r;if(n){if(o>=t.length)break;r=t[o++]}else{if((o=t.next()).done)break;r=o.value}var a=r;if(!a.props||"Tab"!==a.props.__type__){var i=JSON.stringify(a,null,2);throw new Error(" only accepts children of type .This is what we received: "+i)}}},u=function(e){var t,n;function u(t){var n;return(n=e.call(this,t)||this).state={activeTabKey:null},n}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=u.prototype;return s.getActiveTab=function(){var e=this.state,t=this.props,n=(0,r.normalizeChildren)(t.children);l(n);var o=t.activeTab||e.activeTabKey,a=n.find((function(e){return(e.key||e.props.label)===o}));return a||(a=n[0],o=a&&(a.key||a.props.label)),{tabs:n,activeTab:a,activeTabKey:o}},s.render=function(){var e=this,t=this.props,n=t.className,l=t.vertical,u=(t.children,c(t,["className","vertical","children"])),s=this.getActiveTab(),d=s.tabs,p=s.activeTab,f=s.activeTabKey,m=null;return p&&(m=p.props.content||p.props.children),"function"==typeof m&&(m=m(f)),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Tabs",l&&"Tabs--vertical",n])},u,{children:[(0,o.createVNode)(1,"div","Tabs__tabBox",d.map((function(t){var n=t.props,a=n.className,l=n.label,u=(n.content,n.children,n.onClick),s=n.highlight,d=c(n,["className","label","content","children","onClick","highlight"]),p=t.key||t.props.label,m=t.active||p===f;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({className:(0,r.classes)(["Tabs__tab",m&&"Tabs__tab--active",s&&!m&&"color-yellow",a]),selected:m,color:"transparent",onClick:function(n){e.setState({activeTabKey:p}),u&&u(n,t)}},d,{children:l}),p))})),0),(0,o.createVNode)(1,"div","Tabs__content",m||null,0)]})))},u}(o.Component);t.Tabs=u;var s=function(e){return null};t.Tab=s,s.defaultProps={__type__:"Tab"},u.Tab=s},function(e,t,n){"use strict";t.__esModule=!0,t.TitleBar=void 0;var o=n(1),r=n(12),a=n(28),i=n(19),c=n(37),l=n(87),u=function(e){switch(e){case c.UI_INTERACTIVE:return"good";case c.UI_UPDATE:return"average";case c.UI_DISABLED:default:return"bad"}},s=function(e){var t=e.className,n=e.title,c=e.status,s=e.fancy,d=e.onDragStart,p=e.onClose;return(0,o.createVNode)(1,"div",(0,r.classes)(["TitleBar",t]),[(0,o.createComponentVNode)(2,l.Icon,{className:"TitleBar__statusIcon",color:u(c),name:"eye"}),(0,o.createVNode)(1,"div","TitleBar__title",n===n.toLowerCase()?(0,a.toTitleCase)(n):n,0),(0,o.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return s&&d(e)}}),!!s&&(0,o.createVNode)(1,"div","TitleBar__close TitleBar__clickable",i.tridentVersion<=4?"x":"\xd7",0,{onclick:p})],0)};t.TitleBar=s,s.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Chart=void 0;var o=n(1),r=n(29),a=n(17),i=n(12),c=n(19);var l=function(e,t,n,o){if(0===e.length)return[];var a=(0,r.zipWith)(Math.min).apply(void 0,e),i=(0,r.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(a[0]=n[0],i[0]=n[1]),o!==undefined&&(a[1]=o[0],i[1]=o[1]),(0,r.map)((function(e){return(0,r.zipWith)((function(e,t,n,o){return(e-t)/(n-t)*o}))(e,a,i,t)}))(e)},u=function(e){for(var t="",n=0;n=0||(r[n]=e[n]);return r}(t,["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"]),g=this.state.viewBox,b=l(r,g,i,c);if(b.length>0){var v=b[0],N=b[b.length-1];b.push([g[0]+h,N[1]]),b.push([g[0]+h,-h]),b.push([-h,-h]),b.push([-h,v[1]])}var V=u(b);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({position:"relative"},C,{children:function(t){return(0,o.normalizeProps)((0,o.createVNode)(1,"div",null,(0,o.createVNode)(32,"svg",null,(0,o.createVNode)(32,"polyline",null,null,1,{transform:"scale(1, -1) translate(0, -"+g[1]+")",fill:d,stroke:f,"stroke-width":h,points:V}),2,{viewBox:"0 0 "+g[0]+" "+g[1],preserveAspectRatio:"none",style:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"hidden"}}),2,Object.assign({},t),null,e.ref))}})))},r}(o.Component);s.defaultHooks=i.pureComponentHooks;var d={Line:c.tridentVersion<=4?function(e){return null}:s};t.Chart=d},function(e,t,n){"use strict";t.__esModule=!0,t.AiAirlock=void 0;var o=n(1),r=n(3),a=n(2);t.AiAirlock=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c={2:{color:"good",localStatusText:"Offline"},1:{color:"average",localStatusText:"Caution"},0:{color:"bad",localStatusText:"Optimal"}},l=c[i.power.main]||c[0],u=c[i.power.backup]||c[0],s=c[i.shock]||c[0];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main",color:l.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!i.power.main,content:"Disrupt",onClick:function(){return n("disrupt-main")}}),children:[i.power.main?"Online":"Offline"," ",i.wires.main_1&&i.wires.main_2?i.power.main_timeleft>0&&"["+i.power.main_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Backup",color:u.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!i.power.backup,content:"Disrupt",onClick:function(){return n("disrupt-backup")}}),children:[i.power.backup?"Online":"Offline"," ",i.wires.backup_1&&i.wires.backup_2?i.power.backup_timeleft>0&&"["+i.power.backup_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Electrify",color:s.color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",disabled:!(i.wires.shock&&0===i.shock),content:"Restore",onClick:function(){return n("shock-restore")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!i.wires.shock,content:"Temporary",onClick:function(){return n("shock-temp")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!i.wires.shock,content:"Permanent",onClick:function(){return n("shock-perm")}})],4),children:[2===i.shock?"Safe":"Electrified"," ",(i.wires.shock?i.shock_timeleft>0&&"["+i.shock_timeleft+"s]":"[Wires have been cut!]")||-1===i.shock_timeleft&&"[Permanent]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Access and Door Control",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.id_scanner?"power-off":"times",content:i.id_scanner?"Enabled":"Disabled",selected:i.id_scanner,disabled:!i.wires.id_scanner,onClick:function(){return n("idscan-toggle")}}),children:!i.wires.id_scanner&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Access",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.emergency?"power-off":"times",content:i.emergency?"Enabled":"Disabled",selected:i.emergency,onClick:function(){return n("emergency-toggle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.locked?"lock":"unlock",content:i.locked?"Lowered":"Raised",selected:i.locked,disabled:!i.wires.bolts,onClick:function(){return n("bolt-toggle")}}),children:!i.wires.bolts&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolt Lights",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.lights?"power-off":"times",content:i.lights?"Enabled":"Disabled",selected:i.lights,disabled:!i.wires.lights,onClick:function(){return n("light-toggle")}}),children:!i.wires.lights&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Force Sensors",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.safe?"power-off":"times",content:i.safe?"Enabled":"Disabled",selected:i.safe,disabled:!i.wires.safe,onClick:function(){return n("safe-toggle")}}),children:!i.wires.safe&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Timing Safety",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.speed?"power-off":"times",content:i.speed?"Enabled":"Disabled",selected:i.speed,disabled:!i.wires.timing,onClick:function(){return n("speed-toggle")}}),children:!i.wires.timing&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.opened?"sign-out-alt":"sign-in-alt",content:i.opened?"Open":"Closed",selected:i.opened,disabled:i.locked||i.welded,onClick:function(){return n("open-close")}}),children:!(!i.locked&&!i.welded)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("[Door is "),i.locked?"bolted":"",i.locked&&i.welded?" and ":"",i.welded?"welded":"",(0,o.createTextVNode)("!]")],0)})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.AirAlarm=void 0;var o=n(1),r=n(20),a=n(28),i=n(3),c=n(2),l=n(37),u=n(69);t.AirAlarm=function(e){var t=e.state,n=(0,i.useBackend)(e),r=n.act,a=n.data,c=a.locked&&!a.siliconUser;return(0,o.createFragment)([(0,o.createComponentVNode)(2,u.InterfaceLockNoticeBox,{siliconUser:a.siliconUser,locked:a.locked,onLockStatusChange:function(){return r("lock")}}),(0,o.createComponentVNode)(2,s,{state:t}),!c&&(0,o.createComponentVNode)(2,p,{state:t})],0)};var s=function(e){var t=(0,i.useBackend)(e).data,n=(t.environment_data||[]).filter((function(e){return e.value>=.01})),a={0:{color:"good",localStatusText:"Optimal"},1:{color:"average",localStatusText:"Caution"},2:{color:"bad",localStatusText:"Danger (Internals Required)"}},l=a[t.danger_level]||a[0];return(0,o.createComponentVNode)(2,c.Section,{title:"Air Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[n.length>0&&(0,o.createFragment)([n.map((function(e){var t=a[e.danger_level]||a[0];return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e.name,color:t.color,children:[(0,r.toFixed)(e.value,2),e.unit]},e.name)})),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Local status",color:l.color,children:l.localStatusText}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Area status",color:t.atmos_alarm||t.fire_alarm?"bad":"good",children:(t.atmos_alarm?"Atmosphere Alarm":t.fire_alarm&&"Fire Alarm")||"Nominal"})],0)||(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Warning",color:"bad",children:"Cannot obtain air sample for analysis."}),!!t.emagged&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Warning",color:"bad",children:"Safety measures offline. Device may exhibit abnormal behavior."})]})})},d={home:{title:"Air Controls",component:function(){return f}},vents:{title:"Vent Controls",component:function(){return m}},scrubbers:{title:"Scrubber Controls",component:function(){return C}},modes:{title:"Operating Mode",component:function(){return b}},thresholds:{title:"Alarm Thresholds",component:function(){return v}}},p=function(e){var t=e.state,n=(0,i.useBackend)(e),r=n.act,a=n.config,l=d[a.screen]||d.home,u=l.component();return(0,o.createComponentVNode)(2,c.Section,{title:l.title,buttons:"home"!==a.screen&&(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("tgui:view",{screen:"home"})}}),children:(0,o.createComponentVNode)(2,u,{state:t})})},f=function(e){var t=(0,i.useBackend)(e),n=t.act,r=t.data,a=r.mode,l=r.atmos_alarm;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:l?"exclamation-triangle":"exclamation",color:l&&"caution",content:"Area Atmosphere Alarm",onClick:function(){return n(l?"reset":"alarm")}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:3===a?"exclamation-triangle":"exclamation",color:3===a&&"danger",content:"Panic Siphon",onClick:function(){return n("mode",{mode:3===a?1:3})}}),(0,o.createComponentVNode)(2,c.Box,{mt:2}),(0,o.createComponentVNode)(2,c.Button,{icon:"sign-out-alt",content:"Vent Controls",onClick:function(){return n("tgui:view",{screen:"vents"})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:"filter",content:"Scrubber Controls",onClick:function(){return n("tgui:view",{screen:"scrubbers"})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:"cog",content:"Operating Mode",onClick:function(){return n("tgui:view",{screen:"modes"})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1}),(0,o.createComponentVNode)(2,c.Button,{icon:"chart-bar",content:"Alarm Thresholds",onClick:function(){return n("tgui:view",{screen:"thresholds"})}})],4)},m=function(e){var t=e.state,n=(0,i.useBackend)(e).data.vents;return n&&0!==n.length?n.map((function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,h,Object.assign({state:t},e),e.id_tag))})):"Nothing to show"},h=function(e){var t=e.id_tag,n=e.long_name,r=e.power,l=e.checks,u=e.excheck,s=e.incheck,d=e.direction,p=e.external,f=e.internal,m=e.extdefault,h=e.intdefault,C=(0,i.useBackend)(e).act;return(0,o.createComponentVNode)(2,c.Section,{level:2,title:(0,a.decodeHtmlEntities)(n),buttons:(0,o.createComponentVNode)(2,c.Button,{icon:r?"power-off":"times",selected:r,content:r?"On":"Off",onClick:function(){return C("power",{id_tag:t,val:Number(!r)})}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Mode",children:"release"===d?"Pressurizing":"Releasing"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pressure Regulator",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"sign-in-alt",content:"Internal",selected:s,onClick:function(){return C("incheck",{id_tag:t,val:l})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"sign-out-alt",content:"External",selected:u,onClick:function(){return C("excheck",{id_tag:t,val:l})}})]}),!!s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Internal Target",children:[(0,o.createComponentVNode)(2,c.NumberInput,{value:Math.round(f),unit:"kPa",width:"75px",minValue:0,step:10,maxValue:5066,onChange:function(e,n){return C("set_internal_pressure",{id_tag:t,value:n})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"undo",disabled:h,content:"Reset",onClick:function(){return C("reset_internal_pressure",{id_tag:t})}})]}),!!u&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"External Target",children:[(0,o.createComponentVNode)(2,c.NumberInput,{value:Math.round(p),unit:"kPa",width:"75px",minValue:0,step:10,maxValue:5066,onChange:function(e,n){return C("set_external_pressure",{id_tag:t,value:n})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"undo",disabled:m,content:"Reset",onClick:function(){return C("reset_external_pressure",{id_tag:t})}})]})]})})},C=function(e){var t=e.state,n=(0,i.useBackend)(e).data.scrubbers;return n&&0!==n.length?n.map((function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,g,Object.assign({state:t},e),e.id_tag))})):"Nothing to show"},g=function(e){var t=e.long_name,n=e.power,r=e.scrubbing,u=e.id_tag,s=e.widenet,d=e.filter_types,p=(0,i.useBackend)(e).act;return(0,o.createComponentVNode)(2,c.Section,{level:2,title:(0,a.decodeHtmlEntities)(t),buttons:(0,o.createComponentVNode)(2,c.Button,{icon:n?"power-off":"times",content:n?"On":"Off",selected:n,onClick:function(){return p("power",{id_tag:u,val:Number(!n)})}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Mode",children:[(0,o.createComponentVNode)(2,c.Button,{icon:r?"filter":"sign-in-alt",color:r||"danger",content:r?"Scrubbing":"Siphoning",onClick:function(){return p("scrubbing",{id_tag:u,val:Number(!r)})}}),(0,o.createComponentVNode)(2,c.Button,{icon:s?"expand":"compress",selected:s,content:s?"Expanded range":"Normal range",onClick:function(){return p("widenet",{id_tag:u,val:Number(!s)})}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Filters",children:r&&d.map((function(e){return(0,o.createComponentVNode)(2,c.Button,{icon:e.enabled?"check-square-o":"square-o",content:(0,l.getGasLabel)(e.gas_id,e.gas_name),title:e.gas_name,selected:e.enabled,onClick:function(){return p("toggle_filter",{id_tag:u,val:e.gas_id})}},e.gas_id)}))||"N/A"})]})})},b=function(e){var t=(0,i.useBackend)(e),n=t.act,r=t.data.modes;return r&&0!==r.length?r.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:e.selected?"check-square-o":"square-o",selected:e.selected,color:e.selected&&e.danger&&"danger",content:e.name,onClick:function(){return n("mode",{mode:e.mode})}}),(0,o.createComponentVNode)(2,c.Box,{mt:1})],4,e.mode)})):"Nothing to show"},v=function(e){var t=(0,i.useBackend)(e),n=t.act,a=t.data.thresholds;return(0,o.createVNode)(1,"table","LabeledList",[(0,o.createVNode)(1,"thead",null,(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td"),(0,o.createVNode)(1,"td","color-bad","min2",16),(0,o.createVNode)(1,"td","color-average","min1",16),(0,o.createVNode)(1,"td","color-average","max1",16),(0,o.createVNode)(1,"td","color-bad","max2",16)],4),2),(0,o.createVNode)(1,"tbody",null,a.map((function(e){return(0,o.createVNode)(1,"tr",null,[(0,o.createVNode)(1,"td","LabeledList__label",e.name,0),e.settings.map((function(e){return(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,c.Button,{content:(0,r.toFixed)(e.selected,2),onClick:function(){return n("threshold",{env:e.env,"var":e.val})}}),2,null,e.val)}))],0,null,e.name)})),0)],4,{style:{width:"100%"}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockElectronics=void 0;var o=n(1),r=n(3),a=n(2);t.AirlockElectronics=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.regions||[],l={0:{icon:"times-circle"},1:{icon:"stop-circle"},2:{icon:"check-circle"}};return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Main",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access Required",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.oneAccess?"unlock":"lock",content:i.oneAccess?"One":"All",onClick:function(){return n("one_access")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mass Modify",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"check-double",content:"Grant All",onClick:function(){return n("grant_all")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"Clear All",onClick:function(){return n("clear_all")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unrestricted Access",children:[(0,o.createComponentVNode)(2,a.Button,{icon:1&i.unres_direction?"check-square-o":"square-o",content:"North",selected:1&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"1"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:2&i.unres_direction?"check-square-o":"square-o",content:"East",selected:2&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"2"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:4&i.unres_direction?"check-square-o":"square-o",content:"South",selected:4&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"4"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:8&i.unres_direction?"check-square-o":"square-o",content:"West",selected:8&i.unres_direction,onClick:function(){return n("direc_set",{unres_direction:"8"})}})]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Access",children:(0,o.createComponentVNode)(2,a.Box,{height:"261px",children:(0,o.createComponentVNode)(2,a.Tabs,{vertical:!0,children:c.map((function(e){var t=e.name,r=e.accesses||[],i=l[function(e){var t=!1,n=!1;return e.forEach((function(e){e.req?t=!0:n=!0})),!t&&n?0:t&&n?1:2}(r)].icon;return(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:i,label:t,children:function(){return r.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{icon:e.req?"check-square-o":"square-o",content:e.name,selected:e.req,onClick:function(){return n("set",{access:e.id})}})},e.id)}))}},t)}))})})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.Apc=void 0;var o=n(1),r=n(3),a=n(2),i=n(69);t.Apc=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.locked&&!c.siliconUser,u={2:{color:"good",externalPowerText:"External Power",chargingText:"Fully Charged"},1:{color:"average",externalPowerText:"Low External Power",chargingText:"Charging"},0:{color:"bad",externalPowerText:"No External Power",chargingText:"Not Charging"}},s={1:{icon:"terminal",content:"Override Programming",action:"hack"},2:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"},3:{icon:"caret-square-left",content:"Return to Main Core",action:"deoccupy"},4:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"}},d=u[c.externalPower]||u[0],p=u[c.chargingStatus]||u[0],f=c.powerChannels||[],m=s[c.malfStatus]||s[0],h=c.powerCellStatus/100;return c.failTime>0?(0,o.createComponentVNode)(2,a.NoticeBox,{children:[(0,o.createVNode)(1,"b",null,(0,o.createVNode)(1,"h3",null,"SYSTEM FAILURE",16),2),(0,o.createVNode)(1,"i",null,"I/O regulators malfunction detected! Waiting for system reboot...",16),(0,o.createVNode)(1,"br"),"Automatic reboot in ",c.failTime," seconds...",(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reboot Now",onClick:function(){return n("reboot")}})]}):(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox,{siliconUser:c.siliconUser,locked:c.locked,onLockStatusChange:function(){return n("lock")}}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main Breaker",color:d.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.isOperating?"power-off":"times",content:c.isOperating?"On":"Off",selected:c.isOperating&&!l,disabled:l,onClick:function(){return n("breaker")}}),children:["[ ",d.externalPowerText," ]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power Cell",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:"good",value:h})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",color:p.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.chargeMode?"sync":"close",content:c.chargeMode?"Auto":"Off",disabled:l,onClick:function(){return n("charge")}}),children:["[ ",p.chargingText," ]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Channels",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[f.map((function(e){var t=e.topicParams;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{inline:!0,mx:2,color:e.status>=2?"good":"bad",children:e.status>=2?"On":"Off"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:!l&&(1===e.status||3===e.status),disabled:l,onClick:function(){return n("channel",t.auto)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:"On",selected:!l&&2===e.status,disabled:l,onClick:function(){return n("channel",t.on)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:!l&&0===e.status,disabled:l,onClick:function(){return n("channel",t.off)}})],4),children:e.powerLoad},e.title)})),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Load",children:(0,o.createVNode)(1,"b",null,c.totalLoad,0)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Misc",buttons:!!c.siliconUser&&(0,o.createFragment)([!!c.malfStatus&&(0,o.createComponentVNode)(2,a.Button,{icon:m.icon,content:m.content,color:"bad",onClick:function(){return n(m.action)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:"Overload",onClick:function(){return n("overload")}})],0),children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.coverLocked?"lock":"unlock",content:c.coverLocked?"Engaged":"Disengaged",disabled:l,onClick:function(){return n("cover")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Lighting",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:c.emergencyLights?"Enabled":"Disabled",disabled:l,onClick:function(){return n("emergency_lighting")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Night Shift Lighting",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:c.nightshiftLights?"Enabled":"Disabled",disabled:l,onClick:function(){return n("toggle_nightshift")}})})]}),c.hijackable&&(0,o.createComponentVNode)(2,a.Section,{title:"Hijacking",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"unlock",content:"Hijack",disabled:c.hijacker,onClick:function(){return n("hijack")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lock",content:"Lockdown",disabled:!c.lockdownavail,onClick:function(){return n("lockdown")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:"Drain",disabled:!c.drainavail,onClick:function(){return n("drain")}})],4)})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosAlertConsole=void 0;var o=n(1),r=n(3),a=n(2);t.AtmosAlertConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.priority||[],l=i.minor||[];return(0,o.createComponentVNode)(2,a.Section,{title:"Alarms",children:(0,o.createVNode)(1,"ul",null,[c.length>0?c.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"bad",onClick:function(){return n("clear",{zone:e})}}),2,null,e)})):(0,o.createVNode)(1,"li","color-good","No Priority Alerts",16),l.length>0?l.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"average",onClick:function(){return n("clear",{zone:e})}}),2,null,e)})):(0,o.createVNode)(1,"li","color-good","No Minor Alerts",16)],0)})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosControlConsole=void 0;var o=n(1),r=n(29),a=n(20),i=n(3),c=n(2);t.AtmosControlConsole=function(e){var t=(0,i.useBackend)(e),n=t.act,l=t.data,u=l.sensors||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:!!l.tank&&u[0].long_name,children:u.map((function(e){var t=e.gases||{};return(0,o.createComponentVNode)(2,c.Section,{title:!l.tank&&e.long_name,level:2,children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pressure",children:(0,a.toFixed)(e.pressure,2)+" kPa"}),!!e.temperature&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:(0,a.toFixed)(e.temperature,2)+" K"}),(0,r.map)((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:t,children:(0,a.toFixed)(e,2)+"%"})}))(t)]})},e.id_tag)}))}),l.tank&&(0,o.createComponentVNode)(2,c.Section,{title:"Controls",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"undo",content:"Reconnect",onClick:function(){return n("reconnect")}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Input Injector",children:(0,o.createComponentVNode)(2,c.Button,{icon:l.inputting?"power-off":"times",content:l.inputting?"Injecting":"Off",selected:l.inputting,onClick:function(){return n("input")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Input Rate",children:(0,o.createComponentVNode)(2,c.NumberInput,{value:l.inputRate,unit:"L/s",width:"63px",minValue:0,maxValue:200,suppressFlicker:2e3,onChange:function(e,t){return n("rate",{rate:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Output Regulator",children:(0,o.createComponentVNode)(2,c.Button,{icon:l.outputting?"power-off":"times",content:l.outputting?"Open":"Closed",selected:l.outputting,onClick:function(){return n("output")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Output Pressure",children:(0,o.createComponentVNode)(2,c.NumberInput,{value:parseFloat(l.outputPressure),unit:"kPa",width:"75px",minValue:0,maxValue:4500,step:10,suppressFlicker:2e3,onChange:function(e,t){return n("pressure",{pressure:t})}})})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosFilter=void 0;var o=n(1),r=n(3),a=n(2),i=n(37);t.AtmosFilter=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.filter_types||[];return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:c.on?"power-off":"times",content:c.on?"On":"Off",selected:c.on,onClick:function(){return n("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transfer Rate",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(c.rate),width:"63px",unit:"L/s",minValue:0,maxValue:200,onDrag:function(e,t){return n("rate",{rate:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:c.rate===c.max_rate,onClick:function(){return n("rate",{rate:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Filter",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{selected:e.selected,content:(0,i.getGasLabel)(e.id,e.name),onClick:function(){return n("filter",{mode:e.id})}},e.id)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosMixer=void 0;var o=n(1),r=n(3),a=n(2);t.AtmosMixer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.on?"power-off":"times",content:i.on?"On":"Off",selected:i.on,onClick:function(){return n("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Pressure",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.set_pressure),unit:"kPa",width:"75px",minValue:0,maxValue:4500,step:10,onChange:function(e,t){return n("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:i.set_pressure===i.max_pressure,onClick:function(){return n("pressure",{pressure:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Node 1",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:i.node1_concentration,unit:"%",width:"60px",minValue:0,maxValue:100,stepPixelSize:2,onDrag:function(e,t){return n("node1",{concentration:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Node 2",children:(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:i.node2_concentration,unit:"%",width:"60px",minValue:0,maxValue:100,stepPixelSize:2,onDrag:function(e,t){return n("node2",{concentration:t})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosPump=void 0;var o=n(1),r=n(3),a=n(2);t.AtmosPump=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.on?"power-off":"times",content:i.on?"On":"Off",selected:i.on,onClick:function(){return n("power")}})}),i.max_rate?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transfer Rate",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.rate),width:"63px",unit:"L/s",minValue:0,maxValue:200,onChange:function(e,t){return n("rate",{rate:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:i.rate===i.max_rate,onClick:function(){return n("rate",{rate:"max"})}})]}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Pressure",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.pressure),unit:"kPa",width:"75px",minValue:0,maxValue:4500,step:10,onChange:function(e,t){return n("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"plus",content:"Max",disabled:i.pressure===i.max_pressure,onClick:function(){return n("pressure",{pressure:"max"})}})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BankMachine=void 0;var o=n(1),r=n(3),a=n(2);t.BankMachine=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.current_balance,l=i.siphoning,u=i.station_name;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:u+" Vault",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Balance",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l?"times":"sync",content:l?"Stop Siphoning":"Siphon Credits",selected:l,onClick:function(){return n(l?"halt":"siphon")}}),children:c+" cr"})})}),(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Authorized personnel only"})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.BluespaceArtillery=void 0;var o=n(1),r=n(3),a=n(2);t.BluespaceArtillery=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.notice,l=i.connected,u=i.unlocked,s=i.target;return(0,o.createFragment)([!!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:c}),l?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Target",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"crosshairs",disabled:!u,onClick:function(){return n("recalibrate")}}),children:(0,o.createComponentVNode)(2,a.Box,{color:s?"average":"bad",fontSize:"25px",children:s||"No Target Set"})}),(0,o.createComponentVNode)(2,a.Section,{children:u?(0,o.createComponentVNode)(2,a.Box,{style:{margin:"auto"},children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"FIRE",color:"bad",disabled:!s,fontSize:"30px",textAlign:"center",lineHeight:"46px",onClick:function(){return n("fire")}})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"bad",fontSize:"18px",children:"Bluespace artillery is currently locked."}),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:"Awaiting authorization via keycard reader from at minimum two station heads."})],4)})],4):(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance",children:(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",content:"Complete Deployment",onClick:function(){return n("build")}})})})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.Bepis=void 0;var o=n(1),r=(n(28),n(19)),a=n(2);t.Bepis=function(e){var t=e.state,n=t.config,i=t.data,c=n.ref,l=i.amount;return(0,o.createComponentVNode)(2,a.Section,{title:"Business Exploration Protocol Incubation Sink",children:[(0,o.createComponentVNode)(2,a.Section,{title:"Information",backgroundColor:"#450F44",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:i.manual_power?"Off":"On",selected:!i.manual_power,onClick:function(){return(0,r.act)(c,"toggle_power")}}),children:"All you need to know about the B.E.P.I.S. and you! The B.E.P.I.S. performs hundreds of tests a second using electrical and financial resources to invent new products, or discover new technologies otherwise overlooked for being too risky or too niche to produce!"}),(0,o.createComponentVNode)(2,a.Section,{title:"Payer's Account",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"redo-alt",content:"Reset Account",onClick:function(){return(0,r.act)(c,"account_reset")}}),children:["Console is currently being operated by ",i.account_owner?i.account_owner:"no one","."]}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{size:1.5,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored Data and Statistics",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Deposited Credits",children:i.stored_cash}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Investment Variability",children:[i.accuracy_percentage,"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Innovation Bonus",children:i.positive_cash_offset}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Risk Offset",color:"bad",children:i.negative_cash_offset}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Deposit Amount",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:l,unit:"Credits",minValue:100,maxValue:3e4,step:100,stepPixelSize:2,onChange:function(e,t){return(0,r.act)(c,"amount",{amount:t})}})})]})}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"donate",content:"Deposit Credits",disabled:1===i.manual_power||1===i.silicon_check,onClick:function(){return(0,r.act)(c,"deposit_cash")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Withdraw Credits",disabled:1===i.manual_power,onClick:function(){return(0,r.act)(c,"withdraw_cash")}})]})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Market Data and Analysis",children:[(0,o.createComponentVNode)(2,a.Box,{children:["Average technology cost: ",i.mean_value]}),i.error_name&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Previous Failure Reason: Deposited cash value too low. Please insert more money for future success."}),(0,o.createComponentVNode)(2,a.Box,{m:1}),(0,o.createComponentVNode)(2,a.Button,{icon:"microscope",disabled:1===i.manual_power,onClick:function(){return(0,r.act)(c,"begin_experiment")},content:"Begin Testing"})]})})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.BorgPanel=void 0;var o=n(1),r=n(3),a=n(2);t.BorgPanel=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.borg||{},l=i.cell||{},u=l.charge/l.maxcharge,s=i.channels||[],d=i.modules||[],p=i.upgrades||[],f=i.ais||[],m=i.laws||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:c.name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return n("rename")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Button,{icon:c.emagged?"check-square-o":"square-o",content:"Emagged",selected:c.emagged,onClick:function(){return n("toggle_emagged")}}),(0,o.createComponentVNode)(2,a.Button,{icon:c.lockdown?"check-square-o":"square-o",content:"Locked Down",selected:c.lockdown,onClick:function(){return n("toggle_lockdown")}}),(0,o.createComponentVNode)(2,a.Button,{icon:c.scrambledcodes?"check-square-o":"square-o",content:"Scrambled Codes",selected:c.scrambledcodes,onClick:function(){return n("toggle_scrambledcodes")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge",children:[l.missing?(0,o.createVNode)(1,"span","color-bad","No cell installed",16):(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,content:l.charge+" / "+l.maxcharge}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Set",onClick:function(){return n("set_charge")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Change",onClick:function(){return n("change_cell")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",content:"Remove",color:"bad",onClick:function(){return n("remove_cell")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Radio Channels",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return n("toggle_radio",{channel:e.name})}},e.name)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Module",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:c.active_module===e.type?"check-square-o":"square-o",content:e.name,selected:c.active_module===e.type,onClick:function(){return n("setmodule",{module:e.type})}},e.type)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Upgrades",children:p.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return n("toggle_upgrade",{upgrade:e.type})}},e.type)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Master AI",children:f.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.connected?"check-square-o":"square-o",content:e.name,selected:e.connected,onClick:function(){return n("slavetoai",{slavetoai:e.ref})}},e.ref)}))})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Laws",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:c.lawupdate?"check-square-o":"square-o",content:"Lawsync",selected:c.lawupdate,onClick:function(){return n("toggle_lawupdate")}}),children:m.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e},e)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigTimer=void 0;var o=n(1),r=n(3),a=n(2);t.BrigTimer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{title:"Cell Timer",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"clock-o",content:i.timing?"Stop":"Start",selected:i.timing,onClick:function(){return n(i.timing?"stop":"start")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:i.flash_charging?"Recharging":"Flash",disabled:i.flash_charging,onClick:function(){return n("flash")}})],4),children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",onClick:function(){return n("time",{adjust:-600})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",onClick:function(){return n("time",{adjust:-100})}})," ",String(i.minutes).padStart(2,"0"),":",String(i.seconds).padStart(2,"0")," ",(0,o.createComponentVNode)(2,a.Button,{icon:"forward",onClick:function(){return n("time",{adjust:100})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",onClick:function(){return n("time",{adjust:600})}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"hourglass-start",content:"Short",onClick:function(){return n("preset",{preset:"short"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"hourglass-start",content:"Medium",onClick:function(){return n("preset",{preset:"medium"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"hourglass-start",content:"Long",onClick:function(){return n("preset",{preset:"long"})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Canister=void 0;var o=n(1),r=n(3),a=n(2);t.Canister=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{children:["The regulator ",i.hasHoldingTank?"is":"is not"," connected to a tank."]}),(0,o.createComponentVNode)(2,a.Section,{title:"Canister",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Relabel",onClick:function(){return n("relabel")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.tankPressure})," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Port",color:i.portConnected?"good":"average",content:i.portConnected?"Connected":"Not Connected"}),!!i.isPrototype&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.restricted?"lock":"unlock",color:"caution",content:i.restricted?"Restricted to Engineering":"Public",onClick:function(){return n("restricted")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Valve",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Release Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.releasePressure/(i.maxReleasePressure-i.minReleasePressure),children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.releasePressure})," kPa"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure Regulator",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"undo",disabled:i.releasePressure===i.defaultReleasePressure,content:"Reset",onClick:function(){return n("pressure",{pressure:"reset"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"minus",disabled:i.releasePressure<=i.minReleasePressure,content:"Min",onClick:function(){return n("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Set",onClick:function(){return n("pressure",{pressure:"input"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",disabled:i.releasePressure>=i.maxReleasePressure,content:"Max",onClick:function(){return n("pressure",{pressure:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Valve",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.valveOpen?"unlock":"lock",color:i.valveOpen?i.hasHoldingTank?"caution":"danger":null,content:i.valveOpen?"Open":"Closed",onClick:function(){return n("valve")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",buttons:!!i.hasHoldingTank&&(0,o.createComponentVNode)(2,a.Button,{icon:"eject",color:i.valveOpen&&"danger",content:"Eject",onClick:function(){return n("eject")}}),children:[!!i.hasHoldingTank&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:i.holdingTank.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.holdingTank.tankPressure})," kPa"]})]}),!i.hasHoldingTank&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No Holding Tank"})]})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.CargoExpress=t.Cargo=void 0;var o=n(1),r=n(29),a=n(19),i=n(2),c=n(69);t.Cargo=function(e){var t=e.state,n=t.config,r=t.data,c=n.ref,d=r.supplies||{},p=r.requests||[],f=r.cart||[],m=f.reduce((function(e,t){return e+t.cost}),0),h=!r.requestonly&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{inline:!0,mx:1,children:[0===f.length&&"Cart is empty",1===f.length&&"1 item",f.length>=2&&f.length+" items"," ",m>0&&"("+m+" cr)"]}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",color:"transparent",content:"Clear",onClick:function(){return(0,a.act)(c,"clear")}})],4);return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Cargo",buttons:(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:Math.round(r.points)})," credits"]}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle",children:r.docked&&!r.requestonly&&(0,o.createComponentVNode)(2,i.Button,{content:r.location,onClick:function(){return(0,a.act)(c,"send")}})||r.location}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"CentCom Message",children:r.message}),r.loan&&!r.requestonly?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Loan",children:r.loan_dispatched?(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Loaned to Centcom"}):(0,o.createComponentVNode)(2,i.Button,{content:"Loan Shuttle",disabled:!(r.away&&r.docked),onClick:function(){return(0,a.act)(c,"loan")}})}):""]})}),(0,o.createComponentVNode)(2,i.Tabs,{mt:2,children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Catalog",icon:"list",lineHeight:"23px",children:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Catalog",buttons:h,children:(0,o.createComponentVNode)(2,l,{state:t,supplies:d})})}},"catalog"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Requests ("+p.length+")",icon:"envelope",highlight:p.length>0,lineHeight:"23px",children:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Active Requests",buttons:!r.requestonly&&(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Clear",color:"transparent",onClick:function(){return(0,a.act)(c,"denyall")}}),children:(0,o.createComponentVNode)(2,u,{state:t,requests:p})})}},"requests"),!r.requestonly&&(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Checkout ("+f.length+")",icon:"shopping-cart",highlight:f.length>0,lineHeight:"23px",children:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Current Cart",buttons:h,children:(0,o.createComponentVNode)(2,s,{state:t,cart:f})})}},"cart")]})],4)};var l=function(e){var t=e.state,n=e.supplies,c=t.config,l=t.data,u=c.ref,s=function(e){var t=n[e].packs;return(0,o.createVNode)(1,"table","LabeledList",t.map((function(e){return(0,o.createVNode)(1,"tr","LabeledList__row candystripe",[(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__label",[e.name,(0,o.createTextVNode)(":")],0),(0,o.createVNode)(1,"td","LabeledList__cell",!!e.small_item&&(0,o.createFragment)([(0,o.createTextVNode)("Small Item")],4),0),(0,o.createVNode)(1,"td","LabeledList__cell",!!e.access&&(0,o.createFragment)([(0,o.createTextVNode)("Restrictions Apply")],4),0),(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",(0,o.createComponentVNode)(2,i.Button,{fluid:!0,content:(l.self_paid?Math.round(1.1*e.cost):e.cost)+" credits",tooltip:e.desc,tooltipPosition:"left",onClick:function(){return(0,a.act)(u,"add",{id:e.id})}}),2)],4,null,e.name)})),0)};return(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:(0,r.map)((function(e){var t=e.name;return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:t,children:s},t)}))(n)})},u=function(e){var t=e.state,n=e.requests,r=t.config,c=t.data,l=r.ref;return 0===n.length?(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"No Requests"}):(0,o.createVNode)(1,"table","LabeledList",n.map((function(e){return(0,o.createFragment)([(0,o.createVNode)(1,"tr","LabeledList__row candystripe",[(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__label",[(0,o.createTextVNode)("#"),e.id,(0,o.createTextVNode)(":")],0),(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__content",e.object,0),(0,o.createVNode)(1,"td","LabeledList__cell",[(0,o.createTextVNode)("By "),(0,o.createVNode)(1,"b",null,e.orderer,0)],4),(0,o.createVNode)(1,"td","LabeledList__cell",(0,o.createVNode)(1,"i",null,e.reason,0),2),(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",[e.cost,(0,o.createTextVNode)(" credits"),(0,o.createTextVNode)(" "),!c.requestonly&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"check",color:"good",onClick:function(){return(0,a.act)(l,"approve",{id:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",color:"bad",onClick:function(){return(0,a.act)(l,"deny",{id:e.id})}})],4)],0)],4)],4,e.id)})),0)},s=function(e){var t=e.state,n=e.cart,r=t.config,c=t.data,l=r.ref;return(0,o.createFragment)([0===n.length&&"Nothing in cart",n.length>0&&(0,o.createComponentVNode)(2,i.LabeledList,{children:n.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{className:"candystripe",label:"#"+e.id,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{inline:!0,mx:2,children:[!!e.paid&&(0,o.createVNode)(1,"b",null,"[Paid Privately]",16)," ",e.cost," credits"]}),(0,o.createComponentVNode)(2,i.Button,{icon:"minus",onClick:function(){return(0,a.act)(l,"remove",{id:e.id})}})],4),children:e.object},e.id)}))}),n.length>0&&!c.requestonly&&(0,o.createComponentVNode)(2,i.Box,{mt:2,children:1===c.away&&1===c.docked&&(0,o.createComponentVNode)(2,i.Button,{color:"green",style:{"line-height":"28px",padding:"0 12px"},content:"Confirm the order",onClick:function(){return(0,a.act)(l,"send")}})||(0,o.createComponentVNode)(2,i.Box,{opacity:.5,children:["Shuttle in ",c.location,"."]})})],0)};t.CargoExpress=function(e){var t=e.state,n=t.config,r=t.data,u=n.ref,s=r.supplies||{};return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.InterfaceLockNoticeBox,{siliconUser:r.siliconUser,locked:r.locked,onLockStatusChange:function(){return(0,a.act)(u,"lock")},accessText:"a QM-level ID card"}),!r.locked&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Cargo Express",buttons:(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:Math.round(r.points)})," credits"]}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Landing Location",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Cargo Bay",selected:!r.usingBeacon,onClick:function(){return(0,a.act)(u,"LZCargo")}}),(0,o.createComponentVNode)(2,i.Button,{selected:r.usingBeacon,disabled:!r.hasBeacon,onClick:function(){return(0,a.act)(u,"LZBeacon")},children:[r.beaconzone," (",r.beaconName,")"]}),(0,o.createComponentVNode)(2,i.Button,{content:r.printMsg,disabled:!r.canBuyBeacon,onClick:function(){return(0,a.act)(u,"printBeacon")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Notice",children:r.message})]})}),(0,o.createComponentVNode)(2,l,{state:t,supplies:s})],4)],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.CellularEmporium=void 0;var o=n(1),r=n(3),a=n(2);t.CellularEmporium=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.abilities;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Genetic Points",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"Readapt",disabled:!i.can_readapt,onClick:function(){return n("readapt")}}),children:i.genetic_points_remaining})})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:c.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{className:"candystripe",label:e.name,buttons:(0,o.createFragment)([e.dna_cost," ",(0,o.createComponentVNode)(2,a.Button,{content:e.owned?"Evolved":"Evolve",selected:e.owned,onClick:function(){return n("evolve",{name:e.name})}})],0),children:[e.desc,(0,o.createComponentVNode)(2,a.Box,{color:"good",children:e.helptext})]},e.name)}))})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.CentcomPodLauncher=void 0;var o=n(1),r=(n(28),n(3)),a=n(2);t.CentcomPodLauncher=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NoticeBox,{children:"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."}),(0,o.createComponentVNode)(2,a.Section,{title:"Centcom Pod Customization (To be used against Helen Weinstein)",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Supply Bay",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Bay #1",selected:1===i.bayNumber,onClick:function(){return n("bay1")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Bay #2",selected:2===i.bayNumber,onClick:function(){return n("bay2")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Bay #3",selected:3===i.bayNumber,onClick:function(){return n("bay3")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Bay #4",selected:4===i.bayNumber,onClick:function(){return n("bay4")}}),(0,o.createComponentVNode)(2,a.Button,{content:"ERT Bay",selected:5===i.bayNumber,tooltip:"This bay is located on the western edge of CentCom. Its the\nglass room directly west of where ERT spawn, and south of the\nCentCom ferry. Useful for launching ERT/Deathsquads/etc. onto\nthe station via drop pods.",onClick:function(){return n("bay5")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Teleport to",children:[(0,o.createComponentVNode)(2,a.Button,{content:i.bay,onClick:function(){return n("teleportCentcom")}}),(0,o.createComponentVNode)(2,a.Button,{content:i.oldArea?i.oldArea:"Where you were",disabled:!i.oldArea,onClick:function(){return n("teleportBack")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Clone Mode",children:(0,o.createComponentVNode)(2,a.Button,{content:"Launch Clones",selected:i.launchClone,tooltip:"Choosing this will create a duplicate of the item to be\nlaunched in Centcom, allowing you to send one type of item\nmultiple times. Either way, the atoms are forceMoved into\nthe supplypod after it lands (but before it opens).",onClick:function(){return n("launchClone")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Launch style",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Ordered",selected:1===i.launchChoice,tooltip:'Instead of launching everything in the bay at once, this\nwill "scan" things (one turf-full at a time) in order, left\nto right and top to bottom. undoing will reset the "scanner"\nto the top-leftmost position.',onClick:function(){return n("launchOrdered")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Random",selected:2===i.launchChoice,tooltip:"Instead of launching everything in the bay at once, this\nwill launch one random turf of items at a time.",onClick:function(){return n("launchRandom")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Explosion",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Size",selected:1===i.explosionChoice,tooltip:"This will cause an explosion of whatever size you like\n(including flame range) to occur as soon as the supplypod\nlands. Dont worry, supply-pods are explosion-proof!",onClick:function(){return n("explosionCustom")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Adminbus",selected:2===i.explosionChoice,tooltip:"This will cause a maxcap explosion (dependent on server\nconfig) to occur as soon as the supplypod lands. Dont worry,\nsupply-pods are explosion-proof!",onClick:function(){return n("explosionBus")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Damage",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Damage",selected:1===i.damageChoice,tooltip:"Anyone caught under the pod when it lands will be dealt\nthis amount of brute damage. Sucks to be them!",onClick:function(){return n("damageCustom")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Gib",selected:2===i.damageChoice,tooltip:"This will attempt to gib any mob caught under the pod when\nit lands, as well as dealing a nice 5000 brute damage. Ya\nknow, just to be sure!",onClick:function(){return n("damageGib")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Effects",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Stun",selected:i.effectStun,tooltip:"Anyone who is on the turf when the supplypod is launched\nwill be stunned until the supplypod lands. They cant get\naway that easy!",onClick:function(){return n("effectStun")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Delimb",selected:i.effectLimb,tooltip:"This will cause anyone caught under the pod to lose a limb,\nexcluding their head.",onClick:function(){return n("effectLimb")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Yeet Organs",selected:i.effectOrgans,tooltip:"This will cause anyone caught under the pod to lose all\ntheir limbs and organs in a spectacular fashion.",onClick:function(){return n("effectOrgans")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Movement",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Bluespace",selected:i.effectBluespace,tooltip:"Gives the supplypod an advanced Bluespace Recyling Device.\nAfter opening, the supplypod will be warped directly to the\nsurface of a nearby NT-designated trash planet (/r/ss13).",onClick:function(){return n("effectBluespace")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Stealth",selected:i.effectStealth,tooltip:'This hides the red target icon from appearing when you\nlaunch the supplypod. Combos well with the "Invisible"\nstyle. Sneak attack, go!',onClick:function(){return n("effectStealth")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Quiet",selected:i.effectQuiet,tooltip:"This will keep the supplypod from making any sounds, except\nfor those specifically set by admins in the Sound section.",onClick:function(){return n("effectQuiet")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Reverse Mode",selected:i.effectReverse,tooltip:"This pod will not send any items. Instead, after landing,\nthe supplypod will close (similar to a normal closet closing),\nand then launch back to the right centcom bay to drop off any\nnew contents.",onClick:function(){return n("effectReverse")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Missile Mode",selected:i.effectMissile,tooltip:"This pod will not send any items. Instead, it will immediately\ndelete after landing (Similar visually to setting openDelay\n& departDelay to 0, but this looks nicer). Useful if you just\nwanna fuck some shit up. Combos well with the Missile style.",onClick:function(){return n("effectMissile")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Any Descent Angle",selected:i.effectCircle,tooltip:"This will make the supplypod come in from any angle. Im not\nsure why this feature exists, but here it is.",onClick:function(){return n("effectCircle")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Machine Gun Mode",selected:i.effectBurst,tooltip:"This will make each click launch 5 supplypods inaccuratly\naround the target turf (a 3x3 area). Combos well with the\nMissile Mode if you dont want shit lying everywhere after.",onClick:function(){return n("effectBurst")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Specific Target",selected:i.effectTarget,tooltip:"This will make the supplypod target a specific atom, instead\nof the mouses position. Smiting does this automatically!",onClick:function(){return n("effectTarget")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name/Desc",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Name/Desc",selected:i.effectName,tooltip:"Allows you to add a custom name and description.",onClick:function(){return n("effectName")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Alert Ghosts",selected:i.effectAnnounce,tooltip:"Alerts ghosts when a pod is launched. Useful if some dumb\nshit is aboutta come outta the pod.",onClick:function(){return n("effectAnnounce")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sound",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Falling Sound",selected:i.fallingSound,tooltip:"Choose a sound to play as the pod falls. Note that for this\nto work right you should know the exact length of the sound,\nin seconds.",onClick:function(){return n("fallSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Landing Sound",selected:i.landingSound,tooltip:"Choose a sound to play when the pod lands.",onClick:function(){return n("landingSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Opening Sound",selected:i.openingSound,tooltip:"Choose a sound to play when the pod opens.",onClick:function(){return n("openingSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Leaving Sound",selected:i.leavingSound,tooltip:"Choose a sound to play when the pod departs (whether that be\ndelection in the case of a bluespace pod, or leaving for\ncentcom for a reversing pod).",onClick:function(){return n("leavingSound")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Admin Sound Volume",selected:i.soundVolume,tooltip:"Choose the volume for the sound to play at. Default values\nare between 1 and 100, but hey, do whatever. Im a tooltip,\nnot a cop.",onClick:function(){return n("soundVolume")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Timers",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Custom Falling Duration",selected:4!==i.fallDuration,tooltip:"Set how long the animation for the pod falling lasts. Create\ndramatic, slow falling pods!",onClick:function(){return n("fallDuration")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Landing Time",selected:20!==i.landingDelay,tooltip:"Choose the amount of time it takes for the supplypod to hit\nthe station. By default this value is 0.5 seconds.",onClick:function(){return n("landingDelay")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Opening Time",selected:30!==i.openingDelay,tooltip:"Choose the amount of time it takes for the supplypod to open\nafter landing. Useful for giving whatevers inside the pod a\nnice dramatic entrance! By default this value is 3 seconds.",onClick:function(){return n("openingDelay")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Custom Leaving Time",selected:30!==i.departureDelay,tooltip:"Choose the amount of time it takes for the supplypod to leave\nafter landing. By default this value is 3 seconds.",onClick:function(){return n("departureDelay")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Style",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.styleChoice,tooltip:"Same color scheme as the normal station-used supplypods",onClick:function(){return n("styleStandard")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:2===i.styleChoice,tooltip:"The same as the stations upgraded blue-and-white\nBluespace Supplypods",onClick:function(){return n("styleBluespace")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Syndicate",selected:4===i.styleChoice,tooltip:"A menacing black and blood-red. Great for sending meme-ops\nin style!",onClick:function(){return n("styleSyndie")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Deathsquad",selected:5===i.styleChoice,tooltip:"A menacing black and dark blue. Great for sending deathsquads\nin style!",onClick:function(){return n("styleBlue")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Cult Pod",selected:6===i.styleChoice,tooltip:"A blood and rune covered cult pod!",onClick:function(){return n("styleCult")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Missile",selected:7===i.styleChoice,tooltip:"A large missile. Combos well with a missile mode, so the\nmissile doesnt stick around after landing.",onClick:function(){return n("styleMissile")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Syndicate Missile",selected:8===i.styleChoice,tooltip:"A large blood-red missile. Combos well with missile mode,\nso the missile doesnt stick around after landing.",onClick:function(){return n("styleSMissile")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Supply Crate",selected:9===i.styleChoice,tooltip:"A large, dark-green military supply crate.",onClick:function(){return n("styleBox")}}),(0,o.createComponentVNode)(2,a.Button,{content:"HONK",selected:10===i.styleChoice,tooltip:"A colorful, clown inspired look.",onClick:function(){return n("styleHONK")}}),(0,o.createComponentVNode)(2,a.Button,{content:"~Fruit",selected:11===i.styleChoice,tooltip:"For when an orange is angry",onClick:function(){return n("styleFruit")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Invisible",selected:12===i.styleChoice,tooltip:'Makes the supplypod invisible! Useful for when you want to\nuse this feature with a gateway or something. Combos well\nwith the "Stealth" and "Quiet Landing" effects.',onClick:function(){return n("styleInvisible")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Gondola",selected:13===i.styleChoice,tooltip:"This gondola can control when he wants to deliver his supplies\nif he has a smart enough mind, so offer up his body to ghosts\nfor maximum enjoyment. (Make sure to turn off bluespace and\nset a arbitrarily high open-time if you do!",onClick:function(){return n("styleGondola")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Show Contents (See Through Pod)",selected:14===i.styleChoice,tooltip:"By selecting this, the pod will instead look like whatevers\ninside it (as if it were the contents falling by themselves,\nwithout a pod). Useful for launching mechs at the station\nand standing tall as they soar in from the heavens.",onClick:function(){return n("styleSeeThrough")}})]})]})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:i.numObjects+" turfs in "+i.bay,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"undo Pody Bay",tooltip:"Manually undoes the possible things to launch in the\npod bay.",onClick:function(){return n("undo")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Enter Launch Mode",selected:i.giveLauncher,tooltip:"THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN",onClick:function(){return n("giveLauncher")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear Selected Bay",color:"bad",tooltip:"This will delete all objs and mobs from the selected bay.",tooltipPosition:"left",onClick:function(){return n("clearBay")}})],4)})})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemAcclimator=void 0;var o=n(1),r=n(3),a=n(2);t.ChemAcclimator=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Acclimator",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Temperature",children:[i.chem_temp," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Temperature",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:i.target_temperature,unit:"K",width:"59px",minValue:0,maxValue:1e3,step:5,stepPixelSize:2,onChange:function(e,t){return n("set_target_temperature",{temperature:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Acceptable Temp. Difference",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:i.allowed_temperature_difference,unit:"K",width:"59px",minValue:1,maxValue:i.target_temperature,stepPixelSize:2,onChange:function(e,t){n("set_allowed_temperature_difference",{temperature:t})}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:i.enabled?"On":"Off",selected:i.enabled,onClick:function(){return n("toggle_power")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:i.max_volume,unit:"u",width:"50px",minValue:i.reagent_volume,maxValue:200,step:2,stepPixelSize:2,onChange:function(e,t){return n("change_volume",{volume:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Operation",children:i.acclimate_state}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current State",children:i.emptying?"Emptying":"Filling"})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemDebugSynthesizer=void 0;var o=n(1),r=n(3),a=n(2);t.ChemDebugSynthesizer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.amount,l=i.beakerCurrentVolume,u=i.beakerMaxVolume,s=i.isBeakerLoaded,d=i.beakerContents,p=void 0===d?[]:d;return(0,o.createComponentVNode)(2,a.Section,{title:"Recipient",buttons:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",onClick:function(){return n("ejectBeaker")}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:c,unit:"u",minValue:1,maxValue:u,step:1,stepPixelSize:2,onChange:function(e,t){return n("amount",{amount:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",content:"Input",onClick:function(){return n("input")}})],4):(0,o.createComponentVNode)(2,a.Button,{icon:"plus",content:"Create Beaker",onClick:function(){return n("makecup")}}),children:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l})," / "+u+" u"]}),p.length>0?(0,o.createComponentVNode)(2,a.LabeledList,{children:p.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:[e.volume," u"]},e.name)}))}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Recipient Empty"})],0):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No Recipient"})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemFilter=t.ChemFilterPane=void 0;var o=n(1),r=n(3),a=n(2);var i=function(e){var t=(0,r.useBackend)(e).act,n=e.title,i=e.list,c=e.reagentName,l=e.onReagentInput,u=n.toLowerCase();return(0,o.createComponentVNode)(2,a.Section,{title:n,minHeight:40,ml:.5,mr:.5,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Input,{placeholder:"Reagent",width:"140px",onInput:function(e,t){return l(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return t("add",{which:u,name:c})}})],4),children:i.map((function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"minus",content:e,onClick:function(){return t("remove",{which:u,reagent:e})}})],4,e)}))})};t.ChemFilterPane=i;var c=function(e){var t,n;function r(){var t;return(t=e.call(this)||this).state={leftReagentName:"",rightReagentName:""},t}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var c=r.prototype;return c.setLeftReagentName=function(e){this.setState({leftReagentName:e})},c.setRightReagentName=function(e){this.setState({rightReagentName:e})},c.render=function(){var e=this,t=this.props.state,n=t.data,r=n.left,c=void 0===r?[]:r,l=n.right,u=void 0===l?[]:l;return(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,i,{title:"Left",list:c,reagentName:this.state.leftReagentName,onReagentInput:function(t){return e.setLeftReagentName(t)},state:t})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,i,{title:"Right",list:u,reagentName:this.state.rightReagentName,onReagentInput:function(t){return e.setRightReagentName(t)},state:t})})]})},r}(o.Component);t.ChemFilter=c},function(e,t,n){"use strict";t.__esModule=!0,t.ChemPress=void 0;var o=n(1),r=n(3),a=n(2);t.ChemPress=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.pill_size,l=i.pill_name,u=i.pill_style,s=i.pill_styles,d=void 0===s?[]:s;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pill Volume",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:c,unit:"u",width:"43px",minValue:5,maxValue:50,step:1,stepPixelSize:2,onChange:function(e,t){return n("change_pill_size",{volume:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pill Name",children:(0,o.createComponentVNode)(2,a.Input,{value:l,onChange:function(e,t){return n("change_pill_name",{name:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pill Style",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{width:5,selected:e.id===u,textAlign:"center",color:"transparent",onClick:function(){return n("change_pill_style",{id:e.id})},children:(0,o.createComponentVNode)(2,a.Box,{mx:-1,className:e.class_name})},e.id)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemReactionChamber=void 0;var o=n(1),r=n(19),a=n(2),i=n(29),c=n(12);var l=function(e){var t,n;function l(){var t;return(t=e.call(this)||this).state={reagentName:"",reagentQuantity:1},t}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=l.prototype;return u.setReagentName=function(e){this.setState({reagentName:e})},u.setReagentQuantity=function(e){this.setState({reagentQuantity:e})},u.render=function(){var e=this,t=this.props.state,n=t.config,l=t.data,u=n.ref,s=l.emptying,d=l.reagents||[];return(0,o.createComponentVNode)(2,a.Section,{title:"Reagents",buttons:(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,color:s?"bad":"good",children:s?"Emptying":"Filling"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createVNode)(1,"tr","LabledList__row",[(0,o.createVNode)(1,"td","LabeledList__cell",(0,o.createComponentVNode)(2,a.Input,{fluid:!0,value:"",placeholder:"Reagent Name",onInput:function(t,n){return e.setReagentName(n)}}),2,{colSpan:"2"}),(0,o.createVNode)(1,"td",(0,c.classes)(["LabeledList__buttons","LabeledList__cell"]),[(0,o.createComponentVNode)(2,a.NumberInput,{value:this.state.reagentQuantity,minValue:1,maxValue:100,step:1,stepPixelSize:3,width:"39px",onDrag:function(t,n){return e.setReagentQuantity(n)}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return(0,r.act)(u,"add",{chem:e.state.reagentName,amount:e.state.reagentQuantity})}})],4)],4),(0,i.map)((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"minus",color:"bad",onClick:function(){return(0,r.act)(u,"remove",{chem:t})}}),children:e},t)}))(d)]})})},l}(o.Component);t.ChemReactionChamber=l},function(e,t,n){"use strict";t.__esModule=!0,t.ChemSplitter=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.ChemSplitter=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.straight,u=c.side,s=c.max_transfer;return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Straight",children:(0,o.createComponentVNode)(2,i.NumberInput,{value:l,unit:"u",width:"55px",minValue:1,maxValue:s,format:function(e){return(0,r.toFixed)(e,2)},step:.05,stepPixelSize:4,onChange:function(e,t){return n("set_amount",{target:"straight",amount:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Side",children:(0,o.createComponentVNode)(2,i.NumberInput,{value:u,unit:"u",width:"55px",minValue:1,maxValue:s,format:function(e){return(0,r.toFixed)(e,2)},step:.05,stepPixelSize:4,onChange:function(e,t){return n("set_amount",{target:"side",amount:t})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemSynthesizer=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.ChemSynthesizer=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.amount,u=c.current_reagent,s=c.chemicals,d=void 0===s?[]:s,p=c.possible_amounts,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:"plus",content:(0,r.toFixed)(e,0),selected:e===l,onClick:function(){return n("amount",{target:e})}},(0,r.toFixed)(e,0))}))}),(0,o.createComponentVNode)(2,i.Box,{mt:1,children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:"tint",content:e.title,width:"129px",selected:e.id===u,onClick:function(){return n("select",{reagent:e.id})}},e.id)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.CodexGigas=void 0;var o=n(1),r=n(3),a=n(2);t.CodexGigas=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:[i.name,(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Prefix",children:["Dark","Hellish","Fallen","Fiery","Sinful","Blood","Fluffy"].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:1!==i.currentSection,onClick:function(){return n(e+" ")}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Title",children:["Lord","Prelate","Count","Viscount","Vizier","Elder","Adept"].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:i.currentSection>2,onClick:function(){return n(e+" ")}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:["hal","ve","odr","neit","ci","quon","mya","folth","wren","geyr","hil","niet","twou","phi","coa"].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:i.currentSection>4,onClick:function(){return n(e)}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Suffix",children:["the Red","the Soulless","the Master","the Lord of all things","Jr."].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e,disabled:4!==i.currentSection,onClick:function(){return n(" "+e)}},e.toLowerCase())}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Submit",children:(0,o.createComponentVNode)(2,a.Button,{content:"Search",disabled:i.currentSection<4,onClick:function(){return n("search")}})})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ComputerFabricator=void 0;var o=n(1),r=(n(28),n(3)),a=n(2);t.ComputerFabricator=function(e){var t=e.state,n=(0,r.useBackend)(e),c=n.act,l=n.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{italic:!0,fontSize:"20px",children:"Your perfect device, only three steps away..."}),0!==l.state&&(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mb:1,icon:"circle",content:"Clear Order",onClick:function(){return c("clean_order")}}),(0,o.createComponentVNode)(2,i,{state:t})],0)};var i=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return 0===i.state?(0,o.createComponentVNode)(2,a.Section,{title:"Step 1",minHeight:51,children:[(0,o.createComponentVNode)(2,a.Box,{mt:5,bold:!0,textAlign:"center",fontSize:"40px",children:"Choose your Device"}),(0,o.createComponentVNode)(2,a.Box,{mt:3,children:(0,o.createComponentVNode)(2,a.Grid,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"laptop",content:"Laptop",textAlign:"center",fontSize:"30px",lineHeight:"50px",onClick:function(){return n("pick_device",{pick:"1"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"tablet-alt",content:"Tablet",textAlign:"center",fontSize:"30px",lineHeight:"50px",onClick:function(){return n("pick_device",{pick:"2"})}})})]})})]}):1===i.state?(0,o.createComponentVNode)(2,a.Section,{title:"Step 2: Customize your device",minHeight:47,buttons:(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"good",children:[i.totalprice," cr"]}),children:[(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Battery:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Allows your device to operate without external utility power\nsource. Advanced batteries increase battery life.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_battery,onClick:function(){return n("hw_battery",{battery:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Upgraded",selected:2===i.hw_battery,onClick:function(){return n("hw_battery",{battery:"2"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:3===i.hw_battery,onClick:function(){return n("hw_battery",{battery:"3"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Hard Drive:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Stores file on your device. Advanced drives can store more\nfiles, but use more power, shortening battery life.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_disk,onClick:function(){return n("hw_disk",{disk:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Upgraded",selected:2===i.hw_disk,onClick:function(){return n("hw_disk",{disk:"2"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:3===i.hw_disk,onClick:function(){return n("hw_disk",{disk:"3"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Network Card:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Allows your device to wirelessly connect to stationwide NTNet\nnetwork. Basic cards are limited to on-station use, while\nadvanced cards can operate anywhere near the station, which\nincludes asteroid outposts",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_netcard,onClick:function(){return n("hw_netcard",{netcard:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_netcard,onClick:function(){return n("hw_netcard",{netcard:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:2===i.hw_netcard,onClick:function(){return n("hw_netcard",{netcard:"2"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Nano Printer:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"A device that allows for various paperwork manipulations,\nsuch as, scanning of documents or printing new ones.\nThis device was certified EcoFriendlyPlus and is capable of\nrecycling existing paper for printing purposes.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_nanoprint,onClick:function(){return n("hw_nanoprint",{print:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_nanoprint,onClick:function(){return n("hw_nanoprint",{print:"1"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Card Reader:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"Adds a slot that allows you to manipulate RFID cards.\nPlease note that this is not necessary to allow the device\nto read your identification, it is just necessary to\nmanipulate other cards.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_card,onClick:function(){return n("hw_card",{card:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_card,onClick:function(){return n("hw_card",{card:"1"})}})})]}),2!==i.devtype&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Processor Unit:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"A component critical for your device's functionality.\nIt allows you to run programs from your hard drive.\nAdvanced CPUs use more power, but allow you to run\nmore programs on background at once.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_cpu,onClick:function(){return n("hw_cpu",{cpu:"1"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Advanced",selected:2===i.hw_cpu,onClick:function(){return n("hw_cpu",{cpu:"2"})}})})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,position:"relative",children:["Tesla Relay:",(0,o.createComponentVNode)(2,a.Tooltip,{content:"An advanced wireless power relay that allows your device\nto connect to nearby area power controller to provide\nalternative power source. This component is currently\nunavailable on tablet computers due to size restrictions.",position:"right"})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"None",selected:0===i.hw_tesla,onClick:function(){return n("hw_tesla",{tesla:"0"})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Standard",selected:1===i.hw_tesla,onClick:function(){return n("hw_tesla",{tesla:"1"})}})})]})],4)]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:3,content:"Confirm Order",color:"good",textAlign:"center",fontSize:"18px",lineHeight:"26px",onClick:function(){return n("confirm_order")}})]}):2===i.state?(0,o.createComponentVNode)(2,a.Section,{title:"Step 3: Payment",minHeight:47,children:[(0,o.createComponentVNode)(2,a.Box,{italic:!0,textAlign:"center",fontSize:"20px",children:"Your device is ready for fabrication..."}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,mt:2,textAlign:"center",fontSize:"16px",children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:"Please insert the required"})," ",(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"good",children:[i.totalprice," cr"]})]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,mt:1,textAlign:"center",fontSize:"18px",children:"Current:"}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,mt:.5,textAlign:"center",fontSize:"18px",color:i.credits>=i.totalprice?"good":"bad",children:[i.credits," cr"]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Purchase",disabled:i.credits=10&&e<20?i.COLORS.department.security:e>=20&&e<30?i.COLORS.department.medbay:e>=30&&e<40?i.COLORS.department.science:e>=40&&e<50?i.COLORS.department.engineering:e>=50&&e<60?i.COLORS.department.cargo:e>=200&&e<230?i.COLORS.department.centcom:i.COLORS.department.other},u=function(e){var t=e.type,n=e.value;return(0,o.createComponentVNode)(2,a.Box,{inline:!0,width:4,color:i.COLORS.damageType[t],textAlign:"center",children:n})};t.CrewConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,s=i.sensors||[];return(0,o.createComponentVNode)(2,a.Section,{minHeight:90,children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0,textAlign:"center",children:"Vitals"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Position"}),!!i.link_allowed&&(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,collapsing:!0,children:"Tracking"})]}),s.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:(m=e.ijob,m%10==0),color:l(e.ijob),children:[e.name," (",e.assignment,")"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,a.ColorBox,{color:(t=e.oxydam,r=e.toxdam,s=e.burndam,d=e.brutedam,p=t+r+s+d,f=Math.min(Math.max(Math.ceil(p/25),0),5),c[f])})}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:null!==e.oxydam?(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:[(0,o.createComponentVNode)(2,u,{type:"oxy",value:e.oxydam}),"/",(0,o.createComponentVNode)(2,u,{type:"toxin",value:e.toxdam}),"/",(0,o.createComponentVNode)(2,u,{type:"burn",value:e.burndam}),"/",(0,o.createComponentVNode)(2,u,{type:"brute",value:e.brutedam})]}):e.life_status?"Alive":"Dead"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:null!==e.pos_x?e.area:"N/A"}),!!i.link_allowed&&(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,a.Button,{content:"Track",disabled:!e.can_track,onClick:function(){return n("select_person",{name:e.name})}})})]},e.name);var t,r,s,d,p,f,m}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Cryo=void 0;var o=n(1),r=n(3),a=n(2),i=n(435);t.Cryo=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",content:c.occupant.name?c.occupant.name:"No Occupant"}),!!c.hasOccupant&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State",content:c.occupant.stat,color:c.occupant.statstate}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",color:c.occupant.temperaturestatus,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.occupant.bodyTemperature})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.occupant.health/c.occupant.maxHealth,color:c.occupant.health>0?"good":"average",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.occupant.health})})}),[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}].map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.occupant[e.type]/100,children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.occupant[e.type]})})},e.id)}))],0)]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cell",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",content:(0,o.createComponentVNode)(2,a.Button,{icon:c.isOperating?"power-off":"times",disabled:c.isOpen,onClick:function(){return n("power")},color:c.isOperating&&"green",children:c.isOperating?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:c.cellTemperature})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door",children:[(0,o.createComponentVNode)(2,a.Button,{icon:c.isOpen?"unlock":"lock",onClick:function(){return n("door")},content:c.isOpen?"Open":"Closed"}),(0,o.createComponentVNode)(2,a.Button,{icon:c.autoEject?"sign-out-alt":"sign-in-alt",onClick:function(){return n("autoeject")},content:c.autoEject?"Auto":"Manual"})]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Beaker",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",disabled:!c.isBeakerLoaded,onClick:function(){return n("ejectbeaker")},content:"Eject"}),children:(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:c.isBeakerLoaded,beakerContents:c.beakerContents})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.BeakerContents=void 0;var o=n(1),r=n(2);t.BeakerContents=function(e){var t=e.beakerLoaded,n=e.beakerContents;return(0,o.createComponentVNode)(2,r.Box,{children:[!t&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"No beaker loaded."})||0===n.length&&(0,o.createComponentVNode)(2,r.Box,{color:"label",children:"Beaker is empty."}),n.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{color:"label",children:[e.volume," units of ",e.name]},e.name)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PersonalCrafting=void 0;var o=n(1),r=n(29),a=n(3),i=n(2),c=function(e){var t=e.craftables,n=void 0===t?[]:t,r=(0,a.useBackend)(e),c=r.act,l=r.data,u=l.craftability,s=void 0===u?{}:u,d=l.display_compact,p=l.display_craftable_only;return n.map((function(e){return p&&!s[e.ref]?null:d?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,className:"candystripe",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",content:"Craft",disabled:!s[e.ref],tooltip:e.tool_text&&"Tools needed: "+e.tool_text,tooltipPosition:"left",onClick:function(){return c("make",{recipe:e.ref})}}),children:e.req_text},e.name):(0,o.createComponentVNode)(2,i.Section,{title:e.name,level:2,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",content:"Craft",disabled:!s[e.ref],onClick:function(){return c("make",{recipe:e.ref})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!e.req_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Required",children:e.req_text}),!!e.catalyst_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Catalyst",children:e.catalyst_text}),!!e.tool_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)}))};t.PersonalCrafting=function(e){var t=e.state,n=(0,a.useBackend)(e),l=n.act,u=n.data,s=u.busy,d=u.display_craftable_only,p=u.display_compact,f=(0,r.map)((function(e,t){return{category:t,subcategory:e,hasSubcats:"has_subcats"in e,firstSubcatName:Object.keys(e).find((function(e){return"has_subcats"!==e}))}}))(u.crafting_recipes||{}),m=!!s&&(0,o.createComponentVNode)(2,i.Dimmer,{fontSize:"40px",textAlign:"center",children:(0,o.createComponentVNode)(2,i.Box,{mt:30,children:[(0,o.createComponentVNode)(2,i.Icon,{name:"cog",spin:1})," Crafting..."]})});return(0,o.createFragment)([m,(0,o.createComponentVNode)(2,i.Section,{title:"Personal Crafting",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:p?"check-square-o":"square-o",content:"Compact",selected:p,onClick:function(){return l("toggle_compact")}}),(0,o.createComponentVNode)(2,i.Button,{icon:d?"check-square-o":"square-o",content:"Craftable Only",selected:d,onClick:function(){return l("toggle_recipes")}})],4),children:(0,o.createComponentVNode)(2,i.Tabs,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:e.category,onClick:function(){return l("set_category",{category:e.category,subcategory:e.firstSubcatName})},children:function(){return!e.hasSubcats&&(0,o.createComponentVNode)(2,c,{craftables:e.subcategory,state:t})||(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:(0,r.map)((function(e,n){if("has_subcats"!==n)return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:n,onClick:function(){return l("set_category",{subcategory:n})},children:function(){return(0,o.createComponentVNode)(2,c,{craftables:e,state:t})}})}))(e.subcategory)})}},e.category)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.DecalPainter=void 0;var o=n(1),r=n(3),a=n(2);t.DecalPainter=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.decal_list||[],l=i.color_list||[],u=i.dir_list||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Decal Type",children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,selected:e.decal===i.decal_style,onClick:function(){return n("select decal",{decals:e.decal})}},e.decal)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Decal Color",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:"red"===e.colors?"Red":"white"===e.colors?"White":"Yellow",selected:e.colors===i.decal_color,onClick:function(){return n("select color",{colors:e.colors})}},e.colors)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Decal Direction",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:1===e.dirs?"North":2===e.dirs?"South":4===e.dirs?"East":"West",selected:e.dirs===i.decal_direction,onClick:function(){return n("selected direction",{dirs:e.dirs})}},e.dirs)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.DisposalUnit=void 0;var o=n(1),r=n(3),a=n(2);t.DisposalUnit=function(e){var t,n,i=(0,r.useBackend)(e),c=i.act,l=i.data;return l.full_pressure?(t="good",n="Ready"):l.panel_open?(t="bad",n="Power Disabled"):l.pressure_charging?(t="average",n="Pressurizing"):(t="bad",n="Off"),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State",color:t,children:n}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.per,color:"good"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Handle",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.flush?"toggle-on":"toggle-off",disabled:l.isai||l.panel_open,content:l.flush?"Disengage":"Engage",onClick:function(){return c(l.flush?"handle-0":"handle-1")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Eject",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sign-out-alt",disabled:l.isai,content:"Eject Contents",onClick:function(){return c("eject")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",disabled:l.panel_open,selected:l.pressure_charging,onClick:function(){return c(l.pressure_charging?"pump-0":"pump-1")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.DnaVault=void 0;var o=n(1),r=n(3),a=n(2);t.DnaVault=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.completed,l=i.used,u=i.choiceA,s=i.choiceB,d=i.dna,p=i.dna_max,f=i.plants,m=i.plants_max,h=i.animals,C=i.animals_max;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"DNA Vault Database",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Human DNA",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:d/p,content:d+" / "+p+" Samples"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Plant DNA",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f/m,content:f+" / "+m+" Samples"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Animal DNA",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:h/h,content:h+" / "+C+" Samples"})})]})}),!(!c||l)&&(0,o.createComponentVNode)(2,a.Section,{title:"Personal Gene Therapy",children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,textAlign:"center",mb:1,children:"Applicable Gene Therapy Treatments"}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:u,textAlign:"center",onClick:function(){return n("gene",{choice:u})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:s,textAlign:"center",onClick:function(){return n("gene",{choice:s})}})})]})]})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.EightBallVote=void 0;var o=n(1),r=n(3),a=n(2),i=n(28);t.EightBallVote=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.question,u=c.shaking,s=c.answers,d=void 0===s?[]:s;return u?(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,textAlign:"center",fontSize:"16px",m:1,children:['"',l,'"']}),(0,o.createComponentVNode)(2,a.Grid,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:(0,i.toTitleCase)(e.answer),selected:e.selected,fontSize:"16px",lineHeight:"24px",textAlign:"center",mb:1,onClick:function(){return n("vote",{answer:e.answer})}}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,textAlign:"center",fontSize:"30px",children:e.amount})]},e.answer)}))})]}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No question is currently being asked."})}},function(e,t,n){"use strict";t.__esModule=!0,t.EmergencyShuttleConsole=void 0;var o=n(1),r=n(2),a=n(3);t.EmergencyShuttleConsole=function(e){var t=(0,a.useBackend)(e),n=t.act,i=t.data,c=i.timer_str,l=i.enabled,u=i.emagged,s=i.engines_started,d=i.authorizations_remaining,p=i.authorizations,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:"40px",textAlign:"center",fontFamily:"monospace",children:c}),(0,o.createComponentVNode)(2,r.Box,{textAlign:"center",fontSize:"16px",mb:1,children:[(0,o.createComponentVNode)(2,r.Box,{inline:!0,bold:!0,children:"ENGINES:"}),(0,o.createComponentVNode)(2,r.Box,{inline:!0,color:s?"good":"average",ml:1,children:s?"Online":"Idle"})]}),(0,o.createComponentVNode)(2,r.Section,{title:"Early Launch Authorization",level:2,buttons:(0,o.createComponentVNode)(2,r.Button,{icon:"times",content:"Repeal All",color:"bad",disabled:!l,onClick:function(){return n("abort")}}),children:[(0,o.createComponentVNode)(2,r.Grid,{children:[(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{fluid:!0,icon:"exclamation-triangle",color:"good",content:"AUTHORIZE",disabled:!l,onClick:function(){return n("authorize")}})}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{fluid:!0,icon:"minus",content:"REPEAL",disabled:!l,onClick:function(){return n("repeal")}})})]}),(0,o.createComponentVNode)(2,r.Section,{title:"Authorizations",level:3,minHeight:"150px",buttons:(0,o.createComponentVNode)(2,r.Box,{inline:!0,bold:!0,color:u?"bad":"good",children:u?"ERROR":"Remaining: "+d}),children:[f.length>0?f.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:"16px",className:"candystripe",children:[e.name," (",e.job,")"]},e.name)})):(0,o.createComponentVNode)(2,r.Box,{bold:!0,textAlign:"center",fontSize:"16px",color:"average",children:"No Active Authorizations"}),f.map((function(e){return(0,o.createComponentVNode)(2,r.Box,{bold:!0,fontSize:"16px",className:"candystripe",children:[e.name," (",e.job,")"]},e.name)}))]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.EngravedMessage=void 0;var o=n(1),r=n(28),a=n(3),i=n(2);t.EngravedMessage=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.admin_mode,u=c.creator_key,s=c.creator_name,d=c.has_liked,p=c.has_disliked,f=c.hidden_message,m=c.is_creator,h=c.num_likes,C=c.num_dislikes,g=c.realdate;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,textAlign:"center",fontSize:"20px",mb:2,children:(0,r.decodeHtmlEntities)(f)}),(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"arrow-up",content:" "+h,disabled:m,selected:d,textAlign:"center",fontSize:"16px",lineHeight:"24px",onClick:function(){return n("like")}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"circle",disabled:m,selected:!p&&!d,textAlign:"center",fontSize:"16px",lineHeight:"24px",onClick:function(){return n("neutral")}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"arrow-down",content:" "+C,disabled:m,selected:p,textAlign:"center",fontSize:"16px",lineHeight:"24px",onClick:function(){return n("dislike")}})})]})]}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Created On",children:g})})}),(0,o.createComponentVNode)(2,i.Section),!!l&&(0,o.createComponentVNode)(2,i.Section,{title:"Admin Panel",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Delete",color:"bad",onClick:function(){return n("delete")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Creator Ckey",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Creator Character Name",children:s})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.Gps=void 0;var o=n(1),r=n(29),a=n(70),i=n(20),c=n(156),l=n(3),u=n(2),s=function(e){return(0,r.map)(parseFloat)(e.split(", "))};t.Gps=function(e){var t=(0,l.useBackend)(e),n=t.act,d=t.data,p=d.currentArea,f=d.currentCoords,m=d.globalmode,h=d.power,C=d.tag,g=d.updating,b=(0,a.flow)([(0,r.map)((function(e,t){var n=e.dist&&Math.round((0,c.vecLength)((0,c.vecSubtract)(s(f),s(e.coords))));return Object.assign({},e,{dist:n,index:t})})),(0,r.sortBy)((function(e){return e.dist===undefined}),(function(e){return e.entrytag}))])(d.signals||[]);return(0,o.createFragment)([(0,o.createComponentVNode)(2,u.Section,{title:"Control",buttons:(0,o.createComponentVNode)(2,u.Button,{icon:"power-off",content:h?"On":"Off",selected:h,onClick:function(){return n("power")}}),children:(0,o.createComponentVNode)(2,u.LabeledList,{children:[(0,o.createComponentVNode)(2,u.LabeledList.Item,{label:"Tag",children:(0,o.createComponentVNode)(2,u.Button,{icon:"pencil-alt",content:C,onClick:function(){return n("rename")}})}),(0,o.createComponentVNode)(2,u.LabeledList.Item,{label:"Scan Mode",children:(0,o.createComponentVNode)(2,u.Button,{icon:g?"unlock":"lock",content:g?"AUTO":"MANUAL",color:!g&&"bad",onClick:function(){return n("updating")}})}),(0,o.createComponentVNode)(2,u.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,u.Button,{icon:"sync",content:m?"MAXIMUM":"LOCAL",selected:!m,onClick:function(){return n("globalmode")}})})]})}),!!h&&(0,o.createFragment)([(0,o.createComponentVNode)(2,u.Section,{title:"Current Location",children:(0,o.createComponentVNode)(2,u.Box,{fontSize:"18px",children:[p," (",f,")"]})}),(0,o.createComponentVNode)(2,u.Section,{title:"Detected Signals",children:(0,o.createComponentVNode)(2,u.Table,{children:[(0,o.createComponentVNode)(2,u.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,u.Table.Cell,{content:"Name"}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,content:"Direction"}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,content:"Coordinates"})]}),b.map((function(e){return(0,o.createComponentVNode)(2,u.Table.Row,{className:"candystripe",children:[(0,o.createComponentVNode)(2,u.Table.Cell,{bold:!0,color:"label",children:e.entrytag}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,opacity:e.dist!==undefined&&(0,i.clamp)(1.2/Math.log(Math.E+e.dist/20),.4,1),children:[e.degrees!==undefined&&(0,o.createComponentVNode)(2,u.Icon,{mr:1,size:1.2,name:"arrow-up",rotation:e.degrees}),e.dist!==undefined&&e.dist+"m"]}),(0,o.createComponentVNode)(2,u.Table.Cell,{collapsing:!0,children:e.coords})]},e.entrytag+e.coords+e.index)}))]})})],4)],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.GravityGenerator=void 0;var o=n(1),r=n(3),a=n(2);t.GravityGenerator=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.breaker,l=i.charge_count,u=i.charging_state,s=i.on,d=i.operational;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{children:!d&&(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"No data available"})||(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Breaker",children:(0,o.createComponentVNode)(2,a.Button,{icon:c?"power-off":"times",content:c?"On":"Off",selected:c,disabled:!d,onClick:function(){return n("gentoggle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gravity Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l/100,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",children:[0===u&&(s&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Fully Charged"})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Not Charging"})),1===u&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Charging"}),2===u&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Discharging"})]})]})}),d&&0!==u&&(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"WARNING - Radiation detected"}),d&&0===u&&(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"No radiation detected"})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.GulagTeleporterConsole=void 0;var o=n(1),r=n(3),a=n(2);t.GulagTeleporterConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.teleporter,l=i.teleporter_lock,u=i.teleporter_state_open,s=i.teleporter_location,d=i.beacon,p=i.beacon_location,f=i.id,m=i.id_name,h=i.can_teleport,C=i.goal,g=void 0===C?0:C,b=i.prisoner,v=void 0===b?{}:b;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Teleporter Console",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:u?"Open":"Closed",disabled:l,selected:u,onClick:function(){return n("toggle_open")}}),(0,o.createComponentVNode)(2,a.Button,{icon:l?"lock":"unlock",content:l?"Locked":"Unlocked",selected:l,disabled:u,onClick:function(){return n("teleporter_lock")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Teleporter Unit",color:c?"good":"bad",buttons:!c&&(0,o.createComponentVNode)(2,a.Button,{content:"Reconnect",onClick:function(){return n("scan_teleporter")}}),children:c?s:"Not Connected"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Receiver Beacon",color:d?"good":"bad",buttons:!d&&(0,o.createComponentVNode)(2,a.Button,{content:"Reconnect",onClick:function(){return n("scan_beacon")}}),children:d?p:"Not Connected"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Prisoner Details",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Prisoner ID",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:f?m:"No ID",onClick:function(){return n("handle_id")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Point Goal",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:g,width:"48px",minValue:1,maxValue:1e3,onChange:function(e,t){return n("set_goal",{value:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",children:v.name?v.name:"No Occupant"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Criminal Status",children:v.crimstat?v.crimstat:"No Status"})]})}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Process Prisoner",disabled:!h,textAlign:"center",color:"bad",onClick:function(){return n("teleport")}})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.GulagItemReclaimer=void 0;var o=n(1),r=n(3),a=n(2);t.GulagItemReclaimer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.mobs||[];return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Items",children:(0,o.createComponentVNode)(2,a.Table,{children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{content:"Retrieve Items",disabled:!i.can_reclaim,onClick:function(){return n("release_items",{mobref:e.mob})}})})]},e.mob)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Holodeck=void 0;var o=n(1),r=n(3),a=n(2);t.Holodeck=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.can_toggle_safety,l=i.default_programs,u=void 0===l?[]:l,s=i.emag_programs,d=void 0===s?[]:s,p=i.emagged,f=i.program;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Default Programs",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:p?"unlock":"lock",content:"Safeties",color:"bad",disabled:!c,selected:!p,onClick:function(){return n("safety")}}),children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.name.substring(11),textAlign:"center",selected:e.type===f,onClick:function(){return n("load_program",{type:e.type})}},e.type)}))}),!!p&&(0,o.createComponentVNode)(2,a.Section,{title:"Dangerous Programs",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.name.substring(11),color:"bad",textAlign:"center",selected:e.type===f,onClick:function(){return n("load_program",{type:e.type})}},e.type)}))})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.ImplantChair=void 0;var o=n(1),r=n(3),a=n(2);t.ImplantChair=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant Information",textAlign:"center",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:i.occupant.name?i.occupant.name:"No Occupant"}),!!i.occupied&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:0===i.occupant.stat?"good":1===i.occupant.stat?"average":"bad",children:0===i.occupant.stat?"Conscious":1===i.occupant.stat?"Unconcious":"Dead"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Operations",textAlign:"center",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door",children:(0,o.createComponentVNode)(2,a.Button,{icon:i.open?"unlock":"lock",color:i.open?"default":"red",content:i.open?"Open":"Closed",onClick:function(){return n("door")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Implant Occupant",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"code-branch",content:i.ready?i.special_name||"Implant":"Recharging",onClick:function(){return n("implant")}}),0===i.ready&&(0,o.createComponentVNode)(2,a.Icon,{name:"cog",color:"orange",spin:!0})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Implants Remaining",children:[i.ready_implants,1===i.replenishing&&(0,o.createComponentVNode)(2,a.Icon,{name:"sync",color:"red",spin:!0})]})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.Intellicard=void 0;var o=n(1),r=n(3),a=n(2);t.Intellicard=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=u||s,l=i.name,u=i.isDead,s=i.isBraindead,d=i.health,p=i.wireless,f=i.radio,m=i.wiping,h=i.laws,C=void 0===h?[]:h;return(0,o.createComponentVNode)(2,a.Section,{title:l||"Empty Card",buttons:!!l&&(0,o.createComponentVNode)(2,a.Button,{icon:"trash",content:m?"Stop Wiping":"Wipe",disabled:u,onClick:function(){return n("wipe")}}),children:!!l&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:c?"bad":"good",children:c?"Offline":"Operation"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Software Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:d,minValue:0,maxValue:100,ranges:{good:[70,Infinity],average:[50,70],bad:[-Infinity,50]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Settings",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"signal",content:"Wireless Activity",selected:p,onClick:function(){return n("wireless")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"microphone",content:"Subspace Radio",selected:f,onClick:function(){return n("radio")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Laws",children:C.map((function(e){return(0,o.createComponentVNode)(2,a.BlockQuote,{children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.KeycardAuth=void 0;var o=n(1),r=n(3),a=n(2);t.KeycardAuth=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{children:1===i.waiting&&(0,o.createVNode)(1,"span",null,"Waiting for another device to confirm your request...",16)}),(0,o.createComponentVNode)(2,a.Box,{children:0===i.waiting&&(0,o.createFragment)([!!i.auth_required&&(0,o.createComponentVNode)(2,a.Button,{icon:"check-square",color:"red",textAlign:"center",lineHeight:"60px",fluid:!0,onClick:function(){return n("auth_swipe")},content:"Authorize"}),0===i.auth_required&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-triangle",fluid:!0,onClick:function(){return n("red_alert")},content:"Red Alert"}),(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",fluid:!0,onClick:function(){return n("emergency_maint")},content:"Emergency Maintenance Access"}),(0,o.createComponentVNode)(2,a.Button,{icon:"meteor",fluid:!0,onClick:function(){return n("bsa_unlock")},content:"Bluespace Artillery Unlock"})],4)],0)})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LaborClaimConsole=void 0;var o=n(1),r=n(28),a=n(3),i=n(2);t.LaborClaimConsole=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.can_go_home,u=c.id_points,s=c.ores,d=c.status_info,p=c.unclaimed_points;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle controls",children:(0,o.createComponentVNode)(2,i.Button,{content:"Move shuttle",disabled:!l,onClick:function(){return n("move_shuttle")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Points",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unclaimed points",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Claim points",disabled:!p,onClick:function(){return n("claim_points")}}),children:p})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Material values",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Material"}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:"Value"})]}),s.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,r.toTitleCase)(e.ore)}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{color:"label",inline:!0,children:e.value})})]},e.ore)}))]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.LanguageMenu=void 0;var o=n(1),r=n(3),a=n(2);t.LanguageMenu=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.admin_mode,l=i.is_living,u=i.omnitongue,s=i.languages,d=void 0===s?[]:s,p=i.unknown_languages,f=void 0===p?[]:p;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Known Languages",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,buttons:(0,o.createFragment)([!!l&&(0,o.createComponentVNode)(2,a.Button,{content:e.is_default?"Default Language":"Select as Default",disabled:!e.can_speak,selected:e.is_default,onClick:function(){return n("select_default",{language_name:e.name})}}),!!c&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Grant",onClick:function(){return n("grant_language",{language_name:e.name})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Remove",onClick:function(){return n("remove_language",{language_name:e.name})}})],4)],0),children:[e.desc," ","Key: ,",e.key," ",e.can_understand?"Can understand.":"Cannot understand."," ",e.can_speak?"Can speak.":"Cannot speak."]},e.name)}))})}),!!c&&(0,o.createComponentVNode)(2,a.Section,{title:"Unknown Languages",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Omnitongue "+(u?"Enabled":"Disabled"),selected:u,onClick:function(){return n("toggle_omnitongue")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:f.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Grant",onClick:function(){return n("grant_language",{language_name:e.name})}}),children:[e.desc," ","Key: ,",e.key," ",!!e.shadow&&"(gained from mob)"," ",e.can_speak?"Can speak.":"Cannot speak."]},e.name)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.LaunchpadConsole=t.LaunchpadRemote=t.LaunchpadControl=t.LaunchpadButtonPad=void 0;var o=n(1),r=n(3),a=n(2),i=function(e){var t=(0,r.useBackend)(e).act;return(0,o.createComponentVNode)(2,a.Grid,{width:"1px",children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-left",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:-1,y:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-left",mb:1,onClick:function(){return t("move_pos",{x:-1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-down",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:-1,y:-1})}})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-up",mb:1,onClick:function(){return t("move_pos",{y:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"R",mb:1,onClick:function(){return t("set_pos",{x:0,y:0})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-down",mb:1,onClick:function(){return t("move_pos",{y:-1})}})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-up",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:1,y:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-right",mb:1,onClick:function(){return t("move_pos",{x:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"arrow-right",iconRotation:45,mb:1,onClick:function(){return t("move_pos",{x:1,y:-1})}})]})]})};t.LaunchpadButtonPad=i;var c=function(e){var t=e.topLevel,n=(0,r.useBackend)(e),c=n.act,l=n.data,u=l.x,s=l.y,d=l.pad_name,p=l.range;return(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Input,{value:d,width:"170px",onChange:function(e,t){return c("rename",{name:t})}}),level:t?1:2,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Remove",color:"bad",onClick:function(){return c("remove")}}),children:[(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Controls",level:2,children:(0,o.createComponentVNode)(2,i,{state:e.state})})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Target",level:2,children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"26px",children:[(0,o.createComponentVNode)(2,a.Box,{mb:1,children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:"X:"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:u,minValue:-p,maxValue:p,lineHeight:"30px",fontSize:"26px",width:"90px",height:"30px",stepPixelSize:10,onChange:function(e,t){return c("set_pos",{x:t})}})]}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:"Y:"}),(0,o.createComponentVNode)(2,a.NumberInput,{value:s,minValue:-p,maxValue:p,stepPixelSize:10,lineHeight:"30px",fontSize:"26px",width:"90px",height:"30px",onChange:function(e,t){return c("set_pos",{y:t})}})]})]})})})]}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"upload",content:"Launch",textAlign:"center",onClick:function(){return c("launch")}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"download",content:"Pull",textAlign:"center",onClick:function(){return c("pull")}})})]})]})};t.LaunchpadControl=c;t.LaunchpadRemote=function(e){var t=(0,r.useBackend)(e).data,n=t.has_pad,i=t.pad_closed;return n?i?(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Launchpad Closed"}):(0,o.createComponentVNode)(2,c,{topLevel:!0,state:e.state}):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Launchpad Connected"})};t.LaunchpadConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,l=i.launchpads,u=void 0===l?[]:l,s=i.selected_id;return u.length<=0?(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Pads Connected"}):(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{size:.6,children:(0,o.createComponentVNode)(2,a.Box,{style:{"border-right":"2px solid rgba(255, 255, 255, 0.1)"},minHeight:"190px",mr:1,children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.name,selected:s===e.id,color:"transparent",onClick:function(){return n("select_pad",{id:e.id})}},e.name)}))})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:s?(0,o.createComponentVNode)(2,c,{state:e.state}):(0,o.createComponentVNode)(2,a.Box,{children:"Please select a pad"})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechBayPowerConsole=void 0;var o=n(1),r=n(3),a=n(2);t.MechBayPowerConsole=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data.recharge_port,c=i&&i.mech,l=c&&c.cell;return(0,o.createComponentVNode)(2,a.Section,{title:"Mech status",textAlign:"center",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Sync",onClick:function(){return n("reconnect")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:!i&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.health/c.maxhealth,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:!i&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||!l&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No cell is installed."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.charge/l.maxcharge,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l.charge})," / "+l.maxcharge]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Mule=void 0;var o=n(1),r=n(3),a=n(2),i=n(69);t.Mule=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.locked&&!c.siliconUser,u=c.siliconUser,s=c.on,d=c.cell,p=c.cellPercent,f=c.load,m=c.mode,h=c.modeStatus,C=c.haspai,g=c.autoReturn,b=c.autoPickup,v=c.reportDelivery,N=c.destination,V=c.home,y=c.id,_=c.destinations,x=void 0===_?[]:_;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox,{siliconUser:u,locked:l}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",minHeight:"110px",buttons:!l&&(0,o.createComponentVNode)(2,a.Button,{icon:s?"power-off":"times",content:s?"On":"Off",selected:s,onClick:function(){return n("power")}}),children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:d?p/100:0,color:d?"good":"bad"}),(0,o.createComponentVNode)(2,a.Grid,{mt:1,children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",color:h,children:m})})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Load",color:f?"good":"average",children:f||"None"})})})]})]}),!l&&(0,o.createComponentVNode)(2,a.Section,{title:"Controls",buttons:(0,o.createFragment)([!!f&&(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Unload",onClick:function(){return n("unload")}}),!!C&&(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject PAI",onClick:function(){return n("ejectpai")}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID",children:(0,o.createComponentVNode)(2,a.Input,{value:y,onChange:function(e,t){return n("setid",{value:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destination",children:[(0,o.createComponentVNode)(2,a.Dropdown,{over:!0,selected:N||"None",options:x,width:"150px",onSelected:function(e){return n("destination",{value:e})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"stop",content:"Stop",onClick:function(){return n("stop")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"play",content:"Go",onClick:function(){return n("go")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Home",children:[(0,o.createComponentVNode)(2,a.Dropdown,{over:!0,selected:V,options:x,width:"150px",onSelected:function(e){return n("destination",{value:e})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"home",content:"Go Home",onClick:function(){return n("home")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Settings",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:g,content:"Auto-Return",onClick:function(){return n("autored")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:b,content:"Auto-Pickup",onClick:function(){return n("autopick")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:v,content:"Report Delivery",onClick:function(){return n("report")}})]})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.NotificationPreferences=void 0;var o=n(1),r=n(3),a=n(2);t.NotificationPreferences=function(e){var t=(0,r.useBackend)(e),n=t.act,i=(t.data.ignore||[]).sort((function(e,t){var n=e.desc.toLowerCase(),o=t.desc.toLowerCase();return no?1:0}));return(0,o.createComponentVNode)(2,a.Section,{title:"Ghost Role Notifications",children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:e.enabled?"times":"check",content:e.desc,color:e.enabled?"bad":"good",onClick:function(){return n("toggle_ignore",{key:e.key})}},e.key)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtnetRelay=void 0;var o=n(1),r=n(3),a=n(2);t.NtnetRelay=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.enabled,l=i.dos_capacity,u=i.dos_overload,s=i.dos_crashed;return(0,o.createComponentVNode)(2,a.Section,{title:"Network Buffer",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",selected:c,content:c?"ENABLED":"DISABLED",onClick:function(){return n("toggle")}}),children:s?(0,o.createComponentVNode)(2,a.Box,{fontFamily:"monospace",children:[(0,o.createComponentVNode)(2,a.Box,{fontSize:"20px",children:"NETWORK BUFFER OVERFLOW"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:"16px",children:"OVERLOAD RECOVERY MODE"}),(0,o.createComponentVNode)(2,a.Box,{children:"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."}),(0,o.createComponentVNode)(2,a.Box,{fontSize:"20px",color:"bad",children:"ADMINISTRATOR OVERRIDE"}),(0,o.createComponentVNode)(2,a.Box,{fontSize:"16px",color:"bad",children:"CAUTION - DATA LOSS MAY OCCUR"}),(0,o.createComponentVNode)(2,a.Button,{icon:"signal",content:"PURGE BUFFER",mt:1,color:"bad",onClick:function(){return n("restart")}})]}):(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:l,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u})," GQ"," / ",l," GQ"]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosArcade=void 0;var o=n(1),r=n(3),a=n(2);t.NtosArcade=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{title:"Outbomb Cuban Pete Ultra",textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{size:2,children:[(0,o.createComponentVNode)(2,a.Box,{m:1}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Player Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.PlayerHitpoints,minValue:0,maxValue:30,ranges:{olive:[31,Infinity],good:[20,31],average:[10,20],bad:[-Infinity,10]},children:[i.PlayerHitpoints,"HP"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Player Magic",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.PlayerMP,minValue:0,maxValue:10,ranges:{purple:[11,Infinity],violet:[3,11],bad:[-Infinity,3]},children:[i.PlayerMP,"MP"]})})]}),(0,o.createComponentVNode)(2,a.Box,{my:1,mx:4}),(0,o.createComponentVNode)(2,a.Section,{backgroundColor:1===i.PauseState?"#1b3622":"#471915",children:i.Status})]}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.Hitpoints/45,minValue:0,maxValue:45,ranges:{good:[30,Infinity],average:[5,30],bad:[-Infinity,5]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:i.Hitpoints}),"HP"]}),(0,o.createComponentVNode)(2,a.Box,{m:1}),(0,o.createComponentVNode)(2,a.Section,{inline:!0,width:26,textAlign:"center",children:(0,o.createVNode)(1,"img",null,null,1,{src:i.BossID})})]})]}),(0,o.createComponentVNode)(2,a.Box,{my:1,mx:4}),(0,o.createComponentVNode)(2,a.Button,{icon:"fist-raised",tooltip:"Go in for the kill!",tooltipPosition:"top",disabled:0===i.GameActive||1===i.PauseState,onClick:function(){return n("Attack")},content:"Attack!"}),(0,o.createComponentVNode)(2,a.Button,{icon:"band-aid",tooltip:"Heal yourself!",tooltipPosition:"top",disabled:0===i.GameActive||1===i.PauseState,onClick:function(){return n("Heal")},content:"Heal!"}),(0,o.createComponentVNode)(2,a.Button,{icon:"magic",tooltip:"Recharge your magic!",tooltipPosition:"top",disabled:0===i.GameActive||1===i.PauseState,onClick:function(){return n("Recharge_Power")},content:"Recharge!"})]}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",tooltip:"One more game couldn't hurt.",tooltipPosition:"top",disabled:1===i.GameActive,onClick:function(){return n("Start_Game")},content:"Begin Game"}),(0,o.createComponentVNode)(2,a.Button,{icon:"ticket-alt",tooltip:"Claim at your local Arcade Computer for Prizes!",tooltipPosition:"top",disabled:1===i.GameActive,onClick:function(){return n("Dispense_Tickets")},content:"Claim Tickets"})]}),(0,o.createComponentVNode)(2,a.Box,{color:i.TicketCount>=1?"good":"normal",children:["Earned Tickets: ",i.TicketCount]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosConfiguration=void 0;var o=n(1),r=n(3),a=n(2);t.NtosConfiguration=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.power_usage,l=i.battery_exists,u=i.battery,s=void 0===u?{}:u,d=i.disk_size,p=i.disk_used,f=i.hardware,m=void 0===f?[]:f;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Power Supply",buttons:(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:["Power Draw: ",c,"W"]}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Battery Status",color:!l&&"average",children:l?(0,o.createComponentVNode)(2,a.ProgressBar,{value:s.charge,minValue:0,maxValue:s.max,ranges:{good:[s.max/2,Infinity],average:[s.max/4,s.max/2],bad:[-Infinity,s.max/4]},children:[s.charge," / ",s.max]}):"Not Available"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"File System",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:p,minValue:0,maxValue:d,color:"good",children:[p," GQ / ",d," GQ"]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Hardware Components",children:m.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,level:2,buttons:(0,o.createFragment)([!e.critical&&(0,o.createComponentVNode)(2,a.Button.Checkbox,{content:"Enabled",checked:e.enabled,mr:1,onClick:function(){return n("PC_toggle_component",{name:e.name})}}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:1,children:["Power Usage: ",e.powerusage,"W"]})],0),children:e.desc},e.name)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosMain=void 0;var o=n(1),r=n(3),a=n(2),i={compconfig:"cog",ntndownloader:"download",filemanager:"folder",smmonitor:"radiation",alarmmonitor:"bell",cardmod:"id-card",arcade:"gamepad",ntnrc_client:"comment-alt",nttransfer:"exchange-alt",powermonitor:"plug"};t.NtosMain=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.programs,u=void 0===l?[]:l,s=c.has_light,d=c.light_on,p=c.comp_light_color;return(0,o.createFragment)([!!s&&(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Button,{width:"144px",icon:"lightbulb",selected:d,onClick:function(){return n("PC_toggle_light")},children:["Flashlight: ",d?"ON":"OFF"]}),(0,o.createComponentVNode)(2,a.Button,{ml:1,onClick:function(){return n("PC_light_color")},children:["Color:",(0,o.createComponentVNode)(2,a.ColorBox,{ml:1,color:p})]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Programs",children:(0,o.createComponentVNode)(2,a.Table,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,lineHeight:"24px",color:"transparent",icon:i[e.name]||"window-maximize-o",content:e.desc,onClick:function(){return n("PC_runprogram",{name:e.name})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,width:3,children:!!e.running&&(0,o.createComponentVNode)(2,a.Button,{lineHeight:"24px",color:"transparent",icon:"times",tooltip:"Close program",tooltipPosition:"left",onClick:function(){return n("PC_killprogram",{name:e.name})}})})]},e.name)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosNetChat=void 0;var o=n(1),r=n(3),a=n(2);(0,n(51).createLogger)("ntos chat");t.NtosNetChat=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.can_admin,l=i.adminmode,u=i.authed,s=i.username,d=i.active_channel,p=i.is_operator,f=i.all_channels,m=void 0===f?[]:f,h=i.clients,C=void 0===h?[]:h,g=i.messages,b=void 0===g?[]:g,v=null!==d,N=u||l;return(0,o.createComponentVNode)(2,a.Section,{height:"600px",children:(0,o.createComponentVNode)(2,a.Table,{height:"580px",children:(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"top",style:{width:"200px"},children:[(0,o.createComponentVNode)(2,a.Box,{height:"537px",overflowY:"scroll",children:[(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"New Channel...",onCommit:function(e,t){return n("PRG_newchannel",{new_channel_name:t})}}),m.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:e.chan,selected:e.id===d,color:"transparent",onClick:function(){return n("PRG_joinchannel",{id:e.id})}},e.chan)}))]}),(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,mt:1,content:s+"...",currentValue:s,onCommit:function(e,t){return n("PRG_changename",{new_name:t})}}),!!c&&(0,o.createComponentVNode)(2,a.Button,{fluid:!0,bold:!0,content:"ADMIN MODE: "+(l?"ON":"OFF"),color:l?"bad":"good",onClick:function(){return n("PRG_toggleadmin")}})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Box,{height:"560px",overflowY:"scroll",children:v&&(N?b.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e.msg},e.msg)})):(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",mt:4,fontSize:"40px"}),(0,o.createComponentVNode)(2,a.Box,{mt:1,bold:!0,fontSize:"18px",children:"THIS CHANNEL IS PASSWORD PROTECTED"}),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:"INPUT PASSWORD TO ACCESS"})]}))}),(0,o.createComponentVNode)(2,a.Input,{fluid:!0,selfClear:!0,mt:1,onEnter:function(e,t){return n("PRG_speak",{message:t})}})]}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"top",style:{width:"150px"},children:[(0,o.createComponentVNode)(2,a.Box,{height:"477px",overflowY:"scroll",children:C.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e.name},e.name)}))}),v&&N&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"Save log...",defaultValue:"new_log",onCommit:function(e,t){return n("PRG_savelog",{log_name:t})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{fluid:!0,content:"Leave Channel",onClick:function(){return n("PRG_leavechannel")}})],4),!!p&&u&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{fluid:!0,content:"Delete Channel",onClick:function(){return n("PRG_deletechannel")}}),(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"Rename Channel...",onCommit:function(e,t){return n("PRG_renamechannel",{new_name:t})}}),(0,o.createComponentVNode)(2,a.Button.Input,{fluid:!0,content:"Set Password...",onCommit:function(e,t){return n("PRG_setpassword",{new_password:t})}})],4)]})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosNetDownloader=void 0;var o=n(1),r=n(3),a=n(2);t.NtosNetDownloader=function(e){var t=e.state,n=(0,r.useBackend)(e),c=n.act,l=n.data,u=l.disk_size,s=l.disk_used,d=l.downloadable_programs,p=void 0===d?[]:d,f=l.error,m=l.hacked_programs,h=void 0===m?[]:m,C=l.hackedavailable;return(0,o.createFragment)([!!f&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:[(0,o.createComponentVNode)(2,a.Box,{mb:1,children:f}),(0,o.createComponentVNode)(2,a.Button,{content:"Reset",onClick:function(){return c("PRG_reseterror")}})]}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Disk usage",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:s,minValue:0,maxValue:u,children:s+" GQ / "+u+" GQ"})})})}),(0,o.createComponentVNode)(2,a.Section,{children:p.map((function(e){return(0,o.createComponentVNode)(2,i,{state:t,program:e},e.filename)}))}),!!C&&(0,o.createComponentVNode)(2,a.Section,{title:"UNKNOWN Software Repository",children:[(0,o.createComponentVNode)(2,a.NoticeBox,{mb:1,children:"Please note that Nanotrasen does not recommend download of software from non-official servers."}),h.map((function(e){return(0,o.createComponentVNode)(2,i,{state:t,program:e},e.filename)}))]})],0)};var i=function(e){var t=e.program,n=(0,r.useBackend)(e),i=n.act,c=n.data,l=c.disk_size,u=c.disk_used,s=c.downloadcompletion,d=c.downloading,p=c.downloadname,f=c.downloadsize,m=l-u;return(0,o.createComponentVNode)(2,a.Box,{mb:3,children:[(0,o.createComponentVNode)(2,a.Flex,{align:"baseline",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,grow:1,children:t.filedesc}),(0,o.createComponentVNode)(2,a.Flex.Item,{color:"label",nowrap:!0,children:[t.size," GQ"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2,width:"94px",textAlign:"center",children:t.filename===p&&(0,o.createComponentVNode)(2,a.ProgressBar,{color:"green",minValue:0,maxValue:f,value:s})||(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"download",content:"Download",disabled:d||t.size>m,onClick:function(){return i("PRG_downloadfile",{filename:t.filename})}})})]}),"Compatible"!==t.compatibility&&(0,o.createComponentVNode)(2,a.Box,{mt:1,italic:!0,fontSize:"12px",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{mx:1,color:"red",name:"times"}),"Incompatible!"]}),t.size>m&&(0,o.createComponentVNode)(2,a.Box,{mt:1,italic:!0,fontSize:"12px",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{mx:1,color:"red",name:"times"}),"Not enough disk space!"]}),(0,o.createComponentVNode)(2,a.Box,{mt:1,italic:!0,color:"label",fontSize:"12px",children:t.fileinfo})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosSupermatterMonitor=void 0;var o=n(1),r=n(29),a=n(70),i=n(20),c=n(3),l=n(2),u=n(37),s=function(e){return Math.log2(16+Math.max(0,e))-4};t.NtosSupermatterMonitor=function(e){var t=e.state,n=(0,c.useBackend)(e),p=n.act,f=n.data,m=f.active,h=f.SM_integrity,C=f.SM_power,g=f.SM_ambienttemp,b=f.SM_ambientpressure;if(!m)return(0,o.createComponentVNode)(2,d,{state:t});var v=(0,a.flow)([function(e){return e.filter((function(e){return e.amount>=.01}))},(0,r.sortBy)((function(e){return-e.amount}))])(f.gases||[]),N=Math.max.apply(Math,[1].concat(v.map((function(e){return e.amount}))));return(0,o.createComponentVNode)(2,l.Flex,{spacing:1,children:[(0,o.createComponentVNode)(2,l.Flex.Item,{width:"270px",children:(0,o.createComponentVNode)(2,l.Section,{title:"Metrics",children:(0,o.createComponentVNode)(2,l.LabeledList,{children:[(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:h/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:C,minValue:0,maxValue:5e3,ranges:{good:[-Infinity,5e3],average:[5e3,7e3],bad:[7e3,Infinity]},children:(0,i.toFixed)(C)+" MeV/cm3"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(g),minValue:0,maxValue:s(1e4),ranges:{teal:[-Infinity,s(80)],good:[s(80),s(373)],average:[s(373),s(1e3)],bad:[s(1e3),Infinity]},children:(0,i.toFixed)(g)+" K"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(b),minValue:0,maxValue:s(5e4),ranges:{good:[s(1),s(300)],average:[-Infinity,s(1e3)],bad:[s(1e3),+Infinity]},children:(0,i.toFixed)(b)+" kPa"})})]})})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,l.Section,{title:"Gases",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"arrow-left",content:"Back",onClick:function(){return p("PRG_clear")}}),children:(0,o.createComponentVNode)(2,l.Box.Forced,{height:24*v.length+"px",children:(0,o.createComponentVNode)(2,l.LabeledList,{children:v.map((function(e){return(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:(0,u.getGasLabel)(e.name),children:(0,o.createComponentVNode)(2,l.ProgressBar,{color:(0,u.getGasColor)(e.name),value:e.amount,minValue:0,maxValue:N,children:(0,i.toFixed)(e.amount,2)+"%"})},e.name)}))})})})})]})};var d=function(e){var t=(0,c.useBackend)(e),n=t.act,r=t.data.supermatters,a=void 0===r?[]:r;return(0,o.createComponentVNode)(2,l.Section,{title:"Detected Supermatters",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"sync",content:"Refresh",onClick:function(){return n("PRG_refresh")}}),children:(0,o.createComponentVNode)(2,l.Table,{children:a.map((function(e){return(0,o.createComponentVNode)(2,l.Table.Row,{children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:e.uid+". "+e.area_name}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,color:"label",children:"Integrity:"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,width:"120px",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:e.integrity/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,l.Button,{content:"Details",onClick:function(){return n("PRG_set",{target:e.uid})}})})]},e.uid)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NtosWrapper=void 0;var o=n(1),r=n(3),a=n(2),i=n(116);t.NtosWrapper=function(e){var t=e.children,n=(0,r.useBackend)(e),c=n.act,l=n.data,u=l.PC_batteryicon,s=l.PC_showbatteryicon,d=l.PC_batterypercent,p=l.PC_ntneticon,f=l.PC_apclinkicon,m=l.PC_stationtime,h=l.PC_programheaders,C=void 0===h?[]:h,g=l.PC_showexitprogram;return(0,o.createVNode)(1,"div","NtosWrapper",[(0,o.createVNode)(1,"div","NtosWrapper__header NtosHeader",[(0,o.createVNode)(1,"div","NtosHeader__left",[(0,o.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:2,children:m}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,mr:2,opacity:.33,children:"NtOS"})],4),(0,o.createVNode)(1,"div","NtosHeader__right",[C.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:e.icon})},e.icon)})),(0,o.createComponentVNode)(2,a.Box,{inline:!0,children:p&&(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:p})}),!!s&&u&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:[u&&(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:u}),d&&d]}),f&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,o.createVNode)(1,"img","NtosHeader__icon",null,1,{src:f})}),!!g&&(0,o.createComponentVNode)(2,a.Button,{width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-minimize-o",tooltip:"Minimize",tooltipPosition:"bottom",onClick:function(){return c("PC_minimize")}}),!!g&&(0,o.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-close-o",tooltip:"Close",tooltipPosition:"bottom-left",onClick:function(){return c("PC_exit")}}),!g&&(0,o.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"power-off",tooltip:"Power off",tooltipPosition:"bottom-left",onClick:function(){return c("PC_shutdown")}})],0)],4,{onMouseDown:function(){(0,i.refocusLayout)()}}),(0,o.createVNode)(1,"div","NtosWrapper__content",t,0)],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.NuclearBomb=void 0;var o=n(1),r=n(12),a=n(3),i=n(2),c=function(e){var t=(0,a.useBackend)(e).act;return(0,o.createComponentVNode)(2,i.Box,{width:"185px",children:(0,o.createComponentVNode)(2,i.Grid,{width:"1px",children:[["1","4","7","C"],["2","5","8","0"],["3","6","9","E"]].map((function(e){return(0,o.createComponentVNode)(2,i.Grid.Column,{children:e.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{fluid:!0,bold:!0,mb:1,content:e,textAlign:"center",fontSize:"40px",lineHeight:"50px",width:"55px",className:(0,r.classes)(["NuclearBomb__Button","NuclearBomb__Button--keypad","NuclearBomb__Button--"+e]),onClick:function(){return t("keypad",{digit:e})}},e)}))},e[0])}))})})};t.NuclearBomb=function(e){var t=e.state,n=(0,a.useBackend)(e),r=n.act,l=n.data,u=(l.anchored,l.disk_present,l.status1),s=l.status2;return(0,o.createComponentVNode)(2,i.Box,{m:1,children:[(0,o.createComponentVNode)(2,i.Box,{mb:1,className:"NuclearBomb__displayBox",children:u}),(0,o.createComponentVNode)(2,i.Flex,{mb:1.5,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,i.Box,{className:"NuclearBomb__displayBox",children:s})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",fontSize:"24px",lineHeight:"23px",textAlign:"center",width:"43px",ml:1,mr:"3px",mt:"3px",className:"NuclearBomb__Button NuclearBomb__Button--keypad",onClick:function(){return r("eject_disk")}})})]}),(0,o.createComponentVNode)(2,i.Flex,{ml:"3px",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,c,{state:t})}),(0,o.createComponentVNode)(2,i.Flex.Item,{ml:1,width:"129px",children:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,bold:!0,content:"ARM",textAlign:"center",fontSize:"28px",lineHeight:"32px",mb:1,className:"NuclearBomb__Button NuclearBomb__Button--C",onClick:function(){return r("arm")}}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,bold:!0,content:"ANCHOR",textAlign:"center",fontSize:"28px",lineHeight:"32px",className:"NuclearBomb__Button NuclearBomb__Button--E",onClick:function(){return r("anchor")}}),(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",color:"#9C9987",fontSize:"80px",children:(0,o.createComponentVNode)(2,i.Icon,{name:"radiation"})}),(0,o.createComponentVNode)(2,i.Box,{height:"80px",className:"NuclearBomb__NTIcon"})]})})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(1),r=n(3),a=n(2);t.OperatingComputer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.table,l=i.surgeries,u=void 0===l?[]:l,s=i.procedures,d=void 0===s?[]:s,p=i.patient,f=void 0===p?{}:p;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:"Patient State",children:[!c&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Table Detected"}),(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Patient State",level:2,children:f?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State",color:f.statstate,children:f.stat}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood Type",children:f.blood_type}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f.health,minValue:f.minHealth,maxValue:f.maxHealth,color:f.health>=0?"good":"average",content:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:f.health})})}),[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}].map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f[e.type]/f.maxHealth,color:"bad",content:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:f[e.type]})})},e.type)}))]}):"No Patient Detected"}),(0,o.createComponentVNode)(2,a.Section,{title:"Initiated Procedures",level:2,children:d.length?d.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,level:3,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Next Step",children:[e.next_step,e.chems_needed&&(0,o.createFragment)([(0,o.createVNode)(1,"b",null,"Required Chemicals:",16),(0,o.createVNode)(1,"br"),e.chems_needed],0)]}),!!i.alternative_step&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alternative Step",children:[e.alternative_step,e.alt_chems_needed&&(0,o.createFragment)([(0,o.createVNode)(1,"b",null,"Required Chemicals:",16),(0,o.createVNode)(1,"br"),e.alt_chems_needed],0)]})]})},e.name)})):"No Active Procedures"})]})]},"state"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{label:"Surgery Procedures",children:(0,o.createComponentVNode)(2,a.Section,{title:"Advanced Surgery Procedures",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"download",content:"Sync Research Database",onClick:function(){return n("sync")}}),u.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,level:2,children:e.desc},e.name)}))]})},"procedures")]})}},function(e,t,n){"use strict";t.__esModule=!0,t.OreBox=void 0;var o=n(1),r=n(28),a=n(19),i=n(2);t.OreBox=function(e){var t=e.state,n=t.config,c=t.data,l=n.ref,u=c.materials;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Ores",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Empty",onClick:function(){return(0,a.act)(l,"removeall")}}),children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Ore"}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:"Amount"})]}),u.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,r.toTitleCase)(e.name)}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{color:"label",inline:!0,children:e.amount})})]},e.type)}))]})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Box,{children:["All ores will be placed in here when you are wearing a mining stachel on your belt or in a pocket while dragging the ore box.",(0,o.createVNode)(1,"br"),"Gibtonite is not accepted."]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.OreRedemptionMachine=void 0;var o=n(1),r=n(28),a=n(3),i=n(2);t.OreRedemptionMachine=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,l=r.unclaimedPoints,u=r.materials,s=r.alloys,d=r.diskDesigns,p=r.hasDisk;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.BlockQuote,{mb:1,children:["This machine only accepts ore.",(0,o.createVNode)(1,"br"),"Gibtonite and Slag are not accepted."]}),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"label",mr:1,children:"Unclaimed points:"}),l,(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Claim",disabled:0===l,onClick:function(){return n("Claim")}})]})]}),(0,o.createComponentVNode)(2,i.Section,{children:p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{mb:1,children:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject design disk",onClick:function(){return n("diskEject")}})}),(0,o.createComponentVNode)(2,i.Table,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:["File ",e.index,": ",e.name]}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,i.Button,{disabled:!e.canupload,content:"Upload",onClick:function(){return n("diskUpload",{design:e.index})}})})]},e.index)}))})],4)||(0,o.createComponentVNode)(2,i.Button,{icon:"save",content:"Insert design disk",onClick:function(){return n("diskInsert")}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,i.Table,{children:u.map((function(e){return(0,o.createComponentVNode)(2,c,{material:e,onRelease:function(t){return n("Release",{id:e.id,sheets:t})}},e.id)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"Alloys",children:(0,o.createComponentVNode)(2,i.Table,{children:s.map((function(e){return(0,o.createComponentVNode)(2,c,{material:e,onRelease:function(t){return n("Smelt",{id:e.id,sheets:t})}},e.id)}))})})],4)};var c=function(e){var t,n;function a(){var t;return(t=e.call(this)||this).state={amount:1},t}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.prototype.render=function(){var e=this,t=this.state.amount,n=this.props,a=n.material,c=n.onRelease,l=Math.floor(a.amount);return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,r.toTitleCase)(a.name).replace("Alloy","")}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{mr:2,color:"label",inline:!0,children:a.value&&a.value+" cr"})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,i.Box,{mr:2,color:"label",inline:!0,children:[l," sheets"]})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:[(0,o.createComponentVNode)(2,i.NumberInput,{width:"32px",step:1,stepPixelSize:5,minValue:1,maxValue:50,value:t,onChange:function(t,n){return e.setState({amount:n})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:l<1,content:"Release",onClick:function(){return c(t)}})]})]})},a}(o.Component)},function(e,t,n){"use strict";t.__esModule=!0,t.Pandemic=t.PandemicAntibodyDisplay=t.PandemicSymptomDisplay=t.PandemicDiseaseDisplay=t.PandemicBeakerDisplay=void 0;var o=n(1),r=n(29),a=n(3),i=n(2),c=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,c=r.has_beaker,l=r.beaker_empty,u=r.has_blood,s=r.blood,d=!c||l;return(0,o.createComponentVNode)(2,i.Section,{title:"Beaker",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Empty and Eject",color:"bad",disabled:d,onClick:function(){return n("empty_eject_beaker")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"trash",content:"Empty",disabled:d,onClick:function(){return n("empty_beaker")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject",disabled:!c,onClick:function(){return n("eject_beaker")}})],4),children:c?l?(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Beaker is empty"}):u?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood DNA",children:s&&s.dna||"Unknown"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Type",children:s&&s.type||"Unknown"})]}):(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"No blood detected"}):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No beaker loaded"})})};t.PandemicBeakerDisplay=c;var l=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,c=r.is_ready;return(r.viruses||[]).map((function(e){var t=e.symptoms||[];return(0,o.createComponentVNode)(2,i.Section,{title:e.can_rename?(0,o.createComponentVNode)(2,i.Input,{value:e.name,onChange:function(t,o){return n("rename_disease",{index:e.index,name:o})}}):e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"flask",content:"Create culture bottle",disabled:!c,onClick:function(){return n("create_culture_bottle",{index:e.index})}}),children:[(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:e.description}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Agent",children:e.agent}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Spread",children:e.spread}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Possible Cure",children:e.cure})]})})]}),!!e.is_adv&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Statistics",level:2,children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Resistance",children:e.resistance}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stealth",children:e.stealth})]})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stage speed",children:e.stage_speed}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmissibility",children:e.transmission})]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Symptoms",level:2,children:t.map((function(e){return(0,o.createComponentVNode)(2,i.Collapsible,{title:e.name,children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,u,{symptom:e})})},e.name)}))})],4)]},e.name)}))};t.PandemicDiseaseDisplay=l;var u=function(e){var t=e.symptom,n=t.name,a=t.desc,c=t.stealth,l=t.resistance,u=t.stage_speed,s=t.transmission,d=t.level,p=t.neutered,f=(0,r.map)((function(e,t){return{desc:e,label:t}}))(t.threshold_desc||{});return(0,o.createComponentVNode)(2,i.Section,{title:n,level:2,buttons:!!p&&(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",children:"Neutered"}),children:[(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{size:2,children:a}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Resistance",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stealth",children:c}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stage Speed",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmission",children:s})]})})]}),f.length>0&&(0,o.createComponentVNode)(2,i.Section,{title:"Thresholds",level:3,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:f.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.label,children:e.desc},e.label)}))})})]})};t.PandemicSymptomDisplay=u;var s=function(e){var t=(0,a.useBackend)(e),n=t.act,r=t.data,c=r.resistances||[];return(0,o.createComponentVNode)(2,i.Section,{title:"Antibodies",children:c.length>0?(0,o.createComponentVNode)(2,i.LabeledList,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:(0,o.createComponentVNode)(2,i.Button,{icon:"eye-dropper",content:"Create vaccine bottle",disabled:!r.is_ready,onClick:function(){return n("create_vaccine_bottle",{index:e.id})}})},e.name)}))}):(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",mt:1,children:"No antibodies detected."})})};t.PandemicAntibodyDisplay=s;t.Pandemic=function(e){var t=(0,a.useBackend)(e).data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c,{state:e.state}),!!t.has_blood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,l,{state:e.state}),(0,o.createComponentVNode)(2,s,{state:e.state})],4)],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.PortableGenerator=void 0;var o=n(1),r=n(3),a=n(2);t.PortableGenerator=function(e){var t,n=(0,r.useBackend)(e),i=n.act,c=n.data;return t=c.stack_percent>50?"good":c.stack_percent>15?"average":"bad",(0,o.createFragment)([!c.anchored&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Generator not anchored."}),(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power switch",children:(0,o.createComponentVNode)(2,a.Button,{icon:c.active?"power-off":"times",onClick:function(){return i("toggle_power")},disabled:!c.ready_to_boot,children:c.active?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:c.sheet_name+" sheets",children:[(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:t,children:c.sheets}),c.sheets>=1&&(0,o.createComponentVNode)(2,a.Button,{ml:1,icon:"eject",disabled:c.active,onClick:function(){return i("eject")},children:"Eject"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current sheet level",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.stack_percent/100,ranges:{good:[.1,Infinity],average:[.01,.1],bad:[-Infinity,.01]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Heat level",children:c.current_heat<100?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"good",children:"Nominal"}):c.current_heat<200?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:"Caution"}):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"bad",children:"DANGER"})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current output",children:c.power_output}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust output",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"minus",onClick:function(){return i("lower_power")},children:c.power_generated}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",onClick:function(){return i("higher_power")},children:c.power_generated})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power available",children:(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:!c.connected&&"bad",children:c.connected?c.power_available:"Unconnected"})})]})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.PortableScrubber=t.PortablePump=t.PortableBasicInfo=void 0;var o=n(1),r=n(3),a=n(2),i=n(37),c=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.connected,l=i.holding,u=i.on,s=i.pressure;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return n("power")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:s})," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Port",color:c?"good":"average",children:c?"Connected":"Not Connected"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Holding Tank",minHeight:"82px",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",disabled:!l,onClick:function(){return n("eject")}}),children:l?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:l.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:l.pressure})," kPa"]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No holding tank"})})],4)};t.PortableBasicInfo=c;t.PortablePump=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,l=i.direction,u=(i.holding,i.target_pressure),s=i.default_pressure,d=i.min_pressure,p=i.max_pressure;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c,{state:e.state}),(0,o.createComponentVNode)(2,a.Section,{title:"Pump",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l?"sign-in-alt":"sign-out-alt",content:l?"In":"Out",selected:l,onClick:function(){return n("direction")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:u,unit:"kPa",width:"75px",minValue:d,maxValue:p,step:10,onChange:function(e,t){return n("pressure",{pressure:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Presets",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"minus",disabled:u===d,onClick:function(){return n("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",disabled:u===s,onClick:function(){return n("pressure",{pressure:"reset"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"plus",disabled:u===p,onClick:function(){return n("pressure",{pressure:"max"})}})]})]})})],4)};t.PortableScrubber=function(e){var t=(0,r.useBackend)(e),n=t.act,l=t.data.filter_types||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,c,{state:e.state}),(0,o.createComponentVNode)(2,a.Section,{title:"Filters",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.enabled?"check-square-o":"square-o",content:(0,i.getGasLabel)(e.gas_id,e.gas_name),selected:e.enabled,onClick:function(){return n("toggle_filter",{val:e.gas_id})}},e.id)}))})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitor=void 0;var o=n(1),r=n(29),a=n(70),i=n(20),c=n(12),l=n(2);var u=5e5,s=function(e){var t=String(e.split(" ")[1]).toLowerCase();return["w","kw","mw","gw"].indexOf(t)},d=function(e){var t,n;function c(){var t;return(t=e.call(this)||this).state={sortByField:null},t}return n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,c.prototype.render=function(){var e=this,t=this.props.state.data,n=t.history,c=this.state.sortByField,d=n.supply[n.supply.length-1]||0,m=n.demand[n.demand.length-1]||0,h=n.supply.map((function(e,t){return[t,e]})),C=n.demand.map((function(e,t){return[t,e]})),g=Math.max.apply(Math,[u].concat(n.supply,n.demand)),b=(0,a.flow)([(0,r.map)((function(e,t){return Object.assign({},e,{id:e.name+t})})),"name"===c&&(0,r.sortBy)((function(e){return e.name})),"charge"===c&&(0,r.sortBy)((function(e){return-e.charge})),"draw"===c&&(0,r.sortBy)((function(e){return-s(e.load)}),(function(e){return-parseFloat(e.load)}))])(t.areas);return(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Flex,{spacing:1,children:[(0,o.createComponentVNode)(2,l.Flex.Item,{width:"200px",children:(0,o.createComponentVNode)(2,l.Section,{children:(0,o.createComponentVNode)(2,l.LabeledList,{children:[(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Supply",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:d,minValue:0,maxValue:g,color:"teal",content:(0,i.toFixed)(d/1e3)+" kW"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Draw",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:m,minValue:0,maxValue:g,color:"pink",content:(0,i.toFixed)(m/1e3)+" kW"})})]})})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,l.Section,{position:"relative",height:"100%",children:[(0,o.createComponentVNode)(2,l.Chart.Line,{fillPositionedParent:!0,data:h,rangeX:[0,h.length-1],rangeY:[0,g],strokeColor:"rgba(0, 181, 173, 1)",fillColor:"rgba(0, 181, 173, 0.25)"}),(0,o.createComponentVNode)(2,l.Chart.Line,{fillPositionedParent:!0,data:C,rangeX:[0,C.length-1],rangeY:[0,g],strokeColor:"rgba(224, 57, 151, 1)",fillColor:"rgba(224, 57, 151, 0.25)"})]})})]}),(0,o.createComponentVNode)(2,l.Section,{children:[(0,o.createComponentVNode)(2,l.Box,{mb:1,children:[(0,o.createComponentVNode)(2,l.Box,{inline:!0,mr:2,color:"label",children:"Sort by:"}),(0,o.createComponentVNode)(2,l.Button.Checkbox,{checked:"name"===c,content:"Name",onClick:function(){return e.setState({sortByField:"name"!==c&&"name"})}}),(0,o.createComponentVNode)(2,l.Button.Checkbox,{checked:"charge"===c,content:"Charge",onClick:function(){return e.setState({sortByField:"charge"!==c&&"charge"})}}),(0,o.createComponentVNode)(2,l.Button.Checkbox,{checked:"draw"===c,content:"Draw",onClick:function(){return e.setState({sortByField:"draw"!==c&&"draw"})}})]}),(0,o.createComponentVNode)(2,l.Table,{children:[(0,o.createComponentVNode)(2,l.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:"Area"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,children:"Charge"}),(0,o.createComponentVNode)(2,l.Table.Cell,{textAlign:"right",children:"Draw"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,title:"Equipment",children:"Eqp"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,title:"Lighting",children:"Lgt"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,title:"Environment",children:"Env"})]}),b.map((function(e,t){return(0,o.createVNode)(1,"tr","Table__row candystripe",[(0,o.createVNode)(1,"td",null,e.name,0),(0,o.createVNode)(1,"td","Table__cell text-right text-nowrap",(0,o.createComponentVNode)(2,p,{charging:e.charging,charge:e.charge}),2),(0,o.createVNode)(1,"td","Table__cell text-right text-nowrap",e.load,0),(0,o.createVNode)(1,"td","Table__cell text-center text-nowrap",(0,o.createComponentVNode)(2,f,{status:e.eqp}),2),(0,o.createVNode)(1,"td","Table__cell text-center text-nowrap",(0,o.createComponentVNode)(2,f,{status:e.lgt}),2),(0,o.createVNode)(1,"td","Table__cell text-center text-nowrap",(0,o.createComponentVNode)(2,f,{status:e.env}),2)],4,null,e.id)}))]})]})],4)},c}(o.Component);t.PowerMonitor=d;var p=function(e){var t=e.charging,n=e.charge;return(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Icon,{width:"18px",textAlign:"center",name:0===t&&(n>50?"battery-half":"battery-quarter")||1===t&&"bolt"||2===t&&"battery-full",color:0===t&&(n>50?"yellow":"red")||1===t&&"yellow"||2===t&&"green"}),(0,o.createComponentVNode)(2,l.Box,{inline:!0,width:"36px",textAlign:"right",children:(0,i.toFixed)(n)+"%"})],4)};p.defaultHooks=c.pureComponentHooks;var f=function(e){var t=e.status,n=Boolean(2&t),r=Boolean(1&t),a=(n?"On":"Off")+" ["+(r?"auto":"manual")+"]";return(0,o.createComponentVNode)(2,l.ColorBox,{color:n?"good":"bad",content:r?undefined:"M",title:a})};f.defaultHooks=c.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Radio=void 0;var o=n(1),r=n(29),a=n(20),i=n(3),c=n(2),l=n(37);t.Radio=function(e){var t=(0,i.useBackend)(e),n=t.act,u=t.data,s=u.freqlock,d=u.frequency,p=u.minFrequency,f=u.maxFrequency,m=u.listening,h=u.broadcasting,C=u.command,g=u.useCommand,b=u.subspace,v=u.subspaceSwitchable,N=l.RADIO_CHANNELS.find((function(e){return e.freq===d})),V=(0,r.map)((function(e,t){return{name:t,status:!!e}}))(u.channels);return(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Frequency",children:[s&&(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:"light-gray",children:(0,a.toFixed)(d/10,1)+" kHz"})||(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:10,minValue:p/10,maxValue:f/10,value:d/10,format:function(e){return(0,a.toFixed)(e,1)},onDrag:function(e,t){return n("frequency",{adjust:t-d/10})}}),N&&(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:N.color,ml:2,children:["[",N.name,"]"]})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Audio",children:[(0,o.createComponentVNode)(2,c.Button,{textAlign:"center",width:"37px",icon:m?"volume-up":"volume-mute",selected:m,onClick:function(){return n("listen")}}),(0,o.createComponentVNode)(2,c.Button,{textAlign:"center",width:"37px",icon:h?"microphone":"microphone-slash",selected:h,onClick:function(){return n("broadcast")}}),!!C&&(0,o.createComponentVNode)(2,c.Button,{ml:1,icon:"bullhorn",selected:g,content:"High volume "+(g?"ON":"OFF"),onClick:function(){return n("command")}}),!!v&&(0,o.createComponentVNode)(2,c.Button,{ml:1,icon:"bullhorn",selected:b,content:"Subspace Tx "+(b?"ON":"OFF"),onClick:function(){return n("subspace")}})]}),!!b&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Channels",children:[0===V.length&&(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:"bad",children:"No encryption keys installed."}),V.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,c.Button,{icon:e.status?"check-square-o":"square-o",selected:e.status,content:e.name,onClick:function(){return n("channel",{channel:e.name})}})},e.name)}))]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.RapidPipeDispenser=void 0;var o=n(1),r=n(12),a=n(3),i=n(2),c=["Atmospherics","Disposals","Transit Tubes"],l={Atmospherics:"wrench",Disposals:"trash-alt","Transit Tubes":"bus",Pipes:"grip-lines","Disposal Pipes":"grip-lines",Devices:"microchip","Heat Exchange":"thermometer-half","Station Equipment":"microchip"},u={grey:"#bbbbbb",amethyst:"#a365ff",blue:"#4466ff",brown:"#b26438",cyan:"#48eae8",dark:"#808080",green:"#1edd00",orange:"#ffa030",purple:"#b535ea",red:"#ff3333",violet:"#6e00f6",yellow:"#ffce26"},s=[{name:"Dispense",bitmask:1},{name:"Connect",bitmask:2},{name:"Destroy",bitmask:4},{name:"Paint",bitmask:8}];t.RapidPipeDispenser=function(e){var t=(0,a.useBackend)(e),n=t.act,d=t.data,p=d.category,f=d.categories,m=void 0===f?[]:f,h=d.selected_color,C=d.piping_layer,g=d.mode,b=d.preview_rows.flatMap((function(e){return e.previews}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Category",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:p===t,icon:l[e],color:"transparent",content:e,onClick:function(){return n("category",{category:t})}},e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Modes",children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:g&e.bitmask,content:e.name,onClick:function(){return n("mode",{mode:e.bitmask})}},e.bitmask)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Color",children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,width:"64px",color:u[h],content:h}),Object.keys(u).map((function(e){return(0,o.createComponentVNode)(2,i.ColorBox,{ml:1,color:u[e],onClick:function(){return n("color",{paint_color:e})}},e)}))]})]})}),(0,o.createComponentVNode)(2,i.Flex,{m:-.5,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{m:.5,children:(0,o.createComponentVNode)(2,i.Section,{children:[0===p&&(0,o.createComponentVNode)(2,i.Box,{mb:1,children:[1,2,3].map((function(e){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:e===C,content:"Layer "+e,onClick:function(){return n("piping_layer",{piping_layer:e})}},e)}))}),(0,o.createComponentVNode)(2,i.Box,{width:"108px",children:b.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{title:e.dir_name,selected:e.selected,style:{width:"48px",height:"48px",padding:0},onClick:function(){return n("setdir",{dir:e.dir,flipped:e.flipped})},children:(0,o.createComponentVNode)(2,i.Box,{className:(0,r.classes)(["pipes32x32",e.dir+"-"+e.icon_state]),style:{transform:"scale(1.5) translate(17%, 17%)"}})},e.dir)}))})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{m:.5,grow:1,children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Tabs,{children:m.map((function(e){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{fluid:!0,icon:l[e.cat_name],label:e.cat_name,children:function(){return e.recipes.map((function(t){return(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,ellipsis:!0,checked:t.selected,content:t.pipe_name,title:t.pipe_name,onClick:function(){return n("pipe_type",{pipe_type:t.pipe_index,category:e.cat_name})}},t.pipe_index)}))}},e.cat_name)}))})})})]})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SatelliteControl=void 0;var o=n(1),r=n(3),a=n(2),i=n(163);t.SatelliteControl=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data,l=c.satellites||[];return(0,o.createFragment)([c.meteor_shield&&(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledListItem,{label:"Coverage",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:c.meteor_shield_coverage/c.meteor_shield_coverage_max,content:100*c.meteor_shield_coverage/c.meteor_shield_coverage_max+"%",ranges:{good:[1,Infinity],average:[.3,1],bad:[-Infinity,.3]}})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Satellite Controls",children:(0,o.createComponentVNode)(2,a.Box,{mr:-1,children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.active,content:"#"+e.id+" "+e.mode,onClick:function(){return n("toggle",{id:e.id})}},e.id)}))})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.ScannerGate=void 0;var o=n(1),r=n(3),a=n(2),i=n(69),c=["Positive","Harmless","Minor","Medium","Harmful","Dangerous","BIOHAZARD"],l=[{name:"Human",value:"human"},{name:"Lizardperson",value:"lizard"},{name:"Flyperson",value:"fly"},{name:"Felinid",value:"felinid"},{name:"Plasmaman",value:"plasma"},{name:"Mothperson",value:"moth"},{name:"Jellyperson",value:"jelly"},{name:"Podperson",value:"pod"},{name:"Golem",value:"golem"},{name:"Zombie",value:"zombie"}],u=[{name:"Starving",value:150},{name:"Obese",value:600}];t.ScannerGate=function(e){var t=e.state,n=(0,r.useBackend)(e),a=n.act,c=n.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox,{locked:c.locked,onLockedStatusChange:function(){return a("toggle_lock")}}),!c.locked&&(0,o.createComponentVNode)(2,d,{state:t})],0)};var s={Off:{title:"Scanner Mode: Off",component:function(){return p}},Wanted:{title:"Scanner Mode: Wanted",component:function(){return f}},Guns:{title:"Scanner Mode: Guns",component:function(){return m}},Mindshield:{title:"Scanner Mode: Mindshield",component:function(){return h}},Disease:{title:"Scanner Mode: Disease",component:function(){return C}},Species:{title:"Scanner Mode: Species",component:function(){return g}},Nutrition:{title:"Scanner Mode: Nutrition",component:function(){return b}},Nanites:{title:"Scanner Mode: Nanites",component:function(){return v}}},d=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data.scan_mode,l=s[c]||s.off,u=l.component();return(0,o.createComponentVNode)(2,a.Section,{title:l.title,buttons:"Off"!==c&&(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"back",onClick:function(){return i("set_mode",{new_mode:"Off"})}}),children:(0,o.createComponentVNode)(2,u,{state:t})})},p=function(e){var t=(0,r.useBackend)(e).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:"Select a scanning mode below."}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Wanted",onClick:function(){return t("set_mode",{new_mode:"Wanted"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Guns",onClick:function(){return t("set_mode",{new_mode:"Guns"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Mindshield",onClick:function(){return t("set_mode",{new_mode:"Mindshield"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Disease",onClick:function(){return t("set_mode",{new_mode:"Disease"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Species",onClick:function(){return t("set_mode",{new_mode:"Species"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nutrition",onClick:function(){return t("set_mode",{new_mode:"Nutrition"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nanites",onClick:function(){return t("set_mode",{new_mode:"Nanites"})}})]})],4)},f=function(e){var t=e.state,n=(0,r.useBackend)(e).data.reverse;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",n?"does not have":"has"," ","any warrants for their arrest."]}),(0,o.createComponentVNode)(2,N,{state:t})],4)},m=function(e){var t=e.state,n=(0,r.useBackend)(e).data.reverse;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",n?"does not have":"has"," ","any guns."]}),(0,o.createComponentVNode)(2,N,{state:t})],4)},h=function(e){var t=e.state,n=(0,r.useBackend)(e).data.reverse;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",n?"does not have":"has"," ","a mindshield."]}),(0,o.createComponentVNode)(2,N,{state:t})],4)},C=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,l=n.data,u=l.reverse,s=l.disease_threshold;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",u?"does not have":"has"," ","a disease equal or worse than ",s,"."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:c.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e===s,content:e,onClick:function(){return i("set_disease_threshold",{new_threshold:e})}},e)}))}),(0,o.createComponentVNode)(2,N,{state:t})],4)},g=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data,u=c.reverse,s=c.target_species,d=l.find((function(e){return e.value===s}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned is ",u?"not":""," ","of the ",d.name," species.","zombie"===s&&" All zombie types will be detected, including dormant zombies."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.value===s,content:e.name,onClick:function(){return i("set_target_species",{new_species:e.value})}},e.value)}))}),(0,o.createComponentVNode)(2,N,{state:t})],4)},b=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data,l=c.reverse,s=c.target_nutrition,d=u.find((function(e){return e.value===s}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",l?"does not have":"has"," ","the ",d.name," nutrition level."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.value===s,content:e.name,onClick:function(){return i("set_target_nutrition",{new_nutrition:e.name})}},e.name)}))}),(0,o.createComponentVNode)(2,N,{state:t})],4)},v=function(e){var t=e.state,n=(0,r.useBackend)(e),i=n.act,c=n.data,l=c.reverse,u=c.nanite_cloud;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{mb:2,children:["Trigger if the person scanned ",l?"does not have":"has"," ","nanite cloud ",u,"."]}),(0,o.createComponentVNode)(2,a.Box,{mb:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cloud ID",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:u,width:"65px",minValue:1,maxValue:100,stepPixelSize:2,onChange:function(e,t){return i("set_nanite_cloud",{new_cloud:t})}})})})}),(0,o.createComponentVNode)(2,N,{state:t})],4)},N=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data.reverse;return(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scanning Mode",children:(0,o.createComponentVNode)(2,a.Button,{content:i?"Inverted":"Default",icon:i?"random":"long-arrow-alt-right",onClick:function(){return n("toggle_reverse")},color:i?"bad":"good"})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleManipulator=void 0;var o=n(1),r=n(29),a=n(3),i=n(2);t.ShuttleManipulator=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.shuttles||[],u=c.templates||{},s=c.selected||{},d=c.existing_shuttle||{};return(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Status",children:function(){return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Table,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"JMP",onClick:function(){return n("jump_to",{type:"mobile",id:e.id})}},e.id)}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Fly",disabled:!e.can_fly,onClick:function(){return n("fly",{id:e.id})}},e.id)}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.id}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.status}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[e.mode,!!e.timer&&(0,o.createFragment)([(0,o.createTextVNode)("("),e.timeleft,(0,o.createTextVNode)(")"),(0,o.createComponentVNode)(2,i.Button,{content:"Fast Travel",disabled:!e.can_fast_travel,onClick:function(){return n("fast_travel",{id:e.id})}},e.id)],0)]})]},e.id)}))})})}},"status"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Templates",children:function(){return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Tabs,{children:(0,r.map)((function(e,t){var r=e.templates||[];return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:e.port_id,children:r.map((function(e){var t=e.shuttle_id===s.shuttle_id;return(0,o.createComponentVNode)(2,i.Section,{title:e.name,level:2,buttons:(0,o.createComponentVNode)(2,i.Button,{content:t?"Selected":"Select",selected:t,onClick:function(){return n("select_template",{shuttle_id:e.shuttle_id})}}),children:(!!e.description||!!e.admin_notes)&&(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!e.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:e.description}),!!e.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:e.admin_notes})]})},e.shuttle_id)}))},t)}))(u)})})}},"templates"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:"Modification",children:(0,o.createComponentVNode)(2,i.Section,{children:s?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{level:2,title:s.name,children:(!!s.description||!!s.admin_notes)&&(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!s.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:s.description}),!!s.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:s.admin_notes})]})}),d?(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Existing Shuttle: "+d.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Jump To",onClick:function(){return n("jump_to",{type:"mobile",id:d.id})}}),children:[d.status,!!d.timer&&(0,o.createFragment)([(0,o.createTextVNode)("("),d.timeleft,(0,o.createTextVNode)(")")],0)]})})}):(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Existing Shuttle: None"}),(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Preview",onClick:function(){return n("preview",{shuttle_id:s.shuttle_id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Load",color:"bad",onClick:function(){return n("load",{shuttle_id:s.shuttle_id})}})]})],0):"No shuttle selected"})},"modification")]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SlimeBodySwapper=t.BodyEntry=void 0;var o=n(1),r=n(3),a=n(2),i=function(e){var t=e.body,n=e.swapFunc;return(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:t.htmlcolor,children:t.name}),level:2,buttons:(0,o.createComponentVNode)(2,a.Button,{content:{owner:"You Are Here",stranger:"Occupied",available:"Swap"}[t.occupied],selected:"owner"===t.occupied,color:"stranger"===t.occupied&&"bad",onClick:function(){return n()}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",bold:!0,color:{Dead:"bad",Unconscious:"average",Conscious:"good"}[t.status],children:t.status}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Jelly",children:t.exoticblood}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:t.area})]})})};t.BodyEntry=i;t.SlimeBodySwapper=function(e){var t=(0,r.useBackend)(e),n=t.act,c=t.data.bodies,l=void 0===c?[]:c;return(0,o.createComponentVNode)(2,a.Section,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i,{body:e,swapFunc:function(){return n("swap",{ref:e.ref})}},e.name)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.Signaler=void 0;var o=n(1),r=n(2),a=n(3),i=n(20);t.Signaler=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data,l=c.code,u=c.frequency,s=c.minFrequency,d=c.maxFrequency;return(0,o.createComponentVNode)(2,r.Section,{children:[(0,o.createComponentVNode)(2,r.Grid,{children:[(0,o.createComponentVNode)(2,r.Grid.Column,{size:1.4,color:"label",children:"Frequency:"}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:s/10,maxValue:d/10,value:u/10,format:function(e){return(0,i.toFixed)(e,1)},width:13,onDrag:function(e,t){return n("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return n("reset",{reset:"freq"})}})})]}),(0,o.createComponentVNode)(2,r.Grid,{mt:.6,children:[(0,o.createComponentVNode)(2,r.Grid.Column,{size:1.4,color:"label",children:"Code:"}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:l,width:13,onDrag:function(e,t){return n("code",{code:t})}})}),(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{ml:1.3,icon:"sync",content:"Reset",onClick:function(){return n("reset",{reset:"code"})}})})]}),(0,o.createComponentVNode)(2,r.Grid,{mt:.8,children:(0,o.createComponentVNode)(2,r.Grid.Column,{children:(0,o.createComponentVNode)(2,r.Button,{mb:-.1,fluid:!0,icon:"arrow-up",content:"Send Signal",textAlign:"center",onClick:function(){return n("signal")}})})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SmartVend=void 0;var o=n(1),r=n(29),a=n(3),i=n(2);t.SmartVend=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data;return(0,o.createComponentVNode)(2,i.Section,{title:"Storage",buttons:!!c.isdryer&&(0,o.createComponentVNode)(2,i.Button,{icon:c.drying?"stop":"tint",onClick:function(){return n("Dry")},children:c.drying?"Stop drying":"Dry"}),children:0===c.contents.length&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:["Unfortunately, this ",c.name," is empty."]})||(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Item"}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"center",children:c.verb?c.verb:"Dispense"})]}),(0,r.map)((function(e,t){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"right",children:e.amount}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:[(0,o.createComponentVNode)(2,i.Button,{content:"One",disabled:e.amount<1,onClick:function(){return n("Release",{name:e.name,amount:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Many",disabled:e.amount<=1,onClick:function(){return n("Release",{name:e.name})}})]})]},t)}))(c.contents)]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Smes=void 0;var o=n(1),r=n(3),a=n(2);t.Smes=function(e){var t,n,i=(0,r.useBackend)(e),c=i.act,l=i.data;return t=l.capacityPercent>=100?"good":l.inputting?"average":"bad",n=l.outputting?"good":l.charge>0?"average":"bad",(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Stored Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:.01*l.capacityPercent,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.inputAttempt?"sync-alt":"times",selected:l.inputAttempt,onClick:function(){return c("tryinput")},children:l.inputAttempt?"Auto":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:t,children:l.capacityPercent>=100?"Fully Charged":l.inputting?"Charging":"Not Charging"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.inputLevel/l.inputLevelMax,content:l.inputLevel_text})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust Input",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===l.inputLevel,onClick:function(){return c("input",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===l.inputLevel,onClick:function(){return c("input",{adjust:-1e4})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:Math.round(l.inputLevel/1e3),unit:"kW",width:"65px",minValue:0,maxValue:l.inputLevelMax/1e3,onChange:function(e,t){return c("input",{target:1e3*t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:l.inputLevel===l.inputLevelMax,onClick:function(){return c("input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:l.inputLevel===l.inputLevelMax,onClick:function(){return c("input",{target:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available",children:l.inputAvailable})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:l.outputAttempt?"power-off":"times",selected:l.outputAttempt,onClick:function(){return c("tryoutput")},children:l.outputAttempt?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:n,children:l.outputting?"Sending":l.charge>0?"Not Sending":"No Charge"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:l.outputLevel/l.outputLevelMax,content:l.outputLevel_text})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Adjust Output",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===l.outputLevel,onClick:function(){return c("output",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===l.outputLevel,onClick:function(){return c("output",{adjust:-1e4})}}),(0,o.createComponentVNode)(2,a.NumberInput,{value:Math.round(l.outputLevel/1e3),unit:"kW",width:"65px",minValue:0,maxValue:l.outputLevelMax/1e3,onChange:function(e,t){return c("output",{target:1e3*t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:l.outputLevel===l.outputLevelMax,onClick:function(){return c("output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:l.outputLevel===l.outputLevelMax,onClick:function(){return c("output",{target:"max"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outputting",children:l.outputUsed})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SmokeMachine=void 0;var o=n(1),r=n(3),a=n(2);t.SmokeMachine=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.TankContents,l=(i.isTankLoaded,i.TankCurrentVolume),u=i.TankMaxVolume,s=i.active,d=i.setting,p=(i.screen,i.maxSetting),f=void 0===p?[]:p;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Dispersal Tank",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:s?"power-off":"times",selected:s,content:s?"On":"Off",onClick:function(){return n("power")}}),children:[(0,o.createComponentVNode)(2,a.ProgressBar,{value:l/u,ranges:{bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{initial:0,value:l||0})," / "+u]}),(0,o.createComponentVNode)(2,a.Box,{mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Range",children:[1,2,3,4,5].map((function(e){return(0,o.createComponentVNode)(2,a.Button,{selected:d===e,icon:"plus",content:3*e,disabled:f0?"good":"bad",children:f})]})}),(0,o.createComponentVNode)(2,a.Grid.Column,{size:1.5,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power output",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.66,Infinity],average:[.33,.66],bad:[-Infinity,.33]},minValue:0,maxValue:1,value:l,content:c+" W"})})})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracking",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:0===p,onClick:function(){return n("tracking",{mode:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"clock-o",content:"Timed",selected:1===p,onClick:function(){return n("tracking",{mode:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:2===p,disabled:!m,onClick:function(){return n("tracking",{mode:2})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Azimuth",children:[(0===p||1===p)&&(0,o.createComponentVNode)(2,a.NumberInput,{width:"52px",unit:"\xb0",step:1,stepPixelSize:2,minValue:-360,maxValue:720,value:u,onDrag:function(e,t){return n("azimuth",{value:t})}}),1===p&&(0,o.createComponentVNode)(2,a.NumberInput,{width:"80px",unit:"\xb0/m",step:.01,stepPixelSize:1,minValue:-d-.01,maxValue:d+.01,value:s,format:function(e){return(Math.sign(e)>0?"+":"-")+Math.abs(e)},onDrag:function(e,t){return n("azimuth_rate",{value:t})}}),2===p&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"label",mt:"3px",children:[u+" \xb0"," (auto)"]})]})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SpaceHeater=void 0;var o=n(1),r=n(3),a=n(2);t.SpaceHeater=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Power",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject Cell",disabled:!i.hasPowercell||!i.open,onClick:function(){return n("eject")}}),(0,o.createComponentVNode)(2,a.Button,{icon:i.on?"power-off":"times",content:i.on?"On":"Off",selected:i.on,disabled:!i.hasPowercell,onClick:function(){return n("power")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell",color:!i.hasPowercell&&"bad",children:i.hasPowercell&&(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.powerLevel/100,content:i.powerLevel+"%",ranges:{good:[.6,Infinity],average:[.3,.6],bad:[-Infinity,.3]}})||"None"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Thermostat",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Temperature",children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"18px",color:Math.abs(i.targetTemp-i.currentTemp)>50?"bad":Math.abs(i.targetTemp-i.currentTemp)>20?"average":"good",children:[i.currentTemp,"\xb0C"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Temperature",children:i.open&&(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.targetTemp),width:"65px",unit:"\xb0C",minValue:i.minTemp,maxValue:i.maxTemp,onChange:function(e,t){return n("target",{target:t})}})||i.targetTemp+"\xb0C"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",children:i.open?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"thermometer-half",content:"Auto",selected:"auto"===i.mode,onClick:function(){return n("mode",{mode:"auto"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fire-alt",content:"Heat",selected:"heat"===i.mode,onClick:function(){return n("mode",{mode:"heat"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fan",content:"Cool",selected:"cool"===i.mode,onClick:function(){return n("mode",{mode:"cool"})}})],4):"Auto"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SpawnersMenu=void 0;var o=n(1),r=n(3),a=n(2);t.SpawnersMenu=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data.spawners||[];return(0,o.createComponentVNode)(2,a.Section,{children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name+" ("+e.amount_left+" left)",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Jump",onClick:function(){return n("jump",{name:e.name})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Spawn",onClick:function(){return n("spawn",{name:e.name})}})],4),children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,mb:1,fontSize:"20px",children:e.short_desc}),(0,o.createComponentVNode)(2,a.Box,{children:e.flavor_text}),!!e.important_info&&(0,o.createComponentVNode)(2,a.Box,{mt:1,bold:!0,color:"bad",fontSize:"26px",children:e.important_info})]},e.name)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsole=void 0;var o=n(1),r=n(3),a=n(2);t.StationAlertConsole=function(e){var t=(0,r.useBackend)(e).data.alarms||[],n=t.Fire||[],i=t.Atmosphere||[],c=t.Power||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Fire Alarms",children:(0,o.createVNode)(1,"ul",null,[0===n.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),n.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Atmospherics Alarms",children:(0,o.createVNode)(1,"ul",null,[0===i.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),i.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Alarms",children:(0,o.createVNode)(1,"ul",null,[0===c.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),c.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.SuitStorageUnit=void 0;var o=n(1),r=n(3),a=n(2);t.SuitStorageUnit=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.locked,l=i.open,u=i.safeties,s=i.uv_active,d=i.occupied,p=i.suit,f=i.helmet,m=i.mask,h=i.storage;return(0,o.createFragment)([!(!d||!u)&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Biological entity detected in suit chamber. Please remove before continuing with operation."}),s&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Contents are currently being decontaminated. Please wait."})||(0,o.createComponentVNode)(2,a.Section,{title:"Storage",minHeight:"260px",buttons:(0,o.createFragment)([!l&&(0,o.createComponentVNode)(2,a.Button,{icon:c?"unlock":"lock",content:c?"Unlock":"Lock",onClick:function(){return n("lock")}}),!c&&(0,o.createComponentVNode)(2,a.Button,{icon:l?"sign-out-alt":"sign-in-alt",content:l?"Close":"Open",onClick:function(){return n("door")}})],0),children:c&&(0,o.createComponentVNode)(2,a.Box,{mt:6,bold:!0,textAlign:"center",fontSize:"40px",children:[(0,o.createComponentVNode)(2,a.Box,{children:"Unit Locked"}),(0,o.createComponentVNode)(2,a.Icon,{name:"lock"})]})||l&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Helmet",children:(0,o.createComponentVNode)(2,a.Button,{icon:f?"square":"square-o",content:f||"Empty",disabled:!f,onClick:function(){return n("dispense",{item:"helmet"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Suit",children:(0,o.createComponentVNode)(2,a.Button,{icon:p?"square":"square-o",content:p||"Empty",disabled:!p,onClick:function(){return n("dispense",{item:"suit"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mask",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"square":"square-o",content:m||"Empty",disabled:!m,onClick:function(){return n("dispense",{item:"mask"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Storage",children:(0,o.createComponentVNode)(2,a.Button,{icon:h?"square":"square-o",content:h||"Empty",disabled:!h,onClick:function(){return n("dispense",{item:"storage"})}})})]})||(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"recycle",content:"Decontaminate",disabled:d&&u,textAlign:"center",onClick:function(){return n("uv")}})})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.Tank=void 0;var o=n(1),r=n(3),a=n(2);t.Tank=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:i.tankPressure/1013,content:i.tankPressure+" kPa",ranges:{good:[.35,Infinity],average:[.15,.35],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure Regulator",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:i.ReleasePressure===i.minReleasePressure,onClick:function(){return n("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(i.releasePressure),width:"65px",unit:"kPa",minValue:i.minReleasePressure,maxValue:i.maxReleasePressure,onChange:function(e,t){return n("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:i.ReleasePressure===i.maxReleasePressure,onClick:function(){return n("pressure",{pressure:"max"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"",disabled:i.ReleasePressure===i.defaultReleasePressure,onClick:function(){return n("pressure",{pressure:"reset"})}})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TankDispenser=void 0;var o=n(1),r=n(3),a=n(2);t.TankDispenser=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Plasma",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.plasma?"square":"square-o",content:"Dispense",disabled:!i.plasma,onClick:function(){return n("plasma")}}),children:i.plasma}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:i.oxygen?"square":"square-o",content:"Dispense",disabled:!i.oxygen,onClick:function(){return n("oxygen")}}),children:i.oxygen})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Teleporter=void 0;var o=n(1),r=n(3),a=n(2);t.Teleporter=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=i.calibrated,l=i.calibrating,u=i.power_station,s=i.regime_set,d=i.teleporter_hub,p=i.target;return(0,o.createComponentVNode)(2,a.Section,{children:!u&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",textAlign:"center",children:"No power station linked."})||!d&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",textAlign:"center",children:"No hub linked."})||(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Regime",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"tools",content:"Change Regime",onClick:function(){return n("regimeset")}}),children:s}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Target",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"tools",content:"Set Target",onClick:function(){return n("settarget")}}),children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Calibration",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"tools",content:"Calibrate Hub",onClick:function(){return n("calibrate")}}),children:l&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"In Progress"})||c&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Optimal"})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Sub-Optimal"})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ThermoMachine=void 0;var o=n(1),r=n(20),a=n(3),i=n(2);t.ThermoMachine=function(e){var t=(0,a.useBackend)(e),n=t.act,c=t.data;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:c.temperature,format:function(e){return(0,r.toFixed)(e,2)}})," K"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:c.pressure,format:function(e){return(0,r.toFixed)(e,2)}})," kPa"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Controls",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:c.on?"power-off":"times",content:c.on?"On":"Off",selected:c.on,onClick:function(){return n("power")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target Temperature",children:(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,value:Math.round(c.target),unit:"K",width:"62px",minValue:Math.round(c.min),maxValue:Math.round(c.max),step:5,stepPixelSize:3,onDrag:function(e,t){return n("target",{target:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Presets",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:c.target===c.min,title:"Minimum temperature",onClick:function(){return n("target",{target:c.min})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync",disabled:c.target===c.initial,title:"Room Temperature",onClick:function(){return n("target",{target:c.initial})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:c.target===c.max,title:"Maximum Temperature",onClick:function(){return n("target",{target:c.max})}})]})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.TurbineComputer=void 0;var o=n(1),r=n(3),a=n(2);t.TurbineComputer=function(e){var t=(0,r.useBackend)(e),n=t.act,i=t.data,c=Boolean(i.compressor&&!i.compressor_broke&&i.turbine&&!i.turbine_broke);return(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:i.online?"power-off":"times",content:i.online?"Online":"Offline",selected:i.online,disabled:!c,onClick:function(){return n("toggle_power")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reconnect",onClick:function(){return n("reconnect")}})],4),children:!c&&(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Compressor Status",color:!i.compressor||i.compressor_broke?"bad":"good",children:i.compressor_broke?i.compressor?"Offline":"Missing":"Online"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Status",color:!i.turbine||i.turbine_broke?"bad":"good",children:i.turbine_broke?i.turbine?"Offline":"Missing":"Online"})]})||(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Turbine Speed",children:[i.rpm," RPM"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Internal Temp",children:[i.temp," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Generated Power",children:i.power})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Uplink=void 0;var o=n(1),r=n(28),a=n(19),i=n(2);var c=function(e){var t,n;function r(){var t;return(t=e.call(this)||this).state={hoveredItem:{},currentSearch:""},t}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var c=r.prototype;return c.setHoveredItem=function(e){this.setState({hoveredItem:e})},c.setSearchText=function(e){this.setState({currentSearch:e})},c.render=function(){var e=this,t=this.props.state,n=t.config,r=t.data,c=n.ref,u=r.compact_mode,s=r.lockable,d=r.telecrystals,p=r.categories,f=void 0===p?[]:p,m=this.state,h=m.hoveredItem,C=m.currentSearch;return(0,o.createComponentVNode)(2,i.Section,{title:(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d>0?"good":"bad",children:[d," TC"]}),buttons:(0,o.createFragment)([(0,o.createTextVNode)("Search"),(0,o.createComponentVNode)(2,i.Input,{value:C,onInput:function(t,n){return e.setSearchText(n)},ml:1,mr:1}),(0,o.createComponentVNode)(2,i.Button,{icon:u?"list":"info",content:u?"Compact":"Detailed",onClick:function(){return(0,a.act)(c,"compact_toggle")}}),!!s&&(0,o.createComponentVNode)(2,i.Button,{icon:"lock",content:"Lock",onClick:function(){return(0,a.act)(c,"lock")}})],0),children:C.length>0?(0,o.createVNode)(1,"table","Table",(0,o.createComponentVNode)(2,l,{compact:!0,items:f.flatMap((function(e){return e.items||[]})).filter((function(e){var t=C.toLowerCase();return String(e.name+e.desc).toLowerCase().includes(t)})),hoveredItem:h,onBuyMouseOver:function(t){return e.setHoveredItem(t)},onBuyMouseOut:function(t){return e.setHoveredItem({})},onBuy:function(e){return(0,a.act)(c,"buy",{item:e.name})}}),2):(0,o.createComponentVNode)(2,i.Tabs,{vertical:!0,children:f.map((function(t){var n=t.name,r=t.items;if(null!==r)return(0,o.createComponentVNode)(2,i.Tabs.Tab,{label:n+" ("+r.length+")",children:function(){return(0,o.createComponentVNode)(2,l,{compact:u,items:r,hoveredItem:h,telecrystals:d,onBuyMouseOver:function(t){return e.setHoveredItem(t)},onBuyMouseOut:function(t){return e.setHoveredItem({})},onBuy:function(e){return(0,a.act)(c,"buy",{item:e.name})}})}},n)}))})})},r}(o.Component);t.Uplink=c;var l=function(e){var t=e.items,n=e.hoveredItem,a=e.telecrystals,c=e.compact,l=e.onBuy,u=e.onBuyMouseOver,s=e.onBuyMouseOut,d=n&&n.cost||0;return c?(0,o.createComponentVNode)(2,i.Table,{children:t.map((function(e){var t=n&&n.name!==e.name,c=a-d1?r-1:0),i=1;i1?t-1:0),o=1;o TurbineComputer,
scrollable: false,
},
+ uplink: {
+ component: () => Uplink,
+ scrollable: true,
+ theme: 'syndicate',
+ },
vault_controller: {
component: () => VaultController,
scrollable: false,
diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css
index f98e093ba2..ab507775a2 100644
--- a/tgui/assets/tgui.css
+++ b/tgui/assets/tgui.css
@@ -1 +1 @@
-@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.normal:not(.active){background-image:repeating-linear-gradient(-45deg,#5f380e,#5f380e 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.selected:not(.active){background-image:repeating-linear-gradient(-45deg,#cfba47,#cfba47 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle:not(.active){background-image:repeating-linear-gradient(-45deg,#cfba47,#cfba47 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.caution:not(.active){background-image:repeating-linear-gradient(-45deg,#be6209,#be6209 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.danger:not(.active){background-image:repeating-linear-gradient(-45deg,#9a9d00,#9a9d00 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-color:transparent transparent #5f380e;border-style:solid;border-width:0 0 45px 45px;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.clockwork header.titlebar .statusicon.no-icons{font-size:20px}body.clockwork header.titlebar .statusicon.no-icons:after{content:"O"}body.clockwork header.titlebar .minimize.no-icons{top:-2px;font-size:20px}body.clockwork header.titlebar .minimize.no-icons:after{content:"—"}body.clockwork header.titlebar .close.no-icons{font-size:20px}body.clockwork header.titlebar .close.no-icons:after{content:"X"}body.clockwork.airlock_electronics table{width:100%;border-spacing:2px}body.clockwork.airlock_electronics th{text-align:left}body.clockwork.airlock_electronics td{vertical-align:top}body.clockwork.airlock_electronics td .button{margin-top:4px}body.nanotrasen{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDQyNSAyMDAiIG9wYWNpdHk9Ii4zMyI+PHBhdGggZD0iTTE3OC4wMDQuMDM5SDEwNi44YTYuNzYxIDYuMDI2IDAgMCAwLTYuNzYxIDYuMDI1djE4Ny44NzJhNi43NjEgNi4wMjYgMCAwIDAgNi43NjEgNi4wMjVoNTMuMTA3YTYuNzYxIDYuMDI2IDAgMCAwIDYuNzYyLTYuMDI1VjkyLjM5Mmw3Mi4yMTYgMTA0LjdhNi43NjEgNi4wMjYgMCAwIDAgNS43NiAyLjg3SDMxOC4yYTYuNzYxIDYuMDI2IDAgMCAwIDYuNzYxLTYuMDI2VjYuMDY0QTYuNzYxIDYuMDI2IDAgMCAwIDMxOC4yLjA0aC01NC43MTdhNi43NjEgNi4wMjYgMCAwIDAtNi43NiA2LjAyNXYxMDIuNjJMMTgzLjc2MyAyLjkwOWE2Ljc2MSA2LjAyNiAwIDAgMC01Ljc2LTIuODd6TTQuODQ1IDIyLjEwOUExMy40MTIgMTIuNTAyIDAgMCAxIDEzLjQ3OC4wMzloNjYuMTE4QTUuMzY1IDUgMCAwIDEgODQuOTYgNS4wNHY3OS44OHpNNDIwLjE1NSAxNzcuODkxYTEzLjQxMiAxMi41MDIgMCAwIDEtOC42MzMgMjIuMDdoLTY2LjExOGE1LjM2NSA1IDAgMCAxLTUuMzY1LTUuMDAxdi03OS44OHoiLz48L3N2Zz4=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.normal:not(.active){background-image:repeating-linear-gradient(-45deg,#40628a,#40628a 1px,#999 0,#999 2px)}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.selected:not(.active){background-image:repeating-linear-gradient(-45deg,#2f943c,#2f943c 1px,#999 0,#999 2px)}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle:not(.active){background-image:repeating-linear-gradient(-45deg,#2f943c,#2f943c 1px,#999 0,#999 2px)}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.caution:not(.active){background-image:repeating-linear-gradient(-45deg,#9a9d00,#9a9d00 1px,#999 0,#999 2px)}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.danger:not(.active){background-image:repeating-linear-gradient(-45deg,#9d0808,#9d0808 1px,#999 0,#999 2px)}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-color:transparent transparent #363636;border-style:solid;border-width:0 0 45px 45px;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen header.titlebar .statusicon.no-icons{font-size:20px}body.nanotrasen header.titlebar .statusicon.no-icons:after{content:"O"}body.nanotrasen header.titlebar .minimize.no-icons{top:-2px;font-size:20px}body.nanotrasen header.titlebar .minimize.no-icons:after{content:"—"}body.nanotrasen header.titlebar .close.no-icons{font-size:20px}body.nanotrasen header.titlebar .close.no-icons:after{content:"X"}body.nanotrasen.airlock_electronics table{width:100%;border-spacing:2px}body.nanotrasen.airlock_electronics th{text-align:left}body.nanotrasen.airlock_electronics td{vertical-align:top}body.nanotrasen.airlock_electronics td .button{margin-top:4px}body.syndicate{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDIwMCAyODkuNzQyIiBvcGFjaXR5PSIuMzMiPjxwYXRoIGQ9Ik05My41MzggMGMtMTguMTEzIDAtMzQuMjIgMy4xMTItNDguMzI0IDkuMzM0LTEzLjk2NSA2LjIyMi0yNC42MTIgMTUuMDcyLTMxLjk0IDI2LjU0N0M2LjA4NCA0Ny4yMiAyLjk3MiA2MC42MzEgMi45NzIgNzYuMTE2YzAgMTAuNjQ3IDIuNzI1IDIwLjQ2NSA4LjE3NSAyOS40NTMgNS42MTYgOC45ODcgMTQuMDM5IDE3LjM1MiAyNS4yNyAyNS4wOTQgMTEuMjMgNy42MDYgMjYuNTA3IDE1LjQxOSA0NS44MyAyMy40MzggMTkuOTg0IDguMjk2IDM0Ljg0OSAxNS41NTUgNDQuNTkzIDIxLjc3NiA5Ljc0NCA2LjIyMyAxNi43NjEgMTIuODU5IDIxLjA1NSAxOS45MSA0LjI5NSA3LjA1MiA2LjQ0MiAxNS43NjQgNi40NDIgMjYuMTM0IDAgMTYuMTc4LTUuMjAyIDI4LjQ4My0xNS42MDYgMzYuOTE3LTEwLjI0IDguNDM1LTI1LjAyMiAxMi42NTMtNDQuMzQ1IDEyLjY1My0xNC4wMzkgMC0yNS41MTYtMS42Ni0zNC40MzQtNC45NzgtOC45MTgtMy40NTctMTYuMTg2LTguNzExLTIxLjgtMTUuNzYzLTUuNjE2LTcuMDUyLTEwLjA3Ni0xNi42NjEtMTMuMzc5LTI4LjgyOUgwdjU2LjgyN2MzMy44NTcgNy4zMjggNjMuNzQ5IDEwLjk5NCA4OS42NzggMTAuOTk0IDE2LjAyIDAgMzAuNzItMS4zODMgNDQuMDk4LTQuMTQ4IDEzLjU0Mi0yLjkwNCAyNS4xMDQtNy40NjcgMzQuNjgzLTEzLjY5IDkuNzQ0LTYuMzU5IDE3LjM0LTE0LjUxOSAyMi43OS0yNC40NzQgNS40NS0xMC4wOTMgOC4xNzUtMjIuNCA4LjE3NS0zNi45MTcgMC0xMi45OTctMy4zMDItMjQuMzM1LTkuOTA4LTM0LjAxNC02LjQ0LTkuODE4LTE1LjUyNS0xOC41MjctMjcuMjUxLTI2LjEzMi0xMS41NjEtNy42MDQtMjcuOTExLTE1LjgzMS00OS4wNTEtMjQuNjgtMTcuNTA2LTcuMTktMzAuNzItMTMuNjktMzkuNjM4LTE5LjQ5N1M1NC45NjkgOTMuNzU2IDQ5LjQ3OSA4Ny4zMTZjLTUuNDI2LTYuMzY2LTkuNjU4LTE1LjA3LTkuNjU4LTI0Ljg4NyAwLTkuMjY0IDIuMDc1LTE3LjIxNCA2LjIyMy0yMy44NUM1Ny4xNDIgMjQuMTggODcuMzMxIDM2Ljc4MiA5MS4xMiA2Mi45MjVjNC44NCA2Ljc3NSA4Ljg1IDE2LjI0NyAxMi4wMyAyOC40MTVoMjAuNTMydi01NmMtNC40NzktNS45MjQtOS45NTUtMTAuNjMxLTE1LjkwOS0xNC4zNzMgMS42NC40NzkgMy4xOSAxLjAyMyA0LjYzOSAxLjY0IDYuNDk4IDIuNjI2IDEyLjE2OCA3LjMyNyAxNy4wMDcgMTQuMTAzIDQuODQgNi43NzUgOC44NSAxNi4yNDYgMTIuMDMgMjguNDE0IDAgMCA4LjQ4LS4xMjkgOC40OS0uMDAyLjQxNyA2LjQxNS0xLjc1NCA5LjQ1My00LjEyNCAxMi41NjEtMi40MTcgMy4xNy01LjE0NSA2Ljc5LTQuMDAzIDEzLjAwMyAxLjUwOCA4LjIwMyAxMC4xODQgMTAuNTk3IDE0LjYyMiA5LjMxMi0zLjMxOC0uNS01LjMxOC0xLjc1LTUuMzE4LTEuNzVzMS44NzYuOTk5IDUuNjUtMS4zNmMtMy4yNzYuOTU2LTEwLjcwNC0uNzk3LTExLjgtNi43NjMtLjk1OC01LjIwOC45NDYtNy4yOTUgMy40LTEwLjUxNCAyLjQ1NS0zLjIyIDUuMjg1LTYuOTU5IDQuNjg1LTE0LjQ4OWwuMDAzLjAwMmg4LjkyN3YtNTZjLTE1LjA3Mi0zLjg3MS0yNy42NTMtNi4zNi0zNy43NDctNy40NjVDMTE0LjI3OS41NTIgMTA0LjA0NiAwIDkzLjUzNyAwem03MC4zMjEgMTcuMzA5bC4yMzggNDAuMzA1YzEuMzE4IDEuMjI2IDIuNDQgMi4yNzggMy4zNDEgMy4xMDYgNC44NCA2Ljc3NSA4Ljg1IDE2LjI0NiAxMi4wMyAyOC40MTRIMjAwdi01NmMtNi42NzctNC41OTQtMTkuODM2LTEwLjQ3My0zNi4xNC0xNS44MjV6bS0yOC4xMiA1LjYwNWw4LjU2NSAxNy43MTdjLTExLjk3LTYuNDY3LTEzLjg0Ny05LjcxNy04LjU2NS0xNy43MTd6bTIyLjc5NyAwYzIuNzcxIDggMS43ODcgMTEuMjUtNC40OTQgMTcuNzE3bDQuNDk0LTE3LjcxN3ptMTUuMjIyIDI0LjAwOWw4LjU2NSAxNy43MTZjLTExLjk3LTYuNDY2LTEzLjg0Ny05LjcxNy04LjU2NS0xNy43MTZ6bTIyLjc5NyAwYzIuNzcxIDggMS43ODcgMTEuMjUtNC40OTQgMTcuNzE2bDQuNDk0LTE3LjcxNnpNOTcuNDQgNDkuMTNsOC41NjUgMTcuNzE2Yy0xMS45Ny02LjQ2Ny0xMy44NDctOS43MTctOC41NjUtMTcuNzE2em0yMi43OTUgMGMyLjc3MiA3Ljk5OSAxLjc4OCAxMS4yNS00LjQ5MyAxNy43MTZsNC40OTMtMTcuNzE2eiIvPjwvc3ZnPg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.normal:not(.active){background-image:repeating-linear-gradient(-45deg,#397439,#397439 1px,#363636 0,#363636 2px)}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.selected:not(.active){background-image:repeating-linear-gradient(-45deg,#9d0808,#9d0808 1px,#363636 0,#363636 2px)}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle:not(.active){background-image:repeating-linear-gradient(-45deg,#9d0808,#9d0808 1px,#363636 0,#363636 2px)}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.caution:not(.active){background-image:repeating-linear-gradient(-45deg,#be6209,#be6209 1px,#363636 0,#363636 2px)}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.danger:not(.active){background-image:repeating-linear-gradient(-45deg,#9a9d00,#9a9d00 1px,#363636 0,#363636 2px)}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-color:transparent transparent #363636;border-style:solid;border-width:0 0 45px 45px;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate header.titlebar .statusicon.no-icons{font-size:20px}body.syndicate header.titlebar .statusicon.no-icons:after{content:"O"}body.syndicate header.titlebar .minimize.no-icons{top:-2px;font-size:20px}body.syndicate header.titlebar .minimize.no-icons:after{content:"—"}body.syndicate header.titlebar .close.no-icons{font-size:20px}body.syndicate header.titlebar .close.no-icons:after{content:"X"}body.syndicate.airlock_electronics table{width:100%;border-spacing:2px}body.syndicate.airlock_electronics th{text-align:left}body.syndicate.airlock_electronics td{vertical-align:top}body.syndicate.airlock_electronics td .button{margin-top:4px}
\ No newline at end of file
+@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.normal:not(.active){background-image:repeating-linear-gradient(-45deg,#5f380e,#5f380e 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.selected:not(.active){background-image:repeating-linear-gradient(-45deg,#cfba47,#cfba47 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle:not(.active){background-image:repeating-linear-gradient(-45deg,#cfba47,#cfba47 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.caution:not(.active){background-image:repeating-linear-gradient(-45deg,#be6209,#be6209 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.danger:not(.active){background-image:repeating-linear-gradient(-45deg,#9a9d00,#9a9d00 1px,#2d1400 0,#2d1400 2px)}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.clockwork header.titlebar .statusicon.no-icons{font-size:20px}body.clockwork header.titlebar .statusicon.no-icons:after{content:"O"}body.clockwork header.titlebar .minimize.no-icons{top:-2px;font-size:20px}body.clockwork header.titlebar .minimize.no-icons:after{content:"—"}body.clockwork header.titlebar .close.no-icons{font-size:20px}body.clockwork header.titlebar .close.no-icons:after{content:"X"}body.clockwork.airlock_electronics table{width:100%;border-spacing:2px}body.clockwork.airlock_electronics th{text-align:left}body.clockwork.airlock_electronics td{vertical-align:top}body.clockwork.airlock_electronics td .button{margin-top:4px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.normal:not(.active){background-image:repeating-linear-gradient(-45deg,#40628a,#40628a 1px,#999 0,#999 2px)}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.selected:not(.active){background-image:repeating-linear-gradient(-45deg,#2f943c,#2f943c 1px,#999 0,#999 2px)}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle:not(.active){background-image:repeating-linear-gradient(-45deg,#2f943c,#2f943c 1px,#999 0,#999 2px)}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.caution:not(.active){background-image:repeating-linear-gradient(-45deg,#9a9d00,#9a9d00 1px,#999 0,#999 2px)}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.danger:not(.active){background-image:repeating-linear-gradient(-45deg,#9d0808,#9d0808 1px,#999 0,#999 2px)}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen header.titlebar .statusicon.no-icons{font-size:20px}body.nanotrasen header.titlebar .statusicon.no-icons:after{content:"O"}body.nanotrasen header.titlebar .minimize.no-icons{top:-2px;font-size:20px}body.nanotrasen header.titlebar .minimize.no-icons:after{content:"—"}body.nanotrasen header.titlebar .close.no-icons{font-size:20px}body.nanotrasen header.titlebar .close.no-icons:after{content:"X"}body.nanotrasen.airlock_electronics table{width:100%;border-spacing:2px}body.nanotrasen.airlock_electronics th{text-align:left}body.nanotrasen.airlock_electronics td{vertical-align:top}body.nanotrasen.airlock_electronics td .button{margin-top:4px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.normal:not(.active){background-image:repeating-linear-gradient(-45deg,#397439,#397439 1px,#363636 0,#363636 2px)}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.selected:not(.active){background-image:repeating-linear-gradient(-45deg,#9d0808,#9d0808 1px,#363636 0,#363636 2px)}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle:not(.active){background-image:repeating-linear-gradient(-45deg,#9d0808,#9d0808 1px,#363636 0,#363636 2px)}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.caution:not(.active){background-image:repeating-linear-gradient(-45deg,#be6209,#be6209 1px,#363636 0,#363636 2px)}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.danger:not(.active){background-image:repeating-linear-gradient(-45deg,#9a9d00,#9a9d00 1px,#363636 0,#363636 2px)}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate header.titlebar .statusicon.no-icons{font-size:20px}body.syndicate header.titlebar .statusicon.no-icons:after{content:"O"}body.syndicate header.titlebar .minimize.no-icons{top:-2px;font-size:20px}body.syndicate header.titlebar .minimize.no-icons:after{content:"—"}body.syndicate header.titlebar .close.no-icons{font-size:20px}body.syndicate header.titlebar .close.no-icons:after{content:"X"}body.syndicate.airlock_electronics table{width:100%;border-spacing:2px}body.syndicate.airlock_electronics th{text-align:left}body.syndicate.airlock_electronics td{vertical-align:top}body.syndicate.airlock_electronics td .button{margin-top:4px}
\ No newline at end of file
diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js
index 18df15830a..a3f2ea62ee 100644
--- a/tgui/assets/tgui.js
+++ b/tgui/assets/tgui.js
@@ -1 +1,21 @@
-require=function a(o,s,p){function u(e,t){if(!s[e]){if(!o[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(c)return c(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=s[e]={exports:{}};o[e][0].call(i.exports,function(t){return u(o[e][1][t]||t)},i,i.exports,a,o,s,p)}return s[e].exports}for(var c="function"==typeof require&&require,t=0;to;)i.call(t,a=r[o++])&&e.push(a);return e}},{78:78,81:81,82:82}],34:[function(t,e,n){var m=t(41),g=t(24),b=t(43),v=t(92),y=t(26),_="prototype",x=function(t,e,n){var a,r,i,o,s=t&x.F,p=t&x.G,u=t&x.S,c=t&x.P,l=t&x.B,d=p?m:u?m[e]||(m[e]={}):(m[e]||{})[_],f=p?g:g[e]||(g[e]={}),h=f[_]||(f[_]={});for(a in p&&(n=e),n)i=((r=!s&&d&&d[a]!==undefined)?d:n)[a],o=l&&r?y(i,m):c&&"function"==typeof i?y(Function.call,i):i,d&&v(d,a,i,t&x.U),f[a]!=i&&b(f,a,o),c&&h[a]!=i&&(h[a]=i)};m.core=g,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128,e.exports=x},{24:24,26:26,41:41,43:43,92:92}],35:[function(t,e,n){var r=t(127)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(a){}}return!0}},{127:127}],36:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],37:[function(t,e,n){"use strict";var s=t(43),p=t(92),u=t(36),c=t(29),l=t(127);e.exports=function(e,t,n){var a=l(e),r=n(c,a,""[e]),i=r[0],o=r[1];u(function(){var t={};return t[a]=function(){return 7},7!=""[e](t)})&&(p(String.prototype,e,i),s(RegExp.prototype,a,2==t?function(t,e){return o.call(t,this,e)}:function(t){return o.call(t,this)}))}},{127:127,29:29,36:36,43:43,92:92}],38:[function(t,e,n){"use strict";var a=t(8);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{8:8}],39:[function(t,e,n){"use strict";var f=t(50),h=t(52),m=t(116),g=t(26),b=t(127)("isConcatSpreadable");e.exports=function v(t,e,n,a,r,i,o,s){for(var p,u,c=r,l=0,d=!!o&&g(o,s,3);ldocument.F=Object<\/script>"),t.close(),c=t.F;n--;)delete c[u][s[n]];return c()};t.exports=Object.create||function(t,e){var n;return null!==t?(r[u]=i(t),n=new r,r[u]=null,n[p]=t):n=c(),e===undefined?n:o(n,e)}},{100:100,31:31,32:32,44:44,73:73,8:8}],72:[function(t,e,n){var r=t(8),i=t(45),o=t(118),s=Object.defineProperty;n.f=t(30)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return s(t,e,n)}catch(a){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},{118:118,30:30,45:45,8:8}],73:[function(t,e,n){var o=t(72),s=t(8),p=t(81);e.exports=t(30)?Object.defineProperties:function(t,e){s(t);for(var n,a=p(e),r=a.length,i=0;ir;)o(a,n=e[r++])&&(~p(i,n)||i.push(n));return i}},{100:100,115:115,12:12,42:42}],81:[function(t,e,n){var a=t(80),r=t(32);e.exports=Object.keys||function(t){return a(t,r)}},{32:32,80:80}],82:[function(t,e,n){n.f={}.propertyIsEnumerable},{}],83:[function(t,e,n){var r=t(34),i=t(24),o=t(36);e.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*o(function(){n(1)}),"Object",a)}},{24:24,34:34,36:36}],84:[function(t,e,n){var p=t(81),u=t(115),c=t(82).f;e.exports=function(s){return function(t){for(var e,n=u(t),a=p(n),r=a.length,i=0,o=[];i>>0||(o.test(n)?16:10))}:a},{109:109,110:110,41:41}],88:[function(t,e,n){e.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},{}],89:[function(t,e,n){var a=t(8),r=t(52),i=t(69);e.exports=function(t,e){if(a(t),r(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},{52:52,69:69,8:8}],90:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],91:[function(t,e,n){var r=t(92);e.exports=function(t,e,n){for(var a in e)r(t,a,e[a],n);return t}},{92:92}],92:[function(t,e,n){var i=t(41),o=t(43),s=t(42),p=t(122)("src"),a="toString",r=Function[a],u=(""+r).split(a);t(24).inspectSource=function(t){return r.call(t)},(e.exports=function(t,e,n,a){var r="function"==typeof n;r&&(s(n,"name")||o(n,"name",e)),t[e]!==n&&(r&&(s(n,p)||o(n,p,t[e]?""+t[e]:u.join(String(e)))),t===i?t[e]=n:a?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,a,function(){return"function"==typeof this&&this[p]||r.call(this)})},{122:122,24:24,41:41,42:42,43:43}],93:[function(t,e,n){e.exports=function(e,n){var a=n===Object(n)?function(t){return n[t]}:n;return function(t){return String(t).replace(e,a)}}},{}],94:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},{}],95:[function(t,e,n){"use strict";var a=t(34),o=t(4),s=t(26),p=t(40);e.exports=function(t){a(a.S,t,{from:function(t){var e,n,a,r,i=arguments[1];return o(this),(e=i!==undefined)&&o(i),t==undefined?new this:(n=[],e?(a=0,r=s(i,arguments[2],2),p(t,!1,function(t){n.push(r(t,a++))})):p(t,!1,n.push,n),new this(n))}})}},{26:26,34:34,4:4,40:40}],96:[function(t,e,n){"use strict";var a=t(34);e.exports=function(t){a(a.S,t,{of:function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},{34:34}],97:[function(r,t,e){function i(t,e){if(a(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")}var n=r(52),a=r(8);t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,a){try{(a=r(26)(Function.call,r(75).f(Object.prototype,"__proto__").set,2))(t,[]),n=!(t instanceof Array)}catch(e){n=!0}return function(t,e){return i(t,e),n?t.__proto__=e:a(t,e),t}}({},!1):undefined),check:i}},{26:26,52:52,75:75,8:8}],98:[function(t,e,n){"use strict";var a=t(41),r=t(72),i=t(30),o=t(127)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.f(e,o,{configurable:!0,get:function(){return this}})}},{127:127,30:30,41:41,72:72}],99:[function(t,e,n){var a=t(72).f,r=t(42),i=t(127)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{127:127,42:42,72:72}],100:[function(t,e,n){var a=t(101)("keys"),r=t(122);e.exports=function(t){return a[t]||(a[t]=r(t))}},{101:101,122:122}],101:[function(t,e,n){var a=t(24),r=t(41),i="__core-js_shared__",o=r[i]||(r[i]={});(e.exports=function(t,e){return o[t]||(o[t]=e!==undefined?e:{})})("versions",[]).push({version:a.version,mode:t(60)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},{24:24,41:41,60:60}],102:[function(t,e,n){var r=t(8),i=t(4),o=t(127)("species");e.exports=function(t,e){var n,a=r(t).constructor;return a===undefined||(n=r(a)[o])==undefined?e:i(n)}},{127:127,4:4,8:8}],103:[function(t,e,n){"use strict";var a=t(36);e.exports=function(t,e){return!!t&&a(function(){e?t.call(null,function(){},1):t.call(null)})}},{36:36}],104:[function(t,e,n){var p=t(114),u=t(29);e.exports=function(s){return function(t,e){var n,a,r=String(u(t)),i=p(e),o=r.length;return i<0||o<=i?s?"":undefined:(n=r.charCodeAt(i))<55296||56319"+r+""+e+">"}var r=t(34),i=t(36),o=t(29),s=/"/g;e.exports=function(e,t){var n={};n[e]=t(a),r(r.P+r.F*i(function(){var t=""[e]('"');return t!==t.toLowerCase()||3p&&(u=u.slice(0,p)),a?u+r:r+u}},{108:108,116:116,29:29}],108:[function(t,e,n){"use strict";var r=t(114),i=t(29);e.exports=function(t){var e=String(i(this)),n="",a=r(t);if(a<0||a==Infinity)throw RangeError("Count can't be negative");for(;0>>=1)&&(e+=e))1&a&&(n+=e);return n}},{114:114,29:29}],109:[function(t,e,n){function a(t,e,n){var a={},r=s(function(){return!!p[t]()||"
"!="
"[t]()}),i=a[t]=r?e(l):p[t];n&&(a[n]=i),o(o.P+o.F*r,"String",a)}var o=t(34),r=t(29),s=t(36),p=t(110),i="["+p+"]",u=RegExp("^"+i+i+"*"),c=RegExp(i+i+"*$"),l=a.trim=function(t,e){return t=String(r(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=a},{110:110,29:29,34:34,36:36}],110:[function(t,e,n){e.exports="\t\n\x0B\f\r \u2028\u2029\ufeff"},{}],111:[function(t,e,n){function a(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}}function r(t){a.call(t.data)}var i,o,s,p=t(26),u=t(47),c=t(44),l=t(31),d=t(41),f=d.process,h=d.setImmediate,m=d.clearImmediate,g=d.MessageChannel,b=d.Dispatch,v=0,y={},_="onreadystatechange";h&&m||(h=function(t){for(var e=[],n=1;n>1,c=23===e?O(2,-24)-O(2,-77):0,l=0,d=t<0||0===t&&1/t<0?1:0;for((t=A(t))!=t||t===C?(r=t!=t?1:0,a=p):(a=T(M(t)/R),t*(i=O(2,-a))<1&&(a--,i*=2),2<=(t+=1<=a+u?c/i:c*O(2,1-u))*i&&(a++,i/=2),p<=a+u?(r=0,a=p):1<=a+u?(r=(t*i-1)*O(2,e),a+=u):(r=t*O(2,u-1)*O(2,e),a=0));8<=e;o[l++]=255&r,r/=256,e-=8);for(a=a<>1,s=r-7,p=n-1,u=t[p--],c=127&u;for(u>>=7;0>=-s,s+=e;0>8&255]}function G(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function z(t){return F(t,52,8)}function W(t){return F(t,23,4)}function H(t,e,n){m(t[_],e,{get:function(){return this[n]}})}function K(t,e,n,a){var r=f(+n);if(r+e>t[N])throw E(x);var i=t[D]._b,o=r+t[I],s=i.slice(o,o+e);return a?s:s.reverse()}function Q(t,e,n,a,r,i){var o=f(+n);if(o+e>t[N])throw E(x);for(var s=t[D]._b,p=o+t[I],u=a(+r),c=0;cJ;)(Y=X[J++])in w||s(w,Y,P[Y]);i||($.constructor=w)}var Z=new k(new w(2)),tt=k[_].setInt8;Z.setInt8(0,2147483648),Z.setInt8(1,2147483649),!Z.getInt8(0)&&Z.getInt8(1)||p(k[_],{setInt8:function(t,e){tt.call(this,t,e<<24>>24)},setUint8:function(t,e){tt.call(this,t,e<<24>>24)}},!0)}else w=function(t){c(this,w,v);var e=f(t);this._b=g.call(new Array(e),0),this[N]=e},k=function(t,e,n){c(this,k,y),c(t,w,y);var a=t[N],r=l(e);if(r<0||a>24},getUint8:function(t){return K(this,1,t)[0]},getInt16:function(t){var e=K(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=K(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return q(K(this,4,t,arguments[1]))},getUint32:function(t){return q(K(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return B(K(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return B(K(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){Q(this,1,t,V,e)},setUint8:function(t,e){Q(this,1,t,V,e)},setInt16:function(t,e){Q(this,2,t,U,e,arguments[2])},setUint16:function(t,e){Q(this,2,t,U,e,arguments[2])},setInt32:function(t,e){Q(this,4,t,G,e,arguments[2])},setUint32:function(t,e){Q(this,4,t,G,e,arguments[2])},setFloat32:function(t,e){Q(this,4,t,W,e,arguments[2])},setFloat64:function(t,e){Q(this,8,t,z,e,arguments[2])}});b(w,v),b(k,y),s(k[_],o.VIEW,!0),n[v]=w,n[y]=k},{10:10,113:113,114:114,116:116,121:121,30:30,36:36,41:41,43:43,60:60,7:7,72:72,77:77,91:91,99:99}],121:[function(t,e,n){for(var a,r=t(41),i=t(43),o=t(122),s=o("typed_array"),p=o("view"),u=!(!r.ArrayBuffer||!r.DataView),c=u,l=0,d="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(a=r[d[l++]])?(i(a.prototype,s,!0),i(a.prototype,p,!0)):c=!1;e.exports={ABV:u,CONSTR:c,TYPED:s,VIEW:p}},{122:122,41:41,43:43}],122:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(t===undefined?"":t,")_",(++a+r).toString(36))}},{}],123:[function(t,e,n){var a=t(41).navigator;e.exports=a&&a.userAgent||""},{41:41}],124:[function(t,e,n){var a=t(52);e.exports=function(t,e){if(!a(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},{52:52}],125:[function(t,e,n){var a=t(41),r=t(24),i=t(60),o=t(126),s=t(72).f;e.exports=function(t){var e=r.Symbol||(r.Symbol=i?{}:a.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:o.f(t)})}},{126:126,24:24,41:41,60:60,72:72}],126:[function(t,e,n){n.f=t(127)},{127:127}],127:[function(t,e,n){var a=t(101)("wks"),r=t(122),i=t(41).Symbol,o="function"==typeof i;(e.exports=function(t){return a[t]||(a[t]=o&&i[t]||(o?i:r)("Symbol."+t))}).store=a},{101:101,122:122,41:41}],128:[function(t,e,n){var a=t(18),r=t(127)("iterator"),i=t(59);e.exports=t(24).getIteratorMethod=function(t){if(t!=undefined)return t[r]||t["@@iterator"]||i[a(t)]}},{127:127,18:18,24:24,59:59}],129:[function(t,e,n){var a=t(34),r=t(93)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{34:34,93:93}],130:[function(t,e,n){var a=t(34);a(a.P,"Array",{copyWithin:t(9)}),t(6)("copyWithin")},{34:34,6:6,9:9}],131:[function(t,e,n){"use strict";var a=t(34),r=t(13)(4);a(a.P+a.F*!t(103)([].every,!0),"Array",{every:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],132:[function(t,e,n){var a=t(34);a(a.P,"Array",{fill:t(10)}),t(6)("fill")},{10:10,34:34,6:6}],133:[function(t,e,n){"use strict";var a=t(34),r=t(13)(2);a(a.P+a.F*!t(103)([].filter,!0),"Array",{filter:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],134:[function(t,e,n){"use strict";var a=t(34),r=t(13)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t){return r(this,t,1=t.length?(this._t=undefined,r(1)):r(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{115:115,56:56,58:58,59:59,6:6}],141:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=[].join;a(a.P+a.F*(t(48)!=Object||!t(103)(i)),"Array",{join:function(t){return i.call(r(this),t===undefined?",":t)}})},{103:103,115:115,34:34,48:48}],142:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=t(114),o=t(116),s=[].lastIndexOf,p=!!s&&1/[1].lastIndexOf(1,-0)<0;a(a.P+a.F*(p||!t(103)(s)),"Array",{lastIndexOf:function(t){if(p)return s.apply(this,arguments)||0;var e=r(this),n=o(e.length),a=n-1;for(1>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{34:34}],165:[function(t,e,n){var a=t(34),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{34:34}],166:[function(t,e,n){var a=t(34),r=t(61);a(a.S+a.F*(r!=Math.expm1),"Math",{expm1:r})},{34:34,61:61}],167:[function(t,e,n){var a=t(34);a(a.S,"Math",{fround:t(62)})},{34:34,62:62}],168:[function(t,e,n){var a=t(34),p=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,r=0,i=0,o=arguments.length,s=0;i>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{34:34,36:36}],170:[function(t,e,n){var a=t(34);a(a.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},{34:34}],171:[function(t,e,n){var a=t(34);a(a.S,"Math",{log1p:t(63)})},{34:34,63:63}],172:[function(t,e,n){var a=t(34);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{34:34}],173:[function(t,e,n){var a=t(34);a(a.S,"Math",{sign:t(65)})},{34:34,65:65}],174:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S+a.F*t(36)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{34:34,36:36,61:61}],175:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==Infinity?1:n==Infinity?-1:(e-n)/(i(t)+i(-t))}})},{34:34,61:61}],176:[function(t,e,n){var a=t(34);a(a.S,"Math",{trunc:function(t){return(0w;w++)i(g,_=x[w])&&!i(m,_)&&d(m,_,l(g,_));(m.prototype=b).constructor=m,t(92)(r,h,m)}},{109:109,118:118,19:19,30:30,36:36,41:41,42:42,46:46,71:71,72:72,75:75,77:77,92:92}],178:[function(t,e,n){var a=t(34);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{34:34}],179:[function(t,e,n){var a=t(34),r=t(41).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{34:34,41:41}],180:[function(t,e,n){var a=t(34);a(a.S,"Number",{isInteger:t(51)})},{34:34,51:51}],181:[function(t,e,n){var a=t(34);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{34:34}],182:[function(t,e,n){var a=t(34),r=t(51),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{34:34,51:51}],183:[function(t,e,n){var a=t(34);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{34:34}],184:[function(t,e,n){var a=t(34);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{34:34}],185:[function(t,e,n){var a=t(34),r=t(86);a(a.S+a.F*(Number.parseFloat!=r),"Number",{parseFloat:r})},{34:34,86:86}],186:[function(t,e,n){var a=t(34),r=t(87);a(a.S+a.F*(Number.parseInt!=r),"Number",{parseInt:r})},{34:34,87:87}],187:[function(t,e,n){"use strict";function u(t,e){for(var n=-1,a=e;++n<6;)a+=t*o[n],o[n]=a%1e7,a=i(a/1e7)}function c(t){for(var e=6,n=0;0<=--e;)n+=o[e],o[e]=i(n/t),n=n%t*1e7}function l(){for(var t=6,e="";0<=--t;)if(""!==e||0===t||0!==o[t]){var n=String(o[t]);e=""===e?n:e+h.call("0",7-n.length)+n}return e}var a=t(34),d=t(114),f=t(5),h=t(108),r=1..toFixed,i=Math.floor,o=[0,0,0,0,0,0],m="Number.toFixed: incorrect invocation!",g=function(t,e,n){return 0===e?n:e%2==1?g(t,e-1,n*t):g(t*t,e/2,n)};a(a.P+a.F*(!!r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!t(36)(function(){r.call({})})),"Number",{toFixed:function(t){var e,n,a,r,i=f(this,m),o=d(t),s="",p="0";if(o<0||20t;)e(a[t++]);l._c=[],l._n=!1,n&&!l._h&&N(l)})}}function o(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),i(e,!0))}var n,s,p,u,c=a(60),l=a(41),f=a(26),h=a(18),m=a(34),g=a(52),b=a(4),v=a(7),y=a(40),_=a(102),x=a(111).set,w=a(68)(),k=a(69),S=a(88),E=a(123),C=a(89),P="Promise",A=l.TypeError,O=l.process,T=O&&O.versions,M=T&&T.v8||"",R=l[P],L="process"==h(O),j=s=k.f,D=!!function(){try{var t=R.resolve(1),e=(t.constructor={})[a(127)("species")]=function(t){t(r,r)};return(L||"function"==typeof PromiseRejectionEvent)&&t.then(r)instanceof e&&0!==M.indexOf("6.6")&&-1===E.indexOf("Chrome/66")}catch(n){}}(),N=function(i){x.call(l,function(){var t,e,n,a=i._v,r=I(i);if(r&&(t=S(function(){L?O.emit("unhandledRejection",a,i):(e=l.onunhandledrejection)?e({promise:i,reason:a}):(n=l.console)&&n.error&&n.error("Unhandled promise rejection",a)}),i._h=L||I(i)?2:1),i._a=undefined,r&&t.e)throw t.v})},I=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(e){x.call(l,function(){var t;L?O.emit("rejectionHandled",e):(t=l.onrejectionhandled)&&t({promise:e,reason:e._v})})},B=function(n){var a,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===n)throw A("Promise can't be resolved itself");(a=d(n))?w(function(){var t={_w:r,_d:!1};try{a.call(n,f(B,t,1),f(o,t,1))}catch(e){o.call(t,e)}}):(r._v=n,r._s=1,i(r,!1))}catch(t){o.call({_w:r,_d:!1},t)}}};D||(R=function(t){v(this,R,P,"_h"),b(t),n.call(this);try{t(f(B,this,1),f(o,this,1))}catch(e){o.call(this,e)}},(n=function(t){this._c=[],this._a=undefined,this._s=0,this._d=!1,this._v=undefined,this._h=0,this._n=!1}).prototype=a(91)(R.prototype,{then:function(t,e){var n=j(_(this,R));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=L?O.domain:undefined,this._c.push(n),this._a&&this._a.push(n),this._s&&i(this,!1),n.promise},"catch":function(t){return this.then(undefined,t)}}),p=function(){var t=new n;this.promise=t,this.resolve=f(B,t,1),this.reject=f(o,t,1)},k.f=j=function(t){return t===R||t===u?new p(t):s(t)}),m(m.G+m.W+m.F*!D,{Promise:R}),a(99)(R,P),a(98)(P),u=a(24)[P],m(m.S+m.F*!D,P,{reject:function(t){var e=j(this);return(0,e.reject)(t),e.promise}}),m(m.S+m.F*(c||!D),P,{resolve:function(t){return C(c&&this===u?R:this,t)}}),m(m.S+m.F*!(D&&a(57)(function(t){R.all(t)["catch"](r)})),P,{all:function(t){var o=this,e=j(o),s=e.resolve,p=e.reject,n=S(function(){var a=[],r=0,i=1;y(t,!1,function(t){var e=r++,n=!1;a.push(undefined),i++,o.resolve(t).then(function(t){n||(n=!0,a[e]=t,--i||s(a))},p)}),--i||s(a)});return n.e&&p(n.v),e.promise},race:function(t){var e=this,n=j(e),a=n.reject,r=S(function(){y(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r.e&&a(r.v),n.promise}})},{102:102,111:111,123:123,127:127,18:18,24:24,26:26,34:34,4:4,40:40,41:41,52:52,57:57,60:60,68:68,69:69,7:7,88:88,89:89,91:91,98:98,99:99}],209:[function(t,e,n){var a=t(34),i=t(4),o=t(8),s=(t(41).Reflect||{}).apply,p=Function.apply;a(a.S+a.F*!t(36)(function(){s(function(){})}),"Reflect",{apply:function(t,e,n){var a=i(t),r=o(n);return s?s(a,e,r):p.call(a,e,r)}})},{34:34,36:36,4:4,41:41,8:8}],210:[function(t,e,n){var a=t(34),s=t(71),p=t(4),u=t(8),c=t(52),r=t(36),l=t(17),d=(t(41).Reflect||{}).construct,f=r(function(){function t(){}return!(d(function(){},[],t)instanceof t)}),h=!r(function(){d(function(){})});a(a.S+a.F*(f||h),"Reflect",{construct:function(t,e){p(t),u(e);var n=arguments.length<3?t:p(arguments[2]);if(h&&!f)return d(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var a=[null];return a.push.apply(a,e),new(l.apply(t,a))}var r=n.prototype,i=s(c(r)?r:Object.prototype),o=Function.apply.call(t,i,e);return c(o)?o:i}})},{17:17,34:34,36:36,4:4,41:41,52:52,71:71,8:8}],211:[function(t,e,n){var r=t(72),a=t(34),i=t(8),o=t(118);a(a.S+a.F*t(36)(function(){Reflect.defineProperty(r.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t),e=o(e,!0),i(n);try{return r.f(t,e,n),!0}catch(a){return!1}}})},{118:118,34:34,36:36,72:72,8:8}],212:[function(t,e,n){var a=t(34),r=t(75).f,i=t(8);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return!(n&&!n.configurable)&&delete t[e]}})},{34:34,75:75,8:8}],213:[function(t,e,n){"use strict";function a(t){this._t=i(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)}var r=t(34),i=t(8);t(55)(a,"Object",function(){var t,e=this._k;do{if(this._i>=e.length)return{value:undefined,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),r(r.S,"Reflect",{enumerate:function(t){return new a(t)}})},{34:34,55:55,8:8}],214:[function(t,e,n){var a=t(75),r=t(34),i=t(8);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.f(i(t),e)}})},{34:34,75:75,8:8}],215:[function(t,e,n){var a=t(34),r=t(79),i=t(8);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{34:34,79:79,8:8}],216:[function(t,e,n){var i=t(75),o=t(79),s=t(42),a=t(34),p=t(52),u=t(8);a(a.S,"Reflect",{get:function c(t,e){var n,a,r=arguments.length<3?t:arguments[2];return u(t)===r?t[e]:(n=i.f(t,e))?s(n,"value")?n.value:n.get!==undefined?n.get.call(r):undefined:p(a=o(t))?c(a,e,r):void 0}})},{34:34,42:42,52:52,75:75,79:79,8:8}],217:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{34:34}],218:[function(t,e,n){var a=t(34),r=t(8),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){return r(t),!i||i(t)}})},{34:34,8:8}],219:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{ownKeys:t(85)})},{34:34,85:85}],220:[function(t,e,n){var a=t(34),r=t(8),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(e){return!1}}})},{34:34,8:8}],221:[function(t,e,n){var a=t(34),r=t(97);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(n){return!1}}})},{34:34,97:97}],222:[function(t,e,n){var s=t(72),p=t(75),u=t(79),c=t(42),a=t(34),l=t(90),d=t(8),f=t(52);a(a.S,"Reflect",{set:function h(t,e,n){var a,r,i=arguments.length<4?t:arguments[3],o=p.f(d(t),e);if(!o){if(f(r=u(t)))return h(r,e,n,i);o=l(0)}if(c(o,"value")){if(!1===o.writable||!f(i))return!1;if(a=p.f(i,e)){if(a.get||a.set||!1===a.writable)return!1;a.value=n,s.f(i,e,a)}else s.f(i,e,l(0,n));return!0}return o.set!==undefined&&(o.set.call(i,n),!0)}})},{34:34,42:42,52:52,72:72,75:75,79:79,8:8,90:90}],223:[function(t,e,n){var a=t(41),i=t(46),r=t(72).f,o=t(77).f,s=t(53),p=t(38),u=a.RegExp,c=u,l=u.prototype,d=/a/g,f=/a/g,h=new u(d)!==d;if(t(30)&&(!h||t(36)(function(){return f[t(127)("match")]=!1,u(d)!=d||u(f)==f||"/a/i"!=u(d,"i")}))){u=function(t,e){var n=this instanceof u,a=s(t),r=e===undefined;return!n&&a&&t.constructor===u&&r?t:i(h?new c(a&&!r?t.source:t,e):c((a=t instanceof u)?t.source:t,a&&r?p.call(t):e),n?this:l,u)};function m(e){e in u||r(u,e,{configurable:!0,get:function(){return c[e]},set:function(t){c[e]=t}})}for(var g=o(c),b=0;g.length>b;)m(g[b++]);(l.constructor=u).prototype=l,t(92)(a,"RegExp",u)}t(98)("RegExp")},{127:127,30:30,36:36,38:38,41:41,46:46,53:53,72:72,77:77,92:92,98:98}],224:[function(t,e,n){t(30)&&"g"!=/./g.flags&&t(72).f(RegExp.prototype,"flags",{configurable:!0,get:t(38)})},{30:30,38:38,72:72}],225:[function(t,e,n){t(37)("match",1,function(a,r,t){return[function(t){"use strict";var e=a(this),n=t==undefined?undefined:t[r];return n!==undefined?n.call(t,e):new RegExp(t)[r](String(e))},t]})},{37:37}],226:[function(t,e,n){t(37)("replace",2,function(r,i,o){return[function(t,e){"use strict";var n=r(this),a=t==undefined?undefined:t[i];return a!==undefined?a.call(t,n,e):o.call(String(n),t,e)},o]})},{37:37}],227:[function(t,e,n){t(37)("search",1,function(a,r,t){return[function(t){"use strict";var e=a(this),n=t==undefined?undefined:t[r];return n!==undefined?n.call(t,e):new RegExp(t)[r](String(e))},t]})},{37:37}],228:[function(e,t,n){e(37)("split",2,function(r,i,o){"use strict";var f=e(53),h=o,m=[].push,t="split",g="length",b="lastIndex";if("c"=="abbc"[t](/(b)*/)[1]||4!="test"[t](/(?:)/,-1)[g]||2!="ab"[t](/(?:ab)*/)[g]||4!="."[t](/(.?)(.?)/)[g]||1<"."[t](/()()/)[g]||""[t](/.?/)[g]){var v=/()??/.exec("")[1]===undefined;o=function(t,e){var n=String(this);if(t===undefined&&0===e)return[];if(!f(t))return h.call(n,t,e);var a,r,i,o,s,p=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),c=0,l=e===undefined?4294967295:e>>>0,d=new RegExp(t.source,u+"g");for(v||(a=new RegExp("^"+d.source+"$(?!\\s)",u));(r=d.exec(n))&&!(c<(i=r.index+r[0][g])&&(p.push(n.slice(c,r.index)),!v&&1=l));)d[b]===r.index&&d[b]++;return c===n[g]?!o&&d.test("")||p.push(""):p.push(n.slice(c)),p[g]>l?p.slice(0,l):p}}else"0"[t](undefined,0)[g]&&(o=function(t,e){return t===undefined&&0===e?[]:h.call(this,t,e)});return[function(t,e){var n=r(this),a=t==undefined?undefined:t[i];return a!==undefined?a.call(t,n,e):o.call(String(n),t,e)},o]})},{37:37,53:53}],229:[function(e,t,n){"use strict";e(224);function a(t){e(92)(RegExp.prototype,s,t,!0)}var r=e(8),i=e(38),o=e(30),s="toString",p=/./[s];e(36)(function(){return"/a/b"!=p.call({source:"a",flags:"b"})})?a(function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):undefined)}):p.name!=s&&a(function(){return p.call(this)})},{224:224,30:30,36:36,38:38,8:8,92:92}],230:[function(t,e,n){"use strict";var a=t(20),r=t(124);e.exports=t(23)("Set",function(t){return function(){return t(this,0>10),e%1024+56320))}return n.join("")}})},{112:112,34:34}],241:[function(t,e,n){"use strict";var a=t(34),r=t(105),i="includes";a(a.P+a.F*t(35)(i),"String",{includes:function(t){return!!~r(this,t,i).indexOf(t,1=e.length?{value:undefined,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{104:104,56:56}],244:[function(t,e,n){"use strict";t(106)("link",function(e){return function(t){return e(this,"a","href",t)}})},{106:106}],245:[function(t,e,n){var a=t(34),o=t(115),s=t(116);a(a.S,"String",{raw:function(t){for(var e=o(t.raw),n=s(e.length),a=arguments.length,r=[],i=0;ir;)c(W,e=n[r++])||e==V||e==h||a.push(e);return a}function p(t){for(var e,n=t===K,a=N(n?H:C(t)),r=[],i=0;a.length>i;)!c(W,e=a[i++])||n&&!c(K,e)||r.push(W[e]);return r}var u=t(41),c=t(42),l=t(30),d=t(34),f=t(92),h=t(66).KEY,m=t(36),g=t(101),b=t(99),v=t(122),y=t(127),_=t(126),x=t(125),w=t(33),k=t(50),S=t(8),E=t(52),C=t(115),P=t(118),A=t(90),O=t(71),T=t(76),M=t(75),R=t(72),L=t(81),j=M.f,D=R.f,N=T.f,I=u.Symbol,F=u.JSON,B=F&&F.stringify,q="prototype",V=y("_hidden"),U=y("toPrimitive"),G={}.propertyIsEnumerable,z=g("symbol-registry"),W=g("symbols"),H=g("op-symbols"),K=Object[q],Q="function"==typeof I,Y=u.QObject,$=!Y||!Y[q]||!Y[q].findChild,X=l&&m(function(){return 7!=O(D({},"a",{get:function(){return D(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=j(K,e);a&&delete K[e],D(t,e,n),a&&t!==K&&D(K,e,a)}:D,J=Q&&"symbol"==typeof I.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof I},Z=function(t,e,n){return t===K&&Z(H,e,n),S(t),e=P(e,!0),S(n),c(W,e)?(n.enumerable?(c(t,V)&&t[V][e]&&(t[V][e]=!1),n=O(n,{enumerable:A(0,!1)})):(c(t,V)||D(t,V,A(1,{})),t[V][e]=!0),X(t,e,n)):D(t,e,n)};Q||(f((I=function(){if(this instanceof I)throw TypeError("Symbol is not a constructor!");var e=v(0et;)y(tt[et++]);for(var nt=L(y.store),at=0;nt.length>at;)x(nt[at++]);d(d.S+d.F*!Q,"Symbol",{"for":function(t){return c(z,t+="")?z[t]:z[t]=I(t)},keyFor:function(t){if(!J(t))throw TypeError(t+" is not a symbol!");for(var e in z)if(z[e]===t)return e},useSetter:function(){$=!0},useSimple:function(){$=!1}}),d(d.S+d.F*!Q,"Object",{create:function(t,e){return e===undefined?O(t):r(O(t),e)},defineProperty:Z,defineProperties:r,getOwnPropertyDescriptor:o,getOwnPropertyNames:s,getOwnPropertySymbols:p}),F&&d(d.S+d.F*(!Q||m(function(){var t=I();return"[null]"!=B([t])||"{}"!=B({a:t})||"{}"!=B(Object(t))})),"JSON",{stringify:function(t){for(var e,n,a=[t],r=1;r>>0,i=n>>>0;return(e>>>0)+(a>>>0)+((r&i|(r|i)&~(r+i>>>0))>>>31)|0}})},{34:34}],281:[function(t,e,n){var a=t(34);a(a.S,"Math",{imulh:function(t,e){var n=+t,a=+e,r=65535&n,i=65535&a,o=n>>16,s=a>>16,p=(o*i>>>0)+(r*i>>>16);return o*s+(p>>16)+((r*s>>>0)+(65535&p)>>16)}})},{34:34}],282:[function(t,e,n){var a=t(34);a(a.S,"Math",{isubh:function(t,e,n,a){var r=t>>>0,i=n>>>0;return(e>>>0)-(a>>>0)-((~r&i|~(r^i)&r-i>>>0)>>>31)|0}})},{34:34}],283:[function(t,e,n){var a=t(34);a(a.S,"Math",{RAD_PER_DEG:180/Math.PI})},{34:34}],284:[function(t,e,n){var a=t(34),r=Math.PI/180;a(a.S,"Math",{radians:function(t){return t*r}})},{34:34}],285:[function(t,e,n){var a=t(34);a(a.S,"Math",{scale:t(64)})},{34:34,64:64}],286:[function(t,e,n){var a=t(34);a(a.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==Infinity:0>>16,s=a>>>16,p=(o*i>>>0)+(r*i>>>16);return o*s+(p>>>16)+((r*s>>>0)+(65535&p)>>>16)}})},{34:34}],288:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineGetter__:function(t,e){o.f(r(this),t,{get:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],289:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineSetter__:function(t,e){o.f(r(this),t,{set:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],290:[function(t,e,n){var a=t(34),r=t(84)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{34:34,84:84}],291:[function(t,e,n){var a=t(34),p=t(85),u=t(115),c=t(75),l=t(25);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=u(t),r=c.f,i=p(a),o={},s=0;i.length>s;)(n=r(a,e=i[s++]))!==undefined&&l(o,e,n);return o}})},{115:115,25:25,34:34,75:75,85:85}],292:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupGetter__:function(t){var e,n=r(this),a=i(t,!0);do{if(e=s(n,a))return e.get}while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],293:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupSetter__:function(t){var e,n=r(this),a=i(t,!0);do{if(e=s(n,a))return e.set}while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],294:[function(t,e,n){var a=t(34),r=t(84)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{34:34,84:84}],295:[function(t,e,n){"use strict";function i(t){return null==t?undefined:f(t)}function o(t){var e=t._c;e&&(t._c=undefined,e())}function s(t){return t._o===undefined}function p(t){s(t)||(t._o=undefined,o(t))}function a(t,e){h(t),this._c=undefined,this._o=t,t=new _(this);try{var n=e(t),a=n;null!=n&&("function"==typeof n.unsubscribe?n=function(){a.unsubscribe()}:f(n),this._c=n)}catch(r){return void t.error(r)}s(this)&&o(this)}var r=t(34),u=t(41),c=t(24),l=t(68)(),d=t(127)("observable"),f=t(4),h=t(8),m=t(7),g=t(91),b=t(43),v=t(40),y=v.RETURN;a.prototype=g({},{unsubscribe:function(){p(this)}});var _=function(t){this._s=t};_.prototype=g({},{next:function(t){var e=this._s;if(!s(e)){var n=e._o;try{var a=i(n.next);if(a)return a.call(n,t)}catch(r){try{p(e)}finally{throw r}}}},error:function(t){var e=this._s;if(s(e))throw t;var n=e._o;e._o=undefined;try{var a=i(n.error);if(!a)throw t;t=a.call(n,t)}catch(r){try{o(e)}finally{throw r}}return o(e),t},complete:function(t){var e=this._s;if(!s(e)){var n=e._o;e._o=undefined;try{var a=i(n.complete);t=a?a.call(n,t):undefined}catch(r){try{o(e)}finally{throw r}}return o(e),t}}});var x=function(t){m(this,x,"Observable","_f")._f=f(t)};g(x.prototype,{subscribe:function(t){return new a(t,this._f)},forEach:function(r){var e=this;return new(c.Promise||u.Promise)(function(t,n){f(r);var a=e.subscribe({next:function(t){try{return r(t)}catch(e){n(e),a.unsubscribe()}},error:n,complete:t})})}}),g(x,{from:function(a){var t="function"==typeof this?this:x,e=i(h(a)[d]);if(e){var n=h(e.call(a));return n.constructor===t?n:new t(function(t){return n.subscribe(t)})}return new t(function(e){var n=!1;return l(function(){if(!n){try{if(v(a,!1,function(t){if(e.next(t),n)return y})===y)return}catch(t){if(n)throw t;return void e.error(t)}e.complete()}}),function(){n=!0}})},of:function(){for(var t=0,e=arguments.length,a=new Array(e);t",a.insertBefore(n.lastChild,a.firstChild)}(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),s||function a(e,n){n.cache||(n.cache={},n.createElem=e.createElement,n.createFrag=e.createDocumentFragment,n.frag=n.createFrag()),e.createElement=function(t){return h.shivMethods?d(t,e,n):n.createElem(t)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+c().join().replace(/[\w\-:]+/g,function(t){return n.createElem(t),n.frag.createElement(t),'c("'+t+'")'})+");return n}")(h,n.frag)}(t,e),t}!function(){try{var t=o.createElement("a");t.innerHTML=" ",n="hidden"in t,s=1==t.childNodes.length||function(){o.createElement("a");var t=o.createDocumentFragment();return"undefined"==typeof t.cloneNode||"undefined"==typeof t.createDocumentFragment||"undefined"==typeof t.createElement}()}catch(e){s=n=!0}}();var h={elements:e.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3-pre",shivCSS:!1!==e.shivCSS,supportsUnknownElements:s,shivMethods:!1!==e.shivMethods,type:"default",shivDocument:f,createElement:d,createDocumentFragment:function m(t,e){if(t=t||o,s)return t.createDocumentFragment();for(var n=(e=e||l(t)).frag.cloneNode(),a=0,r=c(),i=r.length;a=-n&&t.vec[0]*a>=-n;var i=e.vec[0]*t.vec[1]-e.vec[1]*t.vec[0];if(0==i)return!1;var o=(r*e.vec[0]-a*e.vec[1])/i,s=(r*t.vec[0]-a*t.vec[1])/i;return-n<=o&&n<=s||n<=o&&-n<=s},o=function o(t,e){return t.map(function(t){return{x:t.x*e[0]+t.y*e[2]+e[4],y:t.x*e[1]+t.y*e[3]+e[5]}})},v=function v(t,e,n,a){var r=Math.PI/180,i=Math.cos(n*r),o=Math.sin(n*r),s=[t*(a[0]*i+a[2]*o),t*(a[1]*i+a[3]*o),e*(-a[0]*o+a[2]*i),e*(-a[1]*o+a[3]*i)],p=s[0]*s[0]+s[2]*s[2],u=s[1]*s[1]+s[3]*s[3],c=((s[0]-s[3])*(s[0]-s[3])+(s[2]+s[1])*(s[2]+s[1]))*((s[0]+s[3])*(s[0]+s[3])+(s[2]-s[1])*(s[2]-s[1])),l=(p+u)/2;if(c<1e-10*l)return{rx:Math.sqrt(l),ry:Math.sqrt(l),ax:0,isDegenerate:!1};var d=s[0]*s[1]+s[2]*s[3],f=l+(c=Math.sqrt(c))/2,h=l-c/2,m=undefined,g=undefined,b=undefined;return b=0<=(m=Math.abs(d)<1e-10&&Math.abs(f-u)<1e-10?90:180*Math.atan(Math.abs(d)>Math.abs(f-u)?(f-p)/d:d/(f-u))/Math.PI)?(g=Math.sqrt(f),Math.sqrt(h)):(m+=90,g=Math.sqrt(h),Math.sqrt(f)),{rx:g,ry:b,ax:m,isDegenerate:g<1e-10*b||b<1e-10*g}};n["default"]={distPointToPoint:c,distPointToParabol:a,circumCenter:r,parabolsCrossX:i,doHalflinesCross:l,matrixTransform:o,transformEllipse:v},e.exports=n["default"]},{}],333:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var x=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function u(t,e){var n=[],a=!0,r=!1,i=undefined;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}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")};var w=function a(t){return t&&t.__esModule?t:{"default":t}}(t(334)),k=t(335),S=function S(t,e,n){var a=t.map(e),r=n?a.sort(function(t,e){var n=x(t,2),a=n[0],r=(n[1],x(e,2)),i=r[0];r[1];return a-i}):a,i=r.length,o=r[0][0],s=r[i-1][0],p=(0,k.minBy)(r,function(t){return t[1]}),u=(0,k.maxBy)(r,function(t){return t[1]});return o==s&&(s+=1e-5),p==u&&(u+=1e-5),{points:r,xmin:o,xmax:s,ymin:p,ymax:u}};n["default"]=function(t){var e=t.data,n=t.xaccessor,a=t.yaccessor,r=t.width,i=t.height,o=t.closed,s=t.min,p=t.max,u=t.sort,c=u===undefined||u;n=n||function(t){var e=x(t,2),n=e[0];e[1];return n},a=a||function(t){var e=x(t,2);e[0];return e[1]};var l=function l(t){return[n(t),a(t)]},d=e.map(function(t){return S(t,l,c)}),f=(0,k.minBy)(d,function(t){return t.xmin}),h=(0,k.maxBy)(d,function(t){return t.xmax}),m=null==s?(0,k.minBy)(d,function(t){return t.ymin}):s,g=null==p?(0,k.maxBy)(d,function(t){return t.ymax}):p;o&&(m=Math.min(m,0),g=Math.max(g,0));var b=o?0:m,v=(0,w["default"])([f,h],[0,r]),y=(0,w["default"])([m,g],[i,0]);return{arranged:d,scale:function _(t){var e=x(t,2),n=e[0],a=e[1];return[v(n),y(a)]},xscale:v,yscale:y,base:b}},e.exports=n["default"]},{334:334,335:335}],334:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var u=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function u(t,e){var n=[],a=!0,r=!1,i=undefined;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}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")},c=function c(t,e){var n=u(t,2),a=n[0],r=n[1],i=u(e,2),o=i[0],s=i[1],p=function p(t){return o+(s-o)*(t-a)/(r-a)};return p.inverse=function(){return c([o,s],[a,r])},p};n["default"]=c,e.exports=n["default"]},{}],335:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function u(t,e){var n=[],a=!0,r=!1,i=undefined;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}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")},a=function a(t){return t.reduce(function(t,e){return t+e},0)},r=function r(t){return t.reduce(function(t,e){return Math.min(t,e)})},i=function i(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function s(t,n){return t.reduce(function(t,e){return t+n(e)},0)},p=function p(t,n){return t.reduce(function(t,e){return Math.min(t,n(e))},Infinity)},u=function u(t,n){return t.reduce(function(t,e){return Math.max(t,n(e))},-Infinity)},c=function c(t,e){var n=o(t,2),a=n[0],r=n[1],i=o(e,2);return[a+i[0],r+i[1]]},l=function l(t,e){var n=o(t,2),a=n[0],r=n[1],i=o(e,2);return[a-i[0],r-i[1]]},d=function d(t,e){var n=o(e,2);return[t*n[0],t*n[1]]},f=function f(t){var e=o(t,2),n=e[0],a=e[1];return Math.sqrt(n*n+a*a)},h=function h(t){return t.reduce(c,[0,0])},m=function m(t){return d(1/t.length,t.reduce(c))},g=function g(t,e){return d(t,[Math.sin(e),-Math.cos(e)])},b=function b(t,e){var n=t||{};for(var a in n){var r=n[a];e[a]=r(e.index,e.item,e.group)}return e},v=function v(t,e,n){for(var a=[],r=t;r>>0,"function"!=typeof t)throw new TypeError;for(r=0;r "+t);var i=undefined;(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))},nt=function(){console.log.apply(console,arguments)}):at=nt=rt=B;var ft='A function was specified for "%s" %s, but no %s was returned',ht=function(t,e){return'Missing "'+t+'" '+e+" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#"+e+"s"};function mt(t,e,n){var a=gt(t,e,n);return a?a[t][n]:null}function gt(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}var bt=function(t,e,n,a){if(t===e)return vt(e);if(a){var r=mt("interpolators",n,a);if(r)return r(t,e)||vt(e);pt(ht(a,"interpolator"))}return yt.number(t,e)||yt.array(t,e)||yt.object(t,e)||vt(e)};function vt(t){return function(){return t}}var yt={number:function(e,t){var n;return tt(e)&&tt(t)?(n=(t=+t)-(e=+e))?function(t){return e+t*n}:function(){return e}:null},array:function(t,e){var n,a,r,i;if(!X(t)||!X(e))return null;for(n=[],a=[],i=r=Math.min(t.length,e.length);i--;)a[i]=bt(t[i],e[i]);for(i=r;i=this.duration?(null!==r&&(ge.start(this.root),this.root.viewmodel.set(r,this.to),ge.end()),this.step&&this.step(1,this.to),this.complete(this.to),-1===(a=this.root._animations.indexOf(this))&<("Animation was not found"),this.root._animations.splice(a,1),this.running=!1):(e=this.easing?this.easing(t/this.duration):t/this.duration,null!==r&&(n=this.interpolator(e),ge.start(this.root),this.root.viewmodel.set(r,n),ge.end()),this.step&&this.step(e,n),!0))},stop:function(){var t;this.running=!1,-1===(t=this.root._animations.indexOf(this))&<("Animation was not found"),this.root._animations.splice(t,1)}};function ke(t,e,n){var a,r,i,o,s,p,u,c,l,d,f,h,m,g;if(a=new Xt(function(t){return r=t}),"object"!=typeof t)return(n=n||{}).complete&&a.then(n.complete),n.complete=r,o=Ce(this,t,e,n),a.stop=function(){return o.stop()},a;for(i in p=(n=e||{}).easing,u=n.duration,s=[],c=n.step,l=n.complete,(c||l)&&(f={},n.step=null,n.complete=null,d=function(n){return function(t,e){f[n]=e}}),t)t.hasOwnProperty(i)&&((c||l)&&(h=d(i),n={easing:p,duration:u},c&&(n.step=h)),n.complete=l?h:B,s.push(Ce(this,i,t[i],n)));return g={easing:p,duration:u},c&&(g.step=function(t){return c(t,f)}),l&&a.then(function(t){return l(t,f)}),g.complete=r,m=Ce(this,null,null,g),s.push(m),a.stop=function(){for(var t;t=s.pop();)t.stop();m&&m.stop()},a}var Se=ye,Ee={stop:B};function Ce(t,e,n,a){var r,i,o,s;return null!==(e=e&&Pt(Tt(e)))&&(s=t.viewmodel.get(e)),we.abort(e,t),Z(s,n)?(a.complete&&a.complete(a.to),Ee):(a.easing&&"function"!=typeof(r="function"==typeof a.easing?a.easing:t.easing[a.easing])&&(r=null),i=a.duration===undefined?400:a.duration,o=new Se({keypath:e,from:s,to:n,root:t,duration:i,easing:r,interpolator:a.interpolator,step:a.step,complete:a.complete}),we.add(o),t._animations.push(o),o)}function Pe(){return this.detached||(this.el&&Wt(this.el.__ractive_instances__,this),this.detached=this.fragment.detach(),Ae.fire(this)),this.detached}var Ae=new Bt("detach");function Oe(t){return this.el?this.fragment.find(t):null}function Te(t,e){if(this._isComponentQuery?!this.selector||t.name===this.selector:t.node?p(t.node,this.selector):null)return this.push(t.node||t.instance),e||this._makeDirty(),!0}function Me(){var t,e,n;t=this._root[this._isComponentQuery?"liveComponentQueries":"liveQueries"],e=this.selector,-1!==(n=t.indexOf(e))&&(t.splice(n,1),t[e]=null)}function Re(t,e){var n,a,r,i,o,s,p,u;for(n=je(t.component||t._ractive.proxy),a=je(e.component||e._ractive.proxy),r=zt(n),i=zt(a);r&&r===i;)n.pop(),a.pop(),o=r,r=zt(n),i=zt(a);if(r=r.component||r,i=i.component||i,(p=r.parentFragment)===(u=i.parentFragment))return p.items.indexOf(r)-u.items.indexOf(i)||n.length-a.length;if(s=o.fragments)return s.indexOf(p)-s.indexOf(u)||n.length-a.length;throw new 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!")}function Le(t){var e;return(e=t.parentFragment)?e.owner:t.component&&(e=t.component.parentFragment)?e.owner:void 0}function je(t){var e,n;for(e=[t],n=Le(t);n;)e.push(n),n=Le(n);return e}function De(t,e){return t.compareDocumentPosition?2&t.compareDocumentPosition(e)?1:-1:Re(t,e)}function Ne(){this.sort(this._isComponentQuery?Re:De),this._dirty=!1}function Ie(){var t=this;this._dirty||(this._dirty=!0,ge.scheduleTask(function(){t._sort()}))}function Fe(t){var e=this.indexOf(this._isComponentQuery?t.instance:t);-1!==e&&this.splice(e,1)}var Be=function Cc(t,e,n,a){var r=[];return W(r,{selector:{value:e},live:{value:n},_isComponentQuery:{value:a},_test:{value:Te}}),n&&W(r,{cancel:{value:Me},_root:{value:t},_sort:{value:Ne},_makeDirty:{value:Ie},_remove:{value:Fe},_dirty:{value:!1,writable:!0}}),r};function qe(t,e){var n,a;return this.el?(e=e||{},n=this._liveQueries,(a=n[t])?e&&e.live?a:a.slice():((a=Be(this,t,!!e.live,!1)).live&&(n.push(t),n["_"+t]=a),this.fragment.findAll(t,a),a)):[]}function Ve(t,e){var n,a;return e=e||{},n=this._liveComponentQueries,(a=n[t])?e&&e.live?a:a.slice():((a=Be(this,t,!!e.live,!0)).live&&(n.push(t),n["_"+t]=a),this.fragment.findAllComponents(t,a),a)}function Ue(t){return this.fragment.findComponent(t)}function Ge(t){return this.container?this.container.component&&this.container.component.name===t?this.container:this.container.findContainer(t):null}function ze(t){return this.parent?this.parent.component&&this.parent.component.name===t?this.parent:this.parent.findParent(t):null}var We={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}},He=function Pc(t,e){var n=arguments[2]===undefined?{}:arguments[2];if(!e)return;n.event?n.event.name=e:n.event={name:e,_noArg:!0};var a=Pt(e).wildcardMatches();!function u(t,e,n,a){var r=arguments[4]!==undefined&&arguments[4];var i,o,s=!0;We.enqueue(t,n);for(o=e.length;0<=o;o--)(i=t._subs[e[o]])&&(s=Ke(t,i,n,a)&&s);We.dequeue(t);if(t.parent&&s){if(r&&t.component){var p=t.component.name+"."+e[e.length-1];e=Pt(p).wildcardMatches(),n&&(n.component=t)}u(t.parent,e,n,a)}}(t,a,n.event,n.args,!0)};function Ke(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a));for(var o=0,s=(e=e.slice()).length;o\~:]))+)((?::[^\s\+\>\~\(]+(?:\([^\)]+\))?)?\s*[\s\+\>\~]?)\s*/g,In=/^@media/,Fn=/\[data-ractive-css~="\{[a-z0-9-]+\}"]/g;function Bn(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function qn(t){return t.str}var Vn=1,Un={name:"css",extend:function(t,e,n){if(n.css){var a=Vn++,r=n.noCssTransform?n.css:Ln(n.css,a);e.cssId=a,On.add({id:a,styles:r})}},init:function(){}};var Gn={name:"data",extend:function(t,e,n){var a=undefined,r=undefined;if(n.data&&et(n.data))for(a in n.data)(r=n.data[a])&&"object"==typeof r&&(et(r)||X(r))&<("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=zn(e.data,n.data)},init:function(t,e,n){var a=zn(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}};function zn(t,e){!function r(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?pt("data option must be an object or a function, `"+t+"` is not valid"):lt("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){return Hn(a?Wn(e,this):e,n?Wn(t,this):t)}:Hn(e,t)}function Wn(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&pt("Data function must return an object"),n.constructor!==Object&&dt("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Hn(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}var Kn=null,Qn=["preserveWhitespace","sanitize","stripComments","delimiters","tripleDelimiters","interpolate"],Yn={fromId:function Rc(t,e){var n;if(!a){if(e&&e.noThrow)return;throw new Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}Xn(t)&&(t=t.substring(1));if(!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw new Error("Could not find template element with id #"+t)}if("SCRIPT"===n.tagName.toUpperCase())return"textContent"in n?n.textContent:n.innerHTML;if(e&&e.noThrow)return;throw new Error("Template element with id #"+t+", must be a