diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm
index 125dd2c1d928..893390b5251e 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm
@@ -1,5404 +1,8077 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/template_noop,
-/area/template_noop)
"ab" = (
/turf/simulated/mineral/random/low_chance,
/area/ruin/space/unpowered)
"ac" = (
-/turf/simulated/wall/mineral/iron,
-/area/ruin/space/unpowered)
-"ad" = (
-/obj/structure/closet/cardboard,
-/obj/item/stack/sheet/mineral/silver,
-/obj/item/stack/sheet/mineral/gold,
-/obj/item/stack/sheet/mineral/silver,
-/obj/item/stack/sheet/mineral/silver,
-/obj/item/stack/sheet/mineral/gold,
-/obj/item/stack/sheet/mineral/gold,
+/obj/structure/chair{
+ dir = 1
+ },
/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"ad" = (
+/obj/structure/railing,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"ae" = (
-/obj/structure/closet/cardboard,
-/obj/item/storage/box/monkeycubes,
-/obj/item/storage/box/monkeycubes,
-/obj/item/storage/box/monkeycubes,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/storage/toolbox/mechanical,
-/turf/simulated/floor/plasteel,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"af" = (
-/obj/structure/closet/cardboard,
-/obj/item/stack/sheet/cardboard,
-/obj/item/stack/cable_coil,
-/obj/item/stack/sheet/wood,
-/obj/item/stack/packageWrap,
-/turf/simulated/floor/plasteel,
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 5
+ },
/area/ruin/space/unpowered)
"ag" = (
-/obj/structure/closet/cardboard,
-/obj/item/storage/box/mousetraps,
-/obj/item/storage/box/mousetraps,
-/obj/item/storage/box/drinkingglasses,
-/obj/item/storage/box/zipties,
-/obj/item/kitchen/knife/combat,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"ah" = (
-/obj/structure/closet/cardboard,
-/obj/item/stack/sheet/metal{
- amount = 50;
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/stack/sheet/metal{
- amount = 50;
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/stack/sheet/metal{
- amount = 50;
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/stack/sheet/metal{
- amount = 50;
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/stack/rods{
- amount = 50
- },
-/obj/item/stack/rods{
- amount = 50
- },
-/obj/item/stack/rods{
- amount = 50
- },
-/obj/item/stack/rods{
- amount = 50
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
+"ah" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
"ai" = (
-/obj/structure/closet/cardboard,
-/obj/item/stack/sheet/glass{
- amount = 50
- },
-/obj/item/stack/sheet/glass{
- amount = 50
- },
-/obj/item/stack/sheet/glass{
- amount = 50
- },
-/obj/item/stack/sheet/glass{
- amount = 50
- },
-/obj/item/stack/sheet/plasteel{
- amount = 10
- },
-/obj/item/stack/sheet/plasteel{
- amount = 10
- },
-/obj/item/stack/sheet/plasteel{
- amount = 10
- },
-/obj/item/stack/sheet/plasteel{
- amount = 10
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/shoes/combat,
-/turf/simulated/floor/plasteel,
+/turf/simulated/wall/indestructible/rock,
/area/ruin/space/unpowered)
"aj" = (
-/obj/structure/closet/cardboard,
-/obj/machinery/light{
- dir = 8
+/obj/structure/railing{
+ dir = 4
},
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight,
-/obj/item/flashlight,
-/obj/item/flashlight,
-/obj/item/shovel,
-/turf/simulated/floor/plasteel,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"ak" = (
-/obj/structure/closet/cardboard,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/tape/random,
-/obj/item/tape/random,
-/obj/item/tape/random,
-/obj/item/storage/box/rxglasses,
-/obj/item/extinguisher,
-/obj/item/extinguisher,
-/obj/item/clothing/glasses/night,
-/obj/item/clothing/glasses/night,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing{
+ dir = 9
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"al" = (
-/obj/structure/closet/cardboard,
-/obj/item/storage/box/syringes,
-/obj/item/storage/box/syringes,
-/obj/item/storage/box/beakers,
-/obj/item/storage/box/beakers,
-/obj/item/storage/fancy/matches,
-/obj/item/storage/box/bodybags,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/machinery/atmospherics/air_sensor,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
"am" = (
-/obj/structure/closet/cardboard,
-/obj/item/kitchen/knife,
-/obj/item/kitchen/knife,
-/obj/item/hatchet,
-/obj/item/kitchen/rollingpin,
-/obj/item/cultivator,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/machinery/light/small,
+/turf/simulated/floor/chasm/space_ruin/airless,
+/area/ruin/space/powered)
"an" = (
-/obj/structure/closet/cardboard,
-/obj/item/defibrillator,
-/obj/item/storage/box/autoinjectors,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/flora/junglebush/large,
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
"ao" = (
-/obj/structure/closet/cardboard,
-/obj/machinery/light{
- dir = 4
+/obj/structure/window/reinforced{
+ dir = 8
},
-/obj/item/ammo_box/c9mm,
-/obj/item/ammo_box/c9mm,
-/obj/item/ammo_box/c9mm,
-/obj/item/ammo_box/c9mm,
-/obj/item/ammo_box/c9mm,
-/obj/item/ammo_box/c9mm,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_y = 4
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
"ap" = (
-/obj/structure/closet/crate/freezer,
-/obj/item/reagent_containers/iv_bag/blood/OMinus,
-/obj/item/reagent_containers/iv_bag/blood/OMinus,
-/obj/item/reagent_containers/iv_bag/blood/OMinus,
-/obj/item/reagent_containers/iv_bag/blood/OMinus,
-/obj/item/reagent_containers/iv_bag/blood/OMinus,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/cable{
+ d2 = 2;
+ icon_state = "0-2"
+ },
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/machinery/power/apc/off_station/empty_charge/directional/north{
+ cell_type = 15000
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "browncorner"
+ },
+/area/ruin/space/deepstorage)
"aq" = (
-/obj/machinery/iv_drip,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
"ar" = (
-/turf/simulated/floor/plasteel,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 10
+ },
/area/ruin/space/unpowered)
"as" = (
-/obj/machinery/atmospherics/portable/canister/oxygen,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"at" = (
-/obj/machinery/atmospherics/portable/canister/air,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/blob/normal/deepstorage,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
"au" = (
-/obj/machinery/door/airlock/highsecurity{
- name = "Bunker"
- },
-/turf/simulated/floor/plasteel,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"av" = (
-/obj/structure/toilet{
+/obj/structure/railing/corner{
dir = 4
},
-/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
- },
-/area/ruin/space/unpowered)
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
"aw" = (
-/obj/structure/mirror{
- pixel_x = 30
- },
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+/obj/structure/window/reinforced/survival_pod{
+ dir = 1
},
-/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
+/obj/structure/window/reinforced/survival_pod{
+ dir = 4
},
+/obj/structure/girder/reinforced,
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"ax" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/flashlight,
-/obj/item/flashlight,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"ay" = (
-/obj/structure/table,
-/obj/item/gun/projectile/automatic/wt550{
- pixel_x = -3;
- pixel_y = 6
- },
-/obj/item/gun/projectile/automatic/wt550{
- pixel_x = 2
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/office/dark{
+ dir = 1
},
-/obj/structure/reagent_dispensers/peppertank{
- pixel_y = 30
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"az" = (
-/obj/structure/table,
-/obj/item/storage/backpack/duffel/security{
- pixel_y = 6
+/obj/structure/fence/door/opened{
+ dir = 4
},
-/turf/simulated/floor/plasteel,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"aA" = (
-/obj/structure/table,
-/obj/item/radio{
- pixel_x = -4
+/obj/structure/railing{
+ dir = 4
},
-/obj/item/radio,
-/obj/item/radio{
- pixel_x = 4
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs"
},
-/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"aB" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal{
- amount = 50;
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/stack/rods{
- amount = 50
- },
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/flora/ausbushes/grassybush,
+/obj/structure/window/reinforced,
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
"aC" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/brute{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/item/storage/firstaid/brute,
-/turf/simulated/floor/plasteel,
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"aD" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/item/storage/firstaid/regular,
-/obj/machinery/light/small{
- dir = 4
+/obj/effect/spawner/window/plastitanium,
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 8;
+ id_tag = "DS_mostfrontshutter"
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"aE" = (
-/obj/structure/closet/crate/radiation,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
"aF" = (
-/obj/structure/closet/cardboard,
-/obj/item/food/beans,
-/obj/item/food/beans,
-/obj/item/food/beans,
-/obj/item/food/beans,
-/obj/item/food/beans,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs";
+ dir = 8
+ },
/area/ruin/space/unpowered)
"aG" = (
-/obj/structure/closet/cardboard,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
"aH" = (
-/obj/machinery/economy/vending/clothing,
-/turf/simulated/floor/wood{
- icon_state = "wood-broken"
+/obj/machinery/light/small{
+ dir = 1
},
-/area/ruin/space/unpowered)
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/powered)
"aI" = (
-/turf/simulated/floor/wood{
- icon_state = "wood-broken2"
+/obj/machinery/light/small{
+ dir = 4
},
-/area/ruin/space/unpowered)
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
"aJ" = (
-/obj/structure/bed,
-/turf/simulated/floor/wood,
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"aK" = (
+/obj/structure/blob/normal/deepstorage,
/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
+ icon_state = "dark"
},
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"aL" = (
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = -8
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed{
+ dir = 1
},
/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
+ icon_state = "whiteredcorner";
+ dir = 1
},
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"aM" = (
-/obj/structure/table,
-/obj/item/clothing/gloves/combat,
-/obj/item/clothing/gloves/combat,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/turf/simulated/floor/plasteel,
+/turf/simulated/mineral,
/area/ruin/space/unpowered)
"aN" = (
-/obj/structure/table,
-/obj/item/reagent_scanner/adv,
-/obj/item/healthanalyzer,
-/obj/item/healthanalyzer,
-/obj/item/stack/medical/bruise_pack,
-/obj/item/stack/medical/bruise_pack,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing{
+ dir = 9
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/structure/chair/office{
+ dir = 1
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"aO" = (
-/obj/structure/closet/radiation,
-/obj/machinery/light{
- dir = 8
- },
-/turf/simulated/floor/plasteel,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"aP" = (
-/obj/structure/closet/cardboard,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/item/reagent_containers/drinks/cans/cola,
-/obj/machinery/light{
- dir = 4
+/obj/effect/turf_decal/box,
+/obj/structure/cable/yellow,
+/turf/simulated/floor/plasteel{
+ icon_state = "brown"
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"aQ" = (
-/obj/structure/closet/wardrobe/pink,
-/turf/simulated/floor/wood{
- icon_state = "wood-broken2"
- },
-/area/ruin/space/unpowered)
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
"aR" = (
-/turf/simulated/floor/wood,
-/area/ruin/space/unpowered)
+/obj/machinery/door/airlock/highsecurity{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
"aS" = (
-/obj/structure/bed,
-/turf/simulated/floor/wood{
- icon_state = "wood-broken"
+/obj/structure/railing/cap,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs";
+ dir = 1
},
/area/ruin/space/unpowered)
"aT" = (
-/obj/machinery/shower{
+/obj/structure/table/reinforced,
+/obj/item/kitchen/knife/combat/survival,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
dir = 4
},
-/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
- },
/area/ruin/space/unpowered)
"aU" = (
-/obj/machinery/shower{
- dir = 8
+/obj/structure/chair{
+ dir = 1
},
/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
+ icon_state = "dark"
},
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"aV" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/cable{
+ d2 = 2;
+ icon_state = "0-2"
},
-/obj/structure/table,
-/obj/item/storage/firstaid/toxin,
-/obj/item/storage/firstaid/toxin,
-/obj/item/storage/pill_bottle/charcoal,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/machinery/computer/monitor,
+/obj/machinery/door_control{
+ pixel_y = 25;
+ id = "DS_Rad";
+ name = "Generator Storage"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "browncorner"
+ },
+/area/ruin/space/deepstorage)
"aW" = (
-/obj/structure/table,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/flashlight/flare,
-/obj/item/crowbar/red,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing/corner,
+/obj/effect/turf_decal/stripes/corner,
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"aX" = (
-/obj/machinery/suit_storage_unit,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
"aY" = (
-/obj/structure/closet/wardrobe/pink,
-/obj/machinery/light/small{
- dir = 8
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
},
-/turf/simulated/floor/wood,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"aZ" = (
-/turf/simulated/floor/wood{
- icon_state = "wood-broken"
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
},
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"ba" = (
-/obj/structure/bed,
-/turf/simulated/floor/wood{
- icon_state = "wood-broken2"
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/flashlight,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 8
},
/area/ruin/space/unpowered)
"bb" = (
-/obj/machinery/shower{
- dir = 4
- },
-/obj/item/soap,
-/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
- },
-/area/ruin/space/unpowered)
+/obj/structure/flora/junglebush/large,
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
"bc" = (
-/obj/effect/spawner/window/reinforced,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
"bd" = (
-/obj/structure/closet/cardboard,
-/obj/item/storage/box/donkpockets,
-/obj/item/storage/box/donkpockets,
-/obj/item/storage/box/donkpockets,
-/obj/item/storage/box/donkpockets,
-/obj/item/storage/box/donkpockets,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"be" = (
-/obj/machinery/door/airlock/highsecurity{
- name = "Bunker"
- },
+/obj/structure/table/glass,
/turf/simulated/floor/plasteel{
- icon_state = "freezerfloor"
+ dir = 5;
+ icon_state = "vault"
},
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"bf" = (
-/obj/structure/closet/fireaxecabinet{
- icon_state = "fireaxe0130";
- pixel_y = 28
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "black"
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"bg" = (
-/obj/machinery/sleeper{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/ore_box,
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 9
},
-/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"bh" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/structure/railing{
+ dir = 4
},
-/turf/simulated/floor/plasteel,
+/obj/structure/dispenser/oxygen,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bi" = (
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = -8
+/obj/structure/railing{
+ dir = 1
},
-/turf/simulated/floor/plasteel,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"bj" = (
-/obj/machinery/sleeper{
- dir = 4
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 8
},
-/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"bk" = (
-/obj/machinery/processor{
- name = "processor"
+/obj/structure/railing/corner{
+ dir = 8
},
-/turf/simulated/floor/plasteel,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bl" = (
-/obj/structure/table,
-/obj/item/storage/fancy/matches,
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"bm" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder,
-/turf/simulated/floor/plasteel,
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"bn" = (
-/obj/structure/table,
-/obj/machinery/recharger,
-/turf/simulated/floor/plasteel,
+/obj/structure/flora/ash/rock/style_random,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"bo" = (
-/obj/machinery/hydroponics/constructable{
- pixel_y = 9
- },
-/turf/simulated/floor/light,
-/area/ruin/space/unpowered)
+/obj/machinery/light/small,
+/obj/structure/rack,
+/obj/item/stack/cable_coil/yellow,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
"bp" = (
-/obj/machinery/hydroponics/constructable{
- pixel_y = 9
- },
-/obj/machinery/light{
- dir = 1
+/obj/structure/rack,
+/obj/item/pickaxe,
+/obj/machinery/light/small{
+ dir = 8
},
-/turf/simulated/floor/light,
-/area/ruin/space/unpowered)
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/powered)
"br" = (
-/obj/structure/cable{
- d2 = 4;
- icon_state = "0-4"
- },
-/obj/machinery/power/port_gen/pacman,
-/turf/simulated/floor/plasteel,
+/obj/structure/table/reinforced,
+/obj/item/t_scanner/adv_mining_scanner,
+/turf/simulated/floor/plasteel/airless,
/area/ruin/space/unpowered)
"bs" = (
-/obj/structure/cable{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/obj/machinery/power/smes,
-/turf/simulated/floor/plasteel,
+/obj/structure/rack,
+/obj/item/flashlight/flare,
+/obj/item/flashlight/flare,
+/obj/item/flashlight/flare,
+/turf/simulated/floor/plasteel/airless,
/area/ruin/space/unpowered)
"bu" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/structure/railing{
+ dir = 6
},
-/obj/structure/dispenser/oxygen,
-/turf/simulated/floor/plasteel,
+/obj/structure/table,
+/obj/item/storage/firstaid/regular{
+ pixel_y = 0
+ },
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bv" = (
-/obj/machinery/biogenerator,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/railing,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
"bw" = (
-/obj/machinery/light,
-/obj/machinery/hydroponics/constructable{
- pixel_y = 9
- },
-/turf/simulated/floor/light,
+/turf/simulated/floor/chasm/space_ruin/airless,
/area/ruin/space/unpowered)
"bx" = (
-/obj/machinery/autolathe,
-/turf/simulated/floor/plasteel,
+/obj/structure/table/reinforced,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 8
+ },
/area/ruin/space/unpowered)
"by" = (
-/obj/structure/cable{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/machinery/power/terminal{
- dir = 1
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution"
},
-/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"bz" = (
-/obj/structure/reagent_dispensers/fueltank,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/machinery/atmospherics/portable/canister/oxygen,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bA" = (
-/obj/structure/table,
-/obj/machinery/kitchen_machine/microwave,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
- },
+/obj/structure/flora/rock,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"bB" = (
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/machinery/light/small{
+ dir = 4
},
-/area/ruin/space/unpowered)
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/powered)
"bC" = (
-/obj/structure/table,
-/obj/item/storage/box/donkpockets,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/machinery/light/small,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
},
-/area/ruin/space/unpowered)
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
"bD" = (
-/obj/structure/table,
-/obj/item/food/beans,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
- },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"bE" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/railing{
+ dir = 6
},
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
},
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"bF" = (
-/obj/machinery/seed_extractor,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"bG" = (
-/obj/machinery/power/apc/off_station/directional/west{
- keep_preset_name = 1;
- name = "Bunker APC"
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/cable{
- d2 = 4;
- icon_state = "0-4"
+/obj/structure/railing{
+ dir = 1
},
-/turf/simulated/floor/plasteel,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"bG" = (
+/obj/structure/railing/cap,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bH" = (
-/obj/structure/cable{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs"
},
-/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"bI" = (
-/obj/structure/cable{
- d1 = 1;
- d2 = 8;
- icon_state = "1-8"
+/obj/structure/rack,
+/obj/item/pickaxe,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 4
},
-/turf/simulated/floor/plasteel,
/area/ruin/space/unpowered)
"bJ" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"bK" = (
-/obj/structure/table,
-/obj/item/kitchen/knife,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/window/reinforced,
+/obj/machinery/light/small{
+ dir = 1
},
-/area/ruin/space/unpowered)
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
+"bK" = (
+/obj/effect/spawner/window/plastitanium,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
"bL" = (
-/obj/structure/table,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/structure/railing/cap{
+ dir = 4
},
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bM" = (
-/obj/structure/table,
-/obj/item/kitchen/utensil/fork,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
- },
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bN" = (
-/obj/machinery/economy/vending/hydronutrients,
-/turf/simulated/floor/plasteel,
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"bO" = (
-/obj/machinery/space_heater,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing{
+ dir = 6
+ },
+/obj/structure/chair/office{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
"bP" = (
-/obj/structure/chair/office/dark{
- dir = 4
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/mob/living/simple_animal/hostile/pirate,
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"bQ" = (
-/obj/structure/table/reinforced,
-/turf/simulated/floor/plasteel,
+/obj/item/stack/ore/glass/basalt{
+ pixel_y = 8;
+ pixel_x = 5
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
/area/ruin/space/unpowered)
"bR" = (
-/obj/machinery/smartfridge,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/machinery/light/small{
+ dir = 1
},
-/area/ruin/space/unpowered)
+/turf/simulated/floor/chasm/space_ruin/airless,
+/area/ruin/space/powered)
"bS" = (
-/obj/machinery/light/small,
-/turf/simulated/floor/plasteel{
- icon_state = "bar"
+/obj/structure/flora/rock/jungle,
+/obj/structure/window/reinforced{
+ dir = 4
},
-/area/ruin/space/unpowered)
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
"bT" = (
-/obj/machinery/economy/vending/hydroseeds{
- slogan_delay = 700
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
"bU" = (
-/obj/machinery/light/small{
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"bV" = (
+/obj/structure/railing{
dir = 8
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"bV" = (
-/obj/structure/chair/office/dark,
-/mob/living/simple_animal/hostile/pirate,
-/turf/simulated/floor/plasteel,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"bW" = (
-/obj/structure/computerframe,
-/turf/simulated/floor/plasteel,
+/obj/structure/railing/corner,
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"bX" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen{
- dir = 1;
- name = "Bunker Entrance";
- network = list("Bunker1");
- pixel_y = 2
+/obj/structure/railing,
+/obj/effect/turf_decal/stripes/line,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
+"bY" = (
+/obj/structure/railing,
+/obj/structure/chair/office{
+ dir = 1
},
-/turf/simulated/floor/plasteel,
+/turf/simulated/floor/catwalk/airless,
/area/ruin/space/unpowered)
-"bY" = (
+"bZ" = (
/obj/structure/table/reinforced,
/obj/machinery/door_control{
- id = "bunker1";
- name = "Inner Doors";
- pixel_y = 6
- },
-/obj/machinery/door_control{
- id = "bunker2";
- name = "Outer Doors";
- pixel_y = -4
+ pixel_y = 7;
+ pixel_x = 4;
+ id = "DS_mostfrontshutter";
+ name = "emergency shutters"
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"bZ" = (
-/obj/machinery/door/poddoor{
- id_tag = "bunker1";
- name = "Bunker Door";
- tag = "inner"
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
},
-/turf/simulated/floor/plating,
-/area/ruin/space/unpowered)
+/area/ruin/space/deepstorage)
"ca" = (
-/turf/simulated/floor/plating,
-/area/ruin/space/unpowered)
-"cb" = (
-/obj/machinery/camera{
- network = list("Bunker1")
+/obj/structure/closet/crate/radiation,
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/light/small{
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ruin/space/unpowered)
+/obj/item/stack/sheet/mineral/uranium{
+ amount = 20
+ },
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"cb" = (
+/obj/structure/flora/grass/jungle,
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
"cc" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/flora/rock/jungle,
/obj/machinery/light/small{
- dir = 4
+ dir = 1
},
-/turf/simulated/floor/plating,
-/area/ruin/space/unpowered)
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
"cd" = (
-/obj/machinery/door/poddoor{
- id_tag = "bunker2";
- name = "Bunker Door";
- tag = "outer"
+/obj/structure/railing{
+ dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
"ce" = (
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"cZ" = (
-/obj/effect/decal/remains/robot,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"iZ" = (
-/turf/simulated/mineral/random/high_chance,
-/area/ruin/space/unpowered)
-"kM" = (
-/obj/structure/spawner/mining/hivelord,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"mL" = (
-/obj/machinery/tcomms/relay/ruskie{
- network_id = "STORAGE-RELAY"
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
+"ch" = (
+/obj/structure/table/reinforced,
+/obj/item/paper/fluff/ruins/deepstorage/log3,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"cj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ck" = (
+/obj/structure/railing/cap{
+ dir = 10
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs";
+ dir = 1
},
-/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"pv" = (
-/obj/machinery/porta_turret/syndicate,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"qn" = (
-/obj/effect/decal/remains/human,
-/turf/simulated/floor/plating/asteroid/airless,
/area/ruin/space/unpowered)
-"rb" = (
-/mob/living/simple_animal/hostile/pirate/ranged,
+"cm" = (
+/obj/structure/railing/cap{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs"
+ },
+/area/ruin/space/deepstorage)
+"cn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"co" = (
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/obj/structure/barricade/wooden/crude{
+ layer = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"cs" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 6;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"ct" = (
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"cx" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"cA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered";
+ dir = 5
+ },
+/area/ruin/space/deepstorage)
+"cE" = (
+/obj/structure/morgue{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"cJ" = (
+/obj/structure/filingcabinet,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"cN" = (
+/obj/item/trash/tastybread,
/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-"yU" = (
-/obj/structure/spawner/mining/goliath,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"zk" = (
+/area/ruin/space/deepstorage)
+"cP" = (
+/obj/item/kirbyplants/plant27,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"cR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"cT" = (
+/obj/item/kirbyplants/plant21,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"cU" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"cX" = (
/obj/structure/chair{
dir = 8
},
-/mob/living/simple_animal/hostile/pirate/ranged,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"cY" = (
+/obj/structure/railing,
/turf/simulated/floor/plasteel{
- icon_state = "bar"
+ icon_state = "dark"
},
+/area/ruin/space/deepstorage)
+"cZ" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/simulated/floor/engine/airless,
/area/ruin/space/unpowered)
-"KB" = (
-/obj/structure/spawner/mining/basilisk,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"Pm" = (
-/obj/effect/mine/explosive,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"SX" = (
-/obj/structure/flora/ash/rock/style_random,
-/turf/simulated/floor/plating/asteroid/airless,
-/area/ruin/space/unpowered)
-"To" = (
-/mob/living/simple_animal/hostile/pirate,
+"dd" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"dg" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/kirbyplants/plant21,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"dh" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"dj" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"dk" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id_tag = "DS_Quartermaster"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"dn" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
/turf/simulated/floor/plasteel,
-/area/ruin/space/unpowered)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(6,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-"}
-(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-"}
-(12,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-SX
-SX
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(13,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-qn
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-kM
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-qn
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-yU
-ce
-SX
-ce
-ce
-ce
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-qn
-ce
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-ab
-ce
-ce
-ce
-ce
-qn
-ce
-SX
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-iZ
-ab
-ab
-aa
-"}
-(17,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-yU
-ce
-ce
-SX
-ce
-ce
-ce
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-SX
-SX
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(18,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ab
-ce
-ce
-kM
-ab
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(19,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-"}
-(20,1,1) = {"
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(21,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(22,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-iZ
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-cZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(23,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-kM
-ce
-ce
-SX
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-"}
-(24,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-SX
-ce
-ce
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ce
-ce
-ce
-ce
-Pm
-ce
-ce
-ce
-ab
-ab
-ab
-"}
-(25,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ab
-ab
-ce
-ce
-qn
-ce
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ac
-bg
-bj
-ac
-bx
-ar
-bG
-bO
-bU
-ar
-bZ
-ca
-ca
-ac
-ce
-ce
-Pm
-ce
-ce
-ce
-ce
-cZ
-ce
-ce
-ab
-ab
-"}
-(26,1,1) = {"
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ar
-ar
-ac
-br
-ar
-bH
-ar
-ar
-ar
-bZ
-ca
-ca
-ac
-pv
-ce
-ce
-ce
-cZ
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-"}
-(27,1,1) = {"
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ce
-ce
-ce
-ce
-ab
-ce
-ce
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-au
-ac
-bs
-by
-bI
-ar
-ar
-ar
-ac
-ca
-ca
-ac
-ce
-ce
-ce
-ce
-ce
-Pm
-ce
-ce
-ce
-Pm
-ce
-ce
-"}
-(28,1,1) = {"
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ac
-aH
-aQ
-aY
-ac
-ar
-ar
-ac
-mL
-ar
-ar
-ar
-ar
-bX
-ac
-cb
-ca
-cd
-ce
-ce
-Pm
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-"}
-(29,1,1) = {"
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-yU
-ce
-qn
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-aI
-aR
-aZ
-au
-ar
-ar
-ac
-ar
-ar
-ar
-ar
-bV
-bW
-ac
-cc
-ca
-cd
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ce
-ce
-ce
-ce
-"}
-(30,1,1) = {"
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-aJ
-aS
-ba
-ac
-ar
-ar
-au
-ar
-ar
-ar
-bP
-ar
-bY
-ac
-ac
-ac
-ac
-ce
-ce
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-"}
-(31,1,1) = {"
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-SX
-SX
-ce
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-bh
-ar
-ac
-bu
-bz
-bJ
-bQ
-bW
-bQ
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(32,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-SX
-SX
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ac
-av
-aK
-aT
-bb
-ac
-ar
-ar
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(33,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ac
-aw
-aL
-aU
-aU
-be
-ar
-ar
-ar
-ar
-bA
-bK
-bR
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(34,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ar
-ar
-ar
-ar
-bB
-bB
-bS
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(35,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ac
-ax
-aM
-aV
-ac
-bf
-ar
-bk
-ac
-ar
-bC
-bL
-bB
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(36,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ac
-ay
-ar
-ar
-bc
-ar
-ar
-bl
-ac
-ar
-bD
-bM
-bB
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-aa
-"}
-(37,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-az
-ar
-ar
-bc
-ar
-rb
-bm
-ac
-ar
-bE
-zk
-bB
-ac
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-aa
-"}
-(38,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-aA
-ar
-To
-au
-ar
-ar
-bn
-ac
-ar
-ar
-ar
-ar
-ac
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(39,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-aB
-ar
-ar
-bc
-ar
-ar
-ar
-ar
-ar
-ar
-ar
-ar
-ac
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(40,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-aC
-ar
-ar
-bc
-ar
-bi
-ar
-ar
-bv
-bF
-bN
-bT
-ac
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(41,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-aD
-aN
-aW
-ac
-au
-ac
-ac
-au
-ac
-ac
-ac
-ac
-ac
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(42,1,1) = {"
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ad
-aj
-ap
-ac
-ac
-ac
-ac
-ac
-ar
-ac
-bp
-ar
-bw
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(43,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ae
-ak
-aq
-ac
-aE
-aO
-aX
-aX
-ar
-ac
-bo
-ar
-bo
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(44,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ac
-af
-al
-ar
-au
-ar
-ar
-ar
-ar
-ar
-ac
-bo
-ar
-bo
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(45,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-SX
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ac
-ag
-am
-ar
-ac
-aF
-aF
-aF
-ar
-To
-ac
-bp
-ar
-bw
-ac
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(46,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-SX
-SX
-ce
-ce
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ac
-ah
-an
-as
-ac
-aF
-aF
-aF
-bd
-bd
-ac
-ac
-ac
-ac
-ac
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-aa
-"}
-(47,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-qn
-ce
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ac
-ai
-ao
-at
-ac
-aG
-aG
-aG
-bd
-bd
-ac
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-aa
-"}
-(48,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-aG
-aP
-aG
-bd
-bd
-ac
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-aa
-"}
-(49,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-yU
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(50,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-qn
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(51,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(52,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(53,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-SX
-SX
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-"}
-(54,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-SX
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-SX
-SX
-SX
-ce
-ab
-ab
-ab
-ab
-iZ
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-"}
-(55,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-"}
-(56,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-qn
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-"}
-(57,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-KB
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-aa
-"}
-(58,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-SX
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-SX
-SX
-SX
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-iZ
-ab
-ab
-ab
-aa
-"}
-(59,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-SX
-SX
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-"}
-(60,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-KB
-ce
-ce
-SX
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-qn
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(61,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-KB
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(62,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ce
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-qn
-ce
-ce
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(63,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ce
-ce
-ce
+/area/ruin/space/deepstorage)
+"dt" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"dA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/clothing/head/welding,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"dC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/chair,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"dJ" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"dL" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered"
+ },
+/area/ruin/space/deepstorage)
+"dO" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"dR" = (
+/obj/machinery/constructable_frame/machine_frame,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"dT" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/salvage/ruin/pirate,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"dX" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/filingcabinet,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ee" = (
+/obj/machinery/door/window/survival_pod{
+ dir = 4;
+ name = "lift doors"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"eh" = (
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"em" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"eq" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"es" = (
+/obj/machinery/door/poddoor/shutters/radiation{
+ id_tag = "DS_Rad"
+ },
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"et" = (
+/obj/structure/table/tray,
+/obj/item/scalpel{
+ pixel_y = 16
+ },
+/obj/item/circular_saw{
+ pixel_y = 5
+ },
+/obj/item/lighter{
+ pixel_y = 1;
+ pixel_x = 8
+ },
+/obj/structure/window/reinforced/tinted,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"eu" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ew" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"eB" = (
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"eF" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/mechanical,
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"eI" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"eN" = (
+/obj/structure/grille/broken,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"eP" = (
+/obj/structure/railing/cap{
+ dir = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"eS" = (
+/obj/structure/railing/cap{
+ dir = 9
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"eZ" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"ff" = (
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"fi" = (
+/obj/structure/blob/normal/deepstorage,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"fj" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"fk" = (
+/obj/machinery/hydroponics/constructable{
+ pixel_y = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"fn" = (
+/obj/item/reagent_containers/glass/beaker/waterbottle/empty,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"fp" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 10;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"ft" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"fw" = (
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"fD" = (
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = -4
+ },
+/obj/structure/mirror{
+ broken = 1;
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_y = -28
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"fF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"fK" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger{
+ pixel_y = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"fN" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"fS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/item/organ/internal/kidneys,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"fU" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/window/reinforced,
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
+"fV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"fX" = (
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2;
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"fZ" = (
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/machinery/light/small,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ge" = (
+/obj/structure/table/glass,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"gp" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
+ },
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"gq" = (
+/obj/structure/rack,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"gr" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/item/organ/internal/lungs,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"gC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/kirbyplants/plant18,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"gE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"gF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"gJ" = (
+/obj/item/chair,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"gK" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"gO" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/window/reinforced,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
+"gP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/railing{
+ dir = 5
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"gS" = (
+/obj/structure/grille/broken,
+/obj/effect/decal/cleanable/glass,
+/obj/effect/landmark/damageturf,
+/obj/item/shard,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"gZ" = (
+/obj/structure/closet/crate,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"hd" = (
+/obj/structure/chair/sofa/bench{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"hg" = (
+/obj/item/kirbyplants/plant27,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"hh" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 4;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"hj" = (
+/obj/structure/filingcabinet,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"hk" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/chasm/space_ruin/airless,
+/area/ruin/space/powered)
+"hm" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"hn" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"ho" = (
+/obj/effect/spawner/window/reinforced/grilled,
+/obj/machinery/door/poddoor/shutters{
+ dir = 2;
+ id_tag = "DS_Medbay"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"hp" = (
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512";
+ name = "Guard Wing"
+ },
+/obj/structure/barricade/wooden/crude{
+ layer = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"ht" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"hu" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"hz" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner"
+ },
+/area/ruin/space/deepstorage)
+"hB" = (
+/obj/structure/rack,
+/obj/item/storage/firstaid/toxin,
+/obj/item/storage/firstaid/toxin,
+/obj/item/storage/pill_bottle/charcoal,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"hH" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"hK" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/sign/poster/contraband/power{
+ pixel_x = -32
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"hN" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"hU" = (
+/obj/structure/chair/sofa/bench{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"hV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"hW" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/multi_tile/impassable{
+ id_tag = "DS_Tram"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"hY" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"hZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/cardboard,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"ia" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/clothing/head/helmet/swat,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"ic" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"if" = (
+/obj/structure/girder/reinforced,
+/obj/structure/window/reinforced/survival_pod{
+ dir = 4
+ },
+/obj/structure/window/reinforced/survival_pod,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"ih" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"im" = (
+/obj/structure/filingcabinet/chestdrawer,
+/obj/structure/window/reinforced/tinted,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"iq" = (
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "brown"
+ },
+/area/ruin/space/deepstorage)
+"ir" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered"
+ },
+/area/ruin/space/deepstorage)
+"iu" = (
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"iG" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"iJ" = (
+/obj/machinery/atmospherics/air_sensor,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"iK" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"iL" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"iM" = (
+/obj/machinery/atmospherics/air_sensor,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
+"iX" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/reinforced/normal{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"iZ" = (
+/turf/simulated/mineral/random/high_chance,
+/area/ruin/space/unpowered)
+"ja" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"je" = (
+/obj/structure/table,
+/obj/item/fan{
+ pixel_y = 4;
+ pixel_x = -2
+ },
+/obj/item/salvage/ruin/nanotrasen,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"jf" = (
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"jj" = (
+/obj/machinery/door/airlock/highsecurity{
+ req_access_txt = "512";
+ name = "Guard Store Room"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"jn" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"jo" = (
+/obj/machinery/shower{
+ dir = 8;
+ pixel_x = -4;
+ pixel_y = -4
+ },
+/obj/structure/curtain/open/shower,
+/obj/item/soap,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"jp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/iv_drip,
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 5;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"jq" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"jr" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ju" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/cobweb2,
+/obj/structure/sign/poster/contraband/missing_gloves{
+ pixel_y = 32
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"jv" = (
+/obj/machinery/economy/vending/snack,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"jy" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 10;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"jA" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/powered)
+"jB" = (
+/turf/simulated/wall/indestructible/riveted,
+/area/ruin/space/deepstorage)
+"jF" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"jG" = (
+/obj/structure/filingcabinet,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"jM" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"jN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/window/survival_pod{
+ dir = 4;
+ name = "lift doors"
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"jO" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"jP" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"jT" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/vault{
+ locked = 1;
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"jZ" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"ka" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"kc" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/holosign/barrier/engineering,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"ke" = (
+/obj/structure/flora/rock/pile,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"kh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/bedsheet,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"ko" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"kp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/window/reinforced{
+ dir = 8
+ },
+/obj/effect/turf_decal/loading_area{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"kr" = (
+/obj/item/flashlight{
+ pixel_y = -4;
+ pixel_x = 4
+ },
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"ks" = (
+/obj/structure/rack,
+/obj/item/storage/box/donkpockets,
+/obj/item/storage/box/donkpockets,
+/obj/item/storage/box/donkpockets,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ku" = (
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/decal/cleanable/cobweb,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"kA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table_frame,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"kC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/poddoor/shutters/radiation{
+ id_tag = "DS_Rad"
+ },
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"kE" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"kG" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"kI" = (
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/clothing/gloves/combat,
+/obj/item/clothing/gloves/combat,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"kM" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"kR" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"kY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/blob/normal/deepstorage,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"kZ" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"lb" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"lf" = (
+/obj/structure/table/glass/reinforced,
+/obj/machinery/computer/med_data/laptop,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"lg" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"lh" = (
+/obj/effect/turf_decal/box,
+/obj/structure/cable/yellow,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"ll" = (
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/stack/sheet/cardboard,
+/obj/item/stack/cable_coil,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"lm" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/bedsheet,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"lo" = (
+/obj/item/bedsheet,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"lt" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"lE" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"lH" = (
+/obj/structure/railing{
+ dir = 6
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"lL" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"lO" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/item/trash/cheesie,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"lQ" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/crematorium{
+ dir = 4;
+ id = 123
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"lV" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"lY" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/chasm/space_ruin/airless,
+/area/ruin/space/powered)
+"mc" = (
+/obj/structure/barricade/wooden/crude{
+ layer = 4
+ },
+/obj/machinery/door/airlock/centcom{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"mf" = (
+/obj/effect/spawner/window/plastitanium,
+/obj/machinery/door/poddoor/shutters,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"mg" = (
+/turf/simulated/mineral/ancient,
+/area/ruin/space/deepstorage)
+"mu" = (
+/obj/structure/railing,
+/obj/effect/turf_decal/stripes/line,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"mx" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"mA" = (
+/turf/simulated/floor/mineral/titanium/blue,
+/area/ruin/space/deepstorage)
+"mC" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/deepstorage)
+"mE" = (
+/obj/machinery/door/airlock/hatch,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"mF" = (
+/obj/machinery/optable,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"mG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"mI" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"mL" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless,
+/area/ruin/space/unpowered)
+"mM" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"mN" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"mO" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/machinery/computer/nonfunctional{
+ dir = 8;
+ name = "elevator controls"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"mQ" = (
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"mR" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"mT" = (
+/obj/machinery/door/window/survival_pod{
+ dir = 4;
+ name = "lift doors"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"mU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"na" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ne" = (
+/obj/machinery/economy/vending/cola,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"nh" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/can,
+/obj/item/trash/waffles,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"nk" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"nl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/noticeboard{
+ pixel_x = -32;
+ layer = 5
+ },
+/obj/item/paper/fluff/ruins/deepstorage/log9,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"no" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/closet/cardboard,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"nt" = (
+/obj/structure/railing/cap{
+ dir = 6
+ },
+/obj/structure/railing/cap{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"nC" = (
+/obj/structure/railing,
+/obj/structure/reagent_dispensers/fueltank,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"nE" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"nF" = (
+/obj/item/chair/stool{
+ pixel_y = -7
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"nG" = (
+/obj/structure/table/glass,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"nJ" = (
+/obj/item/salvage/ruin/carp,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"nK" = (
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"nM" = (
+/obj/item/kirbyplants/plant22,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"nN" = (
+/obj/structure/table/reinforced,
+/obj/item/radio{
+ pixel_y = 4;
+ pixel_x = 10
+ },
+/obj/machinery/door_control{
+ pixel_y = 7;
+ pixel_x = -6;
+ id = "DS_FrontGate";
+ name = "front gate controls"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"nO" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"nQ" = (
+/obj/structure/table/glass,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"nR" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 5;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"nW" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"ob" = (
+/obj/item/trash/tapetrash,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"oj" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ol" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/deepstorage)
+"on" = (
+/obj/structure/rack,
+/obj/item/storage/firstaid/regular{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/regular,
+/turf/simulated/floor/plasteel{
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"or" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"os" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/port_gen/pacman/super,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"ou" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"oA" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred";
+ dir = 9
+ },
+/area/ruin/space/deepstorage)
+"oB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"oE" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"oH" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"oI" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"oN" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/obj/structure/railing,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"oO" = (
+/obj/item/reagent_containers/drinks/oilcan{
+ pixel_y = 4
+ },
+/obj/structure/table,
+/obj/item/paper/fluff/ruins/deepstorage/log4{
+ pixel_y = -5;
+ pixel_x = -8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"oP" = (
+/obj/structure/railing/corner,
+/obj/structure/rack,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"oX" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/restraints/handcuffs/cable/zipties{
+ pixel_y = 6
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"pa" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"pc" = (
+/obj/structure/railing/cap{
+ dir = 5
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"pf" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/structure/table,
+/obj/item/trash/syndi_cakes,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"pg" = (
+/obj/effect/spawner/window/reinforced/plasma/grilled,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"ph" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"pj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"pk" = (
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/salvage/ruin/russian,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ps" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/delivery/hollow,
+/obj/item/grenade/confetti,
+/obj/item/grenade/confetti,
+/obj/item/grenade/confetti,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"pv" = (
+/obj/structure/railing,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"pz" = (
+/obj/machinery/door/airlock/command/glass{
+ req_access_txt = "512";
+ name = "Floor Administrator's Office"
+ },
+/obj/effect/mapping_helpers/airlock/polarized{
+ id = "DScmoffice"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 2;
+ id_tag = "DScmoffice1"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"pH" = (
+/obj/structure/chair/office,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"pJ" = (
+/obj/structure/reagent_dispensers/oil,
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"pL" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"pP" = (
+/obj/effect/turf_decal/box,
+/turf/simulated/floor/plasteel/airless,
+/area/ruin/space/unpowered)
+"pQ" = (
+/obj/effect/spawner/window/shuttle,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"pV" = (
+/obj/item/salvage/ruin/brick,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"pY" = (
+/obj/structure/barricade/wooden/crude{
+ layer = 4
+ },
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"pZ" = (
+/obj/machinery/dna_scannernew,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"qa" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"qc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"qm" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"qn" = (
+/turf/template_noop,
+/area/space)
+"qp" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"qt" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "black";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"qw" = (
+/mob/living/simple_animal/hostile/spaceinfected/gateopener,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"qz" = (
+/obj/effect/turf_decal/delivery/partial{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"qD" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"qF" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"qG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"qK" = (
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2;
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"qQ" = (
+/obj/structure/closet/crate/can,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"qR" = (
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"qV" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"qZ" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"rb" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"re" = (
+/obj/item/kirbyplants/plant18,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"rf" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"rh" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"ri" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"rj" = (
+/turf/simulated/mineral,
+/area/ruin/space/deepstorage)
+"rp" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id_tag = "DS_Quartermaster"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"rr" = (
+/obj/effect/turf_decal/delivery/partial,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"ru" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/powered)
+"rx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/chair{
+ dir = 4
+ },
+/obj/item/trash/syndi_cakes,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"rA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id_tag = "DS_Quartermaster"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"rE" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"rI" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"rK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"rM" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ pixel_x = 1;
+ dir = 4;
+ pixel_y = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"rP" = (
+/obj/structure/railing/cap{
+ dir = 10
+ },
+/obj/structure/railing/cap{
+ dir = 1
+ },
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"rQ" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"rS" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"rT" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"rZ" = (
+/obj/structure/table,
+/obj/item/paper/fluff/ruins/deepstorage/log7,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"sc" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"sh" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/machinery/door_control{
+ pixel_y = 7;
+ pixel_x = 4;
+ id = "DS_FrontGate";
+ name = "Front Gate Controls"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"sk" = (
+/turf/simulated/wall/indestructible/rock,
+/area/ruin/space/deepstorage)
+"sv" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"sE" = (
+/obj/structure/table/glass/reinforced,
+/obj/item/paper_bin,
+/obj/item/pen/multi/fountain{
+ pixel_x = -6
+ },
+/obj/machinery/door_control{
+ pixel_x = -7;
+ pixel_y = 10;
+ id = "DS_Medbay";
+ name = "medical wing shutters"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"sG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"sH" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"sJ" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"sK" = (
+/obj/machinery/seed_extractor,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"sP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"sT" = (
+/obj/structure/crematorium{
+ dir = 4;
+ id = 123
+ },
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"sV" = (
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"sY" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"sZ" = (
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 1
+ },
+/area/ruin/space/unpowered)
+"ta" = (
+/obj/structure/table/glass,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner"
+ },
+/area/ruin/space/deepstorage)
+"tb" = (
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs";
+ dir = 4
+ },
+/area/ruin/space/unpowered)
+"tc" = (
+/obj/machinery/hydroponics/constructable{
+ pixel_y = 9
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"te" = (
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"tf" = (
+/obj/structure/table/reinforced,
+/obj/item/clothing/suit/hooded/explorer,
+/turf/simulated/floor/plasteel/airless,
+/area/ruin/space/unpowered)
+"tg" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/obj/structure/table/reinforced,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ti" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"tk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"tl" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"tm" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/glass,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"tp" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"tq" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"tr" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ts" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"tt" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"tu" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"tv" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"ty" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"tE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2
+ },
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"tF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/economy/vending/coffee,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"tH" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"tJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"tO" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 6
+ },
+/area/ruin/space/unpowered)
+"tP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/item/kirbyplants/plant22,
+/obj/structure/sign/biohazard{
+ pixel_x = -32
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"tT" = (
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"tU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"tY" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/reinforced/normal{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"tZ" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"uf" = (
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"um" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"un" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"uo" = (
+/obj/effect/decal/cleanable/cobweb2,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"us" = (
+/obj/effect/decal/cleanable/blood/oil,
+/obj/structure/closet/body_bag,
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"uu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred";
+ dir = 10
+ },
+/area/ruin/space/deepstorage)
+"uw" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"uz" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreencorner"
+ },
+/area/ruin/space/deepstorage)
+"uC" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"uJ" = (
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"uR" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"uT" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"uV" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"vc" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"vh" = (
+/obj/structure/sign/singulo{
+ pixel_y = -32
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"vi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"vo" = (
+/obj/item/salvage/ruin/russian,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"vq" = (
+/obj/machinery/door/airlock/highsecurity,
+/obj/machinery/door/poddoor/shutters,
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"vt" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"vu" = (
+/obj/structure/falsewall/rock_ancient,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"vx" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"vA" = (
+/obj/machinery/light/small,
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"vC" = (
+/obj/structure/chair/office/dark,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"vF" = (
+/obj/structure/railing/cap,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"vG" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door_control{
+ pixel_y = 7;
+ pixel_x = 6;
+ id = "DS_Tram";
+ name = "tram lockdown"
+ },
+/obj/machinery/door_control{
+ pixel_y = 7;
+ pixel_x = -5;
+ id = "DS_Quartermaster";
+ name = "office lockdown"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"vH" = (
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"vI" = (
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"vL" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"vM" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"vN" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"vO" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/closet/crate/can,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"vQ" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"vS" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/light/small,
+/turf/simulated/floor/mineral/titanium/blue,
+/area/ruin/space/deepstorage)
+"vX" = (
+/obj/effect/decal/cleanable/cobweb2,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"vZ" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"wb" = (
+/obj/effect/decal/cleanable/blood/oil,
+/obj/item/storage/box/bodybags,
+/obj/structure/rack,
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"wc" = (
+/obj/item/chair,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"we" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"wf" = (
+/obj/machinery/atmospherics/portable/canister/oxygen,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"wh" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"wi" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "whitegreencorner"
+ },
+/area/ruin/space/deepstorage)
+"wj" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"wo" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"wp" = (
+/obj/structure/table/reinforced,
+/obj/item/radio{
+ pixel_y = 4;
+ pixel_x = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced/tinted{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"wu" = (
+/obj/structure/table,
+/obj/item/mop,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"wv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"ww" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"wz" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/space/deepstorage)
+"wD" = (
+/obj/structure/sign/lifestar{
+ pixel_x = -32
+ },
+/turf/simulated/wall/indestructible/riveted,
+/area/ruin/space/deepstorage)
+"wH" = (
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 2;
+ id_tag = "DS_Quartermaster"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"wV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/nonfunctional{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"xg" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/reagent_dispensers/water_cooler,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"xn" = (
+/obj/structure/table/glass/reinforced,
+/obj/machinery/button/windowtint{
+ pixel_y = -1;
+ pixel_x = 7;
+ id = "DScmoffice"
+ },
+/obj/machinery/door_control{
+ pixel_x = 7;
+ pixel_y = 8;
+ id = "DScmoffice1";
+ name = "office shutters"
+ },
+/obj/item/paper/fluff/ruins/deepstorage/log5{
+ pixel_x = -6
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"xo" = (
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/tray,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"xr" = (
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"xs" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"xw" = (
+/obj/structure/table/reinforced,
+/obj/machinery/kitchen_machine/microwave,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"xC" = (
+/obj/machinery/door/airlock/highsecurity{
+ req_access_txt = "512";
+ name = "Interrogation Room"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"xF" = (
+/obj/machinery/atmospherics/unary/tank/oxygen{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"xM" = (
+/obj/machinery/door/poddoor/preopen,
+/obj/machinery/door/airlock/glass{
+ name = "Medical Wing";
+ locked = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"xS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"xT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced,
+/obj/structure/bed{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"xY" = (
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/rack,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "brown"
+ },
+/area/ruin/space/deepstorage)
+"xZ" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"yb" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/multi_tile/impassable/three_tile_ver{
+ id_tag = "DS_BossStorage";
+ name = "warehouse valuables storage blast door"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"yd" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/terminal,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"ye" = (
+/obj/structure/table/reinforced,
+/obj/item/salvage/ruin/russian,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"yf" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"yg" = (
+/obj/structure/railing,
+/obj/structure/table/reinforced,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"yl" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/obj/structure/railing/cap{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ym" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"yp" = (
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny,
+/obj/structure/railing{
+ dir = 9
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"yt" = (
+/obj/structure/railing/cap{
+ dir = 10
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"yu" = (
+/obj/structure/table/reinforced,
+/obj/item/tank/internals/oxygen,
+/obj/item/tank/internals/oxygen,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 4
+ },
+/area/ruin/space/unpowered)
+"yz" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"yB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/crate/secure/loot,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"yC" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/powered)
+"yL" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution"
+ },
+/area/ruin/space/unpowered)
+"yN" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"yP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"yQ" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"yS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/chair,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"yU" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
+"yX" = (
+/obj/structure/railing,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs";
+ dir = 8
+ },
+/area/ruin/space/unpowered)
+"yY" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/powered)
+"yZ" = (
+/obj/structure/railing/cap{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"zd" = (
+/obj/structure/rack,
+/obj/effect/decal/cleanable/cobweb2,
+/obj/item/defibrillator/loaded,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"zg" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"zh" = (
+/obj/machinery/door/airlock/highsecurity{
+ name = "Incinerator";
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"zj" = (
+/obj/structure/railing{
+ dir = 5
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/closet/cardboard,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"zk" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/powered)
+"zm" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"zs" = (
+/obj/structure/railing/cap,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal{
+ dir = 4
+ },
+/obj/item/paper/fluff/ruins/deepstorage/log6,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"zt" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/box,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 1
+ },
+/area/ruin/space/unpowered)
+"zv" = (
+/obj/effect/spawner/window/reinforced/grilled,
+/obj/machinery/door/poddoor/preopen,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"zy" = (
+/obj/machinery/door/airlock/vault{
+ locked = 1;
+ req_access_txt = "512"
+ },
+/obj/structure/fans/tiny,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"zz" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/window/reinforced,
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
+"zA" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"zD" = (
+/obj/structure/barricade/wooden/crude{
+ layer = 4
+ },
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"zG" = (
+/obj/machinery/recharge_station,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"zI" = (
+/obj/structure/blob/normal/deepstorage,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"zK" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"zL" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/chair{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"zN" = (
+/obj/item/paper/fluff/ruins/deepstorage/log2,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"zU" = (
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"zX" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 4;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"zY" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ad" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs"
+ },
+/area/ruin/space/unpowered)
+"Ai" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"Aj" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced/tinted{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Al" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"Ao" = (
+/obj/structure/chair,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Ap" = (
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
+"As" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/vault{
+ name = "Auxiliary Power Room";
+ req_access_txt = "512"
+ },
+/obj/machinery/door/poddoor/multi_tile/impassable{
+ id_tag = "DS_Engineering"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Av" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"Aw" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"Az" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"AA" = (
+/obj/machinery/door/airlock/highsecurity{
+ req_access_txt = "512";
+ name = "Evidence Storage"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"AB" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/powered)
+"AC" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/rack,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/radio{
+ pixel_x = -4
+ },
+/obj/item/radio,
+/obj/item/radio{
+ pixel_x = 4
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"AD" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"AJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"AN" = (
+/obj/machinery/door/poddoor/multi_tile/impassable/three_tile_ver{
+ id_tag = "DS_FrontGate"
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
+"AP" = (
+/obj/structure/rack,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/item/storage/box/zipties,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"AT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"AV" = (
+/obj/effect/decal/cleanable/cobweb2,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/chair,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"AZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/machinery/light,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Bf" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner"
+ },
+/area/ruin/space/deepstorage)
+"Bh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"Bi" = (
+/obj/structure/rack,
+/obj/item/clothing/glasses/night,
+/obj/item/clothing/glasses/night,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/obj/item/flashlight/lantern,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Bm" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "black";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"Br" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/constructable_frame/machine_frame,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Bt" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Bv" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/blob/normal/deepstorage,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"By" = (
+/obj/effect/landmark/damageturf,
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"BB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"BC" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"BE" = (
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"BF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/kirbyplants/plant22,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"BH" = (
+/obj/item/trash/candy,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"BI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/glass/beaker/waterbottle/empty{
+ pixel_y = 9;
+ pixel_x = -11
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"BL" = (
+/obj/effect/decal/cleanable/spiderling_remains,
+/obj/machinery/iv_drip,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"BN" = (
+/obj/structure/railing{
+ dir = 6
+ },
+/obj/effect/turf_decal{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"BO" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"BS" = (
+/obj/structure/railing/cap{
+ dir = 10
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"BU" = (
+/obj/machinery/computer/pandemic,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"BX" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/kitchen/knife/combat,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Cb" = (
+/obj/effect/decal/cleanable/glass,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ce" = (
+/obj/structure/rack,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/backpack/explorer,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"Cf" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ch" = (
+/obj/structure/railing,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ci" = (
+/obj/structure/railing,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"Cj" = (
+/obj/structure/railing/cap{
+ dir = 5
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"Ck" = (
+/obj/structure/table/glass,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Cl" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Cm" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/obj/structure/railing/cap{
+ dir = 6
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Cn" = (
+/obj/structure/safe,
+/obj/effect/turf_decal/delivery/hollow,
+/obj/item/stack/spacecash/c500,
+/obj/effect/spawner/random_spawners/ruin/deepstorage_award,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Cw" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table_frame,
+/obj/item/reagent_containers/drinks/sillycup{
+ pixel_y = -6;
+ pixel_x = -6
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"CA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/bedsheet,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"CB" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/constructable_frame,
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"CD" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/sosjerky,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"CG" = (
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"CI" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/carpet/royalblue,
+/area/ruin/space/deepstorage)
+"CO" = (
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2;
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"CP" = (
+/obj/item/reagent_containers/glass/beaker/waterbottle/empty{
+ pixel_y = -5;
+ pixel_x = -10
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"CT" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"CV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"CY" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/hydroponics/constructable{
+ pixel_y = 9
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"CZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Da" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/closet,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Db" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Dc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Dm" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/item/salvage/ruin/russian,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Dn" = (
+/obj/structure/grille/broken,
+/obj/item/shard,
+/obj/effect/decal/cleanable/glass,
+/obj/structure/blob/normal/deepstorage,
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 2;
+ id_tag = "DS_Quartermaster"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Do" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/iv_bag/blood/OMinus,
+/obj/item/reagent_containers/iv_bag/blood/OMinus,
+/obj/item/reagent_containers/iv_bag/blood/OMinus,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/vox,
+/obj/item/reagent_containers/iv_bag/slime,
+/obj/item/reagent_containers/iv_bag/salglu,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Dq" = (
+/obj/machinery/door/airlock/freezer{
+ locked = 1;
+ name = "Medical Storage"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"Dr" = (
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel/airless,
+/area/ruin/space/unpowered)
+"Ds" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Dt" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/photocopier,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Du" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"Dx" = (
+/obj/structure/window/reinforced/tinted,
+/obj/machinery/shower{
+ dir = 8;
+ pixel_x = -4;
+ pixel_y = -4
+ },
+/obj/structure/curtain/open/shower,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"Dy" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/royalblue,
+/area/ruin/space/deepstorage)
+"DC" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"DD" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"DF" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"DH" = (
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/obj/structure/sign/engineering{
+ pixel_y = 32
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"DJ" = (
+/obj/structure/table/glass,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"DK" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/deepstorage)
+"DO" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/rack,
+/obj/item/gun/energy/laser/retro,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"DR" = (
+/obj/structure/table/glass,
+/obj/item/scalpel{
+ pixel_y = 5
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"DZ" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Ei" = (
+/obj/structure/table,
+/obj/item/chair,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Ej" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Ep" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/autolathe,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Es" = (
+/obj/machinery/biogenerator,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Eu" = (
+/obj/structure/window/reinforced/tinted,
+/obj/machinery/shower{
+ dir = 8;
+ pixel_x = -4;
+ pixel_y = -4
+ },
+/obj/structure/curtain/open/shower,
+/obj/item/bikehorn/rubberducky,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"Ew" = (
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Ey" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"Ez" = (
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"EA" = (
+/obj/structure/table,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"EB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/nonfunctional,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"EI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"EJ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/nonfunctional{
+ dir = 4
+ },
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"EL" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"EP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"EX" = (
+/obj/item/gps/ruin{
+ gpstag = "Bizarre Signal"
+ },
+/turf/simulated/wall/indestructible/riveted,
+/area/ruin/space/deepstorage)
+"EZ" = (
+/obj/structure/railing/cap{
+ dir = 8
+ },
+/obj/structure/railing/cap{
+ dir = 6
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Fi" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Fk" = (
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/deepstorage)
+"Fr" = (
+/obj/effect/decal/cleanable/cobweb2,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Fw" = (
+/obj/machinery/door/airlock/glass{
+ name = "Medical Wing";
+ locked = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Fy" = (
+/obj/structure/rack,
+/obj/item/storage/box/autoinjectors,
+/obj/item/defibrillator,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"FC" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/engineeringcart,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"FE" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"FL" = (
+/obj/item/trash/cheesie,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"FN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"FS" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/blob/normal/deepstorage,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"FY" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Gb" = (
+/obj/effect/decal/cleanable/glass,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Gg" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/door_assembly/door_assembly_mhatch,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Gl" = (
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
+"Gn" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Gt" = (
+/obj/structure/closet/crate,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Gy" = (
+/obj/structure/railing{
+ dir = 6
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"GA" = (
+/obj/item/bedsheet,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"GB" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"GD" = (
+/obj/structure/railing,
+/obj/structure/table,
+/obj/item/clothing/mask/gas/explorer,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"GE" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"GH" = (
+/obj/structure/table/glass,
+/obj/item/toy/figure/crew/cmo{
+ pixel_y = 2;
+ pixel_x = 6
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"GI" = (
+/obj/structure/table/glass/reinforced,
+/obj/machinery/computer/id_upgrader{
+ access_to_give = list(512)
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"GJ" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"GL" = (
+/obj/structure/railing,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/powered)
+"GM" = (
+/obj/machinery/deepstorage_teleporter,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"GN" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger{
+ pixel_y = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"GP" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"GR" = (
+/obj/structure/railing/corner,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"GS" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"GU" = (
+/obj/effect/decal/cleanable/cobweb2,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/nonfunctional{
+ dir = 8
+ },
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"GW" = (
+/obj/structure/railing,
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"GX" = (
+/obj/structure/railing/cap{
+ dir = 1
+ },
+/obj/structure/railing/cap{
+ dir = 10
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"Ha" = (
+/obj/item/kirbyplants/plant27,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Hj" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"Hl" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Hx" = (
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"HC" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"HE" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/reagent_dispensers/water_cooler,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"HK" = (
+/turf/simulated/floor/plasteel/airless,
+/area/ruin/space/unpowered)
+"HN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"HP" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/item/clothing/glasses/goggles,
+/obj/item/reagent_containers/drinks/coffee{
+ pixel_y = 14;
+ pixel_x = 8
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Id" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"Ik" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs"
+ },
+/area/ruin/space/deepstorage)
+"Ir" = (
+/obj/structure/door_assembly/door_assembly_mhatch,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Is" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/ausbushes/grassybush,
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
+"Iv" = (
+/obj/structure/railing/cap{
+ dir = 10
+ },
+/obj/item/salvage/ruin/pirate,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Iw" = (
+/obj/item/salvage/ruin/pirate,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"II" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"IJ" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"IN" = (
+/obj/machinery/door/airlock/glass,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"IP" = (
+/obj/effect/spawner/window/reinforced/grilled,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"IR" = (
+/obj/effect/turf_decal/delivery/hollow,
+/obj/structure/safe,
+/obj/item/stack/spacecash/c500,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"IY" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"Ja" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Je" = (
+/obj/structure/railing/corner,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
+"Jh" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ji" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Jl" = (
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"Js" = (
+/obj/item/bedsheet,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Jx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/office/dark,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"Jy" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"JA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/railing{
+ dir = 10
+ },
+/obj/machinery/light,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"JF" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred";
+ dir = 6
+ },
+/area/ruin/space/deepstorage)
+"JH" = (
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"JI" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"JK" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"JR" = (
+/obj/machinery/light/small,
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"JU" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "vault";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"JV" = (
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny,
+/obj/structure/railing/cap{
+ dir = 9
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"JW" = (
+/obj/machinery/door/poddoor/preopen,
+/obj/machinery/door/airlock/virology/glass{
+ name = "Virology"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"JZ" = (
+/obj/structure/chair,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Ka" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/wrench,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ icon_state = "browncorner";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"Kg" = (
+/obj/structure/toilet{
+ pixel_y = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"Kh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/closet/radiation,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "browncorner"
+ },
+/area/ruin/space/deepstorage)
+"Kq" = (
+/obj/structure/railing/cap{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"Kv" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"Kw" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Kx" = (
+/obj/structure/toilet{
+ pixel_y = 8
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"Ky" = (
+/obj/machinery/computer/nonfunctional{
+ dir = 8;
+ name = "elevator controls"
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"KB" = (
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
+"KD" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/mineral/titanium/blue,
+/area/ruin/space/deepstorage)
+"KE" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/mineral/titanium/blue,
+/area/ruin/space/deepstorage)
+"KI" = (
+/obj/structure/railing/cap{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "stairs";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"KP" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"KQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/noticeboard{
+ pixel_y = -32
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"KS" = (
+/obj/structure/sign/poster/official/safety_internals{
+ pixel_x = 32
+ },
+/obj/item/chair/stool{
+ pixel_y = -7;
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"KY" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"La" = (
+/obj/machinery/door/window{
+ dir = 4
+ },
+/obj/item/salvage/ruin/brick,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Ld" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Lf" = (
+/obj/effect/landmark/damageturf,
+/obj/effect/decal/cleanable/molten_object/large,
+/obj/effect/decal/cleanable/molten_object{
+ pixel_y = 6;
+ pixel_x = -8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Lh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/greencross{
+ pixel_y = 32
+ },
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Li" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"Lm" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Ln" = (
+/obj/structure/ore_box,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"Lo" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"Lp" = (
+/obj/structure/flora/rock/jungle,
+/obj/structure/window/reinforced,
+/turf/simulated/floor/grass/no_creep,
+/area/ruin/space/deepstorage)
+"Lq" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Lv" = (
+/obj/structure/railing,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Lz" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"LA" = (
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"LE" = (
+/obj/item/reagent_containers/drinks/sillycup{
+ pixel_y = 9;
+ pixel_x = 6
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"LJ" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/multi_tile/impassable/three_tile_hor{
+ id_tag = "DS_BossStorage";
+ name = "warehouse blast doors"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"LK" = (
+/obj/effect/spawner/window/reinforced/polarized/grilled{
+ id = "DScmoffice"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 2;
+ id_tag = "DScmoffice1"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"LM" = (
+/obj/structure/chair/office{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"LR" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/air_sensor,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"LT" = (
+/obj/item/kirbyplants/plant22,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"LX" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"LY" = (
+/obj/machinery/economy/vending/hydronutrients,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Ma" = (
+/obj/machinery/power/port_gen/pacman/super,
+/turf/simulated/floor/engine,
+/area/ruin/space/deepstorage)
+"Mb" = (
+/obj/structure/railing,
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Mf" = (
+/obj/structure/sign/atmosplaque{
+ pixel_x = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Mh" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/hydroponics/constructable{
+ pixel_y = 9
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Mm" = (
+/obj/item/reagent_containers/glass/beaker/waterbottle/empty{
+ pixel_y = 11;
+ pixel_x = 9
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Mn" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Mp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/fried_vox,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Mr" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"MR" = (
+/obj/structure/rack,
+/obj/item/paper/researchnotes,
+/obj/effect/turf_decal/delivery/hollow,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"MS" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/chasm/space_ruin,
+/area/ruin/space/powered)
+"MU" = (
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"MV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"MW" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/effect/landmark/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"MZ" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"Nc" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "black";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Ne" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Nh" = (
+/obj/machinery/economy/vending/hydroseeds{
+ slogan_delay = 700
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"No" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"Nq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/iv_drip,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Nv" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2;
+ dir = 1
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"NI" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"NN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/delivery/partial,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"NT" = (
+/obj/structure/closet,
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"NV" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
+"NX" = (
+/obj/machinery/door_control{
+ pixel_y = 24;
+ pixel_x = 1;
+ id = "DS_Storage";
+ name = "storage room lockdown"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"NY" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"NZ" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"Ob" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Od" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/chasm,
+/area/ruin/space/deepstorage)
+"Oe" = (
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "stairs";
+ dir = 8
+ },
+/area/ruin/space/unpowered)
+"Og" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/salvage/ruin/russian,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Oh" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Oi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/damageturf,
+/obj/item/stack/sheet/metal,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Ol" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Oo" = (
+/obj/item/trash/chips,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Oq" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/structure/filingcabinet,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Or" = (
+/obj/structure/closet/crate,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/t_scanner/adv_mining_scanner,
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"Ot" = (
+/obj/structure/window/reinforced,
+/obj/structure/bed,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"OA" = (
+/obj/structure/closet,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"OC" = (
+/obj/structure/flora/ash/rock/style_random,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"OO" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"OU" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"Pg" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Pi" = (
+/obj/structure/railing,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"Pl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/rack,
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Pm" = (
+/obj/machinery/computer/nonfunctional{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Po" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "whitegreencorner"
+ },
+/area/ruin/space/deepstorage)
+"Pp" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/obj/item/organ/internal/heart,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Pq" = (
+/obj/item/kirbyplants/plant29,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Pu" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"Px" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"PA" = (
+/obj/structure/rack,
+/obj/item/grown/log{
+ pixel_y = -2;
+ pixel_x = 2
+ },
+/obj/item/grown/log{
+ pixel_y = 2;
+ pixel_x = -2
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"PC" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"PD" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"PE" = (
+/obj/structure/rack,
+/obj/machinery/disco,
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"PF" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"PG" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"PK" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"PR" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"PU" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"PY" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 9;
+ pixel_y = -1;
+ pixel_x = 2
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"PZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Qa" = (
+/mob/living/simple_animal/hostile/megafauna/fleshling,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Qb" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"Qe" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/plasteel{
+ amount = 10
+ },
+/obj/item/stack/sheet/plasteel{
+ amount = 10
+ },
+/obj/item/stack/sheet/plasteel{
+ amount = 10
+ },
+/obj/item/stack/sheet/plasteel{
+ amount = 10
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Qh" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"Qi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/stool{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Qk" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Qt" = (
+/obj/structure/filingcabinet,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Qx" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/chair,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Qy" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/mineral/titanium/blue,
+/area/ruin/space/deepstorage)
+"QC" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"QD" = (
+/obj/machinery/economy/vending/medical,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"QE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"QF" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"QJ" = (
+/obj/structure/table,
+/obj/item/chair,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"QL" = (
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"QN" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"QQ" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ icon_state = "bulb-broken";
+ status = 2
+ },
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"QR" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"Ra" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Rc" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "caution";
+ dir = 1
+ },
+/area/ruin/space/powered)
+"Rd" = (
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"Ri" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Rj" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/grass/jungle/no_creep,
+/area/ruin/space/deepstorage)
+"Rl" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Rp" = (
+/obj/structure/table/reinforced,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/shoes/combat,
+/turf/simulated/floor/plasteel{
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ru" = (
+/obj/structure/railing/corner,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"Rw" = (
+/obj/effect/decal/cleanable/glass,
+/obj/structure/closet/crate/trashcart,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Rx" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"Ry" = (
+/obj/structure/sign/custodian{
+ pixel_x = 32
+ },
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"RB" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 9;
+ pixel_y = -1;
+ pixel_x = 2
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"RC" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"RG" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"RH" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"RJ" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"RK" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"RQ" = (
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"RY" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair/sofa/bench{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Sc" = (
+/obj/item/kirbyplants/plant18,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Sf" = (
+/obj/structure/door_assembly/door_assembly_hatch,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Sh" = (
+/obj/structure/table,
+/obj/item/salvage/ruin/brick,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Sl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/fire{
+ pixel_x = -32
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner"
+ },
+/area/ruin/space/deepstorage)
+"Sn" = (
+/obj/structure/table/glass,
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Su" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/window/survival_pod{
+ dir = 4;
+ name = "lift doors"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Sv" = (
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Sw" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"Sy" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Sz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"SC" = (
+/obj/machinery/door/airlock,
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"SP" = (
+/obj/machinery/atmospherics/portable/canister/air,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"SX" = (
+/turf/simulated/floor/chasm/space_ruin/airless,
+/area/ruin/space/deepstorage)
+"SZ" = (
+/obj/item/stack/ore/glass/basalt{
+ pixel_y = -9;
+ pixel_x = -4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"Tb" = (
+/obj/structure/table/reinforced,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/item/storage/box/bodybags,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Te" = (
+/obj/structure/window/reinforced/polarized{
+ dir = 4
+ },
+/obj/structure/closet/crate/secure/loot,
+/obj/structure/rack,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Tg" = (
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"Th" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Tk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/glass,
+/obj/item/storage/fancy/vials,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "whitegreencorner"
+ },
+/area/ruin/space/deepstorage)
+"Tl" = (
+/obj/structure/table,
+/obj/item/restraints/handcuffs/cable/zipties{
+ pixel_y = 6
+ },
+/obj/item/radio{
+ pixel_y = 4;
+ pixel_x = 8
+ },
+/obj/structure/window/reinforced/tinted,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Tn" = (
+/obj/structure/chair/office/dark,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"To" = (
+/obj/machinery/door/airlock/centcom{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Tq" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"TE" = (
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"TH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"TK" = (
+/obj/machinery/door/airlock/highsecurity{
+ req_access_txt = "512"
+ },
+/obj/machinery/door/poddoor/multi_tile/impassable{
+ id_tag = "DS_Storage"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"TL" = (
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"TO" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/filingcabinet,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"TQ" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"TT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"TW" = (
+/obj/item/trash/candy,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"TX" = (
+/obj/machinery/light/small{
+ active_power_consumption = 0;
+ dir = 8;
+ icon_state = "bulb-broken";
+ status = 2
+ },
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"TY" = (
+/obj/machinery/porta_turret/syndicate/assault_pod,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "vault";
+ dir = 8
+ },
+/area/ruin/space/deepstorage)
+"Ud" = (
+/obj/structure/railing/cap,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Ue" = (
+/obj/item/trash/syndi_cakes,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"Ug" = (
+/obj/structure/barricade/wooden/crude{
+ layer = 4
+ },
+/obj/machinery/door/airlock/highsecurity{
+ req_access_txt = "512"
+ },
+/obj/machinery/door/poddoor/multi_tile/impassable{
+ id_tag = "DS_Storage"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Uk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Us" = (
+/obj/structure/chair,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Ut" = (
+/obj/structure/table/reinforced,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Uu" = (
+/obj/machinery/light/small,
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Uv" = (
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = -4
+ },
+/obj/structure/mirror{
+ pixel_y = -28
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"UA" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/cap{
+ dir = 6
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"UB" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 6;
+ pixel_y = 4;
+ pixel_x = -3
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"UC" = (
+/turf/simulated/floor/mineral/plastitanium,
+/area/ruin/space/deepstorage)
+"UD" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"UF" = (
+/turf/simulated/wall/mineral/titanium,
+/area/ruin/space/deepstorage)
+"UK" = (
+/obj/structure/railing,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"UM" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"UO" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"UR" = (
+/obj/effect/turf_decal/delivery/partial{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"UT" = (
+/obj/machinery/economy/vending/coffee,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred";
+ dir = 10
+ },
+/area/ruin/space/deepstorage)
+"Va" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Vb" = (
+/obj/structure/railing{
+ dir = 5
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Ve" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Vs" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/mopbucket{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Vu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Vv" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "black";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Vw" = (
+/obj/structure/closet/body_bag,
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"Vy" = (
+/obj/structure/noticeboard{
+ pixel_x = 32;
+ layer = 5
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/item/paper/fluff/ruins/deepstorage/log8,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"VA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/closet/cardboard,
+/obj/item/stack/sheet/metal{
+ amount = 50;
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/stack/rods{
+ amount = 50
+ },
+/obj/item/stack/sheet/glass{
+ amount = 50
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"VE" = (
+/obj/structure/closet/cardboard,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"VF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"VH" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"VL" = (
+/obj/structure/table/reinforced,
+/obj/item/radio{
+ pixel_y = 4;
+ pixel_x = 3
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"VP" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"VQ" = (
+/obj/structure/chair/stool,
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"VS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "freezerfloor"
+ },
+/area/ruin/space/deepstorage)
+"VU" = (
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/deepstorage)
+"VX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"VZ" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered";
+ dir = 6
+ },
+/area/ruin/space/deepstorage)
+"We" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Wi" = (
+/obj/structure/sign/radiation{
+ pixel_x = -32
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/obj/machinery/power/smes{
+ input_level = 10000;
+ inputting = 0;
+ output_level = 200000;
+ outputting = 0
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "brown"
+ },
+/area/ruin/space/deepstorage)
+"Wj" = (
+/obj/effect/decal/cleanable/cobweb,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Wl" = (
+/obj/structure/railing{
+ dir = 9
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Wn" = (
+/turf/simulated/floor/chasm,
+/area/ruin/space/deepstorage)
+"Wo" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Wq" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Ww" = (
+/obj/item/kirbyplants/plant27,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Wz" = (
+/obj/effect/landmark/damageturf,
+/obj/structure/holosign/barrier/engineering,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"WB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "browncorner";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"WG" = (
+/obj/machinery/door/window,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"WH" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner"
+ },
+/area/ruin/space/deepstorage)
+"WI" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"WJ" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"WL" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"WM" = (
+/obj/structure/table/glass,
+/obj/item/paper_bin{
+ pixel_y = 4
+ },
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"WX" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered";
+ dir = 10
+ },
+/area/ruin/space/deepstorage)
+"WY" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"Xa" = (
+/obj/machinery/computer/nonfunctional{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Xc" = (
+/obj/effect/spawner/window/plastitanium,
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 2;
+ id_tag = "DS_Quartermaster"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"Xe" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/twimsts,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Xg" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Xj" = (
+/obj/item/kirbyplants/plant10,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Xo" = (
+/obj/structure/railing{
+ dir = 5
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"Xp" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Xr" = (
+/obj/structure/sign/cargo{
+ pixel_y = -32
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Xt" = (
+/obj/structure/noticeboard{
+ pixel_x = -32;
+ layer = 5
+ },
+/obj/item/paper/fluff/ruins/deepstorage/log1,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"Xu" = (
+/obj/structure/rack,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/food/beans,
+/obj/item/food/beans,
+/obj/item/food/beans,
+/obj/item/food/beans,
+/obj/item/food/beans,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Xy" = (
+/obj/structure/table/glass,
+/obj/item/kirbyplants/plant15{
+ pixel_y = 13
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"XD" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/rack,
+/obj/item/storage/firstaid/brute{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/brute,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"XF" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "black"
+ },
+/area/ruin/space/deepstorage)
+"XH" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"XL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/tcomms/relay/ruskie{
+ network_id = "STORAGE-RELAY"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"XN" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"XO" = (
+/obj/structure/railing/cap{
+ dir = 6
+ },
+/turf/simulated/floor/catwalk/airless,
+/area/ruin/space/unpowered)
+"XQ" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ pixel_x = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"XS" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/restraints/handcuffs/cable/zipties{
+ pixel_y = 6
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/deepstorage)
+"Ya" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Yb" = (
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Yc" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/tile/disco_light/thirty,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Ye" = (
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Yk" = (
+/obj/structure/table/reinforced,
+/obj/item/salvage/ruin/nanotrasen,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"Yo" = (
+/obj/structure/chair,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Yp" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "cult"
+ },
+/area/ruin/space/deepstorage)
+"Yr" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/cobweb,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/mineral/titanium,
+/area/ruin/space/deepstorage)
+"Yv" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure,
+/area/ruin/space/deepstorage)
+"Yw" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/glass{
+ amount = 50;
+ pixel_y = 2;
+ pixel_x = 2
+ },
+/obj/item/stack/sheet/metal{
+ amount = 50;
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"Yy" = (
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "white";
+ dir = 1
+ },
+/area/ruin/space/deepstorage)
+"Yz" = (
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny,
+/obj/structure/railing/cap{
+ dir = 4
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"YA" = (
+/obj/structure/closet/crate,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"YB" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ icon_state = "whitered";
+ dir = 9
+ },
+/area/ruin/space/deepstorage)
+"YE" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/deepstorage)
+"YN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/grille/broken,
+/turf/simulated/floor/plating,
+/area/ruin/space/deepstorage)
+"YQ" = (
+/obj/effect/decal/cleanable/blood/splatter{
+ color = "red"
+ },
+/turf/simulated/floor/chasm,
+/area/ruin/space/deepstorage)
+"YU" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "blackcorner"
+ },
+/area/ruin/space/deepstorage)
+"Za" = (
+/obj/structure/table/tray,
+/obj/item/storage/surgical_tray{
+ pixel_y = 10
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "white"
+ },
+/area/ruin/space/deepstorage)
+"Zd" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/blob/normal/deepstorage,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner";
+ dir = 4
+ },
+/area/ruin/space/deepstorage)
+"Zf" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteredcorner"
+ },
+/area/ruin/space/deepstorage)
+"Zp" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/space/deepstorage)
+"Zt" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+"Zx" = (
+/obj/structure/table/glass,
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whitebluecorner"
+ },
+/area/ruin/space/deepstorage)
+"Zy" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks"
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ZA" = (
+/obj/item/chair{
+ pixel_y = -5;
+ pixel_x = -2;
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "vault"
+ },
+/area/ruin/space/deepstorage)
+"ZH" = (
+/mob/living/simple_animal/hostile/spaceinfected/default,
+/turf/simulated/floor/plating/asteroid/basalt/airless,
+/area/ruin/space/unpowered)
+"ZI" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/mineral/titanium/blue,
+/area/ruin/space/deepstorage)
+"ZJ" = (
+/obj/structure/railing,
+/obj/structure/rack,
+/obj/item/flashlight,
+/obj/item/flashlight,
+/obj/item/flashlight,
+/obj/item/shovel,
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ZM" = (
+/obj/machinery/dna_scannernew,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "whitegreen"
+ },
+/area/ruin/space/deepstorage)
+"ZN" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/royalblue,
+/area/ruin/space/deepstorage)
+"ZQ" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ color = "red";
+ desc = "Your instincts say you shouldn't be following these.";
+ icon = 'icons/effects/blood.dmi';
+ icon_state = "tracks";
+ dir = 5;
+ pixel_y = 4;
+ pixel_x = 1
+ },
+/turf/simulated/floor/catwalk,
+/area/ruin/space/deepstorage)
+"ZS" = (
+/obj/effect/decal/cleanable/cobweb2,
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/simulated/floor/plating/asteroid/basalt,
+/area/ruin/space/deepstorage)
+"ZU" = (
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/simulated/floor/engine/airless,
+/area/ruin/space/unpowered)
+"ZW" = (
+/obj/machinery/door/airlock/hatch{
+ req_access_txt = "512"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "podfloor"
+ },
+/area/ruin/space/deepstorage)
+
+(1,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
qn
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-"}
-(64,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
ab
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
ab
-aa
-aa
-aa
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
"}
-(65,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+(2,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
ab
ab
-aa
-aa
-aa
-"}
-(66,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
ab
ab
+qn
+qn
+qn
ab
+qn
+qn
+qn
ab
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
ab
-ce
-ce
-ce
+qn
+qn
+qn
ab
ab
ab
+qn
+qn
+ab
+qn
+qn
+ab
+qn
+qn
ab
+qn
+qn
ab
ab
+qn
+qn
ab
-iZ
-iZ
-iZ
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
ab
+qn
+qn
+qn
+qn
+"}
+(3,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
ab
ab
ab
@@ -5410,24 +8083,66 @@ ab
ab
ab
ab
+qn
+qn
+qn
+qn
+qn
ab
ab
-ce
-ce
-ce
ab
ab
ab
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
ab
ab
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+"}
+(4,1,1) = {"
+qn
+qn
+qn
ab
+qn
+qn
ab
ab
-iZ
ab
ab
ab
@@ -5436,19 +8151,9 @@ ab
ab
ab
ab
-aa
-aa
-aa
-"}
-(67,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
ab
ab
+qn
ab
ab
ab
@@ -5458,7 +8163,22 @@ ab
ab
ab
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
ab
ab
ab
@@ -5466,11 +8186,41 @@ ab
iZ
iZ
ab
+aM
+aM
+ab
ab
ab
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+"}
+(5,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
ab
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
ab
ab
ab
@@ -5481,48 +8231,72 @@ ab
ab
ab
ab
-ce
-ce
-ce
ab
ab
ab
ab
ab
ab
+qn
ab
ab
ab
+qn
+qn
+qn
+qn
+qn
ab
ab
ab
+aM
iZ
-ab
iZ
iZ
ab
+aM
+aM
+aM
+aM
ab
+aM
+aM
ab
+qn
+qn
+qn
+qn
+qn
ab
-ab
-aa
-aa
-aa
+qn
+qn
+qn
"}
-(68,1,1) = {"
-aa
-aa
-aa
-aa
-aa
+(6,1,1) = {"
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
ab
+jB
+TX
+hN
+hN
+UC
+UC
+TX
+jB
ab
ab
ab
ab
ab
ab
+iZ
ab
ab
ab
@@ -5533,10 +8307,6 @@ ab
ab
ab
ab
-iZ
-iZ
-iZ
-iZ
ab
ab
ab
@@ -5547,43 +8317,57 @@ ab
ab
ab
ab
+aM
+aM
+aM
+aM
ab
-ce
-ce
-ce
-ce
ab
ab
+aM
+aM
ab
ab
+aM
+aM
+aM
ab
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+"}
+(7,1,1) = {"
+qn
ab
+qn
+qn
ab
ab
+qn
ab
ab
-iZ
+jB
+hN
+hN
+BB
+Bv
+LR
+hN
+jB
ab
iZ
iZ
-iZ
ab
ab
+iZ
ab
ab
ab
-aa
-aa
-aa
-aa
-"}
-(69,1,1) = {"
-aa
-aa
-aa
-aa
-aa
ab
ab
ab
@@ -5598,30 +8382,62 @@ ab
ab
ab
ab
+iZ
+iZ
ab
+aM
+aM
+aM
ab
+bD
+bD
+bD
ab
ab
+iZ
ab
+bD
ab
ab
ab
+iZ
+iZ
ab
ab
+qn
+qn
+qn
+qn
+qn
+"}
+(8,1,1) = {"
+qn
+qn
+qn
+qn
ab
ab
+qn
ab
ab
+jB
+hN
+fi
+sG
+GB
+vx
+hN
+jB
+iZ
+iZ
ab
ab
ab
ab
-ce
-ce
-ce
-ce
ab
ab
+iZ
+iZ
ab
ab
ab
@@ -5629,65 +8445,127 @@ ab
ab
ab
ab
+iZ
+iZ
ab
ab
ab
iZ
iZ
-iZ
-iZ
-ab
ab
ab
+aM
+bD
+bD
+bD
+bD
+ZH
+bD
+bD
+iZ
+iZ
+bD
+bD
+bD
+bD
ab
ab
+iZ
+iZ
+iZ
+aM
ab
-aa
-aa
-aa
-aa
+qn
+qn
+qn
"}
-(70,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
+(9,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
ab
ab
ab
+jB
+UC
+hN
+kY
+FS
+fV
+hN
+jB
ab
ab
ab
ab
ab
ab
-ce
-ce
-ce
ab
+iZ
+iZ
+iZ
ab
ab
ab
ab
ab
ab
+iZ
+iZ
+iZ
+iZ
ab
+iZ
+iZ
+iZ
ab
+bD
+bD
+bD
+bA
+bD
+bD
+bD
+bD
+bD
+iZ
+iZ
+bD
+bD
+bD
+bD
+bD
+bD
ab
+aM
+iZ
+iZ
ab
ab
+qn
+qn
+"}
+(10,1,1) = {"
+qn
+qn
ab
ab
ab
ab
ab
ab
-ce
-ce
-ce
ab
+jB
+Li
+UC
+hN
+hN
+hN
+QQ
+jB
ab
ab
ab
@@ -5695,6 +8573,9 @@ ab
ab
ab
ab
+iZ
+iZ
+iZ
ab
ab
ab
@@ -5706,43 +8587,55 @@ iZ
iZ
iZ
ab
+iZ
+iZ
ab
ab
+bD
+bD
+bQ
+bD
+bD
+bD
+bD
ab
+aM
+iZ
ab
ab
-aa
-aa
-aa
-aa
-"}
-(71,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+bD
+bD
+ZH
+bD
+bD
+aM
+aM
+iZ
+iZ
ab
+qn
+qn
+qn
+"}
+(11,1,1) = {"
+qn
ab
ab
-ce
-ce
-ce
-ce
-ce
-ce
ab
ab
ab
ab
ab
ab
+jB
+vq
+jB
+mf
+Gb
+mf
+jB
+jB
+jB
ab
ab
ab
@@ -5751,97 +8644,147 @@ ab
ab
ab
ab
-ce
-ce
ab
-ce
ab
ab
ab
ab
ab
ab
+iZ
+iZ
+iZ
ab
ab
ab
ab
+bD
+bD
+bD
+bn
+bD
+bD
+bD
ab
+aM
ab
+aM
ab
ab
iZ
iZ
+bD
+bD
+bA
+bD
+bD
ab
iZ
ab
ab
+qn
ab
+qn
+"}
+(12,1,1) = {"
ab
ab
ab
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+nk
+tP
+aq
+nk
+nk
+Tn
+wV
+jB
ab
-aa
-aa
-aa
-aa
-"}
-(72,1,1) = {"
-aa
-aa
-aa
-aa
ab
ab
ab
-iZ
-iZ
ab
ab
ab
ab
ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
ab
ab
ab
ab
ab
ab
+iZ
+iZ
ab
ab
ab
-ce
-ce
-ce
-ce
-ce
-ce
+bD
+ZH
+bD
+bD
+bD
+bD
+bD
+bD
+ab
ab
ab
+iZ
+ab
+bD
+bD
ab
ab
ab
+bD
+bD
+bD
+bD
ab
ab
ab
ab
+qn
+qn
ab
+"}
+(13,1,1) = {"
ab
ab
+jB
+jB
+sT
+xF
+lQ
+jB
+jB
+DJ
+tT
+hH
+hH
+hH
+BF
+nO
+pZ
+jB
+jB
+jB
+jB
+jB
ab
ab
+iZ
ab
ab
ab
ab
-iZ
ab
ab
ab
@@ -5849,781 +8792,4923 @@ ab
ab
ab
ab
-aa
-aa
-aa
-aa
-"}
-(73,1,1) = {"
-aa
-aa
-aa
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
ab
+iZ
ab
+bD
+bD
+bD
ab
iZ
iZ
iZ
ab
+bD
+bD
+bD
+bD
ab
ab
ab
-ce
-ce
-ce
-KB
-ce
qn
-ce
-ce
-ce
-ce
-ce
-ab
-ab
-ab
-ab
-ab
-ce
-ce
-ce
+qn
+qn
+"}
+(14,1,1) = {"
ab
-ce
-ce
-ce
ab
+jB
+pJ
+Qh
+Vw
+Qh
+wb
+jB
+ff
+Pu
+uz
+hH
+Jx
+Tk
+GR
+jB
+jB
+Dt
+hj
+Qt
+jB
+jB
+ab
+ab
+ab
+sk
+sk
+sk
+sk
+sk
+sk
+sk
ab
ab
ab
+bD
+bD
+bD
+bD
+qw
+bD
+bD
+bD
ab
+iZ
+iZ
+iZ
ab
+bD
+bD
ab
ab
iZ
+iZ
+iZ
+iZ
ab
+bm
+az
+bm
ab
+aM
ab
+qn
ab
+qn
+"}
+(15,1,1) = {"
+qn
ab
+jB
+oO
+us
+Vw
+Qh
+cE
+jB
+zK
+Po
+TQ
+hH
+wi
+ge
+Pi
+LK
+Xy
+LA
+LA
+LA
+KQ
+jB
+ab
+ab
+sk
+sk
+Ol
+Ol
+zI
+Ol
+wv
+sk
+sk
ab
ab
-ab
-ab
+bD
+ZH
+bD
+bA
+bD
+bD
+aM
+aM
ab
iZ
+iZ
+aM
+bD
+bD
+bD
+bD
+bn
ab
+iZ
+iZ
ab
+bD
+bD
+bD
+bD
+bD
+aM
+aM
ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
+qn
+qn
"}
-(74,1,1) = {"
-aa
-aa
-aa
+(16,1,1) = {"
ab
ab
+jB
+PA
+Vw
+Vw
+Qh
+cE
+jB
+Av
+LX
+hH
+BU
+DR
+nQ
+Pi
+LK
+GH
+nK
+ZN
+lf
+vh
+jB
+ab
+sk
+sk
+Ol
+zI
+Ol
+Ol
+eB
+un
+tJ
+sk
ab
+bD
+bD
+bD
+bD
+bD
+bD
+ZH
+aM
ab
iZ
iZ
+aM
+bA
+bD
+bD
+bD
+bD
+bD
ab
ab
ab
+bD
+bD
+ZH
+bD
+bD
+bD
ab
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
-ce
+ab
+qn
+qn
+qn
+"}
+(17,1,1) = {"
ab
ab
+jB
+VQ
+Yp
+Qh
+Qh
+cE
+jB
+ZM
+Rd
+BC
+iL
+Rd
+wj
+Ci
+LK
+Xj
+wh
+CI
+xn
+ft
+jB
+sk
+sk
+Ol
+Ol
+Ol
+Ol
+eB
+eB
+eB
+AD
+sk
ab
ab
+bD
+bD
+bD
+bn
+bD
+bD
ab
ab
ab
ab
-iZ
-iZ
-iZ
ab
+bD
+bD
ab
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bA
+bD
ab
+iZ
ab
+qn
+qn
+"}
+(18,1,1) = {"
ab
ab
+jB
+jB
+jB
+zh
+jB
+jB
+jB
+jB
+zv
+JW
+zv
+jB
+jB
+jB
+jB
+DF
+Fi
+Dy
+GI
+sE
+sk
+sk
+Ol
+Ol
+Ol
+eB
+eB
+eB
+eB
+eB
+AD
+sk
ab
ab
ab
+bD
ab
ab
ab
+bD
+bD
ab
ab
+bD
+bD
+bD
ab
ab
ab
-aa
-aa
-aa
-aa
-"}
-(75,1,1) = {"
-aa
-aa
-aa
+bD
+bD
+bD
+bD
+bD
+bD
ab
ab
+bD
+bD
+bn
+bD
iZ
iZ
+qn
+qn
+"}
+(19,1,1) = {"
+qn
ab
-iZ
ab
+jB
+ta
+Zf
+Sl
+Bf
+WH
+Zf
+Zf
+Zf
+Bf
+Zf
+Bf
+Zf
+pz
+bP
+aY
+nK
+We
+sk
+sk
+Ol
+Ol
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+AD
+sk
+sk
ab
ab
ab
-ce
-ce
-SX
-SX
-ce
-ce
-ce
-ce
-ce
+iZ
+iZ
+iZ
+bD
+bD
+bD
+bA
+bD
+bD
+bD
ab
ab
-ce
-ce
-ce
-ce
-ce
-KB
-ce
-ce
+iZ
ab
+bD
+bD
+bD
+bD
+aM
+iZ
+iZ
ab
+bD
+bD
+bD
ab
ab
+qn
+qn
+"}
+(20,1,1) = {"
+qn
ab
ab
+jB
+Zx
+qG
+PR
+nE
+nE
+nE
+jZ
+Ck
+Ck
+hu
+tt
+tt
+jB
+qQ
+IJ
+sk
+sk
+sk
+Va
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+oH
+eB
+ka
+JA
+sk
ab
ab
ab
ab
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bn
ab
iZ
iZ
iZ
iZ
-iZ
-ab
-ab
ab
+bD
+ZH
+bD
+bD
+bD
+iZ
+iZ
+aM
+bD
ab
ab
ab
+qn
+qn
+"}
+(21,1,1) = {"
+qn
ab
+jB
+jB
+jB
+jB
+xM
+zv
+xM
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+sk
+sk
+sk
+Ol
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+NY
+UB
+eB
+eB
+AD
+sk
+sk
ab
+iZ
+bD
+bD
+bD
+bD
+bD
ab
ab
+iZ
+iZ
+iZ
+iZ
+iZ
+iZ
ab
+bD
+bD
+bD
+bD
+bD
+ZH
+Ln
ab
+aM
ab
ab
+qn
ab
-aa
-aa
-aa
-aa
+qn
+qn
"}
-(76,1,1) = {"
-aa
-aa
-aa
-ab
+(22,1,1) = {"
ab
ab
+jB
+Nv
+hH
+wD
+YB
+Jy
+WX
+jB
+iK
+Mr
+GW
+JU
+GM
+oP
+jB
+sk
+Ol
+Ol
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+ka
+tJ
+sk
ab
+iZ
+bD
+bD
+bD
ab
ab
+iZ
ab
ab
ab
ab
-ce
-ce
-ce
-ce
-ce
-ce
ab
ab
-ce
-ce
+iZ
ab
+bD
+bD
+bD
ab
+bD
+bA
+bD
+bD
ab
ab
+qn
+qn
+qn
+qn
+qn
+"}
+(23,1,1) = {"
ab
+jB
+jB
+hH
+hH
+jB
+cn
+Lm
+Hj
+jB
+iK
+vF
+lH
+kp
+zs
+BN
+jB
+jB
+jB
+Lz
+NY
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+NY
+qR
+AD
+sk
ab
ab
+bD
+bD
+bD
+iZ
ab
ab
+bp
+Ce
+Or
+AB
+GD
+bD
ab
+bD
+bD
+bD
ab
ab
ab
+bD
+bD
+bn
ab
ab
+qn
ab
+qn
+qn
+qn
+"}
+(24,1,1) = {"
ab
+jB
+hH
+hH
+hH
+hH
+RC
+Ji
+MZ
+jB
+LA
+um
+Ik
+BE
+BE
+Ik
+No
+LJ
+FN
+eB
+nR
+oH
+NY
+eB
+eB
+eB
+rh
+eB
+eB
+eB
+eB
+eB
+eB
+NY
+AD
+sk
ab
ab
+bD
+bD
ab
iZ
+ab
+aC
+bM
+bM
+au
+bM
+bY
+bD
+bD
+bD
+bD
+ab
iZ
iZ
iZ
-iZ
-iZ
-ab
-ab
+bD
+bD
+bD
ab
ab
+qn
+qn
+qn
ab
+qn
+"}
+(25,1,1) = {"
ab
+jB
+Nv
+hH
+hH
+jB
+cn
+Yy
+EP
+jB
+TT
+QF
+Ik
+BE
+ri
+Ik
+No
+na
+FN
+eB
+eB
+NY
+eB
+eB
+eB
+rj
+rj
+Ol
+eB
+eB
+eB
+NY
+eB
+eB
+AD
+sk
+iZ
+bD
+bD
+bD
ab
ab
+bg
+bj
+ba
+bx
+ar
+bG
+bO
+bD
+aO
+bD
+bD
ab
+iZ
+iZ
ab
ab
+bD
ab
+iZ
+iZ
ab
-aa
-aa
-aa
-aa
-aa
+qn
+qn
+qn
+qn
"}
-(77,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
+(26,1,1) = {"
ab
+jB
+jB
+jB
+jB
+jB
+PR
+Lm
+zA
+ho
+Fi
+QF
+Ik
+yQ
+BE
+Ik
+No
+na
+FN
+eB
+eB
+eB
+eB
+eB
+rj
+rj
+rj
+rj
+rj
+eB
+eB
+eB
+eB
+eB
+AD
+sk
+sk
+bD
+ZH
+bD
ab
ab
+zt
+Dr
+HK
+br
+by
+bH
+bD
+bD
+SZ
+bn
+bD
+iZ
+iZ
+iZ
ab
ab
ab
ab
+iZ
+iZ
+iZ
ab
+qn
+qn
+qn
+"}
+(27,1,1) = {"
ab
+jB
+Ej
+xT
+aL
+xT
+cn
+gr
+Hj
+ho
+Fi
+BS
+tg
+KS
+Iv
+Ra
+jB
+jB
+jB
+Lz
+oH
+eB
+eB
+eB
+rj
+Ol
+Ol
+rj
+Ol
+Ol
+eB
+eB
+eB
+eB
+ka
+AZ
+sk
+bD
+bD
+bD
ab
ab
+Rc
+pP
+mL
+bs
+by
+bH
+bD
+bD
+bA
+bD
+bD
ab
+aM
+iZ
ab
ab
ab
ab
ab
+iZ
+iZ
ab
ab
+qn
+qn
+"}
+(28,1,1) = {"
ab
+jB
+BL
+Pg
+fS
+rf
+Pg
+rM
+dL
+ho
+Fi
+QF
+Mb
+jB
+jB
+jB
+jB
+rj
+Ol
+Ol
+eB
+eB
+NY
+eB
+eB
+rj
+Ol
+Ol
+Ol
+rj
+rj
+Va
+eB
+eB
+eB
+eB
+sk
+bn
+bD
+bA
+bD
ab
+sZ
+tf
+HK
+mL
+yL
+yt
+DD
+bD
+bD
+bD
+aM
+aM
+aM
+aM
+aM
+bD
+bD
+bD
ab
ab
+iZ
+iZ
ab
+qn
+qn
+"}
+(29,1,1) = {"
ab
+jB
+lg
+ic
+jp
+nW
+XQ
+cs
+ir
+jB
+Fi
+Xr
+jB
+jB
+sk
+sk
+sk
+sk
+sk
+Ol
+Ol
+eB
+eB
+eB
+eB
+eB
+Ol
+rj
+rj
+rj
+rj
+eB
+eB
+eB
+eB
+eB
+sk
ab
+bD
+bD
+bD
ab
+af
+aT
+yu
+bI
+tO
+bM
+bY
+bD
+aM
+aM
+aM
+aM
+aM
+bD
+bD
+bD
+bD
+bD
+bD
ab
ab
+iZ
+iZ
+qn
+qn
+"}
+(30,1,1) = {"
ab
+jB
+vX
+Ot
+hY
+Ot
+Zd
+nW
+eh
+Fw
+Fi
+ag
+jB
+sk
+sk
+Fk
+Fk
+Fk
+sk
+sk
+sk
+sk
+Ol
+eB
+eB
+eB
+eB
+eB
+rj
+rj
+eB
+eB
+eB
+eB
+eB
+eB
+sk
+ab
+ab
+iZ
+ab
+ab
+Jl
+bM
+bM
+XO
+tb
+tb
+aM
+aM
+aM
+aM
+aM
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
ab
ab
+iZ
+qn
ab
+"}
+(31,1,1) = {"
ab
-iZ
-iZ
+jB
+jB
+jB
+jB
+jB
+Zd
+eh
+eh
+gS
+eh
+QF
+jB
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+sk
+Th
+Qk
+eB
+eB
+eB
+eB
+vQ
+eB
+eB
+eB
+NY
+eB
+eB
+sk
ab
ab
iZ
iZ
ab
ab
+bz
+bh
+bu
+bD
+bD
+aM
+aM
+aM
+ai
+bD
+bD
+bD
+bn
+bD
+aM
+ke
+SZ
+bn
+bA
+bD
ab
+qn
+qn
+qn
+"}
+(32,1,1) = {"
ab
+jB
+QD
+tT
+NZ
+jB
+Kv
+eh
+By
+Lf
+Oi
+eh
+jB
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+rj
+gP
+Qk
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+sk
+sk
ab
+aM
+aM
+aM
ab
+bD
+bD
+bD
+bD
+bD
+bD
+aM
+aM
+ai
+bw
+bD
+bD
+bD
+bD
+Xt
+bD
+ck
+bL
+Id
+Id
+Id
+qn
+qn
+qn
+"}
+(33,1,1) = {"
ab
+jB
+nG
+VH
+tT
+Dq
+QR
+Pg
+eh
+jB
+eh
+um
+jB
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+rj
+rj
+bT
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+sk
+sk
+aM
+aM
ab
+iZ
+iZ
+bD
+bQ
+bA
+bD
+bD
+aM
+ai
+ai
+bw
+bw
+bD
+bD
+bD
+bD
+bD
+bn
+bd
+bM
+bM
+bM
+bM
+bM
+qn
+"}
+(34,1,1) = {"
ab
+jB
+nQ
+ht
+wc
+jB
+GS
+Pg
+hz
+jB
+Lh
+ag
+jB
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+MS
+sk
+rj
+Ol
+gP
+Qk
+eB
+NY
+fp
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+Ol
+sk
+aM
ab
ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
+iZ
+bD
+bD
+bn
+bD
+bD
+bD
+aM
+ai
+bw
+bw
+bw
+bD
+bD
+bD
+kr
+bD
+aS
+eS
+hn
+hn
+hn
+hn
+qn
+qn
"}
-(78,1,1) = {"
-aa
-aa
-aa
-ab
-ab
+(35,1,1) = {"
ab
+jB
+zd
+tT
+Za
+jB
+Zd
+Pp
+Bf
+jB
+ym
+QF
+jB
+sk
+sk
+zk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+sk
+Ol
+Ol
+bT
+eB
+eB
+oH
+eB
+eB
+Qa
+eB
+eB
+NY
+eB
+Ol
+sk
ab
+iZ
ab
+bD
+bD
+bD
+bD
+bD
+bD
+bn
+bD
+ai
+bR
+bw
+bw
+bD
+bD
+bD
+bA
+bD
+bD
+bD
+bn
ab
ab
+qn
+qn
+qn
+"}
+(36,1,1) = {"
ab
+jB
+jB
+jB
+jB
+jB
+cA
+EI
+VZ
+jB
+LA
+QF
+jB
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+rj
+Ol
+Yv
+ph
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+Ol
+Ol
+sk
ab
+iZ
ab
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+ai
+bw
+bw
+bD
+bD
+bD
+bD
+bn
+bQ
+ke
+bD
ab
ab
ab
+qn
+qn
ab
+"}
+(37,1,1) = {"
ab
ab
ab
ab
+jB
+jB
+jB
+jB
+jB
+jB
+Fi
+ag
+jB
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+rj
+rj
+Ol
+gP
+Qk
+eB
+eB
+eB
+eB
+eB
+eB
+eB
+Ol
+sk
+ai
+aM
ab
+bD
+bA
+bD
+bD
+bD
+bD
+bD
+bD
+bD
+ai
+bw
+bw
+bD
+bD
+bD
+bD
+bD
+bD
+bD
ab
ab
+iZ
ab
+qn
+iZ
+iZ
+"}
+(38,1,1) = {"
+qn
ab
ab
ab
ab
ab
ab
+sk
+sk
+jB
+jB
+Hx
+jB
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+rj
+rj
+rj
+rj
+bT
+eB
+eB
+qV
+eB
+eB
+eB
+qV
+Ol
+sk
+aM
+aM
+aM
+aM
+bD
+bn
+bD
+bD
+Kq
+bD
+bD
+ai
+ai
+bw
+bw
+bD
+bn
+bD
+bD
+bD
+aM
+aM
ab
ab
+iZ
+qn
+qn
ab
+iZ
+"}
+(39,1,1) = {"
+qn
ab
ab
ab
ab
ab
+sk
+sk
+Fk
+Fk
+OO
+bU
+zU
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+sk
+sk
+sk
+rj
+rj
+rj
+eB
+jB
+fF
+fF
+fF
+jB
+sk
+sk
+aM
+aM
+aM
+aM
+bD
+bD
+bQ
+bD
+aF
+Oe
+bD
+ai
+aM
+bw
+bA
+bD
+bD
+bD
+bD
+Ru
+aM
+aM
ab
ab
+iZ
+qn
+qn
ab
+qn
+"}
+(40,1,1) = {"
+qn
+qn
ab
ab
ab
ab
ab
+sk
+Fk
+Fk
+qD
+bU
+xr
+sk
+zk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+MS
+sk
+sk
+Tg
+Tg
+sk
+sk
+sk
+jB
+jB
+jB
+na
+na
+yb
+jB
+jB
+jB
+aM
+aM
+aM
+aM
+aM
+aM
+bD
+bD
+bF
+bN
+ai
+ai
+aM
+aM
+bD
+bD
+bD
+bD
+bD
+pv
+bw
+aM
+aM
ab
ab
+qn
+qn
+qn
+qn
+"}
+(41,1,1) = {"
+qn
ab
+qn
ab
ab
ab
+sk
+sk
+zk
+Fk
+jO
+bU
+FY
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+Tg
+OC
+Tg
+Tg
+sk
+sk
+jB
+PE
+kE
+Sz
+wo
+wo
+oj
+gq
+jB
+aM
+aM
+aM
+aM
+aM
+ai
+ai
+bw
+cZ
+bN
+ai
+aM
+aM
+aM
+ru
+bD
+bD
+Kq
+bD
+pv
+bw
+bw
+aM
ab
ab
+qn
ab
+qn
+qn
+"}
+(42,1,1) = {"
+qn
+qn
+qn
ab
ab
+sk
+sk
+Fk
+Fk
+Fk
+no
+ah
+zU
+sk
+sk
+Fk
+Wn
+pQ
+pQ
+pQ
+Fk
+Fk
+sk
+Tg
+Tg
+Tg
+Tg
+Tg
+sk
+jB
+Yc
+aY
+ps
+nK
+Cn
+aY
+pk
+jB
+aM
+aM
+aM
+ai
+ai
+ai
+bw
+bw
+cZ
+bN
+ai
+ai
+aM
+aM
+bn
+bD
+bD
+aF
+Oe
+yX
+bw
+am
+aM
ab
+qn
+qn
+qn
+qn
+qn
+"}
+(43,1,1) = {"
+qn
+qn
+qn
+qn
ab
+sk
+Fk
+Fk
+Fk
+Fk
+qD
+bU
+uT
+bP
+oN
+Fk
+pQ
+pQ
+EJ
+pQ
+pQ
+Fk
+yp
+uV
+Dm
+UA
+cm
+Tg
+sk
+jB
+ye
+LA
+IR
+Fi
+MR
+LA
+Yk
+jB
+ai
+ai
+ai
+ai
+bw
+bw
+bw
+bw
+cZ
+bN
+jA
+ai
+aM
+aM
+aM
+bD
+bD
+cZ
+bN
+mu
+bw
+bw
+aM
+aM
+qn
+qn
+qn
ab
-aa
-aa
-aa
-aa
-aa
-aa
+qn
"}
-(79,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
+(44,1,1) = {"
+qn
+qn
ab
+qn
ab
+sk
+Fk
+Fk
+Fk
+Fk
+lt
+bU
+bU
+FY
+oN
+Fk
+UF
+Yr
+uf
+QN
+UF
+Fk
+Yb
+nK
+aQ
+Ch
+Tg
+Tg
+Tg
+jB
+jB
+zY
+nK
+aY
+nK
+rT
+jB
+jB
+ai
+ai
+bw
+bw
+bw
+bw
+bw
+bw
+Xo
+Qb
+bN
+ai
+aM
+bw
+bw
+bw
+bD
+cZ
+rb
+mu
+bw
+am
+aM
+aM
ab
+qn
+qn
+qn
+qn
+"}
+(45,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+sk
+Fk
+Fk
+Fk
+Fk
+zj
+tr
+bU
+zU
+oN
+DK
+UF
+KE
+zg
+vS
+UF
+ol
+Yb
+VP
+Ew
+Ch
+Tg
+sk
+Tg
+Tg
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+sk
+ai
+lY
+bw
+bw
+bw
+bw
+hk
+bw
+bw
+cZ
+bN
+ai
+bw
+bw
+bw
+bw
+aN
+aZ
+bN
+UK
+bw
+bw
+aM
+aM
ab
ab
+qn
+qn
+qn
+"}
+(46,1,1) = {"
+qn
ab
+qn
+qn
+qn
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Qx
+bU
+zU
+yl
+Gl
+hW
+Qy
+uf
+Qy
+hW
+Gl
+JV
+aY
+bU
+JR
+sk
+sk
+Tg
+Tg
+mg
+sk
+sk
+ai
+ai
+ai
+ai
+ai
+bw
+bw
+bw
+bw
+bw
+bw
+ai
+bw
+bw
+cZ
+bN
+mu
+bw
+bw
+bw
+bw
+bi
+bN
+bN
+kM
+bw
+bw
+bw
+bw
+aM
ab
ab
+qn
+qn
+"}
+(47,1,1) = {"
+qn
+qn
+qn
ab
+qn
+qn
+sk
+sk
+zk
+Fk
+Fk
+Qx
+aQ
+zU
+Cm
+Gl
+hW
+mA
+uf
+mA
+hW
+Gl
+Yz
+nK
+bU
+ts
+sk
+mg
+mg
+vu
+mg
+sk
+ai
+ai
+lY
+bw
+bw
+bw
+bw
+bw
+bw
+bw
+am
+ai
+ai
+ai
+bw
+Xo
+Qb
+ZU
+PG
+bw
+bw
+ak
+aZ
+bN
+bN
+ae
+qc
+bw
+bw
+bD
+aM
+iZ
+iZ
ab
+qn
+"}
+(48,1,1) = {"
+qn
+qn
+qn
+qn
+qn
ab
ab
+sk
+sk
+Fk
+Fk
+Qx
+aQ
+zU
+oN
+DK
+UF
+KD
+uf
+ZI
+UF
+ol
+Yb
+Ya
+bU
+ts
+sk
+mg
+mg
+Tg
+fn
+sk
+sk
+bw
+bw
+bw
+bw
+bw
+bw
+bw
+bw
+bw
+ai
+ai
+ai
+ai
+bR
+bw
+cZ
+bN
+ZU
+bV
+aJ
+aZ
+bN
+rb
+rb
+bN
+ae
+Px
+Ad
+eP
+bD
iZ
iZ
-ab
iZ
+qn
+"}
+(49,1,1) = {"
+qn
ab
+qn
+qn
+qn
ab
ab
ab
+sk
+Fk
+Fk
+WJ
+aQ
+zU
+oN
+Fk
+UF
+CB
+zg
+qZ
+UF
+Fk
+Yb
+nK
+bU
+Uu
+sk
+sk
+pf
+Tg
+Tg
+FL
+sk
+bw
+bw
+jB
+jB
+jB
+jB
+FC
+sv
+bw
+ai
+ai
+ai
+bn
+bw
+bw
+cZ
+bN
+aW
+aj
+aj
+Qb
+rb
+bW
+aj
+aj
+cd
+Ey
+aA
+Cj
+bD
ab
ab
ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
+qn
"}
-(80,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
+(50,1,1) = {"
+qn
+qn
+qn
ab
ab
ab
ab
-iZ
-iZ
-iZ
ab
+sk
+zk
+Fk
+Xp
+bU
+FY
+oN
+Fk
+pQ
+pQ
+GU
+pQ
+pQ
+Fk
+Yb
+VP
+bU
+hV
+Wn
+sk
+rZ
+TW
+Tg
+Du
+sk
+bw
+jB
+jB
+Ma
+os
+jB
+jB
+ad
+bw
+bn
+ai
+ai
+bw
+bw
+ak
+aZ
+aW
+bE
+bw
+bw
+bd
+bM
+ad
+bw
+bw
+bw
+bw
+bw
+bD
+bD
+bD
ab
-iZ
-iZ
-iZ
ab
+qn
+"}
+(51,1,1) = {"
+qn
+qn
+qn
ab
ab
ab
ab
-iZ
-iZ
-iZ
-iZ
-iZ
ab
+sk
+Fk
+Fk
+Mn
+vo
+Rl
+oN
+Fk
+Fk
+pQ
+pQ
+pQ
+Fk
+Fk
+Yb
+nK
+bU
+MW
+Wn
+sk
+sk
+Tg
+Ue
+OC
+sk
+bw
+jB
+ca
+vI
+vI
+bo
+jB
+GL
+bw
+bw
+ai
+ai
+bR
+bw
+cZ
+aW
+bE
+bw
+hk
+if
+Gl
+Gl
+AN
+aw
+hk
+bw
+bw
+bD
+bD
+bD
ab
ab
ab
+qn
+"}
+(52,1,1) = {"
+qn
+qn
ab
ab
ab
ab
ab
ab
+sk
+sk
+Fk
+sk
+sk
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+ct
+nK
+bc
+Wn
+Od
+sk
+sk
+ZS
+vc
+sk
+sk
+ai
+jB
+pg
+es
+kC
+pg
+jB
+bk
+sv
+bw
+bw
+bw
+bw
+bw
+cZ
+mu
+bw
+bw
+jB
+jB
+av
+Gl
+Je
+jB
+jB
+bw
+bw
+bD
+bD
+bD
ab
ab
+qn
+qn
+"}
+(53,1,1) = {"
+qn
+qn
ab
ab
ab
ab
ab
ab
+sk
+sk
+sk
+sk
+jB
+jB
+kh
+Az
+lO
+Az
+Cw
+rx
+xw
+jB
+jB
+aY
+hh
+Wn
+Wn
+Wn
+sk
+sk
+sk
+sk
+ai
+ai
+jB
+Kh
+VX
+Gn
+Ka
+jB
+jB
+bk
+kc
+sv
+bw
+bw
+ak
+aZ
+mu
+bw
+jB
+jB
+SX
+ce
+KB
+bv
+SX
+jB
+jB
+bw
+bD
+yC
+bD
ab
+iZ
+qn
+qn
+"}
+(54,1,1) = {"
+qn
ab
ab
ab
+jB
+jB
+jB
+jB
+jB
+sk
+sk
+sk
+jB
+KP
+LE
+Og
+QL
+ob
+cX
+bl
+kA
+vi
+jB
+CG
+zX
+Wn
+Wn
+Od
+sk
+jB
+sk
+ai
+ai
+ai
+jB
+aV
+ax
+bl
+yd
+Wi
+jB
+jB
+jB
+DH
+aJ
+aJ
+aZ
+aW
+bE
+jB
+jB
+bR
+SX
+YE
+iM
+bX
+SX
+am
+jB
+jB
+jB
+jB
+jB
ab
ab
ab
+qn
+"}
+(55,1,1) = {"
+qn
ab
ab
+jB
+jB
+Es
+sK
+Mh
+fk
+sk
+sk
+rQ
+jB
+nh
+JZ
+QL
+lo
+Js
+bl
+jf
+xo
+Oo
+jB
+CG
+bU
+Wz
+Wn
+Wn
+Wn
+jB
+jB
+ai
+ai
+ai
+jB
+ap
+yf
+UO
+vt
+kR
+WB
+iq
+As
+bM
+aW
+aj
+aj
+bE
+bw
+jB
+SX
+SX
+SX
+ce
+yU
+bX
+SX
+SX
+TY
+jB
+Oq
+Wo
+jB
+jB
ab
ab
+qn
+"}
+(56,1,1) = {"
+qn
ab
ab
+jB
+OU
+QL
+uJ
+Bm
+Bm
+jB
+uC
+QF
+zD
+Ei
+Rw
+BH
+CA
+BI
+zN
+QL
+Xe
+La
+jB
+ih
+zX
+Wn
+Wn
+Wn
+Wn
+Wn
+jB
+ai
+ai
+ai
+jB
+ao
+sh
+HP
+Ne
+pc
+lh
+aP
+jB
+aH
+mu
+bw
+bw
+bw
+am
+jB
+SX
+SX
+SX
+ce
+KB
+bX
+SX
+SX
+SX
+bK
+EB
+ay
+fj
+jB
ab
ab
-aa
-aa
-aa
-aa
-aa
-aa
+qn
"}
-(81,1,1) = {"
-aa
-aa
-aa
-ab
+(57,1,1) = {"
+qn
ab
ab
+jB
+Bt
+tc
+Vv
+bl
+QL
+IN
+LA
+ag
+jB
+AV
+Aw
+gJ
+CP
+lm
+Mm
+CD
+cN
+mU
+jB
+nK
+ZQ
+jy
+Wn
+MU
+YQ
+qm
+jB
+ai
+ai
+ai
+jB
+eF
+LM
+WG
+Ik
+Mf
+dA
+xY
+jB
+ai
+ai
+bw
+bw
+bw
+bw
+jB
+SX
+SX
+SX
+ce
+iM
+bv
+SX
+SX
+SX
+bK
+nN
+ay
+WM
+jB
ab
ab
ab
+"}
+(58,1,1) = {"
+qn
ab
ab
+jB
+Sw
+fk
+Vv
+Qi
+or
+jB
+LA
+ag
+jB
+jB
+Br
+Mp
+Iw
+mM
+GA
+uJ
+yz
+gC
+jB
+nJ
+pj
+VP
+CG
+ne
+yP
+wh
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+ai
+ai
+ai
+bw
+bw
+bw
+jB
+SX
+SX
+SX
+ce
+yU
+bX
+SX
+SX
+SX
+bK
+GN
+wh
+XL
+jB
ab
iZ
iZ
-iZ
-iZ
-iZ
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-iZ
-ab
-ab
-ab
-ab
+"}
+(59,1,1) = {"
+qn
+qn
ab
+jB
+Hl
+fk
+Nc
+nF
+QL
+IP
+Fi
+ag
+EA
+jB
+jB
+jB
+jB
+jB
+jB
+Br
+QJ
+RJ
+jB
+bP
+Zp
+tF
+zL
+rI
+yS
+Yo
+jB
+vZ
+sc
+JH
+jB
+Us
+JH
+Zt
+jB
+JH
+JH
+je
+jB
+ai
+ai
+ai
+ai
+ai
+bw
+jB
+SX
+SX
+SX
+ce
+yU
+bX
+SX
+SX
+TY
+jB
+jr
+Wo
+EX
+jB
ab
ab
-aa
-aa
-aa
-aa
+iZ
+"}
+(60,1,1) = {"
+qn
ab
ab
+jB
+PK
+tc
+Vv
+DZ
+bl
+IP
+LA
+QF
+jB
+jB
+Ha
+aY
+nK
+lV
+jB
+jB
+Ug
+jB
+jB
+jB
+jB
+jB
+jB
+co
+jB
+jB
+jB
+ti
+dC
+yB
+jB
+Da
+ew
+sY
+jB
+jF
+ew
+DC
+jB
+ai
+ai
+ai
+ai
+ai
+ai
+jB
+jB
+bR
+SX
+ce
+iM
+bv
+SX
+am
+jB
+jB
+jB
+aR
+jB
+jB
ab
ab
ab
+"}
+(61,1,1) = {"
+qn
ab
ab
+jB
+lE
+bl
+TE
+qt
+qt
+IP
+LA
+QF
+jB
+jG
+bP
+tq
+Ut
+aY
+jB
+Uk
+bP
+cT
+jB
+Wj
+Ve
+jB
+Sc
+bP
+rS
+jB
+jB
+jB
+pY
+jB
+jB
+jB
+ZW
+jB
+jB
+jB
+ZW
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+SX
+ce
+KB
+bv
+SX
+jB
+jB
+bJ
+wh
+wh
+bP
+jB
ab
ab
ab
+"}
+(62,1,1) = {"
+qn
ab
ab
+jB
+jB
+LY
+Nh
+CY
+fk
+jB
+mQ
+ag
+jB
+dX
+RQ
+ch
+vG
+nK
+wH
+nK
+bU
+rQ
+jB
+XH
+JH
+rK
+aY
+bc
+rQ
+jB
+VE
+GE
+Fi
+hK
+cU
+GE
+LA
+cU
+qa
+Fi
+uT
+CV
+jB
+jB
+dg
+EL
+hU
+PD
+zm
+PC
+xg
+jB
+jB
+VU
+aI
+Ap
+jB
+jB
+cb
+aB
+pH
+bU
+aG
+jB
ab
ab
+qn
+"}
+(63,1,1) = {"
+qn
+qn
ab
ab
+jB
+jB
+jB
+jB
+jB
+jB
+uC
+ag
+jB
+TO
+Yo
+bP
+Oh
+nK
+Xc
+ty
+bU
+uw
+jB
+dT
+vN
+jB
+eI
+vL
+QF
+Hx
+wh
+bU
+RB
+Zy
+Zy
+bU
+cR
+Zy
+Zy
+bU
+Zy
+wh
+Hx
+dO
+TE
+bl
+QL
+bl
+bl
+QL
+Tq
+jB
+jB
+zy
+jB
+jT
+jB
+jB
+an
+zz
+ZA
+bU
+ag
+jB
ab
+qn
+qn
+"}
+(64,1,1) = {"
+qn
+qn
ab
+jB
+jB
+jB
+Bh
+tZ
+jB
+jB
+Fi
+ag
+jB
+HE
+Yo
+bP
+aU
+aY
+Xc
+ty
+Lq
+hd
+jB
+jB
+jB
+jB
+lL
+bU
+QF
+jB
+ju
+nK
+VP
+WL
+PU
+Gt
+nK
+Ry
+aY
+eI
+XN
+Ja
+jB
+bf
+CZ
+WI
+WI
+em
+XF
+Ob
+em
+jB
+Vu
+eu
+xs
+eu
+bC
+jB
+bS
+NV
+WL
+bU
+ag
+jB
ab
ab
+qn
+"}
+(65,1,1) = {"
+qn
ab
ab
+jB
+Kx
+SC
+xZ
+tu
+jB
+Fi
+QF
+ag
+jB
+zU
+bP
+wh
+LA
+Cb
+Dn
+PZ
+Lq
+hd
+jB
+Us
+kG
+jB
+BO
+bU
+aG
+jB
+jB
+jB
+ZW
+jB
+jB
+jB
+eq
+jB
+jB
+jB
+jB
+jB
+jB
+vO
+VA
+JI
+JI
+rP
+oI
+oI
+yZ
+To
+bc
+al
+wh
+al
+bU
+To
+wh
+Fi
+nK
+bU
+be
+jB
+iZ
ab
-aa
-aa
-aa
-aa
-aa
-aa
+qn
"}
-(82,1,1) = {"
-aa
-aa
-aa
+(66,1,1) = {"
+qn
+qn
ab
+jB
+jB
+jB
+VS
+tu
+mE
+qF
+ag
+rQ
+jB
+rp
+dk
+rp
+rA
+jB
+jB
+ty
+bU
+hd
+jB
+XH
+ew
+ZW
+ty
+bU
+ag
+Sh
+jB
+XH
+ew
+OA
+jB
+Vs
+BE
+wu
+jB
+Pq
+tk
+IJ
+jB
+Uk
+bU
+vL
+bU
+bU
+bU
+vL
+nM
+jB
+bP
+wh
+dd
+bP
+bP
+jB
+LT
+aQ
+bU
+bU
+Sn
+jB
ab
+qn
+qn
+"}
+(67,1,1) = {"
+qn
ab
ab
+jB
+Kg
+SC
+tu
+fD
+jB
+LA
+ag
+jB
+jB
+AC
+GX
+XD
+KI
+vA
+jB
+ty
+cj
+gp
+jB
+Zt
+pV
+RK
+ty
+bU
+MV
+rI
+jB
+Zt
+Ao
+kG
+jB
+NT
+ri
+gZ
+jB
+LA
+bU
+zU
+Hx
+UR
+qz
+qz
+kZ
+kZ
+aY
+bU
+ag
+mc
+aQ
+iJ
+mN
+iJ
+bU
+To
+bP
+nK
+nK
+bU
+tm
+jB
ab
ab
+qn
+"}
+(68,1,1) = {"
+qn
ab
ab
+jB
+jB
+jB
+VS
+Uv
+jB
+LA
+dh
+jB
+Fy
+Nq
+aY
+aY
+nK
+aQ
+nC
+nK
+cj
+cP
+jB
+jB
+jB
+jB
+ty
+Lq
+MV
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+TT
+bU
+tE
+jB
+sJ
+iX
+sJ
+jB
+Kw
+aY
+aQ
+rQ
+jB
+Fr
+aQ
+bU
+bU
+ja
+jB
+cc
+Rj
+nK
+bU
+QF
+jB
ab
ab
+qn
+"}
+(69,1,1) = {"
+qn
ab
ab
+jB
+zG
+SC
+xZ
+Uv
+jB
+LA
+ag
+jB
+Do
+zU
+hB
+kI
+RG
+Fi
+EZ
+nK
+ah
+LA
+LA
+VF
+bP
+jB
+aY
+Lq
+Mr
+RK
+aK
+QE
+iG
+RY
+QC
+Ww
+QE
+mx
+mx
+zU
+Ew
+TL
+jB
+jP
+HN
+vC
+tY
+rr
+aY
+bU
+cx
+jB
+jB
+aD
+aD
+aD
+jB
+jB
+Is
+fU
+pH
+ah
+QF
+jB
ab
ab
+qn
+"}
+(70,1,1) = {"
+qn
ab
ab
+jB
+jB
+jB
+xZ
+tu
+mE
+LA
+CT
+jB
+ll
+zU
+Qe
+Rp
+on
+Fi
+yg
+aY
+bU
+bU
+Lq
+bU
+wh
+TK
+ty
+Lq
+Mr
+Sf
+bP
+aQ
+bU
+vL
+bU
+bU
+Lq
+bU
+Lq
+Lq
+bU
+FY
+Hx
+TE
+bl
+JK
+dj
+NN
+Zp
+wh
+hZ
+jB
+vH
+VL
+bZ
+fK
+Xa
+jB
+bb
+Lp
+pH
+aQ
+aG
+jB
ab
ab
+qn
+"}
+(71,1,1) = {"
+qn
ab
ab
+jB
+tZ
+tu
+xZ
+pL
+jB
+Fi
+ag
+jB
+Tb
+FY
+nK
+Xu
+ks
+LA
+nt
+nK
+bU
+ty
+PZ
+BO
+IJ
+jB
+lL
+Lq
+QF
+jB
+jN
+mT
+mT
+Ky
+mT
+Su
+ee
+Vy
+QF
+MV
+Lq
+mx
+jB
+ko
+cJ
+jB
+jB
+jB
+jB
+hp
+jB
+jB
+te
+hm
+gK
+eZ
+Pm
+jB
+jB
+gO
+bP
+wh
+wh
+jB
ab
ab
ab
+"}
+(72,1,1) = {"
+qn
+qn
ab
+jB
+jB
+Dx
+Eu
+jo
+jB
+uC
+ag
+jB
+Bi
+bU
+FY
+FY
+FY
+bU
+ZJ
+PZ
+bU
+MV
+jB
+jB
+jB
+jB
+Cl
+aQ
+tH
+jB
+HC
+bU
+Lv
+jB
+HC
+bU
+Lv
+jB
+Yo
+wh
+Lq
+Wo
+jB
+jB
+jB
+jB
+RK
+jB
+oA
+rE
+uu
+jB
+jB
+jB
+aR
+jB
+jB
+jB
+jB
+jB
+jB
+hp
+jB
+jB
ab
ab
ab
+"}
+(73,1,1) = {"
+qn
+qn
ab
ab
+jB
+jB
+jB
+jB
+jB
+Hx
+jB
+jB
+jB
+wf
+AP
+Yw
+Ep
+SP
+jB
+ty
+Lq
+ag
+jB
+vN
+JH
+jB
+aY
+bU
+rQ
+jB
+HC
+bU
+Lv
+jB
+HC
+bU
+Lv
+jB
+Yo
+aK
+Lq
+wh
+bP
+aK
+RK
+RK
+RK
+jB
+AT
+dR
+Ld
+sH
+UM
+gF
+Ld
+Ld
+mR
+Ld
+Ld
+ou
+tv
+gE
+UT
+jB
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
ab
ab
+"}
+(74,1,1) = {"
+qn
+qn
+qn
ab
ab
ab
ab
+sk
+bU
+bU
+sk
+sk
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+ty
+Lq
+QF
+jB
+fN
+ew
+ZW
+nK
+bU
+aG
+jB
+Vb
+mO
+Gy
+jB
+Vb
+mO
+Gy
+jB
+aK
+aK
+Lq
+Ds
+Ds
+Gg
+jB
+as
+RK
+Ir
+Ai
+Lq
+Lq
+aQ
+bU
+Ew
+aQ
+bU
+bU
+aQ
+vL
+aQ
+jv
+YA
+wz
+jB
ab
ab
+qn
+"}
+(75,1,1) = {"
+qn
ab
+qn
+qn
ab
ab
+sk
+sk
+yN
+bU
+OC
+sk
+sk
+sk
+sk
+Fk
+yY
+sk
+jB
+Ds
+aK
+aK
+jB
+Wq
+ew
+jB
+hg
+wh
+bP
+jB
+bK
+bK
+bK
+jB
+bK
+bK
+bK
+jB
+UD
+bP
+ww
+wh
+mI
+jB
+jB
+tU
+RK
+RK
+AT
+Al
+Ai
+dt
+Ai
+Ai
+GJ
+FE
+oB
+Ai
+GJ
+Ai
+Ai
+GJ
+JF
+jB
ab
ab
+qn
+"}
+(76,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+sk
+Tg
+bU
+bU
+bU
+Tg
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+jB
+jB
+TK
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+eq
+jB
+ol
+Fk
+Fk
+mC
+Fk
+Fk
+Fk
+Wn
+mG
+aK
+Lq
+aK
+rI
+jB
+YN
+tU
+ri
+jB
+jB
+jB
+AA
+jB
+jB
+jB
+xC
+jB
+jB
+jj
+jB
+iX
+sJ
+jB
+jB
+jB
ab
ab
+qn
+"}
+(77,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+sk
+Tg
+bU
+aQ
+bU
+bU
+bU
+bU
+bU
+aQ
+aQ
+bU
+bU
+nl
+LA
+GP
+LA
+LA
+Fi
+NI
+LA
+Fi
+Fi
+cY
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Wn
+Wn
+PF
+aK
+cj
+aK
+Ds
+jB
+tU
+RK
+tU
+eN
+jB
+ku
+wh
+Pl
+jB
+QF
+bP
+VP
+im
+YU
+pa
+TE
+YU
+fX
+jB
ab
ab
+qn
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
"}
-(83,1,1) = {"
-aa
-aa
-ab
+(78,1,1) = {"
+qn
+qn
ab
+qn
+qn
+qn
+sk
+OC
+Tg
+bU
+bU
+bU
+Ew
+Ri
+aQ
+aQ
+bU
+bU
+Ud
+aX
+Dc
+AJ
+Dc
+AJ
+AJ
+AJ
+Xg
+Cf
+QF
+Ye
+Db
+Fk
+Fk
+Fk
+Fk
+Fk
+Wl
+uV
+vM
+aK
+xS
+bP
+jB
+jB
+jB
+jB
+tU
+RK
+jB
+BX
+bP
+iu
+jB
+PY
+mF
+aY
+et
+YU
+bl
+we
+QL
+qp
+jB
ab
ab
+qn
+qn
+"}
+(79,1,1) = {"
+qn
+qn
+qn
+qn
ab
+qn
+sk
+sk
+Tg
+Tg
+Tg
+OC
+sk
+sk
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+jB
+jB
+Ez
+Fi
+Sv
+oI
+KY
+II
+oI
+oI
+Sy
+wh
+jB
+jB
+jB
+jB
+jB
+sk
+ab
+jB
+eN
+RK
+jB
+sV
+dd
+Te
+jB
+dJ
+bP
+VP
+Tl
+YU
+fw
+XS
+ia
+tl
+jB
ab
+qn
+qn
+qn
+"}
+(80,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+sk
+sk
+IY
+Tg
+sk
+sk
ab
+qn
+sk
+bB
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+bK
+bK
+Pq
+uR
+qK
+jM
+Jh
+ag
+uR
+re
+bK
+bK
+Fk
+Fk
+Fk
+Fk
+sk
+ab
+jB
+RK
+ri
+jB
+sP
+bP
+fZ
+jB
+Aj
+wp
+Aj
+jB
+tp
+ac
+dn
+DO
+oX
+jB
ab
+qn
+qn
+qn
+"}
+(81,1,1) = {"
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+sk
+sk
+sk
+sk
+qn
+qn
+qn
+sk
+sk
+Fk
+Fk
+Fk
+bB
+Fk
+Fk
+sk
+sk
+bB
+Fk
+Fk
+bK
+bK
+jB
+bK
+bK
+bK
+bK
+jB
+bK
+bK
+Fk
+Fk
+bB
+Fk
+sk
+sk
+ab
+jB
+jB
+jq
+jB
+sV
+wh
+TH
+jB
+CO
+oE
+lb
+jB
+NX
+bl
+QL
+bl
+qp
+jB
ab
+qn
ab
+qn
+"}
+(82,1,1) = {"
+qn
+qn
+qn
ab
ab
ab
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+sk
+sk
+sk
+sk
+sk
+sk
+sk
+sk
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+sk
+sk
+sk
+ab
+ab
+ab
+jB
+jB
+jB
+jB
+uo
+aY
+aR
+zU
+jn
+FY
+aR
+Rx
+Lo
+WY
+RH
+jB
+jB
ab
+qn
+qn
+qn
+"}
+(83,1,1) = {"
+qn
+qn
+qn
ab
ab
ab
+qn
+qn
ab
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
ab
ab
+qn
+qn
+qn
+qn
+sk
+sk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+Fk
+bB
+Fk
+Fk
+sk
+sk
+qn
+qn
+qn
ab
ab
ab
ab
ab
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
+jB
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
ab
ab
+qn
ab
+"}
+(84,1,1) = {"
+qn
+qn
+qn
+qn
+qn
ab
+qn
ab
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+sk
+sk
+sk
+sk
+bB
+Fk
+Fk
+Fk
+Fk
+sk
+sk
+sk
+sk
+sk
+qn
+qn
ab
+qn
+qn
ab
ab
ab
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(84,1,1) = {"
-aa
-aa
ab
ab
ab
-aa
-aa
ab
ab
-aa
ab
ab
ab
@@ -6634,120 +13719,76 @@ ab
ab
ab
ab
+qn
+qn
+qn
+"}
+(85,1,1) = {"
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
+qn
ab
+qn
+qn
+qn
+qn
+qn
ab
+sk
+sk
+sk
+sk
+sk
+sk
+sk
+qn
ab
+qn
+qn
ab
+qn
+qn
ab
+qn
+qn
+qn
+qn
ab
ab
+qn
ab
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
ab
+qn
ab
ab
ab
ab
ab
+qn
+qn
ab
+qn
+qn
ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(85,1,1) = {"
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+qn
"}
diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm
index a4ab4898cfb3..19781232e209 100644
--- a/_maps/map_files/stations/boxstation.dmm
+++ b/_maps/map_files/stations/boxstation.dmm
@@ -41341,6 +41341,7 @@
pixel_x = 3;
pixel_y = -3
},
+/obj/machinery/atmospherics/pipe/simple/visible,
/turf/simulated/floor/plasteel{
icon_state = "whitepurple"
},
@@ -52029,6 +52030,15 @@
},
/turf/simulated/floor/plating,
/area/station/maintenance/aft)
+"dLj" = (
+/obj/machinery/door/poddoor/preopen{
+ name = "Biohazard Shutter";
+ id_tag = "RnDChem"
+ },
+/obj/effect/spawner/window/reinforced/plasma,
+/obj/machinery/atmospherics/pipe/simple/visible,
+/turf/simulated/floor/engine,
+/area/station/science/misc_lab)
"dLF" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/door/poddoor/preopen{
@@ -52106,10 +52116,6 @@
icon_state = "purplecorner"
},
/area/station/hallway/primary/starboard/east)
-"dMK" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/wall,
-/area/station/public/toilet/unisex)
"dMM" = (
/obj/machinery/atmospherics/pipe/simple/hidden/cyan,
/obj/effect/spawner/random_spawners/oil_maybe,
@@ -64148,8 +64154,6 @@
d2 = 2;
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plasteel,
/area/station/command/teleporter)
"jzZ" = (
@@ -79554,11 +79558,6 @@
/obj/machinery/atmospherics/pipe/simple/visible,
/turf/simulated/floor/plating,
/area/station/science/toxins/mixing)
-"qRE" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall,
-/area/station/command/meeting_room)
"qRU" = (
/obj/machinery/atmospherics/unary/vent_pump/siphon/on{
dir = 1;
@@ -124830,7 +124829,7 @@ aWZ
thN
xVe
qcB
-dMK
+aUQ
cts
csD
csD
@@ -125061,7 +125060,7 @@ brb
bpt
jju
nvC
-qRE
+bxl
bxl
lOo
lOo
@@ -143863,7 +143862,7 @@ cDG
cFU
cHp
cIF
-cJP
+dLj
oEK
cLe
tWz
diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm
index 49ecc4ed49ef..cb6d9f302ade 100644
--- a/_maps/map_files/stations/cerestation.dmm
+++ b/_maps/map_files/stations/cerestation.dmm
@@ -6784,6 +6784,12 @@
/mob/living/simple_animal/hostile/gorilla/cargo_domestic{
name = "Forklift"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -7989,6 +7995,9 @@
d2 = 8;
icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
/turf/simulated/floor/plating,
/area/station/maintenance/fsmaint)
"aYU" = (
@@ -10347,9 +10356,6 @@
d2 = 8;
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -10357,6 +10363,9 @@
name = "External Airlock Access"
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/station/hallway/primary/central/east)
"bly" = (
@@ -24234,17 +24243,10 @@
icon_state = "brown"
},
/area/station/supply/qm)
-"cEu" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 8
- },
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
- },
-/area/station/supply/office)
"cEv" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/turf/simulated/floor/plasteel{
icon_state = "dark"
@@ -24488,9 +24490,6 @@
},
/area/station/medical/chemistry)
"cFv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
/obj/structure/disposalpipe/segment,
/obj/structure/morgue{
dir = 8
@@ -37496,6 +37495,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "neutralcorner"
@@ -37596,11 +37598,9 @@
},
/area/station/security/checkpoint/secondary)
"eZa" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/door/airlock/public/glass{
name = "Central Access"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -39938,14 +39938,12 @@
dir = 4
},
/obj/item/storage/fancy/donut_box,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
/obj/structure/cable/orange{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/turf/simulated/floor/plasteel,
/area/station/security/main)
"fRK" = (
@@ -46776,11 +46774,11 @@
/turf/simulated/floor/transparent/glass/reinforced/plasma,
/area/station/engineering/control)
"ieP" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/turf/simulated/mineral/ancient,
-/area/station/maintenance/port2)
+/area/station/supply/office)
"ifa" = (
/turf/simulated/wall/indestructible/riveted,
/area/station/science/toxins/test)
@@ -48449,12 +48447,6 @@
icon_state = "dark"
},
/area/station/supply/office)
-"iFb" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/space,
-/area/space)
"iFj" = (
/obj/structure/disposalpipe/segment{
dir = 4;
@@ -51491,14 +51483,12 @@
"jAN" = (
/obj/effect/landmark/lightsout,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
/obj/structure/cable/orange{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -54589,10 +54579,10 @@
/turf/simulated/floor/plasteel,
/area/station/hallway/secondary/entry/south)
"kyi" = (
+/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 6
},
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/station/maintenance/fsmaint)
"kyo" = (
@@ -56993,7 +56983,9 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
},
@@ -62112,10 +62104,6 @@
icon_state = "wood-broken7"
},
/area/station/service/bar)
-"mRO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/wall,
-/area/station/hallway/primary/central/east)
"mRS" = (
/obj/effect/spawner/window/reinforced/grilled,
/obj/structure/sign/securearea,
@@ -64966,12 +64954,6 @@
icon_state = "darkyellow"
},
/area/station/engineering/break_room)
-"nNa" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/wall,
-/area/station/supply/office)
"nNd" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/light/small{
@@ -68413,9 +68395,6 @@
},
/area/station/hallway/primary/fore/west)
"oTn" = (
-/obj/machinery/atmospherics/unary/portables_connector{
- dir = 1
- },
/obj/machinery/atmospherics/unary/portables_connector,
/obj/machinery/atmospherics/portable/canister/air,
/turf/simulated/floor/plating,
@@ -71030,16 +71009,6 @@
/obj/effect/spawner/window/reinforced/grilled,
/turf/simulated/floor/plating,
/area/station/supply/miningdock)
-"pIz" = (
-/obj/structure/morgue,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/landmark/spawner/rev,
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
- },
-/area/station/medical/morgue)
"pII" = (
/obj/machinery/suit_storage_unit/rd/secure,
/obj/machinery/alarm/directional/east,
@@ -84569,6 +84538,9 @@
icon_state = "4-8"
},
/obj/effect/spawner/random_spawners/dirt_frequent,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/station/maintenance/fsmaint)
"ucV" = (
@@ -93467,20 +93439,6 @@
icon_state = "asteroidplating"
},
/area/station/maintenance/fore2)
-"wEY" = (
-/obj/machinery/atmospherics/meter,
-/obj/machinery/atmospherics/pipe/simple/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/unary/vent_pump/siphon/on{
- dir = 1;
- external_pressure_bound = 0;
- autolink_id = "o2_out";
- internal_pressure_bound = 4000;
- pressure_checks = 2
- },
-/turf/simulated/wall/r_wall,
-/area/station/engineering/atmos)
"wFa" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/item/radio/intercom{
@@ -94098,9 +94056,6 @@
/obj/item/roller,
/obj/item/roller,
/obj/item/roller,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -94109,6 +94064,7 @@
d2 = 8;
icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/turf/simulated/floor/plasteel{
icon_state = "whiteblue"
},
@@ -115720,7 +115676,7 @@ vkl
vkl
gtU
vkl
-xTj
+vkl
lyI
lyI
fPc
@@ -120273,7 +120229,7 @@ nIF
xdr
cEM
cEM
-ieP
+cEM
hoF
xWx
xWx
@@ -126737,7 +126693,7 @@ bPp
bDR
bNn
vsE
-wEY
+bPp
bDR
bUl
vsE
@@ -135197,7 +135153,7 @@ dwz
gzG
dwz
dwz
-mRO
+dwz
uNG
uNG
uNG
@@ -141851,7 +141807,7 @@ rNK
rNK
rNK
rNK
-iFb
+rNK
rNK
rNK
rNK
@@ -149538,7 +149494,7 @@ scI
any
cAn
cBv
-cEu
+pdF
cHF
ayP
cSE
@@ -149794,7 +149750,7 @@ woa
scI
any
aQA
-hZJ
+ieP
cEv
cIr
kkk
@@ -150316,7 +150272,7 @@ any
any
any
fue
-nNa
+any
ucH
gaX
any
@@ -153194,7 +153150,7 @@ bil
wxI
uyn
uyn
-pIz
+lzO
gGb
biN
ivK
diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm
index c77375516e74..1939e07b0136 100644
--- a/_maps/map_files/stations/deltastation.dmm
+++ b/_maps/map_files/stations/deltastation.dmm
@@ -17258,14 +17258,12 @@
d2 = 4;
icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
/obj/structure/cable{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
+/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "neutralcorner"
@@ -31904,7 +31902,7 @@
/area/station/engineering/ai_transit_tube)
"bNY" = (
/obj/item/kirbyplants,
-/obj/machinery/atmospherics/unary/vent_pump/on{
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
/turf/simulated/floor/plasteel{
@@ -34311,7 +34309,7 @@
/turf/simulated/floor/plasteel/dark,
/area/station/engineering/ai_transit_tube)
"bUd" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
/turf/simulated/floor/plasteel/dark,
@@ -72538,6 +72536,9 @@
/obj/machinery/door/airlock/mining{
name = "Expedition Headquarters"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/plasteel,
/area/station/supply/expedition)
"iFv" = (
@@ -90698,7 +90699,7 @@
},
/area/station/hallway/primary/central/north)
"sWx" = (
-/obj/effect/spawner/airlock/w_to_e,
+/obj/effect/spawner/airlock/e_to_w,
/turf/simulated/wall,
/area/station/engineering/ai_transit_tube)
"sWI" = (
diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm
index 1418a5a502fa..7738b3e73500 100644
--- a/_maps/map_files/stations/metastation.dmm
+++ b/_maps/map_files/stations/metastation.dmm
@@ -2133,7 +2133,6 @@
"aqc" = (
/obj/machinery/door/airlock/maintenance,
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/mapping_helpers/airlock/autoname,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/cyan,
@@ -25109,6 +25108,8 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/plasteel{
icon_state = "neutralcorner"
},
@@ -25397,12 +25398,6 @@
layer = 4;
pixel_y = 32
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -25416,6 +25411,12 @@
d2 = 8;
icon_state = "2-8"
},
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "neutralcorner"
@@ -57884,17 +57885,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/wood,
/area/station/public/mrchangs)
-"jjG" = (
-/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
- dir = 8
- },
-/obj/machinery/door/poddoor{
- id_tag = "ToxinsVenting";
- name = "Toxins Venting Bay Door";
- power_state = 0
- },
-/turf/space,
-/area/station/science/toxins/mixing)
"jjL" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/rack,
@@ -123657,7 +123647,7 @@ bMg
mcw
rfK
cEK
-jjG
+agK
agK
nec
cOp
diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm
index fbc7c2b91131..ac55af989b92 100644
--- a/code/__DEFINES/gamemode.dm
+++ b/code/__DEFINES/gamemode.dm
@@ -55,6 +55,7 @@
#define SPECIAL_ROLE_XENOMORPH_SENTINEL "Xenomorph Sentinel"
#define SPECIAL_ROLE_XENOMORPH_LARVA "Xenomorph Larva"
#define SPECIAL_ROLE_ZOMBIE "Zombie"
+#define SPECIAL_ROLE_TOURIST "Tourist"
#define SPECIAL_ROLE_EVENTMISC "Event Role"
// Constants used by code which checks the status of nuclear blasts during a
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index b7138d067920..c9c199b2acd2 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -25,6 +25,7 @@
#define ROLE_HOG_GOD "hand of god: god" // We're prolly gonna port this one day or another
#define ROLE_HOG_CULTIST "hand of god: cultist"
#define ROLE_TRADER "trader"
+#define ROLE_TOURIST "Tourist"
#define ROLE_VAMPIRE "vampire"
// Role tags for EVERYONE!
#define ROLE_DEMON "demon"
@@ -63,6 +64,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_ELITE, // Lavaland Elite
ROLE_TRADER, // Trader
ROLE_TRAITOR = /datum/game_mode/traitor, // Traitor
+ ROLE_TOURIST, // Tourist
ROLE_VAMPIRE = /datum/game_mode/vampire, // Vampire
ROLE_ALIEN, // Xenomorph
ROLE_WIZARD = /datum/game_mode/wizard // Wizard
diff --git a/code/__HELPERS/tool_helpers.dm b/code/__HELPERS/tool_helpers.dm
index c88ee7c6046e..b4e3ca5164a4 100644
--- a/code/__HELPERS/tool_helpers.dm
+++ b/code/__HELPERS/tool_helpers.dm
@@ -1,35 +1,27 @@
//Quick type checks for some tools
// Why are these not defines?
-/proc/iswrench(O)
- if(istype(O, /obj/item/wrench))
- return TRUE
- return FALSE
-/proc/iswelder(O)
- if(istype(O, /obj/item/weldingtool))
- return TRUE
- return FALSE
+/proc/iswrench(obj/item/O)
+ return istype(O) && O.tool_behaviour == TOOL_WRENCH
-/proc/iswirecutter(O)
- if(istype(O, /obj/item/wirecutters))
- return TRUE
- return FALSE
+/proc/iswelder(obj/item/O)
+ return istype(O) && O.tool_behaviour == TOOL_WELDER
-/proc/isscrewdriver(O)
- if(istype(O, /obj/item/screwdriver))
- return TRUE
- return FALSE
+/proc/iswirecutter(obj/item/O)
+ return istype(O) && O.tool_behaviour == TOOL_WIRECUTTER
-/proc/ismultitool(O)
- if(istype(O, /obj/item/multitool))
- return TRUE
- return FALSE
+/proc/isscrewdriver(obj/item/O)
+ return istype(O) && O.tool_behaviour == TOOL_SCREWDRIVER
+
+/proc/ismultitool(obj/item/O)
+ return istype(O) && O.tool_behaviour == TOOL_MULTITOOL
+
+/proc/iscrowbar(obj/item/O)
+ return istype(O) && O.tool_behaviour == TOOL_CROWBAR
/proc/iscoil(O)
- if(istype(O, /obj/item/stack/cable_coil))
- return TRUE
- return FALSE
+ return istype(O, /obj/item/stack/cable_coil)
/proc/ispowertool(O)//used to check if a tool can force powered doors
if(istype(O, /obj/item/crowbar/power) || istype(O, /obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw))
diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm
index 7ca2893038cc..e8e7aaead060 100644
--- a/code/__HELPERS/trait_helpers.dm
+++ b/code/__HELPERS/trait_helpers.dm
@@ -268,6 +268,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NO_THROWN_MESSAGE "no_message_when_thrown"
/// Makes the item not display a message on storage insertion
#define TRAIT_SILENT_INSERTION "silent_insertion"
+/// Makes an item active, this is generally used by energy based weapons or toggle based items.
+#define TRAIT_ITEM_ACTIVE "item_active"
/// A surgical tool; when in hand in help intent (and with a surgery in progress) won't attack the user
#define TRAIT_SURGICAL "surgical_tool"
@@ -394,6 +396,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define STATION_TRAIT_FORESTED "station_trait_forested"
#define STATION_TRAIT_VENDING_SHORTAGE "station_trait_vending_shortage"
#define STATION_TRAIT_MESSY "station_trait_messy"
+#define STATION_TRAIT_TRIAI "station_trait_triai"
//***** TURF TRAITS *****//
/// Removes slowdown while walking on these tiles.
diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm
index 3a6f55150783..8db9526d5255 100644
--- a/code/_globalvars/traits.dm
+++ b/code/_globalvars/traits.dm
@@ -124,7 +124,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_XENO_INTERACTABLE" = TRAIT_XENO_INTERACTABLE,
"TRAIT_NO_THROWN_MESSAGE" = TRAIT_NO_THROWN_MESSAGE,
"TRAIT_SILENT_INSERTION" = TRAIT_SILENT_INSERTION,
- "TRAIT_HYPOSPRAY_IMMUNE" = TRAIT_HYPOSPRAY_IMMUNE
+ "TRAIT_HYPOSPRAY_IMMUNE" = TRAIT_HYPOSPRAY_IMMUNE,
+ "TRAIT_ITEM_ACTIVE" = TRAIT_ITEM_ACTIVE
),
/turf = list(
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 848cf74f4d7b..0d4179e4c11a 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -81,7 +81,7 @@
M.lastattackerckey = user.ckey
user.do_attack_animation(M)
- . = !M.attacked_by(src, user, def_zone)
+ . = M.attacked_by(src, user, def_zone)
add_fingerprint(user)
@@ -101,7 +101,12 @@
/obj/attacked_by(obj/item/I, mob/living/user)
var/damage = I.force
if(I.force)
- user.visible_message("[user] has hit [src] with [I]! ", "You hit [src] with [I]! ")
+ user.visible_message(
+ "[user] has hit [src] with [I]! ",
+ "You hit [src] with [I]! ",
+ "You hear something being struck by a weapon! "
+ )
+
if(ishuman(user))
var/mob/living/carbon/human/H = user
damage += H.physiology.melee_bonus
@@ -125,11 +130,19 @@
/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user)
if(!I.force)
- user.visible_message("[user] gently taps [src] with [I]. ",\
- "This weapon is ineffective, it does no damage! ")
+ user.visible_message(
+ "[user] gently taps [src] with [I]. ",
+ "This weapon is ineffective, it does no damage! ",
+ "You hear a gentle tapping. "
+ )
+
else if(I.force < force_threshold || I.damtype == STAMINA)
- visible_message("[I] bounces harmlessly off of [src]. ",\
- "[I] bounces harmlessly off of [src]! ")
+ visible_message(
+ "[I] bounces harmlessly off of [src]. ",
+ "[I] bounces harmlessly off of [src]! ",
+ "You hear something being struck by a weapon! "
+ )
+
else
return ..()
@@ -159,6 +172,9 @@
var/attack_message = "[src] has been [message_verb][message_hit_area] with [I]."
if(user in viewers(src, null))
attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!"
- visible_message("[attack_message] ",\
- "[attack_message] ")
- return 1
+ visible_message(
+ "[attack_message] ",
+ "[attack_message] ",
+ "You hear someone being attacked with a weapon! "
+ )
+ return TRUE
diff --git a/code/_onclick/observer_onclick.dm b/code/_onclick/observer_onclick.dm
index 44ead52d45bc..1b3955b5de94 100644
--- a/code/_onclick/observer_onclick.dm
+++ b/code/_onclick/observer_onclick.dm
@@ -107,7 +107,3 @@
var/obj/machinery/computer/teleporter/com = S.teleporter_console
if(com && com.target)
user.forceMove(get_turf(com.target))
-
-/obj/effect/portal/attack_ghost(mob/user as mob)
- if(target)
- user.forceMove(get_turf(target))
diff --git a/code/controllers/subsystem/SSticker.dm b/code/controllers/subsystem/SSticker.dm
index 42b1b960a38a..f5170711167b 100644
--- a/code/controllers/subsystem/SSticker.dm
+++ b/code/controllers/subsystem/SSticker.dm
@@ -284,6 +284,12 @@ SUBSYSTEM_DEF(ticker)
Master.SetRunLevel(RUNLEVEL_GAME)
// Generate the list of empty playable AI cores in the world
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_TRIAI))
+ for(var/obj/effect/landmark/tripai in GLOB.landmarks_list)
+ if(tripai.name == "tripai")
+ if(locate(/mob/living) in get_turf(tripai))
+ continue
+ GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(tripai))
for(var/obj/effect/landmark/start/ai/A in GLOB.landmarks_list)
if(locate(/mob/living) in get_turf(A))
continue
diff --git a/code/datums/components/defibrillator.dm b/code/datums/components/defibrillator.dm
index be017d71dd29..e1c8011fe17e 100644
--- a/code/datums/components/defibrillator.dm
+++ b/code/datums/components/defibrillator.dm
@@ -1,6 +1,9 @@
/**
* A component for an item that attempts to defibrillate a mob when activated.
*/
+
+#define DEFIB_TIME 5 SECONDS
+
/datum/component/defib
/// If this is being used by a borg or not, with necessary safeties applied if so.
var/robotic
@@ -24,6 +27,18 @@
var/emag_proof
/// uid to an item that should be making noise and handling things that our direct parent shouldn't be concerned with.
var/actual_unit_uid
+ /// Sound for defib windup.
+ var/charge_sound = 'sound/machines/defib_charge.ogg'
+ /// Sound when the defib is successful.
+ var/success_sound = 'sound/machines/defib_success.ogg'
+ /// Sound when the defib fails.
+ var/fail_sound = 'sound/machines/defib_failed.ogg'
+ /// Sound when the defib shocks the patient.
+ var/zap_sound = 'sound/machines/defib_zap.ogg'
+ /// Sound when the defib's safety is enabled.
+ var/safety_on_sound = 'sound/machines/defib_saftyon.ogg'
+ /// Sound when the defib's safety is disabled.
+ var/safety_off_sound = 'sound/machines/defib_saftyoff.ogg'
/**
* Create a new defibrillation component.
@@ -78,11 +93,11 @@
if(safety)
safety = FALSE
unit.visible_message("[unit] beeps: Safety protocols disabled! ")
- playsound(get_turf(unit), 'sound/machines/defib_saftyoff.ogg', 50, 0)
+ playsound(get_turf(unit), safety_off_sound, 50, FALSE)
else
safety = TRUE
unit.visible_message("[unit] beeps: Safety protocols enabled! ")
- playsound(get_turf(unit), 'sound/machines/defib_saftyon.ogg', 50, 0)
+ playsound(get_turf(unit), safety_on_sound, 50, FALSE)
/datum/component/defib/proc/on_emag(obj/item/unit, mob/user)
SIGNAL_HANDLER // COMSIG_ATOM_EMAG_ACT
@@ -134,7 +149,7 @@
if(application_result & COMPONENT_BLOCK_DEFIB_DEAD)
user.visible_message("[defib_ref] beeps: Unit is unpowered. ")
- playsound(get_turf(defib_ref), 'sound/machines/defib_failed.ogg', 50, 0)
+ playsound(get_turf(defib_ref), fail_sound, 50, FALSE)
return
if(on_cooldown)
@@ -179,12 +194,8 @@
SEND_SOUND(target, sound('sound/effects/genetics.ogg'))
target.throw_alert("cling_defib", /atom/movable/screen/alert/changeling_defib_revive, alert_args = list(parent, target))
- if(!do_after(user, 3 SECONDS * speed_multiplier, target = target)) // Beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
- busy = FALSE
- return
-
user.visible_message("[user] places [parent] on [target]'s chest. ", "You place [parent] on [target]'s chest. ")
- playsound(get_turf(defib_ref), 'sound/machines/defib_charge.ogg', 50, 0)
+ playsound(get_turf(defib_ref), charge_sound, 50, FALSE)
if(ghost && !ghost.client && !QDELETED(ghost))
log_debug("Ghost of name [ghost.name] is bound to [target.real_name], but lacks a client. Deleting ghost.")
@@ -192,13 +203,13 @@
var/signal_result = SEND_SIGNAL(target, COMSIG_LIVING_PRE_DEFIB, user, parent, ghost)
- if(!do_after(user, 2 SECONDS * speed_multiplier, target = target)) // Placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
+ if(!do_after(user, DEFIB_TIME * speed_multiplier, target = target)) // Placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
busy = FALSE
return
if(istype(target.wear_suit, /obj/item/clothing/suit/space) && !combat)
user.visible_message("[defib_ref] buzzes: Patient's chest is obscured. Operation aborted. ")
- playsound(get_turf(defib_ref), 'sound/machines/defib_failed.ogg', 50, 0)
+ playsound(get_turf(defib_ref), fail_sound, 50, FALSE)
busy = FALSE
return
@@ -216,7 +227,7 @@
else if(heart.linked_organ.status & ORGAN_DEAD)
user.visible_message("[defib_ref] buzzes: Resuscitation failed - Heart necrosis detected. ")
if(!heart || (heart.linked_organ.status & ORGAN_DEAD))
- playsound(get_turf(defib_ref), 'sound/machines/defib_failed.ogg', 50, 0)
+ playsound(get_turf(defib_ref), fail_sound, 50, FALSE)
busy = FALSE
return
@@ -226,21 +237,21 @@
set_cooldown(cooldown)
user.visible_message("[defib_ref] pings: Cardiac arrhythmia corrected. ")
target.visible_message("[target]'s body convulses a bit. ", "You feel a jolt, and your heartbeat seems to steady. ")
- playsound(get_turf(defib_ref), 'sound/machines/defib_zap.ogg', 50, TRUE, -1)
- playsound(get_turf(defib_ref), "bodyfall", 50, 1)
- playsound(get_turf(defib_ref), 'sound/machines/defib_success.ogg', 50, 0)
+ playsound(get_turf(defib_ref), zap_sound, 50, TRUE, -1)
+ playsound(get_turf(defib_ref), "bodyfall", 50, TRUE)
+ playsound(get_turf(defib_ref), success_sound, 50, FALSE)
busy = FALSE
return
if(target.stat != DEAD && !HAS_TRAIT(target, TRAIT_FAKEDEATH))
user.visible_message("[defib_ref] buzzes: Patient is not in a valid state. Operation aborted. ")
- playsound(get_turf(defib_ref), 'sound/machines/defib_failed.ogg', 50, 0)
+ playsound(get_turf(defib_ref), fail_sound, 50, FALSE)
busy = FALSE
return
target.visible_message("[target]'s body convulses a bit. ")
- playsound(get_turf(defib_ref), "bodyfall", 50, 1)
- playsound(get_turf(defib_ref), 'sound/machines/defib_zap.ogg', 50, TRUE, -1)
+ playsound(get_turf(defib_ref), "bodyfall", 50, TRUE)
+ playsound(get_turf(defib_ref), zap_sound, 50, TRUE, -1)
ghost = target.get_ghost(TRUE) // We have to double check whether the dead guy has entered their body during the above
// Run through some quick failure states after shocking.
@@ -276,7 +287,7 @@
if(failure_message)
user.visible_message(failure_message)
- playsound(get_turf(defib_ref), 'sound/machines/defib_failed.ogg', 50, 0)
+ playsound(get_turf(defib_ref), fail_sound, 50, FALSE)
else
// Heal each basic damage type by as much as we're under -100 health
var/damage_above_threshold = -(min(target.health, HEALTH_THRESHOLD_DEAD) - HEALTH_THRESHOLD_DEAD)
@@ -299,10 +310,10 @@
if(target.getBrainLoss() >= 100)
// If you want to treat this with mannitol, it'll have to metabolize while the patient is alive, so it's alright to bring them back up for a minute
- playsound(get_turf(defib_ref), 'sound/machines/defib_saftyoff.ogg', 50, 0)
+ playsound(get_turf(defib_ref), safety_off_sound, 50, FALSE)
user.visible_message("[defib_ref] chimes: Minimal brain activity detected, brain treatment recommended for full resuscitation. ")
else
- playsound(get_turf(defib_ref), 'sound/machines/defib_success.ogg', 50, 0)
+ playsound(get_turf(defib_ref), success_sound, 50, FALSE)
user.visible_message("[defib_ref] pings: Resuscitation successful. ")
@@ -340,7 +351,7 @@
"[user] touches you with [parent], and you feel a strong jolt! ")
target.apply_damage(60, STAMINA)
target.KnockDown(10 SECONDS)
- playsound(get_turf(parent), 'sound/machines/defib_zap.ogg', 50, TRUE, -1)
+ playsound(get_turf(parent), zap_sound, 50, TRUE, -1)
target.emote("gasp")
if(combat && prob(heart_attack_chance))
target.set_heartattack(TRUE)
@@ -362,7 +373,7 @@
target.set_heartattack(TRUE)
target.visible_message("[user] has touched [target] with [parent]! ", \
"[user] touches you with [parent], and you feel a strong jolt! ")
- playsound(get_turf(parent), 'sound/machines/defib_zap.ogg', 50, TRUE, -1)
+ playsound(get_turf(parent), zap_sound, 50, TRUE, -1)
SEND_SIGNAL(target, COMSIG_LIVING_MINOR_SHOCK, 100)
set_cooldown(cooldown)
return
@@ -398,5 +409,4 @@
"You feel a powerful shock travel up your [affecting.hand ? affecting.get_organ("l_arm") : affecting.get_organ("r_arm")] and back down your [affecting.hand ? affecting.get_organ("r_arm") : affecting.get_organ("l_arm")]! ")
affecting.set_heartattack(TRUE)
-
-
+#undef DEFIB_TIME
diff --git a/code/datums/components/parry.dm b/code/datums/components/parry.dm
index f0d82912a7ce..285353bd8418 100644
--- a/code/datums/components/parry.dm
+++ b/code/datums/components/parry.dm
@@ -16,6 +16,10 @@
var/no_parry_sound
/// Text to be shown to users who examine the parent. Will list which type of attacks it can parry.
var/examine_text
+ /// Does this item have a require a condition to meet before being able to parry? This is for two handed weapons that can parry. (Default: FALSE)
+ var/requires_two_hands = FALSE
+ /// Does this item require activation? This is for activation based items or energy weapons.
+ var/requires_activation = FALSE
/datum/component/parry/RegisterWithParent()
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(equipped))
@@ -32,7 +36,7 @@
if(ismob(I.loc))
UnregisterSignal(I.loc, COMSIG_HUMAN_PARRY)
-/datum/component/parry/Initialize(_stamina_constant = 0, _stamina_coefficient = 0, _parry_time_out_time = PARRY_DEFAULT_TIMEOUT, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = 2 SECONDS, _no_parry_sound = FALSE)
+/datum/component/parry/Initialize(_stamina_constant = 0, _stamina_coefficient = 0, _parry_time_out_time = PARRY_DEFAULT_TIMEOUT, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = 2 SECONDS, _no_parry_sound = FALSE, _requires_two_hands = FALSE, _requires_activation = FALSE)
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
@@ -41,6 +45,8 @@
stamina_coefficient = _stamina_coefficient
parry_cooldown = _parry_cooldown
no_parry_sound = _no_parry_sound
+ requires_two_hands = _requires_two_hands
+ requires_activation = _requires_activation
if(islist(_parryable_attack_types))
parryable_attack_types = _parryable_attack_types
else
@@ -73,6 +79,10 @@
/datum/component/parry/proc/start_parry(mob/living/L)
SIGNAL_HANDLER
var/time_since_parry = world.time - time_parried
+ if(requires_two_hands && !HAS_TRAIT(parent, TRAIT_WIELDED)) // If our item has special conditions before being able to parry.
+ return
+ if(requires_activation && !HAS_TRAIT(parent, TRAIT_ITEM_ACTIVE)) // If our item requires an activation to be able to parry. [E-sword / Teleshield, etc.]
+ return
if(time_since_parry < parry_cooldown) // stops spam
return
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index a7d7fb33062c..280213036183 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -42,6 +42,16 @@
/client/vv_edit_var(var_name, var_value) //called whenever a var is edited
switch(var_name)
+ // I know we will never be in a world where admins are editing client vars to let people bypass TOS
+ // But guess what, if I have the ability to overengineer something, I am going to do it
+ if("tos_consent")
+ return FALSE
+ // Dont fuck with this
+ if("cui_entries")
+ return FALSE
+ // or this
+ if("jbh")
+ return FALSE
if("vars")
return FALSE
if("var_edited")
diff --git a/code/datums/diseases/advance/symptoms/viral.dm b/code/datums/diseases/advance/symptoms/viral.dm
index 8ac3723c55b5..1614d092fc3a 100644
--- a/code/datums/diseases/advance/symptoms/viral.dm
+++ b/code/datums/diseases/advance/symptoms/viral.dm
@@ -54,7 +54,7 @@ BONUS
transmittable = 3
level = 3
-/datum/symptom/viraladaptation/Activate(datum/disease/advance/A)
+/datum/symptom/viralevolution/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index 0ffdc3b81e4a..b4f1cfac350f 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -1579,3 +1579,50 @@
qdel(H.GetComponent(/datum/component/footstep)) // they're literally stealth
var/datum/martial_art/cqc/CQC = new()
CQC.teach(H)
+
+/datum/outfit/admin/tourist
+ name = "Tourist"
+ uniform = /obj/item/clothing/under/misc/redhawaiianshirt
+ back = /obj/item/storage/backpack/satchel/withwallet
+ belt = /obj/item/storage/belt/fannypack
+ head = /obj/item/clothing/head/boaterhat
+ l_ear = /obj/item/radio/headset
+ glasses = /obj/item/clothing/glasses/sunglasses_fake
+ shoes = /obj/item/clothing/shoes/sandal
+ id = /obj/item/card/id/assistant
+ box = /obj/item/storage/box/survival
+ pda = /obj/item/pda/clear
+
+ backpack_contents = list(
+ /obj/item/camera = 1,
+ /obj/item/camera_film = 1,
+ /obj/item/stack/spacecash/c200 = 1,
+ /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1,
+ /obj/item/lighter/zippo = 1
+ )
+
+/datum/outfit/admin/tourist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ // Sets the ID and secHUD icon!
+ var/obj/item/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(ACCESS_MAINT_TUNNELS), name, "tourist")
+ // Checking if the person has an account already
+ var/datum/money_account/account = H.mind.initial_account
+ if(!account)
+ // If they don't, we create a new one and get it's account number.
+ SSjobs.CreateMoneyAccount(H, null, null)
+ account = H.mind.initial_account
+ I.associated_account_number = account.account_number
+ I.associated_account_number = account.account_number
+ H.sec_hud_set_ID()
+
+ // PDA setup
+ var/obj/item/pda/P = H.wear_pda
+ if(istype(P))
+ P.owner = H.real_name
+ P.ownjob = "Tourist"
+ P.name = "PDA-[H.real_name] ([P.ownjob])"
diff --git a/code/datums/ruins/space_ruins.dm b/code/datums/ruins/space_ruins.dm
index a939f952dd27..41d93e14769a 100644
--- a/code/datums/ruins/space_ruins.dm
+++ b/code/datums/ruins/space_ruins.dm
@@ -59,6 +59,7 @@
evidence of construction, hook it covertly into the \
telecommunications network and hope for the best."
cost = 2
+ allow_duplicates = FALSE // this shouldn't be spawning more than once anymore
/datum/map_template/ruin/space/derelict1
id = "derelict1"
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index c510c180ed18..3c226aa476ca 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -20,6 +20,8 @@ GLOBAL_LIST_INIT(spells, typesof(/datum/spell))
user.ranged_ability.remove_ranged_ability(user)
return TRUE //TRUE for failed, FALSE for passed.
user.face_atom(A)
+ if(targeting)
+ targeting.InterceptClickOn(user, params, A, src)
return FALSE
/datum/spell/proc/add_ranged_ability(mob/user, msg)
@@ -269,13 +271,6 @@ GLOBAL_LIST_INIT(spells, typesof(/datum/spell))
/datum/spell/proc/AltClick(mob/user)
return Click()
-/datum/spell/InterceptClickOn(mob/user, params, atom/A)
- . = ..()
- if(.)
- return
- if(targeting)
- targeting.InterceptClickOn(user, params, A, src)
-
///Lets the spell have a special effect applied to it when upgraded. By default, does nothing.
/datum/spell/proc/on_purchase_upgrade()
return
diff --git a/code/datums/spells/bloodcrawl.dm b/code/datums/spells/bloodcrawl.dm
index e5c99fac868a..b1ab9853096c 100644
--- a/code/datums/spells/bloodcrawl.dm
+++ b/code/datums/spells/bloodcrawl.dm
@@ -102,7 +102,10 @@
/datum/spell/bloodcrawl/proc/sink_animation(atom/A, mob/living/L)
var/turf/mob_loc = get_turf(L)
- mob_loc.visible_message("[L] sinks into [A]. ")
+ mob_loc.visible_message(
+ "[L] sinks into [A]. ",
+ "You hear something sinking into a thick liquid. "
+ )
playsound(mob_loc, 'sound/misc/enter_blood.ogg', 100, TRUE, -1)
new /obj/effect/temp_visual/dir_setting/bloodcrawl(mob_loc, L.dir, "jaunt")
@@ -113,16 +116,25 @@
if(!istype(victim))
return
if(victim.stat == CONSCIOUS)
- A.visible_message("[victim] kicks free of [A] just before entering it! ")
+ A.visible_message(
+ "[victim] kicks free of [A] just before entering it! ",
+ "You hear something sinking into a thick liquid and someone struggling! "
+ )
L.stop_pulling()
return
victim.forceMove(holder)
victim.emote("scream")
- A.visible_message("[L] drags [victim] into [A]! ")
+ A.visible_message(
+ "[L] drags [victim] into [A]! ",
+ "You hear something being dragged into a thick liquid! "
+ )
L.stop_pulling()
- to_chat(L, "You begin to feast on [victim]. You can not move while you are doing this. ")
- A.visible_message("Loud eating sounds come from the blood... ")
+ to_chat(L, "You begin to feast on [victim]. You cannot move while you are doing this. ")
+ A.visible_message(
+ "Loud eating sounds come from the blood... ",
+ "The sound of torn flesh and snapping bones fills the air... "
+ )
var/sound
if(isslaughterdemon(L))
var/mob/living/simple_animal/demon/slaughter/SD = L
@@ -200,7 +212,10 @@
if(prob(25) && isdemon(L))
var/list/voice = list('sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/i_see_you1.ogg')
playsound(tele_loc, pick(voice),50, TRUE, -1)
- A.visible_message("[L] rises out of [A]! ")
+ A.visible_message(
+ "[L] rises out of [A]! ",
+ "You hear something rising out of a thick liquid! "
+ )
playsound(get_turf(tele_loc), 'sound/misc/exit_blood.ogg', 100, TRUE, -1)
/datum/spell/bloodcrawl/proc/unblock_hands(mob/living/carbon/C)
@@ -210,7 +225,10 @@
qdel(BC)
/datum/spell/bloodcrawl/proc/rise_message(atom/A)
- A.visible_message("[A] starts to bubble... ")
+ A.visible_message(
+ "[A] starts to bubble... ",
+ "You can hear bubbling... "
+ )
/datum/spell/bloodcrawl/proc/post_phase_out(atom/A, mob/living/L)
if(isslaughterdemon(L))
diff --git a/code/datums/spells/mimic.dm b/code/datums/spells/mimic.dm
index af1ec3e5b4a5..10795b832f7a 100644
--- a/code/datums/spells/mimic.dm
+++ b/code/datums/spells/mimic.dm
@@ -132,7 +132,11 @@
selected_form = form
/datum/spell/mimic/proc/show_change_form_message(mob/user, old_name, new_name)
- user.visible_message("[old_name] contorts and slowly becomes [new_name]! ", "You take form of [new_name]. ", "You hear loud cracking noises!")
+ user.visible_message(
+ "[old_name] contorts and slowly becomes [new_name]! ",
+ "You take the form of [new_name]. ",
+ "You hear loud cracking noises! "
+ )
/datum/spell/mimic/proc/restore_form(mob/user, show_message = TRUE)
selected_form = null
@@ -157,7 +161,11 @@
UnregisterSignal(user, list(COMSIG_PARENT_EXAMINE, COMSIG_MOB_DEATH))
/datum/spell/mimic/proc/show_restore_form_message(mob/user, old_name, new_name)
- user.visible_message("[old_name] shakes and contorts and quickly becomes [new_name]! ", "You take return to your normal self. ", "You hear loud cracking noises!")
+ user.visible_message(
+ "[old_name] shakes and contorts and quickly becomes [new_name]! ",
+ "You return to your normal self. ",
+ "You hear loud cracking noises! "
+ )
/datum/spell/mimic/proc/examine_override(datum/source, mob/user, list/examine_list)
examine_list.Cut()
@@ -171,7 +179,11 @@
show_death_message(user)
/datum/spell/mimic/proc/show_death_message(mob/user)
- user.visible_message("[user] shakes and contorts as [user.p_they()] die[user.p_s()], returning to [user.p_their()] true form! ", "Your disguise fails as your life forces drain away. ", "You hear loud cracking noises followed by a thud!")
+ user.visible_message(
+ "[user] shakes and contorts as [user.p_they()] die[user.p_s()], returning to [user.p_their()] true form! ",
+ "Your disguise fails as your life forces drain away. ",
+ "You hear loud cracking noises followed by a thud! "
+ )
/datum/mimic_form
@@ -208,13 +220,22 @@
user.restore()
/datum/spell/mimic/morph/show_change_form_message(mob/user, old_name, new_name)
- user.visible_message("[old_name] suddenly twists and changes shape, becoming a copy of [new_name]! ", \
- "You twist your body and assume the form of [new_name]. ")
+ user.visible_message(
+ "[old_name] suddenly twists and changes shape, becoming a copy of [new_name]! ",
+ "You twist your body and assume the form of [new_name]. ",
+ "You hear loud cracking noises! "
+ )
/datum/spell/mimic/morph/show_restore_form_message(mob/user, old_name, new_name)
- user.visible_message("[old_name] suddenly collapses in on itself, dissolving into a pile of green flesh! ", \
- "You reform to your normal body. ")
+ user.visible_message(
+ "[old_name] suddenly collapses in on itself, dissolving into a pile of green flesh! ",
+ "You reform to your normal body. ",
+ "You hear loud cracking noises followed by a thud! "
+ )
/datum/spell/mimic/morph/show_death_message(mob/user)
- user.visible_message("[user] twists and dissolves into a pile of green flesh! ", \
- "Your skin ruptures! Your flesh breaks apart! No disguise can ward off de-- ")
+ user.visible_message(
+ "[user] twists and dissolves into a pile of green flesh! ",
+ "Your skin ruptures! Your flesh breaks apart! No disguise can ward off de-- ",
+ "You hear loud cracking noises followed by a thud! "
+ )
diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm
index 4661f5efed8c..370ef497779c 100644
--- a/code/datums/station_traits/neutral_traits.dm
+++ b/code/datums/station_traits/neutral_traits.dm
@@ -64,3 +64,19 @@
/datum/station_trait/hangover/revert()
. = ..()
SSjobs.drunken_spawning = FALSE
+
+/datum/station_trait/triple_ai
+ name = "AI Triumvirate"
+ trait_type = STATION_TRAIT_NEUTRAL
+ weight = 1
+ show_in_report = TRUE
+ report_message = "As part of Operation Magi, your station has been equipped with three Nanotrasen Artificial Intelligence models. Please try not to break them."
+ trait_to_give = STATION_TRAIT_TRIAI
+
+/datum/station_trait/triple_ai/New()
+ . = ..()
+ SSticker.triai = TRUE
+
+/datum/station_trait/triple_ai/revert()
+ . = ..()
+ SSticker.triai = FALSE
diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm
index 8a69797cccde..5d83a5aec80a 100644
--- a/code/datums/uplink_items/uplink_general.dm
+++ b/code/datums/uplink_items/uplink_general.dm
@@ -212,6 +212,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/dualsaber
cost = 60
+/datum/uplink_item/dangerous/snakefang
+ name = "Snakesfang"
+ desc = "The snakesfang is a fork-tipped scimitar with a sharp edge and sharper bite. This sword cannot fit in your bag, but it does come with a scabbard you can attach to your belt."
+ reference = "SF"
+ item = /obj/item/storage/belt/sheath/snakesfang
+ cost = 25
+
/datum/uplink_item/dangerous/powerfist
name = "Power Fist"
desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply. \
@@ -734,6 +741,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/jammer
cost = 20
+/datum/uplink_item/device_tools/decoy_nade
+ name = "Decoy Grenade Kit"
+ desc = "A box of five grenades that can be configured to reproduce many suspicious sounds at varying rates."
+ reference = "DCY"
+ item = /obj/item/storage/box/syndie_kit/decoy
+ cost = 20
+
////////////////////////////////////////
// MARK: SPACE SUITS AND HARDSUITS
////////////////////////////////////////
diff --git a/code/game/area/areas/ruins/space_areas.dm b/code/game/area/areas/ruins/space_areas.dm
index deec93e41dae..af8b7c6f9ebd 100644
--- a/code/game/area/areas/ruins/space_areas.dm
+++ b/code/game/area/areas/ruins/space_areas.dm
@@ -240,3 +240,7 @@
/area/ruin/space/telecomms/chamber
name = "\improper Telecommunications Central Compartment"
icon_state = "ai_chamber"
+
+/area/ruin/space/deepstorage
+ name = "Derelict Facility"
+ apc_starts_off = TRUE
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index a10af53d45ee..fbf492896f70 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -109,12 +109,12 @@
// Variables for bloom and exposure
var/glow_icon = 'icons/obj/lamps.dmi'
var/exposure_icon = 'icons/effects/exposures.dmi'
-
+
var/glow_icon_state
var/glow_colored = TRUE
var/exposure_icon_state
var/exposure_colored = TRUE
-
+
var/image/glow_overlay
var/image/exposure_overlay
/// The alternate appearances we own. Lazylist
@@ -304,9 +304,6 @@
/atom/proc/return_analyzable_air()
return null
-/atom/proc/check_eye(mob/user)
- return
-
/atom/proc/on_reagent_change()
return
@@ -1179,7 +1176,6 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
if("color")
add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
-
/atom/vv_get_dropdown()
. = ..()
.["Manipulate Colour Matrix"] = "?_src_=vars;manipcolours=[UID()]"
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 49b3b9a4f81d..bcdcde39a4c9 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -104,6 +104,13 @@
if(pulledby)
pulledby.stop_pulling()
+ var/turf/T = loc
+ if(opacity && istype(T))
+ var/old_has_opaque_atom = T.has_opaque_atom
+ T.recalc_atom_opacity()
+ if(old_has_opaque_atom != T.has_opaque_atom)
+ T.reconsider_lights()
+
//Returns an atom's power cell, if it has one. Overload for individual items.
/atom/movable/proc/get_cell()
return
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 96d602fd4d6a..cea644022803 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -111,8 +111,8 @@
return FALSE
/obj/machinery/dna_scannernew/relaymove(mob/user)
- if(user.stat)
- return
+ if(user.incapacitated())
+ return FALSE //maybe they should be able to get out with cuffs, but whatever
go_out()
/obj/machinery/dna_scannernew/AltClick(mob/user)
@@ -247,11 +247,6 @@
if(default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]", I))
return TRUE
-/obj/machinery/dna_scannernew/relaymove(mob/user)
- if(user.incapacitated())
- return FALSE //maybe they should be able to get out with cuffs, but whatever
- go_out()
-
/obj/machinery/dna_scannernew/proc/put_in(mob/M)
M.forceMove(src)
occupant = M
@@ -284,7 +279,6 @@
..()
if(A == occupant)
occupant = null
- updateUsrDialog()
update_icon(UPDATE_ICON_STATE)
SStgui.update_uis(src)
diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm
index 8d0dc1e03d5f..543218ac6296 100644
--- a/code/game/gamemodes/cult/blood_magic.dm
+++ b/code/game/gamemodes/cult/blood_magic.dm
@@ -418,11 +418,6 @@
uses = 0
qdel(src)
return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
- playsound(M, 'sound/weapons/genhit.ogg', 50, TRUE)
- return TRUE
add_attack_logs(user, M, "used a cult spell ([src]) on")
M.lastattacker = user.real_name
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 389df33cca5c..9d244d03c5bd 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -45,17 +45,11 @@
else
user.adjustBruteLoss(rand(force/2, force))
return
- . = ..()
-
-/obj/item/melee/cultblade/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- . = ..()
- if(!proximity_flag)
- return
- if(!isliving(target))
- return
- var/mob/living/living_target = target
- var/datum/status_effect/cult_stun_mark/S = living_target.has_status_effect(STATUS_EFFECT_CULT_STUN)
- S?.trigger()
+ if(!IS_CULTIST(target))
+ var/datum/status_effect/cult_stun_mark/S = target.has_status_effect(STATUS_EFFECT_CULT_STUN)
+ if(S)
+ S.trigger()
+ ..()
/obj/item/melee/cultblade/pickup(mob/living/user)
. = ..()
@@ -573,7 +567,7 @@
/obj/item/cult_spear/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.4, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (5 / 3) SECONDS ) // 0.666667 seconds for 60% uptime.
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.4, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (5 / 3) SECONDS) // 0.666667 seconds for 60% uptime.
AddComponent(/datum/component/two_handed, force_wielded = 24, force_unwielded = force, icon_wielded = "[base_icon_state]1")
/obj/item/cult_spear/Destroy()
@@ -586,40 +580,35 @@
/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
var/turf/T = get_turf(hit_atom)
- if(!isliving(hit_atom))
- ..()
- return
-
- var/mob/living/L = hit_atom
- if(IS_CULTIST(L))
- playsound(src, 'sound/weapons/throwtap.ogg', 50)
- if(!L.restrained() && L.put_in_active_hand(src))
- L.visible_message("[L] catches [src] out of the air! ")
- else
- L.visible_message("[src] bounces off of [L], as if repelled by an unseen force! ")
- return
-
- if(..())
- return
-
- if(L.null_rod_check())
- return
- var/datum/status_effect/cult_stun_mark/S = L.has_status_effect(STATUS_EFFECT_CULT_STUN)
- if(S)
- S.trigger()
+ if(isliving(hit_atom))
+ var/mob/living/L = hit_atom
+ if(IS_CULTIST(L))
+ playsound(src, 'sound/weapons/throwtap.ogg', 50)
+ if(!L.restrained() && L.put_in_active_hand(src))
+ L.visible_message("[L] catches [src] out of the air! ")
+ else
+ L.visible_message("[src] bounces off of [L], as if repelled by an unseen force! ")
+ else if(!..())
+ if(L.null_rod_check())
+ return
+ var/datum/status_effect/cult_stun_mark/S = L.has_status_effect(STATUS_EFFECT_CULT_STUN)
+ if(S)
+ S.trigger()
+ else
+ L.KnockDown(10 SECONDS)
+ L.apply_damage(60, STAMINA)
+ L.apply_status_effect(STATUS_EFFECT_CULT_STUN)
+ L.flash_eyes(1, TRUE)
+ if(issilicon(L))
+ L.emp_act(EMP_HEAVY)
+ else if(iscarbon(L))
+ L.Silence(6 SECONDS)
+ L.Stuttering(16 SECONDS)
+ L.CultSlur(20 SECONDS)
+ L.Jitter(16 SECONDS)
+ break_spear(T)
else
- L.KnockDown(10 SECONDS)
- L.apply_damage(60, STAMINA)
- L.apply_status_effect(STATUS_EFFECT_CULT_STUN)
- L.flash_eyes(1, TRUE)
- if(issilicon(L))
- L.emp_act(EMP_HEAVY)
- else if(iscarbon(L))
- L.Silence(6 SECONDS)
- L.Stuttering(16 SECONDS)
- L.CultSlur(20 SECONDS)
- L.Jitter(16 SECONDS)
- break_spear(T)
+ ..()
/obj/item/cult_spear/proc/break_spear(turf/T)
if(!T)
@@ -631,14 +620,9 @@
playsound(T, 'sound/effects/glassbr3.ogg', 100)
qdel(src)
-/obj/item/cult_spear/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+/obj/item/cult_spear/attack(mob/living/M, mob/living/user, def_zone)
. = ..()
- if(!proximity_flag)
- return
- if(!isliving(target))
- return
- var/mob/living/living_target = target
- var/datum/status_effect/cult_stun_mark/S = living_target.has_status_effect(STATUS_EFFECT_CULT_STUN)
+ var/datum/status_effect/cult_stun_mark/S = M.has_status_effect(STATUS_EFFECT_CULT_STUN)
if(S && HAS_TRAIT(src, TRAIT_WIELDED))
S.trigger()
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index 438820a8a33d..2379a4555270 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -43,6 +43,10 @@
M.reagents.del_reagent("holywater")
add_attack_logs(user, M, "Hit with [src], removing the holy water from them")
return FALSE
+ else
+ var/datum/status_effect/cult_stun_mark/S = M.has_status_effect(STATUS_EFFECT_CULT_STUN)
+ if(S)
+ S.trigger()
. = ..()
/obj/item/melee/cultblade/dagger/attack_self(mob/user)
diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm
index 6ea8194fe61f..3ccb08f7b933 100644
--- a/code/game/gamemodes/extended/extended.dm
+++ b/code/game/gamemodes/extended/extended.dm
@@ -4,7 +4,7 @@
required_players = 0
single_antag_positions = list()
-/datum/game_mode/announce()
+/datum/game_mode/extended/announce()
to_chat(world, "The current game mode is - Extended Role-Playing! ")
to_chat(world, "Just have fun and role-play! ")
diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm
index cfa12d92b6a5..425e4013bb50 100644
--- a/code/game/gamemodes/miniantags/guardian/guardian.dm
+++ b/code/game/gamemodes/miniantags/guardian/guardian.dm
@@ -146,19 +146,24 @@
if(hud_used)
hud_used.guardianhealthdisplay.maptext = "
[resulthealth]%
"
-/mob/living/simple_animal/hostile/guardian/adjustHealth(amount, updating_health = TRUE) //The spirit is invincible, but passes on damage to the summoner
+/mob/living/simple_animal/hostile/guardian/adjustHealth(amount, updating_health = TRUE) //The spirit is invincible, but passes on damage/healing to the summoner
var/damage = amount * damage_transfer
- if(summoner)
- if(loc == summoner)
- return
- summoner.adjustBruteLoss(damage)
- if(damage)
- to_chat(summoner, "Your [name] is under attack! You take damage! ")
- if(!stealthy_deploying)
- summoner.visible_message("Blood sprays from [summoner] as [src] takes damage! ")
- if(summoner.stat == UNCONSCIOUS)
- to_chat(summoner, "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart! ")
- summoner.adjustCloneLoss(damage/2)
+ if(!summoner)
+ return
+ if(loc == summoner)
+ return
+
+ summoner.adjustBruteLoss(damage)
+ if(damage < 0)
+ to_chat(summoner, "Your [name] is receiving healing. It heals you! ")
+ else
+ to_chat(summoner, "Your [name] is under attack! You take damage! ")
+ if(!stealthy_deploying)
+ summoner.visible_message("Blood sprays from [summoner] as [src] takes damage! ")
+
+ if(summoner.stat == UNCONSCIOUS)
+ to_chat(summoner, "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart! ")
+ summoner.adjustCloneLoss(damage / 2)
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
switch(severity)
diff --git a/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm b/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm
new file mode 100644
index 000000000000..1edd01e798b9
--- /dev/null
+++ b/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm
@@ -0,0 +1,159 @@
+/datum/event/tourist_arrivals
+
+ /// Maximum number of spawns.
+ var/max_spawn = 10
+ /// If the event ran successfully
+ var/success_run
+ /// Number of tots spawned in
+ var/tot_number = 0
+ /// Number of players spawned in
+ var/spawned_in = 0
+ /// Number of crew
+ var/crew_count = 0
+ /// Number of antags
+ var/antag_count = 0
+ /// Antag limit defined by crew/10 + 1
+ var/max_antag = 0
+ /// Chance of being antag
+ var/chance = 20
+
+/datum/event/tourist_arrivals/setup()
+ // Getting a list of players that are logged in and not dead.
+ // Checking if they're an antag or not and defining a 'max_antag' number.
+ for(var/mob/living/player in GLOB.mob_list)
+ if(player.mind && player.stat != DEAD)
+ crew_count++
+ if(player.mind.special_role)
+ antag_count++
+ continue
+ max_antag = round(crew_count / 10, 1) + 1
+ if(SSticker && istype(SSticker.mode, /datum/game_mode/extended))
+ chance = 100
+
+/datum/event/tourist_arrivals/start()
+ // Let's just avoid trouble, sending people into those is probably bad.
+ if(GAMEMODE_IS_CULT || GAMEMODE_IS_WIZARD || GAMEMODE_IS_NUCLEAR)
+ var/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MODERATE]
+ EC.next_event_time = world.time + 1 MINUTES
+ log_debug("Tourist Arrivals roll canceled due to gamemode. Rolling another midround in 60 seconds.")
+ return
+ if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_GAMMA) // Who would send more people to somewhere that's not safe?
+ var/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MODERATE]
+ EC.next_event_time = world.time + 1 MINUTES
+ log_debug("Tourist Arrivals roll canceled due to heightened alert. Rolling another midround in 60 seconds.")
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(spawn_arrivals))
+
+/datum/event/tourist_arrivals/proc/spawn_arrivals()
+ var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a Tourist?", null, TRUE)
+ // We'll keep spawning new tourists until we hit the max_spawn cap of tourists.
+ while(max_spawn > 0 && length(candidates))
+ var/turf/picked_loc = pick(GLOB.latejoin)
+ // Taking a random player from the candidate list.
+ var/mob/P = pick_n_take(candidates)
+ max_spawn--
+ var/datum/tourist/T = pick(/datum/tourist/human,
+ /datum/tourist/unathi,
+ /datum/tourist/vulp,
+ /datum/tourist/ipc,
+ /datum/tourist/skrell,
+ /datum/tourist/grey,
+ /datum/tourist/nian)
+ if(!istype(P))
+ continue
+ var/mob/living/carbon/human/M = new T.tourist_species(picked_loc)
+ // Picking a random objective, as all objectives are a subtype of /objective/tourist.
+ var/obj_tourist = pick(subtypesof(/datum/objective/tourist))
+ var/datum/objective/tourist/O = new obj_tourist()
+ // Handles outfit, account and other stuff.
+ M.ckey = P.ckey
+ M.dna.species.after_equip_job(null, M)
+ M.age = rand(21, 50)
+ if(prob(50))
+ M.change_gender(FEMALE)
+ set_appearance(M)
+ M.equipOutfit(T.tourist_outfit)
+ M.mind.special_role = SPECIAL_ROLE_TOURIST
+ GLOB.data_core.manifest_inject(M)
+ // Rolls a 20% probability, checks if 3 tourists have been made into tot and check if there's space for a new tot!
+ // If any is false, we don't make a new tourist tot
+ if(prob(chance) && tot_number < 3 && antag_count < max_antag && !jobban_isbanned(M, SPECIAL_ROLE_TRAITOR))
+ tot_number++
+ M.mind.add_antag_datum(/datum/antagonist/traitor)
+
+ // If they're a tot, they don't get tourist objectives neither the tourist greeting!
+ if(M.mind.special_role != SPECIAL_ROLE_TRAITOR)
+ M.mind.add_mind_objective(O)
+ greeting(M)
+ success_run = TRUE
+ spawned_in++
+ if(success_run)
+ log_debug("Tourist event made: [tot_number] traitors.")
+ var/raffle_name = pick("Galactic Getaway Raffle", "Cosmic Jackpot Raffle", "Nebula Nonsense Raffle", "Greytide Giveaway Raffle", "Toolbox Treasure Raffle")
+ GLOB.minor_announcement.Announce("The lucky winners of the Nanotrasen raffle, 'Nanotrasen [raffle_name],' are arriving at [station_name()] shortly. Please welcome them warmly, they'll be staying with you until the end of your shift!")
+
+// Greets the player, announces objectives!
+/datum/event/tourist_arrivals/proc/greeting(mob/living/carbon/human/M)
+ var/list/greeting = list()
+ greeting.Add("You are a tourist! ")
+ greeting.Add("You were chosen as a lucky winner of Nanotrasen's exclusive raffle! Winning a visit to a nearby Nanotrasen Research Station! ")
+ greeting.Add("Enjoy your exclusive tour and make the most of your time exploring our state-of-the-art facilities! ")
+ greeting.Add(" Your current objectives are: ")
+ greeting.Add(M.mind.prepare_announce_objectives(FALSE))
+ to_chat(M, chat_box_green(greeting.Join(" ")))
+
+// All of this code down here is from ert.dm.
+/datum/event/tourist_arrivals/proc/set_appearance(mob/living/carbon/human/M)
+
+ var/obj/item/organ/external/head/head_organ = M.get_organ("head")
+ var/hair_c = pick("#8B4513", "#000000", "#FF4500", "#FFD700") // Brown, black, red, blonde
+ var/eye_c = pick("#000000", "#8B4513", "1E90FF") // Black, brown, blue
+ var/skin_tone = rand(-120, 20)
+
+ head_organ.facial_colour = hair_c
+ head_organ.sec_facial_colour = hair_c
+ head_organ.hair_colour = hair_c
+ head_organ.sec_hair_colour = hair_c
+ M.change_eye_color(eye_c)
+ M.s_tone = skin_tone
+ head_organ.h_style = random_hair_style(M.gender, head_organ.dna.species.name)
+ head_organ.f_style = random_facial_hair_style(M.gender, head_organ.dna.species.name)
+
+ M.regenerate_icons()
+ M.update_body()
+ M.update_dna()
+
+// Tourist datum stuff, mostly being species and outfit.
+/datum/tourist
+ var/tourist_outfit
+ var/tourist_species
+
+/datum/tourist/human
+ tourist_species = /mob/living/carbon/human
+ tourist_outfit = /datum/outfit/admin/tourist
+
+/datum/tourist/unathi
+ tourist_species = /mob/living/carbon/human/unathi
+ tourist_outfit = /datum/outfit/admin/tourist
+
+/datum/tourist/vulp
+ tourist_species = /mob/living/carbon/human/vulpkanin
+ tourist_outfit = /datum/outfit/admin/tourist
+
+/datum/tourist/ipc
+ tourist_species = /mob/living/carbon/human/machine
+ tourist_outfit = /datum/outfit/admin/tourist
+
+/datum/tourist/skrell
+ tourist_species = /mob/living/carbon/human/skrell
+ tourist_outfit = /datum/outfit/admin/tourist
+
+/datum/tourist/grey
+ tourist_species = /mob/living/carbon/human/grey
+ tourist_outfit = /datum/outfit/admin/tourist
+
+/datum/tourist/nian
+ tourist_species = /mob/living/carbon/human/moth
+ tourist_outfit = /datum/outfit/admin/tourist
+
diff --git a/code/game/gamemodes/miniantags/tourist/tourist_objectives.dm b/code/game/gamemodes/miniantags/tourist/tourist_objectives.dm
new file mode 100644
index 000000000000..8460fdb807be
--- /dev/null
+++ b/code/game/gamemodes/miniantags/tourist/tourist_objectives.dm
@@ -0,0 +1,51 @@
+/datum/objective/tourist
+ completed = TRUE
+ needs_target = FALSE
+
+/datum/objective/tourist/cap_fan
+ explanation_text = "You're a huge fan of the Captain! Make sure to take a picture with them!"
+
+/datum/objective/tourist/comedy_fan
+ explanation_text = "You love clowns! Make sure to always laugh when with them, perhaps you could become their assistant?"
+
+/datum/objective/tourist/bridge_tourist
+ explanation_text = "You want to see where all the action happens. Get a brief tour of the stations bridge."
+
+/datum/objective/tourist/fire_safety
+ explanation_text = "You're paranoid about safety! Make sure to verify if the station has enough fire extinguisers, fire alarms and if the security team is properly equipped."
+
+/datum/objective/tourist/robot_friend
+ explanation_text = "You think robots are fascinating! Befriend a station cyborg and learn about its tasks."
+
+/datum/objective/tourist/richest_person
+ explanation_text = "You have dreams of becoming the richest person on the station! Accumulate as much money as you can by legal means."
+
+/datum/objective/tourist/job_seeker
+ explanation_text = "You are seeking a job opportunity on the station! Talk to at least three department heads about potential job openings. Make sure to choose the best!"
+
+/datum/objective/tourist/head_photographer
+ explanation_text = "You are fascinated by leadership! Take a picture with each department head on the station."
+
+/datum/objective/tourist/entrepreneur
+ explanation_text = "Start your own small business on the station. Find a suitable location, gather necessary supplies, and promote your business!"
+
+/datum/objective/tourist/prisoner_visitation
+ explanation_text = "You are curious about life behind bars. Visit the brig and have a conversation with a prisoner."
+
+/datum/objective/tourist/alcoholic
+ explanation_text = "You've heard the alcohol on the station is deluxe! Go to the bar and drink as much as you can to get your money's worth."
+
+/datum/objective/tourist/gene_enhanced
+ explanation_text = "You've heard that Nanotrasen is the premier in genetics research, get as enhanced as you can!"
+
+/datum/objective/tourist/robo_enhanced
+ explanation_text = "You've heard that Nanotrasen is the premier in robotics research, get as augmented as you can!"
+
+/datum/objective/tourist/party_person
+ explanation_text = "You love parties! Make sure to throw one, let everyone know!"
+
+/datum/objective/tourist/skate_lover
+ explanation_text = "Organize a skateboard competition in a common area and get it promoted. Show off your best tricks!"
+
+/datum/objective/tourist/break_in
+ explanation_text = "Sneak into different departments or rooms on the station and leave a note in each one. Make sure not to get caught!"
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 0292df084c56..08f8b073b7a9 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -138,9 +138,6 @@
/obj/effect/rend/singularity_pull()
return
-/obj/effect/rend/singularity_pull()
- return
-
/obj/item/veilrender/vealrender
name = "veal render"
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm."
diff --git a/code/game/gamemodes/wizard/magic_tarot.dm b/code/game/gamemodes/wizard/magic_tarot.dm
index 10b7e1f64673..6c206797abc2 100644
--- a/code/game/gamemodes/wizard/magic_tarot.dm
+++ b/code/game/gamemodes/wizard/magic_tarot.dm
@@ -1,5 +1,5 @@
/obj/item/tarot_generator
- name = "Enchanted tarot card deck"
+ name = "enchanted tarot card deck"
desc = "This tarot card box has quite the array of runes and artwork on it."
icon = 'icons/obj/playing_cards.dmi'
icon_state = "tarot_box"
@@ -145,9 +145,11 @@
var/datum/tarot/our_tarot
/// Our fancy description given to use by the tarot datum.
var/card_desc = "Untold answers... wait what? This is a bug, report this as an issue on github!"
- ///Is the card face down? Shows the card back, hides the examine / name.
+ /// Is the card face down? Shows the card back, hides the examine / name.
var/face_down = FALSE
- ///Has the card been activated? If it has, don't activate it again
+ /// Will this card automatically disappear if thrown at a non-mob?
+ var/needs_mob_target = TRUE
+ /// Has the card been activated? If it has, don't activate it again
var/has_been_activated = FALSE
/obj/item/magic_tarot_card/Initialize(mapload, obj/item/tarot_generator/source, datum/tarot/chosen_tarot)
@@ -193,6 +195,8 @@
/obj/item/magic_tarot_card/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
+ if(needs_mob_target && !isliving(hit_atom))
+ return
poof()
if(has_been_activated)
return
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 8148382b446b..d16b6e912e23 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -409,7 +409,8 @@
/proc/get_all_special_jobs()
return list(
"Deathsquad",
- "Emergency Response Clown")
+ "Emergency Response Clown",
+ "Tourist")
/proc/get_all_job_icons() //For all existing HUD icons
return GLOB.joblist + get_all_ERT_jobs() + list("Prisoner")
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index 7cab1816b598..63657081368e 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -455,8 +455,6 @@
uniform = /obj/item/clothing/under/rank/civilian/mime/sexy
suit = /obj/item/clothing/mask/gas/sexymime
-/datum/outfit/job/mime/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- . = ..()
if(visualsOnly)
return
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 5c2f5a7ff976..6ced0e74b59f 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -392,12 +392,10 @@
..()
if(A == occupant)
occupant = null
- updateUsrDialog()
update_icon(UPDATE_ICON_STATE)
SStgui.update_uis(src)
if(A == beaker)
beaker = null
- updateUsrDialog()
SStgui.update_uis(src)
/obj/machinery/sleeper/emp_act(severity)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 5ef02606a44b..b8e25d463c86 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -219,7 +219,6 @@
..()
if(A == occupant)
occupant = null
- updateUsrDialog()
update_icon(UPDATE_ICON_STATE)
/obj/machinery/bodyscanner/narsie_act()
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 441278e98b98..afd97dcd6a81 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -28,6 +28,7 @@
state = CIRCUIT_CORE
P.forceMove(src)
circuit = P
+ update_icon(UPDATE_ICON_STATE)
return
if(SCREWED_CORE)
if(istype(P, /obj/item/stack/cable_coil))
@@ -136,11 +137,13 @@
state = EMPTY_CORE
circuit.forceMove(loc)
circuit = null
+ update_icon(UPDATE_ICON_STATE)
return
if(GLASS_CORE)
to_chat(user, "Вы убираете стеклянную панель. ")
state = CABLED_CORE
new /obj/item/stack/sheet/rglass(loc, 2)
+ update_icon(UPDATE_ICON_STATE)
return
if(CABLED_CORE)
if(brain)
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 51a4a807f215..7af452d14335 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -39,21 +39,24 @@
user.remote_control = null
current_user = null
- user.unset_machine()
+ remove_eye(user)
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
-/obj/machinery/computer/camera_advanced/check_eye(mob/user)
- if((stat & (NOPOWER|BROKEN)) || (!Adjacent(user) && !user.has_unlimited_silicon_privilege) || !user.has_vision() || user.incapacitated())
- user.unset_machine()
+/obj/machinery/computer/camera_advanced/process()
+ if(!current_user)
+ return
+
+ if((stat & (NOPOWER|BROKEN)) || (!Adjacent(current_user) && !current_user.has_unlimited_silicon_privilege) || !current_user.has_vision() || current_user.incapacitated())
+ remove_eye(current_user)
/obj/machinery/computer/camera_advanced/Destroy()
if(current_user)
- current_user.unset_machine()
+ remove_eye(current_user)
QDEL_NULL(eyeobj)
QDEL_LIST_CONTENTS(actions)
return ..()
-/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M)
+/obj/machinery/computer/camera_advanced/proc/remove_eye(mob/M)
if(M == current_user)
remove_eye_control(M)
@@ -65,7 +68,6 @@
return
if(..())
return
- user.set_machine(src)
if(!eyeobj)
CreateEye()
@@ -85,7 +87,7 @@
else
// An abberant case - silent failure is obnoxious
to_chat(user, "ERROR: No linked and active camera network found. ")
- user.unset_machine()
+ remove_eye(user)
else
give_eye_control(user)
eyeobj.setLoc(eyeobj.loc)
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index e2ffc3605b40..e5f1aeaed1d0 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -42,11 +42,6 @@
add_fingerprint(user)
ui_interact(user)
-/obj/machinery/computer/prisoner/attackby(obj/item/O, mob/user)
- if(ui_login_attackby(O, user))
- return
- return ..()
-
/obj/machinery/computer/prisoner/proc/check_implant(obj/item/bio_chip/I)
var/turf/implant_location = get_turf(I)
if(!implant_location || implant_location.z != z)
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index dde8834a2deb..8f77132473a7 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -92,8 +92,8 @@
to_chat(user, "You need five lengths of cable to wire the frame. ")
return
- if(istype(P, /obj/item/wrench))
- playsound(src.loc, P.usesound, 75, 1)
+ if(iswrench(P))
+ P.play_tool_sound(src)
to_chat(user, "You dismantle the frame. ")
deconstruct(TRUE)
return
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index b2cdb309b676..a69f9689100f 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -234,7 +234,7 @@
/obj/item/stamp,
/obj/item/melee/knuckleduster/nanotrasen,
/obj/item/melee/rapier,
- /obj/item/storage/belt/rapier,
+ /obj/item/storage/belt/sheath/rapier,
/obj/item/nuke_core,
/obj/item/nuke_core_container,
/obj/item/documents,
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index e91ebc1983d3..1909302aac38 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -203,9 +203,6 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays)
return
..(user)
-/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user)
- ..(user)
-
/obj/machinery/door/airlock/proc/isElectrified()
if(electrified_until != 0)
return 1
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index ced4cf2075ef..8ffc6c263bfe 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -38,10 +38,20 @@
var/prisoner_time
var/prisoner_hasrecord = FALSE
+/obj/machinery/door_timer/Initialize(mapload)
+ ..()
+
+ GLOB.celltimers_list += src
+ Radio = new /obj/item/radio(src)
+ Radio.listening = FALSE
+ Radio.config(list("Security" = 0))
+ Radio.follow_target = src
+ return INITIALIZE_HINT_LATELOAD
+
/obj/machinery/door_timer/Destroy()
+ QDEL_NULL(Radio)
targets.Cut()
prisoner = null
- qdel(Radio)
GLOB.celltimers_list -= src
return ..()
@@ -113,16 +123,6 @@
return
atom_say("[src] beeps, \"[occupant]: [notifytext]\"")
-/obj/machinery/door_timer/Initialize(mapload)
- ..()
-
- GLOB.celltimers_list += src
- Radio = new /obj/item/radio(src)
- Radio.listening = FALSE
- Radio.config(list("Security" = 0))
- Radio.follow_target = src
- return INITIALIZE_HINT_LATELOAD
-
/obj/machinery/door_timer/LateInitialize()
..()
for(var/obj/machinery/door/window/brigdoor/M in GLOB.airlocks)
@@ -149,12 +149,6 @@
stat |= BROKEN
update_icon(UPDATE_ICON_STATE)
-/obj/machinery/door_timer/Destroy()
- QDEL_NULL(Radio)
- targets.Cut()
- prisoner = null
- return ..()
-
/obj/machinery/door_timer/proc/on_target_qdel(atom/target)
targets -= target
diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm
index e289a5212b25..10d2c19e1b70 100644
--- a/code/game/machinery/guestpass.dm
+++ b/code/game/machinery/guestpass.dm
@@ -63,7 +63,7 @@
if(user.drop_item())
I.forceMove(src)
scan = I
- updateUsrDialog()
+ SStgui.update_uis(src)
else
to_chat(user, "There is already ID card inside. ")
return
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 7188f8546ccd..b5c37d145d9f 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -193,13 +193,6 @@
return ..()
-/obj/machinery/CouldUseTopic(mob/user)
- ..()
- user.set_machine(src)
-
-/obj/machinery/CouldNotUseTopic(mob/user)
- usr.unset_machine()
-
/obj/machinery/proc/dropContents()//putting for swarmers, occupent code commented out, someone can use later.
var/turf/T = get_turf(src)
for(var/atom/movable/AM in contents)
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 13275d3d61e9..377050f7902d 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -86,10 +86,10 @@
/obj/machinery/mass_driver_frame/attackby(obj/item/W as obj, mob/user as mob)
switch(build)
if(0) // Loose frame
- if(istype(W, /obj/item/wrench))
- to_chat(user, "You begin to anchor \the [src] on the floor.")
- playsound(get_turf(src), W.usesound, 50, 1)
- if(do_after(user, 10 * W.toolspeed, target = src) && (build == 0))
+ if(iswrench(W))
+ to_chat(user, "You begin to anchor [src] on the floor. ")
+ playsound(get_turf(src), W.usesound, 50, TRUE)
+ if(do_after(user, 1 SECONDS * W.toolspeed, target = src) && (build == 0))
to_chat(user, "You anchor \the [src]! ")
anchored = TRUE
build++
@@ -97,10 +97,10 @@
return FALSE
if(1) // Fixed to the floor
- if(istype(W, /obj/item/wrench))
- to_chat(user, "You begin to de-anchor \the [src] from the floor.")
- playsound(get_turf(src), W.usesound, 50, 1)
- if(do_after(user, 10 * W.toolspeed, target = src) && (build == 1))
+ if(iswrench(W))
+ to_chat(user, "You begin to de-anchor [src] from the floor. ")
+ playsound(get_turf(src), W.usesound, 50, TRUE)
+ if(do_after(user, 1 SECONDS * W.toolspeed, target = src) && (build == 1))
build--
anchored = FALSE
to_chat(user, "You de-anchored \the [src]! ")
@@ -108,10 +108,10 @@
return FALSE
if(2) // Welded to the floor
- if(istype(W, /obj/item/stack/cable_coil))
+ if(iscoil(W))
var/obj/item/stack/cable_coil/C = W
- to_chat(user, "You start adding cables to \the [src]...")
- playsound(get_turf(src), C.usesound, 50, 1)
+ to_chat(user, "You start adding cables to [src]... ")
+ playsound(get_turf(src), C.usesound, 50, TRUE)
if(do_after(user, 20 * C.toolspeed, target = src) && (C.get_amount() >= 2) && (build == 2))
C.use(2)
to_chat(user, "You've added cables to \the [src]. ")
@@ -120,10 +120,10 @@
return FALSE
if(3) // Wired
- if(istype(W, /obj/item/wirecutters))
- to_chat(user, "You begin to remove the wiring from \the [src].")
- if(do_after(user, 10 * W.toolspeed, target = src) && (build == 3))
- new /obj/item/stack/cable_coil(loc,2)
+ if(iswirecutter(W))
+ to_chat(user, "You begin to remove the wiring from [src]. ")
+ if(do_after(user, 1 SECONDS * W.toolspeed, target = src) && (build == 3))
+ new /obj/item/stack/cable_coil(loc, 2)
playsound(get_turf(src), W.usesound, 50, 1)
to_chat(user, "You've removed the cables from \the [src]. ")
build--
@@ -142,10 +142,10 @@
return FALSE
if(4) // Grille in place
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "You begin to pry off the grille from \the [src]...")
- playsound(get_turf(src), W.usesound, 50, 1)
- if(do_after(user, 30 * W.toolspeed, target = src) && (build == 4))
+ if(iscrowbar(W))
+ to_chat(user, "You begin to pry off the grille from [src]... ")
+ playsound(get_turf(src), W.usesound, 50, TRUE)
+ if(do_after(user, 3 SECONDS * W.toolspeed, target = src) && (build == 4))
new /obj/item/stack/rods(loc,2)
build--
return TRUE
diff --git a/code/game/machinery/pipe/pipe_construction.dm b/code/game/machinery/pipe/pipe_construction.dm
index f43e82e8091a..e33913c49452 100644
--- a/code/game/machinery/pipe/pipe_construction.dm
+++ b/code/game/machinery/pipe/pipe_construction.dm
@@ -537,18 +537,16 @@
item_state = "buildpipe"
w_class = WEIGHT_CLASS_BULKY
-/obj/item/pipe_meter/attackby(obj/item/W, mob/user, params)
- if(!iswrench(W))
- return ..()
-
+/obj/item/pipe_meter/wrench_act(mob/living/user, obj/item/I)
if(!locate(/obj/machinery/atmospherics/pipe, loc))
- to_chat(user, "You need to fasten it to a pipe ")
+ to_chat(user, "You need to fasten it to a pipe. ")
return TRUE
new /obj/machinery/atmospherics/meter(loc)
- playsound(loc, W.usesound, 50, 1)
+ I.play_tool_sound(src)
to_chat(user, "You have fastened the meter to the pipe. ")
qdel(src)
+ return TRUE
/obj/item/pipe_meter/rpd_act(mob/user, obj/item/rpd/our_rpd)
if(our_rpd.mode == RPD_DELETE_MODE)
@@ -565,15 +563,13 @@
item_state = "buildpipe"
w_class = WEIGHT_CLASS_BULKY
-/obj/item/pipe_gsensor/attackby(obj/item/W, mob/user)
- if(!istype(W, /obj/item/wrench))
- return ..()
-
+/obj/item/pipe_gsensor/wrench_act(mob/living/user, obj/item/I)
var/obj/machinery/atmospherics/air_sensor/AS = new /obj/machinery/atmospherics/air_sensor(loc)
AS.bolts = FALSE
- playsound(get_turf(src), W.usesound, 50, 1)
+ I.play_tool_sound(src, 50)
to_chat(user, "You have fastened the gas sensor. ")
qdel(src)
+ return TRUE
/obj/item/pipe_gsensor/rpd_act(mob/user, obj/item/rpd/our_rpd)
if(our_rpd.mode == RPD_DELETE_MODE)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 567cc838aed1..b186a0981258 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -331,52 +331,67 @@ GLOBAL_LIST_EMPTY(turret_icons)
return
update_icon(UPDATE_ICON_STATE)
+/obj/machinery/porta_turret/wrench_act(mob/living/user, obj/item/I)
+ if(enabled || raised)
+ to_chat(user, "You cannot unsecure an active turret! ")
+ return
+ if(wrenching)
+ to_chat(user, "Someone is already [anchored ? "un" : ""]securing the turret! ")
+ return
+ if(!anchored && isinspace())
+ to_chat(user, "Cannot secure turrets in space! ")
+ return
-/obj/machinery/porta_turret/attackby(obj/item/I, mob/user)
- if((stat & BROKEN) && !syndicate)
- if(I.tool_behaviour == TOOL_CROWBAR)
- //If the turret is destroyed, you can remove it with a crowbar to
- //try and salvage its components
- to_chat(user, "You begin prying the metal coverings off. ")
- if(do_after(user, 20 * I.toolspeed, target = src))
- if(prob(70))
- to_chat(user, "You remove the turret and salvage some components. ")
- if(installation)
- var/obj/item/gun/energy/Gun = new installation(loc)
- Gun.cell.charge = gun_charge
- Gun.update_icon()
- if(prob(50))
- new /obj/item/stack/sheet/metal(loc, rand(1,4))
- if(prob(50))
- new /obj/item/assembly/prox_sensor(loc)
- else
- to_chat(user, "You remove the turret but did not manage to salvage anything. ")
- qdel(src) // qdel
+ user.visible_message( \
+ "[user] begins [anchored ? "un" : ""]securing the turret. ", \
+ "You begin [anchored ? "un" : ""]securing the turret. " \
+ )
- else if((istype(I, /obj/item/wrench)))
- if(enabled || raised)
- to_chat(user, "You cannot unsecure an active turret! ")
- return
- if(wrenching)
- to_chat(user, "Someone is already [anchored ? "un" : ""]securing the turret! ")
- return
- if(!anchored && isinspace())
- to_chat(user, "Cannot secure turrets in space! ")
- return
+ wrenching = TRUE
+ if(I.use_tool(src, user, 2 SECONDS, volume = 50))
+ //This code handles moving the turret around. After all, it's a portable turret!
+ playsound(loc, I.usesound, 100, 1)
+ anchored = !anchored
+ update_icon(UPDATE_ICON_STATE)
+ to_chat(user, "You [anchored ? "" : "un"]secure the exterior bolts on the turret. ")
+ wrenching = FALSE
- user.visible_message( \
- "[user] begins [anchored ? "un" : ""]securing the turret. ", \
- "You begin [anchored ? "un" : ""]securing the turret. " \
- )
+ return TRUE
+
+/obj/machinery/porta_turret/tool_act(mob/living/user, obj/item/I, tool_type)
+ if(user.a_intent != INTENT_HELP)
+ return ..()
+ if(syndicate)
+ to_chat(user, "[src] is sealed tightly, tools won't help here. ")
+ return TRUE
- wrenching = TRUE
- if(do_after(user, 50 * I.toolspeed, target = src))
- //This code handles moving the turret around. After all, it's a portable turret!
- playsound(loc, I.usesound, 100, 1)
- anchored = !anchored
- update_icon(UPDATE_ICON_STATE)
- to_chat(user, "You [anchored ? "" : "un"]secure the exterior bolts on the turret. ")
- wrenching = FALSE
+ if(!(stat & BROKEN))
+ to_chat(user, "[src] is in fine condition, you'd need to rough it up a bit if you wanted to disassemble it. ")
+ return TRUE
+ return ..()
+
+/obj/machinery/porta_turret/crowbar_act(mob/living/user, obj/item/I)
+ . = TRUE
+ to_chat(user, "You begin prying the metal coverings off. ")
+ if(!I.use_tool(src, user, 2 SECONDS, 0, 50))
+ return FALSE
+ if(prob(70))
+ to_chat(user, "You remove the turret and salvage some components. ")
+ if(installation)
+ var/obj/item/gun/energy/Gun = new installation(loc)
+ Gun.cell.charge = gun_charge
+ Gun.update_icon()
+ if(prob(50))
+ new /obj/item/stack/sheet/metal(loc, rand(1,4))
+ if(prob(50))
+ new /obj/item/assembly/prox_sensor(loc)
+ else
+ to_chat(user, "You remove the turret but did not manage to salvage anything. ")
+ qdel(src) // qdel
+
+/obj/machinery/porta_turret/attackby(obj/item/I, mob/user)
+ if((stat & BROKEN) && !syndicate)
+ return
else if(istype(I, /obj/item/card/id) || istype(I, /obj/item/pda))
if(HasController())
@@ -388,17 +403,22 @@ GLOBAL_LIST_EMPTY(turret_icons)
else
to_chat(user, "Access denied. ")
- else
- //if the turret was attacked with the intention of harming it:
- user.changeNext_move(CLICK_CD_MELEE)
- playsound(src.loc, 'sound/weapons/smash.ogg', 60, 1)
- if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off
- if(!attacked && !emagged)
- attacked = TRUE
- spawn(60)
- attacked = FALSE
+ return TRUE
+
+ if(user.a_intent == INTENT_HELP)
+ return ..()
+ // otherwise, if the turret was attacked with the intention of harming it:
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.do_item_attack_animation()
+ playsound(src.loc, 'sound/weapons/smash.ogg', 60, 1)
+ if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off
+ if(!attacked && !emagged)
+ attacked = TRUE
+ addtimer(VARSET_CALLBACK(src, attacked, FALSE), 6 SECONDS)
+
+ ..()
+
- ..()
/obj/machinery/porta_turret/attack_animal(mob/living/simple_animal/M)
M.changeNext_move(CLICK_CD_MELEE)
@@ -854,7 +874,7 @@ GLOBAL_LIST_EMPTY(turret_icons)
//this is a bit unwieldy but self-explanatory
switch(build_step)
if(0) //first step
- if(istype(I, /obj/item/wrench) && !anchored)
+ if(iswrench(I) && !anchored)
playsound(loc, I.usesound, 100, 1)
to_chat(user, "You secure the external bolts. ")
anchored = TRUE
@@ -879,7 +899,7 @@ GLOBAL_LIST_EMPTY(turret_icons)
to_chat(user, "You need two sheets of metal to continue construction. ")
return
- else if(istype(I, /obj/item/wrench))
+ else if(iswrench(I))
playsound(loc, I.usesound, 75, 1)
to_chat(user, "You unfasten the external bolts. ")
anchored = FALSE
@@ -888,7 +908,7 @@ GLOBAL_LIST_EMPTY(turret_icons)
if(2)
- if(istype(I, /obj/item/wrench))
+ if(iswrench(I))
playsound(loc, I.usesound, 100, 1)
to_chat(user, "You bolt the metal armor into place. ")
build_step = 3
@@ -921,7 +941,7 @@ GLOBAL_LIST_EMPTY(turret_icons)
qdel(I) //delete the gun :( qdel
return
- else if(istype(I, /obj/item/wrench))
+ else if(iswrench(I))
playsound(loc, I.usesound, 100, 1)
to_chat(user, "You remove the turret's metal armor bolts. ")
build_step = 2
@@ -1054,7 +1074,6 @@ GLOBAL_LIST_EMPTY(turret_icons)
interact_offline = TRUE
power_state = NO_POWER_USE
has_cover = FALSE
- raised = TRUE
scan_range = 9
faction = "syndicate"
@@ -1095,6 +1114,8 @@ GLOBAL_LIST_EMPTY(turret_icons)
req_one_access.Cut()
req_access = list(ACCESS_SYNDICATE)
one_access = FALSE
+ set_raised_raising(TRUE, FALSE)
+ update_icon(UPDATE_ICON_STATE)
/obj/machinery/porta_turret/syndicate/update_icon_state()
if(stat & BROKEN)
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 5661fbc1bf7a..e1690fa8d3ca 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -85,7 +85,6 @@
..()
if(A == occupant)
occupant = null
- updateUsrDialog()
update_icon(UPDATE_ICON_STATE)
/obj/machinery/recharge_station/narsie_act()
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index 0869bb8b7be2..5adbd7eea2a8 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -352,36 +352,36 @@
if(chassis)
var/result = load_fuel(target)
if(result)
- send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info())
+ send_byjax(chassis.occupant,"exosuit.browser", "\ref[src]", get_equip_info())
/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/I)
if(istype(I) && (fuel_type in I.materials))
- if(istype(I, /obj/item/stack/sheet))
- var/obj/item/stack/sheet/P = I
- var/to_load = max(max_fuel - P.amount*P.perunit,0)
- if(to_load)
- var/units = min(max(round(to_load / P.perunit),1),P.amount)
- if(units)
- var/added_fuel = units * P.perunit
- fuel_amount += added_fuel
- P.use(units)
- occupant_message("[units] unit\s of [fuel_name] successfully loaded.")
- return added_fuel
- else
- occupant_message("Unit is full.")
- return 0
- else // Some other object containing our fuel's type, so we just eat it (ores mainly)
- var/to_load = max(min(I.materials[fuel_type], max_fuel - fuel_amount),0)
+ if(!istype(I, /obj/item/stack/sheet)) // Some other object containing our fuel's type, so we just eat it (ores mainly)
+ var/to_load = clamp(I.materials[fuel_type], 0, max_fuel - fuel_amount)
if(to_load == 0)
- return 0
+ return FALSE
fuel_amount += to_load
qdel(I)
- return to_load
+ return 0
+
+ if(fuel_amount >= max_fuel)
+ occupant_message("Unit is full.")
+ return 0
+
+ var/obj/item/stack/sheet/P = I
+ var/to_load = max_fuel - fuel_amount
+
+ var/units = clamp(round(to_load / P.perunit), 1, P.amount)
+ if(units)
+ var/added_fuel = units * P.perunit
+ fuel_amount += added_fuel
+ P.use(units)
+ occupant_message("[units] unit\s of [fuel_name] successfully loaded.")
+ return added_fuel
else if(istype(I, /obj/structure/ore_box))
var/fuel_added = 0
- for(var/baz in I.contents)
- var/obj/item/O = baz
+ for(var/obj/item/O as anything in I.contents)
if(fuel_type in O.materials)
fuel_added = load_fuel(O)
break
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index c805da7586d1..788df39c50d6 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -47,8 +47,17 @@
new /obj/item/stack/sheet/animalhide/armor_plate(get_turf(src))
for(var/i in 1 to drake_hides)
new /obj/item/stack/sheet/animalhide/ashdrake(get_turf(src))
+ for(var/mob/M in src)
+ if(M == occupant)
+ continue
+ M.loc = get_turf(src)
+ M.loc.Entered(M)
+ step_rand(M)
for(var/atom/movable/A in cargo)
- A.forceMove(get_turf(src))
+ A.loc = get_turf(src)
+ var/turf/T = get_turf(A)
+ if(T)
+ T.Entered(A)
step_rand(A)
cargo.Cut()
return ..()
@@ -236,8 +245,6 @@
log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - length(cargo)]")
return
-
-
/obj/mecha/working/ripley/get_stats_part()
var/output = ..()
output += "Cargo Compartment Contents: "
@@ -249,21 +256,6 @@
output += "
"
return output
-/obj/mecha/working/ripley/Destroy()
- for(var/mob/M in src)
- if(M == occupant)
- continue
- M.loc = get_turf(src)
- M.loc.Entered(M)
- step_rand(M)
- for(var/atom/movable/A in cargo)
- A.loc = get_turf(src)
- var/turf/T = get_turf(A)
- if(T)
- T.Entered(A)
- step_rand(A)
- return ..()
-
/obj/mecha/working/ripley/ex_act(severity)
..()
for(var/X in cargo)
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index f2ce3c8e7083..9d4b3ab2dc48 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -151,15 +151,19 @@
. = buckle_mob(M, check_loc = check_loc)
if(.)
if(M == user)
- M.visible_message("[M] buckles [M.p_themselves()] to [src]. ",\
- "You buckle yourself to [src]. ",\
- "You hear metal clanking. ")
+ M.visible_message(
+ "[M] buckles [M.p_themselves()] to [src]. ",
+ "You buckle yourself to [src]. ",
+ "You hear the click of a buckle being secured. "
+ )
M.create_log(ATTACK_LOG, "Buckles [M.p_themselves()] to [src]", M)
log_attack(M, M, "Buckles themselves to [src]")
else
- M.visible_message("[user] buckles [M] to [src]! ",\
- "[user] buckles you to [src]! ",\
- "You hear metal clanking. ")
+ M.visible_message(
+ "[user] buckles [M] to [src]! ",
+ "[user] buckles you to [src]! ",
+ "You hear the click of a buckle being secured. "
+ )
user.create_log(ATTACK_LOG, "[user] has buckled [M] to [src]", M)
M.create_log(DEFENSE_LOG, "[M] has been buckled by [user] to [src]", user)
log_attack(user, M, "Buckled to [src]")
@@ -169,16 +173,20 @@
var/mob/living/M = unbuckle_mob(buckled_mob)
if(M)
if(M != user)
- M.visible_message("[user] unbuckles [M] from [src]. ",\
- "[user] unbuckles you from [src]. ",\
- "You hear metal clanking. ")
+ M.visible_message(
+ "[user] unbuckles [M] from [src]. ",
+ "[user] unbuckles you from [src]. ",
+ "You hear the click of a buckle being undone. "
+ )
user.create_log(ATTACK_LOG, "[user] has unbuckled [M] from [src]", M)
M.create_log(DEFENSE_LOG, "[M] has been unbuckled by [user] from [src]", user)
log_attack(user, M, "Unbuckled from [src]")
else
- M.visible_message("[M] unbuckles [M.p_themselves()] from [src]. ",\
- "You unbuckle yourself from [src]. ",\
- "You hear metal clanking. ")
+ M.visible_message(
+ "[M] unbuckles [M.p_themselves()] from [src]. ",
+ "You unbuckle yourself from [src]. ",
+ "You hear the click of a buckle being undone. "
+ )
M.create_log(ATTACK_LOG, "Unbuckles [M.p_themselves()] from [src]", M)
log_attack(M, M, "Unbuckles themselves from [src]")
add_fingerprint(user)
diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm
index 401709a8154e..373504a92359 100644
--- a/code/game/objects/effects/decals/Cleanable/robots.dm
+++ b/code/game/objects/effects/decals/Cleanable/robots.dm
@@ -18,9 +18,6 @@
/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like
return
-/obj/effect/decal/cleanable/blood/gibs/robot/can_bloodcrawl_in()
- return FALSE
-
/obj/effect/decal/cleanable/blood/gibs/robot/streak(list/directions)
spawn(0)
var/direction = pick(directions)
diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm
index a9decc5055eb..32b8052bd2f9 100644
--- a/code/game/objects/effects/spawners/random_spawners.dm
+++ b/code/game/objects/effects/spawners/random_spawners.dm
@@ -354,3 +354,10 @@
name = "80pc vaultdoor 20pc wall"
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 4,
/turf/simulated/wall/mineral/plastitanium/nodiagonal = 1)
+
+/obj/effect/spawner/random_spawners/ruin/deepstorage_award
+ name = "boss award"
+ result = list(/obj/item/storage/belt/champion/wrestling = 1,
+ /obj/item/storage/box/telescience = 1,
+ /obj/item/storage/box/syndie_kit/chameleon = 3,
+ /obj/item/rod_of_asclepius = 3)
diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm
index 6f35d17317c6..5823064a91a1 100644
--- a/code/game/objects/items/mountable_frames/frames.dm
+++ b/code/game/objects/items/mountable_frames/frames.dm
@@ -12,15 +12,13 @@
///The requirements for this frame to be placed, uses bit flags
var/mount_requirements = 0
-/obj/item/mounted/frame/attackby(obj/item/W, mob/user)
- ..()
- if(istype(W, /obj/item/wrench))
- var/turf/user_turf = get_turf(user)
- if(metal_sheets_refunded)
- new /obj/item/stack/sheet/metal(user_turf, metal_sheets_refunded)
- if(glass_sheets_refunded)
- new /obj/item/stack/sheet/glass(user_turf, glass_sheets_refunded)
- qdel(src)
+/obj/item/mounted/frame/wrench_act(mob/living/user, obj/item/I)
+ var/turf/user_turf = get_turf(user)
+ if(metal_sheets_refunded)
+ new /obj/item/stack/sheet/metal(user_turf, metal_sheets_refunded)
+ if(glass_sheets_refunded)
+ new /obj/item/stack/sheet/glass(user_turf, glass_sheets_refunded)
+ qdel(src)
/obj/item/mounted/frame/try_build(turf/on_wall, mob/user)
if(!..())
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index ea9539bd2229..6c815fb7bb8d 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -89,7 +89,7 @@ GLOBAL_LIST_INIT(glass_recipes, list (
if(!G && !RG && replace)
user.put_in_hands(RG)
return
-
+
return ..()
//////////////////////////////
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 8cf42add8539..ea09eae34d70 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -568,6 +568,7 @@ GLOBAL_LIST_INIT(cult_recipes, list (
. = ..()
icon_state = GET_CULT_DATA(runed_metal_icon_state, initial(icon_state))
item_state = GET_CULT_DATA(runed_metal_item_state, initial(item_state))
+ recipes = GLOB.cult_recipes
/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user)
if(!IS_CULTIST(user))
@@ -597,10 +598,6 @@ GLOBAL_LIST_INIT(cult_recipes, list (
/obj/item/stack/sheet/runed_metal/fifty
amount = 50
-/obj/item/stack/sheet/runed_metal/New(loc, amount=null)
- recipes = GLOB.cult_recipes
- return ..()
-
//////////////////////////////
// MARK: BRASS
//////////////////////////////
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index e78d031cc8e6..073c36ed94dc 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -171,7 +171,7 @@
title += "[R.title]"
title += " ([R.req_amount] [src.singular_name]\s)"
if(can_build)
- t1 += "[title] "
+ t1 += "[title] "
else
t1 += "[title]"
continue
@@ -182,9 +182,9 @@
var/list/multipliers = list(5, 10, 25)
for(var/n in multipliers)
if(max_multiplier >= n)
- t1 += " [n * R.res_amount]x "
+ t1 += " [n * R.res_amount]x "
if(!(max_multiplier in multipliers))
- t1 += " [max_multiplier * R.res_amount]x "
+ t1 += " [max_multiplier * R.res_amount]x "
var/datum/browser/popup = new(user, "stack", name, recipe_width, recipe_height)
popup.set_content(t1)
diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm
index 4adb39fdb883..085c66cbab3a 100644
--- a/code/game/objects/items/weapons/cigs.dm
+++ b/code/game/objects/items/weapons/cigs.dm
@@ -132,7 +132,7 @@ LIGHTERS ARE IN LIGHTERS.DM
else if(istype(I, /obj/item/melee/energy/sword/saber))
var/obj/item/melee/energy/sword/saber/S = I
- if(S.active)
+ if(HAS_TRAIT(S, TRAIT_ITEM_ACTIVE))
light("[user] makes a violent slashing motion, barely missing [user.p_their()] nose as light flashes. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [name] with [S] in the process. ")
else if(istype(I, /obj/item/assembly/igniter))
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 2e73d0a61743..62acbe2d863e 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -175,7 +175,7 @@
stage = WIRED
update_icon(UPDATE_ICON_STATE)
- else if(stage == WIRED && istype(I, /obj/item/wrench))
+ else if(stage == WIRED && iswrench(I))
to_chat(user, "You open the grenade and remove the contents. ")
stage = EMPTY
payload_name = null
diff --git a/code/game/objects/items/weapons/grenades/firecracker.dm b/code/game/objects/items/weapons/grenades/firecracker.dm
new file mode 100644
index 000000000000..accbf90bbc2a
--- /dev/null
+++ b/code/game/objects/items/weapons/grenades/firecracker.dm
@@ -0,0 +1,90 @@
+/obj/item/grenade/firecracker
+ name = "fire-cracker"
+ desc = "A firework that's great at making a lot of noise."
+ det_time = 2 SECONDS
+ /// The effect that will be randomly played at intervals.
+ var/sound_effect = 'sound/weapons/gunshots/gunshot_strong.ogg'
+ /// The minimum number of times it will fire.
+ var/min_pops = 5
+ /// The maximum number of times it fires.
+ var/max_pops = 20
+ /// How long, at least, we'll end up between pops.
+ var/min_time_between_pops = CLICK_CD_MELEE
+ /// The longest possible length between fires.
+ var/max_time_between_pops = 20 DECISECONDS
+ /// Whether or not to play a smoke sound before going off
+ var/play_fuse_sound = TRUE
+
+/obj/item/grenade/firecracker/prime()
+ . = ..()
+ if(play_fuse_sound)
+ playsound(src, 'sound/effects/smoke.ogg', 10, TRUE, -3)
+ INVOKE_ASYNC(src, PROC_REF(start_popping), TRUE)
+
+/obj/item/grenade/firecracker/proc/start_popping(del_after = FALSE)
+ for(var/i in 0 to rand(min_pops, max_pops))
+ playsound(src, sound_effect, 100, TRUE)
+ sleep(rand(min_time_between_pops, max_time_between_pops))
+ if(del_after)
+ qdel(src)
+
+/obj/item/grenade/firecracker/decoy
+ name = "decoy grenade"
+ desc = "A grenade capable of imitating many different sounds."
+ play_fuse_sound = FALSE
+
+ /// The sounds which this grenade can select.
+ var/static/list/possible_sounds = list(
+ "revolver" = 'sound/weapons/gunshots/gunshot_strong.ogg',
+ "armblade" = 'sound/weapons/armblade.ogg',
+ "laser" = 'sound/weapons/laser.ogg',
+ "sniper" = 'sound/weapons/gunshots/gunshot_sniper.ogg',
+ "pistol" = 'sound/weapons/gunshots/gunshot_pistol.ogg',
+ "blob" = 'sound/effects/splat.ogg',
+ "bite" = 'sound/weapons/bite.ogg',
+ "chainsaw" = 'sound/weapons/chainsaw.ogg'
+ )
+
+ /// The currently selected sound for the decoy.
+ var/selected_sound = "revolver"
+
+/obj/item/grenade/firecracker/decoy/Initialize(mapload)
+ . = ..()
+ selected_sound = possible_sounds[1]
+
+/obj/item/grenade/firecracker/decoy/examine(mob/user)
+ . = ..()
+ if(!user.Adjacent(src))
+ return
+ . += "[src] will sound like \a [selected_sound] ."
+ . += "Alt-Click to change the imitated sound."
+ . += "Alt-Shift-Click to change the frequency of the sound."
+
+/obj/item/grenade/firecracker/decoy/AltClick(mob/user)
+ . = ..()
+ if(!user.Adjacent(src))
+ return
+ var/selected = tgui_input_list(user, "Choose the decoy sound.", items = possible_sounds)
+ if(!user.Adjacent(src))
+ to_chat(user, "You're too far from [src] to set the sound now! ")
+ return
+ if(selected)
+ selected_sound = selected
+ sound_effect = possible_sounds[selected]
+ to_chat(user, "[src] will now sound like \a [selected]. ")
+
+/obj/item/grenade/firecracker/decoy/AltShiftClick(mob/user)
+ . = ..()
+ if(!user.Adjacent(src))
+ return
+ var/min_between_pops_input = tgui_input_number(user, "Select the minimum time between pops (in 1/10s of a second).", "Minimum time", min_time_between_pops, 50, 2)
+ if(!user.Adjacent(src))
+ to_chat(user, "You need to be closer to [src] to set this! ")
+ return
+ min_time_between_pops = min_between_pops_input
+ var/max_between_pops_input = tgui_input_number(user, "Select the maximum time between pops (in 1/10s of a second).", "Maximum time", max_time_between_pops, 50, 2)
+ if(!user.Adjacent(src))
+ to_chat(user, "You need to be closer to [src] to set this! ")
+ return
+
+ max_time_between_pops = max_between_pops_input
diff --git a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm
index b06f34ec70b1..3e9422d4bfeb 100644
--- a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm
+++ b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm
@@ -14,7 +14,6 @@
name = "generic energy blade"
desc = "If you can see this and didn't spawn it in as an admin, make an issue report on GitHub."
icon = 'icons/obj/weapons/energy_melee.dmi'
- var/active = FALSE
/// Damage done when active. Does not stack with force_off.
var/force_on = 30
/// Damage done when thrown while active. Does not stack with throwforce_off.
@@ -78,8 +77,21 @@
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
to_chat(user, "You accidentally cut yourself with [src], like a doofus! ")
user.take_organ_damage(5,5)
- active = !active
- if(active)
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
+ REMOVE_TRAIT(src, TRAIT_ITEM_ACTIVE, TRAIT_GENERIC)
+ force = force_off
+ throwforce = throwforce_off
+ hitsound = initial(hitsound)
+ throw_speed = initial(throw_speed)
+ if(length(attack_verb_on))
+ attack_verb = list()
+ icon_state = initial(icon_state)
+ w_class = initial(w_class)
+ playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
+ set_light(0)
+ to_chat(user, "[src] can now be concealed. ")
+ else
+ ADD_TRAIT(src, TRAIT_ITEM_ACTIVE, TRAIT_GENERIC)
force = force_on
throwforce = throwforce_on
hitsound = 'sound/weapons/blade1.ogg'
@@ -95,18 +107,7 @@
w_class = w_class_on
playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
to_chat(user, "[src] is now active. ")
- else
- force = force_off
- throwforce = throwforce_off
- hitsound = initial(hitsound)
- throw_speed = initial(throw_speed)
- if(length(attack_verb_on))
- attack_verb = list()
- icon_state = initial(icon_state)
- w_class = initial(w_class)
- playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
- set_light(0)
- to_chat(user, "[src] can now be concealed. ")
+
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
@@ -115,7 +116,9 @@
return
/obj/item/melee/energy/get_heat()
- return active * 3500
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
+ return 3500
+ return 0
/obj/item/melee/energy/proc/try_sharpen(obj/item/item, amount, max_amount)
SIGNAL_HANDLER // COMSIG_ITEM_SHARPEN_ACT
@@ -180,14 +183,14 @@
..()
if(item_color == null)
item_color = pick("red", "blue", "green", "purple")
- AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES)
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES, _requires_activation = TRUE)
/obj/item/melee/energy/sword/examine(mob/user)
. = ..()
. += "Can parry melee attacks and sometimes blocks ranged energy attacks. Use in hand to turn off and on. "
/obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- if(active)
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
return ..()
return FALSE
@@ -198,7 +201,7 @@
/obj/item/melee/energy/sword/cyborg/attack(mob/M, mob/living/silicon/robot/R)
if(R.cell)
var/obj/item/stock_parts/cell/C = R.cell
- if(active && !(C.use(hitcost)))
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE) && !(C.use(hitcost)))
attack_self(R)
to_chat(R, "It's out of charge! ")
return
@@ -251,7 +254,7 @@
item_color = "rainbow"
to_chat(user, "RNBW_ENGAGE ")
- if(active)
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
icon_state = "swordrainbow"
// Updating overlays, copied from welder code.
// I tried calling attack_self twice, which looked cool, except it somehow didn't update the overlays!!
@@ -265,7 +268,7 @@
/obj/item/melee/energy/sword/saber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- if(!active)
+ if(!HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
return FALSE
. = ..()
if(!.) // they did not block the attack
@@ -322,13 +325,16 @@
icon_state = "blade"
force = 30 //Normal attacks deal esword damage
hitsound = 'sound/weapons/blade1.ogg'
- active = TRUE
throwforce = 1//Throwing or dropping the item deletes it.
throw_speed = 3
throw_range = 1
w_class = WEIGHT_CLASS_BULKY //So you can't hide it in your pocket or some such.
sharp = TRUE
+/obj/item/melee/energy/blade/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_ITEM_ACTIVE, ROUNDSTART_TRAIT)
+
/obj/item/melee/energy/blade/attack_self(mob/user)
return
@@ -374,7 +380,7 @@
return
var/datum/status_effect/saw_bleed/B = target.has_status_effect(STATUS_EFFECT_SAWBLEED)
if(!B)
- if(!active) //This isn't in the above if-check so that the else doesn't care about active
+ if(!HAS_TRAIT(src, TRAIT_ITEM_ACTIVE)) //This isn't in the above if-check so that the else doesn't care about active
target.apply_status_effect(STATUS_EFFECT_SAWBLEED)
else
B.add_bleed(B.bleed_buildup)
@@ -394,8 +400,21 @@
if(HAS_TRAIT(H, TRAIT_CLUMSY) && prob(50))
to_chat(H, "You accidentally cut yourself with [src], like a doofus! ")
H.take_organ_damage(10,10)
- active = !active
- if(active)
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
+ REMOVE_TRAIT(src, TRAIT_ITEM_ACTIVE, TRAIT_GENERIC)
+ force = force_off
+ throwforce = throwforce_off
+ hitsound = initial(hitsound)
+ throw_speed = initial(throw_speed)
+ if(length(attack_verb_on))
+ attack_verb = list()
+ icon_state = initial(icon_state)
+ w_class = initial(w_class)
+ playsound(user, 'sound/magic/fellowship_armory.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
+ set_light(0)
+ to_chat(user, "You close [src]. It will now attack rapidly and cause fauna to bleed. ")
+ else
+ ADD_TRAIT(src, TRAIT_ITEM_ACTIVE, TRAIT_GENERIC)
force = force_on
throwforce = throwforce_on
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -409,20 +428,8 @@
icon_state = "sword[item_color]"
set_light(brightness_on, l_color=colormap[item_color])
w_class = w_class_on
- playsound(user, 'sound/magic/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000))
+ playsound(user, 'sound/magic/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (HAS_TRAIT(src, TRAIT_ITEM_ACTIVE) * 30000))
to_chat(user, "You open [src]. It will now cleave enemies in a wide arc and deal additional damage to fauna. ")
- else
- force = force_off
- throwforce = throwforce_off
- hitsound = initial(hitsound)
- throw_speed = initial(throw_speed)
- if(length(attack_verb_on))
- attack_verb = list()
- icon_state = initial(icon_state)
- w_class = initial(w_class)
- playsound(user, 'sound/magic/fellowship_armory.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
- set_light(0)
- to_chat(user, "You close [src]. It will now attack rapidly and cause fauna to bleed. ")
if(ishuman(user))
var/mob/living/carbon/human/H = user
@@ -433,27 +440,27 @@
/obj/item/melee/energy/cleaving_saw/examine(mob/user)
. = ..()
- . += "It is [active ? "open, will cleave enemies in a wide arc and deal additional damage to fauna":"closed, and can be used for rapid consecutive attacks that cause fauna to bleed"]. \
+ . += "It is [HAS_TRAIT(src, TRAIT_ITEM_ACTIVE) ? "open, will cleave enemies in a wide arc and deal additional damage to fauna":"closed, and can be used for rapid consecutive attacks that cause fauna to bleed"]. \
Both modes will build up existing bleed effects, doing a burst of high damage if the bleed is built up high enough. \
Transforming it immediately after an attack causes the next attack to come out faster. "
/obj/item/melee/energy/cleaving_saw/suicide_act(mob/user)
- user.visible_message("[user] is [active ? "closing [src] on [user.p_their()] neck" : "opening [src] into [user.p_their()] chest"]! It looks like [user.p_theyre()] trying to commit suicide! ")
+ user.visible_message("[user] is [HAS_TRAIT(src, TRAIT_ITEM_ACTIVE) ? "closing [src] on [user.p_their()] neck" : "opening [src] into [user.p_their()] chest"]! It looks like [user.p_theyre()] trying to commit suicide! ")
transform_cooldown = 0
transform_weapon(user, TRUE)
return BRUTELOSS
/obj/item/melee/energy/cleaving_saw/melee_attack_chain(mob/user, atom/target, params)
..()
- if(!active)
+ if(!HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
user.changeNext_move(CLICK_CD_MELEE * 0.5) //when closed, it attacks very rapidly
/obj/item/melee/energy/cleaving_saw/attack(mob/living/target, mob/living/carbon/human/user)
- if(!active || swiping || !target.density || get_turf(target) == get_turf(user))
- if(!active)
+ if(!HAS_TRAIT(src, TRAIT_ITEM_ACTIVE) || swiping || !target.density || get_turf(target) == get_turf(user))
+ if(!HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
faction_bonus_force = 0
..()
- if(!active)
+ if(!HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
faction_bonus_force = initial(faction_bonus_force)
else
var/turf/user_turf = get_turf(user)
diff --git a/code/game/objects/items/weapons/melee/melee_misc.dm b/code/game/objects/items/weapons/melee/melee_misc.dm
index 2c7e3e0e3462..58cbe324e8eb 100644
--- a/code/game/objects/items/weapons/melee/melee_misc.dm
+++ b/code/game/objects/items/weapons/melee/melee_misc.dm
@@ -45,6 +45,40 @@
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS)
RegisterSignal(src, COMSIG_PARENT_QDELETING, PROC_REF(alert_admins_on_destroy))
+// Traitor Sword
+/obj/item/melee/snakesfang
+ name = "snakesfang"
+ desc = "A uniquely curved, black and red sword. Extra-edgy and cutting-edge."
+ lefthand_file = 'icons/mob/inhands/weapons_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons_righthand.dmi'
+ icon_state = "snakesfang"
+ item_state = "snakesfang"
+ flags = CONDUCT
+ force = 25
+ throwforce = 10
+ w_class = WEIGHT_CLASS_BULKY
+ sharp = TRUE
+ origin_tech = "combat=6;syndicate=3"
+ attack_verb = list("slashed", "sliced", "chopped")
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ materials = list(MAT_METAL = 1000)
+
+/obj/item/melee/snakesfang/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS)
+
+/obj/item/melee/snakesfang/examine_more(mob/user)
+ . = ..()
+ . += "A uniquely curved, black and red sword. Extra-edgy and cutting-edge."
+ . += ""
+ . += "The MK-IV Enhanced Combat Blade, more colloquially known as the ‘Snakesfang’, is a vicious yet stylish weapon designed \
+ by a relatively unknown weapons forge with known ties to the Syndicate. With a wide, curved blade and dual points \
+ resembling the fangs of the organization’s serpent motif, the Snakesfang is a statement like no other."
+ . += ""
+ . += "While the benefits of its unique design are dubious at best, the Snakesfang is undoubtedly a perilous weapon, with a hardened \
+ plastitanium edge that can cause untold harm to a soft target. In the right hands, it can be a terrifying weapon to behold, \
+ and it’s said that blood runs down the blade in just the right way, to drip artfully from the twin ‘fangs’ at its apex."
+
/obj/item/melee/icepick
name = "ice pick"
desc = "Used for chopping ice. Also excellent for mafia esque murders."
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 3f260fb977b4..604b90b7c54c 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -139,32 +139,34 @@
throw_speed = 3
throw_range = 4
w_class = WEIGHT_CLASS_NORMAL
- var/active = FALSE
+
+/obj/item/shield/riot/tele/add_parry_component()
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (5 / 3) SECONDS, _requires_activation = TRUE)
/obj/item/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- if(active)
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
return ..()
return FALSE // by not calling the parent the hit_reaction signal is never sent
/obj/item/shield/riot/tele/attack_self(mob/living/user)
- active = !active
- icon_state = "teleriot[active]"
- playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
-
- if(active)
- force = 8
- throwforce = 5
- throw_speed = 2
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_FLAG_BACK
- to_chat(user, "You extend \the [src]. ")
- else
+ if(HAS_TRAIT(src, TRAIT_ITEM_ACTIVE))
+ REMOVE_TRAIT(src,TRAIT_ITEM_ACTIVE, TRAIT_GENERIC)
force = 3
throwforce = 3
throw_speed = 3
w_class = WEIGHT_CLASS_NORMAL
slot_flags = null
to_chat(user, "[src] can now be concealed. ")
+ else
+ ADD_TRAIT(src, TRAIT_ITEM_ACTIVE, TRAIT_GENERIC)
+ force = 8
+ throwforce = 5
+ throw_speed = 2
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = SLOT_FLAG_BACK
+ to_chat(user, "You extend \the [src]. ")
+ icon_state = "teleriot[HAS_TRAIT(src, TRAIT_ITEM_ACTIVE)]"
+ playsound(loc, 'sound/weapons/batonextend.ogg', 50, TRUE)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 24257e07a92c..3f6f205721d7 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -725,9 +725,9 @@
icon_state = "fannypack_yellow"
item_state = "fannypack_yellow"
-/obj/item/storage/belt/rapier
- name = "rapier sheath"
- desc = "Can hold rapiers."
+/obj/item/storage/belt/sheath
+ name = "sword sheath"
+ desc = "Can hold swords. If you see this, it is a bug. Please report this on GitHub."
icon_state = "sheath"
item_state = "sheath"
storage_slots = 1
@@ -737,11 +737,7 @@
layer_over_suit = TRUE
large = TRUE
-/obj/item/storage/belt/rapier/populate_contents()
- new /obj/item/melee/rapier(src)
- update_icon()
-
-/obj/item/storage/belt/rapier/attack_hand(mob/user)
+/obj/item/storage/belt/sheath/attack_hand(mob/user)
if(loc != user)
return ..()
@@ -759,20 +755,20 @@
else
to_chat(user, "[src] is empty! ")
-/obj/item/storage/belt/rapier/handle_item_insertion(obj/item/W, mob/user, prevent_warning)
+/obj/item/storage/belt/sheath/handle_item_insertion(obj/item/W, mob/user, prevent_warning)
if(!..())
return
playsound(src, 'sound/weapons/blade_sheath.ogg', 20)
-/obj/item/storage/belt/rapier/remove_from_storage(obj/item/W, atom/new_location)
+/obj/item/storage/belt/sheath/remove_from_storage(obj/item/W, atom/new_location)
if(!..())
return
playsound(src, 'sound/weapons/blade_unsheath.ogg', 20)
-/obj/item/storage/belt/rapier/update_icon_state()
+/obj/item/storage/belt/sheath/update_icon_state()
if(length(contents))
- icon_state = "[icon_state]-rapier"
- item_state = "[item_state]-rapier"
+ icon_state = "[icon_state]-sword"
+ item_state = "[item_state]-sword"
else
icon_state = initial(icon_state)
item_state = initial(item_state)
@@ -780,6 +776,28 @@
var/mob/living/L = loc
L.update_inv_belt()
+/obj/item/storage/belt/sheath/rapier
+ name = "rapier sheath"
+ desc = "Can hold rapiers."
+ icon_state = "sheath"
+ item_state = "sheath"
+ can_hold = list(/obj/item/melee/rapier)
+
+/obj/item/storage/belt/sheath/rapier/populate_contents()
+ new /obj/item/melee/rapier(src)
+ update_appearance(UPDATE_ICON_STATE)
+
+/obj/item/storage/belt/sheath/snakesfang
+ name = "snakesfang scabbard"
+ desc = "Can hold scimitars."
+ icon_state = "snakesfangsheath"
+ item_state = "snakesfangsheath"
+ can_hold = list(/obj/item/melee/snakesfang)
+
+/obj/item/storage/belt/sheath/snakesfang/populate_contents()
+ new /obj/item/melee/snakesfang(src)
+ update_appearance(UPDATE_ICON_STATE)
+
// -------------------------------------
// Bluespace Belt
// -------------------------------------
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 77cc3c0f361a..7d03cf3a7840 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -43,7 +43,7 @@
/obj/item/storage/briefcase/false_bottomed/afterattack(atom/A, mob/user, flag, params)
..()
- if(stored_item && isgun(stored_item) && !Adjacent(A))
+ if(stored_item && isgun(stored_item))
var/obj/item/gun/stored_gun = stored_item
stored_gun.afterattack(A, user, flag, params)
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index f37f7a52c39b..4581d89b6eb1 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -53,7 +53,7 @@
var/icon/new_donut_icon = icon('icons/obj/food/containers.dmi', "[(I - 1)]donut[donut.donut_sprite_type]")
. += new_donut_icon
-/obj/item/storage/fancy/update_icon_state()
+/obj/item/storage/fancy/donut_box/update_icon_state()
return
/obj/item/storage/fancy/donut_box/populate_contents()
@@ -96,13 +96,15 @@
name = "Candle pack"
desc = "A pack of red candles."
icon = 'icons/obj/candle.dmi'
- icon_state = "candlebox5"
+ icon_state = "candlebox0"
icon_type = "candle"
item_state = "candlebox5"
storage_slots = 5
throwforce = 2
slot_flags = SLOT_FLAG_BELT
+/obj/item/storage/fancy/candle_box/full
+ icon_state = "candlebox5"
/obj/item/storage/fancy/candle_box/full/populate_contents()
for(var/I in 1 to storage_slots)
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index ffac415f5082..7e3157fec859 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -6,40 +6,40 @@
/obj/item/storage/box/syndie_kit/bundle
var/list/items = list()
-/// 172TC
+/// 222TC
/obj/item/storage/box/syndie_kit/bundle/spy
name = "Spy Bundle"
desc = "Complete your objectives quietly with this compilation of stealthy items."
items = list(
- /obj/item/storage/box/syndie_kit/chameleon, // 20 TC
+ /obj/item/storage/box/syndie_kit/chameleon, // 10TC
/obj/item/card/id/syndicate, // 10TC
/obj/item/clothing/shoes/chameleon/noslip, // 10TC
- /obj/item/clothing/glasses/hud/security/chameleon, // 10TC
+ /obj/item/clothing/glasses/hud/security/chameleon, //10TC
/obj/item/bio_chip_implanter/storage, // 40TC
/obj/item/pen/edagger, // 10TC
- /obj/item/pinpointer/advpinpointer, // 20TC
+ /obj/item/pinpointer/advpinpointer, // 10TC
/obj/item/storage/fancy/cigarettes/cigpack_syndicate, // 7TC
/obj/item/flashlight/emp, // 20TC
/obj/item/chameleon, // 25TC
/obj/item/garrote, // 30 TC
- /obj/item/door_remote/omni/access_tuner, // 30 TC
+ /obj/item/door_remote/omni/access_tuner, // 30TC
/obj/item/encryptionkey/syndicate) // 10TC
-/// 159
+/// 142TC
/obj/item/storage/box/syndie_kit/bundle/agent13
name = "Agent 13 Bundle"
desc = "Find and eliminate your targets quietly and effectively with this kit."
items = list(
- /obj/item/clothing/under/chameleon, // 5TC
+ /obj/item/clothing/under/chameleon, // 1TC. 10TC divided over 10 items from the chameleon kit.
/obj/item/card/id/syndicate, // 10TC
- /obj/item/storage/box/syndie_kit/stechkin, // 20TC
+ /obj/item/storage/box/syndie_kit/stechkin, // 26TC. 20TC for stechkin, plus the 2 mags at 3TC
/obj/item/suppressor, // 5TC
/obj/item/ammo_box/magazine/m10mm, // 3TC
- /obj/item/ammo_box/magazine/m10mm/hp, // 6TC
+ /obj/item/ammo_box/magazine/m10mm/hp, // 7TC
/obj/item/garrote, // 30TC
/obj/item/door_remote/omni/access_tuner, // 30TC
/obj/item/clothing/glasses/chameleon/thermal, // 15TC
- /obj/item/storage/briefcase/false_bottomed, // 10 TC
+ /obj/item/storage/briefcase/false_bottomed, // 10TC
/obj/item/bio_chip_implanter/freedom, // 25TC
/obj/item/coin/gold, // 0TC
/obj/item/encryptionkey/syndicate) // 10TC
@@ -57,14 +57,14 @@
/obj/item/storage/backpack/satchel_flat, // 10TC
/obj/item/encryptionkey/syndicate) // 10TC
-/// 137TC
+/// 176TC
/obj/item/storage/box/syndie_kit/bundle/bond
name = "Agent 007 Bundle"
desc = "Shake your Martini and stir up trouble with this bundle of lethal equipment mixed with a spritz of gadgetry to keep things interesting."
items = list(
- /obj/item/storage/briefcase/false_bottomed, // 20TC
+ /obj/item/storage/briefcase/false_bottomed, // 10TC
/obj/item/suppressor, // 5TC
- /obj/item/storage/box/syndie_kit/stechkin, // 20TC
+ /obj/item/storage/box/syndie_kit/stechkin, // 26TC. 20TC for stechkin, plus the 2 mags at 3TC
/obj/item/ammo_box/magazine/m10mm/ap, // 6TC
/obj/item/ammo_box/magazine/m10mm/ap, // 6TC
/obj/item/clothing/under/suit/really_black, // 0TC
@@ -73,25 +73,25 @@
/obj/item/storage/box/syndie_kit/emp, // 10TC
/obj/item/clothing/glasses/hud/security/chameleon, // 10TC
/obj/item/encryptionkey/syndicate, // 10TC
- /obj/item/reagent_containers/drinks/drinkingglass/alliescocktail, // 0TC
+ /obj/item/reagent_containers/drinks/drinkingglass/alliescocktail, // 0TC
/obj/item/storage/box/syndie_kit/pen_bomb, // 30 TC
- /obj/item/CQC_manual) // 13TC
+ /obj/item/CQC_manual) // 50tc
-/// 155TC + RCD & Mesons Autoimplanter
+/// 145TC + RCD & Mesons Autoimplanter
/obj/item/storage/box/syndie_kit/bundle/infiltrator
name = "Infiltration Bundle"
desc = "Use your teleporter, krav maga and other support tools to jump right into your desired location, quickly leaving as though you were never there."
items = list(
- /obj/item/storage/box/syndie_kit/teleporter, // 8TC
- /obj/item/clothing/gloves/color/black/krav_maga, // 10TC
- /obj/item/clothing/glasses/chameleon/thermal, // 6TC
- /obj/item/pinpointer/advpinpointer, // 4TC
+ /obj/item/storage/box/syndie_kit/teleporter, // 40TC
+ /obj/item/clothing/gloves/color/black/krav_maga, // 50TC
+ /obj/item/clothing/glasses/chameleon/thermal, // 15TC
+ /obj/item/pinpointer/advpinpointer, // 10TC
/obj/item/rcd/preloaded, // 0TC
- /obj/item/storage/box/syndie_kit/space, // 4TC
+ /obj/item/storage/box/syndie_kit/space, // 20TC
/obj/item/autosurgeon/organ/syndicate/oneuse/meson_eyes, // 0TC
- /obj/item/encryptionkey/syndicate) // 2TC
+ /obj/item/encryptionkey/syndicate) // 10TC
-/// 185TC
+/// 188TC
/obj/item/storage/box/syndie_kit/bundle/payday
name = "Heist Bundle"
desc = "Alright guys, today we're performing a heist on a space station owned by a greedy corporation. Drain the vault of all its worth so we can get that pay dirt!11"
@@ -103,15 +103,15 @@
/obj/item/jammer, // 20 TC
/obj/item/card/id/syndicate, // 10 TC
/obj/item/clothing/under/suit/really_black, // 0TC
- /obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 0TC
- /obj/item/clothing/gloves/color/latex/nitrile, // 0 TC
+ /obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 3TC
+ /obj/item/clothing/gloves/color/latex/nitrile, // 0TC
/obj/item/clothing/mask/gas/clown_hat, // 0TC
/obj/item/grenade/plastic/c4, // 5 TC
/obj/item/thermal_drill/diamond_drill/syndicate, // 5 TC
/obj/item/bio_chip_implanter/freedom/prototype, // 10 TC
/obj/item/encryptionkey/syndicate) // 10TC
-/// 200TC
+/// 175TC
/obj/item/storage/box/syndie_kit/bundle/implant
name = "Bio-chip Bundle"
desc = "A few useful bio-chips to give you some options for when you inevitably get captured by the Security."
@@ -124,25 +124,25 @@
/obj/item/bio_chip_implanter/storage, // 40TC
/obj/item/encryptionkey/syndicate) // 10TC
-/// 180TC
+/// 220TC
/obj/item/storage/box/syndie_kit/bundle/hacker
name = "Hacker Bundle"
desc = "A kit with everything you need to hack into and disrupt the Station, AI, its cyborgs and the Security team. HACK THE PLANET!"
items = list(
/obj/item/melee/energy/sword/saber/blue, // 40TC
/obj/item/autosurgeon/organ/syndicate/oneuse/hackerman_deck, // 30TC
- /obj/item/door_remote/omni/access_tuner, // 30 TC, HACK EVERYTHING
+ /obj/item/door_remote/omni/access_tuner, // 30TC, HACK EVERYTHING
/obj/item/encryptionkey/syndicate, // 10TC
/obj/item/encryptionkey/binary, // 25TC
/obj/item/card/id/syndicate, // 10TC
/obj/item/storage/box/syndie_kit/emp, // 10TC
/obj/item/aiModule/toyAI, // 0TC
- /obj/item/aiModule/syndicate, // 15 TC
- /obj/item/storage/box/syndie_kit/camera_bug, // 5 TC
- /obj/item/bio_chip_implanter/freedom/prototype, // 10 TC
+ /obj/item/aiModule/syndicate, // 15TC
+ /obj/item/storage/box/syndie_kit/camera_bug, // 5TC
+ /obj/item/bio_chip_implanter/freedom/prototype, // 10TC
/obj/item/storage/belt/military/traitor/hacker, // 15TC + AI detector for 5 TC
/obj/item/clothing/gloves/combat, // accounted in belt + toolbox
- /obj/item/flashlight/emp) // 4TC
+ /obj/item/flashlight/emp) // 20TC
/// 170TC + Telekinesis
/obj/item/storage/box/syndie_kit/bundle/darklord
@@ -152,7 +152,7 @@
/obj/item/melee/energy/sword/saber/red, // 40TC
/obj/item/melee/energy/sword/saber/red, // 40TC
/obj/item/bio_chip_implanter/shock, // 50TC
- /obj/item/dnainjector/telemut/darkbundle, // ?TC
+ /obj/item/dnainjector/telemut/darkbundle, // 0TC
/obj/item/clothing/suit/hooded/chaplain_hoodie, // 0TC
/obj/item/clothing/glasses/meson/engine/tray, // 0TC
/obj/item/clothing/mask/chameleon/voice_change, // 10TC
@@ -173,39 +173,39 @@
/obj/item/clothing/gloves/combat, // ~1TC
/obj/item/clothing/under/suit/really_black, // 0TC
/obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 3TC
- /obj/item/encryptionkey/syndicate) // 15TC
+ /obj/item/encryptionkey/syndicate) // 10TC
-/// 133TC + Tactical Grenadier Belt
+/// 215TC + Tactical Grenadier Belt
/obj/item/storage/box/syndie_kit/bundle/grenadier
name = "Grenade Bundle"
desc = "A variety of grenades and pyrotechnics to ensure you can blast your way through any situation."
items = list(
- /obj/item/storage/belt/grenade/tactical, // Contains 2 Frag and EMP grenades, 5 C4 Explosives, 5 Smoke and Gluon grenades and 1 Minibomb grenade ~20TC Estimate
- /obj/item/storage/box/syndie_kit/stechkin, // 20TC
- /obj/item/ammo_box/magazine/m10mm/fire, // 6TC
- /obj/item/ammo_box/magazine/m10mm/fire, // 6TC
+ /obj/item/storage/belt/grenade/tactical, // ~60TC Contains 2 Frag and EMP grenades, 5 C4 Explosives, 5 Smoke and Gluon grenades and 1 Minibomb grenade
+ /obj/item/storage/box/syndie_kit/stechkin, // 26TC. 20TC for stechkin, plus the 2 mags at 3TC
+ /obj/item/ammo_box/magazine/m10mm/fire, // 9TC
+ /obj/item/ammo_box/magazine/m10mm/fire, // 9TC
/obj/item/mod/control/pre_equipped/traitor, // 30TC
/obj/item/clothing/gloves/combat, // ~1TC
/obj/item/card/id/syndicate, // 10TC
/obj/item/clothing/shoes/chameleon/noslip, // 10TC
/obj/item/storage/box/syndidonkpockets, // 10 TC
- /obj/item/storage/box/syndie_kit/frag_grenades, // One box, as a treat
+ /obj/item/storage/box/syndie_kit/frag_grenades, // 40tc
/obj/item/encryptionkey/syndicate) // 10TC
-/// 75TC + modules + laser gun
+/// 80TC + modules + laser gun
/obj/item/storage/box/syndie_kit/bundle/metroid
name = "Modsuit Bundle"
desc = "Don the equipment of an intergalactic bounty hunter and blast your way through the station!"
items = list(
/obj/item/mod/control/pre_equipped/traitor_elite, // 45TC
/obj/item/mod/module/visor/thermal, // 15TC
- /obj/item/mod/module/stealth, // ?TC
- /obj/item/mod/module/power_kick, // ?TC
- /obj/item/mod/module/sphere_transform, // ?TC
- /obj/item/autosurgeon/organ/syndicate/oneuse/laser_arm, // ?TC
- /obj/item/pinpointer/advpinpointer, // 20TC
- /obj/item/autosurgeon/organ/syndicate/oneuse/hardened_heart, // Like adrenals but no speed / healing
- /obj/item/storage/belt/utility/full/multitool, // 15TC
+ /obj/item/mod/module/stealth, // 0TC
+ /obj/item/mod/module/power_kick, // 0TC
+ /obj/item/mod/module/sphere_transform, // 0TC
+ /obj/item/autosurgeon/organ/syndicate/oneuse/laser_arm, // 0TC
+ /obj/item/pinpointer/advpinpointer, // 10TC
+ /obj/item/autosurgeon/organ/syndicate/oneuse/hardened_heart, // 0TC decent stamina regen, but no speed/healing.
+ /obj/item/storage/belt/utility/full/multitool, // 0TC
/obj/item/clothing/head/collectable/slime, // 0TC priceless
/obj/item/encryptionkey/syndicate) // 10TC
@@ -214,20 +214,20 @@
name = "Ocelot Bundle"
desc = "Get pretty good with two revolvers, two speedloaders, and a backup combat knife."
items = list(
- /obj/item/kitchen/knife/combat, // 0 TC but very robust
- /obj/item/gun/projectile/revolver, // 65 TC
- /obj/item/gun/projectile/revolver, // 65 TC
- /obj/item/ammo_box/a357, // 15 TC
- /obj/item/ammo_box/a357, // 15 TC
- /obj/item/encryptionkey/syndicate, // 10 TC
- /obj/item/clothing/under/syndicate/combat, // 0 TC
- /obj/item/clothing/accessory/holster, // 0 TC
- /obj/item/clothing/accessory/scarf/red, // 0 TC
- /obj/item/clothing/head/beret, // 0 TC
- /obj/item/clothing/gloves/combat, // 0 TC
- /obj/item/clothing/shoes/combat) // 0 TC
-
-// 175 TC
+ /obj/item/kitchen/knife/combat, // 0TC but very robust
+ /obj/item/gun/projectile/revolver, // 65TC
+ /obj/item/gun/projectile/revolver, // 65TC
+ /obj/item/ammo_box/a357, // 15TC
+ /obj/item/ammo_box/a357, // 15TC
+ /obj/item/encryptionkey/syndicate, // 10TC
+ /obj/item/clothing/under/syndicate/combat, //0TC
+ /obj/item/clothing/accessory/holster, // 0TC
+ /obj/item/clothing/accessory/scarf/red, //0TC
+ /obj/item/clothing/head/beret, // 0TC
+ /obj/item/clothing/gloves/combat, // 0TC
+ /obj/item/clothing/shoes/combat) // 0TC
+
+// 147 TC
/obj/item/storage/box/syndie_kit/bundle/operative
name = "\"Operative\" Bundle"
desc = "Glory to the Syndicate! Only the essentials for destroying Nanotrasen in this important kit."
@@ -235,14 +235,14 @@
/obj/item/mod/control/pre_equipped/traitor, // 30TC
/obj/item/card/id/syndi_scan_only, // ~2TC?
/obj/item/encryptionkey/syndicate, // 10tc
- /obj/item/melee/energy/sword/saber/red, // 40tc
- /obj/item/shield/energy, // 40tc
- /obj/item/pinpointer/advpinpointer, // 20tc, get dat fuckin disk
- /obj/item/storage/belt/military, // 10tc
- /obj/item/grenade/plastic/c4, // 5tc
- /obj/item/bio_chip_implanter/proto_adrenalin, // 18tc
- /obj/item/toy/figure/crew/syndie, // 0tc
- /obj/item/clothing/under/syndicate // 0tc
+ /obj/item/melee/energy/sword/saber/red, // 40TC
+ /obj/item/shield/energy, // 40TC
+ /obj/item/pinpointer/advpinpointer, // 10TC, get dat fuckin disk
+ /obj/item/storage/belt/military, // 10TC
+ /obj/item/grenade/plastic/c4, // 5TC
+ /obj/item/bio_chip_implanter/proto_adrenalin, // 10TC
+ /obj/item/toy/figure/crew/syndie, // 0TC
+ /obj/item/clothing/under/syndicate // 0TC
)
// 250 TC worth of credits
@@ -250,46 +250,46 @@
name = "Big Spender Bundle"
desc = "It's money. I don't need to explain more."
items = list(
- /obj/item/clothing/under/suit/really_black, // 0 TC
- /obj/item/clothing/shoes/laceup, // 0 TC
- /obj/item/clothing/glasses/monocle, // 0 TC
- /obj/item/clothing/gloves/color/white, // 0 TC
- /obj/item/clothing/head/that, // 0 TC
- /obj/item/storage/secure/briefcase, // 0 TC
- /// syndie briefcase has 600 credits for 5 TC.
+ /obj/item/clothing/under/suit/really_black, // 0TC
+ /obj/item/clothing/shoes/laceup, // 0TC
+ /obj/item/clothing/glasses/monocle, // 0TC
+ /obj/item/clothing/gloves/color/white, // 0TC
+ /obj/item/clothing/head/that, // 0TC
+ /obj/item/storage/secure/briefcase, // 0TC
+ // syndie briefcase has 600 credits for 5 TC.
/obj/item/stack/spacecash/c10000,
/obj/item/stack/spacecash/c10000,
/obj/item/stack/spacecash/c10000
)
-// 211 TC of maint loot, higher than other bundles because it doesn't combo well
+// 209 TC of maint loot, higher than other bundles because it doesn't combo well
/obj/item/storage/box/syndie_kit/bundle/maint_loot
name = "Maintenance Loot Bundle"
desc = "One of our interns found all of this lying in a Nanotrasen Maintenance tunnels. Reduce, Reuse, Recycle!"
items = list(
- /obj/item/storage/bag/plasticbag, // 1 TC
- /obj/item/grenade/clown_grenade, // 15 TC
- /obj/item/seeds/ambrosia/cruciatus, // 5 TC
- /obj/item/gun/projectile/automatic/pistol, // 20 TC
- /obj/item/ammo_box/magazine/m10mm, // 3 TC
- /obj/item/soap/syndie, // 5 TC
- /obj/item/suppressor, // 5 TC
- /obj/item/clothing/under/chameleon, // 3 TC
- /obj/item/clothing/shoes/chameleon/noslip, // 10 TC
- /obj/item/clothing/mask/chameleon/voice_change, // 10 TC
- /obj/item/dnascrambler, // 7 TC
- /obj/item/storage/backpack/satchel_flat, // 10 TC
- /obj/item/storage/toolbox/syndicate, // 5 TC
- /obj/item/storage/backpack/duffel/syndie/med/surgery, // 10 TC
- /obj/item/storage/belt/military/traitor, // 10 TC
- /obj/item/storage/box/syndie_kit/space, // 20 TC
- /obj/item/multitool/ai_detect, // 5 TC
- /obj/item/bio_chip_implanter/storage, // 40 TC
- /obj/item/deck/cards/syndicate, // 2 TC
- /obj/item/storage/secure/briefcase/syndie, // 5 TC
- /obj/item/storage/fancy/cigarettes/cigpack_syndicate, // 7 TC
- /obj/item/clothing/suit/jacket/bomber/syndicate, // 3 TC
- /obj/item/melee/knuckleduster/syndie, // 10 TC
+ /obj/item/storage/bag/plasticbag, // 1TC
+ /obj/item/grenade/clown_grenade, // 15TC
+ /obj/item/seeds/ambrosia/cruciatus, // 5TC
+ /obj/item/gun/projectile/automatic/pistol, // 20TC
+ /obj/item/ammo_box/magazine/m10mm, // 3TC
+ /obj/item/soap/syndie, // 5TC
+ /obj/item/suppressor, // 5TC
+ /obj/item/clothing/under/chameleon, // 1TC. 10TC divided over 10 items.
+ /obj/item/clothing/shoes/chameleon/noslip, // 10TC
+ /obj/item/clothing/mask/chameleon/voice_change, // 10TC
+ /obj/item/dnascrambler, // 7TC
+ /obj/item/storage/backpack/satchel_flat, // 10TC
+ /obj/item/storage/toolbox/syndicate, // 5TC
+ /obj/item/storage/backpack/duffel/syndie/med/surgery, // 10TC
+ /obj/item/storage/belt/military/traitor, // 10TC
+ /obj/item/storage/box/syndie_kit/space, // 20TC
+ /obj/item/multitool/ai_detect, // 5TC
+ /obj/item/bio_chip_implanter/storage, // 40TC
+ /obj/item/deck/cards/syndicate, // 2TC
+ /obj/item/storage/secure/briefcase/syndie, // 5TC
+ /obj/item/storage/fancy/cigarettes/cigpack_syndicate, // 7TC
+ /obj/item/clothing/suit/jacket/bomber/syndicate, // 3TC
+ /obj/item/melee/knuckleduster/syndie, // 10TC
)
/obj/item/storage/box/syndie_kit/bundle/populate_contents()
@@ -556,3 +556,10 @@
/obj/item/storage/box/syndie_kit/pen_bomb/populate_contents()
new /obj/item/grenade/syndieminibomb/pen(src)
+
+/obj/item/storage/box/syndie_kit/decoy
+ name = "\improper Decoy Grenade kit"
+
+/obj/item/storage/box/syndie_kit/decoy/populate_contents()
+ for(var/i in 1 to 5)
+ new /obj/item/grenade/firecracker/decoy(src)
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 5885c3a39ae6..38f5ff839e4b 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -183,12 +183,9 @@
var/mob/living/L = M
if(user.a_intent == INTENT_HARM)
- . = ..() // Whack them too if in harm intent
- if(.) // True is returned when blocked, false when not. I know.
- return
if(turned_on)
- baton_stun(L, user, ignore_shield_check = TRUE)
- return
+ baton_stun(L, user)
+ return ..() // Whack them too if in harm intent
if(!turned_on)
user.do_attack_animation(L)
@@ -199,8 +196,8 @@
if(baton_stun(L, user))
user.do_attack_animation(L)
-/// returning false results in no baton attack animation, returning true results in an animation. If ignore_shield_check is true, the baton will not run check shields, and will hit if not on cooldown.
-/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user, skip_cooldown = FALSE, ignore_shield_check = FALSE)
+/// returning false results in no baton attack animation, returning true results in an animation.
+/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user, skip_cooldown = FALSE)
if(cooldown > world.time && !skip_cooldown)
return FALSE
@@ -211,7 +208,7 @@
cooldown = world.time + initial(cooldown) // tracks the world.time when hitting will be next available.
if(ishuman(L))
var/mob/living/carbon/human/H = L
- if(!ignore_shield_check && H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
+ if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
playsound(L, 'sound/weapons/genhit.ogg', 50, TRUE)
return FALSE
H.Confused(10 SECONDS)
@@ -314,7 +311,7 @@
QDEL_NULL(sparkler)
return ..()
-/obj/item/melee/baton/cattleprod/baton_stun(mob/living/L, mob/user, skip_cooldown = FALSE, ignore_shield_check = FALSE)
+/obj/item/melee/baton/cattleprod/baton_stun(mob/living/L, mob/user, skip_cooldown = FALSE)
if(sparkler.activate())
return ..()
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 86685a831972..2fd912cf4501 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -23,6 +23,8 @@
noz = make_noz()
/obj/item/watertank/Destroy()
+ if(on)
+ remove_noz()
QDEL_NULL(noz)
return ..()
@@ -69,12 +71,6 @@
M.unEquip(noz, 1)
return
-/obj/item/watertank/Destroy()
- if(on)
- remove_noz()
- QDEL_NULL(noz)
- return ..()
-
/obj/item/watertank/attack_hand(mob/user)
if(loc == user)
toggle_mister(user)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 121e103b2f41..328b49f4730c 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -29,6 +29,7 @@
/obj/item/fireaxe/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_FORCES_OPEN_DOORS_ITEM, ROUNDSTART_TRAIT)
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = MELEE_ATTACK, _parry_cooldown = (10 / 3) SECONDS, _requires_two_hands = TRUE) // 2.3333 seconds of cooldown for 30% uptime
AddComponent(/datum/component/two_handed, force_unwielded = force_unwielded, force_wielded = force_wielded, icon_wielded = "[base_icon_state]1")
/obj/item/fireaxe/update_icon_state() //Currently only here to fuck with the on-mob icons.
@@ -52,10 +53,6 @@
force_wielded = 23
needs_permit = TRUE
-/obj/item/fireaxe/boneaxe/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/two_handed, force_wielded = force_wielded, icon_wielded = "[base_icon_state]1")
-
/obj/item/fireaxe/energized
desc = "Someone with a love for fire axes decided to turn this one into a high-powered energy weapon. Seems excessive."
force_wielded = 35
@@ -109,7 +106,6 @@
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
var/w_class_on = WEIGHT_CLASS_BULKY
-
armour_penetration_flat = 10
armour_penetration_percentage = 50
origin_tech = "magnets=4;syndicate=5"
@@ -123,8 +119,6 @@
var/blade_color
var/brightness_on = 2
var/colormap = list(red = LIGHT_COLOR_RED, blue = LIGHT_COLOR_LIGHTBLUE, green = LIGHT_COLOR_GREEN, purple = LIGHT_COLOR_PURPLE, rainbow = LIGHT_COLOR_WHITE)
-
-
var/force_unwielded = 3
var/force_wielded = 34
var/wieldsound = 'sound/weapons/saberon.ogg'
@@ -134,7 +128,7 @@
. = ..()
if(!blade_color)
blade_color = pick("red", "blue", "green", "purple")
- AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS) // 0.3333 seconds of cooldown for 75% uptime
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS, _requires_two_hands = TRUE) // 0.3333 seconds of cooldown for 75% uptime
AddComponent(/datum/component/two_handed, force_wielded = force_wielded, force_unwielded = force_unwielded, wieldsound = wieldsound, unwieldsound = unwieldsound, wield_callback = CALLBACK(src, PROC_REF(on_wield)), unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), only_sharp_when_wielded = TRUE)
/obj/item/dualsaber/update_icon_state()
@@ -261,6 +255,7 @@
/obj/item/spear/Initialize(mapload)
. = ..()
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = MELEE_ATTACK, _parry_cooldown = (10 / 3) SECONDS, _requires_two_hands = TRUE) // 2.3333 seconds of cooldown for 30% uptime
AddComponent(/datum/component/two_handed, \
force_wielded = force_wielded, \
force_unwielded = force_unwielded, \
@@ -566,6 +561,7 @@
/obj/item/singularityhammer/Initialize(mapload)
. = ..()
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS, _requires_two_hands = TRUE) // 0.3333 seconds of cooldown for 75% uptime
AddComponent(/datum/component/two_handed, \
force_wielded = 40, \
force_unwielded = force, \
@@ -635,6 +631,7 @@
/obj/item/mjollnir/Initialize(mapload)
. = ..()
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS, _requires_two_hands = TRUE) // 0.3333 seconds of cooldown for 75% uptime
AddComponent(/datum/component/two_handed, \
force_wielded = 25, \
force_unwielded = force, \
@@ -685,6 +682,7 @@
/obj/item/knighthammer/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS, _requires_two_hands = TRUE) // 0.3333 seconds of cooldown for 75% uptime
AddComponent(/datum/component/two_handed, \
force_wielded = 30, \
force_unwielded = force, \
@@ -889,6 +887,7 @@
/obj/item/push_broom/Initialize(mapload)
. = ..()
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (7 / 5) SECONDS, _requires_two_hands = TRUE)
AddComponent(/datum/component/two_handed, \
force_wielded = 12, \
force_unwielded = force, \
@@ -959,7 +958,7 @@
/obj/item/push_broom/traitor/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS) // 0.3333 seconds of cooldown for 75% uptime
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS, _requires_two_hands = TRUE) // 0.3333 seconds of cooldown for 75% uptime
// parent component handles this
AddComponent(/datum/component/two_handed, force_wielded = 25, force_unwielded = force)
@@ -1047,7 +1046,7 @@
. = ..()
ADD_TRAIT(src, TRAIT_FORCES_OPEN_DOORS_ITEM, ROUNDSTART_TRAIT)
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT) //so it can't be dusted by the SM
- AddComponent(/datum/component/parry, _stamina_constant = 0, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES)
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (4 / 3) SECONDS, _requires_two_hands = TRUE) // 0.3333 seconds of cooldown for 75% uptime
AddComponent(/datum/component/two_handed, force_wielded = 40, force_unwielded = force, icon_wielded = "[base_icon_state]1")
/obj/item/supermatter_halberd/update_icon_state()
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 77878294b5ab..6848767af43f 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -67,19 +67,12 @@
// In the far future no checks are made in an overriding Topic() beyond if(..()) return
// Instead any such checks are made in CanUseTopic()
if(ui_status(usr, state, href_list) == UI_INTERACTIVE)
- CouldUseTopic(usr)
+ var/atom/host = ui_host()
+ host.add_fingerprint(usr)
return FALSE
- CouldNotUseTopic(usr)
return TRUE
-/obj/proc/CouldUseTopic(mob/user)
- var/atom/host = ui_host()
- host.add_fingerprint(user)
-
-/obj/proc/CouldNotUseTopic(mob/user)
- return
-
/obj/Destroy()
if(!ismachinery(src))
if(!speed_process)
@@ -89,15 +82,6 @@
STOP_PROCESSING(SSfastprocess, src)
return ..()
-//user: The mob that is suiciding
-//damagetype: The type of damage the item will inflict on the user
-//BRUTELOSS = 1
-//FIRELOSS = 2
-//TOXLOSS = 4
-//OXYLOSS = 8
-//SHAME = 16
-//OBLITERATION = 32
-
//Output a creative message and then return the damagetype done
/obj/proc/suicide_act(mob/user)
return FALSE
@@ -164,12 +148,8 @@
/mob/proc/unset_machine()
if(machine)
UnregisterSignal(machine, COMSIG_PARENT_QDELETING)
- machine.on_unset_machine(src)
machine = null
-//called when the user unsets the machine.
-/atom/movable/proc/on_unset_machine(mob/user)
- return
/mob/proc/set_machine(obj/O)
if(src.machine)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm
index 3c6dfde5b389..93d37f5f1fa6 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm
@@ -14,7 +14,7 @@
new /obj/item/storage/bag/garment/captain(src)
new /obj/item/cartridge/captain(src)
new /obj/item/radio/headset/heads/captain/alt(src)
- new /obj/item/storage/belt/rapier(src)
+ new /obj/item/storage/belt/sheath/rapier(src)
new /obj/item/gun/energy/gun(src)
new /obj/item/flash(src)
new /obj/item/door_remote/captain(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 9d177ce35766..d2c956ece582 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -82,10 +82,6 @@
/obj/structure/closet/statue/open()
return
-/obj/structure/closet/statue/open()
- return
-
-
/obj/structure/closet/statue/close()
return
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index d2d6a69bca23..bf36273ab16b 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -77,10 +77,8 @@
continue
if(ismob(O) && !HAS_TRAIT(O, TRAIT_CONTORTED_BODY))
continue
- if(istype(O, /obj/structure/bed)) //This is only necessary because of rollerbeds and swivel chairs.
- var/obj/structure/bed/B = O
- if(B.has_buckled_mobs())
- continue
+ if(O.has_buckled_mobs()) // You can't put mobs into crates, so naturally if a mob is attached to something, it shouldn't be able to go in the crate
+ continue
O.forceMove(src)
itemcount++
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 9eacf37ffb57..3753873db312 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -29,17 +29,16 @@
. = ..()
. += "You can Alt-Click [src] to activate it. "
-/obj/structure/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/wrench))
- var/obj/structure/chair/C = new /obj/structure/chair(loc)
- playsound(loc, W.usesound, 50, 1)
- C.dir = dir
- part.loc = loc
- part.master = null
- part = null
- qdel(src)
- return
- return ..()
+/obj/structure/chair/e_chair/wrench_act(mob/user, obj/item/I)
+ . = TRUE
+ var/obj/structure/chair/C = new /obj/structure/chair(loc)
+ I.play_tool_sound(src, 50)
+ C.dir = dir
+ part.loc = loc
+ part.master = null
+ part = null
+ visible_message("[user] deconstructs [src]. ")
+ qdel(src)
/obj/structure/chair/e_chair/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm
index 7a605c46ff6c..37b69f505c16 100644
--- a/code/game/objects/structures/engicart.dm
+++ b/code/game/objects/structures/engicart.dm
@@ -82,24 +82,35 @@
update_icon(UPDATE_OVERLAYS)
else
to_chat(user, fail_msg)
- else if(istype(I, /obj/item/wrench))
- if(!anchored && !isinspace())
- playsound(src.loc, I.usesound, 50, 1)
- user.visible_message( \
- "[user] tightens \the [src]'s casters.", \
- " You have tightened \the [src]'s casters. ", \
- "You hear ratchet.")
- anchored = TRUE
- else if(anchored)
- playsound(src.loc, I.usesound, 50, 1)
- user.visible_message( \
- "[user] loosens \the [src]'s casters.", \
- " You have loosened \the [src]'s casters. ", \
- "You hear ratchet.")
- anchored = FALSE
else
to_chat(usr, "You cannot interface your modules [src]! ")
+/obj/structure/engineeringcart/tool_act(mob/living/user, obj/item/I, tool_type)
+ if(I.is_robot_module())
+ to_chat(user, "You cannot interface your modules [src]! ")
+ return FALSE
+ return ..()
+
+/obj/structure/engineeringcart/wrench_act(mob/living/user, obj/item/I)
+ if(!anchored && !isinspace())
+ I.play_tool_sound(src, I.tool_volume)
+ user.visible_message(
+ "[user] tightens [src]'s casters.",
+ "You have tightened [src]'s casters. ",
+ "You hear ratchet."
+ )
+ anchored = TRUE
+ else if(anchored)
+ I.play_tool_sound(src, I.tool_volume)
+ user.visible_message(
+ "[user] loosens [src]'s casters.",
+ " You have loosened [src]'s casters. ",
+ "You hear ratchet."
+ )
+ anchored = FALSE
+
+ return TRUE
+
/obj/structure/engineeringcart/attack_hand(mob/user)
var/list/engicart_items = list()
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 47e9c6ffdfd0..effa8969f1c8 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -36,9 +36,6 @@
/obj/structure/flora/tree/dead/Initialize(mapload)
. = ..()
AddComponent(/datum/component/largetransparency, 0, 1, 0, 0)
-
-/obj/structure/flora/tree/dead/Initialize(mapload)
- . = ..()
icon_state = "tree_[rand(1, 6)]"
/obj/structure/flora/tree/palm
diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm
index f816563f3a93..8dd48277574e 100644
--- a/code/game/objects/structures/fluff.dm
+++ b/code/game/objects/structures/fluff.dm
@@ -10,17 +10,18 @@
opacity = FALSE
var/deconstructible = TRUE
-/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params)
- if(istype(I, /obj/item/wrench) && deconstructible)
- user.visible_message("[user] starts disassembling [src]... ", "You start disassembling [src]... ")
- playsound(loc, I.usesound, 50, 1)
- if(do_after(user, 5 SECONDS * I.toolspeed, target = src))
- user.visible_message("[user] disassembles [src]! ", "You break down [src] into scrap metal. ")
- playsound(user, 'sound/items/deconstruct.ogg', 50, 1)
- new /obj/item/stack/sheet/metal(drop_location())
- qdel(src)
- return
- return ..()
+/obj/structure/fluff/wrench_act(mob/living/user, obj/item/I)
+ if(!deconstructible)
+ return FALSE
+
+ user.visible_message("[user] starts disassembling [src]... ", "You start disassembling [src]... ")
+ playsound(loc, I.usesound, 50, TRUE)
+ if(I.use_tool(src, user, 5 SECONDS, 0, 50))
+ user.visible_message("[user] disassembles [src]! ", "You break down [src] into scrap metal. ")
+ playsound(user, 'sound/items/deconstruct.ogg', 50, TRUE)
+ new /obj/item/stack/sheet/metal(drop_location())
+ qdel(src)
+ return TRUE
/// Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated.
/obj/structure/fluff/empty_terrarium
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index f32aa68482e3..210dbed1bb91 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -25,7 +25,10 @@
. = ..()
. += "A powered wire underneath this will cause the grille to shock anyone who touches the grill. An electric shock may leap forth if the grill is damaged. "
. += "Use wirecutters to deconstruct this item. "
-
+ if(anchored)
+ . += "It's secured in place with screws . The rods look like they could be cut through. "
+ else
+ . += "The anchoring screws are unscrewed . The rods look like they could be cut through. "
/obj/structure/grille/fence
var/width = 3
@@ -64,13 +67,6 @@
return
icon_state = "grille50_[rand(0,3)]"
-/obj/structure/grille/examine(mob/user)
- . = ..()
- if(anchored)
- . += "It's secured in place with screws . The rods look like they could be cut through. "
- if(!anchored)
- . += "The anchoring screws are unscrewed . The rods look like they could be cut through. "
-
/obj/structure/grille/Bumped(atom/user)
if(ismob(user))
if(!(shockcooldown <= world.time))
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index 676c3f7786f1..3061e4dbbac3 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -32,6 +32,11 @@
LAZYINITLIST(buckled_mobs)
return ..()
+/obj/structure/guillotine/Destroy()
+ if(has_buckled_mobs())
+ unbuckle_all_mobs()
+ return ..()
+
/obj/structure/guillotine/examine(mob/user)
. = ..()
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 6ed12684b0dc..e95355137716 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -10,17 +10,19 @@
anchored = TRUE
max_integrity = 200
+/obj/structure/kitchenspike_frame/wrench_act(mob/living/user, obj/item/I)
+ if(!I.tool_use_check(user, 0))
+ return FALSE
+ TOOL_ATTEMPT_DISMANTLE_MESSAGE
+ if(!I.use_tool(src, user, 4 SECONDS, volume = I.tool_volume))
+ return TRUE
+ TOOL_DISMANTLE_SUCCESS_MESSAGE
+ deconstruct(TRUE)
+ return TRUE
+
/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
- if(istype(I, /obj/item/wrench))
- if(!I.tool_use_check(user, 0))
- return
- TOOL_ATTEMPT_DISMANTLE_MESSAGE
- if(!I.use_tool(src, user, 40, volume = I.tool_volume))
- return
- TOOL_DISMANTLE_SUCCESS_MESSAGE
- deconstruct(TRUE)
- else if(istype(I, /obj/item/stack/rods))
+ if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
if(R.get_amount() >= 4)
R.use(4)
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 82218998c4d3..bebc1428a254 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -24,9 +24,6 @@
/obj/structure/lattice/examine(mob/user)
. = ..()
. += deconstruction_hints(user)
-
-/obj/structure/lattice/examine(mob/user)
- . = ..()
. += "Add a floor tile to build a floor on top of the lattice. "
/obj/structure/lattice/proc/deconstruction_hints(mob/user)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 5e9d5804a4da..82fcc89c9992 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -464,14 +464,33 @@
lefthand_file = 'icons/mob/inhands/chairs_lefthand.dmi'
righthand_file = 'icons/mob/inhands/chairs_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
- force = 8
+ force = 6
throwforce = 10
throw_range = 3
hitsound = 'sound/items/trayhit1.ogg'
hit_reaction_chance = 50
materials = list(MAT_METAL = 2000)
- var/break_chance = 5 //Likely hood of smashing the chair.
+ /// Likelihood of smashing the chair.
+ var/break_chance = 5
+ /// Used for when placing a chair back down.
var/obj/structure/chair/origin_type = /obj/structure/chair
+ // Twohanded Component Vars
+ /// force applied with one hand.
+ var/force_unwielded = 6
+ /// force applied with two hands.
+ var/force_wielded = 8
+ // Parry Component Vars when wielding
+ /// the flat amount of damage the shield user takes per non-perfect parry
+ var/stamina_constant = 2
+ /// stamina_coefficient * damage * time_since_time_parried = stamina damage taken per non perfect parry
+ var/stamina_coefficient = 1.5
+ /// the attack types that are considered for parrying
+ var/parryable_attack_types = NON_PROJECTILE_ATTACKS
+
+/obj/item/chair/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, force_unwielded = force_unwielded, force_wielded = force_wielded)
+ AddComponent(/datum/component/parry, _stamina_constant = stamina_constant, _stamina_coefficient = stamina_coefficient, _parryable_attack_types = parryable_attack_types)
/obj/item/chair/light
icon_state = "chair_greyscale_toppled"
@@ -482,11 +501,13 @@
icon = 'icons/obj/chairs.dmi'
icon_state = "stool_toppled"
item_state = "stool"
- force = 10
- throwforce = 10
+ force = 8
+ throwforce = 8
w_class = WEIGHT_CLASS_HUGE
origin_type = /obj/structure/chair/stool
break_chance = 0 //It's too sturdy.
+ force_unwielded = 8
+ force_wielded = 10
/obj/item/chair/stool/bar
name = "bar stool"
@@ -501,8 +522,10 @@
item_state = "stool_bamboo"
origin_type = /obj/structure/chair/stool/bamboo
-/obj/item/chair/attack_self(mob/user)
- plant(user)
+/obj/item/chair/AltClick(mob/user)
+ . = ..()
+ if(Adjacent(user))
+ plant(user)
/obj/item/chair/proc/plant(mob/user)
if(QDELETED(src))
@@ -560,6 +583,10 @@
return
..()
+/obj/item/chair/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to place it down. "
+
/obj/item/chair/wood
name = "wooden chair"
icon_state = "wooden_chair_toppled"
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index d38485b0c9b4..b5e20b076c96 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -103,17 +103,19 @@
if(istype(I, /obj/item/tank/internals/plasma))
try_insert_tank(user, stored_plasma_tanks, I)
return
-
- if(istype(I, /obj/item/wrench))
- if(anchored)
- to_chat(user, "You lean down and unwrench [src]. ")
- anchored = FALSE
- else
- to_chat(user, "You wrench [src] into place. ")
- anchored = TRUE
- return
return ..()
+/obj/structure/dispenser/wrench_act(mob/living/user, obj/item/I)
+ I.play_tool_sound(src, 50)
+ if(anchored)
+ to_chat(user, "You lean down and unwrench [src]. ")
+ anchored = FALSE
+ else
+ to_chat(user, "You wrench [src] into place. ")
+ anchored = TRUE
+ return TRUE
+
+
/// Called when the user clicks on the oxygen or plasma tank UI buttons, and tries to withdraw a tank.
/obj/structure/dispenser/proc/try_remove_tank(mob/living/user, list/tank_list)
if(!LAZYLEN(tank_list))
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 45809087903c..cebaa4e5dc02 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -79,7 +79,7 @@
to_chat(user, "You uninstall [src]. ")
qdel(src)
-/obj/structure/transit_tube/wrench_act(mob/living/user, obj/item/I)
+/obj/structure/transit_tube_pod/wrench_act(mob/living/user, obj/item/I)
. = TRUE
to_chat(user, "You must uninstall [src] before disassembling it! ")
diff --git a/code/game/turfs/simulated/floor/asteroid_floors.dm b/code/game/turfs/simulated/floor/asteroid_floors.dm
index ed49637dec62..b898f7b74850 100644
--- a/code/game/turfs/simulated/floor/asteroid_floors.dm
+++ b/code/game/turfs/simulated/floor/asteroid_floors.dm
@@ -153,6 +153,10 @@
atmos_environment = ENVIRONMENT_LAVALAND
baseturf = /turf/simulated/floor/lava/mapping_lava
+/turf/simulated/floor/plating/asteroid/basalt/lowpressure
+ oxygen = 8
+ nitrogen = 14
+
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface_hard
oxygen = LAVALAND_OXYGEN
nitrogen = LAVALAND_NITROGEN
diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm
index 5d827fb5e398..61be5dd4a8b3 100644
--- a/code/game/turfs/simulated/floor/chasm.dm
+++ b/code/game/turfs/simulated/floor/chasm.dm
@@ -35,7 +35,8 @@
/obj/effect/dummy/slaughter, //no bloodcrawlers into chasms.
/obj/effect/dummy/spell_jaunt, //No jaunters into chasms either.
/mob/living/simple_animal/hostile/megafauna, //failsafe
- /obj/tgvehicle/scooter/skateboard/hoverboard
+ /obj/tgvehicle/scooter/skateboard/hoverboard,
+ /obj/machinery/light // lights hanging on walls shouldn't get chasm'd
))
var/drop_x = 1
var/drop_y = 1
@@ -294,3 +295,51 @@
drop_y = y
var/list/target_z = levels_by_trait(SPAWN_RUINS)
drop_z = pick(target_z)
+
+/turf/simulated/floor/chasm/space_ruin
+ /// Used to keep count of how many times we checked if our target turf was valid.
+ var/times_turfs_checked = 0
+ /// List of all eligible Z levels.
+ var/list/target_z
+ /// Target turf that atoms will be teleported to.
+ var/turf/T
+
+/turf/simulated/floor/chasm/space_ruin/proc/pick_a_turf(atom/movable/AM)
+ if(times_turfs_checked <= 2)
+ target_z = levels_by_trait(SPAWN_RUINS)
+ target_z -= AM.z // excluding the one atom was already in from possible z levels
+ T = locate(rand(TRANSITIONEDGE + 1, world.maxx - TRANSITIONEDGE - 1), rand(TRANSITIONEDGE + 1, world.maxy - TRANSITIONEDGE - 1), pick(target_z))
+ check_turf(AM)
+ else
+ // If we still fail to pick a random valid turf after 2 attempts, we just send the atom to somewhere valid for certain
+ T = locate(TRANSITIONEDGE + 1, TRANSITIONEDGE + 1, pick(target_z))
+
+
+/turf/simulated/floor/chasm/space_ruin/proc/check_turf(atom/movable/AM)
+ times_turfs_checked++
+ if(istype(get_area(T), /area/space))
+ return
+ else
+ pick_a_turf(AM)
+
+/turf/simulated/floor/chasm/space_ruin/drop(atom/movable/AM)
+ //Make sure the item is still there after our sleep
+ if(!AM || QDELETED(AM))
+ return
+ falling_atoms[AM] = TRUE
+ pick_a_turf(AM)
+ if(T)
+ AM.visible_message("[AM] falls into [src]! ", "GAH! Ah... where are you? ")
+ T.visible_message("[AM] falls from above! ")
+ AM.forceMove(T)
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L.Weaken(10 SECONDS)
+ L.adjustBruteLoss(30)
+ times_turfs_checked = 0 // We successfully teleported the atom, let's reset the count
+ falling_atoms -= AM
+
+/turf/simulated/floor/chasm/space_ruin/airless
+ oxygen = 0
+ nitrogen = 0
+ temperature = TCMB
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 88037967d20e..0dbe2dc77e3a 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -140,7 +140,7 @@
/turf/simulated/floor/noslip/get_broken_states()
return list("noslip-damaged1", "noslip-damaged2", "noslip-damaged3")
-/turf/simulated/floor/plating/asteroid/snow/get_burnt_states()
+/turf/simulated/floor/noslip/get_burnt_states()
return list("noslip-scorched1", "noslip-scorched2")
/turf/simulated/floor/noslip/MakeSlippery()
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 6e34004f1ea1..b2c1e3608302 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -208,17 +208,16 @@
acidpwr = min(acidpwr, 50) //we reduce the power so reinf floor never get melted.
. = ..()
-/turf/simulated/floor/engine/attackby(obj/item/C as obj, mob/user as mob, params)
- if(!C || !user)
+/turf/simulated/floor/engine/wrench_act(mob/living/user, obj/item/wrench/W)
+ if(!user)
return
- if(istype(C, /obj/item/wrench))
- to_chat(user, "You begin removing rods... ")
- playsound(src, C.usesound, 80, 1)
- if(do_after(user, 30 * C.toolspeed, target = src))
- if(!istype(src, /turf/simulated/floor/engine))
- return
- new /obj/item/stack/rods(src, 2)
- ChangeTurf(/turf/simulated/floor/plating)
+ . = TRUE
+ to_chat(user, "You begin removing rods... ")
+ if(W.use_tool(src, user, 3 SECONDS, 0, 50))
+ if(!istype(src, /turf/simulated/floor/engine))
+ return
+ new /obj/item/stack/rods(src, 2)
+ ChangeTurf(/turf/simulated/floor/plating)
/turf/simulated/floor/engine/ex_act(severity)
switch(severity)
diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm
index cfdbe60c94d5..e2f7bc5e67ad 100644
--- a/code/game/turfs/space/transit.dm
+++ b/code/game/turfs/space/transit.dm
@@ -146,10 +146,6 @@
/turf/space/transit/rpd_act()
return
-//Overwrite because we dont want people building rods in space.
-/turf/space/transit/attackby()
- return
-
/turf/space/transit/Initialize(mapload)
. = ..()
update_icon(UPDATE_ICON_STATE)
diff --git a/code/modules/admin/misc_admin_procs.dm b/code/modules/admin/misc_admin_procs.dm
index 887dbe86b4b9..fbbfd4166ba9 100644
--- a/code/modules/admin/misc_admin_procs.dm
+++ b/code/modules/admin/misc_admin_procs.dm
@@ -202,7 +202,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
Make Robot |
Make Alien |
Make Slime |
- Make Superhero
+ Make Superhero |
"}
//Simple Animals
diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm
index 5eedd9f28119..4fc6b4aade37 100644
--- a/code/modules/admin/verbs/tripAI.dm
+++ b/code/modules/admin/verbs/tripAI.dm
@@ -11,12 +11,16 @@
if(!job)
to_chat(usr, "Unable to locate the AI job")
return
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_TRIAI))
+ to_chat(usr, "The triple AI station trait is now enabled. This trait can be disabled in the Modify Station Traits menu. ")
+ return
+
if(SSticker.triai)
- SSticker.triai = 0
+ SSticker.triai = FALSE
to_chat(usr, "Only one AI will be spawned at round start.")
message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start. ", 1)
else
- SSticker.triai = 1
+ SSticker.triai = TRUE
to_chat(usr, "There will be an AI Triumvirate at round start.")
message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start. ", 1)
return
diff --git a/code/modules/antagonists/zombie/zombie_spells.dm b/code/modules/antagonists/zombie/zombie_spells.dm
index 5d30f5a6d27b..19b5cc56124c 100644
--- a/code/modules/antagonists/zombie/zombie_spells.dm
+++ b/code/modules/antagonists/zombie/zombie_spells.dm
@@ -42,7 +42,7 @@
/obj/item/zombie_claw
name = "claws"
- desc = "Claws extending from your rotting hands, perfect for ripping open brain_holders for brains."
+ desc = "Claws extending from your rotting hands, perfect for ripping skulls open for the brains inside."
icon = 'icons/effects/vampire_effects.dmi'
icon_state = "vamp_claws"
lefthand_file = 'icons/mob/inhands/weapons_lefthand.dmi'
diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm
index 7e9481bceee8..c8d14c026339 100644
--- a/code/modules/arcade/prize_datums.dm
+++ b/code/modules/arcade/prize_datums.dm
@@ -111,6 +111,12 @@ GLOBAL_DATUM_INIT(global_prizes, /datum/prizes, new())
typepath = /obj/item/ammo_box/caps
cost = 30
+/datum/prize_item/firecracker
+ name = "Firecracker Grenade"
+ desc = "A loud and obnoxious firecracker. Hold away from ears and small children."
+ typepath = /obj/item/grenade/firecracker
+ cost = 50
+
/datum/prize_item/wallet
name = "Cheap Wallet"
desc = "A cheap and big enough for standard issue ID cards."
diff --git a/code/modules/assembly/assembly_holder.dm b/code/modules/assembly/assembly_holder.dm
index 02a526da94e2..2b6db0074412 100644
--- a/code/modules/assembly/assembly_holder.dm
+++ b/code/modules/assembly/assembly_holder.dm
@@ -13,12 +13,6 @@
var/obj/item/assembly/a_left = null
var/obj/item/assembly/a_right = null
-/obj/item/assembly_holder/proc/attach(obj/item/D, obj/item/D2, mob/user)
- return
-
-/obj/item/assembly_holder/proc/process_activation(obj/item/D)
- return
-
/obj/item/assembly_holder/IsAssemblyHolder()
return TRUE
@@ -29,7 +23,7 @@
a_right.holder = null
return ..()
-/obj/item/assembly_holder/attach(obj/item/D, obj/item/D2, mob/user)
+/obj/item/assembly_holder/proc/attach(obj/item/D, obj/item/D2, mob/user)
if(!D || !D2)
return FALSE
if(!isassembly(D) || !isassembly(D2))
@@ -191,7 +185,7 @@
qdel(src)
-/obj/item/assembly_holder/process_activation(obj/D, normal = TRUE, special = TRUE)
+/obj/item/assembly_holder/proc/process_activation(obj/D, normal = TRUE, special = TRUE)
if(!D)
return FALSE
if(normal && a_right && a_left)
diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm
index 6d128f01ce6d..32e0ae23cbbb 100644
--- a/code/modules/assembly/health.dm
+++ b/code/modules/assembly/health.dm
@@ -59,10 +59,6 @@
..()
ADD_TRAIT(user, TRAIT_CAN_VIEW_HEALTH, "HEALTH[UID()]")
-/obj/item/gps/dropped(mob/user, silent)
- REMOVE_TRAIT(user, TRAIT_CAN_VIEW_HEALTH, "HEALTH[UID()]")
- return ..()
-
/obj/item/assembly/health/proc/toggle_scan()
if(!secured)
return FALSE
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index d8d0ca7cbc6f..02a5f9d9739e 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -14,18 +14,20 @@
QDEL_NULL(part2)
return ..()
-/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/wrench) && !status)
- var/turf/T = loc
- if(ismob(T))
- T = T.loc
- part1.loc = T
- part2.loc = T
- part1.master = null
- part2.master = null
- part1 = null
- part2 = null
- qdel(src)
+/obj/item/assembly/shock_kit/wrench_act(mob/living/user, obj/item/I)
+ if(status)
+ return
+ . = TRUE
+ var/turf/T = get_turf(src)
+ part1?.forceMove(T)
+ part2?.forceMove(T)
+ part1?.master = null
+ part2?.master = null
+ part1 = null
+ part2 = null
+ visible_message("[user] disassembles [src]. ")
+ qdel(src)
+ return TRUE
/obj/item/assembly/shock_kit/screwdriver_act(mob/user, obj/item/I)
status = !status
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index ce0a1ed401ea..1363484743c7 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -216,6 +216,9 @@
if(!building)
first_run()
+ if(!master_is_operating())
+ elect_master()
+
/obj/machinery/alarm/Destroy()
SStgui.close_uis(wires)
GLOB.air_alarms -= src
@@ -231,11 +234,6 @@
apply_preset(AALARM_PRESET_HUMAN) // Don't cycle.
GLOB.air_alarm_repository.update_cache(src)
-/obj/machinery/alarm/Initialize(mapload)
- . = ..()
- if(!master_is_operating())
- elect_master()
-
/obj/machinery/alarm/proc/master_is_operating()
if(!alarm_area)
alarm_area = get_area(src)
@@ -656,7 +654,7 @@
/obj/machinery/alarm/ui_data(mob/user)
var/list/data = list()
- data["name"] = sanitize(name)
+ data["name"] = name
data["air"] = ui_air_status()
data["alarmActivated"] = alarmActivated || danger_level == ATMOS_ALARM_DANGER
data["thresholds"] = generate_thresholds_menu()
@@ -696,7 +694,7 @@
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
var/list/vent_info = list()
vent_info["id_tag"] = P.UID()
- vent_info["name"] = sanitize(P.name)
+ vent_info["name"] = P.name
vent_info["power"] = P.on
vent_info["direction"] = P.releasing
vent_info["checks"] = P.pressure_checks
@@ -709,7 +707,7 @@
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
var/list/scrubber_info = list()
scrubber_info["id_tag"] = S.UID()
- scrubber_info["name"] = sanitize(S.name)
+ scrubber_info["name"] = S.name
scrubber_info["power"] = S.on
scrubber_info["scrubbing"] = S.scrubbing
scrubber_info["widenet"] = S.widenet
@@ -724,11 +722,11 @@
/obj/machinery/alarm/proc/get_console_data(mob/user)
var/list/data = list()
- data["name"] = sanitize(name)
+ data["name"] = name
data["ref"] = "\ref[src]"
data["danger"] = max(danger_level, alarm_area.atmosalm)
var/area/A = get_area(src)
- data["area"] = sanitize(A.name)
+ data["area"] = A.name
var/turf/T = get_turf(src)
data["x"] = T.x
data["y"] = T.y
diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm
index 2ce2e9343d89..a42659c1302c 100644
--- a/code/modules/atmospherics/machinery/atmospherics.dm
+++ b/code/modules/atmospherics/machinery/atmospherics.dm
@@ -50,6 +50,9 @@ Pipelines + Other Objects -> Pipe network
/// ID for automatic linkage of stuff. This is used to assist in connections at mapload. Dont try use it for other stuff
var/autolink_id = null
+ /// Whether or not this can be unwrenched while on.
+ var/can_unwrench_while_on = TRUE
+
/obj/machinery/atmospherics/Initialize(mapload)
. = ..()
@@ -189,63 +192,73 @@ Pipelines + Other Objects -> Pipe network
if(P)
P.other_atmosmch -= src
+/obj/machinery/atmospherics/wrench_act(mob/living/user, obj/item/wrench/W)
+ var/turf/T = get_turf(src)
+ if(!can_unwrench_while_on && !(stat & NOPOWER) && on)
+ to_chat(user, "You cannot unwrench this [name], turn it off first. ")
+ return TRUE
+ if(!can_unwrench)
+ return FALSE
+ . = TRUE
+ if(level == 1 && T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe))
+ to_chat(user, "You can't interact with something that's under the floor! ")
+ return
+ if(level == 1 && isturf(T) && T.intact)
+ to_chat(user, "You must remove the plating first. ")
+ return
+ var/datum/gas_mixture/int_air = return_obj_air()
+ var/datum/gas_mixture/env_air = T.get_readonly_air()
+ add_fingerprint(user)
+
+
+ var/unsafe_wrenching = FALSE
+ var/safefromgusts = FALSE
+ var/I = int_air ? int_air.return_pressure() : 0
+ var/E = env_air ? env_air.return_pressure() : 0
+ var/internal_pressure = I - E
+
+ to_chat(user, "You begin to unfasten [src]... ")
+
+ if(HAS_TRAIT(user, TRAIT_MAGPULSE))
+ safefromgusts = TRUE
+
+ if(internal_pressure > 2 * ONE_ATMOSPHERE)
+ unsafe_wrenching = TRUE //Oh dear oh dear
+ if(internal_pressure > 1750 && !safefromgusts) // 1750 is the pressure limit to do 60 damage when thrown
+ to_chat(user, "As you struggle to unwrench [src] a huge gust of gas blows in your face! This seems like a terrible idea! ")
+ else
+ to_chat(user, "As you begin unwrenching [src] a gust of air blows in your face... maybe you should reconsider? ")
+
+ if(!W.use_tool(src, user, 4 SECONDS, volume = 50) || QDELETED(src))
+ return
+
+ safefromgusts = FALSE
+
+ if(HAS_TRAIT(user, TRAIT_MAGPULSE))
+ safefromgusts = TRUE
+
+ user.visible_message(
+ "[user] unfastens [src]. ",
+ "You have unfastened [src]. ",
+ "You hear ratcheting. "
+ )
+ investigate_log("was REMOVED by [key_name(usr)]", "atmos")
+
+ //You unwrenched a pipe full of pressure? let's splat you into the wall silly.
+ if(unsafe_wrenching)
+ if(safefromgusts)
+ to_chat(user, "Your magboots cling to the floor as a great burst of wind bellows against you. ")
+ else
+ unsafe_pressure_release(user,internal_pressure)
+ deconstruct(TRUE)
+
//(De)construction
/obj/machinery/atmospherics/attackby(obj/item/W, mob/user)
var/turf/T = get_turf(src)
- if(can_unwrench && istype(W, /obj/item/wrench))
- if(level == 1 && T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe))
- to_chat(user, "You can't interact with something that's under the floor! ")
- return
- if(level == 1 && isturf(T) && T.intact)
- to_chat(user, "You must remove the plating first. ")
- return
- var/datum/gas_mixture/int_air = return_obj_air()
- var/datum/gas_mixture/env_air = T.get_readonly_air()
- add_fingerprint(user)
-
- var/unsafe_wrenching = FALSE
- var/safefromgusts = FALSE
- var/I = int_air ? int_air.return_pressure() : 0
- var/E = env_air ? env_air.return_pressure() : 0
- var/internal_pressure = I - E
-
- playsound(loc, W.usesound, 50, 1)
- to_chat(user, "You begin to unfasten \the [src]... ")
-
- if(HAS_TRAIT(user, TRAIT_MAGPULSE))
- safefromgusts = TRUE
-
- if(internal_pressure > 2 * ONE_ATMOSPHERE)
- unsafe_wrenching = TRUE //Oh dear oh dear
- if(internal_pressure > 1750 && !safefromgusts) // 1750 is the pressure limit to do 60 damage when thrown
- to_chat(user, "As you struggle to unwrench [src] a huge gust of gas blows in your face! This seems like a terrible idea! ")
- else
- to_chat(user, "As you begin unwrenching [src] a gust of air blows in your face... maybe you should reconsider? ")
-
- if(do_after(user, 40 * W.toolspeed, target = src) && !QDELETED(src))
- safefromgusts = FALSE
-
- if(HAS_TRAIT(user, TRAIT_MAGPULSE))
- safefromgusts = TRUE
-
- user.visible_message( \
- "[user] unfastens [src]. ", \
- "You have unfastened [src]. ", \
- "You hear ratcheting. ")
- investigate_log("was REMOVED by [key_name(usr)]", "atmos")
-
- //You unwrenched a pipe full of pressure? let's splat you into the wall silly.
- if(unsafe_wrenching)
- if(safefromgusts)
- to_chat(user, "Your magboots cling to the floor as a great burst of wind bellows against you. ")
- else
- unsafe_pressure_release(user,internal_pressure)
- deconstruct(TRUE)
- else
- if(T.transparent_floor)
- to_chat(user, "You can't interact with something that's under the floor! ")
- return TRUE
- return ..()
+ if(T.transparent_floor)
+ to_chat(user, "You can't interact with something that's under the floor! ")
+ return TRUE
+ return ..()
//Called when an atmospherics object is unwrenched while having a large pressure difference
//with it's locs air contents.
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 8ec612546e96..d372c47af00d 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -8,12 +8,13 @@
desc = "A one-way air valve that does not require power"
can_unwrench = TRUE
+ can_unwrench_while_on = FALSE
target_pressure = ONE_ATMOSPHERE
var/id = null
-/obj/machinery/atmospherics/binary/volume_pump/can_be_pulled(user, grab_state, force, show_message)
+/obj/machinery/atmospherics/binary/passive_gate/can_be_pulled(user, grab_state, force, show_message)
return FALSE
/obj/machinery/atmospherics/binary/passive_gate/CtrlClick(mob/living/user)
@@ -126,11 +127,3 @@
. = TRUE
if(.)
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
-
-/obj/machinery/atmospherics/binary/passive_gate/attackby(obj/item/W, mob/user, params)
- if(!istype(W, /obj/item/wrench))
- return ..()
- if(on)
- to_chat(user, "You cannot unwrench this [src], turn it off first. ")
- return 1
- return ..()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 86f63455d990..25c0758b0ae2 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -13,13 +13,13 @@ Thus, the two variables affect pump operation are set in New():
*/
/obj/machinery/atmospherics/binary/pump
+ name = "gas pump"
+ desc = "A pump."
icon = 'icons/atmos/pump.dmi'
icon_state = "map_off"
- name = "gas pump"
- desc = "A pump"
-
can_unwrench = TRUE
+ can_unwrench_while_on = FALSE
target_pressure = ONE_ATMOSPHERE
@@ -160,10 +160,5 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/binary/pump/attackby(obj/item/W, mob/user, params)
if(is_pen(W))
rename_interactive(user, W)
- return
- else if(!istype(W, /obj/item/wrench))
- return ..()
- if(!(stat & NOPOWER) && on)
- to_chat(user, "You cannot unwrench this [src], turn it off first. ")
- return 1
+ return TRUE
return ..()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index daa791d502c9..1690df3deffe 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -15,9 +15,6 @@
/obj/machinery/atmospherics/binary/valve/examine(mob/user)
. = ..()
. += "It is currently [open ? "open" : "closed"]."
-
-/obj/machinery/atmospherics/binary/valve/examine(mob/user)
- . = ..()
. += "Click this to turn the valve. If red, the pipes on each end are separated. Otherwise, they are connected. "
/obj/machinery/atmospherics/binary/valve/open
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index cce6166a2232..cdea20e78b14 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -20,6 +20,7 @@ Thus, the two variables affect pump operation are set in New():
desc = "A volumetric pump"
can_unwrench = TRUE
+ can_unwrench_while_on = FALSE
var/transfer_rate = 200
@@ -155,10 +156,5 @@ Thus, the two variables affect pump operation are set in New():
/obj/machinery/atmospherics/binary/volume_pump/attackby(obj/item/W, mob/user, params)
if(is_pen(W))
rename_interactive(user, W)
- return
- else if(!istype(W, /obj/item/wrench))
- return ..()
- if(!(stat & NOPOWER) && on)
- to_chat(user, "You cannot unwrench this [src], turn it off first. ")
- return 1
+ return TRUE
return ..()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index e884e77593cf..e6631a395b76 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -108,10 +108,10 @@
..()
if(A == beaker)
beaker = null
- updateUsrDialog()
+ SStgui.update_uis(src)
if(A == occupant)
occupant = null
- updateUsrDialog()
+ SStgui.update_uis(src)
update_icon()
/obj/machinery/atmospherics/unary/cryo_cell/on_deconstruction()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
index d320f0fb4f5c..9329f4a46a06 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
@@ -10,6 +10,7 @@ GLOBAL_LIST_EMPTY(air_injectors)
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF //really helpful in building gas chambers for xenomorphs
can_unwrench = TRUE
+ can_unwrench_while_on = TRUE
name = "air injector"
desc = "Has a valve and pump attached to it."
@@ -78,10 +79,3 @@ GLOBAL_LIST_EMPTY(air_injectors)
var/obj/item/multitool/M = I
M.buffer_uid = UID()
to_chat(user, "You save [src] into [M]'s buffer ")
-
-/obj/machinery/atmospherics/unary/outlet_injector/attackby(obj/item/W, mob/user)
- if(iswrench(W))
- if(!(stat & NOPOWER) && on)
- to_chat(user, "You cannot unwrench this [src], turn if off first. ")
- return TRUE
- return ..()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm
index c3cfc1990b32..ed2179aef1f7 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm
@@ -32,11 +32,10 @@
return 0
parent.update = 1
-/obj/machinery/atmospherics/unary/portables_connector/attackby(obj/item/W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/wrench))
- if(connected_device)
- to_chat(user, "You cannot unwrench this [src], detach [connected_device] first. ")
- return 1
+/obj/machinery/atmospherics/unary/portables_connector/wrench_act(mob/living/user, obj/item/wrench/W)
+ if(connected_device)
+ to_chat(user, "You cannot unwrench this [name], detach [connected_device] first. ")
+ return TRUE
return ..()
/obj/machinery/atmospherics/unary/portables_connector/portableConnectorReturnAir()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 22893029b46e..731d9c8ccbac 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -43,6 +43,10 @@
/obj/machinery/atmospherics/unary/thermomachine/examine(mob/user)
. = ..()
. += "Cools or heats the gas of the connected pipenet, uses a large amount of electricity while activated. "
+ . += "The thermostat is set to [target_temperature]K ([(T0C - target_temperature) * -1]C). "
+ if(in_range(user, src) || isobserver(user))
+ . += "The status display reads: Efficiency [(heat_capacity / 5000) * 100]% . "
+ . += "Temperature range [min_temperature]K - [max_temperature]K ([(T0C - min_temperature) * -1]C - [(T0C-max_temperature) * -1]C) . "
/obj/machinery/atmospherics/unary/thermomachine/proc/swap_function()
cooling = !cooling
@@ -84,14 +88,6 @@
else
icon_state = icon_state_off
-/obj/machinery/atmospherics/unary/thermomachine/examine(mob/user)
- . = ..()
- . += "The thermostat is set to [target_temperature]K ([(T0C - target_temperature) * -1]C). "
- if(in_range(user, src) || isobserver(user))
- . += "The status display reads: Efficiency [(heat_capacity / 5000) * 100]% . "
- . += "Temperature range [min_temperature]K - [max_temperature]K ([(T0C - min_temperature) * -1]C - [(T0C-max_temperature) * -1]C) . "
-
-
/obj/machinery/atmospherics/unary/thermomachine/process_atmos()
if(!on)
return
@@ -135,11 +131,11 @@
/obj/machinery/atmospherics/unary/thermomachine/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
- return
if(!panel_open)
to_chat(user, "Open the maintenance panel first. ")
return
+ if(!I.use_tool(src, user, 0, volume = I.tool_volume))
+ return
var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH)
var/selected = tgui_input_list(user, "Select a direction for the connector.", "Connector Direction", choices)
if(!selected)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index 2050b13f5816..6bf7a368259d 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -40,6 +40,8 @@
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
. = ..()
. += "This pumps the contents of the attached pipenet out into the atmosphere. Can be controlled from an Air Alarm. "
+ if(welded)
+ . += "It seems welded shut."
/obj/machinery/atmospherics/unary/vent_pump/on
on = TRUE
@@ -193,11 +195,6 @@
to_chat(user, "The vent is welded.")
return TRUE
- if(iswrench(W))
- if(!(stat & NOPOWER) && on)
- to_chat(user, "You cannot unwrench this [src], turn it off first. ")
- return TRUE
-
return ..()
/obj/machinery/atmospherics/unary/vent_pump/multitool_act(mob/living/user, obj/item/I)
@@ -243,11 +240,6 @@
continue
W.forceMove(get_turf(src))
-/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
- . = ..()
- if(welded)
- . += "It seems welded shut."
-
/obj/machinery/atmospherics/unary/vent_pump/power_change()
if(!..())
return
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index 5d470e590a6e..6184c5e4ba08 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -9,6 +9,7 @@
power_state = ACTIVE_POWER_USE
idle_power_consumption = 10
active_power_consumption = 60
+ can_unwrench_while_on = FALSE
can_unwrench = TRUE
@@ -44,6 +45,8 @@
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
. = ..()
. += "This filters the atmosphere of harmful gas. Filtered gas goes straight into the connected pipenet. Controlled by an Air Alarm. "
+ if(welded)
+ . += "It seems welded shut."
/obj/machinery/atmospherics/unary/vent_scrubber/Destroy()
if(initial_loc)
@@ -51,11 +54,6 @@
return ..()
-/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
- . = ..()
- if(welded)
- . += "It seems welded shut."
-
/obj/machinery/atmospherics/unary/vent_scrubber/update_overlays()
. = ..()
plane = FLOOR_PLANE
@@ -218,14 +216,6 @@
pipe_image.plane = ABOVE_HUD_PLANE
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE)
-/obj/machinery/atmospherics/unary/vent_scrubber/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- if(!(stat & NOPOWER) && on)
- to_chat(user, "You cannot unwrench this [src], turn it off first. ")
- return TRUE
-
- return ..()
-
/obj/machinery/atmospherics/unary/vent_scrubber/welder_act(mob/user, obj/item/I)
. = TRUE
if(!I.tool_use_check(user, 0))
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 032ffa60068e..0f6deb15046b 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -83,17 +83,19 @@ GLOBAL_LIST_EMPTY(gas_meters)
return ..()
-/obj/machinery/atmospherics/meter/attackby(obj/item/W as obj, mob/user as mob, params)
- if(!iswrench(W))
- return ..()
- playsound(loc, W.usesound, 50, 1)
- to_chat(user, "You begin to unfasten \the [src]... ")
- if(do_after(user, 40 * W.toolspeed, target = src))
- user.visible_message( \
- "[user] unfastens \the [src].", \
- "You have unfastened \the [src]. ", \
- "You hear ratchet.")
- deconstruct(TRUE)
+/obj/machinery/atmospherics/meter/wrench_act(mob/living/user, obj/item/wrench/W)
+ // don't call parent here, we're kind of different
+ to_chat(user, "You begin to unfasten [src]... ")
+ if(!W.use_tool(src, user, volume = W.tool_volume))
+ return
+
+ user.visible_message(
+ "[user] unfastens [src].",
+ "You have unfastened [src]. ",
+ "You hear ratchet."
+ )
+ deconstruct(TRUE)
+ return TRUE
/obj/machinery/atmospherics/meter/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
diff --git a/code/modules/awaymissions/mission_code/ruins/deepstorage.dm b/code/modules/awaymissions/mission_code/ruins/deepstorage.dm
new file mode 100644
index 000000000000..8dc9de2314bb
--- /dev/null
+++ b/code/modules/awaymissions/mission_code/ruins/deepstorage.dm
@@ -0,0 +1,381 @@
+#define DS_BOSS_STORAGE "DS_BossStorage"
+#define DS_ENGINEERING "DS_Engineering"
+/mob/living/simple_animal/hostile/megafauna/fleshling
+ name = "Fleshling"
+ desc = "A sinister mass of flesh molded into a grotesque shape. Nothing about it looks like the result of natural evolution. It looks agitated and clearly doesn't want you to leave here alive."
+ health = 1000
+ icon = 'icons/mob/fleshling.dmi'
+ icon_state = "fleshling"
+ icon_living = "fleshling"
+ icon_dead = ""
+ speed = 5
+ move_to_delay = 4
+ ranged = TRUE
+ pixel_x = -16
+ attack_sound = 'sound/misc/demon_attack1.ogg'
+ melee_damage_lower = 20
+ melee_damage_upper = 20
+ wander = TRUE
+ move_force = MOVE_FORCE_VERY_STRONG
+ move_resist = MOVE_FORCE_VERY_STRONG
+ pull_force = MOVE_FORCE_VERY_STRONG
+ sentience_type = SENTIENCE_BOSS
+ a_intent = INTENT_HARM
+ deathmessage = "collapses into a pile of gibs. From the looks of it this is the deadest it can get... "
+ del_on_death = TRUE
+ death_sound = 'sound/misc/demon_dies.ogg'
+ attack_sound = 'sound/misc/demon_attack1.ogg'
+
+ /// Is the boss charging right now?
+ var/charging = FALSE
+ /// Did our boss die?
+ var/boss_killed = FALSE
+
+// Below here is copy-pasted from /asteroid/big_legion
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/AttackingTarget()
+ if(!isliving(target))
+ return ..()
+ var/mob/living/L = target
+ var/datum/status_effect/stacking/ground_pound/G = L.has_status_effect(STATUS_EFFECT_GROUNDPOUND)
+ if(!G)
+ L.apply_status_effect(STATUS_EFFECT_GROUNDPOUND, 1, src)
+ return ..()
+ if(G.add_stacks(stacks_added = 1, attacker = src))
+ return ..()
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/proc/throw_mobs()
+ playsound(src, 'sound/effects/meteorimpact.ogg', 200, TRUE, 2, TRUE)
+ for(var/mob/living/L in range(3, src))
+ if(faction_check(faction, L.faction, FALSE))
+ continue
+
+ L.visible_message("[L] was thrown by [src]! ",
+ "You feel a strong force throwing you! ",
+ "You hear a thud. ")
+ var/atom/throw_target = get_edge_target_turf(L, get_dir(src, get_step_away(L, src)))
+ L.throw_at(throw_target, 4, 4)
+ var/limb_to_hit = L.get_organ(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
+ var/armor = L.run_armor_check(def_zone = limb_to_hit, attack_flag = MELEE, armour_penetration_percentage = 50)
+ L.apply_damage(40, BRUTE, limb_to_hit, armor)
+
+// Below here is edited from Bubblegum
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/proc/charge(atom/chargeat = target, delay = 5, chargepast = 2)
+ if(!chargeat)
+ return
+ if(chargeat.z != z)
+ return
+ var/chargeturf = get_turf(chargeat)
+ if(!chargeturf)
+ return
+ var/dir = get_dir(src, chargeturf)
+ var/turf/T = get_ranged_target_turf(chargeturf, dir, chargepast)
+ if(!T)
+ return
+ new /obj/effect/temp_visual/dragon_swoop/bubblegum(T)
+ charging = TRUE
+ walk(src, 0)
+ setDir(dir)
+ var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(loc,src)
+ animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 3)
+ SLEEP_CHECK_DEATH(delay)
+ var/movespeed = 0.8
+ walk_towards(src, T, movespeed)
+ SLEEP_CHECK_DEATH(get_dist(src, T) * movespeed)
+ walk(src, 0)
+ charging = FALSE
+ loot = list(/obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic)
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/ListTargetsLazy()
+ return ListTargets()
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/Aggro()
+ . = ..()
+ if(target)
+ playsound(loc, 'sound/voice/zombie_scream.ogg', 70, TRUE)
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/OpenFire()
+ if(charging)
+ return
+ charge(delay = 3)
+ SetRecoveryTime(15)
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/Moved(atom/OldLoc, Dir, Forced = FALSE)
+ if(Dir)
+ new /obj/effect/decal/cleanable/blood/bubblegum(loc)
+ playsound(src, 'sound/effects/meteorimpact.ogg', 25, TRUE, 2, TRUE)
+ return ..()
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/Bump(atom/A, yes)
+ if(charging && yes)
+ if(isliving(A))
+ var/mob/living/L = A
+ L.visible_message("[src] slams into [L]! ", "[src] tramples you into the ground! ")
+ forceMove(get_turf(L))
+ L.apply_damage(istype(src, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination) ? 15 : 30, BRUTE)
+ playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, TRUE)
+ shake_camera(L, 4, 3)
+ shake_camera(src, 2, 3)
+ ..()
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/Destroy()
+ handle_dying()
+ return ..()
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/proc/handle_dying()
+ if(!boss_killed)
+ boss_killed = TRUE
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/death(gibbed)
+ if(can_die() && !boss_killed)
+ unlock_blast_doors(DS_BOSS_STORAGE)
+ src.visible_message("Somewhere, a heavy door has opened. ")
+ return ..(gibbed)
+
+/mob/living/simple_animal/hostile/megafauna/fleshling/proc/unlock_blast_doors(target_id_tag)
+ for(var/obj/machinery/door/poddoor/P in GLOB.airlocks)
+ if(P.density && P.id_tag == target_id_tag && P.z == z && !P.operating)
+ P.open()
+
+/mob/living/simple_animal/hostile/spaceinfected
+ name = "Infected"
+ desc = "A reanimated corpse, wandering around aimlessly."
+ icon = 'icons/mob/simple_human.dmi'
+ icon_state = "spaceinfected"
+ icon_living = "spaceinfected"
+ mob_biotypes = MOB_ORGANIC | MOB_HUMANOID
+ speak_chance = 1
+ turns_per_move = 3
+ death_sound = 'sound/effects/bodyfall1.ogg'
+ speed = 0
+ maxHealth = 150
+ health = 150
+ melee_damage_lower = 20
+ melee_damage_upper = 20
+ attacktext = "hits"
+ attack_sound = 'sound/effects/blobattack.ogg'
+ del_on_death = TRUE
+ sentience_type = SENTIENCE_OTHER
+ footstep_type = FOOTSTEP_MOB_SHOE
+ 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
+ loot = list(/obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic)
+
+/mob/living/simple_animal/hostile/spaceinfected/ListTargetsLazy()
+ return ListTargets()
+
+/mob/living/simple_animal/hostile/spaceinfected/Aggro()
+ . = ..()
+ if(target)
+ playsound(loc, 'sound/voice/zombie_scream.ogg', 70, TRUE)
+
+/mob/living/simple_animal/hostile/spaceinfected/Move(atom/newloc)
+ if(ischasm(newloc)) // as this place filled with chasms, they shouldn't randomly fall in while wandering around
+ return FALSE
+ return ..()
+
+/mob/living/simple_animal/hostile/spaceinfected/default
+
+/mob/living/simple_animal/hostile/spaceinfected/default/Initialize(mapload)
+ . = ..()
+ var/loot_num = rand(1, 100)
+ switch(loot_num)
+ if(1 to 10)
+ loot = list(/obj/item/salvage/ruin/nanotrasen,
+ /obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic)
+
+ if(11 to 30)
+ loot = list(/obj/item/salvage/ruin/brick,
+ /obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic)
+
+/mob/living/simple_animal/hostile/spaceinfected/gateopener // When this mob dies it'll trigger a poddoor open
+ /// Is our mob dead?
+ var/has_died = FALSE
+ loot = list(/obj/item/gun/energy/laser,
+ /obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic) // First weapon this ruin provides
+
+/mob/living/simple_animal/hostile/spaceinfected/gateopener/Destroy()
+ handle_dying()
+ return ..()
+
+/mob/living/simple_animal/hostile/spaceinfected/gateopener/proc/handle_dying()
+ if(!has_died)
+ has_died = TRUE
+
+/mob/living/simple_animal/hostile/spaceinfected/gateopener/death(gibbed)
+ if(can_die() && !has_died)
+ unlock_blast_doors(DS_ENGINEERING)
+ src.visible_message("Somewhere, a heavy door has opened. ")
+ return ..(gibbed)
+
+/mob/living/simple_animal/hostile/spaceinfected/gateopener/proc/unlock_blast_doors(target_id_tag)
+ for(var/obj/machinery/door/poddoor/P in GLOB.airlocks)
+ if(P.density && P.id_tag == target_id_tag && P.z == z && !P.operating)
+ P.open()
+
+/mob/living/simple_animal/hostile/spaceinfected/default/ranged
+ desc = "A reanimated corpse. This one is keeping its distance from you."
+ icon_state = "spaceinfected_ranged"
+ ranged = TRUE
+ retreat_distance = 5
+ minimum_distance = 5
+ projectiletype = /obj/item/projectile/neurotox
+ projectilesound = 'sound/weapons/pierce.ogg'
+
+// Below here is ruin specific code
+
+/obj/structure/blob/normal/deepstorage
+ name = "flesh wall"
+ desc = "What even..."
+ color = rgb(80, 39, 39)
+
+/obj/machinery/deepstorage_teleporter
+ name = "package teleporter"
+ desc = "It's tuned to maintain one-way teleportation."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "controller"
+ density = TRUE
+ anchored = TRUE
+
+ /// How many portals are present right now?
+ var/active_portals = 0
+ /// Does user have the TGUI menu open right now?
+ var/menu_open = FALSE
+
+/obj/machinery/deepstorage_teleporter/attack_hand(mob/user)
+ if(active_portals != 0 || menu_open)
+ return
+ menu_open = TRUE
+ var/list/boss_warning = list("Proceed" = TRUE)
+ var/final_decision = tgui_input_list(user, "Just a hunch but wherever this machine may lead, it won't be somewhere pleasant. Are you sure about this?", "Make your decision", boss_warning)
+ if(!final_decision)
+ to_chat(user, "The teleporter machine remains untouched. ")
+ menu_open = FALSE
+ return
+
+ new /obj/effect/portal/advanced/deepstorage(locate(x, y + 1, z), locate(x + 3, y- 6, z), src, 200)
+ playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE)
+ active_portals++
+ addtimer(CALLBACK(src, PROC_REF(cooldown_passed)), 20 SECONDS)
+ menu_open = FALSE
+
+// This proc is called when portal disappears after a while, so users can interact with teleporter again
+/obj/machinery/deepstorage_teleporter/proc/cooldown_passed()
+ active_portals--
+
+/obj/effect/portal/advanced/deepstorage
+ name = "portal"
+ desc = "Good luck."
+
+// paper stuff & lore
+
+/obj/item/paper/fluff/ruins/deepstorage/log1
+ name = "a note"
+ info = {"As per administration's request, I will be keeping the auxiliary power room locked from now on.
+
+ If you need in for whatever reason, find me in the western area of the cave tunnels."}
+
+/obj/item/paper/fluff/ruins/deepstorage/log2
+ name = "to my love"
+ info = {"Everything went batshit insane, at first we all thought it was a terrorist attack or something...
+ All floors were put into lockdown, then shortly after all communication across the facility went black.
+
+ Guards never said what happened but the fear in their eyes told us everything.
+
+ Our colleagues, friends and other folks started arguing, hurting then killing each other in time. Me and four others managed to isolate ourselves in the cafeteria.
+
+ We have enough supplies to last a few weeks here, should be enough until reinforcements arrive, right?
+
+ If it won't, then god help us... I can't wait to see you again.
+
+ Sincerely yours..."}
+
+/obj/item/paper/fluff/ruins/deepstorage/log3
+ name = "quartermaster's personal log"
+ info = {"(beginning of record...)
+
+ Day 5 since the lockdown, we can't communicate with other floors which is quite a nuisance. We were already behind 13 deliveries.
+ At these very times i miss my time back at-
+
+ (end of record.)
+
+ (beginning of record...)
+
+ Day 5, since the lockdown. More people are getting sick. I heard the body count was so high they had to start cremating them.
+ The fewer bodies, the better.
+
+ (end of record.)
+
+ (beginning of record...)
+
+ Day... 5, since the-. God, I just checked my previous entries and there were like, 14 in total? In so many I start with 'day 5 of this, of that'.
+ Weird part is, I don't recall making any of those records. It must be my insolent staff. If they want a bad review in their employee records,
+ they got it...
+
+ (end of record.) "}
+
+/obj/item/paper/fluff/ruins/deepstorage/log4
+ name = "crematorium report"
+ info = {"We burnt so many... There's no end to this. It's been days and we're still burning them."}
+
+
+/obj/item/paper/fluff/ruins/deepstorage/log5
+ name = "subject: my concerns"
+ info = {"First of all, I appreciate your initiative in cutting off comms, although I'm sure there are some rats listening on the private frequency.
+ Unless you want a riot on your hands, I suggest keeping quiet in there.
+
+ Getting down to business: we have been working on the sample tissues you've been sending non-stop. In my expert opinion, I don't think there's a single
+ bio-abomination we haven't discovered. I've never seen anything like this. It's nothing like a virus or disease you might be familiar with.
+
+ Yes, it's contagious, and I don't think it's limited to physical contact. We have been burning the corpses; there's still more to burn.
+ This will not end well. I advise evacuating workers to a more suitable quarantine zone before things get out of hand."}
+
+/obj/item/paper/fluff/ruins/deepstorage/log6
+ name = "warning"
+ info = {"We sealed that thing in the warehouse. It tore apart half of my squad. We were no match.
+
+ For whatever reason you want to go in, the package teleporter is still functional. Gates will remain sealed as long as that thing is alive so proceed at your own risk."}
+
+/obj/item/paper/fluff/ruins/deepstorage/log7
+ name = "???"
+ info = {"Entry 1 By now it's safe to assume they know we're listening on their frequency. If it weren't for a copy of the manual
+ I laid my hands on, they would've shaken us off already.
+
+ Entry 2 I keep hearing discussions of "resonance" brought up. I don't understand a single thing they're talking
+ about but I know it is connected to what we're going through. Today guards arrested three more workers. They're desperately looking for us.
+ ...
+ Entry 4 Elevators between floors and trams are now shut off, communications across floors followed soon after. Now there is a sickness...
+ I still have two months until my transfer to some other facility in the sector. This too shall pass...
+ ...
+ Entry 9 I no longer can tell where the dream ends and reality begins. Is this real, or still a dream... How many times did I write this? Where are we?
+ This isn't our facility. Who are these people? They're not from our post...
+ ...
+ Entry 13 KICK THEM. KICK THEM WHILE THEY ARE DOWN.
+ "}
+
+/obj/item/paper/fluff/ruins/deepstorage/log8
+ name = "notice"
+ info = {"Until further notice elevators will be out of service. Contact the floor administrator should you require access."}
+
+/obj/item/paper/fluff/ruins/deepstorage/log9
+ name = "attention"
+ info = {"As per administration's order, unauthorized entry to supply storage is forbidden. Make your requests from the guard wing if you have a pending delivery."}
+
+#undef DS_BOSS_STORAGE
+#undef DS_ENGINEERING
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 1f724e7386a3..eb0ce0a7132a 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -227,17 +227,3 @@
/// The current fullscreen state for /client/toggle_fullscreen()
var/fullscreen = FALSE
-
-/client/vv_edit_var(var_name, var_value)
- switch(var_name)
- // I know we will never be in a world where admins are editing client vars to let people bypass TOS
- // But guess what, if I have the ability to overengineer something, I am going to do it
- if("tos_consent")
- return FALSE
- // Dont fuck with this
- if("cui_entries")
- return FALSE
- // or this
- if("jbh")
- return FALSE
- return ..()
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 9234e19c6807..9baed58985b7 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -47,6 +47,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/Destroy()
STOP_PROCESSING(SSobj, src)
QDEL_NULL(soundloop)
+ suit = null
return ..()
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
@@ -181,10 +182,6 @@
QDEL_NULL(jetpack)
return ..()
-/obj/item/clothing/head/helmet/space/hardsuit/Destroy()
- suit = null
- return ..()
-
/obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet()
if(!helmettype)
return
@@ -230,6 +227,8 @@
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
..()
+ if(helmettype && slot != SLOT_HUD_OUTER_SUIT)
+ RemoveHelmet()
if(jetpack)
if(slot == SLOT_HUD_OUTER_SUIT)
for(var/X in jetpack.actions)
@@ -238,6 +237,7 @@
/obj/item/clothing/suit/space/hardsuit/dropped(mob/user)
..()
+ RemoveHelmet()
if(jetpack)
for(var/X in jetpack.actions)
var/datum/action/A = X
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 1cd0e2f1e207..c6b4c1beb536 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -5,13 +5,6 @@
..()
ToggleHelmet()
-/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
- if(!helmettype)
- return
- if(slot != SLOT_HUD_OUTER_SUIT)
- RemoveHelmet()
- ..()
-
/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet()
if(!helmet)
return
@@ -28,10 +21,6 @@
else
helmet.forceMove(src)
-/obj/item/clothing/suit/space/hardsuit/dropped()
- ..()
- RemoveHelmet()
-
/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet()
var/mob/living/carbon/human/H = src.loc
if(!helmettype)
diff --git a/code/modules/events/blob/blob_mobs.dm b/code/modules/events/blob/blob_mobs.dm
index 85f57c126ab8..57d8dc3232b4 100644
--- a/code/modules/events/blob/blob_mobs.dm
+++ b/code/modules/events/blob/blob_mobs.dm
@@ -204,6 +204,8 @@
. = ..()
var/datum/action/innate/communicate_overmind_blob/overmind_chat = new
overmind_chat.Grant(src)
+ if(name == "blobbernaut")
+ name = "blobbernaut ([rand(1, 1000)])"
/datum/action/innate/communicate_overmind_blob
name = "Speak with the overmind"
@@ -228,11 +230,6 @@
adjustFireLoss(0.2)
..()
-/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize(mapload)
- . = ..()
- if(name == "blobbernaut")
- name = "blobbernaut ([rand(1, 1000)])"
-
/mob/living/simple_animal/hostile/blob/blobbernaut/death(gibbed)
// Only execute the below if we successfully died
. = ..()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index bc65ffb4d85b..106fe9c902dd 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -190,7 +190,8 @@ GLOBAL_LIST_EMPTY(event_last_fired)
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 40, list(ASSIGNMENT_SECURITY = 10), is_one_shot = TRUE),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Pulse Demon Infiltration", /datum/event/spawn_pulsedemon, 150, list(ASSIGNMENT_ENGINEER = 10), is_one_shot = TRUE),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 50, list(ASSIGNMENT_MEDICAL = 30), TRUE),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Door Runtime", /datum/event/door_runtime, 50, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_AI = 150), TRUE)
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Door Runtime", /datum/event/door_runtime, 50, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_AI = 150), TRUE),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Tourist Arrivals", /datum/event/tourist_arrivals, 100, list(ASSIGNMENT_SECURITY = 15), TRUE)
)
/datum/event_container/major
diff --git a/code/modules/food_and_drinks/food_base.dm b/code/modules/food_and_drinks/food_base.dm
index 005b1f28a004..9fd4583acd2f 100644
--- a/code/modules/food_and_drinks/food_base.dm
+++ b/code/modules/food_and_drinks/food_base.dm
@@ -319,6 +319,11 @@
to_chat(user, "You cannot slice [src] here! You need a table or at least a tray to do it. ")
return TRUE
var/slices_lost = 0
+ var/initial_volume = 0 // the total some of reagents this food had initially
+ for(var/ingredient in list_reagents)
+ initial_volume += list_reagents[ingredient]
+ // we want to account for how much has been eaten already, reduce slices by how is left vs. how much food we started with
+ slices_num = clamp(slices_num * (reagents.total_volume / initial_volume), 1, slices_num)
if(!inaccurate)
user.visible_message("[user] slices [src]! ",
"You slice [src]! ")
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index a794a6c784a1..199a7add0bcf 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -163,7 +163,11 @@
H.parentdeck = src
H.update_values()
H.update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
- user.visible_message("[user] draws a card. ","You draw a card. ")
+ user.visible_message(
+ "[user] draws a card. ",
+ "You draw a card. ",
+ "You hear a card being drawn. "
+ )
to_chat(user,"It's the [P]. ")
/obj/item/deck/proc/deal_card()
@@ -217,12 +221,19 @@
H.concealed = TRUE
H.update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
if(user == target)
- user.visible_message("[user] deals [dcard] card(s) to [user.p_themselves()]. ")
+ user.visible_message(
+ "[user] deals [dcard] card\s to [user.p_themselves()]. ",
+ "You deal [dcard] card\s to yourself. ",
+ "You hear cards being dealt. "
+ )
else
- user.visible_message("[user] deals [dcard] card(s) to [target]. ")
+ user.visible_message(
+ "[user] deals [dcard] card\s to [target]. ",
+ "You deal [dcard] card\s to [target]. ",
+ "You hear cards being dealt. "
+ )
H.throw_at(get_step(target, target.dir), 3, 1, null)
-
/obj/item/deck/attack_self()
deckshuffle()
@@ -235,7 +246,11 @@
cards = shuffle(cards)
if(user)
- user.visible_message("[user] shuffles [src]. ")
+ user.visible_message(
+ "[user] shuffles [src]. ",
+ "You shuffle [src]. ",
+ "You hear cards being shuffled. "
+ )
playsound(user, 'sound/items/cardshuffle.ogg', 50, TRUE)
cooldown = world.time
@@ -244,6 +259,7 @@
var/mob/M = usr
if(M.incapacitated() || !Adjacent(M))
return
+
if(!ishuman(M))
return
@@ -278,7 +294,11 @@
/obj/item/pack/attack_self(mob/user as mob)
- user.visible_message("[name] rips open [src]! ", "You rip open [src]! ")
+ user.visible_message(
+ "[name] rips open [src]! ",
+ "You rip open [src]! ",
+ "You hear the sound of a packet being ripped open. "
+ )
var/obj/item/cardhand/H = new(get_turf(user))
H.cards += cards
@@ -352,7 +372,11 @@
/obj/item/cardhand/proc/turn_hand(mob/user)
concealed = !concealed
update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
- user.visible_message("[user] [concealed ? "conceals" : "reveals"] their hand. ")
+ user.visible_message(
+ "[user] [concealed ? "conceals" : "reveals"] their hand. ",
+ "You[concealed ? "conceal" : "reveal"] your hand. ",
+ "You hear a hand of cards being flipped over. "
+ )
/obj/item/cardhand/interact(mob/user)
var/dat = "You have: "
@@ -440,7 +464,11 @@
var/datum/playingcard/card = pickablecards[pickedcard]
if(loc != user) // Don't want people teleporting cards
return
- user.visible_message("[user] draws a card from [user.p_their()] hand. ", "You take the [pickedcard] from your hand. ")
+ user.visible_message(
+ "[user] draws a card from [user.p_their()] hand. ",
+ "You take \the [pickedcard] from your hand. ",
+ "You hear a card being drawn. "
+ )
pickedcard = null
var/obj/item/cardhand/H = new(get_turf(src))
@@ -492,7 +520,11 @@
if(length(cards))
update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
if(length(H.cards))
- user.visible_message("[user] plays the [discarding]. ", "You play the [discarding]. ")
+ user.visible_message(
+ "[user] plays \the [discarding]. ",
+ "You play \the [discarding]. ",
+ "You hear a card being played. "
+ )
H.loc = get_step(user, user.dir)
if(!length(cards))
diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm
index eba209dd8922..6f0485d0da3f 100644
--- a/code/modules/games/tarot.dm
+++ b/code/modules/games/tarot.dm
@@ -25,7 +25,11 @@
newcards += P
cards -= P
cards = newcards
- playsound(user, 'sound/items/cardshuffle.ogg', 50, 1)
- user.visible_message("[user] shuffles [src]. ", "You shuffle [src]. ")
+ playsound(user, 'sound/items/cardshuffle.ogg', 50, TRUE)
+ user.visible_message(
+ "[user] shuffles [src]. ",
+ "You shuffle [src]. ",
+ "You hear cards being shuffled. "
+ )
cooldown = world.time
diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm
index 834f58222a43..89757f89d5e3 100644
--- a/code/modules/lighting/lighting_atom.dm
+++ b/code/modules/lighting/lighting_atom.dm
@@ -48,16 +48,6 @@
/atom/proc/extinguish_light(force = FALSE)
return
-// If we have opacity, make sure to tell (potentially) affected light sources.
-/atom/movable/Destroy()
- var/turf/T = loc
- . = ..()
- if(opacity && istype(T))
- var/old_has_opaque_atom = T.has_opaque_atom
- T.recalc_atom_opacity()
- if(old_has_opaque_atom != T.has_opaque_atom)
- T.reconsider_lights()
-
// Should always be used to change the opacity of an atom.
// It notifies (potentially) affected light sources so they can update (if needed).
/atom/proc/set_opacity(new_opacity)
@@ -78,23 +68,6 @@
if(old_has_opaque_atom != T.has_opaque_atom)
T.reconsider_lights()
-/atom/vv_edit_var(var_name, var_value)
- switch(var_name)
- if("light_range")
- set_light(l_range=var_value)
- return TRUE
-
- if("light_power")
- set_light(l_power=var_value)
- return TRUE
-
- if("light_color")
- set_light(l_color=var_value)
- return TRUE
-
- return ..()
-
-
/atom/proc/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE)
return
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 7f50e031d798..0ea3a5eb9137 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -36,7 +36,7 @@
/obj/item/kinetic_crusher/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = MELEE_ATTACK, _parry_cooldown = (10 / 3) SECONDS ) // 2.3333 seconds of cooldown for 30% uptime
+ AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = MELEE_ATTACK, _parry_cooldown = (10 / 3) SECONDS, _requires_two_hands = TRUE) // 2.3333 seconds of cooldown for 30% uptime
AddComponent(/datum/component/two_handed, force_wielded = force_wielded, force_unwielded = force)
/obj/item/kinetic_crusher/Destroy()
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index f6ec847f9239..2cab7e579075 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -201,15 +201,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed/survival_pod,
density = TRUE
pixel_y = -32
-/obj/item/gps/computer/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- playsound(loc, W.usesound, 50, 1)
- user.visible_message("[user] disassembles the gps. ", \
- "You start to disassemble the gps... ", "You hear clanking and banging noises.")
- if(do_after(user, 20 * W.toolspeed, target = src))
- new /obj/item/gps(loc)
- qdel(src)
- return ..()
+/obj/item/gps/computer/wrench_act(mob/living/user, obj/item/I)
+ . = TRUE
+ user.visible_message("[user] starts to disassemble [src]. ", \
+ "You start to disassemble [src]... ", "You hear clanking and banging noises.")
+ if(!I.use_tool(src, user, 2 SECONDS, 0, 50))
+ return
+ user.visible_message("[user] disassembles [src]. ", \
+ "You disassemble [src]. ", "You hear clanking and banging noises.")
+ new /obj/item/gps(loc)
+ qdel(src)
/obj/item/gps/computer/attack_hand(mob/user)
attack_self(user)
@@ -296,14 +297,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed/survival_pod,
new buildstacktype(loc, buildstackamount)
qdel(src)
-/obj/structure/fans/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- playsound(loc, W.usesound, 50, 1)
- user.visible_message("[user] disassembles the fan. ", \
- "You start to disassemble the fan... ", "You hear clanking and banging noises.")
- if(do_after(user, 20 * W.toolspeed, target = src))
- deconstruct()
- return ..()
+/obj/structure/fans/wrench_act(mob/living/user, obj/item/I)
+ . = TRUE
+ user.visible_message("[user] starts to disassemble [src]. ", \
+ "You start to disassemble [src]... ", "You hear clanking and banging noises.")
+ if(!I.use_tool(src, user, 2 SECONDS, volume = 50))
+ return
+ user.visible_message("[user] disassembles [src]. ", \
+ "You disassemble [src]. ", "You hear something fall on the floor.")
+ deconstruct()
/obj/structure/fans/tiny
name = "tiny fan"
@@ -343,15 +345,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed/survival_pod,
layer = MOB_LAYER - 0.2
density = FALSE
-/obj/structure/tubes/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- playsound(loc, W.usesound, 50, 1)
- user.visible_message("[user] disassembles [src]. ", \
- "You start to disassemble [src]... ", "You hear clanking and banging noises.")
- if(do_after(user, 20 * W.toolspeed, target = src))
- new /obj/item/stack/rods(loc)
- qdel(src)
- return ..()
+/obj/structure/tubes/wrench_act(mob/living/user, obj/item/W)
+ . = TRUE
+ user.visible_message("[user] disassembles [src]. ", \
+ "You start to disassemble [src]... ", "You hear clanking and banging noises.")
+ if(!W.use_tool(src, user, 2 SECONDS, volume = 50))
+ return
+ new /obj/item/stack/rods(loc)
+ qdel(src)
/obj/item/fakeartefact
name = "expensive forgery"
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index f5e1a869df43..eaff6e6c647e 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -27,8 +27,6 @@
component_parts += new /obj/item/stack/sheet/glass(null)
RefreshParts()
-/obj/machinery/mineral/equipment_vendor/Initialize(mapload)
- . = ..()
prize_list = list()
prize_list["Gear"] = list(
EQUIPMENT("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
@@ -313,8 +311,6 @@
component_parts += new /obj/item/stack/sheet/glass(null)
RefreshParts()
-/obj/machinery/mineral/equipment_vendor/golem/Initialize()
- . = ..()
desc += "\nIt seems a few selections have been added."
prize_list["Extra"] += list(
EQUIPMENT("Extra ID", /obj/item/card/id/golem, 250),
@@ -344,8 +340,6 @@
component_parts += new /obj/item/stack/sheet/glass(null)
RefreshParts()
-/obj/machinery/mineral/equipment_vendor/labor/Initialize()
- . = ..()
prize_list = list()
prize_list["Scum"] += list(
EQUIPMENT("Trauma Kit", /obj/item/stack/medical/bruise_pack/advanced, 150),
@@ -388,8 +382,6 @@
component_parts += new /obj/item/stack/sheet/glass(null)
RefreshParts()
-/obj/machinery/mineral/equipment_vendor/explorer/Initialize(mapload)
- . = ..()
prize_list = list()
prize_list["Equipment"] = list(
EQUIPMENT("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm
index 79cbaac0bb19..1d0a465f01b4 100644
--- a/code/modules/mob/dead/observer/orbit.dm
+++ b/code/modules/mob/dead/observer/orbit.dm
@@ -48,6 +48,7 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new)
var/list/ghosts = list()
var/list/misc = list()
var/list/npcs = list()
+ var/list/tourist = list()
var/length_of_ghosts = length(get_observers())
var/list/pois = getpois(mobs_only = FALSE, skip_mindless = FALSE)
@@ -91,6 +92,8 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new)
var/datum/mind/mind = M.mind
if(mind.special_role in list(SPECIAL_ROLE_ERT, SPECIAL_ROLE_DEATHSQUAD, SPECIAL_ROLE_SYNDICATE_DEATHSQUAD))
response_teams += list(serialized)
+ if(mind.special_role == SPECIAL_ROLE_TOURIST)
+ tourist += list(serialized)
if(user.antagHUD)
/*
@@ -166,6 +169,7 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new)
data["antagonists"] = antagonists
data["highlights"] = highlights
data["response_teams"] = response_teams
+ data["tourist"] = tourist
data["alive"] = alive
data["ssd"] = ssd
data["dead"] = dead
diff --git a/code/modules/mob/living/carbon/alien/alien_base.dm b/code/modules/mob/living/carbon/alien/alien_base.dm
index b9de6c57733e..2786d40ae5aa 100644
--- a/code/modules/mob/living/carbon/alien/alien_base.dm
+++ b/code/modules/mob/living/carbon/alien/alien_base.dm
@@ -164,13 +164,6 @@
return threatcount
-/mob/living/carbon/alien/death(gibbed)
- . = ..()
- if(!.)
- return
-
- deathrattle()
-
/mob/living/carbon/alien/proc/deathrattle()
var/alien_message = deathrattle_message()
for(var/mob/living/carbon/alien/M in GLOB.player_list)
diff --git a/code/modules/mob/living/carbon/alien/alien_death.dm b/code/modules/mob/living/carbon/alien/alien_death.dm
index d6bf44791b16..58be5381c597 100644
--- a/code/modules/mob/living/carbon/alien/alien_death.dm
+++ b/code/modules/mob/living/carbon/alien/alien_death.dm
@@ -72,3 +72,5 @@
playsound(loc, death_sound, 80, TRUE, 1)
visible_message("[src] [death_message]")
update_icons()
+
+ deathrattle()
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 7ad0690d6d7d..a2db48cfdcf7 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -498,13 +498,13 @@ emp_act
send_item_attack_message(I, user, hit_area)
+ if(!I.force)
+ return FALSE //item force is zero
+
var/armor = run_armor_check(affecting, MELEE, "Your armour has protected your [hit_area]. ", "Your armour has softened hit to your [hit_area]. ", armour_penetration_flat = I.armour_penetration_flat, armour_penetration_percentage = I.armour_penetration_percentage)
if(armor == INFINITY)
return FALSE
- if(!I.force)
- return TRUE // item force is zero, it deals no damage, we do not apply damage
-
var/weapon_sharp = I.sharp
// do not roll for random blunt if the target mob is dead for the ease of decaps
if(stat != DEAD)
@@ -570,7 +570,6 @@ emp_act
update_inv_w_uniform()
dna.species.spec_attacked_by(I, user, affecting, user.a_intent, src)
- return TRUE
//this proc handles being hit by a thrown atom
/mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index dd035515c2e2..f9d728abfab8 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -4,28 +4,6 @@
. += GLOB.configuration.movement.human_delay
. += dna.species.movement_delay(src)
-/mob/living/carbon/human/Process_Spacemove(movement_dir = 0)
-
- if(..())
- return TRUE
-
- //Do we have a working jetpack?
- var/obj/item/tank/jetpack/thrust
- if(istype(back, /obj/item/tank/jetpack))
- thrust = back
- else if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
- var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
- thrust = C.jetpack
- else if(ismodcontrol(back))
- var/obj/item/mod/control/C = back
- thrust = locate(/obj/item/mod/module/jetpack) in C
- if(thrust)
- if((movement_dir || thrust.stabilizers) && thrust.allow_thrust(0.01, src))
- return TRUE
- if(dna.species.spec_Process_Spacemove(src))
- return TRUE
- return FALSE
-
/mob/living/carbon/human/mob_has_gravity()
. = ..()
if(!.)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index c9cf61fc8a4a..c986e24f10d7 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1086,8 +1086,6 @@
GLOB.dead_mob_list += src
. = ..()
switch(var_name)
- if("maxHealth")
- updatehealth()
if("resize")
update_transform()
if("lighting_alpha")
@@ -1095,6 +1093,10 @@
if("advanced_bullet_dodge_chance")
UnregisterSignal(src, COMSIG_ATOM_PREHIT)
RegisterSignal(src, COMSIG_ATOM_PREHIT, PROC_REF(advanced_bullet_dodge))
+ if("maxHealth")
+ updatehealth("var edit")
+ if("resize")
+ update_transform()
/mob/living/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, dodgeable, block_movement)
stop_pulling()
diff --git a/code/modules/mob/living/living_life.dm b/code/modules/mob/living/living_life.dm
index 55d40f5d536c..e5cde5004aad 100644
--- a/code/modules/mob/living/living_life.dm
+++ b/code/modules/mob/living/living_life.dm
@@ -95,9 +95,6 @@
if(forced_look)
setDir()
- if(machine)
- machine.check_eye(src)
-
if(stat != DEAD)
return TRUE
diff --git a/code/modules/mob/living/living_update_status.dm b/code/modules/mob/living/living_update_status.dm
index 5f729221cf5c..8ffe9b213c74 100644
--- a/code/modules/mob/living/living_update_status.dm
+++ b/code/modules/mob/living/living_update_status.dm
@@ -89,11 +89,3 @@
/mob/living/proc/update_stamina()
return
-
-/mob/living/vv_edit_var(var_name, var_value)
- . = ..()
- switch(var_name)
- if("maxHealth")
- updatehealth("var edit")
- if("resize")
- update_transform()
diff --git a/code/modules/mob/living/silicon/ai/ai_life.dm b/code/modules/mob/living/silicon/ai/ai_life.dm
index cacd568f6aa4..32ea44829902 100644
--- a/code/modules/mob/living/silicon/ai/ai_life.dm
+++ b/code/modules/mob/living/silicon/ai/ai_life.dm
@@ -22,8 +22,9 @@
if(!eyeobj || QDELETED(eyeobj) || !eyeobj.loc)
view_core()
- if(machine)
- machine.check_eye(src)
+ // Do holopad AI checks
+ if(istype(machine, /obj/machinery/hologram))
+ check_holopad_eye()
if(malfhack && malfhack.aidisabled)
to_chat(src, "ERROR: APC access disabled, hack attempt canceled. ")
diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm
index 965062ff0381..119d0fd7d0fb 100644
--- a/code/modules/mob/living/silicon/ai/ai_mob.dm
+++ b/code/modules/mob/living/silicon/ai/ai_mob.dm
@@ -662,7 +662,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
ai_announcement()
-/mob/living/silicon/ai/check_eye(mob/user)
+/mob/living/silicon/ai/proc/check_holopad_eye(mob/user)
if(!current)
return null
user.reset_perspective(current)
@@ -1247,27 +1247,22 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
C.Togglelight(1)
lit_cameras |= C
-
-/mob/living/silicon/ai/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- if(anchored)
- user.visible_message("[user] начинает откручивать [src] от пола... ")
- if(!do_after(user, 40 * W.toolspeed, target = src))
- user.visible_message("[user] решает не откручивать [src]. ")
- return
- user.visible_message(" [user] закончил открутку [src]! ")
- anchored = FALSE
- return
- else
- user.visible_message("[user] начинает прикручивть [src] к полу... ")
- if(!do_after(user, 40 * W.toolspeed, target = src))
- user.visible_message("[user] решает не закручивать [src]. ")
- return
- user.visible_message("[user] закончил закручивать [src]! ")
- anchored = TRUE
+/mob/living/silicon/ai/wrench_act(mob/living/user, obj/item/I)
+ . = TRUE
+ if(anchored)
+ user.visible_message("[user] начинает откручивать [src] от пола... ")
+ if(I.use_tool(src, user, 4 SECONDS, 0, 50))
+ user.visible_message("[user] решает не откручивать [src]. ")
return
- else
- return ..()
+ user.visible_message("[user] закончил открутку [src]! ")
+ anchored = FALSE
+ return
+ user.visible_message("[user] начинает прикручивать [src] к полу... ")
+ if(!I.use_tool(src, user, 4 SECONDS, 0, 50))
+ user.visible_message("[user] решает не закручивать [src]. ")
+ return FALSE
+ user.visible_message("[user] закончил закручивать [src]! ")
+ anchored = TRUE
/mob/living/silicon/ai/welder_act()
return
@@ -1333,15 +1328,6 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
/mob/living/silicon/ai/can_buckle()
return FALSE
-/mob/living/silicon/ai/switch_to_camera(obj/machinery/camera/C)
- if(!C.can_use() || !is_in_chassis())
- return FALSE
-
- eyeobj.setLoc(get_turf(C))
- client.eye = eyeobj
- return TRUE
-
-
/mob/living/silicon/ai/proc/can_see(atom/A)
if(isturf(loc)) //AI in core, check if on cameras
//get_turf_pixel() is because APCs in maint aren't actually in view of the inner camera
diff --git a/code/modules/mob/living/silicon/robot/robot_laws.dm b/code/modules/mob/living/silicon/robot/robot_laws.dm
index 7dfb82c861fc..c8a1ae9a12e3 100644
--- a/code/modules/mob/living/silicon/robot/robot_laws.dm
+++ b/code/modules/mob/living/silicon/robot/robot_laws.dm
@@ -68,6 +68,8 @@
/mob/living/silicon/robot/set_zeroth_law(law, law_borg)
if(mmi && mmi.syndiemmi)
return FALSE
+ if(tracking_entities)
+ to_chat(src, "Internal camera is currently being accessed. ")
..()
/mob/living/silicon/robot/clear_zeroth_law()
diff --git a/code/modules/mob/living/silicon/robot/syndicate_robot.dm b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
index 47f25fa6dbf3..17801c1a2e3b 100644
--- a/code/modules/mob/living/silicon/robot/syndicate_robot.dm
+++ b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
@@ -136,8 +136,3 @@
if(cham_proj)
cham_proj.disrupt(src)
..()
-
-/mob/living/silicon/robot/syndicate/saboteur/attackby()
- if(cham_proj)
- cham_proj.disrupt(src)
- ..()
diff --git a/code/modules/mob/living/silicon/silicon_death.dm b/code/modules/mob/living/silicon/silicon_death.dm
index f750829e1fba..a829d5e944e8 100644
--- a/code/modules/mob/living/silicon/silicon_death.dm
+++ b/code/modules/mob/living/silicon/silicon_death.dm
@@ -46,3 +46,5 @@
if(. && !gibbed)
if(death_sound)
playsound(get_turf(src), death_sound, 200, 1)
+ if(gibbed)
+ drop_hat()
diff --git a/code/modules/mob/living/silicon/silicon_laws.dm b/code/modules/mob/living/silicon/silicon_laws.dm
index d8659cea92e6..fbe928b94a95 100644
--- a/code/modules/mob/living/silicon/silicon_laws.dm
+++ b/code/modules/mob/living/silicon/silicon_laws.dm
@@ -14,11 +14,6 @@
if(!isnull(usr) && law)
log_and_message_admins("has given [src] the zeroth laws: [law]/[law_borg ? law_borg : "N/A"]")
-/mob/living/silicon/robot/set_zeroth_law(law, law_borg)
- ..()
- if(tracking_entities)
- to_chat(src, "Internal camera is currently being accessed. ")
-
/mob/living/silicon/proc/add_ion_law(law)
throw_alert("newlaw", /atom/movable/screen/alert/newlaw)
laws_sanity_check()
diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm
index 5ef235c00b05..34dde783afe5 100644
--- a/code/modules/mob/living/silicon/silicon_mob.dm
+++ b/code/modules/mob/living/silicon/silicon_mob.dm
@@ -589,11 +589,6 @@
hat_alpha = null
hat_color = null
-/mob/living/silicon/death(gibbed)
- if(gibbed)
- drop_hat()
- . = ..()
-
/mob/living/silicon/examine(mob/user)
. = ..()
if(silicon_hat)
diff --git a/code/modules/mob/living/simple_animal/bot/bot_construction.dm b/code/modules/mob/living/simple_animal/bot/bot_construction.dm
index 79cd8ab61e75..d73819b64759 100644
--- a/code/modules/mob/living/simple_animal/bot/bot_construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot_construction.dm
@@ -505,7 +505,7 @@
//General Griefsky
- else if(istype(I, /obj/item/wrench) && build_step == 3)
+ else if(iswrench(I) && build_step == 3)
var/obj/item/griefsky_assembly/A = new /obj/item/griefsky_assembly(get_turf(src))
user.put_in_hands(A)
to_chat(user, "You adjust the arm slots for extra weapons! ")
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index f0ab0f285bd9..f01dcf6f015e 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -202,6 +202,24 @@
set_weapon()
/mob/living/simple_animal/bot/ed209/bullet_act(obj/item/projectile/Proj)
+ if(!disabled)
+ var/lasertag_check = FALSE
+ if(lasercolor == "b")
+ if(istype(Proj, /obj/item/projectile/beam/lasertag/redtag))
+ lasertag_check = TRUE
+
+ else if(lasercolor == "r")
+ if(istype(Proj, /obj/item/projectile/beam/lasertag/bluetag))
+ lasertag_check = TRUE
+
+ if(lasertag_check)
+ icon_state = "[lasercolor]ed2090"
+ disabled = TRUE
+ walk_to(src, 0)
+ target = null
+ addtimer(CALLBACK(src, PROC_REF(unset_disabled)), 10 SECONDS)
+ return TRUE
+
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
if(!Proj.nodamage && Proj.damage < src.health)
@@ -498,32 +516,6 @@
target = toarrest
mode = BOT_HUNT
-
-/mob/living/simple_animal/bot/ed209/bullet_act(obj/item/projectile/Proj)
- if(!disabled)
- var/lasertag_check = 0
- if(lasercolor == "b")
- if(istype(Proj, /obj/item/projectile/beam/lasertag/redtag))
- lasertag_check++
-
- else if(lasercolor == "r")
- if(istype(Proj, /obj/item/projectile/beam/lasertag/bluetag))
- lasertag_check++
-
- if(lasertag_check)
- icon_state = "[lasercolor]ed2090"
- disabled = TRUE
- walk_to(src, 0)
- target = null
- addtimer(CALLBACK(src, PROC_REF(unset_disabled)), 10 SECONDS)
- return TRUE
-
- else
- ..(Proj)
-
- else
- ..(Proj)
-
/mob/living/simple_animal/bot/ed209/proc/unset_disabled()
disabled = FALSE
icon_state = "[lasercolor]ed2091"
diff --git a/code/modules/mob/living/simple_animal/bot/griefsky.dm b/code/modules/mob/living/simple_animal/bot/griefsky.dm
index 369ee5089a01..5d4f8d95b006 100644
--- a/code/modules/mob/living/simple_animal/bot/griefsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/griefsky.dm
@@ -207,18 +207,7 @@
//this section is blocking attack
-/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/item/projectile/P) //so uncivilized
- retaliate(P.firer)
- if((icon_state == spin_icon) && (prob(block_chance_ranged))) //only when the eswords are on
- visible_message("[src] deflects [P] with its energy swords!")
- playsound(loc, 'sound/weapons/blade1.ogg', 50, TRUE, 0)
- else
- ..()
-
-/mob/living/simple_animal/bot/secbot/griefsky/proc/special_retaliate_after_attack(mob/user) //allows special actions to take place after being attacked.
- return
-
-/mob/living/simple_animal/bot/secbot/griefsky/special_retaliate_after_attack(mob/user)
+/mob/living/simple_animal/bot/secbot/griefsky/proc/special_retaliate_after_attack(mob/user)
if(icon_state != spin_icon)
return
if(prob(block_chance_melee))
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index 3afe53239e36..5d28b33ca164 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -120,7 +120,7 @@
name = "Corpse of a Space Wizard"
outfit = /datum/outfit/wizardcorpse
-/obj/effect/mob_spawn/human/corpse/clown/officer/Initialize(mapload)
+/obj/effect/mob_spawn/human/corpse/wizard/officer/Initialize(mapload)
mob_name = "[pick(GLOB.wizard_first)], [pick(GLOB.wizard_second)]"
. = ..()
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 56c38fb4dddd..ad8b1f7becbf 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
@@ -281,13 +281,13 @@ Difficulty: Medium
if(time_until_next_transform <= world.time)
miner_saw.transform_cooldown = 0
miner_saw.transform_weapon(src, TRUE)
- if(!miner_saw.active)
+ if(!HAS_TRAIT(miner_saw, TRAIT_ITEM_ACTIVE))
rapid_melee = 5 // 4 deci cooldown before changes, npcpool subsystem wait is 20, 20/4 = 5
else
rapid_melee = 3 // same thing but halved (slightly rounded up)
transform_stop_attack = TRUE
- icon_state = "miner[miner_saw.active ? "_transformed":""]"
- icon_living = "miner[miner_saw.active ? "_transformed":""]"
+ icon_state = "miner[HAS_TRAIT(miner_saw, TRAIT_ITEM_ACTIVE) ? "_transformed":""]"
+ icon_living = "miner[HAS_TRAIT(miner_saw, TRAIT_ITEM_ACTIVE) ? "_transformed":""]"
time_until_next_transform = world.time + rand(50, 100)
/obj/effect/temp_visual/dir_setting/miner_death
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
index 04670f69d5ab..063ac6b55eaa 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm
@@ -1,21 +1,3 @@
-// This is important
-/mob/living/attack_ghost(mob/dead/observer/user)
- if(prob(80)) return ..()
- var/found = 0
- for(var/mob/living/simple_animal/hostile/retaliate/R in range(4,src))
- if(R.faction != "undead" || R == src || prob(50)) continue
- found = 1
- R.enemies ^= src
- if(src in R.enemies)
- R.visible_message("[R]'s head swivels eerily towards [src].")
- else
- R.visible_message("[R] stares at [src] for a minute before turning away.")
- if(R.target == src)
- R.target = null
- if(!found)
- return ..()
-
-
/mob/living/simple_animal/hostile/retaliate/ghost
icon = 'icons/mob/mob.dmi'
name = "ghost"
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm
index 8cf7af301e17..a5474f7f6e1a 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm
@@ -30,6 +30,8 @@
/obj/structure/spider/spiderling/terror_spiderling/Destroy()
GLOB.ts_spiderling_list -= src
+ for(var/obj/structure/spider/spiderling/terror_spiderling/S in view(7, src))
+ S.immediate_ventcrawl = TRUE
return ..()
/obj/structure/spider/spiderling/terror_spiderling/Bump(obj/O)
@@ -37,12 +39,6 @@
forceMove(O.loc)
. = ..()
-
-/obj/structure/spider/spiderling/terror_spiderling/Destroy()
- for(var/obj/structure/spider/spiderling/terror_spiderling/S in view(7, src))
- S.immediate_ventcrawl = TRUE
- return ..()
-
/obj/structure/spider/spiderling/terror_spiderling/proc/score_surroundings(atom/A = src)
var/safety_score = 0
var/turf/T = get_turf(A)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 8cb03da0998f..9b2a77bc05e5 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -386,6 +386,14 @@
/mob/living/simple_animal/revive()
..()
density = initial(density)
+ health = maxHealth
+ icon = initial(icon)
+ icon_state = icon_living
+ density = initial(density)
+ flying = initial(flying)
+ if(collar_type)
+ collar_type = "[initial(collar_type)]"
+ regenerate_icons()
/mob/living/simple_animal/death(gibbed)
// Only execute the below if we successfully died
@@ -465,17 +473,6 @@
if(on_fire)
overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning")
-/mob/living/simple_animal/revive()
- ..()
- health = maxHealth
- icon = initial(icon)
- icon_state = icon_living
- density = initial(density)
- flying = initial(flying)
- if(collar_type)
- collar_type = "[initial(collar_type)]"
- regenerate_icons()
-
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(current_offspring >= max_offspring)
return FALSE
@@ -620,12 +617,6 @@
if(pulledby || shouldwakeup)
toggle_ai(AI_ON)
-/mob/living/simple_animal/adjustHealth(amount, updating_health = TRUE)
- . = ..()
- if(!ckey && stat == CONSCIOUS)//Not unconscious
- if(AIStatus == AI_IDLE)
- toggle_ai(AI_ON)
-
/mob/living/simple_animal/onTransitZ(old_z, new_z)
..()
if(AIStatus == AI_Z_OFF)
diff --git a/code/modules/mob/living/simple_animal/simple_animal_damage.dm b/code/modules/mob/living/simple_animal/simple_animal_damage.dm
index fdcbf95216b7..d2ddc3c894f3 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_damage.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_damage.dm
@@ -11,6 +11,9 @@
. = STATUS_UPDATE_HEALTH
if(updating_health)
updatehealth()
+ if(!ckey && stat == CONSCIOUS)//Not unconscious
+ if(AIStatus == AI_IDLE)
+ toggle_ai(AI_ON)
/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE)
if(damage_coeff[BRUTE])
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 4feac84bdecd..64191fe25910 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1031,10 +1031,6 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
qdel(S)
mob_spell_list -= S
-//override to avoid rotating pixel_xy on mobs
-/mob/shuttleRotate(rotation)
- dir = angle2dir(rotation+dir2angle(dir))
-
/mob/proc/handle_ventcrawl()
return // Only living mobs can ventcrawl
diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm
index 02ce69b9215d..d9e460f5b960 100644
--- a/code/modules/mob/mob_misc_procs.dm
+++ b/code/modules/mob/mob_misc_procs.dm
@@ -580,12 +580,6 @@
return FALSE
return TRUE
-/mob/proc/switch_to_camera(obj/machinery/camera/C)
- if(!C.can_use() || incapacitated() || (get_dist(C, src) > 1 || machine != src || !has_vision()))
- return FALSE
- check_eye(src)
- return TRUE
-
/mob/proc/rename_character(oldname, newname)
if(!newname)
return FALSE
diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm
index 8b58152f4f15..3c41d1ba3b93 100644
--- a/code/modules/mod/mod_control.dm
+++ b/code/modules/mod/mod_control.dm
@@ -253,6 +253,7 @@
if(!wearer || old_loc != wearer || loc == wearer)
return
clean_up()
+ bag?.update_viewers()
/obj/item/mod/control/MouseDrop(atom/over_object)
if(iscarbon(usr))
@@ -775,7 +776,3 @@
. = ..()
for(var/obj/item/mod/module/module as anything in modules)
module.extinguish_light(force)
-
-/obj/item/mod/control/Moved(atom/oldloc, dir, forced = FALSE)
- . = ..()
- bag?.update_viewers()
diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm
index f4f6624fec1b..f7dc549a2b78 100644
--- a/code/modules/mod/modules/modules_general.dm
+++ b/code/modules/mod/modules/modules_general.dm
@@ -19,6 +19,13 @@
/obj/item/mod/module/storage/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_ADJACENCY_TRANSPARENT, ROUNDSTART_TRAIT)
+ var/obj/item/storage/backpack/modstorage/S = new(src)
+ bag = S
+ bag.max_w_class = max_w_class
+ bag.max_combined_w_class = max_combined_w_class
+ bag.storage_slots = max_items
+ bag.source = src
+ bag.forceMove(src)
/obj/item/mod/module/storage/serialize()
var/list/data = ..()
@@ -31,16 +38,6 @@
bag = list_to_object(data["bag"], src)
bag.source = src
-/obj/item/mod/module/storage/Initialize(mapload)
- . = ..()
- var/obj/item/storage/backpack/modstorage/S = new(src)
- bag = S
- bag.max_w_class = max_w_class
- bag.max_combined_w_class = max_combined_w_class
- bag.storage_slots = max_items
- bag.source = src
- bag.forceMove(src)
-
/obj/item/mod/module/storage/Destroy()
QDEL_NULL(bag)
return ..()
diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm
index f0c31a299555..06c4704c21f2 100644
--- a/code/modules/mod/modules/modules_supply.dm
+++ b/code/modules/mod/modules/modules_supply.dm
@@ -312,16 +312,6 @@
/obj/item/mod/module/ash_accretion/Initialize(mapload)
. = ..()
armor_mod_2 = new armor_mod_1
-
-/obj/item/mod/module/ash_accretion/Destroy()
- QDEL_NULL(armor_mod_2)
- return ..()
-
-/obj/item/mod/armor/mod_ash_accretion
- armor = list(MELEE = 4, BULLET = 1, LASER = 2, ENERGY = 1, BOMB = 4, RAD = 0, FIRE = 0, ACID = 0)
-
-/obj/item/mod/module/ash_accretion/Initialize(mapload)
- . = ..()
if(!accretion_turfs)
accretion_turfs = typecacheof(list(
/turf/simulated/floor/plating/asteroid
@@ -333,6 +323,13 @@
/turf/simulated/floor/indestructible/necropolis
))
+/obj/item/mod/module/ash_accretion/Destroy()
+ QDEL_NULL(armor_mod_2)
+ return ..()
+
+/obj/item/mod/armor/mod_ash_accretion
+ armor = list(MELEE = 4, BULLET = 1, LASER = 2, ENERGY = 1, BOMB = 4, RAD = 0, FIRE = 0, ACID = 0)
+
/obj/item/mod/module/ash_accretion/on_suit_activation()
RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index af8c580e2631..cc8ce408628d 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -141,11 +141,11 @@
dist = get_dist(src, user.current)
else //cyborg or AI not seeing through a camera
dist = get_dist(src, user)
+
if(dist < 2)
show_content(user, forceshow = 1)
else
show_content(user, forcestars = 1)
- return
/obj/item/paper/attack(mob/living/carbon/M, mob/living/carbon/user, def_zone)
if(!ishuman(M))
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 14f700299f0d..0c326747ddfa 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -494,6 +494,8 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor
/obj/item/camera/digital/examine(mob/user)
. = ..()
. += "A small screen shows that there are currently [length(saved_pictures)] pictures stored. "
+ . += "Alt-Shift-Click [src] to print a specific photo. "
+ . += "Ctrl-Shift-Click [src] to delete a specific photo. "
/obj/item/camera/digital/afterattack(atom/target, mob/user, flag)
if(!on || !pictures_left || ismob(target.loc))
@@ -530,11 +532,6 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor
var/datum/picture/P = createpicture(target, user, turfs, mobs, flag)
saved_pictures += P
-/obj/item/camera/digital/examine(mob/user)
- . = ..()
- . += "Alt-Shift-Click [src] to print a specific photo. "
- . += "Ctrl-Shift-Click [src] to delete a specific photo. "
-
/obj/item/camera/digital/AltShiftClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
diff --git a/code/modules/power/engines/singularity/collector.dm b/code/modules/power/engines/singularity/collector.dm
index 15561f2e4de0..4631406508cb 100644
--- a/code/modules/power/engines/singularity/collector.dm
+++ b/code/modules/power/engines/singularity/collector.dm
@@ -47,6 +47,24 @@
else
to_chat(user, "The controls are locked! ")
+/obj/machinery/power/rad_collector/wrench_act(mob/living/user, obj/item/I)
+ . = TRUE
+ if(loaded_tank)
+ to_chat(user, "Remove the plasma tank first. ")
+ return TRUE
+ var/turf/T = get_turf(src)
+ for(var/obj/machinery/power/rad_collector/can_wrench in T.contents)
+ if(can_wrench.anchored && !anchored)
+ to_chat(user, "You can't wrench down [src] here! ")
+ return
+ I.play_tool_sound(src)
+ anchored = !anchored
+ user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the [name].", "You [anchored ? "secure" : "undo"] the external bolts.", "You hear a ratchet")
+ if(anchored)
+ connect_to_network()
+ else
+ disconnect_from_network()
+
/obj/machinery/power/rad_collector/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/tank/internals/plasma))
@@ -64,22 +82,6 @@
if(loaded_tank && !locked)
eject()
return TRUE
- else if(iswrench(I))
- if(loaded_tank)
- to_chat(user, "Remove the plasma tank first. ")
- return TRUE
- var/turf/T = get_turf(src)
- for(var/obj/machinery/power/rad_collector/can_wrench in T.contents)
- if(can_wrench.anchored && !anchored)
- to_chat(user, "You can't wrench down [src] here! ")
- return
- playsound(loc, I.usesound, 75, TRUE)
- anchored = !anchored
- user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the [name].", "You [anchored ? "secure" : "undo"] the external bolts.", "You hear a ratchet")
- if(anchored)
- connect_to_network()
- else
- disconnect_from_network()
else if(istype(I, /obj/item/card/id) || istype(I, /obj/item/pda))
if(allowed(user))
if(active)
diff --git a/code/modules/power/engines/singularity/field_generator.dm b/code/modules/power/engines/singularity/field_generator.dm
index 5e27ef46dc62..c7238b8bdda9 100644
--- a/code/modules/power/engines/singularity/field_generator.dm
+++ b/code/modules/power/engines/singularity/field_generator.dm
@@ -77,33 +77,29 @@ GLOBAL_LIST_EMPTY(field_generator_fields)
else
to_chat(user, "[src] needs to be firmly secured to the floor first! ")
-
-/obj/machinery/field/generator/attackby(obj/item/W, mob/user, params)
+/obj/machinery/field/generator/wrench_act(mob/living/user, obj/item/W)
+ . = TRUE
if(active)
to_chat(user, "[src] needs to be off! ")
return
- else if(istype(W, /obj/item/wrench))
- switch(state)
- if(FG_UNSECURED)
- if(isinspace()) return
- state = FG_SECURED
- playsound(loc, W.usesound, 75, 1)
- user.visible_message("[user.name] secures [name] to the floor.", \
- "You secure the external reinforcing bolts to the floor. ", \
- "You hear ratchet. ")
- anchored = TRUE
- if(FG_SECURED)
- state = FG_UNSECURED
- playsound(loc, W.usesound, 75, 1)
- user.visible_message("[user.name] unsecures [name] reinforcing bolts from the floor.", \
- "You undo the external reinforcing bolts. ", \
- "You hear ratchet. ")
- anchored = FALSE
- if(FG_WELDED)
- to_chat(user, "[src] needs to be unwelded from the floor! ")
- else
- return ..()
-
+ switch(state)
+ if(FG_UNSECURED)
+ if(isinspace()) return
+ state = FG_SECURED
+ W.play_tool_sound(W, 75)
+ user.visible_message("[user.name] secures [name] to the floor.", \
+ "You secure the external reinforcing bolts to the floor. ", \
+ "You hear ratchet. ")
+ anchored = TRUE
+ if(FG_SECURED)
+ state = FG_UNSECURED
+ W.play_tool_sound(W, 75)
+ user.visible_message("[user.name] unsecures [name] reinforcing bolts from the floor.", \
+ "You undo the external reinforcing bolts. ", \
+ "You hear ratchet. ")
+ anchored = FALSE
+ if(FG_WELDED)
+ to_chat(user, "[src] needs to be unwelded from the floor! ")
/obj/machinery/field/generator/welder_act(mob/user, obj/item/I)
. = TRUE
diff --git a/code/modules/power/engines/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/engines/singularity/particle_accelerator/particle_accelerator.dm
index e3881cbd96c2..c2fcf54cb88f 100644
--- a/code/modules/power/engines/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/engines/singularity/particle_accelerator/particle_accelerator.dm
@@ -234,10 +234,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
var/strength = 0
var/desc_holder = null
-/obj/structure/particle_accelerator/examine(mob/user)
- . = ..()
- . += "Alt-Click to rotate it. "
-
/obj/machinery/particle_accelerator/AltClick(mob/user)
if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
diff --git a/code/modules/power/engines/singularity/singulogen.dm b/code/modules/power/engines/singularity/singulogen.dm
index e0d5cf2737db..1449f374bd4d 100644
--- a/code/modules/power/engines/singularity/singulogen.dm
+++ b/code/modules/power/engines/singularity/singulogen.dm
@@ -21,18 +21,18 @@
transfer_fingerprints_to(S)
if(src) qdel(src)
-/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/wrench))
- anchored = !anchored
- playsound(src.loc, W.usesound, 75, 1)
- if(anchored)
- user.visible_message("[user.name] secures [src] to the floor.", \
- "You secure [src] to the floor.", \
- "You hear a ratchet")
- src.add_hiddenprint(user)
- else
- user.visible_message("[user.name] unsecures [src] from the floor.", \
- "You unsecure [src.name] from the floor.", \
- "You hear a ratchet")
+/obj/machinery/the_singularitygen/wrench_act(mob/living/user, obj/item/wrench/W)
+ . = TRUE
+ anchored = !anchored
+ if(!W.use_tool(src, user, 2 SECONDS, 0, 50))
return
- return ..()
+ if(anchored)
+ user.visible_message("[user.name] secures [src] to the floor.", \
+ "You secure [src] to the floor.", \
+ "You hear a ratchet.")
+ src.add_hiddenprint(user)
+ else
+ user.visible_message("[user.name] unsecures [src] from the floor.", \
+ "You unsecure [src.name] from the floor.", \
+ "You hear a ratchet.")
+
diff --git a/code/modules/power/generators/thermo_electric_generator.dm b/code/modules/power/generators/thermo_electric_generator.dm
index 222ea5d94c31..eb1f3cf806d6 100644
--- a/code/modules/power/generators/thermo_electric_generator.dm
+++ b/code/modules/power/generators/thermo_electric_generator.dm
@@ -40,10 +40,6 @@
if(powernet)
disconnect_from_network()
-/obj/machinery/power/teg/Initialize()
- . = ..()
- connect()
-
/obj/machinery/power/teg/proc/connect()
connect_to_network()
diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm
index c63ef6943ff8..39d6cada712a 100644
--- a/code/modules/projectiles/firing.dm
+++ b/code/modules/projectiles/firing.dm
@@ -38,6 +38,10 @@
/obj/item/ammo_casing/proc/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread, atom/firer_source_atom)
var/turf/curloc = get_turf(firer_source_atom)
+ if(!istype(curloc)) // False-bottomed briefcase check.
+ var/obj/item/holding = user.get_active_hand()
+ if(istype(holding, /obj/item/storage/briefcase/false_bottomed))
+ curloc = get_turf(holding)
if(!istype(targloc) || !istype(curloc) || !BB)
return
BB.ammo_casing = src
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 0b877bd3b45b..6bab66d46c8e 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -150,10 +150,18 @@
playsound(user, fire_sound, 50, 1)
if(message)
if(pointblank)
- user.visible_message("[user] fires [src] point blank at [target]! ", "You fire [src] point blank at [target]! ", "You hear \a [fire_sound_text]! ")
+ user.visible_message(
+ "[user] fires [src] point blank at [target]! ",
+ "You fire [src] point blank at [target]! ",
+ "You hear \a [fire_sound_text]! "
+ )
else
- user.visible_message("[user] fires [src]! ", "You fire [src]! ", "You hear \a [fire_sound_text]!")
- if(chambered?.muzzle_flash_effect)
+ user.visible_message(
+ "[user] fires [src]! ",
+ "You fire [src]! ",
+ "You hear \a [fire_sound_text]! "
+ )
+ if(chambered.muzzle_flash_effect)
var/obj/effect/temp_visual/target_angled/muzzle_flash/effect = new chambered.muzzle_flash_effect(get_turf(src), target, muzzle_flash_time)
effect.alpha = min(255, muzzle_strength * 255)
if(chambered.muzzle_flash_color)
@@ -193,7 +201,11 @@
if(flag)
if(user.zone_selected == "mouth")
if(target == user && HAS_TRAIT(user, TRAIT_BADASS)) // Check if we are blowing smoke off of our own gun, otherwise we are trying to execute someone
- user.visible_message("[user] blows smoke off of [src]'s barrel. What a badass. ")
+ user.visible_message(
+ "[user] blows smoke off of [src]'s barrel. What a badass. ",
+ "You blow smoke off of [src]'s barrel. ",
+ "You hear someone blowing over a hollow tube. "
+ )
else
handle_suicide(user, target, params)
return
@@ -473,11 +485,15 @@
if(user == target)
if(!ishuman(user)) // Borg suicide needs a refactor for this to work.
return
- target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger... ", \
- "You stick [src] in your mouth, ready to pull the trigger... ")
+ target.visible_message(
+ "[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger... ",
+ "You stick [src] in your mouth, ready to pull the trigger... "
+ )
else
- 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... ")
+ 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 = 1
@@ -486,13 +502,19 @@
if(user == target)
user.visible_message("[user] decided life was worth living. ")
else if(target && target.Adjacent(user))
- target.visible_message("[user] has decided to spare [target]'s life. ", "[user] has decided to spare your life! ")
+ target.visible_message(
+ "[user] has decided to spare [target]'s life. ",
+ "[user] has decided to spare your life! "
+ )
semicd = 0
return
semicd = 0
- target.visible_message("[user] pulls the trigger! ", "[user] pulls the trigger! ")
+ target.visible_message(
+ "[user] pulls the trigger! ",
+ "[user] pulls the trigger! "
+ )
if(chambered && chambered.BB)
chambered.BB.damage *= 5
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 25e1e1164d07..c5f35cffa977 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -11,6 +11,7 @@
/obj/item/gun/projectile/revolver/examine(mob/user)
. = ..()
+ . += "[get_ammo(0, 0)] of those are live rounds."
. += "You can Alt-Click [src] to spin it's barrel. "
/obj/item/gun/projectile/revolver/chamber_round(spin = 1)
@@ -80,10 +81,6 @@
boolets += magazine.ammo_count(countempties)
return boolets
-/obj/item/gun/projectile/revolver/examine(mob/user)
- . = ..()
- . += "[get_ammo(0,0)] of those are live rounds."
-
/obj/item/gun/projectile/revolver/fake
/obj/item/gun/projectile/revolver/fake/examine(mob/user)
@@ -360,7 +357,7 @@
return ..()
if(istype(A, /obj/item/melee/energy))
var/obj/item/melee/energy/W = A
- if(W.active)
+ if(HAS_TRAIT(W, TRAIT_ITEM_ACTIVE))
sawoff(user)
item_state = icon_state
if(istype(A, /obj/item/circular_saw) || istype(A, /obj/item/gun/energy/plasmacutter))
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 9963f90cc99b..c2dd32ea8761 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -21,6 +21,8 @@
/obj/item/gun/projectile/shotgun/examine(mob/user)
. = ..()
+ if(chambered)
+ . += "A [chambered.BB ? "live" : "spent"] one is in the chamber."
. += get_shotgun_info()
/obj/item/gun/projectile/shotgun/proc/get_shotgun_info()
@@ -72,11 +74,6 @@
var/obj/item/ammo_casing/AC = magazine.get_round() //load next casing.
chambered = AC
-/obj/item/gun/projectile/shotgun/examine(mob/user)
- . = ..()
- if(chambered)
- . += "A [chambered.BB ? "live" : "spent"] one is in the chamber."
-
/obj/item/gun/projectile/shotgun/lethal
mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal
@@ -97,7 +94,7 @@
sawoff(user)
if(istype(A, /obj/item/melee/energy))
var/obj/item/melee/energy/W = A
- if(W.active)
+ if(HAS_TRAIT(W, TRAIT_ITEM_ACTIVE))
sawoff(user)
if(istype(A, /obj/item/pipe))
unsaw(A, user)
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 8bed319fcc58..35eb0f141883 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -400,7 +400,6 @@
beaker = I
beaker.loc = src
to_chat(user, "You add the beaker to the machine. ")
- updateUsrDialog()
SStgui.update_uis(src, TRUE)
icon_state = "pandemic1"
else
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 7594ae4b283c..7900fe0fb20a 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -137,10 +137,41 @@
// wrench: (un)anchor
// weldingtool: convert to real pipe
-/obj/structure/disposalconstruct/attackby(obj/item/I, mob/user, params)
+/obj/structure/disposalconstruct/wrench_act(mob/living/user, obj/item/I)
+ var/ispipe = is_pipe()
+ var/nicetype = get_nice_name()
+ if(anchored)
+ anchored = FALSE
+ if(ispipe)
+ level = 2
+ density = FALSE
+ else
+ density = TRUE
+ to_chat(user, "You detach the [nicetype] from the underfloor.")
+ else
+ anchored = TRUE
+ if(ispipe)
+ level = 1 // We don't want disposal bins to disappear under the floors
+ density = FALSE
+ else
+ density = TRUE // We don't want disposal bins or outlets to go density 0
+ to_chat(user, "You attach the [nicetype] to the underfloor.")
+ I.play_tool_sound(src, I.tool_volume)
+ update()
+ return TRUE
+
+/obj/structure/disposalconstruct/proc/is_pipe()
+ switch(ptype)
+ // lewtodo: this sucks
+ if(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE)
+ return FALSE
+ if(PIPE_DISPOSALS_SORT_RIGHT, PIPE_DISPOSALS_SORT_LEFT)
+ return TRUE
+ else
+ return TRUE
+
+/obj/structure/disposalconstruct/proc/get_nice_name()
var/nicetype = "pipe"
- var/ispipe = 0 // Indicates if we should change the level of this pipe
- src.add_fingerprint(user)
switch(ptype)
if(PIPE_DISPOSALS_BIN)
nicetype = "disposal bin"
@@ -150,38 +181,19 @@
nicetype = "delivery chute"
if(PIPE_DISPOSALS_SORT_RIGHT, PIPE_DISPOSALS_SORT_LEFT)
nicetype = "sorting pipe"
- ispipe = 1
- else
- nicetype = "pipe"
- ispipe = 1
+ return nicetype
+
+/obj/structure/disposalconstruct/attackby(obj/item/I, mob/user, params)
+ var/nicetype = get_nice_name()
+ var/ispipe = is_pipe() // Indicates if we should change the level of this pipe
+ add_fingerprint(user)
+
var/turf/T = src.loc
if(T.intact)
to_chat(user, "You can only attach the [nicetype] if the floor plating is removed.")
return
- if(istype(I, /obj/item/wrench))
- if(anchored)
- anchored = FALSE
- if(ispipe)
- level = 2
- density = FALSE
- else
- density = TRUE
- to_chat(user, "You detach the [nicetype] from the underfloor.")
- else
- anchored = TRUE
- if(ispipe)
- level = 1 // We don't want disposal bins to disappear under the floors
- density = FALSE
- else
- density = TRUE // We don't want disposal bins or outlets to go density 0
- to_chat(user, "You attach the [nicetype] to the underfloor.")
- playsound(src.loc, I.usesound, 100, 1)
- update()
- return
-
-
if(ptype in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE)) // Disposal or outlet
var/obj/structure/disposalpipe/trunk/CP = locate() in T
if(!CP) // There's no trunk
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 1edfcd5125e2..3b48076814e3 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -636,11 +636,6 @@
else
return ..(mover, target, height)
-
-/obj/machinery/disposal/singularity_pull(S, current_size)
- if(current_size >= STAGE_FIVE)
- qdel(src)
-
/obj/machinery/disposal/get_remote_view_fullscreens(mob/user)
if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS)))
user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/stretch/impaired, 2)
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index ffb50d0c5e8d..0401476f4e81 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -90,6 +90,7 @@ Note: Must be placed within 3 tiles of the R&D Console
loaded_item = O
O.loc = src
to_chat(user, "You add [O] to [src]! ")
+ SStgui.update_uis(linked_console)
flick("d_analyzer_la", src)
spawn(10)
icon_state = "d_analyzer_l"
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 20c192a0b3ad..8fb23d543d2d 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -41,21 +41,20 @@ won't update every console in existence) but it's more of a hassle to do. Also,
#define RESET_RESEARCH_DELAY 20
#define IMPRINTER_DELAY 16
-// SUBMENU_MAIN also used by other menus
-// MENU_LEVELS is not accessible normally
#define MENU_MAIN 0
-#define MENU_LEVELS 1
#define MENU_DISK 2
#define MENU_DESTROY 3
#define MENU_LATHE 4
#define MENU_IMPRINTER 5
#define MENU_SETTINGS 6
-#define SUBMENU_MAIN 0
-#define SUBMENU_DISK_COPY 1
-#define SUBMENU_LATHE_CATEGORY 1
-#define SUBMENU_LATHE_MAT_STORAGE 2
-#define SUBMENU_LATHE_CHEM_STORAGE 3
-#define SUBMENU_SETTINGS_DEVICES 1
+#define MIN_MENU MENU_MAIN
+#define MAX_MENU MENU_SETTINGS
+#define SUBMENU_PRINTER_MAIN 0
+#define SUBMENU_PRINTER_SEARCH 1
+#define SUBMENU_PRINTER_MATERIALS 2
+#define SUBMENU_PRINTER_CHEMICALS 3
+#define MIN_SUBMENU_PRINTER SUBMENU_PRINTER_MAIN
+#define MAX_SUBMENU_PRINTER SUBMENU_PRINTER_CHEMICALS
#define BUILD_POWER 2000
#define DECONSTRUCT_POWER 250
@@ -74,8 +73,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe
var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter
+ /// The ID of the top-level menu, such as protolathe, analyzer, etc.
var/menu = MENU_MAIN
- var/submenu = SUBMENU_MAIN
+ /// The ID of the protolathe submenu, such as materials, chemicals, crafting etc.
+ var/submenu_protolathe = SUBMENU_PRINTER_MAIN
+ /// The ID of the circuit imprinter submenu. Shares the same submenus as the protolathe.
+ var/submenu_imprinter = SUBMENU_PRINTER_MAIN
var/wait_message = 0
var/wait_message_timer = 0
@@ -205,18 +208,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
to_chat(user, "You disable the security protocols ")
return TRUE
-/obj/machinery/computer/rdconsole/proc/valid_nav(next_menu, next_submenu)
- switch(next_menu)
- if(MENU_MAIN, MENU_LEVELS, MENU_DESTROY)
- return next_submenu in list(SUBMENU_MAIN)
- if(MENU_DISK)
- return next_submenu in list(SUBMENU_MAIN, SUBMENU_DISK_COPY)
- if(MENU_LATHE, MENU_IMPRINTER)
- return next_submenu in list(SUBMENU_MAIN, SUBMENU_LATHE_CATEGORY, SUBMENU_LATHE_MAT_STORAGE, SUBMENU_LATHE_CHEM_STORAGE)
- if(MENU_SETTINGS)
- return next_submenu in list(SUBMENU_MAIN, SUBMENU_SETTINGS_DEVICES)
- return FALSE
-
/obj/machinery/computer/rdconsole/proc/prompt_eject_sheets(obj/machinery/r_n_d/machine, material_id, amount)
if(!machine)
return
@@ -241,8 +232,10 @@ won't update every console in existence) but it's more of a hassle to do. Also,
clear_wait_message()
if(d_disk && d_disk.blueprint)
files.AddDesign2Known(d_disk.blueprint)
- else if(t_disk && t_disk.stored)
- files.AddTech2Known(t_disk.stored)
+ else if(t_disk && t_disk.tech_id)
+ var/datum/tech/tech = files.find_possible_tech_with_id(t_disk.tech_id)
+ if(!isnull(tech))
+ tech.level = t_disk.tech_level
SStgui.update_uis(src)
griefProtection() //Update centcom too
@@ -355,7 +348,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
linked_destroy.busy = FALSE
use_power(DECONSTRUCT_POWER)
menu = MENU_DESTROY
- submenu = SUBMENU_MAIN
SStgui.update_uis(src)
@@ -467,31 +459,39 @@ won't update every console in existence) but it's more of a hassle to do. Also,
clear_wait_message()
SStgui.update_uis(src)
-/obj/machinery/computer/rdconsole/ui_act(action, list/params)
+/obj/machinery/computer/rdconsole/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if(..())
return
- if(!allowed(usr) && !isobserver(usr))
+ if(!allowed(ui.user) && !isobserver(ui.user))
return
- add_fingerprint(usr)
+ add_fingerprint(ui.user)
switch(action)
if("nav") //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code.
var/next_menu = text2num(params["menu"])
- var/next_submenu = text2num(params["submenu"])
- if(valid_nav(next_menu, next_submenu))
- menu = next_menu
- submenu = next_submenu
+ if(isnull(next_menu) || !ISINTEGER(next_menu) || !ISINRANGE(next_menu, MIN_MENU, MAX_MENU))
+ return
+ menu = next_menu
+
+ if("nav_protolathe")
+ var/new_menu = text2num(params["menu"])
+ if(isnull(new_menu) || !ISINTEGER(new_menu) || !ISINRANGE(new_menu, MIN_SUBMENU_PRINTER, MAX_SUBMENU_PRINTER))
+ return
+ submenu_protolathe = new_menu
+
+ if("nav_imprinter")
+ var/new_menu = text2num(params["menu"])
+ if(isnull(new_menu) || !ISINTEGER(new_menu) || !ISINRANGE(new_menu, MIN_SUBMENU_PRINTER, MAX_SUBMENU_PRINTER))
+ return
+ submenu_imprinter = new_menu
if("setCategory")
var/next_category = params["category"]
var/compare
- if(submenu != SUBMENU_MAIN)
- return FALSE
-
if(menu == MENU_LATHE)
compare = PROTOLATHE
if(!linked_lathe || !(next_category in linked_lathe.categories))
@@ -511,7 +511,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
if(next_category in D.category)
matching_designs.Add(D)
- submenu = SUBMENU_LATHE_CATEGORY
+ if(menu == MENU_LATHE)
+ submenu_protolathe = SUBMENU_PRINTER_SEARCH
+ if(submenu_imprinter == SUBMENU_PRINTER_SEARCH)
+ submenu_imprinter = SUBMENU_PRINTER_MAIN
+ else if(menu == MENU_IMPRINTER)
+ submenu_imprinter = SUBMENU_PRINTER_SEARCH
+ if(submenu_protolathe == SUBMENU_PRINTER_SEARCH)
+ submenu_protolathe = SUBMENU_PRINTER_MAIN
selected_category = "Viewing Category [next_category]"
@@ -519,79 +526,69 @@ won't update every console in existence) but it's more of a hassle to do. Also,
add_wait_message("Updating Database...", TECH_UPDATE_DELAY)
addtimer(CALLBACK(src, PROC_REF(update_from_disk)), TECH_UPDATE_DELAY)
- if("clear_tech") //Erase data on the technology disk.
- if(t_disk)
- t_disk.wipe_tech()
-
- if("eject_tech") //Eject the technology disk.
+ if("eject_disk")
if(t_disk)
t_disk.forceMove(loc)
- if(Adjacent(usr) && !issilicon(usr))
- usr.put_in_hands(t_disk)
+ if(Adjacent(ui.user) && !issilicon(ui.user))
+ ui.user.put_in_hands(t_disk)
t_disk = null
- menu = MENU_MAIN
- submenu = SUBMENU_MAIN
+ if(d_disk)
+ d_disk.forceMove(loc)
+ if(Adjacent(ui.user) && !issilicon(ui.user))
+ ui.user.put_in_hands(d_disk)
+ d_disk = null
+
+ if("erase_disk")
+ if(t_disk && d_disk)
+ to_chat(ui.user, "Can not simultaneously wipe tech disk and design disk. ")
+ return FALSE
+ if(t_disk)
+ t_disk.wipe_tech()
+ if(d_disk)
+ d_disk.wipe_blueprint()
if("copy_tech") //Copy some technology data from the research holder to the disk.
// Somehow this href makes me very nervous
var/datum/tech/known = files.known_tech[params["id"]]
if(t_disk && known)
t_disk.load_tech(known)
- menu = MENU_DISK
- submenu = SUBMENU_MAIN
if("updt_design") //Updates the research holder with design data from the design disk.
add_wait_message("Updating Database...", DESIGN_UPDATE_DELAY)
addtimer(CALLBACK(src, PROC_REF(update_from_disk)), DESIGN_UPDATE_DELAY)
- if("clear_design") //Erases data on the design disk.
- if(d_disk)
- d_disk.wipe_blueprint()
-
- if("eject_design") //Eject the design disk.
- if(d_disk)
- d_disk.forceMove(loc)
- if(Adjacent(usr) && !issilicon(usr))
- usr.put_in_hands(d_disk)
- d_disk = null
- menu = MENU_MAIN
- submenu = SUBMENU_MAIN
-
if("copy_design") //Copy design data from the research holder to the design disk.
// This href ALSO makes me very nervous
var/datum/design/design = files.known_designs[params["id"]]
if(design && d_disk && can_copy_design(design))
d_disk.blueprint = design
- menu = MENU_DISK
- submenu = SUBMENU_MAIN
if("eject_item") //Eject the item inside the destructive analyzer.
if(linked_destroy)
if(linked_destroy.busy)
- to_chat(usr, "[linked_destroy] is busy at the moment. ")
+ to_chat(ui.user, "[linked_destroy] is busy at the moment. ")
else if(linked_destroy.loaded_item)
linked_destroy.loaded_item.forceMove(linked_destroy.loc)
linked_destroy.loaded_item = null
linked_destroy.icon_state = "d_analyzer"
- menu = MENU_DESTROY
if("maxresearch")
if(!check_rights(R_ADMIN))
return
- if(tgui_alert(usr, "Are you sure you want to maximize research levels?", "Confirmation", list("Yes", "No")) != "Yes")
+ if(tgui_alert(ui.user, "Are you sure you want to maximize research levels?", "Confirmation", list("Yes", "No")) != "Yes")
return
- log_admin("[key_name(usr)] has maximized the research levels.")
- message_admins("[key_name_admin(usr)] has maximized the research levels.")
+ log_admin("[key_name(ui.user)] has maximized the research levels.")
+ message_admins("[key_name_admin(ui.user)] has maximized the research levels.")
Maximize()
griefProtection() //Update centcomm too
if("deconstruct") //Deconstruct the item in the destructive analyzer and update the research holder.
- start_destroyer(usr)
+ start_destroyer(ui.user)
if("sync") //Sync the research holder with all the R&D consoles in the game that aren't sync protected.
if(!sync)
- to_chat(usr, "You must connect to the network first! ")
+ to_chat(ui.user, "You must connect to the network first! ")
else
add_wait_message("Syncing Database...", SYNC_RESEARCH_DELAY)
addtimer(CALLBACK(src, PROC_REF(sync_research)), SYNC_RESEARCH_DELAY)
@@ -641,14 +638,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(linked_lathe)
linked_lathe.linked_console = null
linked_lathe = null
+ submenu_protolathe = SUBMENU_PRINTER_MAIN
if("imprinter")
if(linked_imprinter)
linked_imprinter.linked_console = null
linked_imprinter = null
+ submenu_imprinter = SUBMENU_PRINTER_MAIN
if("reset") //Reset the R&D console's database.
griefProtection()
- var/choice = tgui_alert(usr, "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "R&D Console Database Reset", list("Continue", "Cancel"))
+ var/choice = tgui_alert(ui.user, "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "R&D Console Database Reset", list("Continue", "Cancel"))
if(choice == "Continue")
add_wait_message("Resetting Database...", RESET_RESEARCH_DELAY)
addtimer(CALLBACK(src, PROC_REF(reset_research)), RESET_RESEARCH_DELAY)
@@ -673,7 +672,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
if(findtext(D.name, query))
matching_designs.Add(D)
- submenu = SUBMENU_LATHE_CATEGORY
+ if(menu == MENU_LATHE)
+ submenu_protolathe = SUBMENU_PRINTER_SEARCH
+ if(submenu_imprinter == SUBMENU_PRINTER_SEARCH)
+ submenu_imprinter = SUBMENU_PRINTER_MAIN
+ else if(menu == MENU_IMPRINTER)
+ submenu_imprinter = SUBMENU_PRINTER_SEARCH
+ if(submenu_protolathe == SUBMENU_PRINTER_SEARCH)
+ submenu_protolathe = SUBMENU_PRINTER_MAIN
selected_category = "Search Results for '[query]'"
@@ -722,56 +728,58 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/coeff = machine.efficiency_coeff
- if(submenu == SUBMENU_LATHE_CATEGORY)
- for(var/datum/design/D in matching_designs)
- var/list/design_list = list()
- designs_list[++designs_list.len] = design_list
- var/list/design_materials_list = list()
- design_list["materials"] = design_materials_list
- design_list["id"] = D.id
- design_list["name"] = D.name
- var/can_build = is_imprinter ? 1 : 50
-
- for(var/M in D.materials)
- var/list/material_list = list()
- design_materials_list[++design_materials_list.len] = material_list
- material_list["name"] = CallMaterialName(M)
- material_list["amount"] = D.materials[M] * coeff
- var/t = machine.check_mat(D, M)
- material_list["is_red"] = t < 1
- can_build = min(can_build, t)
-
- for(var/R in D.reagents_list)
- var/list/material_list = list()
- design_materials_list[++design_materials_list.len] = material_list
- material_list["name"] = CallMaterialName(R)
- material_list["amount"] = D.reagents_list[R] * coeff
- var/t = machine.check_mat(D, R)
- material_list["is_red"] = t < 1
- can_build = min(can_build, t)
-
- design_list["can_build"] = can_build
-
- else if(submenu == SUBMENU_LATHE_MAT_STORAGE)
- materials_list[++materials_list.len] = list("name" = "Metal", "id" = MAT_METAL, "amount" = machine.materials.amount(MAT_METAL))
- materials_list[++materials_list.len] = list("name" = "Glass", "id" = MAT_GLASS, "amount" = machine.materials.amount(MAT_GLASS))
- materials_list[++materials_list.len] = list("name" = "Gold", "id" = MAT_GOLD, "amount" = machine.materials.amount(MAT_GOLD))
- materials_list[++materials_list.len] = list("name" = "Silver", "id" = MAT_SILVER, "amount" = machine.materials.amount(MAT_SILVER))
- materials_list[++materials_list.len] = list("name" = "Solid Plasma", "id" = MAT_PLASMA, "amount" = machine.materials.amount(MAT_PLASMA))
- materials_list[++materials_list.len] = list("name" = "Uranium", "id" = MAT_URANIUM, "amount" = machine.materials.amount(MAT_URANIUM))
- materials_list[++materials_list.len] = list("name" = "Diamond", "id" = MAT_DIAMOND, "amount" = machine.materials.amount(MAT_DIAMOND))
- materials_list[++materials_list.len] = list("name" = "Bananium", "id" = MAT_BANANIUM, "amount" = machine.materials.amount(MAT_BANANIUM))
- materials_list[++materials_list.len] = list("name" = "Tranquillite", "id" = MAT_TRANQUILLITE, "amount" = machine.materials.amount(MAT_TRANQUILLITE))
- materials_list[++materials_list.len] = list("name" = "Titanium", "id" = MAT_TITANIUM, "amount" = machine.materials.amount(MAT_TITANIUM))
- materials_list[++materials_list.len] = list("name" = "Plastic", "id" = MAT_PLASTIC, "amount" = machine.materials.amount(MAT_PLASTIC))
- materials_list[++materials_list.len] = list("name" = "Bluespace Mesh", "id" = MAT_BLUESPACE, "amount" = machine.materials.amount(MAT_BLUESPACE))
- else if(submenu == SUBMENU_LATHE_CHEM_STORAGE)
- for(var/datum/reagent/R in machine.reagents.reagent_list)
- var/list/loaded_chemical = list()
- loaded_chemicals[++loaded_chemicals.len] = loaded_chemical
- loaded_chemical["name"] = R.name
- loaded_chemical["volume"] = R.volume
- loaded_chemical["id"] = R.id
+ if(menu == MENU_LATHE || menu == MENU_IMPRINTER)
+ var/submenu = menu == MENU_LATHE ? submenu_protolathe : submenu_imprinter
+ if(submenu == SUBMENU_PRINTER_SEARCH)
+ for(var/datum/design/D in matching_designs)
+ var/list/design_list = list()
+ designs_list[++designs_list.len] = design_list
+ var/list/design_materials_list = list()
+ design_list["materials"] = design_materials_list
+ design_list["id"] = D.id
+ design_list["name"] = D.name
+ var/can_build = is_imprinter ? 1 : 50
+
+ for(var/M in D.materials)
+ var/list/material_list = list()
+ design_materials_list[++design_materials_list.len] = material_list
+ material_list["name"] = CallMaterialName(M)
+ material_list["amount"] = D.materials[M] * coeff
+ var/t = machine.check_mat(D, M)
+ material_list["is_red"] = t < 1
+ can_build = min(can_build, t)
+
+ for(var/R in D.reagents_list)
+ var/list/material_list = list()
+ design_materials_list[++design_materials_list.len] = material_list
+ material_list["name"] = CallMaterialName(R)
+ material_list["amount"] = D.reagents_list[R] * coeff
+ var/t = machine.check_mat(D, R)
+ material_list["is_red"] = t < 1
+ can_build = min(can_build, t)
+
+ design_list["can_build"] = can_build
+
+ else if(submenu == SUBMENU_PRINTER_MATERIALS)
+ materials_list[++materials_list.len] = list("name" = "Metal", "id" = MAT_METAL, "amount" = machine.materials.amount(MAT_METAL))
+ materials_list[++materials_list.len] = list("name" = "Glass", "id" = MAT_GLASS, "amount" = machine.materials.amount(MAT_GLASS))
+ materials_list[++materials_list.len] = list("name" = "Gold", "id" = MAT_GOLD, "amount" = machine.materials.amount(MAT_GOLD))
+ materials_list[++materials_list.len] = list("name" = "Silver", "id" = MAT_SILVER, "amount" = machine.materials.amount(MAT_SILVER))
+ materials_list[++materials_list.len] = list("name" = "Solid Plasma", "id" = MAT_PLASMA, "amount" = machine.materials.amount(MAT_PLASMA))
+ materials_list[++materials_list.len] = list("name" = "Uranium", "id" = MAT_URANIUM, "amount" = machine.materials.amount(MAT_URANIUM))
+ materials_list[++materials_list.len] = list("name" = "Diamond", "id" = MAT_DIAMOND, "amount" = machine.materials.amount(MAT_DIAMOND))
+ materials_list[++materials_list.len] = list("name" = "Bananium", "id" = MAT_BANANIUM, "amount" = machine.materials.amount(MAT_BANANIUM))
+ materials_list[++materials_list.len] = list("name" = "Tranquillite", "id" = MAT_TRANQUILLITE, "amount" = machine.materials.amount(MAT_TRANQUILLITE))
+ materials_list[++materials_list.len] = list("name" = "Titanium", "id" = MAT_TITANIUM, "amount" = machine.materials.amount(MAT_TITANIUM))
+ materials_list[++materials_list.len] = list("name" = "Plastic", "id" = MAT_PLASTIC, "amount" = machine.materials.amount(MAT_PLASTIC))
+ materials_list[++materials_list.len] = list("name" = "Bluespace Mesh", "id" = MAT_BLUESPACE, "amount" = machine.materials.amount(MAT_BLUESPACE))
+ else if(submenu == SUBMENU_PRINTER_CHEMICALS)
+ for(var/datum/reagent/R in machine.reagents.reagent_list)
+ var/list/loaded_chemical = list()
+ loaded_chemicals[++loaded_chemicals.len] = loaded_chemical
+ loaded_chemical["name"] = R.name
+ loaded_chemical["volume"] = R.volume
+ loaded_chemical["id"] = R.id
/obj/machinery/computer/rdconsole/proc/can_copy_design(datum/design/D)
@@ -793,7 +801,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
files.RefreshResearch()
data["menu"] = menu
- data["submenu"] = submenu
+ data["submenu_protolathe"] = submenu_protolathe
+ data["submenu_imprinter"] = submenu_imprinter
data["wait_message"] = wait_message
data["src_ref"] = UID()
@@ -807,7 +816,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
data["loaded_item"] = null
data["category"] = selected_category
- if(menu == MENU_MAIN || menu == MENU_LEVELS)
+ if(menu == MENU_MAIN)
var/list/tech_levels = list()
data["tech_levels"] = tech_levels
for(var/v in files.known_tech)
@@ -815,83 +824,93 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(T.level <= 0)
continue
var/list/this_tech_list = list()
+ this_tech_list["id"] = T.id
this_tech_list["name"] = T.name
this_tech_list["level"] = T.level
this_tech_list["desc"] = T.desc
+ this_tech_list["ui_icon"] = T.ui_icon
tech_levels[++tech_levels.len] = this_tech_list
else if(menu == MENU_DISK)
- if(t_disk != null && t_disk.stored != null && submenu == SUBMENU_MAIN)
- var/list/disk_data = list()
- data["disk_data"] = disk_data
- disk_data["name"] = t_disk.stored.name
- disk_data["level"] = t_disk.stored.level
- disk_data["desc"] = t_disk.stored.desc
-
- else if(t_disk != null && submenu == SUBMENU_DISK_COPY)
- var/list/to_copy = list()
- data["to_copy"] = to_copy
- for(var/v in files.known_tech)
- var/datum/tech/T = files.known_tech[v]
- if(T.level <= 0)
- continue
- var/list/item = list()
- to_copy[++to_copy.len] = item
- item["name"] = T.name
- item["id"] = T.id
-
- else if(d_disk != null && d_disk.blueprint != null && submenu == SUBMENU_MAIN)
- var/list/disk_data = list()
- data["disk_data"] = disk_data
- disk_data["name"] = d_disk.blueprint.name
- var/b_type = d_disk.blueprint.build_type
- var/list/lathe_types = list()
- disk_data["lathe_types"] = lathe_types
- if(b_type)
- if(b_type & IMPRINTER) lathe_types += "Circuit Imprinter"
- if(b_type & PROTOLATHE) lathe_types += "Protolathe"
- if(b_type & AUTOLATHE) lathe_types += "Autolathe"
- if(b_type & MECHFAB) lathe_types += "Mech Fabricator"
- if(b_type & BIOGENERATOR) lathe_types += "Biogenerator"
- if(b_type & SMELTER) lathe_types += "Smelter"
- var/list/materials = list()
- disk_data["materials"] = materials
- for(var/M in d_disk.blueprint.materials)
- var/list/material = list()
- materials[++materials.len] = material
- material["name"] = CallMaterialName(M)
- material["amount"] = d_disk.blueprint.materials[M]
-
- else if(d_disk != null && submenu == SUBMENU_DISK_COPY)
- var/list/to_copy = list()
- data["to_copy"] = to_copy
- for(var/v in files.known_designs)
- var/datum/design/D = files.known_designs[v]
- if(!can_copy_design(D))
- continue
- var/list/item = list()
- to_copy[++to_copy.len] = item
- item["name"] = D.name
- item["id"] = D.id
+ if(t_disk != null)
+ if(t_disk.tech_id == null)
+ var/list/to_copy = list()
+ data["to_copy"] = to_copy
+ for(var/v in files.known_tech)
+ var/datum/tech/T = files.known_tech[v]
+ if(T.level <= 0)
+ continue
+ var/list/item = list()
+ to_copy[++to_copy.len] = item
+ item["name"] = T.name
+ item["id"] = T.id
+ else
+ var/datum/tech/stored_tech = files.find_possible_tech_with_id(t_disk.tech_id)
+ var/list/disk_data = list()
+ data["disk_data"] = disk_data
+ if(isnull(stored_tech))
+ disk_data["name"] = "Unknown"
+ disk_data["level"] = 0
+ disk_data["desc"] = "Unrecognized technology detected in disk."
+ else
+ disk_data["name"] = stored_tech.name
+ disk_data["level"] = stored_tech.level
+ disk_data["desc"] = stored_tech.desc
+
+ else if(d_disk != null)
+ if(d_disk.blueprint == null)
+ var/list/to_copy = list()
+ data["to_copy"] = to_copy
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
+ if(!can_copy_design(D))
+ continue
+ var/list/item = list()
+ to_copy[++to_copy.len] = item
+ item["name"] = D.name
+ item["id"] = D.id
+ else
+ var/list/disk_data = list()
+ data["disk_data"] = disk_data
+ disk_data["name"] = d_disk.blueprint.name
+ var/b_type = d_disk.blueprint.build_type
+ var/list/lathe_types = list()
+ disk_data["lathe_types"] = lathe_types
+ if(b_type)
+ if(b_type & IMPRINTER) lathe_types += "Circuit Imprinter"
+ if(b_type & PROTOLATHE) lathe_types += "Protolathe"
+ if(b_type & AUTOLATHE) lathe_types += "Autolathe"
+ if(b_type & MECHFAB) lathe_types += "Mech Fabricator"
+ if(b_type & BIOGENERATOR) lathe_types += "Biogenerator"
+ if(b_type & SMELTER) lathe_types += "Smelter"
+ var/list/materials = list()
+ disk_data["materials"] = materials
+ for(var/M in d_disk.blueprint.materials)
+ var/list/material = list()
+ materials[++materials.len] = material
+ material["name"] = CallMaterialName(M)
+ material["amount"] = d_disk.blueprint.materials[M]
else if(menu == MENU_DESTROY && linked_destroy && linked_destroy.loaded_item)
var/list/loaded_item_list = list()
data["loaded_item"] = loaded_item_list
loaded_item_list["name"] = linked_destroy.loaded_item.name
var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
- var/list/tech_list = list()
- loaded_item_list["origin_tech"] = tech_list
- for(var/T in temp_tech)
- var/list/tech_item = list()
- tech_list[++tech_list.len] = tech_item
- tech_item["name"] = CallTechName(T)
- tech_item["object_level"] = temp_tech[T]
- for(var/v in files.known_tech)
- var/datum/tech/F = files.known_tech[v]
- if(F.name == CallTechName(T))
- tech_item["current_level"] = F.level
- break
+ var/list/tech_levels = list()
+ data["tech_levels"] = tech_levels
+ for(var/v in files.known_tech)
+ var/datum/tech/T = files.known_tech[v]
+ if(T.level <= 0)
+ continue
+ var/list/this_tech_list = list()
+ this_tech_list["id"] = T.id
+ this_tech_list["name"] = T.name
+ this_tech_list["level"] = T.level
+ this_tech_list["desc"] = T.desc
+ this_tech_list["ui_icon"] = T.ui_icon
+ this_tech_list["object_level"] = temp_tech[T.id]
+ tech_levels[++tech_levels.len] = this_tech_list
else if(menu == MENU_LATHE && linked_lathe)
ui_machine_data(linked_lathe, data)
@@ -956,17 +975,18 @@ won't update every console in existence) but it's more of a hassle to do. Also,
#undef RESET_RESEARCH_DELAY
#undef IMPRINTER_DELAY
#undef MENU_MAIN
-#undef MENU_LEVELS
#undef MENU_DISK
#undef MENU_DESTROY
#undef MENU_LATHE
#undef MENU_IMPRINTER
#undef MENU_SETTINGS
-#undef SUBMENU_MAIN
-#undef SUBMENU_DISK_COPY
-#undef SUBMENU_LATHE_CATEGORY
-#undef SUBMENU_LATHE_MAT_STORAGE
-#undef SUBMENU_LATHE_CHEM_STORAGE
-#undef SUBMENU_SETTINGS_DEVICES
+#undef MIN_MENU
+#undef MAX_MENU
+#undef SUBMENU_PRINTER_MAIN
+#undef SUBMENU_PRINTER_SEARCH
+#undef SUBMENU_PRINTER_MATERIALS
+#undef SUBMENU_PRINTER_CHEMICALS
+#undef MIN_SUBMENU_PRINTER
+#undef MAX_SUBMENU_PRINTER
#undef BUILD_POWER
#undef DECONSTRUCT_POWER
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 2680f8c821ca..29440ffdd81f 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -110,6 +110,11 @@ research holder datum.
return
known_tech[T.id] = T
+/datum/research/proc/find_possible_tech_with_id(id)
+ for(var/datum/tech/T in possible_tech)
+ if(T.id == id)
+ return T
+
/datum/research/proc/CanAddDesign2Known(datum/design/D)
if(D.id in known_designs)
return FALSE
@@ -258,6 +263,8 @@ research holder datum.
var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech.
var/max_level = 1 // Maximum level this can be at (for job objectives)
var/rare = 1 //How much CentCom wants to get that tech. Used in supply shuttle tech cost calculation.
+ /// Name of the FontAwesome icon to represent the tech
+ var/ui_icon = null
var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = #
@@ -268,12 +275,14 @@ research holder datum.
desc = "Development of new and improved materials."
id = "materials"
max_level = 7
+ ui_icon = "layer-group"
/datum/tech/engineering
name = "Engineering Research"
desc = "Development of new and improved engineering parts and methods."
id = "engineering"
max_level = 7
+ ui_icon = "tools"
/datum/tech/plasmatech
name = "Plasma Research"
@@ -281,12 +290,14 @@ research holder datum.
id = "plasmatech"
max_level = 7
rare = 3
+ ui_icon = "fire"
/datum/tech/powerstorage
name = "Power Manipulation Technology"
desc = "The various technologies behind the storage and generation of electicity."
id = "powerstorage"
max_level = 7
+ ui_icon = "bolt"
/datum/tech/bluespace
name = "'Bluespace' Research"
@@ -294,30 +305,35 @@ research holder datum.
id = "bluespace"
max_level = 7
rare = 2
+ ui_icon = "gem"
/datum/tech/biotech
name = "Biological Technology"
desc = "Research into the deeper mysteries of life and organic substances."
id = "biotech"
max_level = 7
+ ui_icon = "seedling"
/datum/tech/combat
name = "Combat Systems Research"
desc = "The development of offensive and defensive systems."
id = "combat"
max_level = 7
+ ui_icon = "shield-alt"
/datum/tech/magnets
name = "Electromagnetic Spectrum Research"
desc = "Research into the electromagnetic spectrum. No clue how they actually work, though."
id = "magnets"
max_level = 7
+ ui_icon = "magnet"
/datum/tech/programming
name = "Data Theory Research"
desc = "The development of new computer and artificial intelligence and data storage systems."
id = "programming"
max_level = 7
+ ui_icon = "server"
/// not meant to be raised by deconstruction, do not give objects toxins as an origin_tech
/datum/tech/toxins
@@ -326,6 +342,7 @@ research holder datum.
id = "toxins"
max_level = 7
rare = 2
+ ui_icon = "explosion"
/datum/tech/syndicate
name = "Illegal Technologies Research"
@@ -333,6 +350,7 @@ research holder datum.
id = "syndicate"
max_level = 0 // Don't count towards maxed research, since it's illegal.
rare = 4
+ ui_icon = "user-astronaut"
/datum/tech/abductor
name = "Alien Technologies Research"
@@ -340,6 +358,7 @@ research holder datum.
id = "abductor"
rare = 5
level = 0
+ ui_icon = "satellite"
/*
datum/tech/arcane
@@ -368,28 +387,19 @@ datum/tech/robotics
req_tech = list("materials" = 3, "programming" = 3)
*/
-/datum/tech/proc/getCost(current_level = null)
- // Calculates tech disk's supply points sell cost
- if(!current_level)
- current_level = initial(level)
-
- if(current_level >= level)
- return 0
-
- var/cost = 0
- for(var/i = current_level + 1, i <= level, i++)
- if(i == initial(level))
- continue
- cost += i*5*rare
-
- return cost
-
/obj/item/disk/tech_disk
name = "\improper Technology Disk"
desc = "A disk for storing technology data for further research."
icon_state = "datadisk2"
materials = list(MAT_METAL=30, MAT_GLASS=10)
- var/datum/tech/stored
+ var/tech_id = null
+ var/tech_name = null
+ // These variables are copied from /datum/tech. They must be copied and cached
+ // to prevent retroactively updating all disks when a new research level is unlocked
+ /// The level of the copied technology. Please see /datum/tech.level
+ var/tech_level = 0
+ /// The rarity of the copied technology. Affects sell price. Please see /datum/tech.rare
+ var/tech_rarity = 0
var/default_name = "\improper Technology Disk"
var/default_desc = "A disk for storing technology data for further research."
@@ -398,12 +408,18 @@ datum/tech/robotics
desc = T.desc + "\n Level: [T.level] "
// NOTE: This is just a reference to the tech on the system it grabbed it from
// This seems highly fragile
- stored = T
+ tech_id = T.id
+ tech_name = T.name
+ tech_level = T.level
+ tech_rarity = T.rare
/obj/item/disk/tech_disk/proc/wipe_tech()
name = default_name
desc = default_desc
- stored = null
+ tech_id = null
+ tech_name = null
+ tech_level = 0
+ tech_rarity = 0
/obj/item/disk/design_disk
name = "\improper Component Design Disk"
diff --git a/code/modules/ruins/lavalandruin_code/dead_ratvar.dm b/code/modules/ruins/lavalandruin_code/dead_ratvar.dm
index 35c509798e12..e0db4767a23e 100644
--- a/code/modules/ruins/lavalandruin_code/dead_ratvar.dm
+++ b/code/modules/ruins/lavalandruin_code/dead_ratvar.dm
@@ -34,9 +34,6 @@
/obj/effect/clockwork/overlay/singularity_act()
return
-/obj/effect/clockwork/overlay/singularity_pull()
- return
-
/obj/effect/clockwork/overlay/singularity_pull(S, current_size)
return
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 6c87d6ca3f78..e174827f4efe 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -27,8 +27,6 @@
for(var/obj/machinery/door/airlock/D in orange(1, src))
INVOKE_ASYNC(D, PROC_REF(close), 0, 1)
-/obj/machinery/door/airlock/onShuttleMove()
- . = ..()
if(id_tag == "s_docking_airlock")
INVOKE_ASYNC(src, PROC_REF(lock))
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 8dd7ae7fdb49..57964a29704a 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -538,16 +538,29 @@
/datum/economy/simple_seller/tech_levels/begin_sell(obj/docking_port/mobile/supply/S)
temp_tech_levels = SSeconomy.tech_levels.Copy()
+/datum/economy/simple_seller/tech_levels/proc/get_price(tech_rarity, tech_level, sold_level = null)
+ // Calculates tech disk's supply points sell cost
+ if(!sold_level)
+ sold_level = 1
+
+ if(sold_level >= tech_level)
+ return 0
+
+ var/cost = 0
+ for(var/i in (sold_level + 1) to tech_level)
+ cost += i * 5 * tech_rarity
+
+ return cost
+
/datum/economy/simple_seller/tech_levels/check_sell(obj/docking_port/mobile/supply/S, atom/movable/AM)
if(istype(AM, /obj/item/disk/tech_disk))
var/obj/item/disk/tech_disk/disk = AM
- if(!disk.stored)
+ if(!disk.tech_id)
return COMSIG_CARGO_SELL_WRONG
- var/datum/tech/tech = disk.stored
- var/cost = tech.getCost(temp_tech_levels[tech.id])
+ var/cost = get_price(disk.tech_rarity, disk.tech_level, temp_tech_levels[disk.tech_id])
if(cost)
- temp_tech_levels[tech.id] = tech.level
+ temp_tech_levels[disk.tech_id] = disk.tech_level
return COMSIG_CARGO_SELL_NORMAL
return COMSIG_CARGO_SELL_WRONG
@@ -556,28 +569,27 @@
return
var/obj/item/disk/tech_disk/disk = AM
- if(!disk.stored)
+ if(!disk.tech_id)
return
- var/datum/tech/tech = disk.stored
- var/cost = tech.getCost(SSeconomy.tech_levels[tech.id])
+ var/cost = get_price(disk.tech_rarity, disk.tech_level, SSeconomy.tech_levels[disk.tech_id])
if(!cost)
return
- SSeconomy.tech_levels[tech.id] = tech.level
+ SSeconomy.tech_levels[disk.tech_id] = disk.tech_level
SSblackbox.record_feedback("tally", "cargo tech disks sold", 1, "amount")
SSblackbox.record_feedback("tally", "cargo tech disks sold", cost, "credits")
var/datum/economy/line_item/cargo_item = new
cargo_item.account = SSeconomy.cargo_account
cargo_item.credits = cost / 2
- cargo_item.reason = "[tech.name] - new data."
+ cargo_item.reason = "[disk.tech_name] - new data."
manifest.line_items += cargo_item
var/datum/economy/line_item/science_item = new
science_item.account = GLOB.station_money_database.get_account_by_department(DEPARTMENT_SCIENCE)
science_item.credits = cost / 2
- science_item.reason = "[tech.name] - new data."
+ science_item.reason = "[disk.tech_name] - new data."
manifest.line_items += science_item
/datum/economy/simple_seller/tech_levels/sell_wrong(obj/docking_port/mobile/supply/S, atom/movable/AM, datum/economy/cargo_shuttle_manifest/manifest)
@@ -589,16 +601,15 @@
item.credits = 0
var/obj/item/disk/tech_disk/disk = AM
- if(!disk.stored)
+ if(!disk.tech_id)
item.reason = "Blank tech disk."
manifest.line_items += item
SSblackbox.record_feedback("tally", "cargo tech disks sold", 1, "blank")
return
- var/datum/tech/tech = disk.stored
- var/cost = tech.getCost(SSeconomy.tech_levels[tech.id])
+ var/cost = get_price(disk.tech_rarity, disk.tech_level, SSeconomy.tech_levels[disk.tech_id])
if(!cost)
- item.reason = "[tech.name] - no new data."
+ item.reason = "[disk.tech_name] - no new data."
manifest.line_items += item
SSblackbox.record_feedback("tally", "cargo tech disks sold", 1, "repeat")
diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm
index 569f121d9a8a..3c9ce4f80ebe 100644
--- a/code/modules/station_goals/bsa.dm
+++ b/code/modules/station_goals/bsa.dm
@@ -32,38 +32,25 @@
density = TRUE
anchored = TRUE
+/obj/machinery/bsa/wrench_act(mob/living/user, obj/item/I)
+ default_unfasten_wrench(user, I, 1 SECONDS)
+ return TRUE
+
+/obj/machinery/bsa/multitool_act(mob/living/user, obj/item/multitool/M)
+ M.buffer = src
+ to_chat(user, "You store linkage information in [M]'s buffer. ")
+ return TRUE
+
/obj/machinery/bsa/back
name = "Bluespace Artillery Generator"
desc = "Generates cannon pulse. Needs to be linked with a fusor. "
icon_state = "power_box"
-/obj/machinery/bsa/back/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/multitool))
- var/obj/item/multitool/M = W
- M.buffer = src
- to_chat(user, "You store linkage information in [W]'s buffer. ")
- else if(istype(W, /obj/item/wrench))
- default_unfasten_wrench(user, W, 10)
- return TRUE
- else
- return ..()
-
/obj/machinery/bsa/front
name = "Bluespace Artillery Bore"
desc = "Do not stand in front of cannon during operation. Needs to be linked with a fusor."
icon_state = "emitter_center"
-/obj/machinery/bsa/front/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/multitool))
- var/obj/item/multitool/M = W
- M.buffer = src
- to_chat(user, "You store linkage information in [W]'s buffer. ")
- else if(istype(W, /obj/item/wrench))
- default_unfasten_wrench(user, W, 10)
- return TRUE
- else
- return ..()
-
/obj/machinery/bsa/middle
name = "Bluespace Artillery Fusor"
desc = "Contents classifed by Nanotrasen Naval Command. Needs to be linked with the other BSA parts using multitool."
@@ -71,23 +58,19 @@
var/obj/machinery/bsa/back/back
var/obj/machinery/bsa/front/front
-/obj/machinery/bsa/middle/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/multitool))
- var/obj/item/multitool/M = W
- if(M.buffer)
- if(istype(M.buffer,/obj/machinery/bsa/back))
- back = M.buffer
- M.buffer = null
- to_chat(user, "You link [src] with [back]. ")
- else if(istype(M.buffer,/obj/machinery/bsa/front))
- front = M.buffer
- M.buffer = null
- to_chat(user, "You link [src] with [front]. ")
- else if(istype(W, /obj/item/wrench))
- default_unfasten_wrench(user, W, 10)
- return TRUE
- else
- return ..()
+/obj/machinery/bsa/middle/multitool_act(mob/living/user, obj/item/multitool/M)
+ . = TRUE
+ if(!M.buffer)
+ to_chat(user, "[M]'s buffer is empty! ")
+ return
+ if(istype(M.buffer,/obj/machinery/bsa/back))
+ back = M.buffer
+ M.buffer = null
+ to_chat(user, "You link [src] with [back]. ")
+ else if(istype(M.buffer,/obj/machinery/bsa/front))
+ front = M.buffer
+ M.buffer = null
+ to_chat(user, "You link [src] with [front]. ")
/obj/machinery/bsa/middle/proc/check_completion()
if(!front || !back)
diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm
index 2f62ba3455a4..45ccd25faafb 100644
--- a/code/modules/surgery/organs/brain.dm
+++ b/code/modules/surgery/organs/brain.dm
@@ -206,10 +206,6 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
-/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs.
- QDEL_NULL(brainmob)
- return ..()
-
/obj/item/organ/internal/brain/cluwne
/obj/item/organ/internal/brain/cluwne/insert(mob/living/target, special = 0, make_cluwne = 1)
diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm
index 90d01176c052..7704c6707c54 100644
--- a/code/modules/surgery/organs/organ_icon.dm
+++ b/code/modules/surgery/organs/organ_icon.dm
@@ -55,10 +55,6 @@
var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_bodyparts_by_name["eyes"]
if(eyes) eyes.update_colour()
-/obj/item/organ/external/head/remove(mob/living/user, ignore_children)
- get_icon()
- . = ..()
-
/obj/item/organ/external/proc/get_icon(skeletal)
// Kasparrov, you monster
if(force_icon)
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index c53f1285d552..6a67faa8ccd9 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -133,6 +133,17 @@
/obj/item/organ/internal/emp_act(severity)
if(!is_robotic() || emp_proof)
return
+
+ var/we_done = FALSE
+ for(var/organ_tag in organ_datums)
+ var/datum/organ/borgan = organ_datums[organ_tag]
+ if(borgan.on_successful_emp())
+ we_done = TRUE
+
+ if(we_done)
+ return
+
+ // No EMP handling was done, lets just give em damage
switch(severity)
if(1)
receive_damage(20, 1)
@@ -368,26 +379,6 @@
head_organ.facial_colour = "#D8C078"
H.update_fhair()
-/obj/item/organ/internal/emp_act(severity)
- if(!is_robotic() || emp_proof)
- return
-
- var/we_done = FALSE
- for(var/organ_tag in organ_datums)
- var/datum/organ/borgan = organ_datums[organ_tag]
- if(borgan.on_successful_emp())
- we_done = TRUE
-
- if(we_done)
- return
-
- // No EMP handling was done, lets just give em damage
- switch(severity)
- if(1)
- receive_damage(20, 1)
- if(2)
- receive_damage(7, 1)
-
/obj/item/organ/internal/handle_germs()
..()
if(germ_level >= INFECTION_LEVEL_TWO)
diff --git a/code/modules/surgery/organs/subtypes/standard_organs.dm b/code/modules/surgery/organs/subtypes/standard_organs.dm
index d4f544507584..bba265b25374 100644
--- a/code/modules/surgery/organs/subtypes/standard_organs.dm
+++ b/code/modules/surgery/organs/subtypes/standard_organs.dm
@@ -283,6 +283,7 @@
owner.update_fhair()
owner.update_head_accessory()
owner.update_markings()
+ get_icon()
. = ..()
/obj/item/organ/external/head/replaced()
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index 21393d49fc19..5878ead2163a 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -54,6 +54,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
/obj/item/gps/dropped(mob/user, silent)
REMOVE_TRAIT(user, TRAIT_HAS_GPS, "GPS[UID()]")
+ REMOVE_TRAIT(user, TRAIT_CAN_VIEW_HEALTH, "HEALTH[UID()]")
return ..()
/obj/item/gps/emp_act(severity)
diff --git a/code/modules/tgui/modules/crew_monitor.dm b/code/modules/tgui/modules/crew_monitor.dm
index 5042d8642f48..1c2a8dbb3c24 100644
--- a/code/modules/tgui/modules/crew_monitor.dm
+++ b/code/modules/tgui/modules/crew_monitor.dm
@@ -1,9 +1,26 @@
+#define MIN_ZOOM 1
+#define MAX_ZOOM 8
+#define MIN_TAB_INDEX 0
+#define MAX_TAB_INDEX 1
+
/datum/ui_module/crew_monitor
name = "Монитор экипажа"
var/is_advanced = FALSE
var/viewing_current_z_level
/// If true, we'll see everyone, regardless of their suit sensors.
var/ignore_sensors = FALSE
+ /// The ID of the currently opened UI tab
+ var/tab_index = 0
+ /// The zoom level of the UI map view
+ var/zoom = 1
+ /// The X offset of the UI map
+ var/offset_x = 0
+ /// The Y offset of the UI map
+ var/offset_y = 0
+ /// A list of displayed names. Displayed names were intentionally chosen over ckeys,
+ /// refs, or uids, because exposing any of the aforementioned to the client could allow
+ /// an exploit to detect changelings on sensors.
+ var/highlighted_names = list()
/datum/ui_module/crew_monitor/ui_act(action, params)
if(..())
@@ -31,6 +48,33 @@
if(!is_advanced)
return
viewing_current_z_level = text2num(params["new_level"])
+ if("set_tab_index")
+ var/new_tab_index = text2num(params["tab_index"])
+ if(isnull(new_tab_index) || new_tab_index < MIN_TAB_INDEX || new_tab_index > MAX_TAB_INDEX)
+ return
+ tab_index = new_tab_index
+ if("set_zoom")
+ var/new_zoom = text2num(params["zoom"])
+ if(isnull(new_zoom) || new_zoom < MIN_ZOOM || new_zoom > MAX_ZOOM)
+ return
+ zoom = new_zoom
+ if("set_offset")
+ var/new_offset_x = text2num(params["offset_x"])
+ var/new_offset_y = text2num(params["offset_y"])
+ if(isnull(new_offset_x) || isnull(new_offset_y))
+ return
+ offset_x = new_offset_x
+ offset_y = new_offset_y
+ if("add_highlighted_name")
+ // Intentionally not sanitized as the name is not used for rendering
+ var/name = params["name"]
+ highlighted_names += list(name)
+ if("remove_highlighted_name")
+ // Intentionally not sanitized as the name is not used for rendering
+ var/name = params["name"]
+ highlighted_names -= list(name)
+ if("clear_highlighted_names")
+ highlighted_names = list()
/datum/ui_module/crew_monitor/ui_state(mob/user)
return GLOB.default_state
@@ -56,11 +100,16 @@
viewing_current_z_level = level_name_to_num(MAIN_STATION) // by default, set it to the station
data["viewing_current_z_level"] = viewing_current_z_level
+ data["tabIndex"] = tab_index
+ data["zoom"] = zoom
+ data["offsetX"] = offset_x
+ data["offsetY"] = offset_y
data["isAI"] = isAI(user)
data["isObserver"] = isobserver(user)
data["ignoreSensors"] = ignore_sensors
data["crewmembers"] = GLOB.crew_repository.health_data(viewing_current_z_level, ignore_sensors)
+ data["highlightedNames"] = highlighted_names
data["critThreshold"] = HEALTH_THRESHOLD_CRIT
return data
@@ -82,3 +131,8 @@
/datum/ui_module/crew_monitor/ghost/ui_state(mob/user)
return GLOB.observer_state
+
+#undef MIN_ZOOM
+#undef MAX_ZOOM
+#undef MIN_TAB_INDEX
+#undef MAX_TAB_INDEX
diff --git a/code/modules/unit_tests/map_tests.dm b/code/modules/unit_tests/map_tests.dm
index f4e869ceef8c..067e7358d5b7 100644
--- a/code/modules/unit_tests/map_tests.dm
+++ b/code/modules/unit_tests/map_tests.dm
@@ -154,3 +154,28 @@
continue // same object, continue
if(cable.d1 == other_cable.d1 && cable.d2 == other_cable.d2)
Fail(T, "tile has duplicated cables.")
+
+/datum/map_per_tile_test/missing_pipe_connection
+
+/datum/map_per_tile_test/missing_pipe_connection/CheckTile(turf/T)
+ var/obj/machinery/atmospherics/pipe/simple/pipe = locate() in T.contents
+ if(isnull(pipe))
+ return
+ if(!pipe.node1 && !pipe.node2)
+ Fail(T, "[pipe] ([pipe.type]) missing both nodes.")
+ return
+ if(istype(pipe, /obj/machinery/atmospherics/pipe/simple/heat_exchanging) && (pipe.node1 || pipe.node2))
+ return // H/E pipes only need one end, because they don't always become full loops
+ if(!pipe.node1)
+ Fail(T, "[pipe] ([pipe.type]) missing node1. ([uppertext(dir2text(pipe.initialize_directions & ~(get_dir(pipe, pipe.node2))))])")
+ if(!pipe.node2)
+ Fail(T, "[pipe] ([pipe.type]) missing node2. ([uppertext(dir2text(pipe.initialize_directions & ~(get_dir(pipe, pipe.node1))))])")
+
+/datum/map_per_tile_test/unary_device_connection
+
+/datum/map_per_tile_test/unary_device_connection/CheckTile(turf/T)
+ var/obj/machinery/atmospherics/unary/unary_device = locate() in T.contents
+ if(isnull(unary_device))
+ return
+ if(!unary_device.node)
+ Fail(T, "[unary_device] ([unary_device.type]) missing node. ([uppertext(dir2text(unary_device.dir))])")
diff --git a/code/modules/vehicle/tg_vehicles/tg_vehicles.dm b/code/modules/vehicle/tg_vehicles/tg_vehicles.dm
index 75fbb8425bf0..acdcadef70e2 100644
--- a/code/modules/vehicle/tg_vehicles/tg_vehicles.dm
+++ b/code/modules/vehicle/tg_vehicles/tg_vehicles.dm
@@ -185,12 +185,6 @@
var/dir_to_move = get_dir(trailer.loc, old_loc)
step(trailer, dir_to_move)
-/obj/tgvehicle/generate_action_type(actiontype)
- var/datum/action/vehicle/A = ..()
- . = A
- if(istype(A))
- A.vehicle_ridden_target = src
-
/obj/tgvehicle/post_unbuckle_mob(mob/living/M)
remove_occupant(M)
return ..()
diff --git a/icons/_nanomaps/CereStation_nanomap_z1.png b/icons/_nanomaps/CereStation_nanomap_z1.png
index e7dad57c4adc..cd1048b55e9c 100644
Binary files a/icons/_nanomaps/CereStation_nanomap_z1.png and b/icons/_nanomaps/CereStation_nanomap_z1.png differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index cdbe14fd2567..9272241406fe 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/fleshling.dmi b/icons/mob/fleshling.dmi
new file mode 100644
index 000000000000..19c2b0be9f0c
Binary files /dev/null and b/icons/mob/fleshling.dmi differ
diff --git a/icons/mob/hud/sechud.dmi b/icons/mob/hud/sechud.dmi
index dda149df1895..ad763761c71c 100644
Binary files a/icons/mob/hud/sechud.dmi and b/icons/mob/hud/sechud.dmi differ
diff --git a/icons/mob/inhands/weapons_lefthand.dmi b/icons/mob/inhands/weapons_lefthand.dmi
index 6815485c27bc..64a2bd06532d 100644
Binary files a/icons/mob/inhands/weapons_lefthand.dmi and b/icons/mob/inhands/weapons_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons_righthand.dmi b/icons/mob/inhands/weapons_righthand.dmi
index 612365aed42c..0f1bce7849c0 100644
Binary files a/icons/mob/inhands/weapons_righthand.dmi and b/icons/mob/inhands/weapons_righthand.dmi differ
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index 54a953367e2e..82504547e83a 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ
diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi
index 8671c70bf659..dd33948a4ca1 100644
Binary files a/icons/mob/simple_human.dmi and b/icons/mob/simple_human.dmi differ
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index 7f44f6a4f87b..6d8bdf4705eb 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index bc5888cb9e14..b1441ffca927 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/weapons/melee.dmi b/icons/obj/weapons/melee.dmi
index 041abdf63184..1c7db290f2c1 100644
Binary files a/icons/obj/weapons/melee.dmi and b/icons/obj/weapons/melee.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 481c6339649b..3bac9fef86b5 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -763,6 +763,8 @@
#include "code\game\gamemodes\miniantags\revenant\revenant.dm"
#include "code\game\gamemodes\miniantags\revenant\revenant_abilities.dm"
#include "code\game\gamemodes\miniantags\revenant\revenant_spawn_event.dm"
+#include "code\game\gamemodes\miniantags\tourist\tourist_arrivals.dm"
+#include "code\game\gamemodes\miniantags\tourist\tourist_objectives.dm"
#include "code\game\gamemodes\nuclear\nuclear.dm"
#include "code\game\gamemodes\nuclear\nuclear_challenge.dm"
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
@@ -1213,6 +1215,7 @@
#include "code\game\objects\items\weapons\grenades\confetti.dm"
#include "code\game\objects\items\weapons\grenades\custom_grenades.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
+#include "code\game\objects\items\weapons\grenades\firecracker.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm"
#include "code\game\objects\items\weapons\grenades\frag.dm"
#include "code\game\objects\items\weapons\grenades\ghettobomb.dm"
@@ -1604,6 +1607,7 @@
#include "code\modules\awaymissions\mission_code\shuttle_shadow.dm"
#include "code\modules\awaymissions\mission_code\ghost_role_spawners\golems.dm"
#include "code\modules\awaymissions\mission_code\ghost_role_spawners\oldstation_spawns.dm"
+#include "code\modules\awaymissions\mission_code\ruins\deepstorage.dm"
#include "code\modules\awaymissions\mission_code\ruins\derelict5.dm"
#include "code\modules\awaymissions\mission_code\ruins\gps_ruin.dm"
#include "code\modules\awaymissions\mission_code\ruins\moonoutpost19.dm"
diff --git a/sound/machines/defib_charge.ogg b/sound/machines/defib_charge.ogg
index 3e2be160fd1c..9f963b05e750 100644
Binary files a/sound/machines/defib_charge.ogg and b/sound/machines/defib_charge.ogg differ
diff --git a/tgui/packages/tgui/components/LabeledList.tsx b/tgui/packages/tgui/components/LabeledList.tsx
index a3e794a92456..d90b1a246676 100644
--- a/tgui/packages/tgui/components/LabeledList.tsx
+++ b/tgui/packages/tgui/components/LabeledList.tsx
@@ -33,6 +33,7 @@ type LabeledListItemProps = {
/** @deprecated */
content?: any;
children?: InfernoNode;
+ labelStyle?: Record;
};
const LabeledListItem = (props: LabeledListItemProps) => {
@@ -47,10 +48,16 @@ const LabeledListItem = (props: LabeledListItemProps) => {
content,
children,
preserveWhitespace,
+ labelStyle,
} = props;
let listItem = (
-
+
{label ? label + ':' : null}
{
if (e.stopPropagation) {
e.stopPropagation();
@@ -26,13 +30,12 @@ export class NanoMap extends Component {
const Ycenter = window.innerHeight / 2 - 256;
this.state = {
- offsetX: 128,
- offsetY: 48,
- transform: 'none',
+ offsetX: props.offsetX ?? 0,
+ offsetY: props.offsetY ?? 0,
dragging: false,
originX: null,
originY: null,
- zoom: 1,
+ zoom: props.zoom ?? 1,
};
// Dragging
@@ -54,13 +57,14 @@ export class NanoMap extends Component {
const newOffsetX = e.screenX - state.originX;
const newOffsetY = e.screenY - state.originY;
if (prevState.dragging) {
- state.offsetX += newOffsetX;
- state.offsetY += newOffsetY;
+ state.offsetX += newOffsetX / state.zoom;
+ state.offsetY += newOffsetY / state.zoom;
state.originX = e.screenX;
state.originY = e.screenY;
} else {
state.dragging = true;
}
+ props.onOffsetChange?.(e, state);
return state;
});
pauseEvent(e);
@@ -80,16 +84,31 @@ export class NanoMap extends Component {
this.handleZoom = (_e, value) => {
this.setState((state) => {
const newZoom = Math.min(Math.max(value, 1), 8);
- let zoomDiff = (newZoom - state.zoom) * 1.5;
state.zoom = newZoom;
- state.offsetX = state.offsetX - 262 * zoomDiff;
- state.offsetY = state.offsetY - 256 * zoomDiff;
if (props.onZoom) {
props.onZoom(state.zoom);
}
return state;
});
};
+
+ this.handleReset = (e) => {
+ this.setState((state) => {
+ state.offsetX = 0;
+ state.offsetY = 0;
+ state.zoom = 1;
+ this.handleZoom(e, 1);
+ props.onOffsetChange?.(e, state);
+ });
+ };
+ }
+
+ getChildContext() {
+ return {
+ map: {
+ zoom: this.state.zoom,
+ },
+ };
}
render() {
@@ -98,14 +117,17 @@ export class NanoMap extends Component {
const { children } = this.props;
const mapUrl = config.map + '_nanomap_z1.png';
- const mapSize = 510 * zoom + 'px';
+ const mapSize = MAP_SIZE * zoom + 'px';
const newStyle = {
width: mapSize,
height: mapSize,
- 'margin-top': offsetY + 'px',
- 'margin-left': offsetX + 'px',
+ 'margin-top': offsetY * zoom + 'px',
+ 'margin-left': offsetX * zoom + 'px',
'overflow': 'hidden',
'position': 'relative',
+ top: '50%',
+ left: '50%',
+ transform: 'translate(-50%, -50%)',
'background-size': 'cover',
'background-repeat': 'no-repeat',
'text-align': 'center',
@@ -128,21 +150,35 @@ export class NanoMap extends Component {
{children}
-
+
);
}
}
const NanoMapMarker = (props, context) => {
- const { x, y, zoom = 1, icon, tooltip, color } = props;
- const rx = x * 2 * zoom - zoom - 3;
- const ry = y * 2 * zoom - zoom - 3;
+ const {
+ map: { zoom },
+ } = context;
+ const { x, y, icon, tooltip, color, children, ...rest } = props;
+ const pixelsPerTurfAtZoom = PIXELS_PER_TURF * zoom;
+ // For some reason the X and Y are offset by 1
+ const rx = (x - 1) * pixelsPerTurfAtZoom;
+ const ry = (y - 1) * pixelsPerTurfAtZoom;
return (
-
-
+
+ {children}
@@ -151,19 +187,47 @@ const NanoMapMarker = (props, context) => {
NanoMap.Marker = NanoMapMarker;
+const NanoMapMarkerIcon = (props, context) => {
+ const {
+ map: { zoom },
+ } = context;
+ const { icon, color, ...rest } = props;
+ const markerSize = PIXELS_PER_TURF * zoom + 4 / Math.ceil(zoom / 4);
+ return (
+
+
+
+ );
+};
+
+NanoMap.MarkerIcon = NanoMapMarkerIcon;
+
const NanoMapZoomer = (props, context) => {
return (
-
- v + 'x'}
- value={props.zoom}
- onDrag={(e, v) => props.onZoom(e, v)}
- />
+
+
+ v + 'x'}
+ value={props.zoom}
+ onDrag={(e, v) => props.onZoom(e, v)}
+ />
+ props.onReset?.(e)} />
+
diff --git a/tgui/packages/tgui/interfaces/AtmosControl.js b/tgui/packages/tgui/interfaces/AtmosControl.js
index 8267b16e989d..033298866f5c 100644
--- a/tgui/packages/tgui/interfaces/AtmosControl.js
+++ b/tgui/packages/tgui/interfaces/AtmosControl.js
@@ -102,24 +102,23 @@ const AtmosControlDataView = (_properties, context) => {
};
const AtmosControlMapView = (_properties, context) => {
- const { data } = useBackend(context);
- const [zoom, setZoom] = useLocalState(context, 'zoom', 1);
+ const { act, data } = useBackend(context);
const { alarms } = data;
return (
- setZoom(v)}>
+
{alarms
.filter((a) => a.z === 3) // SS220 EDIT - ORIGIN: 2
.map((aa) => (
// The AA means air alarm, and nothing else
- act('open_alarm', { aref: aa.ref })}
/>
))}
diff --git a/tgui/packages/tgui/interfaces/CrewMonitor.js b/tgui/packages/tgui/interfaces/CrewMonitor.js
index baf54f7ac07e..169a6c6d72c3 100644
--- a/tgui/packages/tgui/interfaces/CrewMonitor.js
+++ b/tgui/packages/tgui/interfaces/CrewMonitor.js
@@ -5,6 +5,7 @@ import { Box, Button, Dropdown, Input, NanoMap, Section, Stack, Table, Tabs } fr
import { TableCell } from '../components/Table';
import { COLORS } from '../constants';
import { Window } from '../layouts';
+import { ButtonCheckbox } from '../components/Button';
const getStatText = (cm, critThreshold) => {
if (cm.dead) {
@@ -38,7 +39,11 @@ const getStatColor = (cm, critThreshold) => {
export const CrewMonitor = (props, context) => {
const { act, data } = useBackend(context);
- const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0);
+ const [tabIndex, setTabIndexInternal] = useLocalState(context, 'tabIndex', data.tabIndex);
+ const setTabIndex = (index) => {
+ setTabIndexInternal(index);
+ act('set_tab_index', { tab_index: index });
+ };
const decideTab = (index) => {
switch (index) {
case 0:
@@ -74,7 +79,7 @@ export const CrewMonitor = (props, context) => {
const CrewMonitorDataView = (_properties, context) => {
const { act, data } = useBackend(context);
const crew = sortBy((cm) => cm.name)(data.crewmembers || []);
- const { possible_levels, viewing_current_z_level, is_advanced } = data;
+ const { possible_levels, viewing_current_z_level, is_advanced, highlightedNames } = data;
const [search, setSearch] = useLocalState(context, 'search', '');
const searcher = createSearch(search, (cm) => {
return cm.name + '|' + cm.assignment + '|' + cm.area;
@@ -103,96 +108,152 @@ const CrewMonitorDataView = (_properties, context) => {
+
+ act('clear_highlighted_names')} />
+
Name
Status
Location
- {crew.filter(searcher).map((cm) => (
-
-
- {cm.name} ({cm.assignment})
-
-
-
- {getStatText(cm, data.critThreshold)}
-
- {cm.sensor_type >= 2 || data.ignoreSensors ? (
-
- {'('}
-
- {cm.oxy}
-
- {'|'}
-
- {cm.tox}
-
- {'|'}
-
- {cm.fire}
-
- {'|'}
-
- {cm.brute}
-
- {')'}
+ {crew.filter(searcher).map((cm) => {
+ const highlighted = highlightedNames.includes(cm.name);
+ return (
+
+
+
+ act(highlighted ? 'remove_highlighted_name' : 'add_highlighted_name', { name: cm.name })
+ }
+ />
+
+
+ {cm.name} ({cm.assignment})
+
+
+
+ {getStatText(cm, data.critThreshold)}
- ) : null}
-
-
- {cm.sensor_type === 3 || data.ignoreSensors ? (
- data.isAI || data.isObserver ? (
-
- act('track', {
- track: cm.ref,
- })
- }
- />
+ {cm.sensor_type >= 2 || data.ignoreSensors ? (
+
+ {'('}
+
+ {cm.oxy}
+
+ {'|'}
+
+ {cm.tox}
+
+ {'|'}
+
+ {cm.fire}
+
+ {'|'}
+
+ {cm.brute}
+
+ {')'}
+
+ ) : null}
+
+
+ {cm.sensor_type === 3 || data.ignoreSensors ? (
+ data.isAI || data.isObserver ? (
+
+ act('track', {
+ track: cm.ref,
+ })
+ }
+ />
+ ) : (
+ cm.area + ' (' + cm.x + ', ' + cm.y + ')'
+ )
) : (
- cm.area + ' (' + cm.x + ', ' + cm.y + ')'
- )
- ) : (
-
- Not Available
-
- )}
-
-
- ))}
+
+ Not Available
+
+ )}
+
+
+ );
+ })}
);
};
+const HighlightedMarker = (props, context) => {
+ const { color, ...rest } = props;
+ return (
+
+
+
+ );
+};
+
const CrewMonitorMapView = (_properties, context) => {
const { act, data } = useBackend(context);
- const [zoom, setZoom] = useLocalState(context, 'zoom', 1);
+ const { highlightedNames } = data;
return (
- setZoom(v)}>
+ act('set_zoom', { zoom })}
+ onOffsetChange={(e, state) =>
+ act('set_offset', {
+ offset_x: state.offsetX,
+ offset_y: state.offsetY,
+ })
+ }
+ >
{data.crewmembers
.filter((x) => x.sensor_type === 3 || data.ignoreSensors)
- .map((cm) => (
-
- data.isObserver
- ? act('track', {
- track: cm.ref,
- })
- : null
- }
- />
- ))}
+ .map((cm) => {
+ const color = getStatColor(cm, data.critThreshold);
+ const highlighted = highlightedNames.includes(cm.name);
+ const onClick = () =>
+ data.isObserver
+ ? act('track', {
+ track: cm.ref,
+ })
+ : null;
+ const onDblClick = () =>
+ act(highlighted ? 'remove_highlighted_name' : 'add_highlighted_name', { name: cm.name });
+ const tooltip = cm.name + ' (' + cm.assignment + ')';
+ if (highlighted) {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
+ })}
);
diff --git a/tgui/packages/tgui/interfaces/Orbit.js b/tgui/packages/tgui/interfaces/Orbit.js
index 731012af3485..119172ce7ae9 100644
--- a/tgui/packages/tgui/interfaces/Orbit.js
+++ b/tgui/packages/tgui/interfaces/Orbit.js
@@ -89,7 +89,7 @@ const OrbitedButton = (props, context) => {
export const Orbit = (props, context) => {
const { act, data } = useBackend(context);
- const { alive, antagonists, highlights, response_teams, auto_observe, dead, ssd, ghosts, misc, npcs } = data;
+ const { alive, antagonists, highlights, response_teams, tourist, auto_observe, dead, ssd, ghosts, misc, npcs } = data;
const [searchText, setSearchText] = useLocalState(context, 'searchText', '');
@@ -109,6 +109,7 @@ export const Orbit = (props, context) => {
const orbitMostRelevant = (searchText) => {
for (const source of [
sortedAntagonists.map(([_, antags]) => antags),
+ tourist,
highlights,
alive,
ghosts,
@@ -178,6 +179,8 @@ export const Orbit = (props, context) => {
+
+
diff --git a/tgui/packages/tgui/interfaces/RndConsole.js b/tgui/packages/tgui/interfaces/RndConsole.js
deleted file mode 100644
index fd193f78ea0b..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsole.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import { useBackend } from '../backend';
-import { Window } from '../layouts';
-import { Box, NoticeBox } from '../components';
-import {
- SettingsMenu,
- RndRoute,
- DeconstructionMenu,
- MainMenu,
- RndNavbar,
- CurrentLevels,
- DataDiskMenu,
- LatheMenu,
-} from './RndConsoleComponents';
-
-export const MENU = {
- MAIN: 0,
- LEVELS: 1,
- DISK: 2,
- DESTROY: 3,
- LATHE: 4,
- IMPRINTER: 5,
- SETTINGS: 6,
-};
-
-export const SUBMENU = {
- MAIN: 0,
- DISK_COPY: 1,
- LATHE_CATEGORY: 1,
- LATHE_MAT_STORAGE: 2,
- LATHE_CHEM_STORAGE: 3,
- SETTINGS_DEVICES: 1,
-};
-
-export const RndConsole = (properties, context) => {
- const { data } = useBackend(context);
- const { wait_message } = data;
-
- return (
-
-
-
-
- } />
- } />
- } />
- } />
- n === MENU.LATHE || n === MENU.IMPRINTER} render={() => } />
- } />
- {wait_message ? (
-
-
- {wait_message}
-
-
- ) : null}
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/DataDiskMenu.js b/tgui/packages/tgui/interfaces/RndConsole/DataDiskMenu.js
similarity index 55%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/DataDiskMenu.js
rename to tgui/packages/tgui/interfaces/RndConsole/DataDiskMenu.js
index 03b9a345fa5e..ddea4dc3453f 100644
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/DataDiskMenu.js
+++ b/tgui/packages/tgui/interfaces/RndConsole/DataDiskMenu.js
@@ -1,12 +1,10 @@
import { useBackend } from '../../backend';
import { Button, LabeledList, Section, Box } from '../../components';
-import { RndNavButton, RndRoute } from './index';
-import { SUBMENU } from '../RndConsole';
const DISK_TYPE_DESIGN = 'design';
const DISK_TYPE_TECH = 'tech';
-const TechSummary = (properties, context) => {
+const TechSummary = (props, context) => {
const { data, act } = useBackend(context);
const { disk_data } = data;
@@ -23,15 +21,13 @@ const TechSummary = (properties, context) => {
act('updt_tech')} />
- act('clear_tech')} />
-
);
};
// summarize a design disk contents from d_disk
-const LatheSummary = (properties, context) => {
+const LatheSummary = (props, context) => {
const { data, act } = useBackend(context);
const { disk_data } = data;
if (!disk_data) {
@@ -63,79 +59,40 @@ const LatheSummary = (properties, context) => {
act('updt_design')} />
- act('clear_design')} />
-
);
};
-const EmptyDisk = (properties, context) => {
- const { data } = useBackend(context);
- const { disk_type } = data;
- return (
-
- This disk is empty.
-
-
-
-
-
- );
-};
-
-const EjectDisk = (properties, context) => {
- const { data, act } = useBackend(context);
- const { disk_type } = data;
-
- if (!disk_type) {
- return null;
- }
-
+const DiskSection = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { disk_data } = data;
return (
- {
- const action = disk_type === DISK_TYPE_TECH ? 'eject_tech' : 'eject_design';
- act(action);
- }}
+
+ act('erase_disk')} />
+ {
+ act('eject_disk');
+ }}
+ />
+ >
+ }
+ {...props}
/>
);
};
-const ContentsSubmenu = (properties, context) => {
- const {
- data: { disk_data, disk_type },
- } = useBackend(context);
-
- const body = () => {
- if (!disk_data) {
- return ;
- }
- switch (disk_type) {
- case DISK_TYPE_DESIGN:
- return ;
- case DISK_TYPE_TECH:
- return ;
- default:
- return null;
- }
- };
-
- return ;
-};
-
-const CopySubmenu = (properties, context) => {
+const CopySubmenu = (props, context) => {
const { data, act } = useBackend(context);
const { disk_type, to_copy } = data;
+ const { title } = props;
return (
-
+
{to_copy
@@ -157,22 +114,38 @@ const CopySubmenu = (properties, context) => {
))}
-
+
);
};
-export const DataDiskMenu = (properties, context) => {
+export const DataDiskMenu = (props, context) => {
const { data } = useBackend(context);
- const { disk_type } = data;
+ const { disk_type, disk_data } = data;
if (!disk_type) {
- return null; // can't access menu without a disk
+ return ;
}
- return (
- <>
- } />
- } />
- >
- );
+ switch (disk_type) {
+ case DISK_TYPE_DESIGN:
+ return disk_data ? (
+
+
+
+ ) : (
+
+ );
+ case DISK_TYPE_TECH:
+ if (disk_data) {
+ return (
+
+
+
+ );
+ } else {
+ return ;
+ }
+ default:
+ return <>UNRECOGNIZED DISK TYPE>;
+ }
};
diff --git a/tgui/packages/tgui/interfaces/RndConsole/DeconstructionMenu.js b/tgui/packages/tgui/interfaces/RndConsole/DeconstructionMenu.js
new file mode 100644
index 000000000000..477bd787836e
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/RndConsole/DeconstructionMenu.js
@@ -0,0 +1,86 @@
+import { classes } from 'common/react';
+import { useBackend } from '../../backend';
+import { Button, Icon, LabeledList, Section, Table } from '../../components';
+
+export const DeconstructionMenu = (props, context) => {
+ const { data, act } = useBackend(context);
+
+ const { tech_levels, loaded_item, linked_destroy } = data;
+
+ if (!linked_destroy) {
+ return NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE ;
+ }
+
+ if (!loaded_item) {
+ return No item loaded. Standing by... ;
+ }
+
+ return (
+ <>
+
+ {
+ act('deconstruct');
+ }}
+ />
+ {
+ act('eject_item');
+ }}
+ />
+ >
+ }
+ >
+
+ {loaded_item.name}
+
+
+
+
+
+
+ Research Field
+ Current Level
+ Object Level
+ New Level
+
+ {tech_levels.map((techLevel) => (
+
+ ))}
+
+
+ >
+ );
+};
+
+const TechnologyRow = (props, context) => {
+ const {
+ techLevel: { name, desc, level, object_level, ui_icon },
+ } = props;
+ const objectLevelDefined = object_level !== undefined && object_level !== null;
+ const newLevel = objectLevelDefined ? (object_level >= level ? Math.max(object_level, level + 1) : level) : level;
+ return (
+
+
+
+
+
+ {name}
+
+ {level}
+ {objectLevelDefined ? (
+ {object_level}
+ ) : (
+ -
+ )}
+ {newLevel}
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheCategory.js b/tgui/packages/tgui/interfaces/RndConsole/LatheCategory.js
similarity index 97%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/LatheCategory.js
rename to tgui/packages/tgui/interfaces/RndConsole/LatheCategory.js
index 0772500216e3..c5245894d116 100644
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheCategory.js
+++ b/tgui/packages/tgui/interfaces/RndConsole/LatheCategory.js
@@ -1,6 +1,6 @@
import { useBackend } from '../../backend';
import { Button, Section, Table } from '../../components';
-import { LatheMaterials } from './index';
+import { LatheMaterials } from './LatheMaterials';
// Also handles search results
export const LatheCategory = (properties, context) => {
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheChemicalStorage.js b/tgui/packages/tgui/interfaces/RndConsole/LatheChemicalStorage.js
similarity index 100%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/LatheChemicalStorage.js
rename to tgui/packages/tgui/interfaces/RndConsole/LatheChemicalStorage.js
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMainMenu.js b/tgui/packages/tgui/interfaces/RndConsole/LatheMainMenu.js
similarity index 90%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMainMenu.js
rename to tgui/packages/tgui/interfaces/RndConsole/LatheMainMenu.js
index 4c2c95d1d51a..b897948f790f 100644
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMainMenu.js
+++ b/tgui/packages/tgui/interfaces/RndConsole/LatheMainMenu.js
@@ -1,6 +1,7 @@
import { useBackend } from '../../backend';
import { Button, Divider, Flex, Section } from '../../components';
-import { LatheMaterials, LatheSearch } from './index';
+import { LatheMaterials } from './LatheMaterials';
+import { LatheSearch } from './LatheSearch';
export const LatheMainMenu = (properties, context) => {
const { data, act } = useBackend(context);
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMaterialStorage.js b/tgui/packages/tgui/interfaces/RndConsole/LatheMaterialStorage.js
similarity index 100%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMaterialStorage.js
rename to tgui/packages/tgui/interfaces/RndConsole/LatheMaterialStorage.js
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMaterials.js b/tgui/packages/tgui/interfaces/RndConsole/LatheMaterials.js
similarity index 100%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMaterials.js
rename to tgui/packages/tgui/interfaces/RndConsole/LatheMaterials.js
diff --git a/tgui/packages/tgui/interfaces/RndConsole/LatheMenu.js b/tgui/packages/tgui/interfaces/RndConsole/LatheMenu.js
new file mode 100644
index 000000000000..7a94213a6994
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/RndConsole/LatheMenu.js
@@ -0,0 +1,61 @@
+import { useBackend } from '../../backend';
+import { Box, Tabs } from '../../components';
+import { MENU, PRINTER_MENU } from '.';
+import { LatheMainMenu } from './LatheMainMenu';
+import { LatheCategory } from './LatheCategory';
+import { LatheMaterialStorage } from './LatheMaterialStorage';
+import { LatheChemicalStorage } from './LatheChemicalStorage';
+
+const Tab = Tabs.Tab;
+
+const PrinterTab = (props, context) => {
+ const { act, data } = useBackend(context);
+ const [act_id, currentMenu] =
+ data.menu === MENU.LATHE ? ['nav_protolathe', data.submenu_protolathe] : ['nav_imprinter', data.submenu_imprinter];
+ const { menu, ...rest } = props;
+ return act(act_id, { menu })} {...rest} />;
+};
+
+const decideTab = (tab) => {
+ switch (tab) {
+ case PRINTER_MENU.MAIN:
+ return ;
+ case PRINTER_MENU.SEARCH:
+ return ;
+ case PRINTER_MENU.MATERIALS:
+ return ;
+ case PRINTER_MENU.CHEMICALS:
+ return ;
+ }
+};
+
+export const LatheMenu = (properties, context) => {
+ const { data } = useBackend(context);
+
+ const { menu, linked_lathe, linked_imprinter } = data;
+
+ if (menu === MENU.LATHE && !linked_lathe) {
+ return NO PROTOLATHE LINKED TO CONSOLE ;
+ }
+
+ if (menu === MENU.IMPRINTER && !linked_imprinter) {
+ return NO CIRCUIT IMPRITER LINKED TO CONSOLE ;
+ }
+
+ return (
+
+
+
+ Main Menu
+
+
+ Materials
+
+
+ Chemicals
+
+
+ {decideTab(data.menu === MENU.LATHE ? data.submenu_protolathe : data.submenu_imprinter)}
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheSearch.js b/tgui/packages/tgui/interfaces/RndConsole/LatheSearch.js
similarity index 100%
rename from tgui/packages/tgui/interfaces/RndConsoleComponents/LatheSearch.js
rename to tgui/packages/tgui/interfaces/RndConsole/LatheSearch.js
diff --git a/tgui/packages/tgui/interfaces/RndConsole/SettingsMenu.js b/tgui/packages/tgui/interfaces/RndConsole/SettingsMenu.js
new file mode 100644
index 000000000000..355178435dd2
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/RndConsole/SettingsMenu.js
@@ -0,0 +1,92 @@
+import { useBackend } from '../../backend';
+import { Box, Button, Flex, LabeledList, Section } from '../../components';
+
+export const SettingsMenu = (props, context) => (
+
+
+
+
+);
+
+const MainSettings = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { sync, admin } = data;
+
+ return (
+
+
+ {
+ act('sync');
+ }}
+ />
+
+ {
+ act('togglesync');
+ }}
+ />
+
+ {
+ act('togglesync');
+ }}
+ />
+
+ {admin === 1 ? (
+ act('maxresearch')} />
+ ) : null}
+
+
+ );
+};
+
+const DeviceSettings = (props, context) => {
+ const { data, act } = useBackend(context);
+ const { linked_destroy, linked_lathe, linked_imprinter } = data;
+
+ return (
+ act('find_device')} />}
+ >
+
+
+ act('disconnect', { item: 'destroy' })}
+ />
+
+
+ {
+ act('disconnect', { item: 'lathe' });
+ }}
+ />
+
+
+ act('disconnect', { item: 'imprinter' })}
+ />
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/RndConsole/index.js b/tgui/packages/tgui/interfaces/RndConsole/index.js
new file mode 100644
index 000000000000..beea03e3ed66
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/RndConsole/index.js
@@ -0,0 +1,138 @@
+import { useBackend } from '../../backend';
+import { Window } from '../../layouts';
+import { Box, Button, Icon, LabeledList, NoticeBox, Section, Table, Tabs } from '../../components';
+import { classes } from 'common/react';
+import { DataDiskMenu } from './DataDiskMenu';
+import { LatheMenu } from './LatheMenu';
+import { SettingsMenu } from './SettingsMenu';
+import { DeconstructionMenu } from './DeconstructionMenu';
+
+const Tab = Tabs.Tab;
+
+export const MENU = {
+ MAIN: 0,
+ DISK: 2,
+ DESTROY: 3,
+ LATHE: 4,
+ IMPRINTER: 5,
+ SETTINGS: 6,
+};
+
+export const PRINTER_MENU = {
+ MAIN: 0,
+ SEARCH: 1,
+ MATERIALS: 2,
+ CHEMICALS: 3,
+};
+
+const decideTab = (tab) => {
+ switch (tab) {
+ case MENU.MAIN:
+ return ;
+ case MENU.DISK:
+ return ;
+ case MENU.DESTROY:
+ return ;
+ case MENU.LATHE:
+ case MENU.IMPRINTER:
+ return ;
+ case MENU.SETTINGS:
+ return ;
+ default:
+ return 'UNKNOWN MENU';
+ }
+};
+
+const ConsoleTab = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { menu: currentMenu } = data;
+ const { menu, ...rest } = props;
+ return act('nav', { menu })} {...rest} />;
+};
+
+export const RndConsole = (properties, context) => {
+ const { act, data } = useBackend(context);
+ const { menu, linked_destroy, linked_lathe, linked_imprinter, wait_message } = data;
+
+ return (
+
+
+
+
+
+ Research
+
+ {!!linked_destroy && (
+
+ Analyze
+
+ )}
+ {!!linked_lathe && (
+
+ Protolathe
+
+ )}
+ {!!linked_imprinter && (
+
+ Imprinter
+
+ )}
+
+ Disk
+
+
+ Settings
+
+
+ {decideTab(menu)}
+
+
+
+
+ );
+};
+
+const WaitNotice = (props, context) => {
+ const { data } = useBackend(context);
+ const { wait_message } = data;
+ if (!wait_message) {
+ return null;
+ }
+
+ return (
+
+
+ {wait_message}
+
+
+ );
+};
+
+const MainMenu = (props, context) => {
+ const { data } = useBackend(context);
+
+ const { tech_levels } = data;
+
+ return (
+
+
+
+
+ Research Field
+ Level
+
+ {tech_levels.map(({ id, name, desc, level, ui_icon }) => (
+
+
+
+
+
+ {name}
+
+ {level}
+
+ ))}
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/CurrentLevels.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/CurrentLevels.js
deleted file mode 100644
index a300272d54fa..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/CurrentLevels.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useBackend } from '../../backend';
-import { Box, Divider } from '../../components';
-
-export const CurrentLevels = (properties, context) => {
- const { data } = useBackend(context);
-
- const { tech_levels } = data;
-
- return (
-
- Current Research Levels:
- {tech_levels.map((techLevel, i) => {
- const { name, level, desc } = techLevel;
- return (
-
- {i > 0 ? : null}
- {name}
- * Level: {level}
- * Summary: {desc}
-
- );
- })}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/DeconstructionMenu.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/DeconstructionMenu.js
deleted file mode 100644
index f31ff9bfde04..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/DeconstructionMenu.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useBackend } from '../../backend';
-import { Box, Button, LabeledList, Section } from '../../components';
-
-export const DeconstructionMenu = (properties, context) => {
- const { data, act } = useBackend(context);
-
- const { loaded_item, linked_destroy } = data;
-
- if (!linked_destroy) {
- return NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE ;
- }
-
- if (!loaded_item) {
- return No item loaded. Standing by... ;
- }
-
- return (
-
- Name: {loaded_item.name}
-
- Origin Tech:
-
-
- {loaded_item.origin_tech.map((item) => {
- return (
-
- {item.object_level} {item.current_level ? <>(Current: {item.current_level})> : null}
-
- );
- })}
-
-
- Options:
-
- {
- act('deconstruct');
- }}
- />
- {
- act('eject_item');
- }}
- />
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMenu.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMenu.js
deleted file mode 100644
index b72fadd98740..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/LatheMenu.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useBackend } from '../../backend';
-import { RndRoute } from './RndRoute';
-import { LatheMainMenu, LatheCategory, LatheMaterialStorage, LatheChemicalStorage } from './index';
-import { Box } from '../../components';
-import { SUBMENU } from '../RndConsole';
-
-export const LatheMenu = (properties, context) => {
- const { data } = useBackend(context);
-
- const { menu, linked_lathe, linked_imprinter } = data;
-
- if (menu === 4 && !linked_lathe) {
- return NO PROTOLATHE LINKED TO CONSOLE ;
- }
-
- if (menu === 5 && !linked_imprinter) {
- return NO CIRCUIT IMPRITER LINKED TO CONSOLE ;
- }
-
- return (
-
- } />
- } />
- } />
- } />
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/MainMenu.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/MainMenu.js
deleted file mode 100644
index 8b7ce5b019be..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/MainMenu.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import { useBackend } from '../../backend';
-import { Box, Flex, LabeledList, Section } from '../../components';
-import { RndNavButton } from './index';
-import { MENU, SUBMENU } from '../RndConsole';
-
-export const MainMenu = (properties, context) => {
- const { data } = useBackend(context);
-
- const { disk_type, linked_destroy, linked_lathe, linked_imprinter, tech_levels } = data;
-
- return (
-
-
-
-
-
-
-
-
-
-
- Current Research Levels:
-
- {tech_levels.map(({ name, level }) => (
-
- {level}
-
- ))}
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/RndNavButton.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/RndNavButton.js
deleted file mode 100644
index c99a78e98db1..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/RndNavButton.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useBackend } from '../../backend';
-import { Button } from '../../components';
-
-export const RndNavButton = (properties, context) => {
- const { icon, children, disabled, content } = properties;
- const { data, act } = useBackend(context);
- const { menu, submenu } = data;
-
- let nextMenu = menu;
- let nextSubmenu = submenu;
-
- if (properties.menu !== null && properties.menu !== undefined) {
- nextMenu = properties.menu;
- }
- if (properties.submenu !== null && properties.submenu !== undefined) {
- nextSubmenu = properties.submenu;
- }
-
- // const active = data.menu === menu && data.submenu === submenu;
-
- return (
- {
- act('nav', { menu: nextMenu, submenu: nextSubmenu });
- }}
- >
- {children}
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/RndNavbar.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/RndNavbar.js
deleted file mode 100644
index 90a5d33fc3be..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/RndNavbar.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import { RndRoute, RndNavButton } from './index';
-import { Box } from '../../components';
-import { MENU, SUBMENU } from '../RndConsole';
-
-export const RndNavbar = () => (
-
- n !== MENU.MAIN}
- render={() => }
- />
-
- {/* Links to return to submenu 0 for each menu other than main menu */}
- n !== SUBMENU.MAIN}
- render={() => (
-
- }
- />
-
- }
- />
-
- }
- />
-
- }
- />
-
- )}
- />
-
- n === MENU.LATHE || n === MENU.IMPRINTER}
- submenu={SUBMENU.MAIN}
- render={() => (
-
-
-
-
- )}
- />
-
-);
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/RndRoute.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/RndRoute.js
deleted file mode 100644
index c07a8147812d..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/RndRoute.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useBackend } from '../../backend';
-
-export const RndRoute = (properties, context) => {
- const { render } = properties;
- const { data } = useBackend(context);
- const { menu, submenu } = data;
-
- const compare = (comparator, item) => {
- if (comparator === null || comparator === undefined) {
- return true;
- } // unspecified, match all
- if (typeof comparator === 'function') {
- return comparator(item);
- }
- return comparator === item; // strings or ints?
- };
-
- let match = compare(properties.menu, menu) && compare(properties.submenu, submenu);
-
- if (!match) {
- return null;
- }
-
- return render();
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/SettingsMenu.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/SettingsMenu.js
deleted file mode 100644
index ff9833974782..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/SettingsMenu.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import { useBackend } from '../../backend';
-import { Box, Button, Flex, LabeledList, Section } from '../../components';
-import { RndRoute, RndNavButton } from './index';
-import { MENU, SUBMENU } from '../RndConsole';
-
-export const SettingsMenu = (properties, context) => {
- const { data, act } = useBackend(context);
-
- const { sync, admin, linked_destroy, linked_lathe, linked_imprinter } = data;
-
- return (
-
- (
-
-
- {
- act('sync');
- }}
- />
-
- {
- act('togglesync');
- }}
- />
-
- {
- act('togglesync');
- }}
- />
-
-
-
- {admin === 1 ? (
- act('maxresearch')}
- />
- ) : null}
-
-
- )}
- />
-
- (
-
- act('find_device')} />
-
-
- Linked Devices:
-
-
- {linked_destroy ? (
-
- act('disconnect', { item: 'destroy' })} />
-
- ) : (
-
- )}
-
- {linked_lathe ? (
-
- {
- act('disconnect', { item: 'lathe' });
- }}
- />
-
- ) : (
-
- )}
-
- {linked_imprinter ? (
-
- act('disconnect', { item: 'imprinter' })} />
-
- ) : (
-
- )}
-
-
- )}
- />
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/RndConsoleComponents/index.js b/tgui/packages/tgui/interfaces/RndConsoleComponents/index.js
deleted file mode 100644
index 5bd4861c8e9c..000000000000
--- a/tgui/packages/tgui/interfaces/RndConsoleComponents/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export { CurrentLevels } from './CurrentLevels';
-export { DataDiskMenu } from './DataDiskMenu';
-export { DeconstructionMenu } from './DeconstructionMenu';
-export { LatheCategory } from './LatheCategory';
-export { LatheChemicalStorage } from './LatheChemicalStorage';
-export { LatheMainMenu } from './LatheMainMenu';
-export { LatheMaterials } from './LatheMaterials';
-export { LatheMaterialStorage } from './LatheMaterialStorage';
-export { LatheMenu } from './LatheMenu';
-export { LatheSearch } from './LatheSearch';
-export { MainMenu } from './MainMenu';
-export { RndNavbar } from './RndNavbar';
-export { RndNavButton } from './RndNavButton';
-export { RndRoute } from './RndRoute';
-export { SettingsMenu } from './SettingsMenu';
diff --git a/tgui/packages/tgui/styles/atomic/color.scss b/tgui/packages/tgui/styles/atomic/color.scss
index e2563f86fa56..d5ef405d0071 100644
--- a/tgui/packages/tgui/styles/atomic/color.scss
+++ b/tgui/packages/tgui/styles/atomic/color.scss
@@ -19,3 +19,9 @@ $bg-map: colors.$bg-map !default;
background-color: $color-value !important;
}
}
+
+@each $color-name, $color-value in $fg-map {
+ .color-border-#{$color-name} {
+ border-color: $color-value !important;
+ }
+}
diff --git a/tgui/packages/tgui/styles/components/Button.scss b/tgui/packages/tgui/styles/components/Button.scss
index c8f880cb116a..550a686b46b6 100644
--- a/tgui/packages/tgui/styles/components/Button.scss
+++ b/tgui/packages/tgui/styles/components/Button.scss
@@ -16,16 +16,16 @@ $color-transparent-text: rgba(255, 255, 255, 0.5) !default;
$border-radius: base.$border-radius !default;
$bg-map: colors.$bg-map !default;
-@mixin button-color($color) {
+@mixin button-color($color, $text-color: null) {
// Adapt text color to background luminance to ensure high contast
$luminance: luminance($color);
- $text-color: if($luminance > 0.4, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1));
+ $dynamic-text-color: if($luminance > 0.4, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1));
transition:
color 100ms,
background-color 100ms;
background-color: $color;
- color: $text-color;
+ color: if($text-color != null, $text-color, $dynamic-text-color);
&:focus {
transition:
@@ -35,7 +35,7 @@ $bg-map: colors.$bg-map !default;
&:hover {
background-color: lighten($color, 25%);
- color: $text-color;
+ color: $dynamic-text-color;
}
}
@@ -128,15 +128,11 @@ $bg-map: colors.$bg-map !default;
}
.Button--color--transparent {
- background-color: rgba(base.$color-bg, 0);
- color: $color-transparent-text;
- @include button-color(base.$color-bg);
+ @include button-color(rgba(base.$color-bg, 0), $color-transparent-text);
}
.Button--color--translucent {
- background-color: rgba(base.$color-bg, 0.6);
- color: $color-transparent-text;
- @include button-color(base.$color-bg);
+ @include button-color(rgba(base.$color-bg, 0.6), $color-transparent-text);
}
.Button--disabled {
diff --git a/tgui/packages/tgui/styles/components/NanoMap.scss b/tgui/packages/tgui/styles/components/NanoMap.scss
index 95f76d8dd13b..e2de7df499d2 100644
--- a/tgui/packages/tgui/styles/components/NanoMap.scss
+++ b/tgui/packages/tgui/styles/components/NanoMap.scss
@@ -3,6 +3,7 @@ $background-color: rgba(0, 0, 0, 0.33) !default;
.NanoMap__container {
overflow: hidden;
width: 100%;
+ height: 100%;
z-index: 1;
}
@@ -31,5 +32,5 @@ $background-color: rgba(0, 0, 0, 0.33) !default;
top: 30px;
left: 0;
padding: 0.5rem;
- width: 20%;
+ width: 24%;
}
diff --git a/tgui/packages/tgui/styles/interfaces/CrewMonitor.scss b/tgui/packages/tgui/styles/interfaces/CrewMonitor.scss
new file mode 100644
index 000000000000..10c311b99e43
--- /dev/null
+++ b/tgui/packages/tgui/styles/interfaces/CrewMonitor.scss
@@ -0,0 +1,26 @@
+.highlighted-marker {
+ box-sizing: content-box;
+ display: inline-block;
+ position: relative;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+
+ border-style: solid;
+ border-width: 50%;
+ border-radius: 50%;
+
+ animation: 1s infinite mark-shrink;
+}
+
+@keyframes mark-shrink {
+ from {
+ width: 200%;
+ height: 200%;
+ }
+
+ to {
+ width: 0%;
+ height: 0%;
+ }
+}
diff --git a/tgui/packages/tgui/styles/interfaces/RndConsole.scss b/tgui/packages/tgui/styles/interfaces/RndConsole.scss
index af97a74a732a..28a7080ce7e7 100644
--- a/tgui/packages/tgui/styles/interfaces/RndConsole.scss
+++ b/tgui/packages/tgui/styles/interfaces/RndConsole.scss
@@ -20,12 +20,6 @@
padding-bottom: 4px;
}
-.RndConsole__MainMenu__Buttons {
- .Button:not(:last-child) {
- margin-bottom: 4px;
- }
-}
-
.RndConsole__LatheMaterials {
.Table__cell:nth-child(2) {
padding-left: 16px;
@@ -62,3 +56,27 @@
margin-bottom: 10px;
}
}
+
+#research-levels tr {
+ & > *:first-child {
+ width: 2em;
+ }
+
+ & > *:nth-child(3),
+ & > *:nth-child(4),
+ & > *:nth-child(5) {
+ text-align: center;
+ }
+}
+
+#research-levels tr:not(:first-child) > *:first-child {
+ height: 2em;
+}
+
+.upgraded-level {
+ color: #55d355;
+}
+
+.research-level-no-effect {
+ color: #888888;
+}
diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss
index c66849cce626..77754d7c4df1 100644
--- a/tgui/packages/tgui/styles/main.scss
+++ b/tgui/packages/tgui/styles/main.scss
@@ -50,6 +50,7 @@
@include meta.load-css('./interfaces/BrigCells.scss');
@include meta.load-css('./interfaces/CameraConsole.scss');
@include meta.load-css('./interfaces/Contractor.scss');
+@include meta.load-css('./interfaces/CrewMonitor.scss');
@include meta.load-css('./interfaces/ExosuitFabricator.scss');
@include meta.load-css('./interfaces/GeneModder.scss');
@include meta.load-css('./interfaces/KitchenMachine.scss');
diff --git a/tgui/public/tgui-panel.bundle.css b/tgui/public/tgui-panel.bundle.css
index 56093de2dd3c..8f586e0eb9be 100644
--- a/tgui/public/tgui-panel.bundle.css
+++ b/tgui/public/tgui-panel.bundle.css
@@ -1 +1 @@
-html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-gold{color:#f3b22f!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.color-bg-gold{background-color:#d6920c!important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9)!important;background:rgba(0,0,0,0)!important;outline:1px solid rgba(255,255,255,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8)!important}.outline-dotted{outline-style:dotted!important}.outline-dashed{outline-style:dashed!important}.outline-solid{outline-style:solid!important}.outline-double{outline-style:double!important}.outline-groove{outline-style:groove!important}.outline-ridge{outline-style:ridge!important}.outline-inset{outline-style:inset!important}.outline-outset{outline-style:outset!important}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.outline-color-gold{outline:.167rem solid #f3b22f!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconRight .fa,.Button--hasContent.Button--iconRight .fas,.Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--multiLine{white-space:normal;word-wrap:break-word}.Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.Button--color--black:focus{transition:color .25s,background-color .25s}.Button--color--black:hover{background-color:#101010;color:#fff}.Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.Button--color--white:focus{transition:color .25s,background-color .25s}.Button--color--white:hover{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--red:focus{transition:color .25s,background-color .25s}.Button--color--red:hover{background-color:#d93f3f;color:#fff}.Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.Button--color--orange:focus{transition:color .25s,background-color .25s}.Button--color--orange:hover{background-color:#ef7e33;color:#fff}.Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--yellow:focus{transition:color .25s,background-color .25s}.Button--color--yellow:hover{background-color:#f5d523;color:#000}.Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.Button--color--olive:focus{transition:color .25s,background-color .25s}.Button--color--olive:hover{background-color:#bdd327;color:#fff}.Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--color--green:focus{transition:color .25s,background-color .25s}.Button--color--green:hover{background-color:#2fb94f;color:#fff}.Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.Button--color--teal:focus{transition:color .25s,background-color .25s}.Button--color--teal:hover{background-color:#10bdb6;color:#fff}.Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.Button--color--blue:focus{transition:color .25s,background-color .25s}.Button--color--blue:hover{background-color:#308fd6;color:#fff}.Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.Button--color--violet:focus{transition:color .25s,background-color .25s}.Button--color--violet:hover{background-color:#7249ca;color:#fff}.Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.Button--color--purple:focus{transition:color .25s,background-color .25s}.Button--color--purple:hover{background-color:#aa46ca;color:#fff}.Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.Button--color--pink:focus{transition:color .25s,background-color .25s}.Button--color--pink:hover{background-color:#e04ca0;color:#fff}.Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.Button--color--brown:focus{transition:color .25s,background-color .25s}.Button--color--brown:hover{background-color:#ae724c;color:#fff}.Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.Button--color--grey:focus{transition:color .25s,background-color .25s}.Button--color--grey:hover{background-color:#818181;color:#fff}.Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.Button--color--good:focus{transition:color .25s,background-color .25s}.Button--color--good:hover{background-color:#67b335;color:#fff}.Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.Button--color--average:focus{transition:color .25s,background-color .25s}.Button--color--average:hover{background-color:#eb972b;color:#fff}.Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--bad:focus{transition:color .25s,background-color .25s}.Button--color--bad:hover{background-color:#d93f3f;color:#fff}.Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.Button--color--label:focus{transition:color .25s,background-color .25s}.Button--color--label:hover{background-color:#8a9aae;color:#fff}.Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.Button--color--gold:focus{transition:color .25s,background-color .25s}.Button--color--gold:hover{background-color:#eeaf30;color:#fff}.Button--color--default{transition:color .1s,background-color .1s;background-color:#3e6189;color:#fff}.Button--color--default:focus{transition:color .25s,background-color .25s}.Button--color--default:hover{background-color:#567daa;color:#fff}.Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--caution:focus{transition:color .25s,background-color .25s}.Button--color--caution:hover{background-color:#f5d523;color:#000}.Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--danger:focus{transition:color .25s,background-color .25s}.Button--color--danger:hover{background-color:#d93f3f;color:#fff}.Button--color--transparent{background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#202020;color:#fff}.Button--color--transparent:focus{transition:color .25s,background-color .25s}.Button--color--transparent:hover{background-color:#343434;color:#fff}.Button--color--translucent{background-color:rgba(32,32,32,.6);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#202020;color:#fff}.Button--color--translucent:focus{transition:color .25s,background-color .25s}.Button--color--translucent:hover{background-color:#343434;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--selected:focus{transition:color .25s,background-color .25s}.Button--selected:hover{background-color:#2fb94f;color:#fff}.Button--modal{float:right;z-index:1;margin-top:-.5rem}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dropdown{position:relative;align-items:center}.Dropdown__control{display:inline-block;align-items:center;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.3333333333em;-ms-user-select:none;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;align-items:center;z-index:5;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-scroll{overflow-y:scroll}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s ease-out}.Dropdown__menuentry.selected{background-color:rgba(255,255,255,.5)!important;transition:background-color 0ms}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em);text-align:left;padding-top:2.5px}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline,.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue,.Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Knob__popupValue--right{top:.25rem;right:-50%}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left;vertical-align:baseline}.LabeledList__label{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.LabeledList__breakContents{word-break:break-all;word-wrap:break-word}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem;scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--gold{color:#fff;background-color:#825d13}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .5s,width .5s}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--disabled{border:1px solid #999}.ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.Section .Section:first-child{margin-top:-.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider:not(.Slider__disabled){cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--zebra>.Stack__item:nth-child(2n){background-color:#131313}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:rgba(0,0,0,0)}.Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.Tabs--vertical .Tab--selected{border-left:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#8b9bb0}.Tab--selected.Tab--color--gold{color:#f6c563}.Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#f3b22f}.Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#f3b22f}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity .15s ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;top:1em;left:.75em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout::-webkit-scrollbar,.Layout *::-webkit-scrollbar{width:12px}.Layout::-webkit-scrollbar-track,.Layout *::-webkit-scrollbar-track{background:#181818}.Layout::-webkit-scrollbar-thumb,.Layout *::-webkit-scrollbar-thumb{background:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.Layout__content--flexRow{display:flex;flex-flow:row}.Layout__content--flexColumn{display:flex;flex-flow:column}.Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.Layout__content--noMargin{margin:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom,#202020,#202020)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.emoji16x16{vertical-align:middle}a{color:#397ea5}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:active,.motd a:hover{color:#a4bad6}.italic,.italics,.emote{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}em{font-style:normal;font-weight:700}.darkmblue{color:#6685f5}.prefix,.ooc{font-weight:700}.looc{color:#69c;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#b82e00;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#386aff;font-weight:700}.adminsay{color:#9611d4;font-weight:700}.mentorhelp{color:#07b;font-weight:700}.adminhelp{color:#a00;font-weight:700}.playerreply{color:#80b;font-weight:700}.pmsend{color:#6685f5}.debug{color:#6d2f83}.name,.yell{font-weight:700}.siliconsay{font-family:Courier New,Courier,monospace}.deadsay{color:#e2c1ff}.radio{color:#20b142}.deptradio{color:#939}.comradio{color:#5f5cff}.syndradio{color:#8f4a4b}.dsquadradio{color:#998599}.resteamradio{color:#18bc46}.airadio{color:#ff5ed7}.centradio{color:#2681a5}.secradio{color:#dd3535}.engradio{color:#feac20}.medradio{color:#00b5ad}.sciradio{color:#c68cfa}.supradio{color:#b88646}.srvradio{color:#bbd164}.proradio{color:#b84f92}.admin_channel{color:#03fc9d;font-weight:700}.all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.mentor_channel{color:#775bff;font-weight:700}.mentor_channel_admin{color:#a35cff;font-weight:700}.djradio{color:#960}.binaryradio{color:#1b00fb;font-family:Courier New,Courier,monospace}.mommiradio{color:#6685f5}.alert{color:#d82020}h1.alert,h2.alert{color:#a4bad6}.ghostalert{color:#cc00c6;font-style:italic;font-weight:700}.emote{font-style:italic}.selecteddna{color:#a4bad6;background-color:#001b1b}.attack{color:red}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.warning{color:#c51e1e;font-style:italic}.boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.danger{color:#c51e1e;font-weight:700}.userdanger{color:#c51e1e;font-weight:700;font-size:120%}.biggerdanger{color:red;font-weight:700;font-size:150%}.info{color:#9ab0ff}.notice{color:#6685f5}.boldnotice{color:#6685f5;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#03bb39}.pr_announce,.boldannounceic,.boldannounceooc{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.alien{color:#c433c4}.noticealien{color:#00c000}.alertalien{color:#00c000;font-weight:700}.terrorspider{color:#cf52fa}.dantalion{color:#8b2c5e}.chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.chaosgood{color:#19e0c0;font-weight:700}.chaosneutral{color:#479ac0;font-weight:700}.chaosbad{color:#9047c0;font-weight:700}.chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.sinister{color:purple;font-weight:700;font-style:italic}.medal{font-weight:700}.blob{color:#006221;font-weight:700;font-style:italic}.confirm{color:#00af3b}.rose{color:#ff5050}.sans{font-family:Comic Sans MS,cursive,sans-serif}.wingdings{font-family:Wingdings,Webdings}.robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.ancient{color:#008b8b;font-style:italic}.newscaster{color:#c00}.mod{color:#735638;font-weight:700}.modooc{color:#184880;font-weight:700}.adminmod{color:#f0aa14;font-weight:700}.tajaran{color:#803b56}.skrell{color:#00ced1}.solcom{color:#8282fb}.com_srus{color:#7c4848}.soghun{color:#228b22}.changeling{color:#00b4de}.vox{color:#a0a}.diona{color:#804000;font-weight:700}.trinary{color:#727272}.kidan{color:#c64c05}.slime{color:#07a}.drask{color:#a3d4eb;font-family:Arial Black}.moth{color:#869b29;font-family:Copperplate}.clown{color:red}.vulpkanin{color:#b97a57}.abductor{color:purple;font-style:italic}.mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.rough{font-family:Trebuchet MS,cursive,sans-serif}.say_quote{font-family:Georgia,Verdana,sans-serif}.cult{color:purple;font-weight:700;font-style:italic}.cultspeech{color:#af0000;font-style:italic}.cultitalic{color:#a60000;font-style:italic}.cultlarge{color:#a60000;font-weight:700;font-size:120%}.narsie{color:#a60000;font-weight:700;font-size:300%}.narsiesmall{color:#a60000;font-weight:700;font-size:200%}.zombie{color:#7c4848}.zombielarge{color:#7c4848;font-weight:700;font-size:120%}.interface{color:#9031c4}.big{font-size:150%}.reallybig{font-size:175%}.greentext{color:#0f0;font-size:150%}.redtext{color:red;font-size:150%}.bold{font-weight:700}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.center{text-align:center}.red{color:red}.purple{color:#9031c4}.skeleton{color:#c8c8c8;font-weight:700;font-style:italic}.gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.orange{color:orange}.orangei{color:orange;font-style:italic}.orangeb{color:orange;font-weight:700}.resonate{color:#298f85}.healthscan_oxy{color:#5cc9ff}.revennotice{color:#6685f5}.revenboldnotice{color:#6685f5;font-weight:700}.revenbignotice{color:#6685f5;font-weight:700;font-size:120%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:120%}.specialnotice{color:#4a6f82;font-weight:700;font-size:120%}.good{color:green}.average{color:#ff8000}.bad{color:red}.italics,.talkinto{font-style:italic}.whisper{font-style:italic;color:#ccc}.recruit{color:#5c00e6;font-weight:700;font-style:italic}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:75%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#6685f5;font-weight:700}.rebooting{background:#2979af;color:#fff;padding:5px}.rebooting a{color:#fff!important;text-decoration-color:#fff!important}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.colossus{color:#7f282a;font-size:175%}.hierophant{color:#609;font-weight:700;font-style:italic}.hierophant_warning{color:#609;font-style:italic}.emoji{max-height:16px;max-width:16px}.adminticket{color:#3daf21;font-weight:700}.adminticketalt{color:#ccb847;font-weight:700}span.body .codephrases{color:#55f}span.body .coderesponses{color:#f33}.announcement h1,.announcement h2{color:#a4bad6;margin:8pt 0;line-height:1.2}.announcement p{color:#d82020;line-height:1.3}.announcement.minor h1{font-size:180%}.announcement.minor h2{font-size:170%}.announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.bolditalics{font-style:italic;font-weight:700}.boxed_message{background:#1b1c1e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.boxed_message.left_align_text{text-align:left}.boxed_message.red_border{background:#1e1b1b;border-color:#a00}.boxed_message.green_border{background:#1b1e1c;border-color:#0f0}.boxed_message.purple_border{background:#1d1c1f;border-color:#8000ff}.boxed_message.notice_border{background:#1b1c1e;border-color:#6685f5}.boxed_message.thick_border{border-width:thick}.oxygen{color:#449dff}.nitrogen{color:#f94541}.carbon_dioxide{color:#ccc}.plasma{color:#eb6b00}.sleeping_agent{color:#f28b89}.agent_b{color:teal}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-gold{color:#e39b0d!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .color-bg-gold{background-color:#bd810b!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(0,0,0,.075);transition:background-color 0}.theme-light .Tab--selected{background-color:rgba(0,0,0,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-left:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#353535}.theme-light .Tab--selected.Tab--color--gold{color:#f4b73f}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#e39b0d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#e39b0d}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-light .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-light .Section .Section:first-child{margin-top:-.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconRight .fa,.theme-light .Button--hasContent.Button--iconRight .fas,.theme-light .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-light .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-light .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--black:hover{background-color:#101010;color:#fff}.theme-light .Button--color--white{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--white:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--red{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--red:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--orange{transition:color .1s,background-color .1s;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--orange:hover{background-color:#e76d1d;color:#fff}.theme-light .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--yellow:hover{background-color:#e7c714;color:#fff}.theme-light .Button--color--olive{transition:color .1s,background-color .1s;background-color:#889912;color:#fff}.theme-light .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--olive:hover{background-color:#a9bc25;color:#fff}.theme-light .Button--color--green{transition:color .1s,background-color .1s;background-color:#188532;color:#fff}.theme-light .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--green:hover{background-color:#2ba648;color:#fff}.theme-light .Button--color--teal{transition:color .1s,background-color .1s;background-color:#008882;color:#fff}.theme-light .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--teal:hover{background-color:#10a9a2;color:#fff}.theme-light .Button--color--blue{transition:color .1s,background-color .1s;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--blue:hover{background-color:#2c81c0;color:#fff}.theme-light .Button--color--violet{transition:color .1s,background-color .1s;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--violet:hover{background-color:#653db9;color:#fff}.theme-light .Button--color--purple{transition:color .1s,background-color .1s;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--purple:hover{background-color:#9a3bb9;color:#fff}.theme-light .Button--color--pink{transition:color .1s,background-color .1s;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--pink:hover{background-color:#d93591;color:#fff}.theme-light .Button--color--brown{transition:color .1s,background-color .1s;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--brown:hover{background-color:#9c6745;color:#fff}.theme-light .Button--color--grey{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--grey:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--good{transition:color .1s,background-color .1s;background-color:#44801d;color:#fff}.theme-light .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--good:hover{background-color:#5d9f31;color:#fff}.theme-light .Button--color--average{transition:color .1s,background-color .1s;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--average:hover{background-color:#dc891d;color:#fff}.theme-light .Button--color--bad{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--bad:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--label{transition:color .1s,background-color .1s;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--label:hover{background-color:#424242;color:#fff}.theme-light .Button--color--gold{transition:color .1s,background-color .1s;background-color:#bd810b;color:#fff}.theme-light .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--gold:hover{background-color:#e5a11c;color:#fff}.theme-light .Button--color--default{transition:color .1s,background-color .1s;background-color:#bbb;color:#000}.theme-light .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--default:hover{background-color:#e3e3e3;color:#000}.theme-light .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-light .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-light .Button--color--transparent{background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5);transition:color .1s,background-color .1s;background-color:#eee;color:#000}.theme-light .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--color--translucent{background-color:rgba(238,238,238,.6);color:rgba(0,0,0,.5);transition:color .1s,background-color .1s;background-color:#eee;color:#000}.theme-light .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--translucent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color .1s,background-color .1s;background-color:#0668b8;color:#fff}.theme-light .Button--selected:focus{transition:color .25s,background-color .25s}.theme-light .Button--selected:hover{background-color:#1785df;color:#fff}.theme-light .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#e6e6e6;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-light .Input--disabled{color:#777;border-color:#000;border-color:rgba(0,0,0,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#000;color:inherit}.theme-light .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-light .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#e6e6e6;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue,.theme-light .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .Knob__popupValue--right{top:.25rem;right:-50%}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Knob--color--gold .Knob__ringFill{stroke:#e39b0d}.theme-light .Slider:not(.Slider__disabled){cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--disabled{border:1px solid #999}.theme-light .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .ProgressBar--color--gold{border:.0833333333em solid #bd810b!important}.theme-light .ProgressBar--color--gold .ProgressBar__fill{background-color:#bd810b}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout::-webkit-scrollbar,.theme-light .Layout *::-webkit-scrollbar{width:12px}.theme-light .Layout::-webkit-scrollbar-track,.theme-light .Layout *::-webkit-scrollbar-track{background:#f2f2f2}.theme-light .Layout::-webkit-scrollbar-thumb,.theme-light .Layout *::-webkit-scrollbar-thumb{background:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-light .Layout__content--flexRow{display:flex;flex-flow:row}.theme-light .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-light .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-light .Layout__content--noMargin{margin:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom,#eee,#eee)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s,background-color .25s}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#fff;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .italic,.theme-light .italics,.theme-light .emote{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .darkmblue{color:#00f}.theme-light .prefix,.theme-light .ooc{font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#b82e00;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#386aff;font-weight:700}.theme-light .adminsay{color:#9611d4;font-weight:700}.theme-light .mentorhelp{color:#07b;font-weight:700}.theme-light .adminhelp{color:#a00;font-weight:700}.theme-light .playerreply{color:#80b;font-weight:700}.theme-light .pmsend{color:#00f}.theme-light .debug{color:#6d2f83}.theme-light .name,.theme-light .yell{font-weight:700}.theme-light .siliconsay{font-family:Courier New,Courier,monospace}.theme-light .deadsay{color:#5c00e6}.theme-light .radio{color:#408010}.theme-light .deptradio{color:#939}.theme-light .comradio{color:#204090}.theme-light .syndradio{color:#6d3f40}.theme-light .dsquadradio{color:#686868}.theme-light .resteamradio{color:#18bc46}.theme-light .airadio{color:#f0f}.theme-light .centradio{color:#5c5c7c}.theme-light .secradio{color:#a30000}.theme-light .engradio{color:#a66300}.theme-light .medradio{color:#009190}.theme-light .sciradio{color:#939}.theme-light .supradio{color:#7f6539}.theme-light .srvradio{color:#80a000}.theme-light .proradio{color:#e3027a}.theme-light .admin_channel{color:#9a04d1;font-weight:700}.theme-light .all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.theme-light .mentor_channel{color:#775bff;font-weight:700}.theme-light .mentor_channel_admin{color:#a35cff;font-weight:700}.theme-light .djradio{color:#630}.theme-light .binaryradio{color:#0b0050;font-family:Courier New,Courier,monospace}.theme-light .mommiradio{color:navy}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .emote{font-style:italic}.theme-light .selecteddna{color:#fff;background-color:#001b1b}.theme-light .attack{color:red}.theme-light .moderate{color:#c00}.theme-light .disarm{color:#900}.theme-light .passive{color:#600}.theme-light .warning{color:red;font-style:italic}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .danger{color:red;font-weight:700}.theme-light .userdanger{color:red;font-weight:700;font-size:120%}.theme-light .biggerdanger{color:red;font-weight:700;font-size:150%}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03bb39}.theme-light .pr_announce{color:#228b22;font-weight:700}.theme-light .boldannounceic,.theme-light .boldannounceooc{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .terrorspider{color:#320e32}.theme-light .dantalion{color:#6a2148}.theme-light .chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.theme-light .chaosgood{color:#19e0c0;font-weight:700}.theme-light .chaosneutral{color:#479ac0;font-weight:700}.theme-light .chaosbad{color:#9047c0;font-weight:700}.theme-light .chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.theme-light .sinister{color:purple;font-weight:700;font-style:italic}.theme-light .blob{color:#006221;font-weight:700;font-style:italic}.theme-light .confirm{color:#00af3b}.theme-light .rose{color:#ff5050}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .wingdings{font-family:Wingdings,Webdings}.theme-light .robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.theme-light .ancient{color:#008b8b;font-style:italic}.theme-light .newscaster{color:maroon}.theme-light .mod{color:#735638;font-weight:700}.theme-light .modooc{color:#184880;font-weight:700}.theme-light .adminmod{color:#402a14;font-weight:700}.theme-light .tajaran{color:#803b56}.theme-light .skrell{color:#00ced1}.theme-light .solcom{color:#22228b}.theme-light .com_srus{color:#7c4848}.theme-light .soghun{color:#228b22}.theme-light .changeling{color:purple}.theme-light .vox{color:#a0a}.theme-light .diona{color:#804000;font-weight:700}.theme-light .trinary{color:#727272}.theme-light .kidan{color:#664205}.theme-light .slime{color:#07a}.theme-light .drask{color:#a3d4eb;font-family:Arial Black}.theme-light .moth{color:#869b29;font-family:Copperplate}.theme-light .clown{color:red}.theme-light .vulpkanin{color:#b97a57}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.theme-light .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .cult{color:purple;font-weight:700;font-style:italic}.theme-light .cultspeech{color:#7f0000;font-style:italic}.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultlarge{color:#960000;font-weight:700;font-size:120%}.theme-light .narsie{color:#960000;font-weight:700;font-size:300%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:200%}.theme-light .zombie{color:#7c4848}.theme-light .zombielarge{color:#7c4848;font-weight:700;font-size:120%}.theme-light .interface{color:#303}.theme-light .big{font-size:150%}.theme-light .reallybig{font-size:175%}.theme-light .greentext{color:#0f0;font-size:150%}.theme-light .redtext{color:red;font-size:150%}.theme-light .bold{font-weight:700}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .center{text-align:center}.theme-light .red{color:red}.theme-light .purple{color:#5e2d79}.theme-light .skeleton{color:#585858;font-weight:700;font-style:italic}.theme-light .gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.theme-light .orange{color:orange}.theme-light .orangei{color:orange;font-style:italic}.theme-light .orangeb{color:orange;font-weight:700}.theme-light .resonate{color:#298f85}.theme-light .healthscan_oxy{color:#0074bd}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{color:#1d2953;font-weight:700;font-size:120%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:120%}.theme-light .specialnoticebold{color:#36525e;font-weight:700;font-size:120%}.theme-light .specialnotice{color:#36525e;font-size:120%}.theme-light .medal{font-weight:700}.theme-light .good{color:green}.theme-light .average{color:#ff8000}.theme-light .bad{color:red}.theme-light .italics,.theme-light .talkinto{font-style:italic}.theme-light .whisper{font-style:italic;color:#333}.theme-light .recruit{color:#5c00e6;font-weight:700;font-style:italic}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:75%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .rebooting{background:#2979af;color:#fff;padding:5px}.theme-light .rebooting a{color:#fff!important;text-decoration-color:#fff!important}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .colossus{color:#7f282a;font-size:175%}.theme-light .hierophant{color:#609;font-weight:700;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .emoji{max-height:16px;max-width:16px}.theme-light .adminticket{color:#3e7336;font-weight:700}.theme-light .adminticketalt{color:#014c8a;font-weight:700}.theme-light span.body .codephrases{color:#00f}.theme-light span.body .coderesponses{color:red}.theme-light .announcement h1,.theme-light .announcement h2{color:#000;margin:8pt 0;line-height:1.2}.theme-light .announcement p{color:#d82020;line-height:1.3}.theme-light .announcement.minor h1{font-size:180%}.theme-light .announcement.minor h2{font-size:170%}.theme-light .announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.theme-light .bolditalics{font-style:italic;font-weight:700}.theme-light .boxed_message{background:#f7fcff;border:1px solid #111a26;margin:.5em;padding:.5em .75em;text-align:center}.theme-light .boxed_message.left_align_text{text-align:left}.theme-light .boxed_message.red_border{background:#fff7f7;border-color:#a00}.theme-light .boxed_message.green_border{background:#f7fff7;border-color:#0f0}.theme-light .boxed_message.purple_border{background:#fdf7ff;border-color:#a0f}.theme-light .boxed_message.notice_border{background:#f7fdff;border-color:#0000bf}.theme-light .boxed_message.thick_border{border-width:thick}.theme-light .oxygen{color:#006adb}.theme-light .nitrogen{color:#d00a06}.theme-light .carbon_dioxide{color:#1f1f1f}.theme-light .plasma{color:#853c00}.theme-light .sleeping_agent{color:#e82f2c}.theme-light .agent_b{color:#004d4d}.theme-ntos .color-black{color:#1a1a1a!important}.theme-ntos .color-white{color:#fff!important}.theme-ntos .color-red{color:#df3e3e!important}.theme-ntos .color-orange{color:#f37f33!important}.theme-ntos .color-yellow{color:#fbda21!important}.theme-ntos .color-olive{color:#cbe41c!important}.theme-ntos .color-green{color:#25ca4c!important}.theme-ntos .color-teal{color:#00d6cc!important}.theme-ntos .color-blue{color:#2e93de!important}.theme-ntos .color-violet{color:#7349cf!important}.theme-ntos .color-purple{color:#ad45d0!important}.theme-ntos .color-pink{color:#e34da1!important}.theme-ntos .color-brown{color:#b97447!important}.theme-ntos .color-grey{color:#848484!important}.theme-ntos .color-good{color:#68c22d!important}.theme-ntos .color-average{color:#f29a29!important}.theme-ntos .color-bad{color:#df3e3e!important}.theme-ntos .color-label{color:#8b9bb0!important}.theme-ntos .color-gold{color:#f3b22f!important}.theme-ntos .color-bg-black{background-color:#000!important}.theme-ntos .color-bg-white{background-color:#d9d9d9!important}.theme-ntos .color-bg-red{background-color:#bd2020!important}.theme-ntos .color-bg-orange{background-color:#d95e0c!important}.theme-ntos .color-bg-yellow{background-color:#d9b804!important}.theme-ntos .color-bg-olive{background-color:#9aad14!important}.theme-ntos .color-bg-green{background-color:#1b9638!important}.theme-ntos .color-bg-teal{background-color:#009a93!important}.theme-ntos .color-bg-blue{background-color:#1c71b1!important}.theme-ntos .color-bg-violet{background-color:#552dab!important}.theme-ntos .color-bg-purple{background-color:#8b2baa!important}.theme-ntos .color-bg-pink{background-color:#cf2082!important}.theme-ntos .color-bg-brown{background-color:#8c5836!important}.theme-ntos .color-bg-grey{background-color:#646464!important}.theme-ntos .color-bg-good{background-color:#4d9121!important}.theme-ntos .color-bg-average{background-color:#cd7a0d!important}.theme-ntos .color-bg-bad{background-color:#bd2020!important}.theme-ntos .color-bg-label{background-color:#657a94!important}.theme-ntos .color-bg-gold{background-color:#d6920c!important}.theme-ntos .Section{position:relative;margin-bottom:.5em;background-color:#121922;box-sizing:border-box}.theme-ntos .Section:last-child{margin-bottom:0}.theme-ntos .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-ntos .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-ntos .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-ntos .Section__rest{position:relative}.theme-ntos .Section__content{padding:.66em .5em}.theme-ntos .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-ntos .Section--fill{display:flex;flex-direction:column;height:100%}.theme-ntos .Section--fill>.Section__rest{flex-grow:1}.theme-ntos .Section--fill>.Section__rest>.Section__content{height:100%}.theme-ntos .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-ntos .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-ntos .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-ntos .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-ntos .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-ntos .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-ntos .Section .Section:first-child{margin-top:-.5em}.theme-ntos .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-ntos .Section .Section .Section .Section__titleText{font-size:1em}.theme-ntos .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-ntos .Button:last-child{margin-right:0;margin-bottom:0}.theme-ntos .Button .fa,.theme-ntos .Button .fas,.theme-ntos .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-ntos .Button--hasContent .fa,.theme-ntos .Button--hasContent .fas,.theme-ntos .Button--hasContent .far{margin-right:.25em}.theme-ntos .Button--hasContent.Button--iconRight .fa,.theme-ntos .Button--hasContent.Button--iconRight .fas,.theme-ntos .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-ntos .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-ntos .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-ntos .Button--circular{border-radius:50%}.theme-ntos .Button--compact{padding:0 .25em;line-height:1.333em}.theme-ntos .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-ntos .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-ntos .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--black:hover{background-color:#101010;color:#fff}.theme-ntos .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-ntos .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-ntos .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-ntos .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-ntos .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-ntos .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-ntos .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-ntos .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-ntos .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-ntos .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-ntos .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-ntos .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-ntos .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-ntos .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-ntos .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-ntos .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-ntos .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-ntos .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-ntos .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-ntos .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-ntos .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-ntos .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-ntos .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-ntos .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-ntos .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-ntos .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-ntos .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-ntos .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-ntos .Button--color--default{transition:color .1s,background-color .1s;background-color:#384e68;color:#fff}.theme-ntos .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--default:hover{background-color:#4f6885;color:#fff}.theme-ntos .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--danger:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--transparent{background-color:rgba(27,38,51,0);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#1b2633;color:#fff}.theme-ntos .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--transparent:hover{background-color:#2f3b4a;color:#fff}.theme-ntos .Button--color--translucent{background-color:rgba(27,38,51,.6);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#1b2633;color:#fff}.theme-ntos .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--translucent:hover{background-color:#2f3b4a;color:#fff}.theme-ntos .Button--disabled{background-color:#999!important}.theme-ntos .Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--selected:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--selected:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-ntos .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-ntos .NumberInput--fluid{display:block}.theme-ntos .NumberInput__content{margin-left:.5em}.theme-ntos .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-ntos .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.theme-ntos .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-ntos .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-ntos .Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-ntos .Input--fluid{display:block;width:auto}.theme-ntos .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-ntos .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-ntos .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-ntos .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-ntos .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-ntos .TextArea--fluid{display:block;width:auto;height:auto}.theme-ntos .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-ntos .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-ntos .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-ntos .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-ntos .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-ntos .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-ntos .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-ntos .Knob__popupValue,.theme-ntos .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .Knob__popupValue--right{top:.25rem;right:-50%}.theme-ntos .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-ntos .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-ntos .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-ntos .Knob__ringFillPivot{transform:rotate(135deg)}.theme-ntos .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-ntos .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-ntos .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-ntos .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-ntos .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-ntos .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-ntos .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-ntos .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-ntos .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-ntos .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-ntos .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-ntos .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-ntos .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-ntos .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-ntos .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-ntos .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-ntos .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-ntos .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-ntos .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-ntos .Slider:not(.Slider__disabled){cursor:e-resize}.theme-ntos .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-ntos .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-ntos .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-ntos .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-ntos .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-ntos .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-ntos .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-ntos .ProgressBar--color--default{border:.0833333333em solid #3e6189}.theme-ntos .ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.theme-ntos .ProgressBar--color--disabled{border:1px solid #999}.theme-ntos .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-ntos .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-ntos .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-ntos .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-ntos .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-ntos .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-ntos .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-ntos .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-ntos .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-ntos .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-ntos .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-ntos .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-ntos .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-ntos .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-ntos .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-ntos .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-ntos .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-ntos .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-ntos .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-ntos .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-ntos .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-ntos .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-ntos .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-ntos .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-ntos .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-ntos .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-ntos .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-ntos .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-ntos .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-ntos .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-ntos .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-ntos .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-ntos .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-ntos .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-ntos .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-ntos .Chat{color:#abc6ec}.theme-ntos .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-ntos .Chat__badge:before{content:"x"}.theme-ntos .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-ntos .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-ntos .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-ntos .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#121922}.theme-ntos .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-ntos .Chat__highlight{color:#000}.theme-ntos .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-ntos .ChatMessage{word-wrap:break-word}.theme-ntos .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-ntos .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-ntos .Layout,.theme-ntos .Layout *{scrollbar-base-color:#141d26;scrollbar-face-color:#2a3b4f;scrollbar-3dlight-color:#1b2633;scrollbar-highlight-color:#1b2633;scrollbar-track-color:#141d26;scrollbar-arrow-color:#7290b4;scrollbar-shadow-color:#2a3b4f}.theme-ntos .Layout::-webkit-scrollbar,.theme-ntos .Layout *::-webkit-scrollbar{width:12px}.theme-ntos .Layout::-webkit-scrollbar-track,.theme-ntos .Layout *::-webkit-scrollbar-track{background:#141d26}.theme-ntos .Layout::-webkit-scrollbar-thumb,.theme-ntos .Layout *::-webkit-scrollbar-thumb{background:#2a3b4f}.theme-ntos .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-ntos .Layout__content--flexRow{display:flex;flex-flow:row}.theme-ntos .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-ntos .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-ntos .Layout__content--noMargin{margin:0}.theme-ntos .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1b2633;background-image:linear-gradient(to bottom,#1b2633,#1b2633)}.theme-ntos .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-ntos .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-ntos .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-ntos .Window__contentPadding:after{height:0}.theme-ntos .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-ntos .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(50,63,78,.25);pointer-events:none}.theme-ntos .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-ntos .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-ntos .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-ntos .TitleBar{background-color:#1b2633;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-ntos .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#1b2633;transition:color .25s,background-color .25s}.theme-ntos .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-ntos .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-ntos .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-ntos .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-ntos .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-ntos .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-ntos .boxed_message{background:#1c242e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-ntos .boxed_message.left_align_text{text-align:left}.theme-ntos .boxed_message.red_border{background:#2e1c1c;border-color:#a00}.theme-ntos .boxed_message.green_border{background:#1c2e22;border-color:#0f0}.theme-ntos .boxed_message.purple_border{background:#221c2e;border-color:#8000ff}.theme-ntos .boxed_message.notice_border{background:#1f2633;border-color:#6685f5}.theme-ntos .boxed_message.thick_border{border-width:thick}.theme-syndicate .color-black{color:#1a1a1a!important}.theme-syndicate .color-white{color:#fff!important}.theme-syndicate .color-red{color:#df3e3e!important}.theme-syndicate .color-orange{color:#f37f33!important}.theme-syndicate .color-yellow{color:#fbda21!important}.theme-syndicate .color-olive{color:#cbe41c!important}.theme-syndicate .color-green{color:#25ca4c!important}.theme-syndicate .color-teal{color:#00d6cc!important}.theme-syndicate .color-blue{color:#2e93de!important}.theme-syndicate .color-violet{color:#7349cf!important}.theme-syndicate .color-purple{color:#ad45d0!important}.theme-syndicate .color-pink{color:#e34da1!important}.theme-syndicate .color-brown{color:#b97447!important}.theme-syndicate .color-grey{color:#848484!important}.theme-syndicate .color-good{color:#68c22d!important}.theme-syndicate .color-average{color:#f29a29!important}.theme-syndicate .color-bad{color:#df3e3e!important}.theme-syndicate .color-label{color:#8b9bb0!important}.theme-syndicate .color-gold{color:#f3b22f!important}.theme-syndicate .color-bg-black{background-color:#000!important}.theme-syndicate .color-bg-white{background-color:#d9d9d9!important}.theme-syndicate .color-bg-red{background-color:#bd2020!important}.theme-syndicate .color-bg-orange{background-color:#d95e0c!important}.theme-syndicate .color-bg-yellow{background-color:#d9b804!important}.theme-syndicate .color-bg-olive{background-color:#9aad14!important}.theme-syndicate .color-bg-green{background-color:#1b9638!important}.theme-syndicate .color-bg-teal{background-color:#009a93!important}.theme-syndicate .color-bg-blue{background-color:#1c71b1!important}.theme-syndicate .color-bg-violet{background-color:#552dab!important}.theme-syndicate .color-bg-purple{background-color:#8b2baa!important}.theme-syndicate .color-bg-pink{background-color:#cf2082!important}.theme-syndicate .color-bg-brown{background-color:#8c5836!important}.theme-syndicate .color-bg-grey{background-color:#646464!important}.theme-syndicate .color-bg-good{background-color:#4d9121!important}.theme-syndicate .color-bg-average{background-color:#cd7a0d!important}.theme-syndicate .color-bg-bad{background-color:#bd2020!important}.theme-syndicate .color-bg-label{background-color:#657a94!important}.theme-syndicate .color-bg-gold{background-color:#d6920c!important}.theme-syndicate .Section{position:relative;margin-bottom:.5em;background-color:#2b0101;box-sizing:border-box}.theme-syndicate .Section:last-child{margin-bottom:0}.theme-syndicate .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #397439}.theme-syndicate .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-syndicate .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-syndicate .Section__rest{position:relative}.theme-syndicate .Section__content{padding:.66em .5em}.theme-syndicate .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-syndicate .Section--fill{display:flex;flex-direction:column;height:100%}.theme-syndicate .Section--fill>.Section__rest{flex-grow:1}.theme-syndicate .Section--fill>.Section__rest>.Section__content{height:100%}.theme-syndicate .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-syndicate .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-syndicate .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-syndicate .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-syndicate .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-syndicate .Section .Section:first-child{margin-top:-.5em}.theme-syndicate .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-syndicate .Section .Section .Section .Section__titleText{font-size:1em}.theme-syndicate .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-syndicate .Button:last-child{margin-right:0;margin-bottom:0}.theme-syndicate .Button .fa,.theme-syndicate .Button .fas,.theme-syndicate .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-syndicate .Button--hasContent .fa,.theme-syndicate .Button--hasContent .fas,.theme-syndicate .Button--hasContent .far{margin-right:.25em}.theme-syndicate .Button--hasContent.Button--iconRight .fa,.theme-syndicate .Button--hasContent.Button--iconRight .fas,.theme-syndicate .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-syndicate .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-syndicate .Button--circular{border-radius:50%}.theme-syndicate .Button--compact{padding:0 .25em;line-height:1.333em}.theme-syndicate .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-syndicate .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-syndicate .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--black:hover{background-color:#101010;color:#fff}.theme-syndicate .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-syndicate .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-syndicate .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-syndicate .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-syndicate .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-syndicate .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-syndicate .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-syndicate .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-syndicate .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-syndicate .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-syndicate .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-syndicate .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-syndicate .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-syndicate .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-syndicate .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-syndicate .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-syndicate .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-syndicate .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-syndicate .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-syndicate .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-syndicate .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-syndicate .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-syndicate .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-syndicate .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-syndicate .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-syndicate .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-syndicate .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-syndicate .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-syndicate .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-syndicate .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-syndicate .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-syndicate .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-syndicate .Button--color--default{transition:color .1s,background-color .1s;background-color:#397439;color:#fff}.theme-syndicate .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--default:hover{background-color:#509350;color:#fff}.theme-syndicate .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-syndicate .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-syndicate .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-syndicate .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-syndicate .Button--color--transparent{background-color:rgba(77,2,2,0);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#4d0202;color:#fff}.theme-syndicate .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--transparent:hover{background-color:#671313;color:#fff}.theme-syndicate .Button--color--translucent{background-color:rgba(77,2,2,.6);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#4d0202;color:#fff}.theme-syndicate .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--translucent:hover{background-color:#671313;color:#fff}.theme-syndicate .Button--disabled{background-color:#363636!important}.theme-syndicate .Button--selected{transition:color .1s,background-color .1s;background-color:#9d0808;color:#fff}.theme-syndicate .Button--selected:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--selected:hover{background-color:#c11919;color:#fff}.theme-syndicate .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-syndicate .NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#fff;background-color:#910101;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.theme-syndicate .NoticeBox--color--black{color:#fff;background-color:#000}.theme-syndicate .NoticeBox--color--white{color:#000;background-color:#b3b3b3}.theme-syndicate .NoticeBox--color--red{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--orange{color:#fff;background-color:#854114}.theme-syndicate .NoticeBox--color--yellow{color:#000;background-color:#83710d}.theme-syndicate .NoticeBox--color--olive{color:#000;background-color:#576015}.theme-syndicate .NoticeBox--color--green{color:#fff;background-color:#174e24}.theme-syndicate .NoticeBox--color--teal{color:#fff;background-color:#064845}.theme-syndicate .NoticeBox--color--blue{color:#fff;background-color:#1b4565}.theme-syndicate .NoticeBox--color--violet{color:#fff;background-color:#3b2864}.theme-syndicate .NoticeBox--color--purple{color:#fff;background-color:#542663}.theme-syndicate .NoticeBox--color--pink{color:#fff;background-color:#802257}.theme-syndicate .NoticeBox--color--brown{color:#fff;background-color:#4c3729}.theme-syndicate .NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.theme-syndicate .NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.theme-syndicate .NoticeBox--color--average{color:#fff;background-color:#7b4e13}.theme-syndicate .NoticeBox--color--bad{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--label{color:#fff;background-color:#53565a}.theme-syndicate .NoticeBox--color--gold{color:#fff;background-color:#825d13}.theme-syndicate .NoticeBox--type--info{color:#fff;background-color:#235982}.theme-syndicate .NoticeBox--type--success{color:#fff;background-color:#1e662f}.theme-syndicate .NoticeBox--type--warning{color:#fff;background-color:#a95219}.theme-syndicate .NoticeBox--type--danger{color:#fff;background-color:#8f2828}.theme-syndicate .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#87ce87;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-syndicate .NumberInput--fluid{display:block}.theme-syndicate .NumberInput__content{margin-left:.5em}.theme-syndicate .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-syndicate .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #87ce87;background-color:#87ce87}.theme-syndicate .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-syndicate .Input--disabled{color:#777;border-color:#6b6b6b;border-color:rgba(107,107,107,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-syndicate .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-syndicate .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-syndicate .TextArea{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-syndicate .TextArea--fluid{display:block;width:auto;height:auto}.theme-syndicate .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-syndicate .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-syndicate .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-syndicate .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-syndicate .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-syndicate .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-syndicate .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-syndicate .Knob__popupValue,.theme-syndicate .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .Knob__popupValue--right{top:.25rem;right:-50%}.theme-syndicate .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-syndicate .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-syndicate .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-syndicate .Knob__ringFillPivot{transform:rotate(135deg)}.theme-syndicate .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-syndicate .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-syndicate .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-syndicate .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-syndicate .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-syndicate .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-syndicate .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-syndicate .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-syndicate .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-syndicate .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-syndicate .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-syndicate .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-syndicate .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-syndicate .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-syndicate .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-syndicate .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-syndicate .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-syndicate .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-syndicate .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-syndicate .Slider:not(.Slider__disabled){cursor:e-resize}.theme-syndicate .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-syndicate .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-syndicate .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-syndicate .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color .5s}.theme-syndicate .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-syndicate .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-syndicate .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-syndicate .ProgressBar--color--default{border:.0833333333em solid #306330}.theme-syndicate .ProgressBar--color--default .ProgressBar__fill{background-color:#306330}.theme-syndicate .ProgressBar--color--disabled{border:1px solid #999}.theme-syndicate .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-syndicate .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-syndicate .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-syndicate .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-syndicate .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-syndicate .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-syndicate .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-syndicate .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-syndicate .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-syndicate .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-syndicate .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-syndicate .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-syndicate .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-syndicate .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-syndicate .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-syndicate .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-syndicate .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-syndicate .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-syndicate .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-syndicate .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-syndicate .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-syndicate .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-syndicate .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-syndicate .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-syndicate .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-syndicate .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-syndicate .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-syndicate .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-syndicate .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-syndicate .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-syndicate .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-syndicate .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-syndicate .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-syndicate .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-syndicate .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-syndicate .Chat{color:#abc6ec}.theme-syndicate .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-syndicate .Chat__badge:before{content:"x"}.theme-syndicate .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-syndicate .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-syndicate .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-syndicate .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#2b0101}.theme-syndicate .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-syndicate .Chat__highlight{color:#000}.theme-syndicate .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-syndicate .ChatMessage{word-wrap:break-word}.theme-syndicate .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-syndicate .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-syndicate .Layout,.theme-syndicate .Layout *{scrollbar-base-color:#3a0202;scrollbar-face-color:#770303;scrollbar-3dlight-color:#4d0202;scrollbar-highlight-color:#4d0202;scrollbar-track-color:#3a0202;scrollbar-arrow-color:#fa2d2d;scrollbar-shadow-color:#770303}.theme-syndicate .Layout::-webkit-scrollbar,.theme-syndicate .Layout *::-webkit-scrollbar{width:12px}.theme-syndicate .Layout::-webkit-scrollbar-track,.theme-syndicate .Layout *::-webkit-scrollbar-track{background:#3a0202}.theme-syndicate .Layout::-webkit-scrollbar-thumb,.theme-syndicate .Layout *::-webkit-scrollbar-thumb{background:#770303}.theme-syndicate .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-syndicate .Layout__content--flexRow{display:flex;flex-flow:row}.theme-syndicate .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-syndicate .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-syndicate .Layout__content--noMargin{margin:0}.theme-syndicate .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#4d0202;background-image:linear-gradient(to bottom,#4d0202,#4d0202)}.theme-syndicate .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-syndicate .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-syndicate .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-syndicate .Window__contentPadding:after{height:0}.theme-syndicate .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-syndicate .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(108,22,22,.25);pointer-events:none}.theme-syndicate .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-syndicate .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-syndicate .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-syndicate .TitleBar{background-color:#910101;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-syndicate .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#910101;transition:color .25s,background-color .25s}.theme-syndicate .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-syndicate .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-syndicate .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-syndicate .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-syndicate .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-syndicate .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-syndicate .adminooc{color:#29ccbe}.theme-syndicate .debug{color:#8f39e6}.theme-syndicate .boxed_message{background:rgba(20,20,35,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-syndicate .boxed_message.left_align_text{text-align:left}.theme-syndicate .boxed_message.red_border{background:rgba(0,0,0,.2);border-color:red}.theme-syndicate .boxed_message.green_border{background:rgba(0,75,0,.25);border-color:#0f0}.theme-syndicate .boxed_message.purple_border{background:rgba(25,0,50,.25);border-color:#8000ff}.theme-syndicate .boxed_message.notice_border{background:rgba(0,0,75,.25);border-color:#6685f5}.theme-syndicate .boxed_message.thick_border{border-width:thick}.theme-paradise .color-black{color:#1a1a1a!important}.theme-paradise .color-white{color:#fff!important}.theme-paradise .color-red{color:#df3e3e!important}.theme-paradise .color-orange{color:#f37f33!important}.theme-paradise .color-yellow{color:#fbda21!important}.theme-paradise .color-olive{color:#cbe41c!important}.theme-paradise .color-green{color:#25ca4c!important}.theme-paradise .color-teal{color:#00d6cc!important}.theme-paradise .color-blue{color:#2e93de!important}.theme-paradise .color-violet{color:#7349cf!important}.theme-paradise .color-purple{color:#ad45d0!important}.theme-paradise .color-pink{color:#e34da1!important}.theme-paradise .color-brown{color:#b97447!important}.theme-paradise .color-grey{color:#848484!important}.theme-paradise .color-good{color:#68c22d!important}.theme-paradise .color-average{color:#f29a29!important}.theme-paradise .color-bad{color:#df3e3e!important}.theme-paradise .color-label{color:#955d4b!important}.theme-paradise .color-gold{color:#f3b22f!important}.theme-paradise .color-bg-black{background-color:#000!important}.theme-paradise .color-bg-white{background-color:#d9d9d9!important}.theme-paradise .color-bg-red{background-color:#bd2020!important}.theme-paradise .color-bg-orange{background-color:#d95e0c!important}.theme-paradise .color-bg-yellow{background-color:#d9b804!important}.theme-paradise .color-bg-olive{background-color:#9aad14!important}.theme-paradise .color-bg-green{background-color:#1b9638!important}.theme-paradise .color-bg-teal{background-color:#009a93!important}.theme-paradise .color-bg-blue{background-color:#1c71b1!important}.theme-paradise .color-bg-violet{background-color:#552dab!important}.theme-paradise .color-bg-purple{background-color:#8b2baa!important}.theme-paradise .color-bg-pink{background-color:#cf2082!important}.theme-paradise .color-bg-brown{background-color:#8c5836!important}.theme-paradise .color-bg-grey{background-color:#646464!important}.theme-paradise .color-bg-good{background-color:#4d9121!important}.theme-paradise .color-bg-average{background-color:#cd7a0d!important}.theme-paradise .color-bg-bad{background-color:#bd2020!important}.theme-paradise .color-bg-label{background-color:#6d4436!important}.theme-paradise .color-bg-gold{background-color:#d6920c!important}.theme-paradise .Section{position:relative;margin-bottom:.5em;background-color:#40071a;background-color:rgba(0,0,0,.5);box-sizing:border-box}.theme-paradise .Section:last-child{margin-bottom:0}.theme-paradise .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #208080}.theme-paradise .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-paradise .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-paradise .Section__rest{position:relative}.theme-paradise .Section__content{padding:.66em .5em}.theme-paradise .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-paradise .Section--fill{display:flex;flex-direction:column;height:100%}.theme-paradise .Section--fill>.Section__rest{flex-grow:1}.theme-paradise .Section--fill>.Section__rest>.Section__content{height:100%}.theme-paradise .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-paradise .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-paradise .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-paradise .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-paradise .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-paradise .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-paradise .Section .Section:first-child{margin-top:-.5em}.theme-paradise .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-paradise .Section .Section .Section .Section__titleText{font-size:1em}.theme-paradise .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-paradise .Button:last-child{margin-right:0;margin-bottom:0}.theme-paradise .Button .fa,.theme-paradise .Button .fas,.theme-paradise .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-paradise .Button--hasContent .fa,.theme-paradise .Button--hasContent .fas,.theme-paradise .Button--hasContent .far{margin-right:.25em}.theme-paradise .Button--hasContent.Button--iconRight .fa,.theme-paradise .Button--hasContent.Button--iconRight .fas,.theme-paradise .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-paradise .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-paradise .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-paradise .Button--circular{border-radius:50%}.theme-paradise .Button--compact{padding:0 .25em;line-height:1.333em}.theme-paradise .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-paradise .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-paradise .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--black:hover{background-color:#101010;color:#fff}.theme-paradise .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-paradise .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-paradise .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-paradise .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-paradise .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-paradise .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-paradise .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-paradise .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-paradise .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-paradise .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-paradise .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-paradise .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-paradise .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-paradise .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-paradise .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-paradise .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-paradise .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-paradise .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-paradise .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-paradise .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-paradise .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-paradise .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-paradise .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-paradise .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-paradise .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-paradise .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-paradise .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--label{transition:color .1s,background-color .1s;background-color:#6d4436;color:#fff}.theme-paradise .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--label:hover{background-color:#8b5d4d;color:#fff}.theme-paradise .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-paradise .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-paradise .Button--color--default{transition:color .1s,background-color .1s;background-color:#208080;color:#fff}.theme-paradise .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--default:hover{background-color:#34a0a0;color:#fff}.theme-paradise .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--danger{transition:color .1s,background-color .1s;background-color:#8c1eff;color:#fff}.theme-paradise .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--danger:hover{background-color:#ae61ff;color:#fff}.theme-paradise .Button--color--transparent{background-color:rgba(128,13,51,0);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#800d33;color:#fff}.theme-paradise .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--transparent:hover{background-color:#a01f4a;color:#fff}.theme-paradise .Button--color--translucent{background-color:rgba(128,13,51,.6);color:rgba(255,255,255,.5);transition:color .1s,background-color .1s;background-color:#800d33;color:#fff}.theme-paradise .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--translucent:hover{background-color:#a01f4a;color:#fff}.theme-paradise .Button--disabled{background-color:#999!important}.theme-paradise .Button--selected{transition:color .1s,background-color .1s;background-color:#bf6030;color:#fff}.theme-paradise .Button--selected:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--selected:hover{background-color:#d4835a;color:#fff}.theme-paradise .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-paradise .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;color:#e65c2e;background-color:rgba(0,0,0,.25);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-paradise .NumberInput--fluid{display:block}.theme-paradise .NumberInput__content{margin-left:.5em}.theme-paradise .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-paradise .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #e65c2e;background-color:#e65c2e}.theme-paradise .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,.25);color:#fff;text-align:right}.theme-paradise .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-paradise .Input--disabled{color:#777;border-color:#4a4a4a;border-color:rgba(74,74,74,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-paradise .Input--fluid{display:block;width:auto}.theme-paradise .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-paradise .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-paradise .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-paradise .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-paradise .TextArea{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-paradise .TextArea--fluid{display:block;width:auto;height:auto}.theme-paradise .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-paradise .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-paradise .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-paradise .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-paradise .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-paradise .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-paradise .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-paradise .Knob__popupValue,.theme-paradise .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .Knob__popupValue--right{top:.25rem;right:-50%}.theme-paradise .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-paradise .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-paradise .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-paradise .Knob__ringFillPivot{transform:rotate(135deg)}.theme-paradise .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-paradise .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-paradise .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-paradise .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-paradise .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-paradise .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-paradise .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-paradise .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-paradise .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-paradise .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-paradise .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-paradise .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-paradise .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-paradise .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-paradise .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-paradise .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-paradise .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-paradise .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--label .Knob__ringFill{stroke:#955d4b}.theme-paradise .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-paradise .Slider:not(.Slider__disabled){cursor:e-resize}.theme-paradise .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-paradise .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-paradise .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-paradise .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-paradise .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-paradise .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-paradise .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-paradise .ProgressBar--color--default{border:.0833333333em solid #1b6d6d}.theme-paradise .ProgressBar--color--default .ProgressBar__fill{background-color:#1b6d6d}.theme-paradise .ProgressBar--color--disabled{border:1px solid #999}.theme-paradise .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-paradise .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-paradise .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-paradise .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-paradise .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-paradise .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-paradise .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-paradise .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-paradise .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-paradise .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-paradise .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-paradise .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-paradise .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-paradise .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-paradise .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-paradise .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-paradise .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-paradise .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-paradise .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-paradise .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-paradise .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-paradise .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-paradise .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-paradise .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-paradise .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-paradise .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-paradise .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-paradise .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-paradise .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-paradise .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-paradise .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-paradise .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--label{border:.0833333333em solid #6d4436!important}.theme-paradise .ProgressBar--color--label .ProgressBar__fill{background-color:#6d4436}.theme-paradise .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-paradise .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-paradise .Chat{color:#abc6ec}.theme-paradise .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-paradise .Chat__badge:before{content:"x"}.theme-paradise .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-paradise .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-paradise .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-paradise .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#fff;background-color:#db2828}.theme-paradise .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-paradise .Chat__highlight{color:#000}.theme-paradise .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-paradise .ChatMessage{word-wrap:break-word}.theme-paradise .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-paradise .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-paradise .Layout,.theme-paradise .Layout *{scrollbar-base-color:#680b29;scrollbar-face-color:#99103d;scrollbar-3dlight-color:#800d33;scrollbar-highlight-color:#800d33;scrollbar-track-color:#680b29;scrollbar-arrow-color:#ea2e6c;scrollbar-shadow-color:#99103d}.theme-paradise .Layout::-webkit-scrollbar,.theme-paradise .Layout *::-webkit-scrollbar{width:12px}.theme-paradise .Layout::-webkit-scrollbar-track,.theme-paradise .Layout *::-webkit-scrollbar-track{background:#680b29}.theme-paradise .Layout::-webkit-scrollbar-thumb,.theme-paradise .Layout *::-webkit-scrollbar-thumb{background:#99103d}.theme-paradise .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-paradise .Layout__content--flexRow{display:flex;flex-flow:row}.theme-paradise .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-paradise .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-paradise .Layout__content--noMargin{margin:0}.theme-paradise .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#800d33;background-image:linear-gradient(to bottom,#80014b,#80460d)}.theme-paradise .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-paradise .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-paradise .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-paradise .Window__contentPadding:after{height:0}.theme-paradise .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-paradise .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(166,34,78,.25);pointer-events:none}.theme-paradise .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-paradise .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-paradise .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-paradise .TitleBar{background-color:#800d33;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-paradise .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#800d33;transition:color .25s,background-color .25s}.theme-paradise .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-paradise .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-paradise .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-paradise .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-paradise .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-paradise .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-paradise .adminooc{color:#29ccbe}.theme-paradise .debug{color:#8f39e6}.theme-paradise .boxed_message{background:rgba(0,0,0,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-paradise .boxed_message.left_align_text{text-align:left}.theme-paradise .boxed_message.red_border{background:rgba(0,0,0,.25);border-color:#a00}.theme-paradise .boxed_message.green_border{background:rgba(0,0,0,.25);border-color:#0f0}.theme-paradise .boxed_message.purple_border{background:rgba(0,0,0,.25);border-color:#8000ff}.theme-paradise .boxed_message.notice_border{background:rgba(0,0,0,.25);border-color:#6685f5}.theme-paradise .boxed_message.thick_border{border-width:thick}
+html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-gold{color:#f3b22f!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.color-bg-gold{background-color:#d6920c!important}.color-border-black{border-color:#1a1a1a!important}.color-border-white{border-color:#fff!important}.color-border-red{border-color:#df3e3e!important}.color-border-orange{border-color:#f37f33!important}.color-border-yellow{border-color:#fbda21!important}.color-border-olive{border-color:#cbe41c!important}.color-border-green{border-color:#25ca4c!important}.color-border-teal{border-color:#00d6cc!important}.color-border-blue{border-color:#2e93de!important}.color-border-violet{border-color:#7349cf!important}.color-border-purple{border-color:#ad45d0!important}.color-border-pink{border-color:#e34da1!important}.color-border-brown{border-color:#b97447!important}.color-border-grey{border-color:#848484!important}.color-border-good{border-color:#68c22d!important}.color-border-average{border-color:#f29a29!important}.color-border-bad{border-color:#df3e3e!important}.color-border-label{border-color:#8b9bb0!important}.color-border-gold{border-color:#f3b22f!important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9)!important;background:rgba(0,0,0,0)!important;outline:1px solid rgba(255,255,255,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8)!important}.outline-dotted{outline-style:dotted!important}.outline-dashed{outline-style:dashed!important}.outline-solid{outline-style:solid!important}.outline-double{outline-style:double!important}.outline-groove{outline-style:groove!important}.outline-ridge{outline-style:ridge!important}.outline-inset{outline-style:inset!important}.outline-outset{outline-style:outset!important}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.outline-color-gold{outline:.167rem solid #f3b22f!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconRight .fa,.Button--hasContent.Button--iconRight .fas,.Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--multiLine{white-space:normal;word-wrap:break-word}.Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.Button--color--black:focus{transition:color .25s,background-color .25s}.Button--color--black:hover{background-color:#101010;color:#fff}.Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.Button--color--white:focus{transition:color .25s,background-color .25s}.Button--color--white:hover{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--red:focus{transition:color .25s,background-color .25s}.Button--color--red:hover{background-color:#d93f3f;color:#fff}.Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.Button--color--orange:focus{transition:color .25s,background-color .25s}.Button--color--orange:hover{background-color:#ef7e33;color:#fff}.Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--yellow:focus{transition:color .25s,background-color .25s}.Button--color--yellow:hover{background-color:#f5d523;color:#000}.Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.Button--color--olive:focus{transition:color .25s,background-color .25s}.Button--color--olive:hover{background-color:#bdd327;color:#fff}.Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--color--green:focus{transition:color .25s,background-color .25s}.Button--color--green:hover{background-color:#2fb94f;color:#fff}.Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.Button--color--teal:focus{transition:color .25s,background-color .25s}.Button--color--teal:hover{background-color:#10bdb6;color:#fff}.Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.Button--color--blue:focus{transition:color .25s,background-color .25s}.Button--color--blue:hover{background-color:#308fd6;color:#fff}.Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.Button--color--violet:focus{transition:color .25s,background-color .25s}.Button--color--violet:hover{background-color:#7249ca;color:#fff}.Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.Button--color--purple:focus{transition:color .25s,background-color .25s}.Button--color--purple:hover{background-color:#aa46ca;color:#fff}.Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.Button--color--pink:focus{transition:color .25s,background-color .25s}.Button--color--pink:hover{background-color:#e04ca0;color:#fff}.Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.Button--color--brown:focus{transition:color .25s,background-color .25s}.Button--color--brown:hover{background-color:#ae724c;color:#fff}.Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.Button--color--grey:focus{transition:color .25s,background-color .25s}.Button--color--grey:hover{background-color:#818181;color:#fff}.Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.Button--color--good:focus{transition:color .25s,background-color .25s}.Button--color--good:hover{background-color:#67b335;color:#fff}.Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.Button--color--average:focus{transition:color .25s,background-color .25s}.Button--color--average:hover{background-color:#eb972b;color:#fff}.Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--bad:focus{transition:color .25s,background-color .25s}.Button--color--bad:hover{background-color:#d93f3f;color:#fff}.Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.Button--color--label:focus{transition:color .25s,background-color .25s}.Button--color--label:hover{background-color:#8a9aae;color:#fff}.Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.Button--color--gold:focus{transition:color .25s,background-color .25s}.Button--color--gold:hover{background-color:#eeaf30;color:#fff}.Button--color--default{transition:color .1s,background-color .1s;background-color:#3e6189;color:#fff}.Button--color--default:focus{transition:color .25s,background-color .25s}.Button--color--default:hover{background-color:#567daa;color:#fff}.Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--caution:focus{transition:color .25s,background-color .25s}.Button--color--caution:hover{background-color:#f5d523;color:#000}.Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--danger:focus{transition:color .25s,background-color .25s}.Button--color--danger:hover{background-color:#d93f3f;color:#fff}.Button--color--transparent{transition:color .1s,background-color .1s;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:focus{transition:color .25s,background-color .25s}.Button--color--transparent:hover{background-color:rgba(50,50,50,.81);color:#fff}.Button--color--translucent{transition:color .1s,background-color .1s;background-color:rgba(32,32,32,.6);color:rgba(255,255,255,.5)}.Button--color--translucent:focus{transition:color .25s,background-color .25s}.Button--color--translucent:hover{background-color:rgba(54,54,54,.925);color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--selected:focus{transition:color .25s,background-color .25s}.Button--selected:hover{background-color:#2fb94f;color:#fff}.Button--modal{float:right;z-index:1;margin-top:-.5rem}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dropdown{position:relative;align-items:center}.Dropdown__control{display:inline-block;align-items:center;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.3333333333em;-ms-user-select:none;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;align-items:center;z-index:5;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-scroll{overflow-y:scroll}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s ease-out}.Dropdown__menuentry.selected{background-color:rgba(255,255,255,.5)!important;transition:background-color 0ms}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em);text-align:left;padding-top:2.5px}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline,.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue,.Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Knob__popupValue--right{top:.25rem;right:-50%}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left;vertical-align:baseline}.LabeledList__label{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.LabeledList__breakContents{word-break:break-all;word-wrap:break-word}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem;scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--gold{color:#fff;background-color:#825d13}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .5s,width .5s}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--disabled{border:1px solid #999}.ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.Section .Section:first-child{margin-top:-.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider:not(.Slider__disabled){cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--zebra>.Stack__item:nth-child(2n){background-color:#131313}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:rgba(0,0,0,0)}.Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.Tabs--vertical .Tab--selected{border-left:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#8b9bb0}.Tab--selected.Tab--color--gold{color:#f6c563}.Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#f3b22f}.Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#f3b22f}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity .15s ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;top:1em;left:.75em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout::-webkit-scrollbar,.Layout *::-webkit-scrollbar{width:12px}.Layout::-webkit-scrollbar-track,.Layout *::-webkit-scrollbar-track{background:#181818}.Layout::-webkit-scrollbar-thumb,.Layout *::-webkit-scrollbar-thumb{background:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.Layout__content--flexRow{display:flex;flex-flow:row}.Layout__content--flexColumn{display:flex;flex-flow:column}.Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.Layout__content--noMargin{margin:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom,#202020,#202020)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.emoji16x16{vertical-align:middle}a{color:#397ea5}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:active,.motd a:hover{color:#a4bad6}.italic,.italics,.emote{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}em{font-style:normal;font-weight:700}.darkmblue{color:#6685f5}.prefix,.ooc{font-weight:700}.looc{color:#69c;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#b82e00;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#386aff;font-weight:700}.adminsay{color:#9611d4;font-weight:700}.mentorhelp{color:#07b;font-weight:700}.adminhelp{color:#a00;font-weight:700}.playerreply{color:#80b;font-weight:700}.pmsend{color:#6685f5}.debug{color:#6d2f83}.name,.yell{font-weight:700}.siliconsay{font-family:Courier New,Courier,monospace}.deadsay{color:#e2c1ff}.radio{color:#20b142}.deptradio{color:#939}.comradio{color:#5f5cff}.syndradio{color:#8f4a4b}.dsquadradio{color:#998599}.resteamradio{color:#18bc46}.airadio{color:#ff5ed7}.centradio{color:#2681a5}.secradio{color:#dd3535}.engradio{color:#feac20}.medradio{color:#00b5ad}.sciradio{color:#c68cfa}.supradio{color:#b88646}.srvradio{color:#bbd164}.proradio{color:#b84f92}.admin_channel{color:#03fc9d;font-weight:700}.all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.mentor_channel{color:#775bff;font-weight:700}.mentor_channel_admin{color:#a35cff;font-weight:700}.djradio{color:#960}.binaryradio{color:#1b00fb;font-family:Courier New,Courier,monospace}.mommiradio{color:#6685f5}.alert{color:#d82020}h1.alert,h2.alert{color:#a4bad6}.ghostalert{color:#cc00c6;font-style:italic;font-weight:700}.emote{font-style:italic}.selecteddna{color:#a4bad6;background-color:#001b1b}.attack{color:red}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.warning{color:#c51e1e;font-style:italic}.boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.danger{color:#c51e1e;font-weight:700}.userdanger{color:#c51e1e;font-weight:700;font-size:120%}.biggerdanger{color:red;font-weight:700;font-size:150%}.info{color:#9ab0ff}.notice{color:#6685f5}.boldnotice{color:#6685f5;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#03bb39}.pr_announce,.boldannounceic,.boldannounceooc{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.alien{color:#c433c4}.noticealien{color:#00c000}.alertalien{color:#00c000;font-weight:700}.terrorspider{color:#cf52fa}.dantalion{color:#8b2c5e}.chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.chaosgood{color:#19e0c0;font-weight:700}.chaosneutral{color:#479ac0;font-weight:700}.chaosbad{color:#9047c0;font-weight:700}.chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.sinister{color:purple;font-weight:700;font-style:italic}.medal{font-weight:700}.blob{color:#006221;font-weight:700;font-style:italic}.confirm{color:#00af3b}.rose{color:#ff5050}.sans{font-family:Comic Sans MS,cursive,sans-serif}.wingdings{font-family:Wingdings,Webdings}.robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.ancient{color:#008b8b;font-style:italic}.newscaster{color:#c00}.mod{color:#735638;font-weight:700}.modooc{color:#184880;font-weight:700}.adminmod{color:#f0aa14;font-weight:700}.tajaran{color:#803b56}.skrell{color:#00ced1}.solcom{color:#8282fb}.com_srus{color:#7c4848}.soghun{color:#228b22}.changeling{color:#00b4de}.vox{color:#a0a}.diona{color:#804000;font-weight:700}.trinary{color:#727272}.kidan{color:#c64c05}.slime{color:#07a}.drask{color:#a3d4eb;font-family:Arial Black}.moth{color:#869b29;font-family:Copperplate}.clown{color:red}.vulpkanin{color:#b97a57}.abductor{color:purple;font-style:italic}.mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.rough{font-family:Trebuchet MS,cursive,sans-serif}.say_quote{font-family:Georgia,Verdana,sans-serif}.cult{color:purple;font-weight:700;font-style:italic}.cultspeech{color:#af0000;font-style:italic}.cultitalic{color:#a60000;font-style:italic}.cultlarge{color:#a60000;font-weight:700;font-size:120%}.narsie{color:#a60000;font-weight:700;font-size:300%}.narsiesmall{color:#a60000;font-weight:700;font-size:200%}.zombie{color:#7c4848}.zombielarge{color:#7c4848;font-weight:700;font-size:120%}.interface{color:#9031c4}.big{font-size:150%}.reallybig{font-size:175%}.greentext{color:#0f0;font-size:150%}.redtext{color:red;font-size:150%}.bold{font-weight:700}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.center{text-align:center}.red{color:red}.purple{color:#9031c4}.skeleton{color:#c8c8c8;font-weight:700;font-style:italic}.gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.orange{color:orange}.orangei{color:orange;font-style:italic}.orangeb{color:orange;font-weight:700}.resonate{color:#298f85}.healthscan_oxy{color:#5cc9ff}.revennotice{color:#6685f5}.revenboldnotice{color:#6685f5;font-weight:700}.revenbignotice{color:#6685f5;font-weight:700;font-size:120%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:120%}.specialnotice{color:#4a6f82;font-weight:700;font-size:120%}.good{color:green}.average{color:#ff8000}.bad{color:red}.italics,.talkinto{font-style:italic}.whisper{font-style:italic;color:#ccc}.recruit{color:#5c00e6;font-weight:700;font-style:italic}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:75%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#6685f5;font-weight:700}.rebooting{background:#2979af;color:#fff;padding:5px}.rebooting a{color:#fff!important;text-decoration-color:#fff!important}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.colossus{color:#7f282a;font-size:175%}.hierophant{color:#609;font-weight:700;font-style:italic}.hierophant_warning{color:#609;font-style:italic}.emoji{max-height:16px;max-width:16px}.adminticket{color:#3daf21;font-weight:700}.adminticketalt{color:#ccb847;font-weight:700}span.body .codephrases{color:#55f}span.body .coderesponses{color:#f33}.announcement h1,.announcement h2{color:#a4bad6;margin:8pt 0;line-height:1.2}.announcement p{color:#d82020;line-height:1.3}.announcement.minor h1{font-size:180%}.announcement.minor h2{font-size:170%}.announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.bolditalics{font-style:italic;font-weight:700}.boxed_message{background:#1b1c1e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.boxed_message.left_align_text{text-align:left}.boxed_message.red_border{background:#1e1b1b;border-color:#a00}.boxed_message.green_border{background:#1b1e1c;border-color:#0f0}.boxed_message.purple_border{background:#1d1c1f;border-color:#8000ff}.boxed_message.notice_border{background:#1b1c1e;border-color:#6685f5}.boxed_message.thick_border{border-width:thick}.oxygen{color:#449dff}.nitrogen{color:#f94541}.carbon_dioxide{color:#ccc}.plasma{color:#eb6b00}.sleeping_agent{color:#f28b89}.agent_b{color:teal}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-gold{color:#e39b0d!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .color-bg-gold{background-color:#bd810b!important}.theme-light .color-border-black{border-color:#000!important}.theme-light .color-border-white{border-color:#e6e6e6!important}.theme-light .color-border-red{border-color:#c82121!important}.theme-light .color-border-orange{border-color:#e6630d!important}.theme-light .color-border-yellow{border-color:#e5c304!important}.theme-light .color-border-olive{border-color:#a3b816!important}.theme-light .color-border-green{border-color:#1d9f3b!important}.theme-light .color-border-teal{border-color:#00a39c!important}.theme-light .color-border-blue{border-color:#1e78bb!important}.theme-light .color-border-violet{border-color:#5a30b5!important}.theme-light .color-border-purple{border-color:#932eb4!important}.theme-light .color-border-pink{border-color:#db228a!important}.theme-light .color-border-brown{border-color:#955d39!important}.theme-light .color-border-grey{border-color:#e6e6e6!important}.theme-light .color-border-good{border-color:#529923!important}.theme-light .color-border-average{border-color:#da810e!important}.theme-light .color-border-bad{border-color:#c82121!important}.theme-light .color-border-label{border-color:#353535!important}.theme-light .color-border-gold{border-color:#e39b0d!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(0,0,0,.075);transition:background-color 0}.theme-light .Tab--selected{background-color:rgba(0,0,0,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-left:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#353535}.theme-light .Tab--selected.Tab--color--gold{color:#f4b73f}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#e39b0d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#e39b0d}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-light .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-light .Section .Section:first-child{margin-top:-.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconRight .fa,.theme-light .Button--hasContent.Button--iconRight .fas,.theme-light .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-light .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-light .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--black:hover{background-color:#101010;color:#fff}.theme-light .Button--color--white{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--white:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--red{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--red:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--orange{transition:color .1s,background-color .1s;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--orange:hover{background-color:#e76d1d;color:#fff}.theme-light .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--yellow:hover{background-color:#e7c714;color:#fff}.theme-light .Button--color--olive{transition:color .1s,background-color .1s;background-color:#889912;color:#fff}.theme-light .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--olive:hover{background-color:#a9bc25;color:#fff}.theme-light .Button--color--green{transition:color .1s,background-color .1s;background-color:#188532;color:#fff}.theme-light .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--green:hover{background-color:#2ba648;color:#fff}.theme-light .Button--color--teal{transition:color .1s,background-color .1s;background-color:#008882;color:#fff}.theme-light .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--teal:hover{background-color:#10a9a2;color:#fff}.theme-light .Button--color--blue{transition:color .1s,background-color .1s;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--blue:hover{background-color:#2c81c0;color:#fff}.theme-light .Button--color--violet{transition:color .1s,background-color .1s;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--violet:hover{background-color:#653db9;color:#fff}.theme-light .Button--color--purple{transition:color .1s,background-color .1s;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--purple:hover{background-color:#9a3bb9;color:#fff}.theme-light .Button--color--pink{transition:color .1s,background-color .1s;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--pink:hover{background-color:#d93591;color:#fff}.theme-light .Button--color--brown{transition:color .1s,background-color .1s;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--brown:hover{background-color:#9c6745;color:#fff}.theme-light .Button--color--grey{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--grey:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--good{transition:color .1s,background-color .1s;background-color:#44801d;color:#fff}.theme-light .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--good:hover{background-color:#5d9f31;color:#fff}.theme-light .Button--color--average{transition:color .1s,background-color .1s;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--average:hover{background-color:#dc891d;color:#fff}.theme-light .Button--color--bad{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--bad:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--label{transition:color .1s,background-color .1s;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--label:hover{background-color:#424242;color:#fff}.theme-light .Button--color--gold{transition:color .1s,background-color .1s;background-color:#bd810b;color:#fff}.theme-light .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--gold:hover{background-color:#e5a11c;color:#fff}.theme-light .Button--color--default{transition:color .1s,background-color .1s;background-color:#bbb;color:#000}.theme-light .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--default:hover{background-color:#e3e3e3;color:#000}.theme-light .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-light .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-light .Button--color--transparent{transition:color .1s,background-color .1s;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--transparent:hover{background-color:rgba(255,255,255,.81);color:#000}.theme-light .Button--color--translucent{transition:color .1s,background-color .1s;background-color:rgba(238,238,238,.6);color:rgba(0,0,0,.5)}.theme-light .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--translucent:hover{background-color:rgba(253,253,253,.925);color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color .1s,background-color .1s;background-color:#0668b8;color:#fff}.theme-light .Button--selected:focus{transition:color .25s,background-color .25s}.theme-light .Button--selected:hover{background-color:#1785df;color:#fff}.theme-light .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#e6e6e6;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-light .Input--disabled{color:#777;border-color:#000;border-color:rgba(0,0,0,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#000;color:inherit}.theme-light .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-light .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#e6e6e6;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue,.theme-light .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .Knob__popupValue--right{top:.25rem;right:-50%}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Knob--color--gold .Knob__ringFill{stroke:#e39b0d}.theme-light .Slider:not(.Slider__disabled){cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--disabled{border:1px solid #999}.theme-light .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .ProgressBar--color--gold{border:.0833333333em solid #bd810b!important}.theme-light .ProgressBar--color--gold .ProgressBar__fill{background-color:#bd810b}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout::-webkit-scrollbar,.theme-light .Layout *::-webkit-scrollbar{width:12px}.theme-light .Layout::-webkit-scrollbar-track,.theme-light .Layout *::-webkit-scrollbar-track{background:#f2f2f2}.theme-light .Layout::-webkit-scrollbar-thumb,.theme-light .Layout *::-webkit-scrollbar-thumb{background:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-light .Layout__content--flexRow{display:flex;flex-flow:row}.theme-light .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-light .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-light .Layout__content--noMargin{margin:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom,#eee,#eee)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s,background-color .25s}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#fff;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .italic,.theme-light .italics,.theme-light .emote{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .darkmblue{color:#00f}.theme-light .prefix,.theme-light .ooc{font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#b82e00;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#386aff;font-weight:700}.theme-light .adminsay{color:#9611d4;font-weight:700}.theme-light .mentorhelp{color:#07b;font-weight:700}.theme-light .adminhelp{color:#a00;font-weight:700}.theme-light .playerreply{color:#80b;font-weight:700}.theme-light .pmsend{color:#00f}.theme-light .debug{color:#6d2f83}.theme-light .name,.theme-light .yell{font-weight:700}.theme-light .siliconsay{font-family:Courier New,Courier,monospace}.theme-light .deadsay{color:#5c00e6}.theme-light .radio{color:#408010}.theme-light .deptradio{color:#939}.theme-light .comradio{color:#204090}.theme-light .syndradio{color:#6d3f40}.theme-light .dsquadradio{color:#686868}.theme-light .resteamradio{color:#18bc46}.theme-light .airadio{color:#f0f}.theme-light .centradio{color:#5c5c7c}.theme-light .secradio{color:#a30000}.theme-light .engradio{color:#a66300}.theme-light .medradio{color:#009190}.theme-light .sciradio{color:#939}.theme-light .supradio{color:#7f6539}.theme-light .srvradio{color:#80a000}.theme-light .proradio{color:#e3027a}.theme-light .admin_channel{color:#9a04d1;font-weight:700}.theme-light .all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.theme-light .mentor_channel{color:#775bff;font-weight:700}.theme-light .mentor_channel_admin{color:#a35cff;font-weight:700}.theme-light .djradio{color:#630}.theme-light .binaryradio{color:#0b0050;font-family:Courier New,Courier,monospace}.theme-light .mommiradio{color:navy}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .emote{font-style:italic}.theme-light .selecteddna{color:#fff;background-color:#001b1b}.theme-light .attack{color:red}.theme-light .moderate{color:#c00}.theme-light .disarm{color:#900}.theme-light .passive{color:#600}.theme-light .warning{color:red;font-style:italic}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .danger{color:red;font-weight:700}.theme-light .userdanger{color:red;font-weight:700;font-size:120%}.theme-light .biggerdanger{color:red;font-weight:700;font-size:150%}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03bb39}.theme-light .pr_announce{color:#228b22;font-weight:700}.theme-light .boldannounceic,.theme-light .boldannounceooc{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .terrorspider{color:#320e32}.theme-light .dantalion{color:#6a2148}.theme-light .chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.theme-light .chaosgood{color:#19e0c0;font-weight:700}.theme-light .chaosneutral{color:#479ac0;font-weight:700}.theme-light .chaosbad{color:#9047c0;font-weight:700}.theme-light .chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.theme-light .sinister{color:purple;font-weight:700;font-style:italic}.theme-light .blob{color:#006221;font-weight:700;font-style:italic}.theme-light .confirm{color:#00af3b}.theme-light .rose{color:#ff5050}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .wingdings{font-family:Wingdings,Webdings}.theme-light .robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.theme-light .ancient{color:#008b8b;font-style:italic}.theme-light .newscaster{color:maroon}.theme-light .mod{color:#735638;font-weight:700}.theme-light .modooc{color:#184880;font-weight:700}.theme-light .adminmod{color:#402a14;font-weight:700}.theme-light .tajaran{color:#803b56}.theme-light .skrell{color:#00ced1}.theme-light .solcom{color:#22228b}.theme-light .com_srus{color:#7c4848}.theme-light .soghun{color:#228b22}.theme-light .changeling{color:purple}.theme-light .vox{color:#a0a}.theme-light .diona{color:#804000;font-weight:700}.theme-light .trinary{color:#727272}.theme-light .kidan{color:#664205}.theme-light .slime{color:#07a}.theme-light .drask{color:#a3d4eb;font-family:Arial Black}.theme-light .moth{color:#869b29;font-family:Copperplate}.theme-light .clown{color:red}.theme-light .vulpkanin{color:#b97a57}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.theme-light .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .cult{color:purple;font-weight:700;font-style:italic}.theme-light .cultspeech{color:#7f0000;font-style:italic}.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultlarge{color:#960000;font-weight:700;font-size:120%}.theme-light .narsie{color:#960000;font-weight:700;font-size:300%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:200%}.theme-light .zombie{color:#7c4848}.theme-light .zombielarge{color:#7c4848;font-weight:700;font-size:120%}.theme-light .interface{color:#303}.theme-light .big{font-size:150%}.theme-light .reallybig{font-size:175%}.theme-light .greentext{color:#0f0;font-size:150%}.theme-light .redtext{color:red;font-size:150%}.theme-light .bold{font-weight:700}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .center{text-align:center}.theme-light .red{color:red}.theme-light .purple{color:#5e2d79}.theme-light .skeleton{color:#585858;font-weight:700;font-style:italic}.theme-light .gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.theme-light .orange{color:orange}.theme-light .orangei{color:orange;font-style:italic}.theme-light .orangeb{color:orange;font-weight:700}.theme-light .resonate{color:#298f85}.theme-light .healthscan_oxy{color:#0074bd}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{color:#1d2953;font-weight:700;font-size:120%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:120%}.theme-light .specialnoticebold{color:#36525e;font-weight:700;font-size:120%}.theme-light .specialnotice{color:#36525e;font-size:120%}.theme-light .medal{font-weight:700}.theme-light .good{color:green}.theme-light .average{color:#ff8000}.theme-light .bad{color:red}.theme-light .italics,.theme-light .talkinto{font-style:italic}.theme-light .whisper{font-style:italic;color:#333}.theme-light .recruit{color:#5c00e6;font-weight:700;font-style:italic}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:75%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .rebooting{background:#2979af;color:#fff;padding:5px}.theme-light .rebooting a{color:#fff!important;text-decoration-color:#fff!important}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .colossus{color:#7f282a;font-size:175%}.theme-light .hierophant{color:#609;font-weight:700;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .emoji{max-height:16px;max-width:16px}.theme-light .adminticket{color:#3e7336;font-weight:700}.theme-light .adminticketalt{color:#014c8a;font-weight:700}.theme-light span.body .codephrases{color:#00f}.theme-light span.body .coderesponses{color:red}.theme-light .announcement h1,.theme-light .announcement h2{color:#000;margin:8pt 0;line-height:1.2}.theme-light .announcement p{color:#d82020;line-height:1.3}.theme-light .announcement.minor h1{font-size:180%}.theme-light .announcement.minor h2{font-size:170%}.theme-light .announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.theme-light .bolditalics{font-style:italic;font-weight:700}.theme-light .boxed_message{background:#f7fcff;border:1px solid #111a26;margin:.5em;padding:.5em .75em;text-align:center}.theme-light .boxed_message.left_align_text{text-align:left}.theme-light .boxed_message.red_border{background:#fff7f7;border-color:#a00}.theme-light .boxed_message.green_border{background:#f7fff7;border-color:#0f0}.theme-light .boxed_message.purple_border{background:#fdf7ff;border-color:#a0f}.theme-light .boxed_message.notice_border{background:#f7fdff;border-color:#0000bf}.theme-light .boxed_message.thick_border{border-width:thick}.theme-light .oxygen{color:#006adb}.theme-light .nitrogen{color:#d00a06}.theme-light .carbon_dioxide{color:#1f1f1f}.theme-light .plasma{color:#853c00}.theme-light .sleeping_agent{color:#e82f2c}.theme-light .agent_b{color:#004d4d}.theme-ntos .color-black{color:#1a1a1a!important}.theme-ntos .color-white{color:#fff!important}.theme-ntos .color-red{color:#df3e3e!important}.theme-ntos .color-orange{color:#f37f33!important}.theme-ntos .color-yellow{color:#fbda21!important}.theme-ntos .color-olive{color:#cbe41c!important}.theme-ntos .color-green{color:#25ca4c!important}.theme-ntos .color-teal{color:#00d6cc!important}.theme-ntos .color-blue{color:#2e93de!important}.theme-ntos .color-violet{color:#7349cf!important}.theme-ntos .color-purple{color:#ad45d0!important}.theme-ntos .color-pink{color:#e34da1!important}.theme-ntos .color-brown{color:#b97447!important}.theme-ntos .color-grey{color:#848484!important}.theme-ntos .color-good{color:#68c22d!important}.theme-ntos .color-average{color:#f29a29!important}.theme-ntos .color-bad{color:#df3e3e!important}.theme-ntos .color-label{color:#8b9bb0!important}.theme-ntos .color-gold{color:#f3b22f!important}.theme-ntos .color-bg-black{background-color:#000!important}.theme-ntos .color-bg-white{background-color:#d9d9d9!important}.theme-ntos .color-bg-red{background-color:#bd2020!important}.theme-ntos .color-bg-orange{background-color:#d95e0c!important}.theme-ntos .color-bg-yellow{background-color:#d9b804!important}.theme-ntos .color-bg-olive{background-color:#9aad14!important}.theme-ntos .color-bg-green{background-color:#1b9638!important}.theme-ntos .color-bg-teal{background-color:#009a93!important}.theme-ntos .color-bg-blue{background-color:#1c71b1!important}.theme-ntos .color-bg-violet{background-color:#552dab!important}.theme-ntos .color-bg-purple{background-color:#8b2baa!important}.theme-ntos .color-bg-pink{background-color:#cf2082!important}.theme-ntos .color-bg-brown{background-color:#8c5836!important}.theme-ntos .color-bg-grey{background-color:#646464!important}.theme-ntos .color-bg-good{background-color:#4d9121!important}.theme-ntos .color-bg-average{background-color:#cd7a0d!important}.theme-ntos .color-bg-bad{background-color:#bd2020!important}.theme-ntos .color-bg-label{background-color:#657a94!important}.theme-ntos .color-bg-gold{background-color:#d6920c!important}.theme-ntos .color-border-black{border-color:#1a1a1a!important}.theme-ntos .color-border-white{border-color:#fff!important}.theme-ntos .color-border-red{border-color:#df3e3e!important}.theme-ntos .color-border-orange{border-color:#f37f33!important}.theme-ntos .color-border-yellow{border-color:#fbda21!important}.theme-ntos .color-border-olive{border-color:#cbe41c!important}.theme-ntos .color-border-green{border-color:#25ca4c!important}.theme-ntos .color-border-teal{border-color:#00d6cc!important}.theme-ntos .color-border-blue{border-color:#2e93de!important}.theme-ntos .color-border-violet{border-color:#7349cf!important}.theme-ntos .color-border-purple{border-color:#ad45d0!important}.theme-ntos .color-border-pink{border-color:#e34da1!important}.theme-ntos .color-border-brown{border-color:#b97447!important}.theme-ntos .color-border-grey{border-color:#848484!important}.theme-ntos .color-border-good{border-color:#68c22d!important}.theme-ntos .color-border-average{border-color:#f29a29!important}.theme-ntos .color-border-bad{border-color:#df3e3e!important}.theme-ntos .color-border-label{border-color:#8b9bb0!important}.theme-ntos .color-border-gold{border-color:#f3b22f!important}.theme-ntos .Section{position:relative;margin-bottom:.5em;background-color:#121922;box-sizing:border-box}.theme-ntos .Section:last-child{margin-bottom:0}.theme-ntos .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-ntos .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-ntos .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-ntos .Section__rest{position:relative}.theme-ntos .Section__content{padding:.66em .5em}.theme-ntos .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-ntos .Section--fill{display:flex;flex-direction:column;height:100%}.theme-ntos .Section--fill>.Section__rest{flex-grow:1}.theme-ntos .Section--fill>.Section__rest>.Section__content{height:100%}.theme-ntos .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-ntos .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-ntos .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-ntos .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-ntos .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-ntos .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-ntos .Section .Section:first-child{margin-top:-.5em}.theme-ntos .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-ntos .Section .Section .Section .Section__titleText{font-size:1em}.theme-ntos .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-ntos .Button:last-child{margin-right:0;margin-bottom:0}.theme-ntos .Button .fa,.theme-ntos .Button .fas,.theme-ntos .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-ntos .Button--hasContent .fa,.theme-ntos .Button--hasContent .fas,.theme-ntos .Button--hasContent .far{margin-right:.25em}.theme-ntos .Button--hasContent.Button--iconRight .fa,.theme-ntos .Button--hasContent.Button--iconRight .fas,.theme-ntos .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-ntos .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-ntos .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-ntos .Button--circular{border-radius:50%}.theme-ntos .Button--compact{padding:0 .25em;line-height:1.333em}.theme-ntos .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-ntos .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-ntos .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--black:hover{background-color:#101010;color:#fff}.theme-ntos .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-ntos .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-ntos .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-ntos .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-ntos .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-ntos .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-ntos .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-ntos .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-ntos .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-ntos .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-ntos .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-ntos .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-ntos .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-ntos .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-ntos .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-ntos .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-ntos .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-ntos .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-ntos .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-ntos .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-ntos .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-ntos .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-ntos .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-ntos .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-ntos .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-ntos .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-ntos .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-ntos .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-ntos .Button--color--default{transition:color .1s,background-color .1s;background-color:#384e68;color:#fff}.theme-ntos .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--default:hover{background-color:#4f6885;color:#fff}.theme-ntos .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--danger:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--transparent{transition:color .1s,background-color .1s;background-color:rgba(27,38,51,0);color:rgba(255,255,255,.5)}.theme-ntos .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--transparent:hover{background-color:rgba(44,57,73,.81);color:#fff}.theme-ntos .Button--color--translucent{transition:color .1s,background-color .1s;background-color:rgba(27,38,51,.6);color:rgba(255,255,255,.5)}.theme-ntos .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--translucent:hover{background-color:rgba(48,61,76,.925);color:#fff}.theme-ntos .Button--disabled{background-color:#999!important}.theme-ntos .Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--selected:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--selected:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-ntos .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-ntos .NumberInput--fluid{display:block}.theme-ntos .NumberInput__content{margin-left:.5em}.theme-ntos .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-ntos .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.theme-ntos .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-ntos .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-ntos .Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-ntos .Input--fluid{display:block;width:auto}.theme-ntos .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-ntos .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-ntos .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-ntos .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-ntos .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-ntos .TextArea--fluid{display:block;width:auto;height:auto}.theme-ntos .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-ntos .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-ntos .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-ntos .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-ntos .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-ntos .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-ntos .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-ntos .Knob__popupValue,.theme-ntos .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .Knob__popupValue--right{top:.25rem;right:-50%}.theme-ntos .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-ntos .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-ntos .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-ntos .Knob__ringFillPivot{transform:rotate(135deg)}.theme-ntos .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-ntos .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-ntos .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-ntos .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-ntos .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-ntos .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-ntos .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-ntos .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-ntos .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-ntos .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-ntos .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-ntos .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-ntos .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-ntos .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-ntos .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-ntos .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-ntos .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-ntos .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-ntos .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-ntos .Slider:not(.Slider__disabled){cursor:e-resize}.theme-ntos .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-ntos .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-ntos .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-ntos .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-ntos .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-ntos .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-ntos .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-ntos .ProgressBar--color--default{border:.0833333333em solid #3e6189}.theme-ntos .ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.theme-ntos .ProgressBar--color--disabled{border:1px solid #999}.theme-ntos .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-ntos .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-ntos .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-ntos .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-ntos .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-ntos .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-ntos .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-ntos .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-ntos .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-ntos .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-ntos .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-ntos .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-ntos .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-ntos .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-ntos .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-ntos .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-ntos .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-ntos .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-ntos .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-ntos .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-ntos .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-ntos .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-ntos .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-ntos .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-ntos .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-ntos .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-ntos .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-ntos .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-ntos .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-ntos .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-ntos .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-ntos .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-ntos .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-ntos .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-ntos .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-ntos .Chat{color:#abc6ec}.theme-ntos .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-ntos .Chat__badge:before{content:"x"}.theme-ntos .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-ntos .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-ntos .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-ntos .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#121922}.theme-ntos .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-ntos .Chat__highlight{color:#000}.theme-ntos .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-ntos .ChatMessage{word-wrap:break-word}.theme-ntos .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-ntos .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-ntos .Layout,.theme-ntos .Layout *{scrollbar-base-color:#141d26;scrollbar-face-color:#2a3b4f;scrollbar-3dlight-color:#1b2633;scrollbar-highlight-color:#1b2633;scrollbar-track-color:#141d26;scrollbar-arrow-color:#7290b4;scrollbar-shadow-color:#2a3b4f}.theme-ntos .Layout::-webkit-scrollbar,.theme-ntos .Layout *::-webkit-scrollbar{width:12px}.theme-ntos .Layout::-webkit-scrollbar-track,.theme-ntos .Layout *::-webkit-scrollbar-track{background:#141d26}.theme-ntos .Layout::-webkit-scrollbar-thumb,.theme-ntos .Layout *::-webkit-scrollbar-thumb{background:#2a3b4f}.theme-ntos .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-ntos .Layout__content--flexRow{display:flex;flex-flow:row}.theme-ntos .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-ntos .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-ntos .Layout__content--noMargin{margin:0}.theme-ntos .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1b2633;background-image:linear-gradient(to bottom,#1b2633,#1b2633)}.theme-ntos .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-ntos .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-ntos .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-ntos .Window__contentPadding:after{height:0}.theme-ntos .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-ntos .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(50,63,78,.25);pointer-events:none}.theme-ntos .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-ntos .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-ntos .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-ntos .TitleBar{background-color:#1b2633;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-ntos .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#1b2633;transition:color .25s,background-color .25s}.theme-ntos .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-ntos .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-ntos .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-ntos .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-ntos .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-ntos .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-ntos .boxed_message{background:#1c242e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-ntos .boxed_message.left_align_text{text-align:left}.theme-ntos .boxed_message.red_border{background:#2e1c1c;border-color:#a00}.theme-ntos .boxed_message.green_border{background:#1c2e22;border-color:#0f0}.theme-ntos .boxed_message.purple_border{background:#221c2e;border-color:#8000ff}.theme-ntos .boxed_message.notice_border{background:#1f2633;border-color:#6685f5}.theme-ntos .boxed_message.thick_border{border-width:thick}.theme-syndicate .color-black{color:#1a1a1a!important}.theme-syndicate .color-white{color:#fff!important}.theme-syndicate .color-red{color:#df3e3e!important}.theme-syndicate .color-orange{color:#f37f33!important}.theme-syndicate .color-yellow{color:#fbda21!important}.theme-syndicate .color-olive{color:#cbe41c!important}.theme-syndicate .color-green{color:#25ca4c!important}.theme-syndicate .color-teal{color:#00d6cc!important}.theme-syndicate .color-blue{color:#2e93de!important}.theme-syndicate .color-violet{color:#7349cf!important}.theme-syndicate .color-purple{color:#ad45d0!important}.theme-syndicate .color-pink{color:#e34da1!important}.theme-syndicate .color-brown{color:#b97447!important}.theme-syndicate .color-grey{color:#848484!important}.theme-syndicate .color-good{color:#68c22d!important}.theme-syndicate .color-average{color:#f29a29!important}.theme-syndicate .color-bad{color:#df3e3e!important}.theme-syndicate .color-label{color:#8b9bb0!important}.theme-syndicate .color-gold{color:#f3b22f!important}.theme-syndicate .color-bg-black{background-color:#000!important}.theme-syndicate .color-bg-white{background-color:#d9d9d9!important}.theme-syndicate .color-bg-red{background-color:#bd2020!important}.theme-syndicate .color-bg-orange{background-color:#d95e0c!important}.theme-syndicate .color-bg-yellow{background-color:#d9b804!important}.theme-syndicate .color-bg-olive{background-color:#9aad14!important}.theme-syndicate .color-bg-green{background-color:#1b9638!important}.theme-syndicate .color-bg-teal{background-color:#009a93!important}.theme-syndicate .color-bg-blue{background-color:#1c71b1!important}.theme-syndicate .color-bg-violet{background-color:#552dab!important}.theme-syndicate .color-bg-purple{background-color:#8b2baa!important}.theme-syndicate .color-bg-pink{background-color:#cf2082!important}.theme-syndicate .color-bg-brown{background-color:#8c5836!important}.theme-syndicate .color-bg-grey{background-color:#646464!important}.theme-syndicate .color-bg-good{background-color:#4d9121!important}.theme-syndicate .color-bg-average{background-color:#cd7a0d!important}.theme-syndicate .color-bg-bad{background-color:#bd2020!important}.theme-syndicate .color-bg-label{background-color:#657a94!important}.theme-syndicate .color-bg-gold{background-color:#d6920c!important}.theme-syndicate .color-border-black{border-color:#1a1a1a!important}.theme-syndicate .color-border-white{border-color:#fff!important}.theme-syndicate .color-border-red{border-color:#df3e3e!important}.theme-syndicate .color-border-orange{border-color:#f37f33!important}.theme-syndicate .color-border-yellow{border-color:#fbda21!important}.theme-syndicate .color-border-olive{border-color:#cbe41c!important}.theme-syndicate .color-border-green{border-color:#25ca4c!important}.theme-syndicate .color-border-teal{border-color:#00d6cc!important}.theme-syndicate .color-border-blue{border-color:#2e93de!important}.theme-syndicate .color-border-violet{border-color:#7349cf!important}.theme-syndicate .color-border-purple{border-color:#ad45d0!important}.theme-syndicate .color-border-pink{border-color:#e34da1!important}.theme-syndicate .color-border-brown{border-color:#b97447!important}.theme-syndicate .color-border-grey{border-color:#848484!important}.theme-syndicate .color-border-good{border-color:#68c22d!important}.theme-syndicate .color-border-average{border-color:#f29a29!important}.theme-syndicate .color-border-bad{border-color:#df3e3e!important}.theme-syndicate .color-border-label{border-color:#8b9bb0!important}.theme-syndicate .color-border-gold{border-color:#f3b22f!important}.theme-syndicate .Section{position:relative;margin-bottom:.5em;background-color:#2b0101;box-sizing:border-box}.theme-syndicate .Section:last-child{margin-bottom:0}.theme-syndicate .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #397439}.theme-syndicate .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-syndicate .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-syndicate .Section__rest{position:relative}.theme-syndicate .Section__content{padding:.66em .5em}.theme-syndicate .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-syndicate .Section--fill{display:flex;flex-direction:column;height:100%}.theme-syndicate .Section--fill>.Section__rest{flex-grow:1}.theme-syndicate .Section--fill>.Section__rest>.Section__content{height:100%}.theme-syndicate .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-syndicate .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-syndicate .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-syndicate .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-syndicate .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-syndicate .Section .Section:first-child{margin-top:-.5em}.theme-syndicate .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-syndicate .Section .Section .Section .Section__titleText{font-size:1em}.theme-syndicate .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-syndicate .Button:last-child{margin-right:0;margin-bottom:0}.theme-syndicate .Button .fa,.theme-syndicate .Button .fas,.theme-syndicate .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-syndicate .Button--hasContent .fa,.theme-syndicate .Button--hasContent .fas,.theme-syndicate .Button--hasContent .far{margin-right:.25em}.theme-syndicate .Button--hasContent.Button--iconRight .fa,.theme-syndicate .Button--hasContent.Button--iconRight .fas,.theme-syndicate .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-syndicate .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-syndicate .Button--circular{border-radius:50%}.theme-syndicate .Button--compact{padding:0 .25em;line-height:1.333em}.theme-syndicate .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-syndicate .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-syndicate .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--black:hover{background-color:#101010;color:#fff}.theme-syndicate .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-syndicate .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-syndicate .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-syndicate .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-syndicate .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-syndicate .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-syndicate .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-syndicate .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-syndicate .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-syndicate .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-syndicate .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-syndicate .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-syndicate .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-syndicate .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-syndicate .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-syndicate .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-syndicate .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-syndicate .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-syndicate .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-syndicate .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-syndicate .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-syndicate .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-syndicate .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-syndicate .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-syndicate .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-syndicate .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-syndicate .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-syndicate .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-syndicate .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-syndicate .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-syndicate .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-syndicate .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-syndicate .Button--color--default{transition:color .1s,background-color .1s;background-color:#397439;color:#fff}.theme-syndicate .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--default:hover{background-color:#509350;color:#fff}.theme-syndicate .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-syndicate .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-syndicate .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-syndicate .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-syndicate .Button--color--transparent{transition:color .1s,background-color .1s;background-color:rgba(77,2,2,0);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--transparent:hover{background-color:rgba(103,14,14,.81);color:#fff}.theme-syndicate .Button--color--translucent{transition:color .1s,background-color .1s;background-color:rgba(77,2,2,.6);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--translucent:hover{background-color:rgba(105,20,20,.925);color:#fff}.theme-syndicate .Button--disabled{background-color:#363636!important}.theme-syndicate .Button--selected{transition:color .1s,background-color .1s;background-color:#9d0808;color:#fff}.theme-syndicate .Button--selected:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--selected:hover{background-color:#c11919;color:#fff}.theme-syndicate .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-syndicate .NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#fff;background-color:#910101;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.theme-syndicate .NoticeBox--color--black{color:#fff;background-color:#000}.theme-syndicate .NoticeBox--color--white{color:#000;background-color:#b3b3b3}.theme-syndicate .NoticeBox--color--red{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--orange{color:#fff;background-color:#854114}.theme-syndicate .NoticeBox--color--yellow{color:#000;background-color:#83710d}.theme-syndicate .NoticeBox--color--olive{color:#000;background-color:#576015}.theme-syndicate .NoticeBox--color--green{color:#fff;background-color:#174e24}.theme-syndicate .NoticeBox--color--teal{color:#fff;background-color:#064845}.theme-syndicate .NoticeBox--color--blue{color:#fff;background-color:#1b4565}.theme-syndicate .NoticeBox--color--violet{color:#fff;background-color:#3b2864}.theme-syndicate .NoticeBox--color--purple{color:#fff;background-color:#542663}.theme-syndicate .NoticeBox--color--pink{color:#fff;background-color:#802257}.theme-syndicate .NoticeBox--color--brown{color:#fff;background-color:#4c3729}.theme-syndicate .NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.theme-syndicate .NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.theme-syndicate .NoticeBox--color--average{color:#fff;background-color:#7b4e13}.theme-syndicate .NoticeBox--color--bad{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--label{color:#fff;background-color:#53565a}.theme-syndicate .NoticeBox--color--gold{color:#fff;background-color:#825d13}.theme-syndicate .NoticeBox--type--info{color:#fff;background-color:#235982}.theme-syndicate .NoticeBox--type--success{color:#fff;background-color:#1e662f}.theme-syndicate .NoticeBox--type--warning{color:#fff;background-color:#a95219}.theme-syndicate .NoticeBox--type--danger{color:#fff;background-color:#8f2828}.theme-syndicate .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#87ce87;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-syndicate .NumberInput--fluid{display:block}.theme-syndicate .NumberInput__content{margin-left:.5em}.theme-syndicate .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-syndicate .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #87ce87;background-color:#87ce87}.theme-syndicate .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-syndicate .Input--disabled{color:#777;border-color:#6b6b6b;border-color:rgba(107,107,107,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-syndicate .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-syndicate .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-syndicate .TextArea{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-syndicate .TextArea--fluid{display:block;width:auto;height:auto}.theme-syndicate .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-syndicate .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-syndicate .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-syndicate .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-syndicate .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-syndicate .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-syndicate .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-syndicate .Knob__popupValue,.theme-syndicate .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .Knob__popupValue--right{top:.25rem;right:-50%}.theme-syndicate .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-syndicate .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-syndicate .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-syndicate .Knob__ringFillPivot{transform:rotate(135deg)}.theme-syndicate .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-syndicate .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-syndicate .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-syndicate .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-syndicate .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-syndicate .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-syndicate .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-syndicate .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-syndicate .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-syndicate .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-syndicate .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-syndicate .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-syndicate .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-syndicate .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-syndicate .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-syndicate .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-syndicate .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-syndicate .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-syndicate .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-syndicate .Slider:not(.Slider__disabled){cursor:e-resize}.theme-syndicate .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-syndicate .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-syndicate .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-syndicate .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color .5s}.theme-syndicate .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-syndicate .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-syndicate .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-syndicate .ProgressBar--color--default{border:.0833333333em solid #306330}.theme-syndicate .ProgressBar--color--default .ProgressBar__fill{background-color:#306330}.theme-syndicate .ProgressBar--color--disabled{border:1px solid #999}.theme-syndicate .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-syndicate .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-syndicate .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-syndicate .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-syndicate .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-syndicate .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-syndicate .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-syndicate .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-syndicate .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-syndicate .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-syndicate .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-syndicate .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-syndicate .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-syndicate .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-syndicate .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-syndicate .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-syndicate .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-syndicate .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-syndicate .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-syndicate .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-syndicate .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-syndicate .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-syndicate .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-syndicate .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-syndicate .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-syndicate .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-syndicate .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-syndicate .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-syndicate .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-syndicate .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-syndicate .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-syndicate .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-syndicate .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-syndicate .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-syndicate .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-syndicate .Chat{color:#abc6ec}.theme-syndicate .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-syndicate .Chat__badge:before{content:"x"}.theme-syndicate .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-syndicate .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-syndicate .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-syndicate .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#2b0101}.theme-syndicate .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-syndicate .Chat__highlight{color:#000}.theme-syndicate .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-syndicate .ChatMessage{word-wrap:break-word}.theme-syndicate .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-syndicate .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-syndicate .Layout,.theme-syndicate .Layout *{scrollbar-base-color:#3a0202;scrollbar-face-color:#770303;scrollbar-3dlight-color:#4d0202;scrollbar-highlight-color:#4d0202;scrollbar-track-color:#3a0202;scrollbar-arrow-color:#fa2d2d;scrollbar-shadow-color:#770303}.theme-syndicate .Layout::-webkit-scrollbar,.theme-syndicate .Layout *::-webkit-scrollbar{width:12px}.theme-syndicate .Layout::-webkit-scrollbar-track,.theme-syndicate .Layout *::-webkit-scrollbar-track{background:#3a0202}.theme-syndicate .Layout::-webkit-scrollbar-thumb,.theme-syndicate .Layout *::-webkit-scrollbar-thumb{background:#770303}.theme-syndicate .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-syndicate .Layout__content--flexRow{display:flex;flex-flow:row}.theme-syndicate .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-syndicate .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-syndicate .Layout__content--noMargin{margin:0}.theme-syndicate .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#4d0202;background-image:linear-gradient(to bottom,#4d0202,#4d0202)}.theme-syndicate .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-syndicate .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-syndicate .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-syndicate .Window__contentPadding:after{height:0}.theme-syndicate .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-syndicate .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(108,22,22,.25);pointer-events:none}.theme-syndicate .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-syndicate .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-syndicate .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-syndicate .TitleBar{background-color:#910101;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-syndicate .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#910101;transition:color .25s,background-color .25s}.theme-syndicate .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-syndicate .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-syndicate .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-syndicate .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-syndicate .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-syndicate .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-syndicate .adminooc{color:#29ccbe}.theme-syndicate .debug{color:#8f39e6}.theme-syndicate .boxed_message{background:rgba(20,20,35,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-syndicate .boxed_message.left_align_text{text-align:left}.theme-syndicate .boxed_message.red_border{background:rgba(0,0,0,.2);border-color:red}.theme-syndicate .boxed_message.green_border{background:rgba(0,75,0,.25);border-color:#0f0}.theme-syndicate .boxed_message.purple_border{background:rgba(25,0,50,.25);border-color:#8000ff}.theme-syndicate .boxed_message.notice_border{background:rgba(0,0,75,.25);border-color:#6685f5}.theme-syndicate .boxed_message.thick_border{border-width:thick}.theme-paradise .color-black{color:#1a1a1a!important}.theme-paradise .color-white{color:#fff!important}.theme-paradise .color-red{color:#df3e3e!important}.theme-paradise .color-orange{color:#f37f33!important}.theme-paradise .color-yellow{color:#fbda21!important}.theme-paradise .color-olive{color:#cbe41c!important}.theme-paradise .color-green{color:#25ca4c!important}.theme-paradise .color-teal{color:#00d6cc!important}.theme-paradise .color-blue{color:#2e93de!important}.theme-paradise .color-violet{color:#7349cf!important}.theme-paradise .color-purple{color:#ad45d0!important}.theme-paradise .color-pink{color:#e34da1!important}.theme-paradise .color-brown{color:#b97447!important}.theme-paradise .color-grey{color:#848484!important}.theme-paradise .color-good{color:#68c22d!important}.theme-paradise .color-average{color:#f29a29!important}.theme-paradise .color-bad{color:#df3e3e!important}.theme-paradise .color-label{color:#955d4b!important}.theme-paradise .color-gold{color:#f3b22f!important}.theme-paradise .color-bg-black{background-color:#000!important}.theme-paradise .color-bg-white{background-color:#d9d9d9!important}.theme-paradise .color-bg-red{background-color:#bd2020!important}.theme-paradise .color-bg-orange{background-color:#d95e0c!important}.theme-paradise .color-bg-yellow{background-color:#d9b804!important}.theme-paradise .color-bg-olive{background-color:#9aad14!important}.theme-paradise .color-bg-green{background-color:#1b9638!important}.theme-paradise .color-bg-teal{background-color:#009a93!important}.theme-paradise .color-bg-blue{background-color:#1c71b1!important}.theme-paradise .color-bg-violet{background-color:#552dab!important}.theme-paradise .color-bg-purple{background-color:#8b2baa!important}.theme-paradise .color-bg-pink{background-color:#cf2082!important}.theme-paradise .color-bg-brown{background-color:#8c5836!important}.theme-paradise .color-bg-grey{background-color:#646464!important}.theme-paradise .color-bg-good{background-color:#4d9121!important}.theme-paradise .color-bg-average{background-color:#cd7a0d!important}.theme-paradise .color-bg-bad{background-color:#bd2020!important}.theme-paradise .color-bg-label{background-color:#6d4436!important}.theme-paradise .color-bg-gold{background-color:#d6920c!important}.theme-paradise .color-border-black{border-color:#1a1a1a!important}.theme-paradise .color-border-white{border-color:#fff!important}.theme-paradise .color-border-red{border-color:#df3e3e!important}.theme-paradise .color-border-orange{border-color:#f37f33!important}.theme-paradise .color-border-yellow{border-color:#fbda21!important}.theme-paradise .color-border-olive{border-color:#cbe41c!important}.theme-paradise .color-border-green{border-color:#25ca4c!important}.theme-paradise .color-border-teal{border-color:#00d6cc!important}.theme-paradise .color-border-blue{border-color:#2e93de!important}.theme-paradise .color-border-violet{border-color:#7349cf!important}.theme-paradise .color-border-purple{border-color:#ad45d0!important}.theme-paradise .color-border-pink{border-color:#e34da1!important}.theme-paradise .color-border-brown{border-color:#b97447!important}.theme-paradise .color-border-grey{border-color:#848484!important}.theme-paradise .color-border-good{border-color:#68c22d!important}.theme-paradise .color-border-average{border-color:#f29a29!important}.theme-paradise .color-border-bad{border-color:#df3e3e!important}.theme-paradise .color-border-label{border-color:#955d4b!important}.theme-paradise .color-border-gold{border-color:#f3b22f!important}.theme-paradise .Section{position:relative;margin-bottom:.5em;background-color:#40071a;background-color:rgba(0,0,0,.5);box-sizing:border-box}.theme-paradise .Section:last-child{margin-bottom:0}.theme-paradise .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #208080}.theme-paradise .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-paradise .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-paradise .Section__rest{position:relative}.theme-paradise .Section__content{padding:.66em .5em}.theme-paradise .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-paradise .Section--fill{display:flex;flex-direction:column;height:100%}.theme-paradise .Section--fill>.Section__rest{flex-grow:1}.theme-paradise .Section--fill>.Section__rest>.Section__content{height:100%}.theme-paradise .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-paradise .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-paradise .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-paradise .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-paradise .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-paradise .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-paradise .Section .Section:first-child{margin-top:-.5em}.theme-paradise .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-paradise .Section .Section .Section .Section__titleText{font-size:1em}.theme-paradise .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-paradise .Button:last-child{margin-right:0;margin-bottom:0}.theme-paradise .Button .fa,.theme-paradise .Button .fas,.theme-paradise .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-paradise .Button--hasContent .fa,.theme-paradise .Button--hasContent .fas,.theme-paradise .Button--hasContent .far{margin-right:.25em}.theme-paradise .Button--hasContent.Button--iconRight .fa,.theme-paradise .Button--hasContent.Button--iconRight .fas,.theme-paradise .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-paradise .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-paradise .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-paradise .Button--circular{border-radius:50%}.theme-paradise .Button--compact{padding:0 .25em;line-height:1.333em}.theme-paradise .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-paradise .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-paradise .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--black:hover{background-color:#101010;color:#fff}.theme-paradise .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-paradise .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-paradise .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-paradise .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-paradise .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-paradise .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-paradise .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-paradise .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-paradise .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-paradise .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-paradise .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-paradise .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-paradise .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-paradise .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-paradise .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-paradise .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-paradise .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-paradise .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-paradise .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-paradise .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-paradise .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-paradise .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-paradise .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-paradise .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-paradise .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-paradise .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-paradise .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--label{transition:color .1s,background-color .1s;background-color:#6d4436;color:#fff}.theme-paradise .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--label:hover{background-color:#8b5d4d;color:#fff}.theme-paradise .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-paradise .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-paradise .Button--color--default{transition:color .1s,background-color .1s;background-color:#208080;color:#fff}.theme-paradise .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--default:hover{background-color:#34a0a0;color:#fff}.theme-paradise .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--danger{transition:color .1s,background-color .1s;background-color:#8c1eff;color:#fff}.theme-paradise .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--danger:hover{background-color:#ae61ff;color:#fff}.theme-paradise .Button--color--transparent{transition:color .1s,background-color .1s;background-color:rgba(128,13,51,0);color:rgba(255,255,255,.5)}.theme-paradise .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--transparent:hover{background-color:rgba(164,27,73,.81);color:#fff}.theme-paradise .Button--color--translucent{transition:color .1s,background-color .1s;background-color:rgba(128,13,51,.6);color:rgba(255,255,255,.5)}.theme-paradise .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--translucent:hover{background-color:rgba(164,32,76,.925);color:#fff}.theme-paradise .Button--disabled{background-color:#999!important}.theme-paradise .Button--selected{transition:color .1s,background-color .1s;background-color:#bf6030;color:#fff}.theme-paradise .Button--selected:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--selected:hover{background-color:#d4835a;color:#fff}.theme-paradise .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-paradise .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;color:#e65c2e;background-color:rgba(0,0,0,.25);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-paradise .NumberInput--fluid{display:block}.theme-paradise .NumberInput__content{margin-left:.5em}.theme-paradise .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-paradise .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #e65c2e;background-color:#e65c2e}.theme-paradise .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,.25);color:#fff;text-align:right}.theme-paradise .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-paradise .Input--disabled{color:#777;border-color:#4a4a4a;border-color:rgba(74,74,74,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-paradise .Input--fluid{display:block;width:auto}.theme-paradise .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-paradise .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-paradise .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-paradise .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-paradise .TextArea{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-paradise .TextArea--fluid{display:block;width:auto;height:auto}.theme-paradise .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-paradise .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-paradise .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-paradise .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-paradise .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-paradise .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-paradise .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-paradise .Knob__popupValue,.theme-paradise .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .Knob__popupValue--right{top:.25rem;right:-50%}.theme-paradise .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-paradise .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-paradise .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-paradise .Knob__ringFillPivot{transform:rotate(135deg)}.theme-paradise .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-paradise .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-paradise .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-paradise .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-paradise .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-paradise .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-paradise .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-paradise .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-paradise .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-paradise .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-paradise .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-paradise .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-paradise .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-paradise .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-paradise .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-paradise .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-paradise .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-paradise .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--label .Knob__ringFill{stroke:#955d4b}.theme-paradise .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-paradise .Slider:not(.Slider__disabled){cursor:e-resize}.theme-paradise .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-paradise .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-paradise .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-paradise .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-paradise .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-paradise .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-paradise .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-paradise .ProgressBar--color--default{border:.0833333333em solid #1b6d6d}.theme-paradise .ProgressBar--color--default .ProgressBar__fill{background-color:#1b6d6d}.theme-paradise .ProgressBar--color--disabled{border:1px solid #999}.theme-paradise .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-paradise .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-paradise .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-paradise .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-paradise .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-paradise .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-paradise .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-paradise .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-paradise .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-paradise .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-paradise .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-paradise .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-paradise .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-paradise .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-paradise .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-paradise .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-paradise .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-paradise .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-paradise .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-paradise .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-paradise .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-paradise .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-paradise .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-paradise .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-paradise .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-paradise .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-paradise .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-paradise .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-paradise .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-paradise .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-paradise .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-paradise .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--label{border:.0833333333em solid #6d4436!important}.theme-paradise .ProgressBar--color--label .ProgressBar__fill{background-color:#6d4436}.theme-paradise .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-paradise .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-paradise .Chat{color:#abc6ec}.theme-paradise .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-paradise .Chat__badge:before{content:"x"}.theme-paradise .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-paradise .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-paradise .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-paradise .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#fff;background-color:#db2828}.theme-paradise .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-paradise .Chat__highlight{color:#000}.theme-paradise .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-paradise .ChatMessage{word-wrap:break-word}.theme-paradise .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-paradise .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-paradise .Layout,.theme-paradise .Layout *{scrollbar-base-color:#680b29;scrollbar-face-color:#99103d;scrollbar-3dlight-color:#800d33;scrollbar-highlight-color:#800d33;scrollbar-track-color:#680b29;scrollbar-arrow-color:#ea2e6c;scrollbar-shadow-color:#99103d}.theme-paradise .Layout::-webkit-scrollbar,.theme-paradise .Layout *::-webkit-scrollbar{width:12px}.theme-paradise .Layout::-webkit-scrollbar-track,.theme-paradise .Layout *::-webkit-scrollbar-track{background:#680b29}.theme-paradise .Layout::-webkit-scrollbar-thumb,.theme-paradise .Layout *::-webkit-scrollbar-thumb{background:#99103d}.theme-paradise .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-paradise .Layout__content--flexRow{display:flex;flex-flow:row}.theme-paradise .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-paradise .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-paradise .Layout__content--noMargin{margin:0}.theme-paradise .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#800d33;background-image:linear-gradient(to bottom,#80014b,#80460d)}.theme-paradise .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-paradise .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-paradise .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-paradise .Window__contentPadding:after{height:0}.theme-paradise .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-paradise .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(166,34,78,.25);pointer-events:none}.theme-paradise .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-paradise .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-paradise .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-paradise .TitleBar{background-color:#800d33;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-paradise .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#800d33;transition:color .25s,background-color .25s}.theme-paradise .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-paradise .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-paradise .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-paradise .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-paradise .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-paradise .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-paradise .adminooc{color:#29ccbe}.theme-paradise .debug{color:#8f39e6}.theme-paradise .boxed_message{background:rgba(0,0,0,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-paradise .boxed_message.left_align_text{text-align:left}.theme-paradise .boxed_message.red_border{background:rgba(0,0,0,.25);border-color:#a00}.theme-paradise .boxed_message.green_border{background:rgba(0,0,0,.25);border-color:#0f0}.theme-paradise .boxed_message.purple_border{background:rgba(0,0,0,.25);border-color:#8000ff}.theme-paradise .boxed_message.notice_border{background:rgba(0,0,0,.25);border-color:#6685f5}.theme-paradise .boxed_message.thick_border{border-width:thick}
diff --git a/tgui/public/tgui-panel.bundle.js b/tgui/public/tgui-panel.bundle.js
index 32f69b26ec20..79a783a47046 100644
--- a/tgui/public/tgui-panel.bundle.js
+++ b/tgui/public/tgui-panel.bundle.js
@@ -1,30 +1,30 @@
-(function(){(function(){var xn={96376:function(S,e,t){"use strict";e.__esModule=!0,e.createPopper=void 0,e.popperGenerator=p;var n=i(t(74758)),r=i(t(28811)),o=i(t(98309)),a=i(t(44896)),u=i(t(33118)),s=i(t(10579)),c=i(t(56500)),h=i(t(17633));e.detectOverflow=h.default;var f=t(75573);function i(g){return g&&g.__esModule?g:{default:g}}var d={placement:"bottom",modifiers:[],strategy:"absolute"};function l(){for(var g=arguments.length,m=new Array(g),C=0;C0&&(0,r.round)(i.width)/c.offsetWidth||1,l=c.offsetHeight>0&&(0,r.round)(i.height)/c.offsetHeight||1);var p=(0,n.isElement)(c)?(0,o.default)(c):window,v=p.visualViewport,g=!(0,a.default)()&&f,m=(i.left+(g&&v?v.offsetLeft:0))/d,C=(i.top+(g&&v?v.offsetTop:0))/l,T=i.width/d,I=i.height/l;return{width:T,height:I,top:C,right:m+T,bottom:C+I,left:m,x:m,y:C}}},49035:function(S,e,t){"use strict";e.__esModule=!0,e.default=I;var n=t(46206),r=g(t(87991)),o=g(t(79752)),a=g(t(98309)),u=g(t(44896)),s=g(t(40600)),c=g(t(16599)),h=t(75573),f=g(t(37786)),i=g(t(57819)),d=g(t(4206)),l=g(t(12972)),p=g(t(81666)),v=t(63618);function g(b){return b&&b.__esModule?b:{default:b}}function m(b,y){var E=(0,f.default)(b,!1,y==="fixed");return E.top=E.top+b.clientTop,E.left=E.left+b.clientLeft,E.bottom=E.top+b.clientHeight,E.right=E.left+b.clientWidth,E.width=b.clientWidth,E.height=b.clientHeight,E.x=E.left,E.y=E.top,E}function C(b,y,E){return y===n.viewport?(0,p.default)((0,r.default)(b,E)):(0,h.isElement)(y)?m(y,E):(0,p.default)((0,o.default)((0,s.default)(b)))}function T(b){var y=(0,a.default)((0,i.default)(b)),E=["absolute","fixed"].indexOf((0,c.default)(b).position)>=0,A=E&&(0,h.isHTMLElement)(b)?(0,u.default)(b):b;return(0,h.isElement)(A)?y.filter(function(N){return(0,h.isElement)(N)&&(0,d.default)(N,A)&&(0,l.default)(N)!=="body"}):[]}function I(b,y,E,A){var N=y==="clippingParents"?T(b):[].concat(y),M=[].concat(N,[E]),w=M[0],L=M.reduce(function(B,x){var j=C(b,x,A);return B.top=(0,v.max)(j.top,B.top),B.right=(0,v.min)(j.right,B.right),B.bottom=(0,v.min)(j.bottom,B.bottom),B.left=(0,v.max)(j.left,B.left),B},C(b,w,A));return L.width=L.right-L.left,L.height=L.bottom-L.top,L.x=L.left,L.y=L.top,L}},74758:function(S,e,t){"use strict";e.__esModule=!0,e.default=d;var n=f(t(37786)),r=f(t(13390)),o=f(t(12972)),a=t(75573),u=f(t(79697)),s=f(t(40600)),c=f(t(10798)),h=t(63618);function f(l){return l&&l.__esModule?l:{default:l}}function i(l){var p=l.getBoundingClientRect(),v=(0,h.round)(p.width)/l.offsetWidth||1,g=(0,h.round)(p.height)/l.offsetHeight||1;return v!==1||g!==1}function d(l,p,v){v===void 0&&(v=!1);var g=(0,a.isHTMLElement)(p),m=(0,a.isHTMLElement)(p)&&i(p),C=(0,s.default)(p),T=(0,n.default)(l,m,v),I={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(g||!g&&!v)&&(((0,o.default)(p)!=="body"||(0,c.default)(C))&&(I=(0,r.default)(p)),(0,a.isHTMLElement)(p)?(b=(0,n.default)(p,!0),b.x+=p.clientLeft,b.y+=p.clientTop):C&&(b.x=(0,u.default)(C))),{x:T.left+I.scrollLeft-b.x,y:T.top+I.scrollTop-b.y,width:T.width,height:T.height}}},16599:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(95115));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return(0,n.default)(a).getComputedStyle(a)}},40600:function(S,e,t){"use strict";e.__esModule=!0,e.default=r;var n=t(75573);function r(o){return(((0,n.isElement)(o)?o.ownerDocument:o.document)||window.document).documentElement}},79752:function(S,e,t){"use strict";e.__esModule=!0,e.default=c;var n=s(t(40600)),r=s(t(16599)),o=s(t(79697)),a=s(t(43750)),u=t(63618);function s(h){return h&&h.__esModule?h:{default:h}}function c(h){var f,i=(0,n.default)(h),d=(0,a.default)(h),l=(f=h.ownerDocument)==null?void 0:f.body,p=(0,u.max)(i.scrollWidth,i.clientWidth,l?l.scrollWidth:0,l?l.clientWidth:0),v=(0,u.max)(i.scrollHeight,i.clientHeight,l?l.scrollHeight:0,l?l.clientHeight:0),g=-d.scrollLeft+(0,o.default)(h),m=-d.scrollTop;return(0,r.default)(l||i).direction==="rtl"&&(g+=(0,u.max)(i.clientWidth,l?l.clientWidth:0)-p),{width:p,height:v,x:g,y:m}}},3073:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}},28811:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(37786));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){var u=(0,n.default)(a),s=a.offsetWidth,c=a.offsetHeight;return Math.abs(u.width-s)<=1&&(s=u.width),Math.abs(u.height-c)<=1&&(c=u.height),{x:a.offsetLeft,y:a.offsetTop,width:s,height:c}}},12972:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){return n?(n.nodeName||"").toLowerCase():null}},13390:function(S,e,t){"use strict";e.__esModule=!0,e.default=s;var n=u(t(43750)),r=u(t(95115)),o=t(75573),a=u(t(3073));function u(c){return c&&c.__esModule?c:{default:c}}function s(c){return c===(0,r.default)(c)||!(0,o.isHTMLElement)(c)?(0,n.default)(c):(0,a.default)(c)}},44896:function(S,e,t){"use strict";e.__esModule=!0,e.default=d;var n=h(t(95115)),r=h(t(12972)),o=h(t(16599)),a=t(75573),u=h(t(87031)),s=h(t(57819)),c=h(t(35366));function h(l){return l&&l.__esModule?l:{default:l}}function f(l){return!(0,a.isHTMLElement)(l)||(0,o.default)(l).position==="fixed"?null:l.offsetParent}function i(l){var p=/firefox/i.test((0,c.default)()),v=/Trident/i.test((0,c.default)());if(v&&(0,a.isHTMLElement)(l)){var g=(0,o.default)(l);if(g.position==="fixed")return null}var m=(0,s.default)(l);for((0,a.isShadowRoot)(m)&&(m=m.host);(0,a.isHTMLElement)(m)&&["html","body"].indexOf((0,r.default)(m))<0;){var C=(0,o.default)(m);if(C.transform!=="none"||C.perspective!=="none"||C.contain==="paint"||["transform","perspective"].indexOf(C.willChange)!==-1||p&&C.willChange==="filter"||p&&C.filter&&C.filter!=="none")return m;m=m.parentNode}return null}function d(l){for(var p=(0,n.default)(l),v=f(l);v&&(0,u.default)(v)&&(0,o.default)(v).position==="static";)v=f(v);return v&&((0,r.default)(v)==="html"||(0,r.default)(v)==="body"&&(0,o.default)(v).position==="static")?p:v||i(l)||p}},57819:function(S,e,t){"use strict";e.__esModule=!0,e.default=u;var n=a(t(12972)),r=a(t(40600)),o=t(75573);function a(s){return s&&s.__esModule?s:{default:s}}function u(s){return(0,n.default)(s)==="html"?s:s.assignedSlot||s.parentNode||((0,o.isShadowRoot)(s)?s.host:null)||(0,r.default)(s)}},24426:function(S,e,t){"use strict";e.__esModule=!0,e.default=s;var n=u(t(57819)),r=u(t(10798)),o=u(t(12972)),a=t(75573);function u(c){return c&&c.__esModule?c:{default:c}}function s(c){return["html","body","#document"].indexOf((0,o.default)(c))>=0?c.ownerDocument.body:(0,a.isHTMLElement)(c)&&(0,r.default)(c)?c:s((0,n.default)(c))}},87991:function(S,e,t){"use strict";e.__esModule=!0,e.default=s;var n=u(t(95115)),r=u(t(40600)),o=u(t(79697)),a=u(t(89331));function u(c){return c&&c.__esModule?c:{default:c}}function s(c,h){var f=(0,n.default)(c),i=(0,r.default)(c),d=f.visualViewport,l=i.clientWidth,p=i.clientHeight,v=0,g=0;if(d){l=d.width,p=d.height;var m=(0,a.default)();(m||!m&&h==="fixed")&&(v=d.offsetLeft,g=d.offsetTop)}return{width:l,height:p,x:v+(0,o.default)(c),y:g}}},95115:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var r=n.ownerDocument;return r&&r.defaultView||window}return n}},43750:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(95115));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){var u=(0,n.default)(a),s=u.pageXOffset,c=u.pageYOffset;return{scrollLeft:s,scrollTop:c}}},79697:function(S,e,t){"use strict";e.__esModule=!0,e.default=u;var n=a(t(37786)),r=a(t(40600)),o=a(t(43750));function a(s){return s&&s.__esModule?s:{default:s}}function u(s){return(0,n.default)((0,r.default)(s)).left+(0,o.default)(s).scrollLeft}},75573:function(S,e,t){"use strict";e.__esModule=!0,e.isElement=o,e.isHTMLElement=a,e.isShadowRoot=u;var n=r(t(95115));function r(s){return s&&s.__esModule?s:{default:s}}function o(s){var c=(0,n.default)(s).Element;return s instanceof c||s instanceof Element}function a(s){var c=(0,n.default)(s).HTMLElement;return s instanceof c||s instanceof HTMLElement}function u(s){if(typeof ShadowRoot=="undefined")return!1;var c=(0,n.default)(s).ShadowRoot;return s instanceof c||s instanceof ShadowRoot}},89331:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(35366));function r(a){return a&&a.__esModule?a:{default:a}}function o(){return!/^((?!chrome|android).)*safari/i.test((0,n.default)())}},10798:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(16599));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){var u=(0,n.default)(a),s=u.overflow,c=u.overflowX,h=u.overflowY;return/auto|scroll|overlay|hidden/.test(s+h+c)}},87031:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(12972));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return["table","td","th"].indexOf((0,n.default)(a))>=0}},98309:function(S,e,t){"use strict";e.__esModule=!0,e.default=s;var n=u(t(24426)),r=u(t(57819)),o=u(t(95115)),a=u(t(10798));function u(c){return c&&c.__esModule?c:{default:c}}function s(c,h){var f;h===void 0&&(h=[]);var i=(0,n.default)(c),d=i===((f=c.ownerDocument)==null?void 0:f.body),l=(0,o.default)(i),p=d?[l].concat(l.visualViewport||[],(0,a.default)(i)?i:[]):i,v=h.concat(p);return d?v:v.concat(s((0,r.default)(p)))}},46206:function(S,e){"use strict";e.__esModule=!0,e.write=e.viewport=e.variationPlacements=e.top=e.start=e.right=e.reference=e.read=e.popper=e.placements=e.modifierPhases=e.main=e.left=e.end=e.clippingParents=e.bottom=e.beforeWrite=e.beforeRead=e.beforeMain=e.basePlacements=e.auto=e.afterWrite=e.afterRead=e.afterMain=void 0;var t=e.top="top",n=e.bottom="bottom",r=e.right="right",o=e.left="left",a=e.auto="auto",u=e.basePlacements=[t,n,r,o],s=e.start="start",c=e.end="end",h=e.clippingParents="clippingParents",f=e.viewport="viewport",i=e.popper="popper",d=e.reference="reference",l=e.variationPlacements=u.reduce(function(N,M){return N.concat([M+"-"+s,M+"-"+c])},[]),p=e.placements=[].concat(u,[a]).reduce(function(N,M){return N.concat([M,M+"-"+s,M+"-"+c])},[]),v=e.beforeRead="beforeRead",g=e.read="read",m=e.afterRead="afterRead",C=e.beforeMain="beforeMain",T=e.main="main",I=e.afterMain="afterMain",b=e.beforeWrite="beforeWrite",y=e.write="write",E=e.afterWrite="afterWrite",A=e.modifierPhases=[v,g,m,C,T,I,b,y,E]},95996:function(S,e,t){"use strict";e.__esModule=!0;var n={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};e.popperGenerator=e.detectOverflow=e.createPopperLite=e.createPopperBase=e.createPopper=void 0;var r=t(46206);Object.keys(r).forEach(function(c){c==="default"||c==="__esModule"||Object.prototype.hasOwnProperty.call(n,c)||c in e&&e[c]===r[c]||(e[c]=r[c])});var o=t(39805);Object.keys(o).forEach(function(c){c==="default"||c==="__esModule"||Object.prototype.hasOwnProperty.call(n,c)||c in e&&e[c]===o[c]||(e[c]=o[c])});var a=t(96376);e.popperGenerator=a.popperGenerator,e.detectOverflow=a.detectOverflow,e.createPopperBase=a.createPopper;var u=t(83312);e.createPopper=u.createPopper;var s=t(2473);e.createPopperLite=s.createPopper},19975:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=o(t(12972)),r=t(75573);function o(c){return c&&c.__esModule?c:{default:c}}function a(c){var h=c.state;Object.keys(h.elements).forEach(function(f){var i=h.styles[f]||{},d=h.attributes[f]||{},l=h.elements[f];!(0,r.isHTMLElement)(l)||!(0,n.default)(l)||(Object.assign(l.style,i),Object.keys(d).forEach(function(p){var v=d[p];v===!1?l.removeAttribute(p):l.setAttribute(p,v===!0?"":v)}))})}function u(c){var h=c.state,f={popper:{position:h.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(h.elements.popper.style,f.popper),h.styles=f,h.elements.arrow&&Object.assign(h.elements.arrow.style,f.arrow),function(){Object.keys(h.elements).forEach(function(i){var d=h.elements[i],l=h.attributes[i]||{},p=Object.keys(h.styles.hasOwnProperty(i)?h.styles[i]:f[i]),v=p.reduce(function(g,m){return g[m]="",g},{});!(0,r.isHTMLElement)(d)||!(0,n.default)(d)||(Object.assign(d.style,v),Object.keys(l).forEach(function(g){d.removeAttribute(g)}))})}}var s=e.default={name:"applyStyles",enabled:!0,phase:"write",fn:a,effect:u,requires:["computeStyles"]}},52744:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=i(t(83104)),r=i(t(28811)),o=i(t(4206)),a=i(t(44896)),u=i(t(41199)),s=t(28595),c=i(t(43286)),h=i(t(81447)),f=t(46206);function i(g){return g&&g.__esModule?g:{default:g}}var d=function(){function g(m,C){return m=typeof m=="function"?m(Object.assign({},C.rects,{placement:C.placement})):m,(0,c.default)(typeof m!="number"?m:(0,h.default)(m,f.basePlacements))}return g}();function l(g){var m,C=g.state,T=g.name,I=g.options,b=C.elements.arrow,y=C.modifiersData.popperOffsets,E=(0,n.default)(C.placement),A=(0,u.default)(E),N=[f.left,f.right].indexOf(E)>=0,M=N?"height":"width";if(!(!b||!y)){var w=d(I.padding,C),L=(0,r.default)(b),B=A==="y"?f.top:f.left,x=A==="y"?f.bottom:f.right,j=C.rects.reference[M]+C.rects.reference[A]-y[A]-C.rects.popper[M],V=y[A]-C.rects.reference[A],Y=(0,a.default)(b),D=Y?A==="y"?Y.clientHeight||0:Y.clientWidth||0:0,U=j/2-V/2,G=w[B],K=D-L[M]-w[x],$=D/2-L[M]/2+U,H=(0,s.within)(G,$,K),tt=A;C.modifiersData[T]=(m={},m[tt]=H,m.centerOffset=H-$,m)}}function p(g){var m=g.state,C=g.options,T=C.element,I=T===void 0?"[data-popper-arrow]":T;I!=null&&(typeof I=="string"&&(I=m.elements.popper.querySelector(I),!I)||(0,o.default)(m.elements.popper,I)&&(m.elements.arrow=I))}var v=e.default={name:"arrow",enabled:!0,phase:"main",fn:l,effect:p,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]}},59894:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0,e.mapToStyles=l;var n=t(46206),r=f(t(44896)),o=f(t(95115)),a=f(t(40600)),u=f(t(16599)),s=f(t(83104)),c=f(t(45)),h=t(63618);function f(g){return g&&g.__esModule?g:{default:g}}var i={top:"auto",right:"auto",bottom:"auto",left:"auto"};function d(g,m){var C=g.x,T=g.y,I=m.devicePixelRatio||1;return{x:(0,h.round)(C*I)/I||0,y:(0,h.round)(T*I)/I||0}}function l(g){var m,C=g.popper,T=g.popperRect,I=g.placement,b=g.variation,y=g.offsets,E=g.position,A=g.gpuAcceleration,N=g.adaptive,M=g.roundOffsets,w=g.isFixed,L=y.x,B=L===void 0?0:L,x=y.y,j=x===void 0?0:x,V=typeof M=="function"?M({x:B,y:j}):{x:B,y:j};B=V.x,j=V.y;var Y=y.hasOwnProperty("x"),D=y.hasOwnProperty("y"),U=n.left,G=n.top,K=window;if(N){var $=(0,r.default)(C),H="clientHeight",tt="clientWidth";if($===(0,o.default)(C)&&($=(0,a.default)(C),(0,u.default)($).position!=="static"&&E==="absolute"&&(H="scrollHeight",tt="scrollWidth")),$=$,I===n.top||(I===n.left||I===n.right)&&b===n.end){G=n.bottom;var it=w&&$===K&&K.visualViewport?K.visualViewport.height:$[H];j-=it-T.height,j*=A?1:-1}if(I===n.left||(I===n.top||I===n.bottom)&&b===n.end){U=n.right;var ht=w&&$===K&&K.visualViewport?K.visualViewport.width:$[tt];B-=ht-T.width,B*=A?1:-1}}var k=Object.assign({position:E},N&&i),J=M===!0?d({x:B,y:j},(0,o.default)(C)):{x:B,y:j};if(B=J.x,j=J.y,A){var nt;return Object.assign({},k,(nt={},nt[G]=D?"0":"",nt[U]=Y?"0":"",nt.transform=(K.devicePixelRatio||1)<=1?"translate("+B+"px, "+j+"px)":"translate3d("+B+"px, "+j+"px, 0)",nt))}return Object.assign({},k,(m={},m[G]=D?j+"px":"",m[U]=Y?B+"px":"",m.transform="",m))}function p(g){var m=g.state,C=g.options,T=C.gpuAcceleration,I=T===void 0?!0:T,b=C.adaptive,y=b===void 0?!0:b,E=C.roundOffsets,A=E===void 0?!0:E,N={placement:(0,s.default)(m.placement),variation:(0,c.default)(m.placement),popper:m.elements.popper,popperRect:m.rects.popper,gpuAcceleration:I,isFixed:m.options.strategy==="fixed"};m.modifiersData.popperOffsets!=null&&(m.styles.popper=Object.assign({},m.styles.popper,l(Object.assign({},N,{offsets:m.modifiersData.popperOffsets,position:m.options.strategy,adaptive:y,roundOffsets:A})))),m.modifiersData.arrow!=null&&(m.styles.arrow=Object.assign({},m.styles.arrow,l(Object.assign({},N,{offsets:m.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:A})))),m.attributes.popper=Object.assign({},m.attributes.popper,{"data-popper-placement":m.placement})}var v=e.default={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:p,data:{}}},36692:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=r(t(95115));function r(s){return s&&s.__esModule?s:{default:s}}var o={passive:!0};function a(s){var c=s.state,h=s.instance,f=s.options,i=f.scroll,d=i===void 0?!0:i,l=f.resize,p=l===void 0?!0:l,v=(0,n.default)(c.elements.popper),g=[].concat(c.scrollParents.reference,c.scrollParents.popper);return d&&g.forEach(function(m){m.addEventListener("scroll",h.update,o)}),p&&v.addEventListener("resize",h.update,o),function(){d&&g.forEach(function(m){m.removeEventListener("scroll",h.update,o)}),p&&v.removeEventListener("resize",h.update,o)}}var u=e.default={name:"eventListeners",enabled:!0,phase:"write",fn:function(){function s(){}return s}(),effect:a,data:{}}},23798:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=h(t(71376)),r=h(t(83104)),o=h(t(86459)),a=h(t(17633)),u=h(t(9041)),s=t(46206),c=h(t(45));function h(l){return l&&l.__esModule?l:{default:l}}function f(l){if((0,r.default)(l)===s.auto)return[];var p=(0,n.default)(l);return[(0,o.default)(l),p,(0,o.default)(p)]}function i(l){var p=l.state,v=l.options,g=l.name;if(!p.modifiersData[g]._skip){for(var m=v.mainAxis,C=m===void 0?!0:m,T=v.altAxis,I=T===void 0?!0:T,b=v.fallbackPlacements,y=v.padding,E=v.boundary,A=v.rootBoundary,N=v.altBoundary,M=v.flipVariations,w=M===void 0?!0:M,L=v.allowedAutoPlacements,B=p.options.placement,x=(0,r.default)(B),j=x===B,V=b||(j||!w?[(0,n.default)(B)]:f(B)),Y=[B].concat(V).reduce(function(yt,_){return yt.concat((0,r.default)(_)===s.auto?(0,u.default)(p,{placement:_,boundary:E,rootBoundary:A,padding:y,flipVariations:w,allowedAutoPlacements:L}):_)},[]),D=p.rects.reference,U=p.rects.popper,G=new Map,K=!0,$=Y[0],H=0;H=0,J=k?"width":"height",nt=(0,a.default)(p,{placement:tt,boundary:E,rootBoundary:A,altBoundary:N,padding:y}),st=k?ht?s.right:s.left:ht?s.bottom:s.top;D[J]>U[J]&&(st=(0,n.default)(st));var ot=(0,n.default)(st),pt=[];if(C&&pt.push(nt[it]<=0),I&&pt.push(nt[st]<=0,nt[ot]<=0),pt.every(function(yt){return yt})){$=tt,K=!1;break}G.set(tt,pt)}if(K)for(var Nt=w?3:1,rt=function(){function yt(_){var X=Y.find(function(ct){var Tt=G.get(ct);if(Tt)return Tt.slice(0,_).every(function(St){return St})});if(X)return $=X,"break"}return yt}(),et=Nt;et>0;et--){var dt=rt(et);if(dt==="break")break}p.placement!==$&&(p.modifiersData[g]._skip=!0,p.placement=$,p.reset=!0)}}var d=e.default={name:"flip",enabled:!0,phase:"main",fn:i,requiresIfExists:["offset"],data:{_skip:!1}}},83761:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=t(46206),r=o(t(17633));function o(h){return h&&h.__esModule?h:{default:h}}function a(h,f,i){return i===void 0&&(i={x:0,y:0}),{top:h.top-f.height-i.y,right:h.right-f.width+i.x,bottom:h.bottom-f.height+i.y,left:h.left-f.width-i.x}}function u(h){return[n.top,n.right,n.bottom,n.left].some(function(f){return h[f]>=0})}function s(h){var f=h.state,i=h.name,d=f.rects.reference,l=f.rects.popper,p=f.modifiersData.preventOverflow,v=(0,r.default)(f,{elementContext:"reference"}),g=(0,r.default)(f,{altBoundary:!0}),m=a(v,d),C=a(g,l,p),T=u(m),I=u(C);f.modifiersData[i]={referenceClippingOffsets:m,popperEscapeOffsets:C,isReferenceHidden:T,hasPopperEscaped:I},f.attributes.popper=Object.assign({},f.attributes.popper,{"data-popper-reference-hidden":T,"data-popper-escaped":I})}var c=e.default={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:s}},39805:function(S,e,t){"use strict";e.__esModule=!0,e.preventOverflow=e.popperOffsets=e.offset=e.hide=e.flip=e.eventListeners=e.computeStyles=e.arrow=e.applyStyles=void 0;var n=i(t(19975));e.applyStyles=n.default;var r=i(t(52744));e.arrow=r.default;var o=i(t(59894));e.computeStyles=o.default;var a=i(t(36692));e.eventListeners=a.default;var u=i(t(23798));e.flip=u.default;var s=i(t(83761));e.hide=s.default;var c=i(t(61410));e.offset=c.default;var h=i(t(40107));e.popperOffsets=h.default;var f=i(t(75137));e.preventOverflow=f.default;function i(d){return d&&d.__esModule?d:{default:d}}},61410:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0,e.distanceAndSkiddingToXY=a;var n=o(t(83104)),r=t(46206);function o(c){return c&&c.__esModule?c:{default:c}}function a(c,h,f){var i=(0,n.default)(c),d=[r.left,r.top].indexOf(i)>=0?-1:1,l=typeof f=="function"?f(Object.assign({},h,{placement:c})):f,p=l[0],v=l[1];return p=p||0,v=(v||0)*d,[r.left,r.right].indexOf(i)>=0?{x:v,y:p}:{x:p,y:v}}function u(c){var h=c.state,f=c.options,i=c.name,d=f.offset,l=d===void 0?[0,0]:d,p=r.placements.reduce(function(C,T){return C[T]=a(T,h.rects,l),C},{}),v=p[h.placement],g=v.x,m=v.y;h.modifiersData.popperOffsets!=null&&(h.modifiersData.popperOffsets.x+=g,h.modifiersData.popperOffsets.y+=m),h.modifiersData[i]=p}var s=e.default={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:u}},40107:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=r(t(89951));function r(u){return u&&u.__esModule?u:{default:u}}function o(u){var s=u.state,c=u.name;s.modifiersData[c]=(0,n.default)({reference:s.rects.reference,element:s.rects.popper,strategy:"absolute",placement:s.placement})}var a=e.default={name:"popperOffsets",enabled:!0,phase:"read",fn:o,data:{}}},75137:function(S,e,t){"use strict";e.__esModule=!0,e.default=void 0;var n=t(46206),r=l(t(83104)),o=l(t(41199)),a=l(t(28066)),u=t(28595),s=l(t(28811)),c=l(t(44896)),h=l(t(17633)),f=l(t(45)),i=l(t(34780)),d=t(63618);function l(g){return g&&g.__esModule?g:{default:g}}function p(g){var m=g.state,C=g.options,T=g.name,I=C.mainAxis,b=I===void 0?!0:I,y=C.altAxis,E=y===void 0?!1:y,A=C.boundary,N=C.rootBoundary,M=C.altBoundary,w=C.padding,L=C.tether,B=L===void 0?!0:L,x=C.tetherOffset,j=x===void 0?0:x,V=(0,h.default)(m,{boundary:A,rootBoundary:N,padding:w,altBoundary:M}),Y=(0,r.default)(m.placement),D=(0,f.default)(m.placement),U=!D,G=(0,o.default)(Y),K=(0,a.default)(G),$=m.modifiersData.popperOffsets,H=m.rects.reference,tt=m.rects.popper,it=typeof j=="function"?j(Object.assign({},m.rects,{placement:m.placement})):j,ht=typeof it=="number"?{mainAxis:it,altAxis:it}:Object.assign({mainAxis:0,altAxis:0},it),k=m.modifiersData.offset?m.modifiersData.offset[m.placement]:null,J={x:0,y:0};if($){if(b){var nt,st=G==="y"?n.top:n.left,ot=G==="y"?n.bottom:n.right,pt=G==="y"?"height":"width",Nt=$[G],rt=Nt+V[st],et=Nt-V[ot],dt=B?-tt[pt]/2:0,yt=D===n.start?H[pt]:tt[pt],_=D===n.start?-tt[pt]:-H[pt],X=m.elements.arrow,ct=B&&X?(0,s.default)(X):{width:0,height:0},Tt=m.modifiersData["arrow#persistent"]?m.modifiersData["arrow#persistent"].padding:(0,i.default)(),St=Tt[st],ut=Tt[ot],gt=(0,u.within)(0,H[pt],ct[pt]),Ot=U?H[pt]/2-dt-gt-St-ht.mainAxis:yt-gt-St-ht.mainAxis,q=U?-H[pt]/2+dt+gt+ut+ht.mainAxis:_+gt+ut+ht.mainAxis,ft=m.elements.arrow&&(0,c.default)(m.elements.arrow),mt=ft?G==="y"?ft.clientTop||0:ft.clientLeft||0:0,At=(nt=k==null?void 0:k[G])!=null?nt:0,Dt=Nt+Ot-At-mt,jt=Nt+q-At,bt=(0,u.within)(B?(0,d.min)(rt,Dt):rt,Nt,B?(0,d.max)(et,jt):et);$[G]=bt,J[G]=bt-Nt}if(E){var lt,vt=G==="x"?n.top:n.left,It=G==="x"?n.bottom:n.right,Et=$[K],Pt=K==="y"?"height":"width",Ft=Et+V[vt],Vt=Et-V[It],Gt=[n.top,n.left].indexOf(Y)!==-1,Wt=(lt=k==null?void 0:k[K])!=null?lt:0,Kt=Gt?Ft:Et-H[Pt]-tt[Pt]-Wt+ht.altAxis,Ht=Gt?Et+H[Pt]+tt[Pt]-Wt-ht.altAxis:Vt,Zt=B&&Gt?(0,u.withinMaxClamp)(Kt,Et,Ht):(0,u.within)(B?Kt:Ft,Et,B?Ht:Vt);$[K]=Zt,J[K]=Zt-Et}m.modifiersData[T]=J}}var v=e.default={name:"preventOverflow",enabled:!0,phase:"main",fn:p,requiresIfExists:["offset"]}},2473:function(S,e,t){"use strict";e.__esModule=!0,e.defaultModifiers=e.createPopper=void 0;var n=t(96376);e.popperGenerator=n.popperGenerator,e.detectOverflow=n.detectOverflow;var r=s(t(36692)),o=s(t(40107)),a=s(t(59894)),u=s(t(19975));function s(f){return f&&f.__esModule?f:{default:f}}var c=e.defaultModifiers=[r.default,o.default,a.default,u.default],h=e.createPopper=(0,n.popperGenerator)({defaultModifiers:c})},83312:function(S,e,t){"use strict";e.__esModule=!0;var n={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};e.defaultModifiers=e.createPopperLite=e.createPopper=void 0;var r=t(96376);e.popperGenerator=r.popperGenerator,e.detectOverflow=r.detectOverflow;var o=v(t(36692)),a=v(t(40107)),u=v(t(59894)),s=v(t(19975)),c=v(t(61410)),h=v(t(23798)),f=v(t(75137)),i=v(t(52744)),d=v(t(83761)),l=t(2473);e.createPopperLite=l.createPopper;var p=t(39805);Object.keys(p).forEach(function(C){C==="default"||C==="__esModule"||Object.prototype.hasOwnProperty.call(n,C)||C in e&&e[C]===p[C]||(e[C]=p[C])});function v(C){return C&&C.__esModule?C:{default:C}}var g=e.defaultModifiers=[o.default,a.default,u.default,s.default,c.default,h.default,f.default,i.default,d.default],m=e.createPopperLite=e.createPopper=(0,r.popperGenerator)({defaultModifiers:g})},9041:function(S,e,t){"use strict";e.__esModule=!0,e.default=s;var n=u(t(45)),r=t(46206),o=u(t(17633)),a=u(t(83104));function u(c){return c&&c.__esModule?c:{default:c}}function s(c,h){h===void 0&&(h={});var f=h,i=f.placement,d=f.boundary,l=f.rootBoundary,p=f.padding,v=f.flipVariations,g=f.allowedAutoPlacements,m=g===void 0?r.placements:g,C=(0,n.default)(i),T=C?v?r.variationPlacements:r.variationPlacements.filter(function(y){return(0,n.default)(y)===C}):r.basePlacements,I=T.filter(function(y){return m.indexOf(y)>=0});I.length===0&&(I=T);var b=I.reduce(function(y,E){return y[E]=(0,o.default)(c,{placement:E,boundary:d,rootBoundary:l,padding:p})[(0,a.default)(E)],y},{});return Object.keys(b).sort(function(y,E){return b[y]-b[E]})}},89951:function(S,e,t){"use strict";e.__esModule=!0,e.default=s;var n=u(t(83104)),r=u(t(45)),o=u(t(41199)),a=t(46206);function u(c){return c&&c.__esModule?c:{default:c}}function s(c){var h=c.reference,f=c.element,i=c.placement,d=i?(0,n.default)(i):null,l=i?(0,r.default)(i):null,p=h.x+h.width/2-f.width/2,v=h.y+h.height/2-f.height/2,g;switch(d){case a.top:g={x:p,y:h.y-f.height};break;case a.bottom:g={x:p,y:h.y+h.height};break;case a.right:g={x:h.x+h.width,y:v};break;case a.left:g={x:h.x-f.width,y:v};break;default:g={x:h.x,y:h.y}}var m=d?(0,o.default)(d):null;if(m!=null){var C=m==="y"?"height":"width";switch(l){case a.start:g[m]=g[m]-(h[C]/2-f[C]/2);break;case a.end:g[m]=g[m]+(h[C]/2-f[C]/2);break;default:}}return g}},10579:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){var r;return function(){return r||(r=new Promise(function(o){Promise.resolve().then(function(){r=void 0,o(n())})})),r}}},17633:function(S,e,t){"use strict";e.__esModule=!0,e.default=d;var n=i(t(49035)),r=i(t(40600)),o=i(t(37786)),a=i(t(89951)),u=i(t(81666)),s=t(46206),c=t(75573),h=i(t(43286)),f=i(t(81447));function i(l){return l&&l.__esModule?l:{default:l}}function d(l,p){p===void 0&&(p={});var v=p,g=v.placement,m=g===void 0?l.placement:g,C=v.strategy,T=C===void 0?l.strategy:C,I=v.boundary,b=I===void 0?s.clippingParents:I,y=v.rootBoundary,E=y===void 0?s.viewport:y,A=v.elementContext,N=A===void 0?s.popper:A,M=v.altBoundary,w=M===void 0?!1:M,L=v.padding,B=L===void 0?0:L,x=(0,h.default)(typeof B!="number"?B:(0,f.default)(B,s.basePlacements)),j=N===s.popper?s.reference:s.popper,V=l.rects.popper,Y=l.elements[w?j:N],D=(0,n.default)((0,c.isElement)(Y)?Y:Y.contextElement||(0,r.default)(l.elements.popper),b,E,T),U=(0,o.default)(l.elements.reference),G=(0,a.default)({reference:U,element:V,strategy:"absolute",placement:m}),K=(0,u.default)(Object.assign({},V,G)),$=N===s.popper?K:U,H={top:D.top-$.top+x.top,bottom:$.bottom-D.bottom+x.bottom,left:D.left-$.left+x.left,right:$.right-D.right+x.right},tt=l.modifiersData.offset;if(N===s.popper&&tt){var it=tt[m];Object.keys(H).forEach(function(ht){var k=[s.right,s.bottom].indexOf(ht)>=0?1:-1,J=[s.top,s.bottom].indexOf(ht)>=0?"y":"x";H[ht]+=it[J]*k})}return H}},81447:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n,r){return r.reduce(function(o,a){return o[a]=n,o},{})}},28066:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){return n==="x"?"y":"x"}},83104:function(S,e,t){"use strict";e.__esModule=!0,e.default=r;var n=t(46206);function r(o){return o.split("-")[0]}},34780:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(){return{top:0,right:0,bottom:0,left:0}}},41199:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}},71376:function(S,e){"use strict";e.__esModule=!0,e.default=n;var t={left:"right",right:"left",bottom:"top",top:"bottom"};function n(r){return r.replace(/left|right|bottom|top/g,function(o){return t[o]})}},86459:function(S,e){"use strict";e.__esModule=!0,e.default=n;var t={start:"end",end:"start"};function n(r){return r.replace(/start|end/g,function(o){return t[o]})}},45:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){return n.split("-")[1]}},63618:function(S,e){"use strict";e.__esModule=!0,e.round=e.min=e.max=void 0;var t=e.max=Math.max,n=e.min=Math.min,r=e.round=Math.round},56500:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){var r=n.reduce(function(o,a){var u=o[a.name];return o[a.name]=u?Object.assign({},u,a,{options:Object.assign({},u.options,a.options),data:Object.assign({},u.data,a.data)}):a,o},{});return Object.keys(r).map(function(o){return r[o]})}},43286:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=r(t(34780));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return Object.assign({},(0,n.default)(),a)}},33118:function(S,e,t){"use strict";e.__esModule=!0,e.default=o;var n=t(46206);function r(a){var u=new Map,s=new Set,c=[];a.forEach(function(f){u.set(f.name,f)});function h(f){s.add(f.name);var i=[].concat(f.requires||[],f.requiresIfExists||[]);i.forEach(function(d){if(!s.has(d)){var l=u.get(d);l&&h(l)}}),c.push(f)}return a.forEach(function(f){s.has(f.name)||h(f)}),c}function o(a){var u=r(a);return n.modifierPhases.reduce(function(s,c){return s.concat(u.filter(function(h){return h.phase===c}))},[])}},81666:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}},35366:function(S,e){"use strict";e.__esModule=!0,e.default=t;function t(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(r){return r.brand+"/"+r.version}).join(" "):navigator.userAgent}},28595:function(S,e,t){"use strict";e.__esModule=!0,e.within=r,e.withinMaxClamp=o;var n=t(63618);function r(a,u,s){return(0,n.max)(a,(0,n.min)(u,s))}function o(a,u,s){var c=r(a,u,s);return c>s?s:c}},22734:function(S){"use strict";/*! @license DOMPurify 2.5.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.0/LICENSE */(function(e,t){S.exports=t()})(void 0,function(){"use strict";function e(q){"@babel/helpers - typeof";return e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ft){return typeof ft}:function(ft){return ft&&typeof Symbol=="function"&&ft.constructor===Symbol&&ft!==Symbol.prototype?"symbol":typeof ft},e(q)}function t(q,ft){return t=Object.setPrototypeOf||function(){function mt(At,Dt){return At.__proto__=Dt,At}return mt}(),t(q,ft)}function n(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(q){return!1}}function r(q,ft,mt){return n()?r=Reflect.construct:r=function(){function At(Dt,jt,bt){var lt=[null];lt.push.apply(lt,jt);var vt=Function.bind.apply(Dt,lt),It=new vt;return bt&&t(It,bt.prototype),It}return At}(),r.apply(null,arguments)}function o(q){return a(q)||u(q)||s(q)||h()}function a(q){if(Array.isArray(q))return c(q)}function u(q){if(typeof Symbol!="undefined"&&q[Symbol.iterator]!=null||q["@@iterator"]!=null)return Array.from(q)}function s(q,ft){if(q){if(typeof q=="string")return c(q,ft);var mt=Object.prototype.toString.call(q).slice(8,-1);if(mt==="Object"&&q.constructor&&(mt=q.constructor.name),mt==="Map"||mt==="Set")return Array.from(q);if(mt==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(mt))return c(q,ft)}}function c(q,ft){(ft==null||ft>q.length)&&(ft=q.length);for(var mt=0,At=new Array(ft);mt1?mt-1:0),Dt=1;Dt/gm),rt=g(/\${[\w\W]*}/gm),et=g(/^data-[\-\w.\u00B7-\uFFFF]/),dt=g(/^aria-[\-\w]+$/),yt=g(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),_=g(/^(?:\w+script|data):/i),X=g(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ct=g(/^html$/i),Tt=g(/^[a-z][.\w]*(-[.\w]+)+$/i),St=function(){function q(){return typeof window=="undefined"?null:window}return q}(),ut=function(){function q(ft,mt){if(e(ft)!=="object"||typeof ft.createPolicy!="function")return null;var At=null,Dt="data-tt-policy-suffix";mt.currentScript&&mt.currentScript.hasAttribute(Dt)&&(At=mt.currentScript.getAttribute(Dt));var jt="dompurify"+(At?"#"+At:"");try{return ft.createPolicy(jt,{createHTML:function(){function bt(lt){return lt}return bt}(),createScriptURL:function(){function bt(lt){return lt}return bt}()})}catch(bt){return null}}return q}();function gt(){var q=arguments.length>0&&arguments[0]!==void 0?arguments[0]:St(),ft=function(){function O(P){return gt(P)}return O}();if(ft.version="2.5.0",ft.removed=[],!q||!q.document||q.document.nodeType!==9)return ft.isSupported=!1,ft;var mt=q.document,At=q.document,Dt=q.DocumentFragment,jt=q.HTMLTemplateElement,bt=q.Node,lt=q.Element,vt=q.NodeFilter,It=q.NamedNodeMap,Et=It===void 0?q.NamedNodeMap||q.MozNamedAttrMap:It,Pt=q.HTMLFormElement,Ft=q.DOMParser,Vt=q.trustedTypes,Gt=lt.prototype,Wt=G(Gt,"cloneNode"),Kt=G(Gt,"nextSibling"),Ht=G(Gt,"childNodes"),Zt=G(Gt,"parentNode");if(typeof jt=="function"){var Le=At.createElement("template");Le.content&&Le.content.ownerDocument&&(At=Le.content.ownerDocument)}var _t=ut(Vt,mt),Pe=_t?_t.createHTML(""):"",Ne=At,me=Ne.implementation,ye=Ne.createNodeIterator,an=Ne.createDocumentFragment,un=Ne.getElementsByTagName,Tn=mt.importNode,Ye={};try{Ye=U(At).documentMode?At.documentMode:{}}catch(O){}var re={};ft.isSupported=typeof Zt=="function"&&me&&me.createHTMLDocument!==void 0&&Ye!==9;var $e=pt,He=Nt,Be=rt,sn=et,In=dt,cn=_,ln=X,An=Tt,Se=yt,zt=null,te=D({},[].concat(o(K),o($),o(H),o(it),o(k))),Yt=null,Ee=D({},[].concat(o(J),o(nt),o(st),o(ot))),kt=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),le=null,Ce=null,We=!0,ze=!0,fn=!1,dn=!0,be=!1,De=!0,fe=!1,Fe=!1,xe=!1,de=!1,Xt=!1,Ve=!1,vn=!0,ke=!1,hn="user-content-",ue=!0,Me=!1,Te={},Ie=null,Xe=D({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Je=null,gn=D({},["audio","video","img","source","image","track"]),je=null,pn=D({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ee="http://www.w3.org/1998/Math/MathML",Ue="http://www.w3.org/2000/svg",se="http://www.w3.org/1999/xhtml",Ae=se,Qe=!1,Ze=null,On=D({},[ee,Ue,se],N),ce,Pn=["application/xhtml+xml","text/html"],mn="text/html",Jt,Oe=null,Nn=At.createElement("form"),yn=function(){function O(P){return P instanceof RegExp||P instanceof Function}return O}(),qe=function(){function O(P){Oe&&Oe===P||((!P||e(P)!=="object")&&(P={}),P=U(P),ce=Pn.indexOf(P.PARSER_MEDIA_TYPE)===-1?ce=mn:ce=P.PARSER_MEDIA_TYPE,Jt=ce==="application/xhtml+xml"?N:A,zt="ALLOWED_TAGS"in P?D({},P.ALLOWED_TAGS,Jt):te,Yt="ALLOWED_ATTR"in P?D({},P.ALLOWED_ATTR,Jt):Ee,Ze="ALLOWED_NAMESPACES"in P?D({},P.ALLOWED_NAMESPACES,N):On,je="ADD_URI_SAFE_ATTR"in P?D(U(pn),P.ADD_URI_SAFE_ATTR,Jt):pn,Je="ADD_DATA_URI_TAGS"in P?D(U(gn),P.ADD_DATA_URI_TAGS,Jt):gn,Ie="FORBID_CONTENTS"in P?D({},P.FORBID_CONTENTS,Jt):Xe,le="FORBID_TAGS"in P?D({},P.FORBID_TAGS,Jt):{},Ce="FORBID_ATTR"in P?D({},P.FORBID_ATTR,Jt):{},Te="USE_PROFILES"in P?P.USE_PROFILES:!1,We=P.ALLOW_ARIA_ATTR!==!1,ze=P.ALLOW_DATA_ATTR!==!1,fn=P.ALLOW_UNKNOWN_PROTOCOLS||!1,dn=P.ALLOW_SELF_CLOSE_IN_ATTR!==!1,be=P.SAFE_FOR_TEMPLATES||!1,De=P.SAFE_FOR_XML!==!1,fe=P.WHOLE_DOCUMENT||!1,de=P.RETURN_DOM||!1,Xt=P.RETURN_DOM_FRAGMENT||!1,Ve=P.RETURN_TRUSTED_TYPE||!1,xe=P.FORCE_BODY||!1,vn=P.SANITIZE_DOM!==!1,ke=P.SANITIZE_NAMED_PROPS||!1,ue=P.KEEP_CONTENT!==!1,Me=P.IN_PLACE||!1,Se=P.ALLOWED_URI_REGEXP||Se,Ae=P.NAMESPACE||se,kt=P.CUSTOM_ELEMENT_HANDLING||{},P.CUSTOM_ELEMENT_HANDLING&&yn(P.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(kt.tagNameCheck=P.CUSTOM_ELEMENT_HANDLING.tagNameCheck),P.CUSTOM_ELEMENT_HANDLING&&yn(P.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(kt.attributeNameCheck=P.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),P.CUSTOM_ELEMENT_HANDLING&&typeof P.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(kt.allowCustomizedBuiltInElements=P.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),be&&(ze=!1),Xt&&(de=!0),Te&&(zt=D({},o(k)),Yt=[],Te.html===!0&&(D(zt,K),D(Yt,J)),Te.svg===!0&&(D(zt,$),D(Yt,nt),D(Yt,ot)),Te.svgFilters===!0&&(D(zt,H),D(Yt,nt),D(Yt,ot)),Te.mathMl===!0&&(D(zt,it),D(Yt,st),D(Yt,ot))),P.ADD_TAGS&&(zt===te&&(zt=U(zt)),D(zt,P.ADD_TAGS,Jt)),P.ADD_ATTR&&(Yt===Ee&&(Yt=U(Yt)),D(Yt,P.ADD_ATTR,Jt)),P.ADD_URI_SAFE_ATTR&&D(je,P.ADD_URI_SAFE_ATTR,Jt),P.FORBID_CONTENTS&&(Ie===Xe&&(Ie=U(Ie)),D(Ie,P.FORBID_CONTENTS,Jt)),ue&&(zt["#text"]=!0),fe&&D(zt,["html","head","body"]),zt.table&&(D(zt,["tbody"]),delete le.tbody),v&&v(P),Oe=P)}return O}(),Sn=D({},["mi","mo","mn","ms","mtext"]),oe=D({},["foreignobject","desc","title","annotation-xml"]),Ge=D({},["title","style","font","a","script"]),Re=D({},$);D(Re,H),D(Re,tt);var _e=D({},it);D(_e,ht);var Mn=function(){function O(P){var R=Zt(P);(!R||!R.tagName)&&(R={namespaceURI:Ae,tagName:"template"});var F=A(P.tagName),W=A(R.tagName);return Ze[P.namespaceURI]?P.namespaceURI===Ue?R.namespaceURI===se?F==="svg":R.namespaceURI===ee?F==="svg"&&(W==="annotation-xml"||Sn[W]):!!Re[F]:P.namespaceURI===ee?R.namespaceURI===se?F==="math":R.namespaceURI===Ue?F==="math"&&oe[W]:!!_e[F]:P.namespaceURI===se?R.namespaceURI===Ue&&!oe[W]||R.namespaceURI===ee&&!Sn[W]?!1:!_e[F]&&(Ge[F]||!Re[F]):!!(ce==="application/xhtml+xml"&&Ze[P.namespaceURI]):!1}return O}(),ne=function(){function O(P){E(ft.removed,{element:P});try{P.parentNode.removeChild(P)}catch(R){try{P.outerHTML=Pe}catch(F){P.remove()}}}return O}(),Ke=function(){function O(P,R){try{E(ft.removed,{attribute:R.getAttributeNode(P),from:R})}catch(F){E(ft.removed,{attribute:null,from:R})}if(R.removeAttribute(P),P==="is"&&!Yt[P])if(de||Xt)try{ne(R)}catch(F){}else try{R.setAttribute(P,"")}catch(F){}}return O}(),En=function(){function O(P){var R,F;if(xe)P=" "+P;else{var W=M(P,/^[\r\n\t ]+/);F=W&&W[0]}ce==="application/xhtml+xml"&&Ae===se&&(P=''+P+"");var Q=_t?_t.createHTML(P):P;if(Ae===se)try{R=new Ft().parseFromString(Q,ce)}catch(at){}if(!R||!R.documentElement){R=me.createDocument(Ae,"template",null);try{R.documentElement.innerHTML=Qe?Pe:Q}catch(at){}}var Z=R.body||R.documentElement;return P&&F&&Z.insertBefore(At.createTextNode(F),Z.childNodes[0]||null),Ae===se?un.call(R,fe?"html":"body")[0]:fe?R.documentElement:Z}return O}(),we=function(){function O(P){return ye.call(P.ownerDocument||P,P,vt.SHOW_ELEMENT|vt.SHOW_COMMENT|vt.SHOW_TEXT|vt.SHOW_PROCESSING_INSTRUCTION|vt.SHOW_CDATA_SECTION,null,!1)}return O}(),Rn=function(){function O(P){return P instanceof Pt&&(typeof P.nodeName!="string"||typeof P.textContent!="string"||typeof P.removeChild!="function"||!(P.attributes instanceof Et)||typeof P.removeAttribute!="function"||typeof P.setAttribute!="function"||typeof P.namespaceURI!="string"||typeof P.insertBefore!="function"||typeof P.hasChildNodes!="function")}return O}(),he=function(){function O(P){return e(bt)==="object"?P instanceof bt:P&&e(P)==="object"&&typeof P.nodeType=="number"&&typeof P.nodeName=="string"}return O}(),ae=function(){function O(P,R,F){re[P]&&b(re[P],function(W){W.call(ft,R,F,Oe)})}return O}(),Cn=function(){function O(P){var R;if(ae("beforeSanitizeElements",P,null),Rn(P)||x(/[\u0080-\uFFFF]/,P.nodeName))return ne(P),!0;var F=Jt(P.nodeName);if(ae("uponSanitizeElement",P,{tagName:F,allowedTags:zt}),P.hasChildNodes()&&!he(P.firstElementChild)&&(!he(P.content)||!he(P.content.firstElementChild))&&x(/<[/\w]/g,P.innerHTML)&&x(/<[/\w]/g,P.textContent)||F==="select"&&x(/=0;--at)W.insertBefore(Wt(Q[at],!0),Kt(P))}return ne(P),!0}return P instanceof lt&&!Mn(P)||(F==="noscript"||F==="noembed"||F==="noframes")&&x(/<\/no(script|embed|frames)/i,P.innerHTML)?(ne(P),!0):(be&&P.nodeType===3&&(R=P.textContent,R=w(R,$e," "),R=w(R,He," "),R=w(R,Be," "),P.textContent!==R&&(E(ft.removed,{element:P.cloneNode()}),P.textContent=R)),ae("afterSanitizeElements",P,null),!1)}return O}(),tn=function(){function O(P,R,F){if(vn&&(R==="id"||R==="name")&&(F in At||F in Nn))return!1;if(!(ze&&!Ce[R]&&x(sn,R))){if(!(We&&x(In,R))){if(!Yt[R]||Ce[R]){if(!(en(P)&&(kt.tagNameCheck instanceof RegExp&&x(kt.tagNameCheck,P)||kt.tagNameCheck instanceof Function&&kt.tagNameCheck(P))&&(kt.attributeNameCheck instanceof RegExp&&x(kt.attributeNameCheck,R)||kt.attributeNameCheck instanceof Function&&kt.attributeNameCheck(R))||R==="is"&&kt.allowCustomizedBuiltInElements&&(kt.tagNameCheck instanceof RegExp&&x(kt.tagNameCheck,F)||kt.tagNameCheck instanceof Function&&kt.tagNameCheck(F))))return!1}else if(!je[R]){if(!x(Se,w(F,ln,""))){if(!((R==="src"||R==="xlink:href"||R==="href")&&P!=="script"&&L(F,"data:")===0&&Je[P])){if(!(fn&&!x(cn,w(F,ln,"")))){if(F)return!1}}}}}}return!0}return O}(),en=function(){function O(P){return P!=="annotation-xml"&&M(P,An)}return O}(),bn=function(){function O(P){var R,F,W,Q;ae("beforeSanitizeAttributes",P,null);var Z=P.attributes;if(Z){var at={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Yt};for(Q=Z.length;Q--;){R=Z[Q];var Ct=R,Mt=Ct.name,Rt=Ct.namespaceURI;if(F=Mt==="value"?R.value:B(R.value),W=Jt(Mt),at.attrName=W,at.attrValue=F,at.keepAttr=!0,at.forceKeepAttr=void 0,ae("uponSanitizeAttribute",P,at),F=at.attrValue,!at.forceKeepAttr&&(Ke(Mt,P),!!at.keepAttr)){if(!dn&&x(/\/>/i,F)){Ke(Mt,P);continue}be&&(F=w(F,$e," "),F=w(F,He," "),F=w(F,Be," "));var Lt=Jt(P.nodeName);if(tn(Lt,W,F)){if(ke&&(W==="id"||W==="name")&&(Ke(Mt,P),F=hn+F),_t&&e(Vt)==="object"&&typeof Vt.getAttributeType=="function"&&!Rt)switch(Vt.getAttributeType(Lt,W)){case"TrustedHTML":{F=_t.createHTML(F);break}case"TrustedScriptURL":{F=_t.createScriptURL(F);break}}try{Rt?P.setAttributeNS(Rt,Mt,F):P.setAttribute(Mt,F),y(ft.removed)}catch(wt){}}}}ae("afterSanitizeAttributes",P,null)}}return O}(),Bn=function(){function O(P){var R,F=we(P);for(ae("beforeSanitizeShadowDOM",P,null);R=F.nextNode();)ae("uponSanitizeShadowNode",R,null),!Cn(R)&&(R.content instanceof Dt&&O(R.content),bn(R));ae("afterSanitizeShadowDOM",P,null)}return O}();return ft.sanitize=function(O){var P=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},R,F,W,Q,Z;if(Qe=!O,Qe&&(O=""),typeof O!="string"&&!he(O))if(typeof O.toString=="function"){if(O=O.toString(),typeof O!="string")throw j("dirty is not a string, aborting")}else throw j("toString is not a function");if(!ft.isSupported){if(e(q.toStaticHTML)==="object"||typeof q.toStaticHTML=="function"){if(typeof O=="string")return q.toStaticHTML(O);if(he(O))return q.toStaticHTML(O.outerHTML)}return O}if(Fe||qe(P),ft.removed=[],typeof O=="string"&&(Me=!1),Me){if(O.nodeName){var at=Jt(O.nodeName);if(!zt[at]||le[at])throw j("root node is forbidden and cannot be sanitized in-place")}}else if(O instanceof bt)R=En(""),F=R.ownerDocument.importNode(O,!0),F.nodeType===1&&F.nodeName==="BODY"||F.nodeName==="HTML"?R=F:R.appendChild(F);else{if(!de&&!be&&!fe&&O.indexOf("<")===-1)return _t&&Ve?_t.createHTML(O):O;if(R=En(O),!R)return de?null:Ve?Pe:""}R&&xe&&ne(R.firstChild);for(var Ct=we(Me?O:R);W=Ct.nextNode();)W.nodeType===3&&W===Q||Cn(W)||(W.content instanceof Dt&&Bn(W.content),bn(W),Q=W);if(Q=null,Me)return O;if(de){if(Xt)for(Z=an.call(R.ownerDocument);R.firstChild;)Z.appendChild(R.firstChild);else Z=R;return(Yt.shadowroot||Yt.shadowrootmod)&&(Z=Tn.call(mt,Z,!0)),Z}var Mt=fe?R.outerHTML:R.innerHTML;return fe&&zt["!doctype"]&&R.ownerDocument&&R.ownerDocument.doctype&&R.ownerDocument.doctype.name&&x(ct,R.ownerDocument.doctype.name)&&(Mt="\n"+Mt),be&&(Mt=w(Mt,$e," "),Mt=w(Mt,He," "),Mt=w(Mt,Be," ")),_t&&Ve?_t.createHTML(Mt):Mt},ft.setConfig=function(O){qe(O),Fe=!0},ft.clearConfig=function(){Oe=null,Fe=!1},ft.isValidAttribute=function(O,P,R){Oe||qe({});var F=Jt(O),W=Jt(P);return tn(F,W,R)},ft.addHook=function(O,P){typeof P=="function"&&(re[O]=re[O]||[],E(re[O],P))},ft.removeHook=function(O){if(re[O])return y(re[O])},ft.removeHooks=function(O){re[O]&&(re[O]=[])},ft.removeAllHooks=function(){re={}},ft}var Ot=gt();return Ot})},15875:function(S,e){"use strict";e.__esModule=!0,e.VNodeFlags=e.ChildFlags=void 0;var t;(function(r){r[r.Unknown=0]="Unknown",r[r.HtmlElement=1]="HtmlElement",r[r.ComponentUnknown=2]="ComponentUnknown",r[r.ComponentClass=4]="ComponentClass",r[r.ComponentFunction=8]="ComponentFunction",r[r.Text=16]="Text",r[r.SvgElement=32]="SvgElement",r[r.InputElement=64]="InputElement",r[r.TextareaElement=128]="TextareaElement",r[r.SelectElement=256]="SelectElement",r[r.Portal=1024]="Portal",r[r.ReCreate=2048]="ReCreate",r[r.ContentEditable=4096]="ContentEditable",r[r.Fragment=8192]="Fragment",r[r.InUse=16384]="InUse",r[r.ForwardRef=32768]="ForwardRef",r[r.Normalized=65536]="Normalized",r[r.ForwardRefComponent=32776]="ForwardRefComponent",r[r.FormElement=448]="FormElement",r[r.Element=481]="Element",r[r.Component=14]="Component",r[r.DOMRef=1521]="DOMRef",r[r.InUseOrNormalized=81920]="InUseOrNormalized",r[r.ClearInUse=-16385]="ClearInUse",r[r.ComponentKnown=12]="ComponentKnown"})(t||(e.VNodeFlags=t={}));var n;(function(r){r[r.UnknownChildren=0]="UnknownChildren",r[r.HasInvalidChildren=1]="HasInvalidChildren",r[r.HasVNodeChildren=2]="HasVNodeChildren",r[r.HasNonKeyedChildren=4]="HasNonKeyedChildren",r[r.HasKeyedChildren=8]="HasKeyedChildren",r[r.HasTextChildren=16]="HasTextChildren",r[r.MultipleChildren=12]="MultipleChildren"})(n||(e.ChildFlags=n={}))},89292:function(S,e){"use strict";e.__esModule=!0,e.Fragment=e.EMPTY_OBJ=e.Component=e.AnimationQueues=void 0,e._CI=xe,e._HI=ct,e._M=Xt,e._MCCC=Je,e._ME=hn,e._MFCC=je,e._MP=fe,e._MR=zt,e._RFC=de,e.__render=ne,e.createComponentVNode=nt,e.createFragment=ot,e.createPortal=dt,e.createRef=ln,e.createRenderer=En,e.createTextVNode=st,e.createVNode=it,e.directClone=rt,e.findDOMFromVNode=A,e.forwardRef=An,e.getFlagsForElementVnode=_,e.linkEvent=i,e.normalizeProps=pt,e.options=void 0,e.render=Ke,e.rerender=tn,e.version=void 0;var t=Array.isArray;function n(O){var P=typeof O;return P==="string"||P==="number"}function r(O){return O==null}function o(O){return O===null||O===!1||O===!0||O===void 0}function a(O){return typeof O=="function"}function u(O){return typeof O=="string"}function s(O){return typeof O=="number"}function c(O){return O===null}function h(O){return O===void 0}function f(O,P){var R={};if(O)for(var F in O)R[F]=O[F];if(P)for(var W in P)R[W]=P[W];return R}function i(O,P){return a(P)?{data:O,event:P}:null}function d(O){return!c(O)&&typeof O=="object"}var l=e.EMPTY_OBJ={},p=e.Fragment="$F",v=e.AnimationQueues=function(){function O(){this.componentDidAppear=[],this.componentWillDisappear=[],this.componentWillMove=[]}return O}();function g(O){return O.substring(2).toLowerCase()}function m(O,P){O.appendChild(P)}function C(O,P,R){c(R)?m(O,P):O.insertBefore(P,R)}function T(O,P){return P?document.createElementNS("http://www.w3.org/2000/svg",O):document.createElement(O)}function I(O,P,R){O.replaceChild(P,R)}function b(O,P){O.removeChild(P)}function y(O){for(var P=0;P0?N(R.componentWillDisappear,L(O,P)):w(O,P,!1)}function x(O,P,R,F,W,Q,Z,at){O.componentWillMove.push({dom:F,fn:function(){function Ct(){Z&4?R.componentWillMove(P,W,F):Z&8&&R.onComponentWillMove(P,W,F,at)}return Ct}(),next:Q,parent:W})}function j(O,P,R,F,W){var Q,Z,at=P.flags;do{var Ct=P.flags;if(Ct&1521){!r(Q)&&(a(Q.componentWillMove)||a(Q.onComponentWillMove))?x(W,O,Q,P.dom,R,F,at,Z):C(R,P.dom,F);return}var Mt=P.children;if(Ct&4)Q=P.children,Z=P.props,P=Mt.$LI;else if(Ct&8)Q=P.ref,Z=P.props,P=Mt;else if(Ct&8192)if(P.childFlags===2)P=Mt;else{for(var Rt=0,Lt=Mt.length;Rt0,Mt=c(at),Rt=u(at)&&at[0]===H;Ct||Mt||Rt?(R=R||P.slice(0,Q),(Ct||Rt)&&(Z=rt(Z)),(Mt||Rt)&&(Z.key=H+Q),R.push(Z)):R&&R.push(Z),Z.flags|=65536}}R=R||P,R.length===0?F=1:F=8}else R=P,R.flags|=65536,P.flags&81920&&(R=rt(P)),F=2;return O.children=R,O.childFlags=F,O}function ct(O){return o(O)||n(O)?st(O,null):t(O)?ot(O,0,null):O.flags&16384?rt(O):O}var Tt="http://www.w3.org/1999/xlink",St="http://www.w3.org/XML/1998/namespace",ut={"xlink:actuate":Tt,"xlink:arcrole":Tt,"xlink:href":Tt,"xlink:role":Tt,"xlink:show":Tt,"xlink:title":Tt,"xlink:type":Tt,"xml:base":St,"xml:lang":St,"xml:space":St};function gt(O){return{onClick:O,onDblClick:O,onFocusIn:O,onFocusOut:O,onKeyDown:O,onKeyPress:O,onKeyUp:O,onMouseDown:O,onMouseMove:O,onMouseUp:O,onTouchEnd:O,onTouchMove:O,onTouchStart:O}}var Ot=gt(0),q=gt(null),ft=gt(!0);function mt(O,P){var R=P.$EV;return R||(R=P.$EV=gt(null)),R[O]||++Ot[O]===1&&(q[O]=Vt(O)),R}function At(O,P){var R=P.$EV;R&&R[O]&&(--Ot[O]===0&&(document.removeEventListener(g(O),q[O]),q[O]=null),R[O]=null)}function Dt(O,P,R,F){if(a(R))mt(O,F)[O]=R;else if(d(R)){if(G(P,R))return;mt(O,F)[O]=R}else At(O,F)}function jt(O){return a(O.composedPath)?O.composedPath()[0]:O.target}function bt(O,P,R,F){var W=jt(O);do{if(P&&W.disabled)return;var Q=W.$EV;if(Q){var Z=Q[R];if(Z&&(F.dom=W,Z.event?Z.event(Z.data,O):Z(O),O.cancelBubble))return}W=W.parentNode}while(!c(W))}function lt(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function vt(){return this.defaultPrevented}function It(){return this.cancelBubble}function Et(O){var P={dom:document};return O.isDefaultPrevented=vt,O.isPropagationStopped=It,O.stopPropagation=lt,Object.defineProperty(O,"currentTarget",{configurable:!0,get:function(){function R(){return P.dom}return R}()}),P}function Pt(O){return function(P){if(P.button!==0){P.stopPropagation();return}bt(P,!0,O,Et(P))}}function Ft(O){return function(P){bt(P,!1,O,Et(P))}}function Vt(O){var P=O==="onClick"||O==="onDblClick"?Pt(O):Ft(O);return document.addEventListener(g(O),P),P}function Gt(O,P){var R=document.createElement("i");return R.innerHTML=P,R.innerHTML===O.innerHTML}function Wt(O,P,R){if(O[P]){var F=O[P];F.event?F.event(F.data,R):F(R)}else{var W=P.toLowerCase();O[W]&&O[W](R)}}function Kt(O,P){var R=function(){function F(W){var Q=this.$V;if(Q){var Z=Q.props||l,at=Q.dom;if(u(O))Wt(Z,O,W);else for(var Ct=0;Ct-1&&P.options[Q]&&(at=P.options[Q].value),R&&r(at)&&(at=O.defaultValue),ye(F,at)}}var re=Kt("onInput",Be),$e=Kt("onChange");function He(O,P){Ht(O,"input",re),P.onChange&&Ht(O,"change",$e)}function Be(O,P,R){var F=O.value,W=P.value;if(r(F)){if(R){var Q=O.defaultValue;!r(Q)&&Q!==W&&(P.defaultValue=Q,P.value=Q)}}else W!==F&&(P.defaultValue=F,P.value=F)}function sn(O,P,R,F,W,Q){O&64?me(F,R):O&256?Ye(F,R,W,P):O&128&&Be(F,R,W),Q&&(R.$V=P)}function In(O,P,R){O&64?Ne(P,R):O&256?Tn(P):O&128&&He(P,R)}function cn(O){return O.type&&Zt(O.type)?!r(O.checked):!r(O.value)}function ln(){return{current:null}}function An(O){var P={render:O};return P}function Se(O){O&&!$(O,null)&&O.current&&(O.current=null)}function zt(O,P,R){O&&(a(O)||O.current!==void 0)&&R.push(function(){!$(O,P)&&O.current!==void 0&&(O.current=P)})}function te(O,P,R){Yt(O,R),B(O,P,R)}function Yt(O,P){var R=O.flags,F=O.children,W;if(R&481){W=O.ref;var Q=O.props;Se(W);var Z=O.childFlags;if(!c(Q))for(var at=Object.keys(Q),Ct=0,Mt=at.length;Ct0?N(R.componentWillDisappear,kt(P,O)):O.textContent=""}function Ce(O,P,R,F){Ee(R,F),P.flags&8192?B(P,O,F):le(O,R,F)}function We(O,P,R,F,W){O.componentWillDisappear.push(function(Q){F&4?P.componentWillDisappear(R,Q):F&8&&P.onComponentWillDisappear(R,W,Q)})}function ze(O){var P=O.event;return function(R){P(O.data,R)}}function fn(O,P,R,F){if(d(R)){if(G(P,R))return;R=ze(R)}Ht(F,g(O),R)}function dn(O,P,R){if(r(P)){R.removeAttribute("style");return}var F=R.style,W,Q;if(u(P)){F.cssText=P;return}if(!r(O)&&!u(O)){for(W in P)Q=P[W],Q!==O[W]&&F.setProperty(W,Q);for(W in O)r(P[W])&&F.removeProperty(W)}else for(W in P)Q=P[W],F.setProperty(W,Q)}function be(O,P,R,F,W){var Q=O&&O.__html||"",Z=P&&P.__html||"";Q!==Z&&!r(Z)&&!Gt(F,Z)&&(c(R)||(R.childFlags&12?Ee(R.children,W):R.childFlags===2&&Yt(R.children,W),R.children=null,R.childFlags=1),F.innerHTML=Z)}function De(O,P,R,F,W,Q,Z,at){switch(O){case"children":case"childrenType":case"className":case"defaultValue":case"key":case"multiple":case"ref":case"selectedIndex":break;case"autoFocus":F.autofocus=!!R;break;case"allowfullscreen":case"autoplay":case"capture":case"checked":case"controls":case"default":case"disabled":case"hidden":case"indeterminate":case"loop":case"muted":case"novalidate":case"open":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"selected":F[O]=!!R;break;case"defaultChecked":case"value":case"volume":if(Q&&O==="value")break;var Ct=r(R)?"":R;F[O]!==Ct&&(F[O]=Ct);break;case"style":dn(P,R,F);break;case"dangerouslySetInnerHTML":be(P,R,Z,F,at);break;default:ft[O]?Dt(O,P,R,F):O.charCodeAt(0)===111&&O.charCodeAt(1)===110?fn(O,P,R,F):r(R)?F.removeAttribute(O):W&&ut[O]?F.setAttributeNS(ut[O],O,R):F.setAttribute(O,R);break}}function fe(O,P,R,F,W,Q){var Z=!1,at=(P&448)>0;at&&(Z=cn(R),Z&&In(P,F,R));for(var Ct in R)De(Ct,null,R[Ct],F,W,Z,null,Q);at&&sn(P,O,F,R,!0,Z)}function Fe(O,P,R){var F=ct(O.render(P,O.state,R)),W=R;return a(O.getChildContext)&&(W=f(R,O.getChildContext())),O.$CX=W,F}function xe(O,P,R,F,W,Q){var Z=new P(R,F),at=Z.$N=!!(P.getDerivedStateFromProps||Z.getSnapshotBeforeUpdate);if(Z.$SVG=W,Z.$L=Q,O.children=Z,Z.$BS=!1,Z.context=F,Z.props===l&&(Z.props=R),at)Z.state=V(Z,R,Z.state);else if(a(Z.componentWillMount)){Z.$BR=!0,Z.componentWillMount();var Ct=Z.$PS;if(!c(Ct)){var Mt=Z.state;if(c(Mt))Z.state=Ct;else for(var Rt in Ct)Mt[Rt]=Ct[Rt];Z.$PS=null}Z.$BR=!1}return Z.$LI=Fe(Z,R,F),Z}function de(O,P){var R=O.props||l;return O.flags&32768?O.type.render(R,O.ref,P):O.type(R,P)}function Xt(O,P,R,F,W,Q,Z){var at=O.flags|=16384;at&481?hn(O,P,R,F,W,Q,Z):at&4?Me(O,P,R,F,W,Q,Z):at&8?Te(O,P,R,F,W,Q,Z):at&16?ke(O,P,W):at&8192?vn(O,R,P,F,W,Q,Z):at&1024&&Ve(O,R,P,W,Q,Z)}function Ve(O,P,R,F,W,Q){Xt(O.children,O.ref,P,!1,null,W,Q);var Z=et();ke(Z,R,F),O.dom=Z.dom}function vn(O,P,R,F,W,Q,Z){var at=O.children,Ct=O.childFlags;Ct&12&&at.length===0&&(Ct=O.childFlags=2,at=O.children=et()),Ct===2?Xt(at,R,P,F,W,Q,Z):ue(at,R,P,F,W,Q,Z)}function ke(O,P,R){var F=O.dom=document.createTextNode(O.children);c(P)||C(P,F,R)}function hn(O,P,R,F,W,Q,Z){var at=O.flags,Ct=O.props,Mt=O.className,Rt=O.childFlags,Lt=O.dom=T(O.type,F=F||(at&32)>0),wt=O.children;if(!r(Mt)&&Mt!==""&&(F?Lt.setAttribute("class",Mt):Lt.className=Mt),Rt===16)U(Lt,wt);else if(Rt!==1){var Bt=F&&O.type!=="foreignObject";Rt===2?(wt.flags&16384&&(O.children=wt=rt(wt)),Xt(wt,Lt,R,Bt,null,Q,Z)):(Rt===8||Rt===4)&&ue(wt,Lt,R,Bt,null,Q,Z)}c(P)||C(P,Lt,W),c(Ct)||fe(O,at,Ct,Lt,F,Z),zt(O.ref,Lt,Q)}function ue(O,P,R,F,W,Q,Z){for(var at=0;atBt)&&(Lt=A(at[Bt-1],!1).nextSibling)}ce(Mt,Rt,at,Ct,R,F,W,Lt,O,Q,Z)}function Qe(O,P,R,F,W){var Q=O.ref,Z=P.ref,at=P.children;if(ce(O.childFlags,P.childFlags,O.children,at,Q,R,!1,null,O,F,W),P.dom=O.dom,Q!==Z&&!o(at)){var Ct=at.dom;b(Q,Ct),m(Z,Ct)}}function Ze(O,P,R,F,W,Q,Z){var at=P.dom=O.dom,Ct=O.props,Mt=P.props,Rt=!1,Lt=!1,wt;if(F=F||(W&32)>0,Ct!==Mt){var Bt=Ct||l;if(wt=Mt||l,wt!==l){Rt=(W&448)>0,Rt&&(Lt=cn(wt));for(var $t in wt){var xt=Bt[$t],Qt=wt[$t];xt!==Qt&&De($t,xt,Qt,at,F,Lt,O,Z)}}if(Bt!==l)for(var Ut in Bt)r(wt[Ut])&&!r(Bt[Ut])&&De(Ut,Bt[Ut],null,at,F,Lt,O,Z)}var ge=P.children,ie=P.className;O.className!==ie&&(r(ie)?at.removeAttribute("class"):F?at.setAttribute("class",ie):at.className=ie),W&4096?se(at,ge):ce(O.childFlags,P.childFlags,O.children,ge,at,R,F&&P.type!=="foreignObject",null,O,Q,Z),Rt&&sn(W,P,at,wt,!1,Lt);var nn=P.ref,ve=O.ref;ve!==nn&&(Se(ve),zt(nn,at,Q))}function On(O,P,R,F,W,Q,Z){Yt(O,Z),ue(P,R,F,W,A(O,!0),Q,Z),B(O,R,Z)}function ce(O,P,R,F,W,Q,Z,at,Ct,Mt,Rt){switch(O){case 2:switch(P){case 2:ee(R,F,W,Q,Z,at,Mt,Rt);break;case 1:te(R,W,Rt);break;case 16:Yt(R,Rt),U(W,F);break;default:On(R,F,W,Q,Z,Mt,Rt);break}break;case 1:switch(P){case 2:Xt(F,W,Q,Z,at,Mt,Rt);break;case 1:break;case 16:U(W,F);break;default:ue(F,W,Q,Z,at,Mt,Rt);break}break;case 16:switch(P){case 16:Ue(R,F,W);break;case 2:le(W,R,Rt),Xt(F,W,Q,Z,at,Mt,Rt);break;case 1:le(W,R,Rt);break;default:le(W,R,Rt),ue(F,W,Q,Z,at,Mt,Rt);break}break;default:switch(P){case 16:Ee(R,Rt),U(W,F);break;case 2:Ce(W,Ct,R,Rt),Xt(F,W,Q,Z,at,Mt,Rt);break;case 1:Ce(W,Ct,R,Rt);break;default:var Lt=R.length|0,wt=F.length|0;Lt===0?wt>0&&ue(F,W,Q,Z,at,Mt,Rt):wt===0?Ce(W,Ct,R,Rt):P===8&&O===8?qe(R,F,W,Q,Z,Lt,wt,at,Ct,Mt,Rt):yn(R,F,W,Q,Z,Lt,wt,at,Mt,Rt);break}break}}function Pn(O,P,R,F,W){W.push(function(){O.componentDidUpdate(P,R,F)})}function mn(O,P,R,F,W,Q,Z,at,Ct,Mt){var Rt=O.state,Lt=O.props,wt=!!O.$N,Bt=a(O.shouldComponentUpdate);if(wt&&(P=V(O,R,P!==Rt?f(Rt,P):P)),Z||!Bt||Bt&&O.shouldComponentUpdate(R,P,W)){!wt&&a(O.componentWillUpdate)&&O.componentWillUpdate(R,P,W),O.props=R,O.state=P,O.context=W;var $t=null,xt=Fe(O,R,W);wt&&a(O.getSnapshotBeforeUpdate)&&($t=O.getSnapshotBeforeUpdate(Lt,Rt)),ee(O.$LI,xt,F,O.$CX,Q,at,Ct,Mt),O.$LI=xt,a(O.componentDidUpdate)&&Pn(O,Lt,Rt,$t,Ct)}else O.props=R,O.state=P,O.context=W}function Jt(O,P,R,F,W,Q,Z,at){var Ct=P.children=O.children;if(!c(Ct)){Ct.$L=Z;var Mt=P.props||l,Rt=P.ref,Lt=O.ref,wt=Ct.state;if(!Ct.$N){if(a(Ct.componentWillReceiveProps)){if(Ct.$BR=!0,Ct.componentWillReceiveProps(Mt,F),Ct.$UN)return;Ct.$BR=!1}c(Ct.$PS)||(wt=f(wt,Ct.$PS),Ct.$PS=null)}mn(Ct,wt,Mt,R,F,W,!1,Q,Z,at),Lt!==Rt&&(Se(Lt),zt(Rt,Ct,Z))}}function Oe(O,P,R,F,W,Q,Z,at){var Ct=!0,Mt=P.props||l,Rt=P.ref,Lt=O.props,wt=!r(Rt),Bt=O.children;if(wt&&a(Rt.onComponentShouldUpdate)&&(Ct=Rt.onComponentShouldUpdate(Lt,Mt)),Ct!==!1){wt&&a(Rt.onComponentWillUpdate)&&Rt.onComponentWillUpdate(Lt,Mt);var $t=ct(de(P,F));ee(Bt,$t,R,F,W,Q,Z,at),P.children=$t,wt&&a(Rt.onComponentDidUpdate)&&Rt.onComponentDidUpdate(Lt,Mt)}else P.children=Bt}function Nn(O,P){var R=P.children,F=P.dom=O.dom;R!==O.children&&(F.nodeValue=R)}function yn(O,P,R,F,W,Q,Z,at,Ct,Mt){for(var Rt=Q>Z?Z:Q,Lt=0,wt,Bt;LtZ)for(Lt=Rt;LtLt||Bt>wt)break t;$t=O[Bt],xt=P[Bt]}for($t=O[Lt],xt=P[wt];$t.key===xt.key;){if(xt.flags&16384&&(P[wt]=xt=rt(xt)),ee($t,xt,R,F,W,at,Mt,Rt),O[Lt]=xt,Lt--,wt--,Bt>Lt||Bt>wt)break t;$t=O[Lt],xt=P[wt]}}if(Bt>Lt){if(Bt<=wt)for(Qt=wt+1,Ut=Qtwt)for(;Bt<=Lt;)te(O[Bt++],R,Rt);else Sn(O,P,F,Q,Z,Lt,wt,Bt,R,W,at,Ct,Mt,Rt)}function Sn(O,P,R,F,W,Q,Z,at,Ct,Mt,Rt,Lt,wt,Bt){var $t,xt,Qt=0,Ut=0,ge=at,ie=at,nn=Q-at+1,ve=Z-at+1,rn=new Int32Array(ve+1),pe=nn===F,wn=!1,qt=0,on=0;if(W<4||(nn|ve)<32)for(Ut=ge;Ut<=Q;++Ut)if($t=O[Ut],onat?wn=!0:qt=at,xt.flags&16384&&(P[at]=xt=rt(xt)),ee($t,xt,Ct,R,Mt,Rt,wt,Bt),++on;break}!pe&&at>Z&&te($t,Ct,Bt)}else pe||te($t,Ct,Bt);else{var Dn={};for(Ut=ie;Ut<=Z;++Ut)Dn[P[Ut].key]=Ut;for(Ut=ge;Ut<=Q;++Ut)if($t=O[Ut],onge;)te(O[ge++],Ct,Bt);rn[at-ie]=Ut+1,qt>at?wn=!0:qt=at,xt=P[at],xt.flags&16384&&(P[at]=xt=rt(xt)),ee($t,xt,Ct,R,Mt,Rt,wt,Bt),++on}else pe||te($t,Ct,Bt);else pe||te($t,Ct,Bt)}if(pe)Ce(Ct,Lt,O,Bt),ue(P,Ct,R,Mt,Rt,wt,Bt);else if(wn){var Fn=_e(rn);for(at=Fn.length-1,Ut=ve-1;Ut>=0;Ut--)rn[Ut]===0?(qt=Ut+ie,xt=P[qt],xt.flags&16384&&(P[qt]=xt=rt(xt)),Qt=qt+1,Xt(xt,Ct,R,Mt,Qt0&&M(Bt.componentWillMove)}else if(on!==ve)for(Ut=ve-1;Ut>=0;Ut--)rn[Ut]===0&&(qt=Ut+ie,xt=P[qt],xt.flags&16384&&(P[qt]=xt=rt(xt)),Qt=qt+1,Xt(xt,Ct,R,Mt,QtRe&&(Re=Ct,oe=new Int32Array(Ct),Ge=new Int32Array(Ct));R>1,O[oe[at]]0&&(Ge[R]=oe[Q-1]),oe[Q]=R)}Q=W+1;var Mt=new Int32Array(Q);for(Z=oe[Q-1];Q-- >0;)Mt[Q]=Z,Z=Ge[Z],oe[Q]=0;return Mt}var Mn=typeof document!="undefined";Mn&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);function ne(O,P,R,F){var W=[],Q=new v,Z=P.$V;Y.v=!0,r(Z)?r(O)||(O.flags&16384&&(O=rt(O)),Xt(O,P,F,!1,null,W,Q),P.$V=O,Z=O):r(O)?(te(Z,P,Q),P.$V=null):(O.flags&16384&&(O=rt(O)),ee(Z,O,P,F,!1,null,W,Q),Z=P.$V=O),y(W),N(Q.componentDidAppear),Y.v=!1,a(R)&&R(),a(D.renderComplete)&&D.renderComplete(Z,P)}function Ke(O,P,R,F){R===void 0&&(R=null),F===void 0&&(F=l),ne(O,P,R,F)}function En(O){return function(){function P(R,F,W,Q){O||(O=R),Ke(F,O,W,Q)}return P}()}var we=[],Rn=typeof Promise!="undefined"?Promise.resolve().then.bind(Promise.resolve()):function(O){window.setTimeout(O,0)},he=!1;function ae(O,P,R,F){var W=O.$PS;if(a(P)&&(P=P(W?f(O.state,W):O.state,O.props,O.context)),r(W))O.$PS=P;else for(var Q in P)W[Q]=P[Q];if(O.$BR)a(R)&&O.$L.push(R.bind(O));else{if(!Y.v&&we.length===0){en(O,F),a(R)&&R.call(O);return}if(we.indexOf(O)===-1&&we.push(O),F&&(O.$F=!0),he||(he=!0,Rn(tn)),a(R)){var Z=O.$QU;Z||(Z=O.$QU=[]),Z.push(R)}}}function Cn(O){for(var P=O.$QU,R=0;R
=0;--$){var H=this.tryEntries[$],tt=H.completion;if(H.tryLoc==="root")return K("end");if(H.tryLoc<=this.prev){var it=r.call(H,"catchLoc"),ht=r.call(H,"finallyLoc");if(it&&ht){if(this.prev=0;--K){var $=this.tryEntries[K];if($.tryLoc<=this.prev&&r.call($,"finallyLoc")&&this.prev<$.finallyLoc){var H=$;break}}H&&(U==="break"||U==="continue")&&H.tryLoc<=G&&G<=H.finallyLoc&&(H=null);var tt=H?H.completion:{};return tt.type=U,tt.arg=G,H?(this.method="next",this.next=H.finallyLoc,m):this.complete(tt)}return D}(),complete:function(){function D(U,G){if(U.type==="throw")throw U.arg;return U.type==="break"||U.type==="continue"?this.next=U.arg:U.type==="return"?(this.rval=this.arg=U.arg,this.method="return",this.next="end"):U.type==="normal"&&G&&(this.next=G),m}return D}(),finish:function(){function D(U){for(var G=this.tryEntries.length-1;G>=0;--G){var K=this.tryEntries[G];if(K.finallyLoc===U)return this.complete(K.completion,K.afterLoc),x(K),m}}return D}(),catch:function(){function D(U){for(var G=this.tryEntries.length-1;G>=0;--G){var K=this.tryEntries[G];if(K.tryLoc===U){var $=K.completion;if($.type==="throw"){var H=$.arg;x(K)}return H}}throw new Error("illegal catch attempt")}return D}(),delegateYield:function(){function D(U,G,K){return this.delegate={iterator:V(U),resultName:G,nextLoc:K},this.method==="next"&&(this.arg=a),m}return D}()},t}(S.exports);try{regeneratorRuntime=e}catch(t){typeof globalThis=="object"?globalThis.regeneratorRuntime=e:Function("r","regeneratorRuntime = r")(e)}},30236:function(){"use strict";self.fetch||(self.fetch=function(S,e){return e=e||{},new Promise(function(t,n){var r=new XMLHttpRequest,o=[],a={},u=function(){function c(){return{ok:(r.status/100|0)==2,statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){function h(){return Promise.resolve(r.responseText)}return h}(),json:function(){function h(){return Promise.resolve(r.responseText).then(JSON.parse)}return h}(),blob:function(){function h(){return Promise.resolve(new Blob([r.response]))}return h}(),clone:c,headers:{keys:function(){function h(){return o}return h}(),entries:function(){function h(){return o.map(function(f){return[f,r.getResponseHeader(f)]})}return h}(),get:function(){function h(f){return r.getResponseHeader(f)}return h}(),has:function(){function h(f){return r.getResponseHeader(f)!=null}return h}()}}}return c}();for(var s in r.open(e.method||"get",S,!0),r.onload=function(){r.getAllResponseHeaders().toLowerCase().replace(/^(.+?):/gm,function(c,h){a[h]||o.push(a[h]=h)}),t(u())},r.onerror=n,r.withCredentials=e.credentials=="include",e.headers)r.setRequestHeader(s,e.headers[s]);r.send(e.body||null)})})},88510:function(S,e){"use strict";e.__esModule=!0,e.zipWith=e.zip=e.uniqBy=e.uniq=e.toKeyedArray=e.toArray=e.sortBy=e.sort=e.reduce=e.range=e.map=e.filterMap=e.filter=void 0;function t(C,T){var I=typeof Symbol!="undefined"&&C[Symbol.iterator]||C["@@iterator"];if(I)return(I=I.call(C)).next.bind(I);if(Array.isArray(C)||(I=n(C))||T&&C&&typeof C.length=="number"){I&&(C=I);var b=0;return function(){return b>=C.length?{done:!0}:{done:!1,value:C[b++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(C,T){if(C){if(typeof C=="string")return r(C,T);var I={}.toString.call(C).slice(8,-1);return I==="Object"&&C.constructor&&(I=C.constructor.name),I==="Map"||I==="Set"?Array.from(C):I==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(I)?r(C,T):void 0}}function r(C,T){(T==null||T>C.length)&&(T=C.length);for(var I=0,b=Array(T);I0&&(0,r.round)(i.width)/c.offsetWidth||1,l=c.offsetHeight>0&&(0,r.round)(i.height)/c.offsetHeight||1);var g=(0,e.isElement)(c)?(0,o.default)(c):window,v=g.visualViewport,p=!(0,a.default)()&&f,m=(i.left+(p&&v?v.offsetLeft:0))/d,C=(i.top+(p&&v?v.offsetTop:0))/l,T=i.width/d,A=i.height/l;return{width:T,height:A,top:C,right:m+T,bottom:C+A,left:m,x:m,y:C}}},49035:function(E,n,t){"use strict";n.__esModule=!0,n.default=A;var e=t(46206),r=p(t(87991)),o=p(t(79752)),a=p(t(98309)),u=p(t(44896)),s=p(t(40600)),c=p(t(16599)),h=t(75573),f=p(t(37786)),i=p(t(57819)),d=p(t(4206)),l=p(t(12972)),g=p(t(81666)),v=t(63618);function p(b){return b&&b.__esModule?b:{default:b}}function m(b,y){var S=(0,f.default)(b,!1,y==="fixed");return S.top=S.top+b.clientTop,S.left=S.left+b.clientLeft,S.bottom=S.top+b.clientHeight,S.right=S.left+b.clientWidth,S.width=b.clientWidth,S.height=b.clientHeight,S.x=S.left,S.y=S.top,S}function C(b,y,S){return y===e.viewport?(0,g.default)((0,r.default)(b,S)):(0,h.isElement)(y)?m(y,S):(0,g.default)((0,o.default)((0,s.default)(b)))}function T(b){var y=(0,a.default)((0,i.default)(b)),S=["absolute","fixed"].indexOf((0,c.default)(b).position)>=0,I=S&&(0,h.isHTMLElement)(b)?(0,u.default)(b):b;return(0,h.isElement)(I)?y.filter(function(N){return(0,h.isElement)(N)&&(0,d.default)(N,I)&&(0,l.default)(N)!=="body"}):[]}function A(b,y,S,I){var N=y==="clippingParents"?T(b):[].concat(y),M=[].concat(N,[S]),w=M[0],L=M.reduce(function(B,V){var j=C(b,V,I);return B.top=(0,v.max)(j.top,B.top),B.right=(0,v.min)(j.right,B.right),B.bottom=(0,v.min)(j.bottom,B.bottom),B.left=(0,v.max)(j.left,B.left),B},C(b,w,I));return L.width=L.right-L.left,L.height=L.bottom-L.top,L.x=L.left,L.y=L.top,L}},74758:function(E,n,t){"use strict";n.__esModule=!0,n.default=d;var e=f(t(37786)),r=f(t(13390)),o=f(t(12972)),a=t(75573),u=f(t(79697)),s=f(t(40600)),c=f(t(10798)),h=t(63618);function f(l){return l&&l.__esModule?l:{default:l}}function i(l){var g=l.getBoundingClientRect(),v=(0,h.round)(g.width)/l.offsetWidth||1,p=(0,h.round)(g.height)/l.offsetHeight||1;return v!==1||p!==1}function d(l,g,v){v===void 0&&(v=!1);var p=(0,a.isHTMLElement)(g),m=(0,a.isHTMLElement)(g)&&i(g),C=(0,s.default)(g),T=(0,e.default)(l,m,v),A={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(p||!p&&!v)&&(((0,o.default)(g)!=="body"||(0,c.default)(C))&&(A=(0,r.default)(g)),(0,a.isHTMLElement)(g)?(b=(0,e.default)(g,!0),b.x+=g.clientLeft,b.y+=g.clientTop):C&&(b.x=(0,u.default)(C))),{x:T.left+A.scrollLeft-b.x,y:T.top+A.scrollTop-b.y,width:T.width,height:T.height}}},16599:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(95115));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return(0,e.default)(a).getComputedStyle(a)}},40600:function(E,n,t){"use strict";n.__esModule=!0,n.default=r;var e=t(75573);function r(o){return(((0,e.isElement)(o)?o.ownerDocument:o.document)||window.document).documentElement}},79752:function(E,n,t){"use strict";n.__esModule=!0,n.default=c;var e=s(t(40600)),r=s(t(16599)),o=s(t(79697)),a=s(t(43750)),u=t(63618);function s(h){return h&&h.__esModule?h:{default:h}}function c(h){var f,i=(0,e.default)(h),d=(0,a.default)(h),l=(f=h.ownerDocument)==null?void 0:f.body,g=(0,u.max)(i.scrollWidth,i.clientWidth,l?l.scrollWidth:0,l?l.clientWidth:0),v=(0,u.max)(i.scrollHeight,i.clientHeight,l?l.scrollHeight:0,l?l.clientHeight:0),p=-d.scrollLeft+(0,o.default)(h),m=-d.scrollTop;return(0,r.default)(l||i).direction==="rtl"&&(p+=(0,u.max)(i.clientWidth,l?l.clientWidth:0)-g),{width:g,height:v,x:p,y:m}}},3073:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},28811:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(37786));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){var u=(0,e.default)(a),s=a.offsetWidth,c=a.offsetHeight;return Math.abs(u.width-s)<=1&&(s=u.width),Math.abs(u.height-c)<=1&&(c=u.height),{x:a.offsetLeft,y:a.offsetTop,width:s,height:c}}},12972:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){return e?(e.nodeName||"").toLowerCase():null}},13390:function(E,n,t){"use strict";n.__esModule=!0,n.default=s;var e=u(t(43750)),r=u(t(95115)),o=t(75573),a=u(t(3073));function u(c){return c&&c.__esModule?c:{default:c}}function s(c){return c===(0,r.default)(c)||!(0,o.isHTMLElement)(c)?(0,e.default)(c):(0,a.default)(c)}},44896:function(E,n,t){"use strict";n.__esModule=!0,n.default=d;var e=h(t(95115)),r=h(t(12972)),o=h(t(16599)),a=t(75573),u=h(t(87031)),s=h(t(57819)),c=h(t(35366));function h(l){return l&&l.__esModule?l:{default:l}}function f(l){return!(0,a.isHTMLElement)(l)||(0,o.default)(l).position==="fixed"?null:l.offsetParent}function i(l){var g=/firefox/i.test((0,c.default)()),v=/Trident/i.test((0,c.default)());if(v&&(0,a.isHTMLElement)(l)){var p=(0,o.default)(l);if(p.position==="fixed")return null}var m=(0,s.default)(l);for((0,a.isShadowRoot)(m)&&(m=m.host);(0,a.isHTMLElement)(m)&&["html","body"].indexOf((0,r.default)(m))<0;){var C=(0,o.default)(m);if(C.transform!=="none"||C.perspective!=="none"||C.contain==="paint"||["transform","perspective"].indexOf(C.willChange)!==-1||g&&C.willChange==="filter"||g&&C.filter&&C.filter!=="none")return m;m=m.parentNode}return null}function d(l){for(var g=(0,e.default)(l),v=f(l);v&&(0,u.default)(v)&&(0,o.default)(v).position==="static";)v=f(v);return v&&((0,r.default)(v)==="html"||(0,r.default)(v)==="body"&&(0,o.default)(v).position==="static")?g:v||i(l)||g}},57819:function(E,n,t){"use strict";n.__esModule=!0,n.default=u;var e=a(t(12972)),r=a(t(40600)),o=t(75573);function a(s){return s&&s.__esModule?s:{default:s}}function u(s){return(0,e.default)(s)==="html"?s:s.assignedSlot||s.parentNode||((0,o.isShadowRoot)(s)?s.host:null)||(0,r.default)(s)}},24426:function(E,n,t){"use strict";n.__esModule=!0,n.default=s;var e=u(t(57819)),r=u(t(10798)),o=u(t(12972)),a=t(75573);function u(c){return c&&c.__esModule?c:{default:c}}function s(c){return["html","body","#document"].indexOf((0,o.default)(c))>=0?c.ownerDocument.body:(0,a.isHTMLElement)(c)&&(0,r.default)(c)?c:s((0,e.default)(c))}},87991:function(E,n,t){"use strict";n.__esModule=!0,n.default=s;var e=u(t(95115)),r=u(t(40600)),o=u(t(79697)),a=u(t(89331));function u(c){return c&&c.__esModule?c:{default:c}}function s(c,h){var f=(0,e.default)(c),i=(0,r.default)(c),d=f.visualViewport,l=i.clientWidth,g=i.clientHeight,v=0,p=0;if(d){l=d.width,g=d.height;var m=(0,a.default)();(m||!m&&h==="fixed")&&(v=d.offsetLeft,p=d.offsetTop)}return{width:l,height:g,x:v+(0,o.default)(c),y:p}}},95115:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var r=e.ownerDocument;return r&&r.defaultView||window}return e}},43750:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(95115));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){var u=(0,e.default)(a),s=u.pageXOffset,c=u.pageYOffset;return{scrollLeft:s,scrollTop:c}}},79697:function(E,n,t){"use strict";n.__esModule=!0,n.default=u;var e=a(t(37786)),r=a(t(40600)),o=a(t(43750));function a(s){return s&&s.__esModule?s:{default:s}}function u(s){return(0,e.default)((0,r.default)(s)).left+(0,o.default)(s).scrollLeft}},75573:function(E,n,t){"use strict";n.__esModule=!0,n.isElement=o,n.isHTMLElement=a,n.isShadowRoot=u;var e=r(t(95115));function r(s){return s&&s.__esModule?s:{default:s}}function o(s){var c=(0,e.default)(s).Element;return s instanceof c||s instanceof Element}function a(s){var c=(0,e.default)(s).HTMLElement;return s instanceof c||s instanceof HTMLElement}function u(s){if(typeof ShadowRoot=="undefined")return!1;var c=(0,e.default)(s).ShadowRoot;return s instanceof c||s instanceof ShadowRoot}},89331:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(35366));function r(a){return a&&a.__esModule?a:{default:a}}function o(){return!/^((?!chrome|android).)*safari/i.test((0,e.default)())}},10798:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(16599));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){var u=(0,e.default)(a),s=u.overflow,c=u.overflowX,h=u.overflowY;return/auto|scroll|overlay|hidden/.test(s+h+c)}},87031:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(12972));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return["table","td","th"].indexOf((0,e.default)(a))>=0}},98309:function(E,n,t){"use strict";n.__esModule=!0,n.default=s;var e=u(t(24426)),r=u(t(57819)),o=u(t(95115)),a=u(t(10798));function u(c){return c&&c.__esModule?c:{default:c}}function s(c,h){var f;h===void 0&&(h=[]);var i=(0,e.default)(c),d=i===((f=c.ownerDocument)==null?void 0:f.body),l=(0,o.default)(i),g=d?[l].concat(l.visualViewport||[],(0,a.default)(i)?i:[]):i,v=h.concat(g);return d?v:v.concat(s((0,r.default)(g)))}},46206:function(E,n){"use strict";n.__esModule=!0,n.write=n.viewport=n.variationPlacements=n.top=n.start=n.right=n.reference=n.read=n.popper=n.placements=n.modifierPhases=n.main=n.left=n.end=n.clippingParents=n.bottom=n.beforeWrite=n.beforeRead=n.beforeMain=n.basePlacements=n.auto=n.afterWrite=n.afterRead=n.afterMain=void 0;var t=n.top="top",e=n.bottom="bottom",r=n.right="right",o=n.left="left",a=n.auto="auto",u=n.basePlacements=[t,e,r,o],s=n.start="start",c=n.end="end",h=n.clippingParents="clippingParents",f=n.viewport="viewport",i=n.popper="popper",d=n.reference="reference",l=n.variationPlacements=u.reduce(function(N,M){return N.concat([M+"-"+s,M+"-"+c])},[]),g=n.placements=[].concat(u,[a]).reduce(function(N,M){return N.concat([M,M+"-"+s,M+"-"+c])},[]),v=n.beforeRead="beforeRead",p=n.read="read",m=n.afterRead="afterRead",C=n.beforeMain="beforeMain",T=n.main="main",A=n.afterMain="afterMain",b=n.beforeWrite="beforeWrite",y=n.write="write",S=n.afterWrite="afterWrite",I=n.modifierPhases=[v,p,m,C,T,A,b,y,S]},95996:function(E,n,t){"use strict";n.__esModule=!0;var e={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};n.popperGenerator=n.detectOverflow=n.createPopperLite=n.createPopperBase=n.createPopper=void 0;var r=t(46206);Object.keys(r).forEach(function(c){c==="default"||c==="__esModule"||Object.prototype.hasOwnProperty.call(e,c)||c in n&&n[c]===r[c]||(n[c]=r[c])});var o=t(39805);Object.keys(o).forEach(function(c){c==="default"||c==="__esModule"||Object.prototype.hasOwnProperty.call(e,c)||c in n&&n[c]===o[c]||(n[c]=o[c])});var a=t(96376);n.popperGenerator=a.popperGenerator,n.detectOverflow=a.detectOverflow,n.createPopperBase=a.createPopper;var u=t(83312);n.createPopper=u.createPopper;var s=t(2473);n.createPopperLite=s.createPopper},19975:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=o(t(12972)),r=t(75573);function o(c){return c&&c.__esModule?c:{default:c}}function a(c){var h=c.state;Object.keys(h.elements).forEach(function(f){var i=h.styles[f]||{},d=h.attributes[f]||{},l=h.elements[f];!(0,r.isHTMLElement)(l)||!(0,e.default)(l)||(Object.assign(l.style,i),Object.keys(d).forEach(function(g){var v=d[g];v===!1?l.removeAttribute(g):l.setAttribute(g,v===!0?"":v)}))})}function u(c){var h=c.state,f={popper:{position:h.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(h.elements.popper.style,f.popper),h.styles=f,h.elements.arrow&&Object.assign(h.elements.arrow.style,f.arrow),function(){Object.keys(h.elements).forEach(function(i){var d=h.elements[i],l=h.attributes[i]||{},g=Object.keys(h.styles.hasOwnProperty(i)?h.styles[i]:f[i]),v=g.reduce(function(p,m){return p[m]="",p},{});!(0,r.isHTMLElement)(d)||!(0,e.default)(d)||(Object.assign(d.style,v),Object.keys(l).forEach(function(p){d.removeAttribute(p)}))})}}var s=n.default={name:"applyStyles",enabled:!0,phase:"write",fn:a,effect:u,requires:["computeStyles"]}},52744:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=i(t(83104)),r=i(t(28811)),o=i(t(4206)),a=i(t(44896)),u=i(t(41199)),s=t(28595),c=i(t(43286)),h=i(t(81447)),f=t(46206);function i(p){return p&&p.__esModule?p:{default:p}}var d=function(){function p(m,C){return m=typeof m=="function"?m(Object.assign({},C.rects,{placement:C.placement})):m,(0,c.default)(typeof m!="number"?m:(0,h.default)(m,f.basePlacements))}return p}();function l(p){var m,C=p.state,T=p.name,A=p.options,b=C.elements.arrow,y=C.modifiersData.popperOffsets,S=(0,e.default)(C.placement),I=(0,u.default)(S),N=[f.left,f.right].indexOf(S)>=0,M=N?"height":"width";if(!(!b||!y)){var w=d(A.padding,C),L=(0,r.default)(b),B=I==="y"?f.top:f.left,V=I==="y"?f.bottom:f.right,j=C.rects.reference[M]+C.rects.reference[I]-y[I]-C.rects.popper[M],x=y[I]-C.rects.reference[I],K=(0,a.default)(b),D=K?I==="y"?K.clientHeight||0:K.clientWidth||0:0,U=j/2-x/2,G=w[B],Y=D-L[M]-w[V],$=D/2-L[M]/2+U,W=(0,s.within)(G,$,Y),tt=I;C.modifiersData[T]=(m={},m[tt]=W,m.centerOffset=W-$,m)}}function g(p){var m=p.state,C=p.options,T=C.element,A=T===void 0?"[data-popper-arrow]":T;A!=null&&(typeof A=="string"&&(A=m.elements.popper.querySelector(A),!A)||(0,o.default)(m.elements.popper,A)&&(m.elements.arrow=A))}var v=n.default={name:"arrow",enabled:!0,phase:"main",fn:l,effect:g,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]}},59894:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0,n.mapToStyles=l;var e=t(46206),r=f(t(44896)),o=f(t(95115)),a=f(t(40600)),u=f(t(16599)),s=f(t(83104)),c=f(t(45)),h=t(63618);function f(p){return p&&p.__esModule?p:{default:p}}var i={top:"auto",right:"auto",bottom:"auto",left:"auto"};function d(p,m){var C=p.x,T=p.y,A=m.devicePixelRatio||1;return{x:(0,h.round)(C*A)/A||0,y:(0,h.round)(T*A)/A||0}}function l(p){var m,C=p.popper,T=p.popperRect,A=p.placement,b=p.variation,y=p.offsets,S=p.position,I=p.gpuAcceleration,N=p.adaptive,M=p.roundOffsets,w=p.isFixed,L=y.x,B=L===void 0?0:L,V=y.y,j=V===void 0?0:V,x=typeof M=="function"?M({x:B,y:j}):{x:B,y:j};B=x.x,j=x.y;var K=y.hasOwnProperty("x"),D=y.hasOwnProperty("y"),U=e.left,G=e.top,Y=window;if(N){var $=(0,r.default)(C),W="clientHeight",tt="clientWidth";if($===(0,o.default)(C)&&($=(0,a.default)(C),(0,u.default)($).position!=="static"&&S==="absolute"&&(W="scrollHeight",tt="scrollWidth")),$=$,A===e.top||(A===e.left||A===e.right)&&b===e.end){G=e.bottom;var it=w&&$===Y&&Y.visualViewport?Y.visualViewport.height:$[W];j-=it-T.height,j*=I?1:-1}if(A===e.left||(A===e.top||A===e.bottom)&&b===e.end){U=e.right;var ht=w&&$===Y&&Y.visualViewport?Y.visualViewport.width:$[tt];B-=ht-T.width,B*=I?1:-1}}var k=Object.assign({position:S},N&&i),J=M===!0?d({x:B,y:j},(0,o.default)(C)):{x:B,y:j};if(B=J.x,j=J.y,I){var nt;return Object.assign({},k,(nt={},nt[G]=D?"0":"",nt[U]=K?"0":"",nt.transform=(Y.devicePixelRatio||1)<=1?"translate("+B+"px, "+j+"px)":"translate3d("+B+"px, "+j+"px, 0)",nt))}return Object.assign({},k,(m={},m[G]=D?j+"px":"",m[U]=K?B+"px":"",m.transform="",m))}function g(p){var m=p.state,C=p.options,T=C.gpuAcceleration,A=T===void 0?!0:T,b=C.adaptive,y=b===void 0?!0:b,S=C.roundOffsets,I=S===void 0?!0:S,N={placement:(0,s.default)(m.placement),variation:(0,c.default)(m.placement),popper:m.elements.popper,popperRect:m.rects.popper,gpuAcceleration:A,isFixed:m.options.strategy==="fixed"};m.modifiersData.popperOffsets!=null&&(m.styles.popper=Object.assign({},m.styles.popper,l(Object.assign({},N,{offsets:m.modifiersData.popperOffsets,position:m.options.strategy,adaptive:y,roundOffsets:I})))),m.modifiersData.arrow!=null&&(m.styles.arrow=Object.assign({},m.styles.arrow,l(Object.assign({},N,{offsets:m.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:I})))),m.attributes.popper=Object.assign({},m.attributes.popper,{"data-popper-placement":m.placement})}var v=n.default={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:g,data:{}}},36692:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=r(t(95115));function r(s){return s&&s.__esModule?s:{default:s}}var o={passive:!0};function a(s){var c=s.state,h=s.instance,f=s.options,i=f.scroll,d=i===void 0?!0:i,l=f.resize,g=l===void 0?!0:l,v=(0,e.default)(c.elements.popper),p=[].concat(c.scrollParents.reference,c.scrollParents.popper);return d&&p.forEach(function(m){m.addEventListener("scroll",h.update,o)}),g&&v.addEventListener("resize",h.update,o),function(){d&&p.forEach(function(m){m.removeEventListener("scroll",h.update,o)}),g&&v.removeEventListener("resize",h.update,o)}}var u=n.default={name:"eventListeners",enabled:!0,phase:"write",fn:function(){function s(){}return s}(),effect:a,data:{}}},23798:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=h(t(71376)),r=h(t(83104)),o=h(t(86459)),a=h(t(17633)),u=h(t(9041)),s=t(46206),c=h(t(45));function h(l){return l&&l.__esModule?l:{default:l}}function f(l){if((0,r.default)(l)===s.auto)return[];var g=(0,e.default)(l);return[(0,o.default)(l),g,(0,o.default)(g)]}function i(l){var g=l.state,v=l.options,p=l.name;if(!g.modifiersData[p]._skip){for(var m=v.mainAxis,C=m===void 0?!0:m,T=v.altAxis,A=T===void 0?!0:T,b=v.fallbackPlacements,y=v.padding,S=v.boundary,I=v.rootBoundary,N=v.altBoundary,M=v.flipVariations,w=M===void 0?!0:M,L=v.allowedAutoPlacements,B=g.options.placement,V=(0,r.default)(B),j=V===B,x=b||(j||!w?[(0,e.default)(B)]:f(B)),K=[B].concat(x).reduce(function(yt,_){return yt.concat((0,r.default)(_)===s.auto?(0,u.default)(g,{placement:_,boundary:S,rootBoundary:I,padding:y,flipVariations:w,allowedAutoPlacements:L}):_)},[]),D=g.rects.reference,U=g.rects.popper,G=new Map,Y=!0,$=K[0],W=0;W=0,J=k?"width":"height",nt=(0,a.default)(g,{placement:tt,boundary:S,rootBoundary:I,altBoundary:N,padding:y}),st=k?ht?s.right:s.left:ht?s.bottom:s.top;D[J]>U[J]&&(st=(0,e.default)(st));var ot=(0,e.default)(st),pt=[];if(C&&pt.push(nt[it]<=0),A&&pt.push(nt[st]<=0,nt[ot]<=0),pt.every(function(yt){return yt})){$=tt,Y=!1;break}G.set(tt,pt)}if(Y)for(var Nt=w?3:1,rt=function(){function yt(_){var X=K.find(function(ct){var Tt=G.get(ct);if(Tt)return Tt.slice(0,_).every(function(St){return St})});if(X)return $=X,"break"}return yt}(),et=Nt;et>0;et--){var dt=rt(et);if(dt==="break")break}g.placement!==$&&(g.modifiersData[p]._skip=!0,g.placement=$,g.reset=!0)}}var d=n.default={name:"flip",enabled:!0,phase:"main",fn:i,requiresIfExists:["offset"],data:{_skip:!1}}},83761:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=t(46206),r=o(t(17633));function o(h){return h&&h.__esModule?h:{default:h}}function a(h,f,i){return i===void 0&&(i={x:0,y:0}),{top:h.top-f.height-i.y,right:h.right-f.width+i.x,bottom:h.bottom-f.height+i.y,left:h.left-f.width-i.x}}function u(h){return[e.top,e.right,e.bottom,e.left].some(function(f){return h[f]>=0})}function s(h){var f=h.state,i=h.name,d=f.rects.reference,l=f.rects.popper,g=f.modifiersData.preventOverflow,v=(0,r.default)(f,{elementContext:"reference"}),p=(0,r.default)(f,{altBoundary:!0}),m=a(v,d),C=a(p,l,g),T=u(m),A=u(C);f.modifiersData[i]={referenceClippingOffsets:m,popperEscapeOffsets:C,isReferenceHidden:T,hasPopperEscaped:A},f.attributes.popper=Object.assign({},f.attributes.popper,{"data-popper-reference-hidden":T,"data-popper-escaped":A})}var c=n.default={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:s}},39805:function(E,n,t){"use strict";n.__esModule=!0,n.preventOverflow=n.popperOffsets=n.offset=n.hide=n.flip=n.eventListeners=n.computeStyles=n.arrow=n.applyStyles=void 0;var e=i(t(19975));n.applyStyles=e.default;var r=i(t(52744));n.arrow=r.default;var o=i(t(59894));n.computeStyles=o.default;var a=i(t(36692));n.eventListeners=a.default;var u=i(t(23798));n.flip=u.default;var s=i(t(83761));n.hide=s.default;var c=i(t(61410));n.offset=c.default;var h=i(t(40107));n.popperOffsets=h.default;var f=i(t(75137));n.preventOverflow=f.default;function i(d){return d&&d.__esModule?d:{default:d}}},61410:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0,n.distanceAndSkiddingToXY=a;var e=o(t(83104)),r=t(46206);function o(c){return c&&c.__esModule?c:{default:c}}function a(c,h,f){var i=(0,e.default)(c),d=[r.left,r.top].indexOf(i)>=0?-1:1,l=typeof f=="function"?f(Object.assign({},h,{placement:c})):f,g=l[0],v=l[1];return g=g||0,v=(v||0)*d,[r.left,r.right].indexOf(i)>=0?{x:v,y:g}:{x:g,y:v}}function u(c){var h=c.state,f=c.options,i=c.name,d=f.offset,l=d===void 0?[0,0]:d,g=r.placements.reduce(function(C,T){return C[T]=a(T,h.rects,l),C},{}),v=g[h.placement],p=v.x,m=v.y;h.modifiersData.popperOffsets!=null&&(h.modifiersData.popperOffsets.x+=p,h.modifiersData.popperOffsets.y+=m),h.modifiersData[i]=g}var s=n.default={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:u}},40107:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=r(t(89951));function r(u){return u&&u.__esModule?u:{default:u}}function o(u){var s=u.state,c=u.name;s.modifiersData[c]=(0,e.default)({reference:s.rects.reference,element:s.rects.popper,strategy:"absolute",placement:s.placement})}var a=n.default={name:"popperOffsets",enabled:!0,phase:"read",fn:o,data:{}}},75137:function(E,n,t){"use strict";n.__esModule=!0,n.default=void 0;var e=t(46206),r=l(t(83104)),o=l(t(41199)),a=l(t(28066)),u=t(28595),s=l(t(28811)),c=l(t(44896)),h=l(t(17633)),f=l(t(45)),i=l(t(34780)),d=t(63618);function l(p){return p&&p.__esModule?p:{default:p}}function g(p){var m=p.state,C=p.options,T=p.name,A=C.mainAxis,b=A===void 0?!0:A,y=C.altAxis,S=y===void 0?!1:y,I=C.boundary,N=C.rootBoundary,M=C.altBoundary,w=C.padding,L=C.tether,B=L===void 0?!0:L,V=C.tetherOffset,j=V===void 0?0:V,x=(0,h.default)(m,{boundary:I,rootBoundary:N,padding:w,altBoundary:M}),K=(0,r.default)(m.placement),D=(0,f.default)(m.placement),U=!D,G=(0,o.default)(K),Y=(0,a.default)(G),$=m.modifiersData.popperOffsets,W=m.rects.reference,tt=m.rects.popper,it=typeof j=="function"?j(Object.assign({},m.rects,{placement:m.placement})):j,ht=typeof it=="number"?{mainAxis:it,altAxis:it}:Object.assign({mainAxis:0,altAxis:0},it),k=m.modifiersData.offset?m.modifiersData.offset[m.placement]:null,J={x:0,y:0};if($){if(b){var nt,st=G==="y"?e.top:e.left,ot=G==="y"?e.bottom:e.right,pt=G==="y"?"height":"width",Nt=$[G],rt=Nt+x[st],et=Nt-x[ot],dt=B?-tt[pt]/2:0,yt=D===e.start?W[pt]:tt[pt],_=D===e.start?-tt[pt]:-W[pt],X=m.elements.arrow,ct=B&&X?(0,s.default)(X):{width:0,height:0},Tt=m.modifiersData["arrow#persistent"]?m.modifiersData["arrow#persistent"].padding:(0,i.default)(),St=Tt[st],ut=Tt[ot],gt=(0,u.within)(0,W[pt],ct[pt]),Ot=U?W[pt]/2-dt-gt-St-ht.mainAxis:yt-gt-St-ht.mainAxis,q=U?-W[pt]/2+dt+gt+ut+ht.mainAxis:_+gt+ut+ht.mainAxis,ft=m.elements.arrow&&(0,c.default)(m.elements.arrow),mt=ft?G==="y"?ft.clientTop||0:ft.clientLeft||0:0,At=(nt=k==null?void 0:k[G])!=null?nt:0,Dt=Nt+Ot-At-mt,jt=Nt+q-At,bt=(0,u.within)(B?(0,d.min)(rt,Dt):rt,Nt,B?(0,d.max)(et,jt):et);$[G]=bt,J[G]=bt-Nt}if(S){var lt,vt=G==="x"?e.top:e.left,It=G==="x"?e.bottom:e.right,Et=$[Y],Pt=Y==="y"?"height":"width",Ft=Et+x[vt],Vt=Et-x[It],Gt=[e.top,e.left].indexOf(K)!==-1,Ht=(lt=k==null?void 0:k[Y])!=null?lt:0,Kt=Gt?Ft:Et-W[Pt]-tt[Pt]-Ht+ht.altAxis,Wt=Gt?Et+W[Pt]+tt[Pt]-Ht-ht.altAxis:Vt,Zt=B&&Gt?(0,u.withinMaxClamp)(Kt,Et,Wt):(0,u.within)(B?Kt:Ft,Et,B?Wt:Vt);$[Y]=Zt,J[Y]=Zt-Et}m.modifiersData[T]=J}}var v=n.default={name:"preventOverflow",enabled:!0,phase:"main",fn:g,requiresIfExists:["offset"]}},2473:function(E,n,t){"use strict";n.__esModule=!0,n.defaultModifiers=n.createPopper=void 0;var e=t(96376);n.popperGenerator=e.popperGenerator,n.detectOverflow=e.detectOverflow;var r=s(t(36692)),o=s(t(40107)),a=s(t(59894)),u=s(t(19975));function s(f){return f&&f.__esModule?f:{default:f}}var c=n.defaultModifiers=[r.default,o.default,a.default,u.default],h=n.createPopper=(0,e.popperGenerator)({defaultModifiers:c})},83312:function(E,n,t){"use strict";n.__esModule=!0;var e={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};n.defaultModifiers=n.createPopperLite=n.createPopper=void 0;var r=t(96376);n.popperGenerator=r.popperGenerator,n.detectOverflow=r.detectOverflow;var o=v(t(36692)),a=v(t(40107)),u=v(t(59894)),s=v(t(19975)),c=v(t(61410)),h=v(t(23798)),f=v(t(75137)),i=v(t(52744)),d=v(t(83761)),l=t(2473);n.createPopperLite=l.createPopper;var g=t(39805);Object.keys(g).forEach(function(C){C==="default"||C==="__esModule"||Object.prototype.hasOwnProperty.call(e,C)||C in n&&n[C]===g[C]||(n[C]=g[C])});function v(C){return C&&C.__esModule?C:{default:C}}var p=n.defaultModifiers=[o.default,a.default,u.default,s.default,c.default,h.default,f.default,i.default,d.default],m=n.createPopperLite=n.createPopper=(0,r.popperGenerator)({defaultModifiers:p})},9041:function(E,n,t){"use strict";n.__esModule=!0,n.default=s;var e=u(t(45)),r=t(46206),o=u(t(17633)),a=u(t(83104));function u(c){return c&&c.__esModule?c:{default:c}}function s(c,h){h===void 0&&(h={});var f=h,i=f.placement,d=f.boundary,l=f.rootBoundary,g=f.padding,v=f.flipVariations,p=f.allowedAutoPlacements,m=p===void 0?r.placements:p,C=(0,e.default)(i),T=C?v?r.variationPlacements:r.variationPlacements.filter(function(y){return(0,e.default)(y)===C}):r.basePlacements,A=T.filter(function(y){return m.indexOf(y)>=0});A.length===0&&(A=T);var b=A.reduce(function(y,S){return y[S]=(0,o.default)(c,{placement:S,boundary:d,rootBoundary:l,padding:g})[(0,a.default)(S)],y},{});return Object.keys(b).sort(function(y,S){return b[y]-b[S]})}},89951:function(E,n,t){"use strict";n.__esModule=!0,n.default=s;var e=u(t(83104)),r=u(t(45)),o=u(t(41199)),a=t(46206);function u(c){return c&&c.__esModule?c:{default:c}}function s(c){var h=c.reference,f=c.element,i=c.placement,d=i?(0,e.default)(i):null,l=i?(0,r.default)(i):null,g=h.x+h.width/2-f.width/2,v=h.y+h.height/2-f.height/2,p;switch(d){case a.top:p={x:g,y:h.y-f.height};break;case a.bottom:p={x:g,y:h.y+h.height};break;case a.right:p={x:h.x+h.width,y:v};break;case a.left:p={x:h.x-f.width,y:v};break;default:p={x:h.x,y:h.y}}var m=d?(0,o.default)(d):null;if(m!=null){var C=m==="y"?"height":"width";switch(l){case a.start:p[m]=p[m]-(h[C]/2-f[C]/2);break;case a.end:p[m]=p[m]+(h[C]/2-f[C]/2);break;default:}}return p}},10579:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){var r;return function(){return r||(r=new Promise(function(o){Promise.resolve().then(function(){r=void 0,o(e())})})),r}}},17633:function(E,n,t){"use strict";n.__esModule=!0,n.default=d;var e=i(t(49035)),r=i(t(40600)),o=i(t(37786)),a=i(t(89951)),u=i(t(81666)),s=t(46206),c=t(75573),h=i(t(43286)),f=i(t(81447));function i(l){return l&&l.__esModule?l:{default:l}}function d(l,g){g===void 0&&(g={});var v=g,p=v.placement,m=p===void 0?l.placement:p,C=v.strategy,T=C===void 0?l.strategy:C,A=v.boundary,b=A===void 0?s.clippingParents:A,y=v.rootBoundary,S=y===void 0?s.viewport:y,I=v.elementContext,N=I===void 0?s.popper:I,M=v.altBoundary,w=M===void 0?!1:M,L=v.padding,B=L===void 0?0:L,V=(0,h.default)(typeof B!="number"?B:(0,f.default)(B,s.basePlacements)),j=N===s.popper?s.reference:s.popper,x=l.rects.popper,K=l.elements[w?j:N],D=(0,e.default)((0,c.isElement)(K)?K:K.contextElement||(0,r.default)(l.elements.popper),b,S,T),U=(0,o.default)(l.elements.reference),G=(0,a.default)({reference:U,element:x,strategy:"absolute",placement:m}),Y=(0,u.default)(Object.assign({},x,G)),$=N===s.popper?Y:U,W={top:D.top-$.top+V.top,bottom:$.bottom-D.bottom+V.bottom,left:D.left-$.left+V.left,right:$.right-D.right+V.right},tt=l.modifiersData.offset;if(N===s.popper&&tt){var it=tt[m];Object.keys(W).forEach(function(ht){var k=[s.right,s.bottom].indexOf(ht)>=0?1:-1,J=[s.top,s.bottom].indexOf(ht)>=0?"y":"x";W[ht]+=it[J]*k})}return W}},81447:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e,r){return r.reduce(function(o,a){return o[a]=e,o},{})}},28066:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){return e==="x"?"y":"x"}},83104:function(E,n,t){"use strict";n.__esModule=!0,n.default=r;var e=t(46206);function r(o){return o.split("-")[0]}},34780:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(){return{top:0,right:0,bottom:0,left:0}}},41199:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}},71376:function(E,n){"use strict";n.__esModule=!0,n.default=e;var t={left:"right",right:"left",bottom:"top",top:"bottom"};function e(r){return r.replace(/left|right|bottom|top/g,function(o){return t[o]})}},86459:function(E,n){"use strict";n.__esModule=!0,n.default=e;var t={start:"end",end:"start"};function e(r){return r.replace(/start|end/g,function(o){return t[o]})}},45:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){return e.split("-")[1]}},63618:function(E,n){"use strict";n.__esModule=!0,n.round=n.min=n.max=void 0;var t=n.max=Math.max,e=n.min=Math.min,r=n.round=Math.round},56500:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){var r=e.reduce(function(o,a){var u=o[a.name];return o[a.name]=u?Object.assign({},u,a,{options:Object.assign({},u.options,a.options),data:Object.assign({},u.data,a.data)}):a,o},{});return Object.keys(r).map(function(o){return r[o]})}},43286:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=r(t(34780));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return Object.assign({},(0,e.default)(),a)}},33118:function(E,n,t){"use strict";n.__esModule=!0,n.default=o;var e=t(46206);function r(a){var u=new Map,s=new Set,c=[];a.forEach(function(f){u.set(f.name,f)});function h(f){s.add(f.name);var i=[].concat(f.requires||[],f.requiresIfExists||[]);i.forEach(function(d){if(!s.has(d)){var l=u.get(d);l&&h(l)}}),c.push(f)}return a.forEach(function(f){s.has(f.name)||h(f)}),c}function o(a){var u=r(a);return e.modifierPhases.reduce(function(s,c){return s.concat(u.filter(function(h){return h.phase===c}))},[])}},81666:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},35366:function(E,n){"use strict";n.__esModule=!0,n.default=t;function t(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(r){return r.brand+"/"+r.version}).join(" "):navigator.userAgent}},28595:function(E,n,t){"use strict";n.__esModule=!0,n.within=r,n.withinMaxClamp=o;var e=t(63618);function r(a,u,s){return(0,e.max)(a,(0,e.min)(u,s))}function o(a,u,s){var c=r(a,u,s);return c>s?s:c}},22734:function(E){"use strict";/*! @license DOMPurify 2.5.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.0/LICENSE */(function(n,t){E.exports=t()})(void 0,function(){"use strict";function n(q){"@babel/helpers - typeof";return n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ft){return typeof ft}:function(ft){return ft&&typeof Symbol=="function"&&ft.constructor===Symbol&&ft!==Symbol.prototype?"symbol":typeof ft},n(q)}function t(q,ft){return t=Object.setPrototypeOf||function(){function mt(At,Dt){return At.__proto__=Dt,At}return mt}(),t(q,ft)}function e(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(q){return!1}}function r(q,ft,mt){return e()?r=Reflect.construct:r=function(){function At(Dt,jt,bt){var lt=[null];lt.push.apply(lt,jt);var vt=Function.bind.apply(Dt,lt),It=new vt;return bt&&t(It,bt.prototype),It}return At}(),r.apply(null,arguments)}function o(q){return a(q)||u(q)||s(q)||h()}function a(q){if(Array.isArray(q))return c(q)}function u(q){if(typeof Symbol!="undefined"&&q[Symbol.iterator]!=null||q["@@iterator"]!=null)return Array.from(q)}function s(q,ft){if(q){if(typeof q=="string")return c(q,ft);var mt=Object.prototype.toString.call(q).slice(8,-1);if(mt==="Object"&&q.constructor&&(mt=q.constructor.name),mt==="Map"||mt==="Set")return Array.from(q);if(mt==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(mt))return c(q,ft)}}function c(q,ft){(ft==null||ft>q.length)&&(ft=q.length);for(var mt=0,At=new Array(ft);mt1?mt-1:0),Dt=1;Dt/gm),rt=p(/\${[\w\W]*}/gm),et=p(/^data-[\-\w.\u00B7-\uFFFF]/),dt=p(/^aria-[\-\w]+$/),yt=p(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),_=p(/^(?:\w+script|data):/i),X=p(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ct=p(/^html$/i),Tt=p(/^[a-z][.\w]*(-[.\w]+)+$/i),St=function(){function q(){return typeof window=="undefined"?null:window}return q}(),ut=function(){function q(ft,mt){if(n(ft)!=="object"||typeof ft.createPolicy!="function")return null;var At=null,Dt="data-tt-policy-suffix";mt.currentScript&&mt.currentScript.hasAttribute(Dt)&&(At=mt.currentScript.getAttribute(Dt));var jt="dompurify"+(At?"#"+At:"");try{return ft.createPolicy(jt,{createHTML:function(){function bt(lt){return lt}return bt}(),createScriptURL:function(){function bt(lt){return lt}return bt}()})}catch(bt){return null}}return q}();function gt(){var q=arguments.length>0&&arguments[0]!==void 0?arguments[0]:St(),ft=function(){function O(P){return gt(P)}return O}();if(ft.version="2.5.0",ft.removed=[],!q||!q.document||q.document.nodeType!==9)return ft.isSupported=!1,ft;var mt=q.document,At=q.document,Dt=q.DocumentFragment,jt=q.HTMLTemplateElement,bt=q.Node,lt=q.Element,vt=q.NodeFilter,It=q.NamedNodeMap,Et=It===void 0?q.NamedNodeMap||q.MozNamedAttrMap:It,Pt=q.HTMLFormElement,Ft=q.DOMParser,Vt=q.trustedTypes,Gt=lt.prototype,Ht=G(Gt,"cloneNode"),Kt=G(Gt,"nextSibling"),Wt=G(Gt,"childNodes"),Zt=G(Gt,"parentNode");if(typeof jt=="function"){var Le=At.createElement("template");Le.content&&Le.content.ownerDocument&&(At=Le.content.ownerDocument)}var _t=ut(Vt,mt),Pe=_t?_t.createHTML(""):"",Ne=At,me=Ne.implementation,ye=Ne.createNodeIterator,an=Ne.createDocumentFragment,un=Ne.getElementsByTagName,Tn=mt.importNode,Ye={};try{Ye=U(At).documentMode?At.documentMode:{}}catch(O){}var re={};ft.isSupported=typeof Zt=="function"&&me&&me.createHTMLDocument!==void 0&&Ye!==9;var $e=pt,We=Nt,Be=rt,sn=et,In=dt,cn=_,ln=X,An=Tt,Se=yt,zt=null,te=D({},[].concat(o(Y),o($),o(W),o(it),o(k))),Yt=null,Ee=D({},[].concat(o(J),o(nt),o(st),o(ot))),kt=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),le=null,Ce=null,He=!0,ze=!0,fn=!1,dn=!0,be=!1,De=!0,fe=!1,Fe=!1,xe=!1,de=!1,Xt=!1,Ve=!1,vn=!0,ke=!1,hn="user-content-",ue=!0,Me=!1,Te={},Ie=null,Xe=D({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Je=null,gn=D({},["audio","video","img","source","image","track"]),je=null,pn=D({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ee="http://www.w3.org/1998/Math/MathML",Ue="http://www.w3.org/2000/svg",se="http://www.w3.org/1999/xhtml",Ae=se,Qe=!1,Ze=null,On=D({},[ee,Ue,se],N),ce,Pn=["application/xhtml+xml","text/html"],mn="text/html",Jt,Oe=null,Nn=At.createElement("form"),yn=function(){function O(P){return P instanceof RegExp||P instanceof Function}return O}(),qe=function(){function O(P){Oe&&Oe===P||((!P||n(P)!=="object")&&(P={}),P=U(P),ce=Pn.indexOf(P.PARSER_MEDIA_TYPE)===-1?ce=mn:ce=P.PARSER_MEDIA_TYPE,Jt=ce==="application/xhtml+xml"?N:I,zt="ALLOWED_TAGS"in P?D({},P.ALLOWED_TAGS,Jt):te,Yt="ALLOWED_ATTR"in P?D({},P.ALLOWED_ATTR,Jt):Ee,Ze="ALLOWED_NAMESPACES"in P?D({},P.ALLOWED_NAMESPACES,N):On,je="ADD_URI_SAFE_ATTR"in P?D(U(pn),P.ADD_URI_SAFE_ATTR,Jt):pn,Je="ADD_DATA_URI_TAGS"in P?D(U(gn),P.ADD_DATA_URI_TAGS,Jt):gn,Ie="FORBID_CONTENTS"in P?D({},P.FORBID_CONTENTS,Jt):Xe,le="FORBID_TAGS"in P?D({},P.FORBID_TAGS,Jt):{},Ce="FORBID_ATTR"in P?D({},P.FORBID_ATTR,Jt):{},Te="USE_PROFILES"in P?P.USE_PROFILES:!1,He=P.ALLOW_ARIA_ATTR!==!1,ze=P.ALLOW_DATA_ATTR!==!1,fn=P.ALLOW_UNKNOWN_PROTOCOLS||!1,dn=P.ALLOW_SELF_CLOSE_IN_ATTR!==!1,be=P.SAFE_FOR_TEMPLATES||!1,De=P.SAFE_FOR_XML!==!1,fe=P.WHOLE_DOCUMENT||!1,de=P.RETURN_DOM||!1,Xt=P.RETURN_DOM_FRAGMENT||!1,Ve=P.RETURN_TRUSTED_TYPE||!1,xe=P.FORCE_BODY||!1,vn=P.SANITIZE_DOM!==!1,ke=P.SANITIZE_NAMED_PROPS||!1,ue=P.KEEP_CONTENT!==!1,Me=P.IN_PLACE||!1,Se=P.ALLOWED_URI_REGEXP||Se,Ae=P.NAMESPACE||se,kt=P.CUSTOM_ELEMENT_HANDLING||{},P.CUSTOM_ELEMENT_HANDLING&&yn(P.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(kt.tagNameCheck=P.CUSTOM_ELEMENT_HANDLING.tagNameCheck),P.CUSTOM_ELEMENT_HANDLING&&yn(P.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(kt.attributeNameCheck=P.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),P.CUSTOM_ELEMENT_HANDLING&&typeof P.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(kt.allowCustomizedBuiltInElements=P.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),be&&(ze=!1),Xt&&(de=!0),Te&&(zt=D({},o(k)),Yt=[],Te.html===!0&&(D(zt,Y),D(Yt,J)),Te.svg===!0&&(D(zt,$),D(Yt,nt),D(Yt,ot)),Te.svgFilters===!0&&(D(zt,W),D(Yt,nt),D(Yt,ot)),Te.mathMl===!0&&(D(zt,it),D(Yt,st),D(Yt,ot))),P.ADD_TAGS&&(zt===te&&(zt=U(zt)),D(zt,P.ADD_TAGS,Jt)),P.ADD_ATTR&&(Yt===Ee&&(Yt=U(Yt)),D(Yt,P.ADD_ATTR,Jt)),P.ADD_URI_SAFE_ATTR&&D(je,P.ADD_URI_SAFE_ATTR,Jt),P.FORBID_CONTENTS&&(Ie===Xe&&(Ie=U(Ie)),D(Ie,P.FORBID_CONTENTS,Jt)),ue&&(zt["#text"]=!0),fe&&D(zt,["html","head","body"]),zt.table&&(D(zt,["tbody"]),delete le.tbody),v&&v(P),Oe=P)}return O}(),Sn=D({},["mi","mo","mn","ms","mtext"]),oe=D({},["foreignobject","desc","title","annotation-xml"]),Ge=D({},["title","style","font","a","script"]),Re=D({},$);D(Re,W),D(Re,tt);var _e=D({},it);D(_e,ht);var Mn=function(){function O(P){var R=Zt(P);(!R||!R.tagName)&&(R={namespaceURI:Ae,tagName:"template"});var F=I(P.tagName),H=I(R.tagName);return Ze[P.namespaceURI]?P.namespaceURI===Ue?R.namespaceURI===se?F==="svg":R.namespaceURI===ee?F==="svg"&&(H==="annotation-xml"||Sn[H]):!!Re[F]:P.namespaceURI===ee?R.namespaceURI===se?F==="math":R.namespaceURI===Ue?F==="math"&&oe[H]:!!_e[F]:P.namespaceURI===se?R.namespaceURI===Ue&&!oe[H]||R.namespaceURI===ee&&!Sn[H]?!1:!_e[F]&&(Ge[F]||!Re[F]):!!(ce==="application/xhtml+xml"&&Ze[P.namespaceURI]):!1}return O}(),ne=function(){function O(P){S(ft.removed,{element:P});try{P.parentNode.removeChild(P)}catch(R){try{P.outerHTML=Pe}catch(F){P.remove()}}}return O}(),Ke=function(){function O(P,R){try{S(ft.removed,{attribute:R.getAttributeNode(P),from:R})}catch(F){S(ft.removed,{attribute:null,from:R})}if(R.removeAttribute(P),P==="is"&&!Yt[P])if(de||Xt)try{ne(R)}catch(F){}else try{R.setAttribute(P,"")}catch(F){}}return O}(),En=function(){function O(P){var R,F;if(xe)P=" "+P;else{var H=M(P,/^[\r\n\t ]+/);F=H&&H[0]}ce==="application/xhtml+xml"&&Ae===se&&(P=''+P+"");var Q=_t?_t.createHTML(P):P;if(Ae===se)try{R=new Ft().parseFromString(Q,ce)}catch(at){}if(!R||!R.documentElement){R=me.createDocument(Ae,"template",null);try{R.documentElement.innerHTML=Qe?Pe:Q}catch(at){}}var Z=R.body||R.documentElement;return P&&F&&Z.insertBefore(At.createTextNode(F),Z.childNodes[0]||null),Ae===se?un.call(R,fe?"html":"body")[0]:fe?R.documentElement:Z}return O}(),we=function(){function O(P){return ye.call(P.ownerDocument||P,P,vt.SHOW_ELEMENT|vt.SHOW_COMMENT|vt.SHOW_TEXT|vt.SHOW_PROCESSING_INSTRUCTION|vt.SHOW_CDATA_SECTION,null,!1)}return O}(),Rn=function(){function O(P){return P instanceof Pt&&(typeof P.nodeName!="string"||typeof P.textContent!="string"||typeof P.removeChild!="function"||!(P.attributes instanceof Et)||typeof P.removeAttribute!="function"||typeof P.setAttribute!="function"||typeof P.namespaceURI!="string"||typeof P.insertBefore!="function"||typeof P.hasChildNodes!="function")}return O}(),he=function(){function O(P){return n(bt)==="object"?P instanceof bt:P&&n(P)==="object"&&typeof P.nodeType=="number"&&typeof P.nodeName=="string"}return O}(),ae=function(){function O(P,R,F){re[P]&&b(re[P],function(H){H.call(ft,R,F,Oe)})}return O}(),Cn=function(){function O(P){var R;if(ae("beforeSanitizeElements",P,null),Rn(P)||V(/[\u0080-\uFFFF]/,P.nodeName))return ne(P),!0;var F=Jt(P.nodeName);if(ae("uponSanitizeElement",P,{tagName:F,allowedTags:zt}),P.hasChildNodes()&&!he(P.firstElementChild)&&(!he(P.content)||!he(P.content.firstElementChild))&&V(/<[/\w]/g,P.innerHTML)&&V(/<[/\w]/g,P.textContent)||F==="select"&&V(/=0;--at)H.insertBefore(Ht(Q[at],!0),Kt(P))}return ne(P),!0}return P instanceof lt&&!Mn(P)||(F==="noscript"||F==="noembed"||F==="noframes")&&V(/<\/no(script|embed|frames)/i,P.innerHTML)?(ne(P),!0):(be&&P.nodeType===3&&(R=P.textContent,R=w(R,$e," "),R=w(R,We," "),R=w(R,Be," "),P.textContent!==R&&(S(ft.removed,{element:P.cloneNode()}),P.textContent=R)),ae("afterSanitizeElements",P,null),!1)}return O}(),tn=function(){function O(P,R,F){if(vn&&(R==="id"||R==="name")&&(F in At||F in Nn))return!1;if(!(ze&&!Ce[R]&&V(sn,R))){if(!(He&&V(In,R))){if(!Yt[R]||Ce[R]){if(!(en(P)&&(kt.tagNameCheck instanceof RegExp&&V(kt.tagNameCheck,P)||kt.tagNameCheck instanceof Function&&kt.tagNameCheck(P))&&(kt.attributeNameCheck instanceof RegExp&&V(kt.attributeNameCheck,R)||kt.attributeNameCheck instanceof Function&&kt.attributeNameCheck(R))||R==="is"&&kt.allowCustomizedBuiltInElements&&(kt.tagNameCheck instanceof RegExp&&V(kt.tagNameCheck,F)||kt.tagNameCheck instanceof Function&&kt.tagNameCheck(F))))return!1}else if(!je[R]){if(!V(Se,w(F,ln,""))){if(!((R==="src"||R==="xlink:href"||R==="href")&&P!=="script"&&L(F,"data:")===0&&Je[P])){if(!(fn&&!V(cn,w(F,ln,"")))){if(F)return!1}}}}}}return!0}return O}(),en=function(){function O(P){return P!=="annotation-xml"&&M(P,An)}return O}(),bn=function(){function O(P){var R,F,H,Q;ae("beforeSanitizeAttributes",P,null);var Z=P.attributes;if(Z){var at={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Yt};for(Q=Z.length;Q--;){R=Z[Q];var Ct=R,Mt=Ct.name,Rt=Ct.namespaceURI;if(F=Mt==="value"?R.value:B(R.value),H=Jt(Mt),at.attrName=H,at.attrValue=F,at.keepAttr=!0,at.forceKeepAttr=void 0,ae("uponSanitizeAttribute",P,at),F=at.attrValue,!at.forceKeepAttr&&(Ke(Mt,P),!!at.keepAttr)){if(!dn&&V(/\/>/i,F)){Ke(Mt,P);continue}be&&(F=w(F,$e," "),F=w(F,We," "),F=w(F,Be," "));var Lt=Jt(P.nodeName);if(tn(Lt,H,F)){if(ke&&(H==="id"||H==="name")&&(Ke(Mt,P),F=hn+F),_t&&n(Vt)==="object"&&typeof Vt.getAttributeType=="function"&&!Rt)switch(Vt.getAttributeType(Lt,H)){case"TrustedHTML":{F=_t.createHTML(F);break}case"TrustedScriptURL":{F=_t.createScriptURL(F);break}}try{Rt?P.setAttributeNS(Rt,Mt,F):P.setAttribute(Mt,F),y(ft.removed)}catch(wt){}}}}ae("afterSanitizeAttributes",P,null)}}return O}(),Bn=function(){function O(P){var R,F=we(P);for(ae("beforeSanitizeShadowDOM",P,null);R=F.nextNode();)ae("uponSanitizeShadowNode",R,null),!Cn(R)&&(R.content instanceof Dt&&O(R.content),bn(R));ae("afterSanitizeShadowDOM",P,null)}return O}();return ft.sanitize=function(O){var P=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},R,F,H,Q,Z;if(Qe=!O,Qe&&(O=""),typeof O!="string"&&!he(O))if(typeof O.toString=="function"){if(O=O.toString(),typeof O!="string")throw j("dirty is not a string, aborting")}else throw j("toString is not a function");if(!ft.isSupported){if(n(q.toStaticHTML)==="object"||typeof q.toStaticHTML=="function"){if(typeof O=="string")return q.toStaticHTML(O);if(he(O))return q.toStaticHTML(O.outerHTML)}return O}if(Fe||qe(P),ft.removed=[],typeof O=="string"&&(Me=!1),Me){if(O.nodeName){var at=Jt(O.nodeName);if(!zt[at]||le[at])throw j("root node is forbidden and cannot be sanitized in-place")}}else if(O instanceof bt)R=En(""),F=R.ownerDocument.importNode(O,!0),F.nodeType===1&&F.nodeName==="BODY"||F.nodeName==="HTML"?R=F:R.appendChild(F);else{if(!de&&!be&&!fe&&O.indexOf("<")===-1)return _t&&Ve?_t.createHTML(O):O;if(R=En(O),!R)return de?null:Ve?Pe:""}R&&xe&&ne(R.firstChild);for(var Ct=we(Me?O:R);H=Ct.nextNode();)H.nodeType===3&&H===Q||Cn(H)||(H.content instanceof Dt&&Bn(H.content),bn(H),Q=H);if(Q=null,Me)return O;if(de){if(Xt)for(Z=an.call(R.ownerDocument);R.firstChild;)Z.appendChild(R.firstChild);else Z=R;return(Yt.shadowroot||Yt.shadowrootmod)&&(Z=Tn.call(mt,Z,!0)),Z}var Mt=fe?R.outerHTML:R.innerHTML;return fe&&zt["!doctype"]&&R.ownerDocument&&R.ownerDocument.doctype&&R.ownerDocument.doctype.name&&V(ct,R.ownerDocument.doctype.name)&&(Mt="\n"+Mt),be&&(Mt=w(Mt,$e," "),Mt=w(Mt,We," "),Mt=w(Mt,Be," ")),_t&&Ve?_t.createHTML(Mt):Mt},ft.setConfig=function(O){qe(O),Fe=!0},ft.clearConfig=function(){Oe=null,Fe=!1},ft.isValidAttribute=function(O,P,R){Oe||qe({});var F=Jt(O),H=Jt(P);return tn(F,H,R)},ft.addHook=function(O,P){typeof P=="function"&&(re[O]=re[O]||[],S(re[O],P))},ft.removeHook=function(O){if(re[O])return y(re[O])},ft.removeHooks=function(O){re[O]&&(re[O]=[])},ft.removeAllHooks=function(){re={}},ft}var Ot=gt();return Ot})},15875:function(E,n){"use strict";n.__esModule=!0,n.VNodeFlags=n.ChildFlags=void 0;var t;(function(r){r[r.Unknown=0]="Unknown",r[r.HtmlElement=1]="HtmlElement",r[r.ComponentUnknown=2]="ComponentUnknown",r[r.ComponentClass=4]="ComponentClass",r[r.ComponentFunction=8]="ComponentFunction",r[r.Text=16]="Text",r[r.SvgElement=32]="SvgElement",r[r.InputElement=64]="InputElement",r[r.TextareaElement=128]="TextareaElement",r[r.SelectElement=256]="SelectElement",r[r.Portal=1024]="Portal",r[r.ReCreate=2048]="ReCreate",r[r.ContentEditable=4096]="ContentEditable",r[r.Fragment=8192]="Fragment",r[r.InUse=16384]="InUse",r[r.ForwardRef=32768]="ForwardRef",r[r.Normalized=65536]="Normalized",r[r.ForwardRefComponent=32776]="ForwardRefComponent",r[r.FormElement=448]="FormElement",r[r.Element=481]="Element",r[r.Component=14]="Component",r[r.DOMRef=1521]="DOMRef",r[r.InUseOrNormalized=81920]="InUseOrNormalized",r[r.ClearInUse=-16385]="ClearInUse",r[r.ComponentKnown=12]="ComponentKnown"})(t||(n.VNodeFlags=t={}));var e;(function(r){r[r.UnknownChildren=0]="UnknownChildren",r[r.HasInvalidChildren=1]="HasInvalidChildren",r[r.HasVNodeChildren=2]="HasVNodeChildren",r[r.HasNonKeyedChildren=4]="HasNonKeyedChildren",r[r.HasKeyedChildren=8]="HasKeyedChildren",r[r.HasTextChildren=16]="HasTextChildren",r[r.MultipleChildren=12]="MultipleChildren"})(e||(n.ChildFlags=e={}))},89292:function(E,n){"use strict";n.__esModule=!0,n.Fragment=n.EMPTY_OBJ=n.Component=n.AnimationQueues=void 0,n._CI=xe,n._HI=ct,n._M=Xt,n._MCCC=Je,n._ME=hn,n._MFCC=je,n._MP=fe,n._MR=zt,n._RFC=de,n.__render=ne,n.createComponentVNode=nt,n.createFragment=ot,n.createPortal=dt,n.createRef=ln,n.createRenderer=En,n.createTextVNode=st,n.createVNode=it,n.directClone=rt,n.findDOMFromVNode=I,n.forwardRef=An,n.getFlagsForElementVnode=_,n.linkEvent=i,n.normalizeProps=pt,n.options=void 0,n.render=Ke,n.rerender=tn,n.version=void 0;var t=Array.isArray;function e(O){var P=typeof O;return P==="string"||P==="number"}function r(O){return O==null}function o(O){return O===null||O===!1||O===!0||O===void 0}function a(O){return typeof O=="function"}function u(O){return typeof O=="string"}function s(O){return typeof O=="number"}function c(O){return O===null}function h(O){return O===void 0}function f(O,P){var R={};if(O)for(var F in O)R[F]=O[F];if(P)for(var H in P)R[H]=P[H];return R}function i(O,P){return a(P)?{data:O,event:P}:null}function d(O){return!c(O)&&typeof O=="object"}var l=n.EMPTY_OBJ={},g=n.Fragment="$F",v=n.AnimationQueues=function(){function O(){this.componentDidAppear=[],this.componentWillDisappear=[],this.componentWillMove=[]}return O}();function p(O){return O.substring(2).toLowerCase()}function m(O,P){O.appendChild(P)}function C(O,P,R){c(R)?m(O,P):O.insertBefore(P,R)}function T(O,P){return P?document.createElementNS("http://www.w3.org/2000/svg",O):document.createElement(O)}function A(O,P,R){O.replaceChild(P,R)}function b(O,P){O.removeChild(P)}function y(O){for(var P=0;P0?N(R.componentWillDisappear,L(O,P)):w(O,P,!1)}function V(O,P,R,F,H,Q,Z,at){O.componentWillMove.push({dom:F,fn:function(){function Ct(){Z&4?R.componentWillMove(P,H,F):Z&8&&R.onComponentWillMove(P,H,F,at)}return Ct}(),next:Q,parent:H})}function j(O,P,R,F,H){var Q,Z,at=P.flags;do{var Ct=P.flags;if(Ct&1521){!r(Q)&&(a(Q.componentWillMove)||a(Q.onComponentWillMove))?V(H,O,Q,P.dom,R,F,at,Z):C(R,P.dom,F);return}var Mt=P.children;if(Ct&4)Q=P.children,Z=P.props,P=Mt.$LI;else if(Ct&8)Q=P.ref,Z=P.props,P=Mt;else if(Ct&8192)if(P.childFlags===2)P=Mt;else{for(var Rt=0,Lt=Mt.length;Rt0,Mt=c(at),Rt=u(at)&&at[0]===W;Ct||Mt||Rt?(R=R||P.slice(0,Q),(Ct||Rt)&&(Z=rt(Z)),(Mt||Rt)&&(Z.key=W+Q),R.push(Z)):R&&R.push(Z),Z.flags|=65536}}R=R||P,R.length===0?F=1:F=8}else R=P,R.flags|=65536,P.flags&81920&&(R=rt(P)),F=2;return O.children=R,O.childFlags=F,O}function ct(O){return o(O)||e(O)?st(O,null):t(O)?ot(O,0,null):O.flags&16384?rt(O):O}var Tt="http://www.w3.org/1999/xlink",St="http://www.w3.org/XML/1998/namespace",ut={"xlink:actuate":Tt,"xlink:arcrole":Tt,"xlink:href":Tt,"xlink:role":Tt,"xlink:show":Tt,"xlink:title":Tt,"xlink:type":Tt,"xml:base":St,"xml:lang":St,"xml:space":St};function gt(O){return{onClick:O,onDblClick:O,onFocusIn:O,onFocusOut:O,onKeyDown:O,onKeyPress:O,onKeyUp:O,onMouseDown:O,onMouseMove:O,onMouseUp:O,onTouchEnd:O,onTouchMove:O,onTouchStart:O}}var Ot=gt(0),q=gt(null),ft=gt(!0);function mt(O,P){var R=P.$EV;return R||(R=P.$EV=gt(null)),R[O]||++Ot[O]===1&&(q[O]=Vt(O)),R}function At(O,P){var R=P.$EV;R&&R[O]&&(--Ot[O]===0&&(document.removeEventListener(p(O),q[O]),q[O]=null),R[O]=null)}function Dt(O,P,R,F){if(a(R))mt(O,F)[O]=R;else if(d(R)){if(G(P,R))return;mt(O,F)[O]=R}else At(O,F)}function jt(O){return a(O.composedPath)?O.composedPath()[0]:O.target}function bt(O,P,R,F){var H=jt(O);do{if(P&&H.disabled)return;var Q=H.$EV;if(Q){var Z=Q[R];if(Z&&(F.dom=H,Z.event?Z.event(Z.data,O):Z(O),O.cancelBubble))return}H=H.parentNode}while(!c(H))}function lt(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function vt(){return this.defaultPrevented}function It(){return this.cancelBubble}function Et(O){var P={dom:document};return O.isDefaultPrevented=vt,O.isPropagationStopped=It,O.stopPropagation=lt,Object.defineProperty(O,"currentTarget",{configurable:!0,get:function(){function R(){return P.dom}return R}()}),P}function Pt(O){return function(P){if(P.button!==0){P.stopPropagation();return}bt(P,!0,O,Et(P))}}function Ft(O){return function(P){bt(P,!1,O,Et(P))}}function Vt(O){var P=O==="onClick"||O==="onDblClick"?Pt(O):Ft(O);return document.addEventListener(p(O),P),P}function Gt(O,P){var R=document.createElement("i");return R.innerHTML=P,R.innerHTML===O.innerHTML}function Ht(O,P,R){if(O[P]){var F=O[P];F.event?F.event(F.data,R):F(R)}else{var H=P.toLowerCase();O[H]&&O[H](R)}}function Kt(O,P){var R=function(){function F(H){var Q=this.$V;if(Q){var Z=Q.props||l,at=Q.dom;if(u(O))Ht(Z,O,H);else for(var Ct=0;Ct-1&&P.options[Q]&&(at=P.options[Q].value),R&&r(at)&&(at=O.defaultValue),ye(F,at)}}var re=Kt("onInput",Be),$e=Kt("onChange");function We(O,P){Wt(O,"input",re),P.onChange&&Wt(O,"change",$e)}function Be(O,P,R){var F=O.value,H=P.value;if(r(F)){if(R){var Q=O.defaultValue;!r(Q)&&Q!==H&&(P.defaultValue=Q,P.value=Q)}}else H!==F&&(P.defaultValue=F,P.value=F)}function sn(O,P,R,F,H,Q){O&64?me(F,R):O&256?Ye(F,R,H,P):O&128&&Be(F,R,H),Q&&(R.$V=P)}function In(O,P,R){O&64?Ne(P,R):O&256?Tn(P):O&128&&We(P,R)}function cn(O){return O.type&&Zt(O.type)?!r(O.checked):!r(O.value)}function ln(){return{current:null}}function An(O){var P={render:O};return P}function Se(O){O&&!$(O,null)&&O.current&&(O.current=null)}function zt(O,P,R){O&&(a(O)||O.current!==void 0)&&R.push(function(){!$(O,P)&&O.current!==void 0&&(O.current=P)})}function te(O,P,R){Yt(O,R),B(O,P,R)}function Yt(O,P){var R=O.flags,F=O.children,H;if(R&481){H=O.ref;var Q=O.props;Se(H);var Z=O.childFlags;if(!c(Q))for(var at=Object.keys(Q),Ct=0,Mt=at.length;Ct0?N(R.componentWillDisappear,kt(P,O)):O.textContent=""}function Ce(O,P,R,F){Ee(R,F),P.flags&8192?B(P,O,F):le(O,R,F)}function He(O,P,R,F,H){O.componentWillDisappear.push(function(Q){F&4?P.componentWillDisappear(R,Q):F&8&&P.onComponentWillDisappear(R,H,Q)})}function ze(O){var P=O.event;return function(R){P(O.data,R)}}function fn(O,P,R,F){if(d(R)){if(G(P,R))return;R=ze(R)}Wt(F,p(O),R)}function dn(O,P,R){if(r(P)){R.removeAttribute("style");return}var F=R.style,H,Q;if(u(P)){F.cssText=P;return}if(!r(O)&&!u(O)){for(H in P)Q=P[H],Q!==O[H]&&F.setProperty(H,Q);for(H in O)r(P[H])&&F.removeProperty(H)}else for(H in P)Q=P[H],F.setProperty(H,Q)}function be(O,P,R,F,H){var Q=O&&O.__html||"",Z=P&&P.__html||"";Q!==Z&&!r(Z)&&!Gt(F,Z)&&(c(R)||(R.childFlags&12?Ee(R.children,H):R.childFlags===2&&Yt(R.children,H),R.children=null,R.childFlags=1),F.innerHTML=Z)}function De(O,P,R,F,H,Q,Z,at){switch(O){case"children":case"childrenType":case"className":case"defaultValue":case"key":case"multiple":case"ref":case"selectedIndex":break;case"autoFocus":F.autofocus=!!R;break;case"allowfullscreen":case"autoplay":case"capture":case"checked":case"controls":case"default":case"disabled":case"hidden":case"indeterminate":case"loop":case"muted":case"novalidate":case"open":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"selected":F[O]=!!R;break;case"defaultChecked":case"value":case"volume":if(Q&&O==="value")break;var Ct=r(R)?"":R;F[O]!==Ct&&(F[O]=Ct);break;case"style":dn(P,R,F);break;case"dangerouslySetInnerHTML":be(P,R,Z,F,at);break;default:ft[O]?Dt(O,P,R,F):O.charCodeAt(0)===111&&O.charCodeAt(1)===110?fn(O,P,R,F):r(R)?F.removeAttribute(O):H&&ut[O]?F.setAttributeNS(ut[O],O,R):F.setAttribute(O,R);break}}function fe(O,P,R,F,H,Q){var Z=!1,at=(P&448)>0;at&&(Z=cn(R),Z&&In(P,F,R));for(var Ct in R)De(Ct,null,R[Ct],F,H,Z,null,Q);at&&sn(P,O,F,R,!0,Z)}function Fe(O,P,R){var F=ct(O.render(P,O.state,R)),H=R;return a(O.getChildContext)&&(H=f(R,O.getChildContext())),O.$CX=H,F}function xe(O,P,R,F,H,Q){var Z=new P(R,F),at=Z.$N=!!(P.getDerivedStateFromProps||Z.getSnapshotBeforeUpdate);if(Z.$SVG=H,Z.$L=Q,O.children=Z,Z.$BS=!1,Z.context=F,Z.props===l&&(Z.props=R),at)Z.state=x(Z,R,Z.state);else if(a(Z.componentWillMount)){Z.$BR=!0,Z.componentWillMount();var Ct=Z.$PS;if(!c(Ct)){var Mt=Z.state;if(c(Mt))Z.state=Ct;else for(var Rt in Ct)Mt[Rt]=Ct[Rt];Z.$PS=null}Z.$BR=!1}return Z.$LI=Fe(Z,R,F),Z}function de(O,P){var R=O.props||l;return O.flags&32768?O.type.render(R,O.ref,P):O.type(R,P)}function Xt(O,P,R,F,H,Q,Z){var at=O.flags|=16384;at&481?hn(O,P,R,F,H,Q,Z):at&4?Me(O,P,R,F,H,Q,Z):at&8?Te(O,P,R,F,H,Q,Z):at&16?ke(O,P,H):at&8192?vn(O,R,P,F,H,Q,Z):at&1024&&Ve(O,R,P,H,Q,Z)}function Ve(O,P,R,F,H,Q){Xt(O.children,O.ref,P,!1,null,H,Q);var Z=et();ke(Z,R,F),O.dom=Z.dom}function vn(O,P,R,F,H,Q,Z){var at=O.children,Ct=O.childFlags;Ct&12&&at.length===0&&(Ct=O.childFlags=2,at=O.children=et()),Ct===2?Xt(at,R,P,F,H,Q,Z):ue(at,R,P,F,H,Q,Z)}function ke(O,P,R){var F=O.dom=document.createTextNode(O.children);c(P)||C(P,F,R)}function hn(O,P,R,F,H,Q,Z){var at=O.flags,Ct=O.props,Mt=O.className,Rt=O.childFlags,Lt=O.dom=T(O.type,F=F||(at&32)>0),wt=O.children;if(!r(Mt)&&Mt!==""&&(F?Lt.setAttribute("class",Mt):Lt.className=Mt),Rt===16)U(Lt,wt);else if(Rt!==1){var Bt=F&&O.type!=="foreignObject";Rt===2?(wt.flags&16384&&(O.children=wt=rt(wt)),Xt(wt,Lt,R,Bt,null,Q,Z)):(Rt===8||Rt===4)&&ue(wt,Lt,R,Bt,null,Q,Z)}c(P)||C(P,Lt,H),c(Ct)||fe(O,at,Ct,Lt,F,Z),zt(O.ref,Lt,Q)}function ue(O,P,R,F,H,Q,Z){for(var at=0;atBt)&&(Lt=I(at[Bt-1],!1).nextSibling)}ce(Mt,Rt,at,Ct,R,F,H,Lt,O,Q,Z)}function Qe(O,P,R,F,H){var Q=O.ref,Z=P.ref,at=P.children;if(ce(O.childFlags,P.childFlags,O.children,at,Q,R,!1,null,O,F,H),P.dom=O.dom,Q!==Z&&!o(at)){var Ct=at.dom;b(Q,Ct),m(Z,Ct)}}function Ze(O,P,R,F,H,Q,Z){var at=P.dom=O.dom,Ct=O.props,Mt=P.props,Rt=!1,Lt=!1,wt;if(F=F||(H&32)>0,Ct!==Mt){var Bt=Ct||l;if(wt=Mt||l,wt!==l){Rt=(H&448)>0,Rt&&(Lt=cn(wt));for(var $t in wt){var xt=Bt[$t],Qt=wt[$t];xt!==Qt&&De($t,xt,Qt,at,F,Lt,O,Z)}}if(Bt!==l)for(var Ut in Bt)r(wt[Ut])&&!r(Bt[Ut])&&De(Ut,Bt[Ut],null,at,F,Lt,O,Z)}var ge=P.children,ie=P.className;O.className!==ie&&(r(ie)?at.removeAttribute("class"):F?at.setAttribute("class",ie):at.className=ie),H&4096?se(at,ge):ce(O.childFlags,P.childFlags,O.children,ge,at,R,F&&P.type!=="foreignObject",null,O,Q,Z),Rt&&sn(H,P,at,wt,!1,Lt);var nn=P.ref,ve=O.ref;ve!==nn&&(Se(ve),zt(nn,at,Q))}function On(O,P,R,F,H,Q,Z){Yt(O,Z),ue(P,R,F,H,I(O,!0),Q,Z),B(O,R,Z)}function ce(O,P,R,F,H,Q,Z,at,Ct,Mt,Rt){switch(O){case 2:switch(P){case 2:ee(R,F,H,Q,Z,at,Mt,Rt);break;case 1:te(R,H,Rt);break;case 16:Yt(R,Rt),U(H,F);break;default:On(R,F,H,Q,Z,Mt,Rt);break}break;case 1:switch(P){case 2:Xt(F,H,Q,Z,at,Mt,Rt);break;case 1:break;case 16:U(H,F);break;default:ue(F,H,Q,Z,at,Mt,Rt);break}break;case 16:switch(P){case 16:Ue(R,F,H);break;case 2:le(H,R,Rt),Xt(F,H,Q,Z,at,Mt,Rt);break;case 1:le(H,R,Rt);break;default:le(H,R,Rt),ue(F,H,Q,Z,at,Mt,Rt);break}break;default:switch(P){case 16:Ee(R,Rt),U(H,F);break;case 2:Ce(H,Ct,R,Rt),Xt(F,H,Q,Z,at,Mt,Rt);break;case 1:Ce(H,Ct,R,Rt);break;default:var Lt=R.length|0,wt=F.length|0;Lt===0?wt>0&&ue(F,H,Q,Z,at,Mt,Rt):wt===0?Ce(H,Ct,R,Rt):P===8&&O===8?qe(R,F,H,Q,Z,Lt,wt,at,Ct,Mt,Rt):yn(R,F,H,Q,Z,Lt,wt,at,Mt,Rt);break}break}}function Pn(O,P,R,F,H){H.push(function(){O.componentDidUpdate(P,R,F)})}function mn(O,P,R,F,H,Q,Z,at,Ct,Mt){var Rt=O.state,Lt=O.props,wt=!!O.$N,Bt=a(O.shouldComponentUpdate);if(wt&&(P=x(O,R,P!==Rt?f(Rt,P):P)),Z||!Bt||Bt&&O.shouldComponentUpdate(R,P,H)){!wt&&a(O.componentWillUpdate)&&O.componentWillUpdate(R,P,H),O.props=R,O.state=P,O.context=H;var $t=null,xt=Fe(O,R,H);wt&&a(O.getSnapshotBeforeUpdate)&&($t=O.getSnapshotBeforeUpdate(Lt,Rt)),ee(O.$LI,xt,F,O.$CX,Q,at,Ct,Mt),O.$LI=xt,a(O.componentDidUpdate)&&Pn(O,Lt,Rt,$t,Ct)}else O.props=R,O.state=P,O.context=H}function Jt(O,P,R,F,H,Q,Z,at){var Ct=P.children=O.children;if(!c(Ct)){Ct.$L=Z;var Mt=P.props||l,Rt=P.ref,Lt=O.ref,wt=Ct.state;if(!Ct.$N){if(a(Ct.componentWillReceiveProps)){if(Ct.$BR=!0,Ct.componentWillReceiveProps(Mt,F),Ct.$UN)return;Ct.$BR=!1}c(Ct.$PS)||(wt=f(wt,Ct.$PS),Ct.$PS=null)}mn(Ct,wt,Mt,R,F,H,!1,Q,Z,at),Lt!==Rt&&(Se(Lt),zt(Rt,Ct,Z))}}function Oe(O,P,R,F,H,Q,Z,at){var Ct=!0,Mt=P.props||l,Rt=P.ref,Lt=O.props,wt=!r(Rt),Bt=O.children;if(wt&&a(Rt.onComponentShouldUpdate)&&(Ct=Rt.onComponentShouldUpdate(Lt,Mt)),Ct!==!1){wt&&a(Rt.onComponentWillUpdate)&&Rt.onComponentWillUpdate(Lt,Mt);var $t=ct(de(P,F));ee(Bt,$t,R,F,H,Q,Z,at),P.children=$t,wt&&a(Rt.onComponentDidUpdate)&&Rt.onComponentDidUpdate(Lt,Mt)}else P.children=Bt}function Nn(O,P){var R=P.children,F=P.dom=O.dom;R!==O.children&&(F.nodeValue=R)}function yn(O,P,R,F,H,Q,Z,at,Ct,Mt){for(var Rt=Q>Z?Z:Q,Lt=0,wt,Bt;LtZ)for(Lt=Rt;LtLt||Bt>wt)break t;$t=O[Bt],xt=P[Bt]}for($t=O[Lt],xt=P[wt];$t.key===xt.key;){if(xt.flags&16384&&(P[wt]=xt=rt(xt)),ee($t,xt,R,F,H,at,Mt,Rt),O[Lt]=xt,Lt--,wt--,Bt>Lt||Bt>wt)break t;$t=O[Lt],xt=P[wt]}}if(Bt>Lt){if(Bt<=wt)for(Qt=wt+1,Ut=Qtwt)for(;Bt<=Lt;)te(O[Bt++],R,Rt);else Sn(O,P,F,Q,Z,Lt,wt,Bt,R,H,at,Ct,Mt,Rt)}function Sn(O,P,R,F,H,Q,Z,at,Ct,Mt,Rt,Lt,wt,Bt){var $t,xt,Qt=0,Ut=0,ge=at,ie=at,nn=Q-at+1,ve=Z-at+1,rn=new Int32Array(ve+1),pe=nn===F,wn=!1,qt=0,on=0;if(H<4||(nn|ve)<32)for(Ut=ge;Ut<=Q;++Ut)if($t=O[Ut],onat?wn=!0:qt=at,xt.flags&16384&&(P[at]=xt=rt(xt)),ee($t,xt,Ct,R,Mt,Rt,wt,Bt),++on;break}!pe&&at>Z&&te($t,Ct,Bt)}else pe||te($t,Ct,Bt);else{var Dn={};for(Ut=ie;Ut<=Z;++Ut)Dn[P[Ut].key]=Ut;for(Ut=ge;Ut<=Q;++Ut)if($t=O[Ut],onge;)te(O[ge++],Ct,Bt);rn[at-ie]=Ut+1,qt>at?wn=!0:qt=at,xt=P[at],xt.flags&16384&&(P[at]=xt=rt(xt)),ee($t,xt,Ct,R,Mt,Rt,wt,Bt),++on}else pe||te($t,Ct,Bt);else pe||te($t,Ct,Bt)}if(pe)Ce(Ct,Lt,O,Bt),ue(P,Ct,R,Mt,Rt,wt,Bt);else if(wn){var Fn=_e(rn);for(at=Fn.length-1,Ut=ve-1;Ut>=0;Ut--)rn[Ut]===0?(qt=Ut+ie,xt=P[qt],xt.flags&16384&&(P[qt]=xt=rt(xt)),Qt=qt+1,Xt(xt,Ct,R,Mt,Qt0&&M(Bt.componentWillMove)}else if(on!==ve)for(Ut=ve-1;Ut>=0;Ut--)rn[Ut]===0&&(qt=Ut+ie,xt=P[qt],xt.flags&16384&&(P[qt]=xt=rt(xt)),Qt=qt+1,Xt(xt,Ct,R,Mt,QtRe&&(Re=Ct,oe=new Int32Array(Ct),Ge=new Int32Array(Ct));R>1,O[oe[at]]0&&(Ge[R]=oe[Q-1]),oe[Q]=R)}Q=H+1;var Mt=new Int32Array(Q);for(Z=oe[Q-1];Q-- >0;)Mt[Q]=Z,Z=Ge[Z],oe[Q]=0;return Mt}var Mn=typeof document!="undefined";Mn&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);function ne(O,P,R,F){var H=[],Q=new v,Z=P.$V;K.v=!0,r(Z)?r(O)||(O.flags&16384&&(O=rt(O)),Xt(O,P,F,!1,null,H,Q),P.$V=O,Z=O):r(O)?(te(Z,P,Q),P.$V=null):(O.flags&16384&&(O=rt(O)),ee(Z,O,P,F,!1,null,H,Q),Z=P.$V=O),y(H),N(Q.componentDidAppear),K.v=!1,a(R)&&R(),a(D.renderComplete)&&D.renderComplete(Z,P)}function Ke(O,P,R,F){R===void 0&&(R=null),F===void 0&&(F=l),ne(O,P,R,F)}function En(O){return function(){function P(R,F,H,Q){O||(O=R),Ke(F,O,H,Q)}return P}()}var we=[],Rn=typeof Promise!="undefined"?Promise.resolve().then.bind(Promise.resolve()):function(O){window.setTimeout(O,0)},he=!1;function ae(O,P,R,F){var H=O.$PS;if(a(P)&&(P=P(H?f(O.state,H):O.state,O.props,O.context)),r(H))O.$PS=P;else for(var Q in P)H[Q]=P[Q];if(O.$BR)a(R)&&O.$L.push(R.bind(O));else{if(!K.v&&we.length===0){en(O,F),a(R)&&R.call(O);return}if(we.indexOf(O)===-1&&we.push(O),F&&(O.$F=!0),he||(he=!0,Rn(tn)),a(R)){var Z=O.$QU;Z||(Z=O.$QU=[]),Z.push(R)}}}function Cn(O){for(var P=O.$QU,R=0;R
=0;--$){var W=this.tryEntries[$],tt=W.completion;if(W.tryLoc==="root")return Y("end");if(W.tryLoc<=this.prev){var it=r.call(W,"catchLoc"),ht=r.call(W,"finallyLoc");if(it&&ht){if(this.prev=0;--Y){var $=this.tryEntries[Y];if($.tryLoc<=this.prev&&r.call($,"finallyLoc")&&this.prev<$.finallyLoc){var W=$;break}}W&&(U==="break"||U==="continue")&&W.tryLoc<=G&&G<=W.finallyLoc&&(W=null);var tt=W?W.completion:{};return tt.type=U,tt.arg=G,W?(this.method="next",this.next=W.finallyLoc,m):this.complete(tt)}return D}(),complete:function(){function D(U,G){if(U.type==="throw")throw U.arg;return U.type==="break"||U.type==="continue"?this.next=U.arg:U.type==="return"?(this.rval=this.arg=U.arg,this.method="return",this.next="end"):U.type==="normal"&&G&&(this.next=G),m}return D}(),finish:function(){function D(U){for(var G=this.tryEntries.length-1;G>=0;--G){var Y=this.tryEntries[G];if(Y.finallyLoc===U)return this.complete(Y.completion,Y.afterLoc),V(Y),m}}return D}(),catch:function(){function D(U){for(var G=this.tryEntries.length-1;G>=0;--G){var Y=this.tryEntries[G];if(Y.tryLoc===U){var $=Y.completion;if($.type==="throw"){var W=$.arg;V(Y)}return W}}throw new Error("illegal catch attempt")}return D}(),delegateYield:function(){function D(U,G,Y){return this.delegate={iterator:x(U),resultName:G,nextLoc:Y},this.method==="next"&&(this.arg=a),m}return D}()},t}(E.exports);try{regeneratorRuntime=n}catch(t){typeof globalThis=="object"?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},30236:function(){"use strict";self.fetch||(self.fetch=function(E,n){return n=n||{},new Promise(function(t,e){var r=new XMLHttpRequest,o=[],a={},u=function(){function c(){return{ok:(r.status/100|0)==2,statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){function h(){return Promise.resolve(r.responseText)}return h}(),json:function(){function h(){return Promise.resolve(r.responseText).then(JSON.parse)}return h}(),blob:function(){function h(){return Promise.resolve(new Blob([r.response]))}return h}(),clone:c,headers:{keys:function(){function h(){return o}return h}(),entries:function(){function h(){return o.map(function(f){return[f,r.getResponseHeader(f)]})}return h}(),get:function(){function h(f){return r.getResponseHeader(f)}return h}(),has:function(){function h(f){return r.getResponseHeader(f)!=null}return h}()}}}return c}();for(var s in r.open(n.method||"get",E,!0),r.onload=function(){r.getAllResponseHeaders().toLowerCase().replace(/^(.+?):/gm,function(c,h){a[h]||o.push(a[h]=h)}),t(u())},r.onerror=e,r.withCredentials=n.credentials=="include",n.headers)r.setRequestHeader(s,n.headers[s]);r.send(n.body||null)})})},88510:function(E,n){"use strict";n.__esModule=!0,n.zipWith=n.zip=n.uniqBy=n.uniq=n.toKeyedArray=n.toArray=n.sortBy=n.sort=n.reduce=n.range=n.map=n.filterMap=n.filter=void 0;function t(C,T){var A=typeof Symbol!="undefined"&&C[Symbol.iterator]||C["@@iterator"];if(A)return(A=A.call(C)).next.bind(A);if(Array.isArray(C)||(A=e(C))||T&&C&&typeof C.length=="number"){A&&(C=A);var b=0;return function(){return b>=C.length?{done:!0}:{done:!1,value:C[b++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(C,T){if(C){if(typeof C=="string")return r(C,T);var A={}.toString.call(C).slice(8,-1);return A==="Object"&&C.constructor&&(A=C.constructor.name),A==="Map"||A==="Set"?Array.from(C):A==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(A)?r(C,T):void 0}}function r(C,T){(T==null||T>C.length)&&(T=C.length);for(var A=0,b=Array(T);AM)return 1}return 0},f=e.sortBy=function(){function C(){for(var T=arguments.length,I=new Array(T),b=0;bM)return 1}return 0},f=n.sortBy=function(){function C(){for(var T=arguments.length,A=new Array(T),b=0;b=1-t)return o[a-1];var s=u%1,c=u|0;return n.lerp(o[c],o[c+1],s)}},92868:function(S,e){"use strict";e.__esModule=!0,e.EventEmitter=void 0;/**
+ */var t=1e-4,e=n.Color=function(){function r(a,u,s,c){a===void 0&&(a=0),u===void 0&&(u=0),s===void 0&&(s=0),c===void 0&&(c=1),this.r=a,this.g=u,this.b=s,this.a=c}var o=r.prototype;return o.toString=function(){function a(){return"rgba("+(this.r|0)+", "+(this.g|0)+", "+(this.b|0)+", "+(this.a|0)+")"}return a}(),r}();e.fromHex=function(r){return new e(parseInt(r.substr(1,2),16),parseInt(r.substr(3,2),16),parseInt(r.substr(5,2),16))},e.lerp=function(r,o,a){return new e((o.r-r.r)*a+r.r,(o.g-r.g)*a+r.g,(o.b-r.b)*a+r.b,(o.a-r.a)*a+r.a)},e.lookup=function(r,o){o===void 0&&(o=[]);var a=o.length;if(a<2)throw new Error("Needs at least two colors!");var u=r*(a-1);if(r=1-t)return o[a-1];var s=u%1,c=u|0;return e.lerp(o[c],o[c+1],s)}},92868:function(E,n){"use strict";n.__esModule=!0,n.EventEmitter=void 0;/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var t=e.EventEmitter=function(){function n(){this.listeners={}}var r=n.prototype;return r.on=function(){function o(a,u){this.listeners[a]=this.listeners[a]||[],this.listeners[a].push(u)}return o}(),r.off=function(){function o(a,u){var s=this.listeners[a];if(!s)throw new Error('There is no listeners for "'+a+'"');this.listeners[a]=s.filter(function(c){return c!==u})}return o}(),r.emit=function(){function o(a){var u=this.listeners[a];if(u){for(var s=arguments.length,c=new Array(s>1?s-1:0),h=1;h1?s-1:0),h=1;h1?h-1:0),i=1;i1?f-1:0),d=1;d1?h-1:0),i=1;i1?f-1:0),d=1;dd?d:f}return h}(),n=e.clamp01=function(){function h(f){return f<0?0:f>1?1:f}return h}(),r=e.scale=function(){function h(f,i,d){return(f-i)/(d-i)}return h}(),o=e.round=function(){function h(f,i){if(!f||isNaN(f))return f;var d,l,p,v;return i|=0,d=Math.pow(10,i),f*=d,v=+(f>0)|-(f<0),p=Math.abs(f%1)>=.4999999999854481,l=Math.floor(f),p&&(f=l+(v>0)),(p?f:Math.round(f))/d}return h}(),a=e.toFixed=function(){function h(f,i){return i===void 0&&(i=0),Number(f).toFixed(Math.max(i,0))}return h}(),u=e.inRange=function(){function h(f,i){return i&&f>=i[0]&&f<=i[1]}return h}(),s=e.keyOfMatchingRange=function(){function h(f,i){for(var d=0,l=Object.keys(i);dd?d:f}return h}(),e=n.clamp01=function(){function h(f){return f<0?0:f>1?1:f}return h}(),r=n.scale=function(){function h(f,i,d){return(f-i)/(d-i)}return h}(),o=n.round=function(){function h(f,i){if(!f||isNaN(f))return f;var d,l,g,v;return i|=0,d=Math.pow(10,i),f*=d,v=+(f>0)|-(f<0),g=Math.abs(f%1)>=.4999999999854481,l=Math.floor(f),g&&(f=l+(v>0)),(g?f:Math.round(f))/d}return h}(),a=n.toFixed=function(){function h(f,i){return i===void 0&&(i=0),Number(f).toFixed(Math.max(i,0))}return h}(),u=n.inRange=function(){function h(f,i){return i&&f>=i[0]&&f<=i[1]}return h}(),s=n.keyOfMatchingRange=function(){function h(f,i){for(var d=0,l=Object.keys(i);d1?v-1:0),m=1;m1?A-1:0),M=1;M=0;--_){var X=this.tryEntries[_],ct=X.completion;if(X.tryLoc==="root")return yt("end");if(X.tryLoc<=this.prev){var Tt=b.call(X,"catchLoc"),St=b.call(X,"finallyLoc");if(Tt&&St){if(this.prev=0;--yt){var _=this.tryEntries[yt];if(_.tryLoc<=this.prev&&b.call(_,"finallyLoc")&&this.prev<_.finallyLoc){var X=_;break}}X&&(et==="break"||et==="continue")&&X.tryLoc<=dt&&dt<=X.finallyLoc&&(X=null);var ct=X?X.completion:{};return ct.type=et,ct.arg=dt,X?(this.method="next",this.next=X.finallyLoc,D):this.complete(ct)}return rt}(),complete:function(){function rt(et,dt){if(et.type==="throw")throw et.arg;return et.type==="break"||et.type==="continue"?this.next=et.arg:et.type==="return"?(this.rval=this.arg=et.arg,this.method="return",this.next="end"):et.type==="normal"&&dt&&(this.next=dt),D}return rt}(),finish:function(){function rt(et){for(var dt=this.tryEntries.length-1;dt>=0;--dt){var yt=this.tryEntries[dt];if(yt.finallyLoc===et)return this.complete(yt.completion,yt.afterLoc),ot(yt),D}}return rt}(),catch:function(){function rt(et){for(var dt=this.tryEntries.length-1;dt>=0;--dt){var yt=this.tryEntries[dt];if(yt.tryLoc===et){var _=yt.completion;if(_.type==="throw"){var X=_.arg;ot(yt)}return X}}throw Error("illegal catch attempt")}return rt}(),delegateYield:function(){function rt(et,dt,yt){return this.delegate={iterator:Nt(et),resultName:dt,nextLoc:yt},this.method==="next"&&(this.arg=C),D}return rt}()},T}function n(C,T,I,b,y,E,A){try{var N=C[E](A),M=N.value}catch(w){return void I(w)}N.done?T(M):Promise.resolve(M).then(b,y)}function r(C){return function(){var T=this,I=arguments;return new Promise(function(b,y){var E=C.apply(T,I);function A(M){n(E,b,y,A,N,"next",M)}function N(M){n(E,b,y,A,N,"throw",M)}A(void 0)})}}/**
+ */var r=n.createStore=function(){function h(f,i){if(i)return i(h)(f);var d,l=[],g=function(){function m(){return d}return m}(),v=function(){function m(C){l.push(C)}return m}(),p=function(){function m(C){d=f(d,C);for(var T=0;T1?v-1:0),m=1;m1?I-1:0),M=1;M=0;--_){var X=this.tryEntries[_],ct=X.completion;if(X.tryLoc==="root")return yt("end");if(X.tryLoc<=this.prev){var Tt=b.call(X,"catchLoc"),St=b.call(X,"finallyLoc");if(Tt&&St){if(this.prev=0;--yt){var _=this.tryEntries[yt];if(_.tryLoc<=this.prev&&b.call(_,"finallyLoc")&&this.prev<_.finallyLoc){var X=_;break}}X&&(et==="break"||et==="continue")&&X.tryLoc<=dt&&dt<=X.finallyLoc&&(X=null);var ct=X?X.completion:{};return ct.type=et,ct.arg=dt,X?(this.method="next",this.next=X.finallyLoc,D):this.complete(ct)}return rt}(),complete:function(){function rt(et,dt){if(et.type==="throw")throw et.arg;return et.type==="break"||et.type==="continue"?this.next=et.arg:et.type==="return"?(this.rval=this.arg=et.arg,this.method="return",this.next="end"):et.type==="normal"&&dt&&(this.next=dt),D}return rt}(),finish:function(){function rt(et){for(var dt=this.tryEntries.length-1;dt>=0;--dt){var yt=this.tryEntries[dt];if(yt.finallyLoc===et)return this.complete(yt.completion,yt.afterLoc),ot(yt),D}}return rt}(),catch:function(){function rt(et){for(var dt=this.tryEntries.length-1;dt>=0;--dt){var yt=this.tryEntries[dt];if(yt.tryLoc===et){var _=yt.completion;if(_.type==="throw"){var X=_.arg;ot(yt)}return X}}throw Error("illegal catch attempt")}return rt}(),delegateYield:function(){function rt(et,dt,yt){return this.delegate={iterator:Nt(et),resultName:dt,nextLoc:yt},this.method==="next"&&(this.arg=C),D}return rt}()},T}function e(C,T,A,b,y,S,I){try{var N=C[S](I),M=N.value}catch(w){return void A(w)}N.done?T(M):Promise.resolve(M).then(b,y)}function r(C){return function(){var T=this,A=arguments;return new Promise(function(b,y){var S=C.apply(T,A);function I(M){e(S,b,y,I,N,"next",M)}function N(M){e(S,b,y,I,N,"throw",M)}I(void 0)})}}/**
* Browser-agnostic abstraction of key-value web storage.
*
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var o=e.IMPL_HUB_STORAGE=0,a=e.IMPL_INDEXED_DB=1,u=1,s="para-tgui",c="storage-v1",h="readonly",f="readwrite",i=function(T){return function(){try{return!!T()}catch(I){return!1}}},d=i(function(){return window.hubStorage&&window.hubStorage.getItem}),l=i(function(){return(window.indexedDB||window.msIndexedDB)&&(window.IDBTransaction||window.msIDBTransaction)}),p=function(){function C(){this.impl=o}var T=C.prototype;return T.get=function(){function I(b){var y=window.hubStorage.getItem("paradise-"+b);if(typeof y=="string")return JSON.parse(y)}return I}(),T.set=function(){function I(b,y){window.hubStorage.setItem("paradise-"+b,JSON.stringify(y))}return I}(),T.remove=function(){function I(b){window.hubStorage.removeItem("paradise-"+b)}return I}(),T.clear=function(){function I(){window.hubStorage.clear()}return I}(),C}(),v=function(){function C(){this.impl=a,this.dbPromise=new Promise(function(I,b){var y=window.indexedDB||window.msIndexedDB,E=y.open(s,u);E.onupgradeneeded=function(){try{E.result.createObjectStore(c)}catch(A){b(new Error("Failed to upgrade IDB: "+E.error))}},E.onsuccess=function(){return I(E.result)},E.onerror=function(){b(new Error("Failed to open IDB: "+E.error))}})}var T=C.prototype;return T.getStore=function(){function I(b){return this.dbPromise.then(function(y){return y.transaction(c,b).objectStore(c)})}return I}(),T.get=function(){var I=r(t().mark(function(){function y(E){var A;return t().wrap(function(){function N(M){for(;;)switch(M.prev=M.next){case 0:return M.next=2,this.getStore(h);case 2:return A=M.sent,M.abrupt("return",new Promise(function(w,L){var B=A.get(E);B.onsuccess=function(){return w(B.result)},B.onerror=function(){return L(B.error)}}));case 4:case"end":return M.stop()}}return N}(),y,this)}return y}()));function b(y){return I.apply(this,arguments)}return b}(),T.set=function(){var I=r(t().mark(function(){function y(E,A){var N;return t().wrap(function(){function M(w){for(;;)switch(w.prev=w.next){case 0:return A===null&&(A=void 0),w.next=3,this.getStore(f);case 3:N=w.sent,N.put(A,E);case 5:case"end":return w.stop()}}return M}(),y,this)}return y}()));function b(y,E){return I.apply(this,arguments)}return b}(),T.remove=function(){var I=r(t().mark(function(){function y(E){var A;return t().wrap(function(){function N(M){for(;;)switch(M.prev=M.next){case 0:return M.next=2,this.getStore(f);case 2:A=M.sent,A.delete(E);case 4:case"end":return M.stop()}}return N}(),y,this)}return y}()));function b(y){return I.apply(this,arguments)}return b}(),T.clear=function(){var I=r(t().mark(function(){function y(){var E;return t().wrap(function(){function A(N){for(;;)switch(N.prev=N.next){case 0:return N.next=2,this.getStore(f);case 2:E=N.sent,E.clear();case 4:case"end":return N.stop()}}return A}(),y,this)}return y}()));function b(){return I.apply(this,arguments)}return b}(),C}(),g=function(){function C(){this.backendPromise=r(t().mark(function(){function I(){var b;return t().wrap(function(){function y(E){for(;;)switch(E.prev=E.next){case 0:if(!Byond.TRIDENT){E.next=13;break}if(!l()){E.next=11;break}return E.prev=2,b=new v,E.next=6,b.dbPromise;case 6:return E.abrupt("return",b);case 9:E.prev=9,E.t0=E.catch(2);case 11:E.next=15;break;case 13:if(!d()){E.next=15;break}return E.abrupt("return",new p);case 15:case"end":return E.stop()}}return y}(),I,null,[[2,9]])}return I}()))()}var T=C.prototype;return T.get=function(){var I=r(t().mark(function(){function y(E){var A;return t().wrap(function(){function N(M){for(;;)switch(M.prev=M.next){case 0:return M.next=2,this.backendPromise;case 2:return A=M.sent,M.abrupt("return",A.get(E));case 4:case"end":return M.stop()}}return N}(),y,this)}return y}()));function b(y){return I.apply(this,arguments)}return b}(),T.set=function(){var I=r(t().mark(function(){function y(E,A){var N;return t().wrap(function(){function M(w){for(;;)switch(w.prev=w.next){case 0:return w.next=2,this.backendPromise;case 2:return N=w.sent,w.abrupt("return",N.set(E,A));case 4:case"end":return w.stop()}}return M}(),y,this)}return y}()));function b(y,E){return I.apply(this,arguments)}return b}(),T.remove=function(){var I=r(t().mark(function(){function y(E){var A;return t().wrap(function(){function N(M){for(;;)switch(M.prev=M.next){case 0:return M.next=2,this.backendPromise;case 2:return A=M.sent,M.abrupt("return",A.remove(E));case 4:case"end":return M.stop()}}return N}(),y,this)}return y}()));function b(y){return I.apply(this,arguments)}return b}(),T.clear=function(){var I=r(t().mark(function(){function y(){var E;return t().wrap(function(){function A(N){for(;;)switch(N.prev=N.next){case 0:return N.next=2,this.backendPromise;case 2:return E=N.sent,N.abrupt("return",E.clear());case 4:case"end":return N.stop()}}return A}(),y,this)}return y}()));function b(){return I.apply(this,arguments)}return b}(),C}(),m=e.storage=new g},25328:function(S,e){"use strict";e.__esModule=!0,e.toTitleCase=e.multiline=e.decodeHtmlEntities=e.createSearch=e.createGlobPattern=e.capitalize=e.buildQueryString=void 0;function t(i,d){var l=typeof Symbol!="undefined"&&i[Symbol.iterator]||i["@@iterator"];if(l)return(l=l.call(i)).next.bind(l);if(Array.isArray(i)||(l=n(i))||d&&i&&typeof i.length=="number"){l&&(i=l);var p=0;return function(){return p>=i.length?{done:!0}:{done:!1,value:i[p++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(i,d){if(i){if(typeof i=="string")return r(i,d);var l={}.toString.call(i).slice(8,-1);return l==="Object"&&i.constructor&&(l=i.constructor.name),l==="Map"||l==="Set"?Array.from(i):l==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l)?r(i,d):void 0}}function r(i,d){(d==null||d>i.length)&&(d=i.length);for(var l=0,p=Array(d);l=i.length?{done:!0}:{done:!1,value:i[g++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(i,d){if(i){if(typeof i=="string")return r(i,d);var l={}.toString.call(i).slice(8,-1);return l==="Object"&&i.constructor&&(l=i.constructor.name),l==="Map"||l==="Set"?Array.from(i):l==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l)?r(i,d):void 0}}function r(i,d){(d==null||d>i.length)&&(d=i.length);for(var l=0,g=Array(d);l",apos:"'"};return d.replace(/ /gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(l,function(v,g){return p[g]}).replace(/?([0-9]+);/gi,function(v,g){var m=parseInt(g,10);return String.fromCharCode(m)}).replace(/?([0-9a-f]+);/gi,function(v,g){var m=parseInt(g,16);return String.fromCharCode(m)})}return i}(),f=e.buildQueryString=function(){function i(d){return Object.keys(d).map(function(l){return encodeURIComponent(l)+"="+encodeURIComponent(d[l])}).join("&")}return i}()},69214:function(S,e){"use strict";e.__esModule=!0,e.throttle=e.sleep=e.debounce=void 0;/**
+ */var o=n.multiline=function(){function i(d){if(Array.isArray(d))return i(d.join(""));for(var l=d.split("\n"),g,v=t(l),p;!(p=v()).done;)for(var m=p.value,C=0;C",apos:"'"};return d.replace(/ /gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(l,function(v,p){return g[p]}).replace(/?([0-9]+);/gi,function(v,p){var m=parseInt(p,10);return String.fromCharCode(m)}).replace(/?([0-9a-f]+);/gi,function(v,p){var m=parseInt(p,16);return String.fromCharCode(m)})}return i}(),f=n.buildQueryString=function(){function i(d){return Object.keys(d).map(function(l){return encodeURIComponent(l)+"="+encodeURIComponent(d[l])}).join("&")}return i}()},69214:function(E,n){"use strict";n.__esModule=!0,n.throttle=n.sleep=n.debounce=void 0;/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var t=e.debounce=function(){function o(a,u,s){s===void 0&&(s=!1);var c;return function(){for(var h=arguments.length,f=new Array(h),i=0;i=u)a.apply(null,i),s=l;else{var p;c=setTimeout(function(){return h.apply(void 0,i)},u-(l-((p=s)!=null?p:0)))}}return h}()}return o}()},90286:function(S,e){"use strict";e.__esModule=!0,e.createUuid=void 0;/**
+ */var t=n.debounce=function(){function o(a,u,s){s===void 0&&(s=!1);var c;return function(){for(var h=arguments.length,f=new Array(h),i=0;i=u)a.apply(null,i),s=l;else{var g;c=setTimeout(function(){return h.apply(void 0,i)},u-(l-((g=s)!=null?g:0)))}}return h}()}return o}()},90286:function(E,n){"use strict";n.__esModule=!0,n.createUuid=void 0;/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var t=e.createUuid=function(){function n(){var r=new Date().getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(o){var a=(r+Math.random()*16)%16|0;return r=Math.floor(r/16),(o==="x"?a:a&3|8).toString(16)})}return n}()},97450:function(S,e,t){"use strict";e.__esModule=!0,e.vecSubtract=e.vecScale=e.vecNormalize=e.vecMultiply=e.vecLength=e.vecInverse=e.vecDivide=e.vecAdd=void 0;var n=t(88510);/**
+ */var t=n.createUuid=function(){function e(){var r=new Date().getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(o){var a=(r+Math.random()*16)%16|0;return r=Math.floor(r/16),(o==="x"?a:a&3|8).toString(16)})}return e}()},97450:function(E,n,t){"use strict";n.__esModule=!0,n.vecSubtract=n.vecScale=n.vecNormalize=n.vecMultiply=n.vecLength=n.vecInverse=n.vecDivide=n.vecAdd=void 0;var e=t(88510);/**
* N-dimensional vector manipulation functions.
*
* Vectors are plain number arrays, i.e. [x, y, z].
@@ -66,178 +66,178 @@
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var r=function(g,m){return g+m},o=function(g,m){return g-m},a=function(g,m){return g*m},u=function(g,m){return g/m},s=e.vecAdd=function(){function v(){for(var g=arguments.length,m=new Array(g),C=0;C=c.length?{done:!0}:{done:!1,value:c[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(c,h){if(c){if(typeof c=="string")return a(c,h);var f={}.toString.call(c).slice(8,-1);return f==="Object"&&c.constructor&&(f=c.constructor.name),f==="Map"||f==="Set"?Array.from(c):f==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f)?a(c,h):void 0}}function a(c,h){(h==null||h>c.length)&&(h=c.length);for(var f=0,i=Array(h);f=c.length?{done:!0}:{done:!1,value:c[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(c,h){if(c){if(typeof c=="string")return a(c,h);var f={}.toString.call(c).slice(8,-1);return f==="Object"&&c.constructor&&(f=c.constructor.name),f==="Map"||f==="Set"?Array.from(c):f==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(f)?a(c,h):void 0}}function a(c,h){(h==null||h>c.length)&&(h=c.length);for(var f=0,i=Array(h);f0&&f.node.currentTime>=f.options.end;i&&f.stop()}},1e3)}var h=c.prototype;return h.destroy=function(){function f(){this.node&&(this.node.stop(),document.removeChild(this.node),clearInterval(this.playbackInterval))}return f}(),h.play=function(){function f(i,d){d===void 0&&(d={}),this.node&&(u.log("playing",i,d),this.options=d,this.node.src=i)}return f}(),h.stop=function(){function f(){if(this.node){if(this.playing)for(var i=r(this.onStopSubscribers),d;!(d=i()).done;){var l=d.value;l()}u.log("stopping"),this.playing=!1,this.node.src=""}}return f}(),h.setVolume=function(){function f(i){this.node&&(this.volume=i,this.node.volume=i)}return f}(),h.onPlay=function(){function f(i){this.node&&this.onPlaySubscribers.push(i)}return f}(),h.onStop=function(){function f(i){this.node&&this.onStopSubscribers.push(i)}return f}(),c}()},70949:function(S,e){"use strict";e.__esModule=!0,e.audioReducer=void 0;/**
+*/var u=(0,e.createLogger)("AudioPlayer"),s=n.AudioPlayer=function(){function c(){var f=this;this.node=document.createElement("audio"),this.node.style.setProperty("display","none"),document.body.appendChild(this.node),this.playing=!1,this.volume=1,this.options={},this.onPlaySubscribers=[],this.onStopSubscribers=[],this.node.addEventListener("canplaythrough",function(){u.log("canplaythrough"),f.playing=!0,f.node.playbackRate=f.options.pitch||1,f.node.currentTime=f.options.start||0,f.node.volume=f.volume,f.node.play();for(var i=r(f.onPlaySubscribers),d;!(d=i()).done;){var l=d.value;l()}}),this.node.addEventListener("ended",function(){u.log("ended"),f.stop()}),this.node.addEventListener("error",function(i){f.playing&&(u.log("playback error",i.error),f.stop())}),this.playbackInterval=setInterval(function(){if(f.playing){var i=f.options.end>0&&f.node.currentTime>=f.options.end;i&&f.stop()}},1e3)}var h=c.prototype;return h.destroy=function(){function f(){this.node&&(this.node.stop(),document.removeChild(this.node),clearInterval(this.playbackInterval))}return f}(),h.play=function(){function f(i,d){d===void 0&&(d={}),this.node&&(u.log("playing",i,d),this.options=d,this.node.src=i)}return f}(),h.stop=function(){function f(){if(this.node){if(this.playing)for(var i=r(this.onStopSubscribers),d;!(d=i()).done;){var l=d.value;l()}u.log("stopping"),this.playing=!1,this.node.src=""}}return f}(),h.setVolume=function(){function f(i){this.node&&(this.volume=i,this.node.volume=i)}return f}(),h.onPlay=function(){function f(i){this.node&&this.onPlaySubscribers.push(i)}return f}(),h.onStop=function(){function f(i){this.node&&this.onStopSubscribers.push(i)}return f}(),c}()},70949:function(E,n){"use strict";n.__esModule=!0,n.audioReducer=void 0;/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var t={visible:!1,playing:!1,track:null},n=e.audioReducer=function(){function r(o,a){o===void 0&&(o=t);var u=a.type,s=a.payload;return u==="audio/playing"?Object.assign({},o,{visible:!0,playing:!0}):u==="audio/stopped"?Object.assign({},o,{visible:!1,playing:!1}):u==="audio/playMusic"?Object.assign({},o,{meta:s}):u==="audio/stopMusic"?Object.assign({},o,{visible:!1,playing:!1,meta:null}):u==="audio/toggle"?Object.assign({},o,{visible:!o.visible}):o}return r}()},32559:function(S,e){"use strict";e.__esModule=!0,e.selectAudio=void 0;/**
+ */var t={visible:!1,playing:!1,track:null},e=n.audioReducer=function(){function r(o,a){o===void 0&&(o=t);var u=a.type,s=a.payload;return u==="audio/playing"?Object.assign({},o,{visible:!0,playing:!0}):u==="audio/stopped"?Object.assign({},o,{visible:!1,playing:!1}):u==="audio/playMusic"?Object.assign({},o,{meta:s}):u==="audio/stopMusic"?Object.assign({},o,{visible:!1,playing:!1,meta:null}):u==="audio/toggle"?Object.assign({},o,{visible:!o.visible}):o}return r}()},32559:function(E,n){"use strict";n.__esModule=!0,n.selectAudio=void 0;/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var t=e.selectAudio=function(){function n(r){return r.audio}return n}()},15039:function(S,e,t){"use strict";e.__esModule=!0,e.ChatPageSettings=void 0;var n=t(89005),r=t(85307),o=t(36036),a=t(37152),u=t(69126),s=t(23429);/**
+ */var t=n.selectAudio=function(){function e(r){return r.audio}return e}()},15039:function(E,n,t){"use strict";n.__esModule=!0,n.ChatPageSettings=void 0;var e=t(89005),r=t(85307),o=t(36036),a=t(37152),u=t(69126),s=t(23429);/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var c=e.ChatPageSettings=function(){function h(f,i){var d=(0,r.useSelector)(i,s.selectCurrentChatPage),l=(0,r.useDispatch)(i);return(0,n.createComponentVNode)(2,o.Section,{fill:!0,children:[(0,n.createComponentVNode)(2,o.Stack,{align:"center",children:[!d.isMain&&(0,n.createComponentVNode)(2,o.Stack.Item,{children:(0,n.createComponentVNode)(2,o.Button,{tooltip:"Reorder tab to the left",icon:"angle-left",onClick:function(){function p(){return l((0,a.moveChatPageLeft)({pageId:d.id}))}return p}()})}),(0,n.createComponentVNode)(2,o.Stack.Item,{grow:!0,ml:.5,children:(0,n.createComponentVNode)(2,o.Input,{width:"100%",value:d.name,onChange:function(){function p(v,g){return l((0,a.updateChatPage)({pageId:d.id,name:g}))}return p}()})}),!d.isMain&&(0,n.createComponentVNode)(2,o.Stack.Item,{ml:.5,children:(0,n.createComponentVNode)(2,o.Button,{tooltip:"Reorder tab to the right",icon:"angle-right",onClick:function(){function p(){return l((0,a.moveChatPageRight)({pageId:d.id}))}return p}()})}),(0,n.createComponentVNode)(2,o.Stack.Item,{children:(0,n.createComponentVNode)(2,o.Button.Checkbox,{content:"Mute",checked:d.hideUnreadCount,icon:d.hideUnreadCount?"bell-slash":"bell",tooltip:"Disables unread counter",onClick:function(){function p(){return l((0,a.updateChatPage)({pageId:d.id,hideUnreadCount:!d.hideUnreadCount}))}return p}()})}),(0,n.createComponentVNode)(2,o.Stack.Item,{children:(0,n.createComponentVNode)(2,o.Button,{content:"Remove",icon:"times",color:"red",disabled:d.isMain,onClick:function(){function p(){return l((0,a.removeChatPage)({pageId:d.id}))}return p}()})})]}),(0,n.createComponentVNode)(2,o.Divider),(0,n.createComponentVNode)(2,o.Section,{title:"Messages to display",level:2,children:[u.MESSAGE_TYPES.filter(function(p){return!p.important&&!p.admin}).map(function(p){return(0,n.createComponentVNode)(2,o.Button.Checkbox,{checked:d.acceptedTypes[p.type],onClick:function(){function v(){return l((0,a.toggleAcceptedType)({pageId:d.id,type:p.type}))}return v}(),children:p.name},p.type)}),(0,n.createComponentVNode)(2,o.Collapsible,{mt:1,color:"transparent",title:"Admin stuff",children:u.MESSAGE_TYPES.filter(function(p){return!p.important&&p.admin}).map(function(p){return(0,n.createComponentVNode)(2,o.Button.Checkbox,{checked:d.acceptedTypes[p.type],onClick:function(){function v(){return l((0,a.toggleAcceptedType)({pageId:d.id,type:p.type}))}return v}(),children:p.name},p.type)})})]})]})}return h}()},44675:function(S,e,t){"use strict";e.__esModule=!0,e.ChatPanel=void 0;var n=t(89005),r=t(35840),o=t(36036),a=t(15916);function u(h,f){h.prototype=Object.create(f.prototype),h.prototype.constructor=h,s(h,f)}function s(h,f){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,d){return i.__proto__=d,i},s(h,f)}/**
+ */var c=n.ChatPageSettings=function(){function h(f,i){var d=(0,r.useSelector)(i,s.selectCurrentChatPage),l=(0,r.useDispatch)(i);return(0,e.createComponentVNode)(2,o.Section,{fill:!0,children:[(0,e.createComponentVNode)(2,o.Stack,{align:"center",children:[!d.isMain&&(0,e.createComponentVNode)(2,o.Stack.Item,{children:(0,e.createComponentVNode)(2,o.Button,{tooltip:"Reorder tab to the left",icon:"angle-left",onClick:function(){function g(){return l((0,a.moveChatPageLeft)({pageId:d.id}))}return g}()})}),(0,e.createComponentVNode)(2,o.Stack.Item,{grow:!0,ml:.5,children:(0,e.createComponentVNode)(2,o.Input,{width:"100%",value:d.name,onChange:function(){function g(v,p){return l((0,a.updateChatPage)({pageId:d.id,name:p}))}return g}()})}),!d.isMain&&(0,e.createComponentVNode)(2,o.Stack.Item,{ml:.5,children:(0,e.createComponentVNode)(2,o.Button,{tooltip:"Reorder tab to the right",icon:"angle-right",onClick:function(){function g(){return l((0,a.moveChatPageRight)({pageId:d.id}))}return g}()})}),(0,e.createComponentVNode)(2,o.Stack.Item,{children:(0,e.createComponentVNode)(2,o.Button.Checkbox,{content:"Mute",checked:d.hideUnreadCount,icon:d.hideUnreadCount?"bell-slash":"bell",tooltip:"Disables unread counter",onClick:function(){function g(){return l((0,a.updateChatPage)({pageId:d.id,hideUnreadCount:!d.hideUnreadCount}))}return g}()})}),(0,e.createComponentVNode)(2,o.Stack.Item,{children:(0,e.createComponentVNode)(2,o.Button,{content:"Remove",icon:"times",color:"red",disabled:d.isMain,onClick:function(){function g(){return l((0,a.removeChatPage)({pageId:d.id}))}return g}()})})]}),(0,e.createComponentVNode)(2,o.Divider),(0,e.createComponentVNode)(2,o.Section,{title:"Messages to display",level:2,children:[u.MESSAGE_TYPES.filter(function(g){return!g.important&&!g.admin}).map(function(g){return(0,e.createComponentVNode)(2,o.Button.Checkbox,{checked:d.acceptedTypes[g.type],onClick:function(){function v(){return l((0,a.toggleAcceptedType)({pageId:d.id,type:g.type}))}return v}(),children:g.name},g.type)}),(0,e.createComponentVNode)(2,o.Collapsible,{mt:1,color:"transparent",title:"Admin stuff",children:u.MESSAGE_TYPES.filter(function(g){return!g.important&&g.admin}).map(function(g){return(0,e.createComponentVNode)(2,o.Button.Checkbox,{checked:d.acceptedTypes[g.type],onClick:function(){function v(){return l((0,a.toggleAcceptedType)({pageId:d.id,type:g.type}))}return v}(),children:g.name},g.type)})})]})]})}return h}()},44675:function(E,n,t){"use strict";n.__esModule=!0,n.ChatPanel=void 0;var e=t(89005),r=t(35840),o=t(36036),a=t(15916);function u(h,f){h.prototype=Object.create(f.prototype),h.prototype.constructor=h,s(h,f)}function s(h,f){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,d){return i.__proto__=d,i},s(h,f)}/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
-*/var c=e.ChatPanel=function(h){function f(){var d;return d=h.call(this)||this,d.ref=(0,n.createRef)(),d.state={scrollTracking:!0},d.handleScrollTrackingChange=function(l){return d.setState({scrollTracking:l})},d}u(f,h);var i=f.prototype;return i.componentDidMount=function(){function d(){a.chatRenderer.mount(this.ref.current),a.chatRenderer.events.on("scrollTrackingChanged",this.handleScrollTrackingChange),this.componentDidUpdate()}return d}(),i.componentWillUnmount=function(){function d(){a.chatRenderer.events.off("scrollTrackingChanged",this.handleScrollTrackingChange)}return d}(),i.componentDidUpdate=function(){function d(l){requestAnimationFrame(function(){a.chatRenderer.ensureScrollTracking()});var p=!l||(0,r.shallowDiffers)(this.props,l);p&&a.chatRenderer.assignStyle({width:"100%","white-space":"pre-wrap","font-size":this.props.fontSize,"line-height":this.props.lineHeight})}return d}(),i.render=function(){function d(){var l=this.state.scrollTracking;return(0,n.createFragment)([(0,n.createVNode)(1,"div","Chat",null,1,null,null,this.ref),!l&&(0,n.createComponentVNode)(2,o.Button,{className:"Chat__scrollButton",icon:"arrow-down",onClick:function(){function p(){return a.chatRenderer.scrollToBottom()}return p}(),children:"Scroll to bottom"})],0)}return d}(),f}(n.Component)},41125:function(S,e,t){"use strict";e.__esModule=!0,e.ChatTabs=void 0;var n=t(89005),r=t(85307),o=t(36036),a=t(37152),u=t(23429),s=t(36471);/**
+*/var c=n.ChatPanel=function(h){function f(){var d;return d=h.call(this)||this,d.ref=(0,e.createRef)(),d.state={scrollTracking:!0},d.handleScrollTrackingChange=function(l){return d.setState({scrollTracking:l})},d}u(f,h);var i=f.prototype;return i.componentDidMount=function(){function d(){a.chatRenderer.mount(this.ref.current),a.chatRenderer.events.on("scrollTrackingChanged",this.handleScrollTrackingChange),this.componentDidUpdate()}return d}(),i.componentWillUnmount=function(){function d(){a.chatRenderer.events.off("scrollTrackingChanged",this.handleScrollTrackingChange)}return d}(),i.componentDidUpdate=function(){function d(l){requestAnimationFrame(function(){a.chatRenderer.ensureScrollTracking()});var g=!l||(0,r.shallowDiffers)(this.props,l);g&&a.chatRenderer.assignStyle({width:"100%","white-space":"pre-wrap","font-size":this.props.fontSize,"line-height":this.props.lineHeight})}return d}(),i.render=function(){function d(){var l=this.state.scrollTracking;return(0,e.createFragment)([(0,e.createVNode)(1,"div","Chat",null,1,null,null,this.ref),!l&&(0,e.createComponentVNode)(2,o.Button,{className:"Chat__scrollButton",icon:"arrow-down",onClick:function(){function g(){return a.chatRenderer.scrollToBottom()}return g}(),children:"Scroll to bottom"})],0)}return d}(),f}(e.Component)},41125:function(E,n,t){"use strict";n.__esModule=!0,n.ChatTabs=void 0;var e=t(89005),r=t(85307),o=t(36036),a=t(37152),u=t(23429),s=t(36471);/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var c=function(i){var d=i.value;return(0,n.createComponentVNode)(2,o.Box,{style:{"font-size":"0.7em","border-radius":"0.25em",width:"1.7em","line-height":"1.55em","background-color":"crimson",color:"#fff"},children:Math.min(d,99)})},h=e.ChatTabs=function(){function f(i,d){var l=(0,r.useSelector)(d,u.selectChatPages),p=(0,r.useSelector)(d,u.selectCurrentChatPage),v=(0,r.useDispatch)(d);return(0,n.createComponentVNode)(2,o.Flex,{align:"center",children:[(0,n.createComponentVNode)(2,o.Flex.Item,{children:(0,n.createComponentVNode)(2,o.Tabs,{textAlign:"center",children:l.map(function(g){return(0,n.createComponentVNode)(2,o.Tabs.Tab,{selected:g===p,rightSlot:!g.hideUnreadCount&&g.unreadCount>0&&(0,n.createComponentVNode)(2,c,{value:g.unreadCount}),onClick:function(){function m(){return v((0,a.changeChatPage)({pageId:g.id}))}return m}(),children:g.name},g.id)})})}),(0,n.createComponentVNode)(2,o.Flex.Item,{ml:1,children:(0,n.createComponentVNode)(2,o.Button,{color:"transparent",icon:"plus",onClick:function(){function g(){v((0,a.addChatPage)()),v((0,s.openChatSettings)())}return g}()})})]})}return f}()},37152:function(S,e,t){"use strict";e.__esModule=!0,e.updateMessageCount=e.updateChatPage=e.toggleAcceptedType=e.saveChatToDisk=e.removeChatPage=e.rebuildChat=e.moveChatPageRight=e.moveChatPageLeft=e.loadChat=e.clearChat=e.changeScrollTracking=e.changeChatPage=e.addChatPage=void 0;var n=t(85307),r=t(41950);/**
+ */var c=function(i){var d=i.value;return(0,e.createComponentVNode)(2,o.Box,{style:{"font-size":"0.7em","border-radius":"0.25em",width:"1.7em","line-height":"1.55em","background-color":"crimson",color:"#fff"},children:Math.min(d,99)})},h=n.ChatTabs=function(){function f(i,d){var l=(0,r.useSelector)(d,u.selectChatPages),g=(0,r.useSelector)(d,u.selectCurrentChatPage),v=(0,r.useDispatch)(d);return(0,e.createComponentVNode)(2,o.Flex,{align:"center",children:[(0,e.createComponentVNode)(2,o.Flex.Item,{children:(0,e.createComponentVNode)(2,o.Tabs,{textAlign:"center",children:l.map(function(p){return(0,e.createComponentVNode)(2,o.Tabs.Tab,{selected:p===g,rightSlot:!p.hideUnreadCount&&p.unreadCount>0&&(0,e.createComponentVNode)(2,c,{value:p.unreadCount}),onClick:function(){function m(){return v((0,a.changeChatPage)({pageId:p.id}))}return m}(),children:p.name},p.id)})})}),(0,e.createComponentVNode)(2,o.Flex.Item,{ml:1,children:(0,e.createComponentVNode)(2,o.Button,{color:"transparent",icon:"plus",onClick:function(){function p(){v((0,a.addChatPage)()),v((0,s.openChatSettings)())}return p}()})})]})}return f}()},37152:function(E,n,t){"use strict";n.__esModule=!0,n.updateMessageCount=n.updateChatPage=n.toggleAcceptedType=n.saveChatToDisk=n.removeChatPage=n.rebuildChat=n.moveChatPageRight=n.moveChatPageLeft=n.loadChat=n.clearChat=n.changeScrollTracking=n.changeChatPage=n.addChatPage=void 0;var e=t(85307),r=t(41950);/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var o=e.loadChat=(0,n.createAction)("chat/load"),a=e.rebuildChat=(0,n.createAction)("chat/rebuild"),u=e.clearChat=(0,n.createAction)("chat/clear"),s=e.updateMessageCount=(0,n.createAction)("chat/updateMessageCount"),c=e.addChatPage=(0,n.createAction)("chat/addPage",function(){return{payload:(0,r.createPage)()}}),h=e.changeChatPage=(0,n.createAction)("chat/changePage"),f=e.updateChatPage=(0,n.createAction)("chat/updatePage"),i=e.toggleAcceptedType=(0,n.createAction)("chat/toggleAcceptedType"),d=e.removeChatPage=(0,n.createAction)("chat/removePage"),l=e.changeScrollTracking=(0,n.createAction)("chat/changeScrollTracking"),p=e.saveChatToDisk=(0,n.createAction)("chat/saveToDisk"),v=e.moveChatPageLeft=(0,n.createAction)("chat/movePageLeft"),g=e.moveChatPageRight=(0,n.createAction)("chat/movePageRight")},69126:function(S,e){"use strict";e.__esModule=!0,e.MESSAGE_TYPE_WARNING=e.MESSAGE_TYPE_UNKNOWN=e.MESSAGE_TYPE_SYSTEM=e.MESSAGE_TYPE_RADIO=e.MESSAGE_TYPE_OOC=e.MESSAGE_TYPE_MENTORPM=e.MESSAGE_TYPE_MENTORCHAT=e.MESSAGE_TYPE_LOCALCHAT=e.MESSAGE_TYPE_INTERNAL=e.MESSAGE_TYPE_INFO=e.MESSAGE_TYPE_EVENTCHAT=e.MESSAGE_TYPE_DEBUG=e.MESSAGE_TYPE_DEADCHAT=e.MESSAGE_TYPE_COMBAT=e.MESSAGE_TYPE_ATTACKLOG=e.MESSAGE_TYPE_ADMINPM=e.MESSAGE_TYPE_ADMINLOG=e.MESSAGE_TYPE_ADMINCHAT=e.MESSAGE_TYPES=e.MESSAGE_SAVE_INTERVAL=e.MESSAGE_PRUNE_INTERVAL=e.MAX_VISIBLE_MESSAGES=e.MAX_PERSISTED_MESSAGES=e.IMAGE_RETRY_MESSAGE_AGE=e.IMAGE_RETRY_LIMIT=e.IMAGE_RETRY_DELAY=e.COMBINE_MAX_TIME_WINDOW=e.COMBINE_MAX_MESSAGES=void 0;/**
+ */var o=n.loadChat=(0,e.createAction)("chat/load"),a=n.rebuildChat=(0,e.createAction)("chat/rebuild"),u=n.clearChat=(0,e.createAction)("chat/clear"),s=n.updateMessageCount=(0,e.createAction)("chat/updateMessageCount"),c=n.addChatPage=(0,e.createAction)("chat/addPage",function(){return{payload:(0,r.createPage)()}}),h=n.changeChatPage=(0,e.createAction)("chat/changePage"),f=n.updateChatPage=(0,e.createAction)("chat/updatePage"),i=n.toggleAcceptedType=(0,e.createAction)("chat/toggleAcceptedType"),d=n.removeChatPage=(0,e.createAction)("chat/removePage"),l=n.changeScrollTracking=(0,e.createAction)("chat/changeScrollTracking"),g=n.saveChatToDisk=(0,e.createAction)("chat/saveToDisk"),v=n.moveChatPageLeft=(0,e.createAction)("chat/movePageLeft"),p=n.moveChatPageRight=(0,e.createAction)("chat/movePageRight")},69126:function(E,n){"use strict";n.__esModule=!0,n.MESSAGE_TYPE_WARNING=n.MESSAGE_TYPE_UNKNOWN=n.MESSAGE_TYPE_SYSTEM=n.MESSAGE_TYPE_RADIO=n.MESSAGE_TYPE_OOC=n.MESSAGE_TYPE_MENTORPM=n.MESSAGE_TYPE_MENTORCHAT=n.MESSAGE_TYPE_LOCALCHAT=n.MESSAGE_TYPE_INTERNAL=n.MESSAGE_TYPE_INFO=n.MESSAGE_TYPE_EVENTCHAT=n.MESSAGE_TYPE_DEBUG=n.MESSAGE_TYPE_DEADCHAT=n.MESSAGE_TYPE_COMBAT=n.MESSAGE_TYPE_ATTACKLOG=n.MESSAGE_TYPE_ADMINPM=n.MESSAGE_TYPE_ADMINLOG=n.MESSAGE_TYPE_ADMINCHAT=n.MESSAGE_TYPES=n.MESSAGE_SAVE_INTERVAL=n.MESSAGE_PRUNE_INTERVAL=n.MAX_VISIBLE_MESSAGES=n.MAX_PERSISTED_MESSAGES=n.IMAGE_RETRY_MESSAGE_AGE=n.IMAGE_RETRY_LIMIT=n.IMAGE_RETRY_DELAY=n.COMBINE_MAX_TIME_WINDOW=n.COMBINE_MAX_MESSAGES=void 0;/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
- */var t=e.MAX_VISIBLE_MESSAGES=2500,n=e.MAX_PERSISTED_MESSAGES=1e3,r=e.MESSAGE_SAVE_INTERVAL=1e4,o=e.MESSAGE_PRUNE_INTERVAL=6e4,a=e.COMBINE_MAX_TIME_WINDOW=5e3,u=e.COMBINE_MAX_MESSAGES=5,s=e.IMAGE_RETRY_DELAY=250,c=e.IMAGE_RETRY_LIMIT=10,h=e.IMAGE_RETRY_MESSAGE_AGE=6e4,f=e.MESSAGE_TYPE_UNKNOWN="unknown",i=e.MESSAGE_TYPE_INTERNAL="internal",d=e.MESSAGE_TYPE_SYSTEM="system",l=e.MESSAGE_TYPE_LOCALCHAT="localchat",p=e.MESSAGE_TYPE_RADIO="radio",v=e.MESSAGE_TYPE_INFO="info",g=e.MESSAGE_TYPE_WARNING="warning",m=e.MESSAGE_TYPE_DEADCHAT="deadchat",C=e.MESSAGE_TYPE_OOC="ooc",T=e.MESSAGE_TYPE_ADMINPM="adminpm",I=e.MESSAGE_TYPE_MENTORPM="mentorpm",b=e.MESSAGE_TYPE_COMBAT="combat",y=e.MESSAGE_TYPE_ADMINCHAT="adminchat",E=e.MESSAGE_TYPE_MENTORCHAT="mentorchat",A=e.MESSAGE_TYPE_EVENTCHAT="eventchat",N=e.MESSAGE_TYPE_ADMINLOG="adminlog",M=e.MESSAGE_TYPE_ATTACKLOG="attacklog",w=e.MESSAGE_TYPE_DEBUG="debug",L=e.MESSAGE_TYPES=[{type:d,name:"System Messages",description:"Messages from your client, always enabled",selector:".boldannounceooc",important:!0},{type:l,name:"Local",description:"In-character local messages (say, emote, etc)",selector:".say, .emote"},{type:p,name:"Radio",description:"All departments of radio messages",selector:".alert, .syndradio, .centradio, .airadio, .entradio, .comradio, .secradio, .engradio, .medradio, .sciradio, .supradio, .srvradio, .expradio, .radio, .deptradio, .newscaster"},{type:v,name:"Info",description:"Non-urgent messages from the game and items",selector:".notice:not(.pm), .adminnotice, .info, .sinister, .cult"},{type:g,name:"Warnings",description:"Urgent messages from the game and items",selector:".warning:not(.pm), .critical, .userdanger, .italics, .boldannounceic, .boldwarning"},{type:m,name:"Deadchat",description:"All of deadchat",selector:".deadsay"},{type:C,name:"OOC",description:"The bluewall of global OOC messages",selector:".ooc, .adminooc"},{type:T,name:"Admin PMs",description:"Messages to/from admins (adminhelp)",selector:".adminpm, .adminhelp, .adminticket, .adminticketalt"},{type:I,name:"Mentor PMs",description:"Messages to/from mentors (mentorhelp)",selector:".mentorpm, .mentorhelp"},{type:b,name:"Combat Log",description:"Urist McTraitor has stabbed you with a knife!",selector:".danger"},{type:f,name:"Unsorted",description:"Everything we could not sort, always enabled"},{type:y,name:"Admin Chat",description:"ASAY messages",selector:".admin_channel, .adminsay",admin:!0},{type:E,name:"Mentor Chat",description:"MSAY messages",selector:".mentor_channel",admin:!0},{type:N,name:"Admin Log",description:"ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z",selector:".log_message",admin:!0},{type:M,name:"Attack Log",description:"Urist McTraitor has shot John Doe",admin:!0},{type:w,name:"Debug Log",description:"DEBUG: SSPlanets subsystem Recover().",selector:".pr_announce, .debug",admin:!0}]},96835:function(S,e,t){"use strict";e.__esModule=!0,e.chatReducer=e.chatMiddleware=e.ChatTabs=e.ChatPanel=e.ChatPageSettings=void 0;var n=t(15039);e.ChatPageSettings=n.ChatPageSettings;var r=t(44675);e.ChatPanel=r.ChatPanel;var o=t(41125);e.ChatTabs=o.ChatTabs;var a=t(84807);e.chatMiddleware=a.chatMiddleware;var u=t(40147);e.chatReducer=u.chatReducer},84807:function(S,e,t){"use strict";e.__esModule=!0,e.chatMiddleware=void 0;var n=i(t(22734)),r=t(27108),o=t(36471),a=t(77034),u=t(37152),s=t(69126),c=t(41950),h=t(15916),f=t(23429);function i(y){return y&&y.__esModule?y:{default:y}}function d(y,E){var A=typeof Symbol!="undefined"&&y[Symbol.iterator]||y["@@iterator"];if(A)return(A=A.call(y)).next.bind(A);if(Array.isArray(y)||(A=l(y))||E&&y&&typeof y.length=="number"){A&&(y=A);var N=0;return function(){return N>=y.length?{done:!0}:{done:!1,value:y[N++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(y,E){if(y){if(typeof y=="string")return p(y,E);var A={}.toString.call(y).slice(8,-1);return A==="Object"&&y.constructor&&(A=y.constructor.name),A==="Map"||A==="Set"?Array.from(y):A==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(A)?p(y,E):void 0}}function p(y,E){(E==null||E>y.length)&&(E=y.length);for(var A=0,N=Array(E);A=0;--St){var ut=this.tryEntries[St],gt=ut.completion;if(ut.tryLoc==="root")return Tt("end");if(ut.tryLoc<=this.prev){var Ot=N.call(ut,"catchLoc"),q=N.call(ut,"finallyLoc");if(Ot&&q){if(this.prev=0;--Tt){var St=this.tryEntries[Tt];if(St.tryLoc<=this.prev&&N.call(St,"finallyLoc")&&this.prev=0;--ct){var Tt=this.tryEntries[ct];if(Tt.finallyLoc===X)return this.complete(Tt.completion,Tt.afterLoc),et(Tt),$}}return _}(),catch:function(){function _(X){for(var ct=this.tryEntries.length-1;ct>=0;--ct){var Tt=this.tryEntries[ct];if(Tt.tryLoc===X){var St=Tt.completion;if(St.type==="throw"){var ut=St.arg;et(Tt)}return ut}}throw Error("illegal catch attempt")}return _}(),delegateYield:function(){function _(X,ct,Tt){return this.delegate={iterator:yt(X),resultName:ct,nextLoc:Tt},this.method==="next"&&(this.arg=y),$}return _}()},E}function g(y,E,A,N,M,w,L){try{var B=y[w](L),x=B.value}catch(j){return void A(j)}B.done?E(x):Promise.resolve(x).then(N,M)}function m(y){return function(){var E=this,A=arguments;return new Promise(function(N,M){var w=y.apply(E,A);function L(x){g(w,N,M,L,B,"next",x)}function B(x){g(w,N,M,L,B,"throw",x)}L(void 0)})}}/**
+ */var t=n.MAX_VISIBLE_MESSAGES=2500,e=n.MAX_PERSISTED_MESSAGES=1e3,r=n.MESSAGE_SAVE_INTERVAL=1e4,o=n.MESSAGE_PRUNE_INTERVAL=6e4,a=n.COMBINE_MAX_TIME_WINDOW=5e3,u=n.COMBINE_MAX_MESSAGES=5,s=n.IMAGE_RETRY_DELAY=250,c=n.IMAGE_RETRY_LIMIT=10,h=n.IMAGE_RETRY_MESSAGE_AGE=6e4,f=n.MESSAGE_TYPE_UNKNOWN="unknown",i=n.MESSAGE_TYPE_INTERNAL="internal",d=n.MESSAGE_TYPE_SYSTEM="system",l=n.MESSAGE_TYPE_LOCALCHAT="localchat",g=n.MESSAGE_TYPE_RADIO="radio",v=n.MESSAGE_TYPE_INFO="info",p=n.MESSAGE_TYPE_WARNING="warning",m=n.MESSAGE_TYPE_DEADCHAT="deadchat",C=n.MESSAGE_TYPE_OOC="ooc",T=n.MESSAGE_TYPE_ADMINPM="adminpm",A=n.MESSAGE_TYPE_MENTORPM="mentorpm",b=n.MESSAGE_TYPE_COMBAT="combat",y=n.MESSAGE_TYPE_ADMINCHAT="adminchat",S=n.MESSAGE_TYPE_MENTORCHAT="mentorchat",I=n.MESSAGE_TYPE_EVENTCHAT="eventchat",N=n.MESSAGE_TYPE_ADMINLOG="adminlog",M=n.MESSAGE_TYPE_ATTACKLOG="attacklog",w=n.MESSAGE_TYPE_DEBUG="debug",L=n.MESSAGE_TYPES=[{type:d,name:"System Messages",description:"Messages from your client, always enabled",selector:".boldannounceooc",important:!0},{type:l,name:"Local",description:"In-character local messages (say, emote, etc)",selector:".say, .emote"},{type:g,name:"Radio",description:"All departments of radio messages",selector:".alert, .syndradio, .centradio, .airadio, .entradio, .comradio, .secradio, .engradio, .medradio, .sciradio, .supradio, .srvradio, .expradio, .radio, .deptradio, .newscaster"},{type:v,name:"Info",description:"Non-urgent messages from the game and items",selector:".notice:not(.pm), .adminnotice, .info, .sinister, .cult"},{type:p,name:"Warnings",description:"Urgent messages from the game and items",selector:".warning:not(.pm), .critical, .userdanger, .italics, .boldannounceic, .boldwarning"},{type:m,name:"Deadchat",description:"All of deadchat",selector:".deadsay"},{type:C,name:"OOC",description:"The bluewall of global OOC messages",selector:".ooc, .adminooc"},{type:T,name:"Admin PMs",description:"Messages to/from admins (adminhelp)",selector:".adminpm, .adminhelp, .adminticket, .adminticketalt"},{type:A,name:"Mentor PMs",description:"Messages to/from mentors (mentorhelp)",selector:".mentorpm, .mentorhelp"},{type:b,name:"Combat Log",description:"Urist McTraitor has stabbed you with a knife!",selector:".danger"},{type:f,name:"Unsorted",description:"Everything we could not sort, always enabled"},{type:y,name:"Admin Chat",description:"ASAY messages",selector:".admin_channel, .adminsay",admin:!0},{type:S,name:"Mentor Chat",description:"MSAY messages",selector:".mentor_channel",admin:!0},{type:N,name:"Admin Log",description:"ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z",selector:".log_message",admin:!0},{type:M,name:"Attack Log",description:"Urist McTraitor has shot John Doe",admin:!0},{type:w,name:"Debug Log",description:"DEBUG: SSPlanets subsystem Recover().",selector:".pr_announce, .debug",admin:!0}]},96835:function(E,n,t){"use strict";n.__esModule=!0,n.chatReducer=n.chatMiddleware=n.ChatTabs=n.ChatPanel=n.ChatPageSettings=void 0;var e=t(15039);n.ChatPageSettings=e.ChatPageSettings;var r=t(44675);n.ChatPanel=r.ChatPanel;var o=t(41125);n.ChatTabs=o.ChatTabs;var a=t(84807);n.chatMiddleware=a.chatMiddleware;var u=t(40147);n.chatReducer=u.chatReducer},84807:function(E,n,t){"use strict";n.__esModule=!0,n.chatMiddleware=void 0;var e=i(t(22734)),r=t(27108),o=t(36471),a=t(77034),u=t(37152),s=t(69126),c=t(41950),h=t(15916),f=t(23429);function i(y){return y&&y.__esModule?y:{default:y}}function d(y,S){var I=typeof Symbol!="undefined"&&y[Symbol.iterator]||y["@@iterator"];if(I)return(I=I.call(y)).next.bind(I);if(Array.isArray(y)||(I=l(y))||S&&y&&typeof y.length=="number"){I&&(y=I);var N=0;return function(){return N>=y.length?{done:!0}:{done:!1,value:y[N++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(y,S){if(y){if(typeof y=="string")return g(y,S);var I={}.toString.call(y).slice(8,-1);return I==="Object"&&y.constructor&&(I=y.constructor.name),I==="Map"||I==="Set"?Array.from(y):I==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(I)?g(y,S):void 0}}function g(y,S){(S==null||S>y.length)&&(S=y.length);for(var I=0,N=Array(S);I=0;--St){var ut=this.tryEntries[St],gt=ut.completion;if(ut.tryLoc==="root")return Tt("end");if(ut.tryLoc<=this.prev){var Ot=N.call(ut,"catchLoc"),q=N.call(ut,"finallyLoc");if(Ot&&q){if(this.prev=0;--Tt){var St=this.tryEntries[Tt];if(St.tryLoc<=this.prev&&N.call(St,"finallyLoc")&&this.prev=0;--ct){var Tt=this.tryEntries[ct];if(Tt.finallyLoc===X)return this.complete(Tt.completion,Tt.afterLoc),et(Tt),$}}return _}(),catch:function(){function _(X){for(var ct=this.tryEntries.length-1;ct>=0;--ct){var Tt=this.tryEntries[ct];if(Tt.tryLoc===X){var St=Tt.completion;if(St.type==="throw"){var ut=St.arg;et(Tt)}return ut}}throw Error("illegal catch attempt")}return _}(),delegateYield:function(){function _(X,ct,Tt){return this.delegate={iterator:yt(X),resultName:ct,nextLoc:Tt},this.method==="next"&&(this.arg=y),$}return _}()},S}function p(y,S,I,N,M,w,L){try{var B=y[w](L),V=B.value}catch(j){return void I(j)}B.done?S(V):Promise.resolve(V).then(N,M)}function m(y){return function(){var S=this,I=arguments;return new Promise(function(N,M){var w=y.apply(S,I);function L(V){p(w,N,M,L,B,"next",V)}function B(V){p(w,N,M,L,B,"throw",V)}L(void 0)})}}/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
-*/var C=["a","iframe","link","video"],T=function(){var y=m(v().mark(function(){function E(A){var N,M,w;return v().wrap(function(){function L(B){for(;;)switch(B.prev=B.next){case 0:N=(0,f.selectChat)(A.getState()),M=Math.max(0,h.chatRenderer.messages.length-s.MAX_PERSISTED_MESSAGES),w=h.chatRenderer.messages.slice(M).map(function(x){return(0,c.serializeMessage)(x)}),r.storage.set("chat-state",N),r.storage.set("chat-messages",w);case 5:case"end":return B.stop()}}return L}(),E)}return E}()));return function(){function E(A){return y.apply(this,arguments)}return E}()}(),I=function(){var y=m(v().mark(function(){function E(A){var N,M,w,L,B,x,j;return v().wrap(function(){function V(Y){for(;;)switch(Y.prev=Y.next){case 0:return Y.next=2,Promise.all([r.storage.get("chat-state"),r.storage.get("chat-messages")]);case 2:if(N=Y.sent,M=N[0],w=N[1],!(M&&M.version<=4)){Y.next=8;break}return A.dispatch((0,u.loadChat)()),Y.abrupt("return");case 8:if(w){for(L=d(w);!(B=L()).done;)x=B.value,x.html&&(x.html=n.default.sanitize(x.html,{FORBID_TAGS:C}));j=[].concat(w,[(0,c.createMessage)({type:"internal/reconnected"})]),h.chatRenderer.processBatch(j,{prepend:!0})}A.dispatch((0,u.loadChat)(M));case 10:case"end":return Y.stop()}}return V}(),E)}return E}()));return function(){function E(A){return y.apply(this,arguments)}return E}()}(),b=e.chatMiddleware=function(){function y(E){var A=!1,N=!1,M=[],w=[];return h.chatRenderer.events.on("batchProcessed",function(L){N&&E.dispatch((0,u.updateMessageCount)(L))}),h.chatRenderer.events.on("scrollTrackingChanged",function(L){E.dispatch((0,u.changeScrollTracking)(L))}),setInterval(function(){return T(E)},s.MESSAGE_SAVE_INTERVAL),function(L){return function(B){var x=B.type,j=B.payload;if(A||(A=!0,I(E)),x==="chat/message"){var V;try{V=JSON.parse(j)}catch(tt){return}var Y=V.sequence;if(M.includes(Y))return;var D=M.length;t:if(D>0){if(w.includes(Y)){w.splice(w.indexOf(Y),1);break t}var U=M[D-1]+1;if(Y!==U)for(var G=U;G=l.length?{done:!0}:{done:!1,value:l[g++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(l,p){if(l){if(typeof l=="string")return u(l,p);var v={}.toString.call(l).slice(8,-1);return v==="Object"&&l.constructor&&(v=l.constructor.name),v==="Map"||v==="Set"?Array.from(l):v==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v)?u(l,p):void 0}}function u(l,p){(p==null||p>l.length)&&(p=l.length);for(var v=0,g=Array(p);v0){if(w.includes(K)){w.splice(w.indexOf(K),1);break t}var U=M[D-1]+1;if(K!==U)for(var G=U;G=l.length?{done:!0}:{done:!1,value:l[p++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(l,g){if(l){if(typeof l=="string")return u(l,g);var v={}.toString.call(l).slice(8,-1);return v==="Object"&&l.constructor&&(v=l.constructor.name),v==="Map"||v==="Set"?Array.from(l):v==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v)?u(l,g):void 0}}function u(l,g){(g==null||g>l.length)&&(g=l.length);for(var v=0,p=Array(g);v=l.length?{done:!0}:{done:!1,value:l[g++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(l,p){if(l){if(typeof l=="string")return h(l,p);var v={}.toString.call(l).slice(8,-1);return v==="Object"&&l.constructor&&(v=l.constructor.name),v==="Map"||v==="Set"?Array.from(l):v==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v)?h(l,p):void 0}}function h(l,p){(p==null||p>l.length)&&(p=l.length);for(var v=0,g=Array(p);v0&&(H[ht.id]=Object.assign({},ht,{unreadCount:ht.unreadCount+k}))}return Object.assign({},p,{pageById:H})}if(g===n.addChatPage.type){var ot;return Object.assign({},p,{currentPageId:m.id,pages:[].concat(p.pages,[m.id]),pageById:Object.assign({},p.pageById,(ot={},ot[m.id]=m,ot))})}if(g===n.changeChatPage.type){var pt,Nt=m.pageId,rt=Object.assign({},p.pageById[Nt],{unreadCount:0});return Object.assign({},p,{currentPageId:Nt,pageById:Object.assign({},p.pageById,(pt={},pt[Nt]=rt,pt))})}if(g===n.updateChatPage.type){var et,dt=m.pageId,yt=u(m,o),_=Object.assign({},p.pageById[dt],yt);return Object.assign({},p,{pageById:Object.assign({},p.pageById,(et={},et[dt]=_,et))})}if(g===n.toggleAcceptedType.type){var X,ct=m.pageId,Tt=m.type,St=Object.assign({},p.pageById[ct]);return St.acceptedTypes=Object.assign({},St.acceptedTypes),St.acceptedTypes[Tt]=!St.acceptedTypes[Tt],Object.assign({},p,{pageById:Object.assign({},p.pageById,(X={},X[ct]=St,X))})}if(g===n.removeChatPage.type){var ut=m.pageId,gt=Object.assign({},p,{pages:[].concat(p.pages),pageById:Object.assign({},p.pageById)});return delete gt.pageById[ut],gt.pages=gt.pages.filter(function(Pt){return Pt!==ut}),gt.pages.length===0&&(gt.pages.push(f.id),gt.pageById[f.id]=f,gt.currentPageId=f.id),(!gt.currentPageId||gt.currentPageId===ut)&&(gt.currentPageId=gt.pages[0]),gt}if(g===n.moveChatPageLeft.type){var Ot=m.pageId,q=Object.assign({},p,{pages:[].concat(p.pages),pageById:Object.assign({},p.pageById)}),ft=q.pageById[Ot],mt=q.pages.indexOf(ft.id),At=mt-1;if(mt>0&&At>0){var Dt=q.pages[mt];q.pages[mt]=q.pages[At],q.pages[At]=Dt}return q}if(g===n.moveChatPageRight.type){var jt=m.pageId,bt=Object.assign({},p,{pages:[].concat(p.pages),pageById:Object.assign({},p.pageById)}),lt=bt.pageById[jt],vt=bt.pages.indexOf(lt.id),It=vt+1;if(vt>0&&It=b.length?{done:!0}:{done:!1,value:b[A++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function h(b,y){if(b){if(typeof b=="string")return f(b,y);var E={}.toString.call(b).slice(8,-1);return E==="Object"&&b.constructor&&(E=b.constructor.name),E==="Map"||E==="Set"?Array.from(b):E==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(E)?f(b,y):void 0}}function f(b,y){(y==null||y>b.length)&&(y=b.length);for(var E=0,A=Array(y);E=l.length?{done:!0}:{done:!1,value:l[p++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(l,g){if(l){if(typeof l=="string")return h(l,g);var v={}.toString.call(l).slice(8,-1);return v==="Object"&&l.constructor&&(v=l.constructor.name),v==="Map"||v==="Set"?Array.from(l):v==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v)?h(l,g):void 0}}function h(l,g){(g==null||g>l.length)&&(g=l.length);for(var v=0,p=Array(g);v0&&(W[ht.id]=Object.assign({},ht,{unreadCount:ht.unreadCount+k}))}return Object.assign({},g,{pageById:W})}if(p===e.addChatPage.type){var ot;return Object.assign({},g,{currentPageId:m.id,pages:[].concat(g.pages,[m.id]),pageById:Object.assign({},g.pageById,(ot={},ot[m.id]=m,ot))})}if(p===e.changeChatPage.type){var pt,Nt=m.pageId,rt=Object.assign({},g.pageById[Nt],{unreadCount:0});return Object.assign({},g,{currentPageId:Nt,pageById:Object.assign({},g.pageById,(pt={},pt[Nt]=rt,pt))})}if(p===e.updateChatPage.type){var et,dt=m.pageId,yt=u(m,o),_=Object.assign({},g.pageById[dt],yt);return Object.assign({},g,{pageById:Object.assign({},g.pageById,(et={},et[dt]=_,et))})}if(p===e.toggleAcceptedType.type){var X,ct=m.pageId,Tt=m.type,St=Object.assign({},g.pageById[ct]);return St.acceptedTypes=Object.assign({},St.acceptedTypes),St.acceptedTypes[Tt]=!St.acceptedTypes[Tt],Object.assign({},g,{pageById:Object.assign({},g.pageById,(X={},X[ct]=St,X))})}if(p===e.removeChatPage.type){var ut=m.pageId,gt=Object.assign({},g,{pages:[].concat(g.pages),pageById:Object.assign({},g.pageById)});return delete gt.pageById[ut],gt.pages=gt.pages.filter(function(Pt){return Pt!==ut}),gt.pages.length===0&&(gt.pages.push(f.id),gt.pageById[f.id]=f,gt.currentPageId=f.id),(!gt.currentPageId||gt.currentPageId===ut)&&(gt.currentPageId=gt.pages[0]),gt}if(p===e.moveChatPageLeft.type){var Ot=m.pageId,q=Object.assign({},g,{pages:[].concat(g.pages),pageById:Object.assign({},g.pageById)}),ft=q.pageById[Ot],mt=q.pages.indexOf(ft.id),At=mt-1;if(mt>0&&At>0){var Dt=q.pages[mt];q.pages[mt]=q.pages[At],q.pages[At]=Dt}return q}if(p===e.moveChatPageRight.type){var jt=m.pageId,bt=Object.assign({},g,{pages:[].concat(g.pages),pageById:Object.assign({},g.pageById)}),lt=bt.pageById[jt],vt=bt.pages.indexOf(lt.id),It=vt+1;if(vt>0&&It=b.length?{done:!0}:{done:!1,value:b[I++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function h(b,y){if(b){if(typeof b=="string")return f(b,y);var S={}.toString.call(b).slice(8,-1);return S==="Object"&&b.constructor&&(S=b.constructor.name),S==="Map"||S==="Set"?Array.from(b):S==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(S)?f(b,y):void 0}}function f(b,y){(y==null||y>b.length)&&(y=b.length);for(var S=0,I=Array(y);S=a.IMAGE_RETRY_LIMIT){i.error("failed to load an image after "+A+" attempts");return}var N=E.src;E.src=null,E.src=N+"#"+A,E.setAttribute("data-reload-n",A+1)},a.IMAGE_RETRY_DELAY)},C=function(y){var E=y.node,A=y.times;if(!(!E||!A)){var N=E.querySelector(".Chat__badge"),M=N||document.createElement("div");M.textContent=A,M.className=(0,r.classes)(["Chat__badge","Chat__badge--animate"]),requestAnimationFrame(function(){M.className="Chat__badge"}),N||E.appendChild(M)}},T=function(){function b(){var E=this;this.loaded=!1,this.rootNode=null,this.queue=[],this.messages=[],this.visibleMessages=[],this.page=null,this.events=new n.EventEmitter,this.scrollNode=null,this.scrollTracking=!0,this.handleScroll=function(A){var N=E.scrollNode,M=N.scrollHeight,w=N.scrollTop+N.offsetHeight,L=Math.abs(M-w)0&&(this.processBatch(this.queue),this.queue=[])}return E}(),y.assignStyle=function(){function E(A){A===void 0&&(A={});for(var N=0,M=Object.keys(A);N{}[\]:;'"|~`_\-\\/]/g,G=String(B).split(/[,|]/).map(function(ot){return ot.trim()}).filter(function(ot){return ot&&ot.length>1&&D.test(ot)&&((D.lastIndex=0)||!0)}),K,$;if(G.length!==0){for(var H=[],tt=c(G),it;!(it=tt()).done;){var ht=it.value;if(ht.charAt(0)==="/"&&ht.charAt(ht.length-1)==="/"){var k=ht.substring(1,ht.length-1);if(/^(\[.*\]|\\.|.)$/.test(k))continue;H.push(k)}else K||(K=[]),ht=ht.replace(U,"\\$&"),K.push(ht)}var J=H.join("|"),nt="g"+(Y?"":"i");try{if(J)$=new RegExp("("+J+")",nt);else{var st=(V?"\\b":"")+"("+K.join("|")+")"+(V?"\\b":"");$=new RegExp(st,nt)}}catch(ot){$=null}M.highlightParsers||(M.highlightParsers=[]),M.highlightParsers.push({highlightWords:K,highlightRegex:$,highlightColor:x,highlightWholeMessage:j})}})}return E}(),y.scrollToBottom=function(){function E(){this.scrollNode.scrollTop=this.scrollNode.scrollHeight}return E}(),y.changePage=function(){function E(A){if(!this.isReady()){this.page=A,this.tryFlushQueue();return}this.page=A,this.rootNode.textContent="",this.visibleMessages=[];for(var N=document.createDocumentFragment(),M,w=c(this.messages),L;!(L=w()).done;){var B=L.value;(0,u.canPageAcceptType)(A,B.type)&&(M=B.node,N.appendChild(M),this.visibleMessages.push(B))}M&&(this.rootNode.appendChild(N),M.scrollIntoView())}return E}(),y.getCombinableMessage=function(){function E(A){for(var N=Date.now(),M=this.visibleMessages.length,w=M-1,L=Math.max(0,M-a.COMBINE_MAX_MESSAGES),B=w;B>=L;B--){var x=this.visibleMessages[B],j=!x.type.startsWith(a.MESSAGE_TYPE_INTERNAL)&&(0,u.isSameMessage)(x,A)&&N0){this.visibleMessages=A.slice(N);for(var M=0;M0&&(this.messages=this.messages.slice(L),i.log("pruned "+L+" stored messages"))}}}return E}(),y.rebuildChat=function(){function E(){if(this.isReady()){for(var A=Math.max(0,this.messages.length-a.MAX_VISIBLE_MESSAGES),N=this.messages.slice(A),M=c(N),w;!(w=M()).done;){var L=w.value;L.node=void 0}this.rootNode.textContent="",this.messages=[],this.visibleMessages=[],this.processBatch(N,{notifyListeners:!1})}}return E}(),y.clearChat=function(){function E(){var A=this.visibleMessages;this.visibleMessages=[];for(var N=0;N\n\n\n\n'+x+"
\n\n