diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 4eea726f74..7287da6cb3 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -6308,7 +6308,9 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "alF" = ( -/obj/machinery/atmospherics/components/unary/tank/air, +/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "alG" = ( @@ -6702,28 +6704,21 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "amD" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, +/obj/item/trash/sosjerky, /turf/open/floor/plating, /area/maintenance/port/fore) "amE" = ( -/obj/structure/bed, -/obj/effect/landmark/xeno_spawn, -/obj/item/bedsheet, +/obj/item/electronics/airalarm, +/obj/item/circuitboard/machine/seed_extractor, +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "amF" = ( -/obj/machinery/computer/slot_machine{ - balance = 15; - money = 500 - }, -/obj/item/coin/iron, -/obj/item/coin/diamond, -/obj/item/coin/diamond, -/obj/item/coin/diamond, +/obj/machinery/atmospherics/components/unary/tank/air, /turf/open/floor/plating, /area/maintenance/port/fore) "amG" = ( @@ -7000,8 +6995,10 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "anj" = ( -/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ - dir = 8 +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -7012,23 +7009,25 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "anl" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 - }, +/obj/structure/bed, +/obj/effect/landmark/xeno_spawn, +/obj/item/bedsheet, /turf/open/floor/plating, /area/maintenance/port/fore) "anm" = ( -/obj/item/trash/sosjerky, +/obj/machinery/computer/slot_machine{ + balance = 15; + money = 500 + }, +/obj/item/coin/iron, +/obj/item/coin/diamond, +/obj/item/coin/diamond, +/obj/item/coin/diamond, /turf/open/floor/plating, /area/maintenance/port/fore) "ann" = ( -/obj/item/electronics/airalarm, -/obj/item/circuitboard/machine/seed_extractor, -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) "ano" = ( @@ -7201,16 +7200,21 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "anJ" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "anK" = ( -/obj/effect/decal/cleanable/egg_smudge, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb, /turf/open/floor/plating, /area/maintenance/port/fore) "anL" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/vomit, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "anM" = ( @@ -7413,8 +7417,8 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aok" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 6 +/obj/structure/chair{ + dir = 1 }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -7435,8 +7439,10 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aoo" = ( -/obj/structure/rack, -/obj/item/circuitboard/machine/monkey_recycler, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "aop" = ( @@ -7697,21 +7703,21 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aoR" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 10 }, +/obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/port/fore) "aoS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) "aoT" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -7719,17 +7725,13 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 9 }, -/obj/structure/bed, -/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/port/fore) "aoV" = ( /turf/open/space, /area/space) "aoW" = ( -/obj/structure/table, -/obj/item/stamp, -/obj/item/poster/random_official, +/obj/structure/grille, /turf/open/floor/plating, /area/maintenance/port/fore) "aoX" = ( @@ -8073,31 +8075,37 @@ /turf/open/floor/plasteel/dark, /area/security/brig) "apL" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/machinery/power/apc{ + areastring = "/area/maintenance/port/fore"; + dir = 1; + name = "Port Bow Maintenance APC"; + pixel_x = -1; + pixel_y = 26 }, -/turf/open/floor/plasteel, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, /area/maintenance/port/fore) "apM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/closed/wall, /area/maintenance/port/fore) "apN" = ( /turf/open/floor/plating, /area/construction/mining/aux_base) "apO" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 5 }, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "apP" = ( -/obj/effect/spawner/structure/window, +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "apQ" = ( @@ -8554,23 +8562,6 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/port/fore) -"aqK" = ( -/obj/structure/chair/stool, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) -"aqL" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"aqM" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 10 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/port/fore) "aqN" = ( /obj/structure/closet/secure_closet/warden, /obj/structure/sign/poster/official/ion_rifle{ @@ -8591,23 +8582,20 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "aqO" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plating, /area/maintenance/port/fore) "aqP" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/port/fore"; - dir = 1; - name = "Port Bow Maintenance APC"; - pixel_x = -1; - pixel_y = 26 +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -8925,30 +8913,18 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"arF" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 5 - }, -/turf/closed/wall, -/area/maintenance/port/fore) "arG" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/closed/wall, +/obj/effect/decal/cleanable/glass, +/obj/structure/table_frame, +/turf/open/floor/plating, /area/maintenance/port/fore) "arH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, /area/maintenance/port/fore) "arI" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -8956,11 +8932,8 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "arJ" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/door/airlock/maintenance/abandoned{ + req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -8968,44 +8941,38 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "arK" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, /area/maintenance/port/fore) "arL" = ( -/obj/structure/cable{ - icon_state = "1-8" +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/open/floor/plating, /area/maintenance/port/fore) "arM" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/turf/open/floor/plating, /area/maintenance/port/fore) "arN" = ( -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" }, /turf/open/floor/plating, /area/maintenance/port/fore) "arO" = ( -/obj/item/clothing/gloves/color/rainbow, -/obj/item/clothing/head/soft/rainbow, -/obj/item/clothing/shoes/sneakers/rainbow, -/obj/item/clothing/under/color/rainbow, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/maintenance/port/fore) "arP" = ( @@ -9106,12 +9073,15 @@ /turf/open/floor/plasteel/dark, /area/security/warden) "asc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "asd" = ( @@ -9121,11 +9091,9 @@ /turf/closed/wall, /area/crew_quarters/dorms) "ase" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 + icon_state = "1-2" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -9168,26 +9136,17 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "ash" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/atmospherics/components/trinary/filter{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/port/fore) "asi" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -9460,8 +9419,9 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "asO" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, /area/maintenance/port/fore) "asP" = ( /obj/structure/chair/stool, @@ -9632,10 +9592,10 @@ /turf/open/floor/wood, /area/crew_quarters/dorms) "atn" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 }, -/turf/closed/wall, +/turf/open/floor/plating, /area/maintenance/port/fore) "atp" = ( /obj/machinery/door/airlock/external{ @@ -9644,10 +9604,11 @@ /turf/open/floor/plating, /area/construction/mining/aux_base) "atq" = ( +/obj/item/wrench, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall, +/turf/open/floor/plating, /area/maintenance/port/fore) "atr" = ( /obj/structure/cable{ @@ -9764,14 +9725,18 @@ /turf/open/floor/plating, /area/security/vacantoffice/b) "atL" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "atM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" }, -/turf/closed/wall, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "atN" = ( /obj/structure/cable{ @@ -9787,25 +9752,24 @@ /turf/closed/wall, /area/maintenance/port/fore) "atP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/light/small{ + dir = 1 }, -/turf/closed/wall, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "atS" = ( /turf/closed/wall, /area/space/nearstation) "atU" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 }, /turf/open/floor/plating, /area/maintenance/port/fore) "atW" = ( /obj/structure/chair/stool, -/turf/open/floor/plating, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "atY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -10109,50 +10073,43 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "auV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 5 + }, +/turf/open/floor/plating, /area/maintenance/port/fore) "auX" = ( -/obj/structure/mirror{ - icon_state = "mirror_broke"; - pixel_y = 28 +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 }, -/obj/machinery/iv_drip, /turf/open/floor/plating, /area/maintenance/port/fore) "auY" = ( -/obj/structure/mirror{ - icon_state = "mirror_broke"; - pixel_y = 28 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 }, -/obj/item/shard{ - icon_state = "medium" - }, -/obj/item/circuitboard/computer/operating, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "auZ" = ( -/obj/structure/frame/computer, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/port/fore) "ava" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/chair, -/obj/item/reagent_containers/blood/random, +/obj/structure/table/glass, +/obj/item/storage/bag/trash, /turf/open/floor/plating, /area/maintenance/port/fore) "avb" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "damaged3" - }, -/area/space/nearstation) +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood, +/area/maintenance/port/fore) "avc" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/maintenance/port/fore) "avg" = ( /obj/machinery/door/airlock{ @@ -10472,7 +10429,8 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avS" = ( -/obj/item/wrench, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "avT" = ( @@ -10488,38 +10446,31 @@ /turf/open/space, /area/space/nearstation) "avU" = ( -/obj/item/paper/crumpled, -/turf/open/floor/plasteel/airless{ - icon_state = "damaged2" +/obj/structure/chair/comfy/plywood{ + dir = 8 }, -/area/space/nearstation) +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/port/fore) "avV" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/burger/ghost, +/turf/open/floor/wood, /area/maintenance/port/fore) "avW" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, -/turf/open/floor/plating, /area/maintenance/port/fore) "avX" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/chair/stool, +/obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/port/fore) "avY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal, /turf/open/floor/plating, -/area/maintenance/fore) +/area/maintenance/port/fore) "avZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -11026,18 +10977,26 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "axe" = ( -/obj/machinery/sleeper{ - dir = 4 +/obj/structure/mirror{ + icon_state = "mirror_broke"; + pixel_y = 28 }, +/obj/machinery/iv_drip, /turf/open/floor/plating, /area/maintenance/port/fore) "axf" = ( -/obj/effect/landmark/blobstart, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/maintenance/port/fore) "axg" = ( -/obj/structure/table/glass, -/obj/item/storage/bag/trash, +/obj/structure/mirror{ + icon_state = "mirror_broke"; + pixel_y = 28 + }, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/item/circuitboard/computer/operating, /turf/open/floor/plating, /area/maintenance/port/fore) "axh" = ( @@ -11055,17 +11014,17 @@ }, /area/hallway/secondary/entry) "axi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/chair, +/obj/item/reagent_containers/blood/random, /turf/open/floor/plating, /area/maintenance/port/fore) "axj" = ( -/obj/machinery/door/airlock/maintenance/abandoned{ - name = "Firefighting equipment"; - req_access_txt = "12" - }, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/maintenance/port/fore) "axk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -11074,16 +11033,12 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "axl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/maintenance/port/fore) "axn" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/structure/closet/crate/coffin, /turf/open/floor/plating, /area/maintenance/port/fore) "axo" = ( @@ -11249,10 +11204,12 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "axK" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/structure/sign/plaques/kiddie/library{ + pixel_y = 29 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/turf/closed/wall, /area/maintenance/port/fore) "axL" = ( /obj/machinery/holopad, @@ -11430,21 +11387,21 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "ays" = ( -/obj/structure/closet/wardrobe/white, -/obj/item/clothing/shoes/jackboots, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/turf/open/floor/plating, +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood, /area/maintenance/port/fore) "ayt" = ( -/obj/structure/table/glass, -/obj/item/hemostat, -/turf/open/floor/plating, +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood, /area/maintenance/port/fore) "ayu" = ( -/obj/structure/table/glass, -/obj/item/restraints/handcuffs/cable/zipties, -/obj/item/reagent_containers/blood/random, +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/obj/item/surgical_drapes, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "ayv" = ( @@ -11465,8 +11422,18 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "ayx" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper{ + icon_state = "paper_onfire"; + name = "Burning Note"; + text = "I sign here with my last breath to sell my soul to curse you all..." + }, +/obj/item/pen/fountain{ + pixel_x = 5; + pixel_y = 1 + }, +/turf/open/floor/wood, /area/maintenance/port/fore) "ayy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11861,10 +11828,8 @@ /turf/closed/wall, /area/hydroponics/garden) "azG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/closed/wall, +/obj/item/ectoplasm, +/turf/open/floor/wood, /area/maintenance/port/fore) "azH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -12282,10 +12247,11 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "aAW" = ( @@ -13082,8 +13048,9 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aCW" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/sleeper{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "aCX" = ( @@ -14089,7 +14056,6 @@ /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) "aFJ" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -16437,10 +16403,9 @@ /turf/open/floor/plasteel/dark, /area/chapel/main) "aLt" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 +/turf/open/floor/wood{ + icon_state = "wood-broken" }, -/turf/closed/wall, /area/maintenance/port/fore) "aLu" = ( /obj/machinery/door/airlock/engineering{ @@ -29676,11 +29641,11 @@ /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bsU" = ( -/obj/structure/table/optable{ - name = "Robotics Operating Table" +/mob/living/simple_animal/hostile/retaliate/ghost, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, -/obj/item/surgical_drapes, -/turf/open/floor/plating, +/turf/open/floor/wood, /area/maintenance/port/fore) "bsV" = ( /obj/structure/cable{ @@ -38466,11 +38431,9 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bNb" = ( -/obj/item/airlock_painter, -/obj/structure/lattice, -/obj/structure/closet, -/turf/open/space, -/area/space/nearstation) +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood, +/area/maintenance/port/fore) "bNc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -38877,10 +38840,11 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "bOi" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "damaged5" +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/area/space/nearstation) +/area/maintenance/port/fore) "bOj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -45549,7 +45513,11 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; + req_access_txt = "24" + }, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cfW" = ( /obj/structure/cable{ @@ -46032,11 +46000,8 @@ /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "che" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock"; +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; req_access_txt = "24" }, /turf/open/floor/plating, @@ -46094,6 +46059,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/reagent_dispensers/fueltank, +/obj/item/storage/toolbox/emergency, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "chm" = ( @@ -46892,8 +46859,6 @@ /turf/open/floor/plasteel, /area/construction) "cjp" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/item/storage/toolbox/emergency, /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, @@ -51069,6 +51034,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"cwS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) "cwT" = ( /obj/machinery/camera{ c_tag = "Arrivals Escape Pod 2"; @@ -51216,12 +51185,17 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "cyC" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" +/obj/machinery/door/airlock/maintenance/abandoned{ + name = "abandoned library"; + req_access_txt = "12" }, -/turf/open/floor/plating, +/obj/structure/barricade/wooden{ + name = "wooden barricade (CLOSED)" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating/rust, /area/maintenance/port/fore) "cyD" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -52126,6 +52100,11 @@ /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) +"cCs" = ( +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) "cCt" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ @@ -52210,7 +52189,7 @@ /area/space/nearstation) "cCS" = ( /obj/structure/lattice, -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/engine/atmos) "cCT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -52244,6 +52223,12 @@ /obj/machinery/vending/engivend, /turf/open/floor/plasteel, /area/engine/engineering) +"cDs" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/port/fore) "cDB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52311,6 +52296,12 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) +"cGf" = ( +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "cGz" = ( /obj/structure/table/wood, /obj/item/instrument/violin, @@ -52878,6 +52869,9 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/security/prison) +"cPb" = ( +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "cPn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer, @@ -53371,6 +53365,10 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/security/brig) +"dal" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating, +/area/maintenance/port/fore) "daq" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -53407,6 +53405,13 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"ddI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/fore) "ddM" = ( /obj/structure/sign/poster/official/the_owl{ pixel_x = 32 @@ -53636,6 +53641,12 @@ /mob/living/simple_animal/bot/secbot/grievous/toy, /turf/open/floor/light/colour_cycle/dancefloor_a, /area/maintenance/starboard/aft) +"dIu" = ( +/obj/structure/chair/sofa{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "dJL" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53746,6 +53757,15 @@ dir = 4 }, /area/crew_quarters/fitness/pool) +"edj" = ( +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "edA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -53804,6 +53824,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/execution/transfer) +"enJ" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"enS" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "eoD" = ( /obj/structure/table/wood/poker, /turf/open/floor/plating, @@ -53901,6 +53932,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"eyq" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on, +/turf/open/floor/plating, +/area/maintenance/port/fore) "eyM" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -53942,6 +53977,17 @@ /obj/machinery/vending/cola/space_up, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"eCm" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Airlock"; + req_access_txt = "24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/atmos) "eCr" = ( /obj/structure/closet{ name = "Suit Closet" @@ -54104,6 +54150,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/engine, /area/science/storage) +"fcd" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/port/fore) "fcn" = ( /obj/structure/lattice, /turf/closed/wall/r_wall, @@ -54155,6 +54209,16 @@ dir = 4 }, /area/crew_quarters/theatre) +"fhu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/clothing/under/costume/owl, +/obj/item/clothing/suit/toggle/owlwings, +/obj/item/clothing/mask/gas/owl_mask, +/turf/open/floor/plating, +/area/maintenance/port/fore) "fiy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -54205,6 +54269,12 @@ /obj/item/seeds/cannabis/white, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"fmJ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "fne" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -54614,6 +54684,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"geg" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table, +/obj/item/trash/plate, +/obj/item/reagent_containers/food/snacks/egg/yellow, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gfC" = ( /obj/effect/turf_decal/tile/red, /obj/structure/chair{ @@ -54689,11 +54768,10 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness) "gsM" = ( -/obj/machinery/door/airlock/maintenance/abandoned{ - req_access_txt = "12" - }, +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, -/area/maintenance/fore) +/area/maintenance/port/fore) "gvX" = ( /turf/open/floor/plasteel/yellowsiding, /area/crew_quarters/fitness/pool) @@ -54797,6 +54875,11 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"gJN" = ( +/obj/structure/rack, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gKl" = ( /obj/structure/cable/white, /obj/structure/cable/white{ @@ -54807,6 +54890,16 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"gKo" = ( +/obj/structure/table/glass, +/obj/item/restraints/handcuffs/cable/zipties, +/obj/item/reagent_containers/blood/random, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"gKG" = ( +/obj/structure/bedsheetbin/towel, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "gLz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -54817,14 +54910,15 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"gLG" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gLH" = ( -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/shoes/jackboots, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, /turf/open/floor/plating, /area/maintenance/port/fore) "gMl" = ( @@ -54870,6 +54964,12 @@ }, /turf/open/floor/plating, /area/crew_quarters/fitness) +"gQr" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "gas to sauna" + }, +/turf/open/floor/plating, +/area/maintenance/fore) "gQX" = ( /obj/machinery/button/door{ id = "LockerShitter4"; @@ -54934,6 +55034,19 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"gYo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gZG" = ( /obj/structure/closet/crate/freezer/surplus_limbs, /obj/item/reagent_containers/glass/beaker/synthflesh, @@ -55001,6 +55114,10 @@ /obj/item/reagent_containers/food/snacks/cherrycupcake, /turf/open/floor/wood, /area/crew_quarters/bar) +"hho" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/port/fore) "hiV" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -55034,6 +55151,12 @@ }, /turf/closed/wall, /area/crew_quarters/dorms) +"hnc" = ( +/obj/structure/chair/pew/left{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "hnU" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -55066,6 +55189,10 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"htu" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plating, +/area/maintenance/port/fore) "hxn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/green/visible, @@ -55088,6 +55215,11 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"hCn" = ( +/obj/structure/closet/firecloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) "hGH" = ( /obj/machinery/door/airlock{ desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; @@ -55453,6 +55585,17 @@ /obj/effect/decal/cleanable/blood/gibs/ipc/limb, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) +"iII" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet, +/obj/item/clothing/head/bowler, +/obj/item/clothing/neck/tie/red, +/obj/item/clothing/mask/cigarette/pipe, +/obj/item/clothing/mask/fakemoustache, +/turf/open/floor/plating, +/area/maintenance/port/fore) "iIS" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -55461,6 +55604,10 @@ /obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plating, /area/engine/atmos) +"iKV" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating, +/area/engine/atmos) "iLJ" = ( /obj/item/reagent_containers/glass/bucket, /mob/living/simple_animal/pet/bumbles, @@ -55578,6 +55725,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"jaG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "jaH" = ( /obj/structure/door_assembly/door_assembly_mai, /obj/item/electronics/airlock, @@ -55599,6 +55754,17 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"jbp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/flashlight, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"jbr" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "jdj" = ( /obj/docking_port/stationary/random{ dir = 4; @@ -55670,6 +55836,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"jon" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "gas to sauna" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "jqv" = ( /obj/structure/chair/wood/normal{ dir = 1 @@ -55698,6 +55870,12 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"juy" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/plating, +/area/maintenance/port/fore) "juG" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -55803,6 +55981,10 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"jDZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/closed/wall, +/area/maintenance/port/fore) "jEc" = ( /obj/machinery/vr_sleeper{ dir = 8 @@ -55818,6 +56000,13 @@ dir = 1 }, /area/crew_quarters/fitness) +"jFB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "jFH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -55892,6 +56081,13 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"jIW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/fore) "jJF" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable{ @@ -55925,6 +56121,11 @@ }, /turf/open/space, /area/space) +"jLJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small, +/turf/open/floor/wood, +/area/maintenance/port/fore) "jLT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55957,6 +56158,13 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"jUV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/port/fore) "jVl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -56104,6 +56312,22 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"kil" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 5 + }, +/turf/open/floor/plating, +/area/engine/atmos) +"kiW" = ( +/obj/machinery/button/door{ + id = "Sauna"; + name = "Sauna Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "kiY" = ( /obj/machinery/door/airlock/external{ name = "Port Docking Bay 4" @@ -56113,6 +56337,13 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"klN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "kmw" = ( /obj/structure/chair/comfy/black{ dir = 1 @@ -56158,6 +56389,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"kqo" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/chair/pew{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "kqI" = ( /obj/structure/window, /turf/open/floor/wood, @@ -56197,6 +56437,10 @@ }, /turf/open/floor/plasteel, /area/security/range) +"kuL" = ( +/obj/item/trash/candy, +/turf/open/floor/plating, +/area/maintenance/port/fore) "kvl" = ( /obj/structure/grille, /turf/closed/wall/r_wall, @@ -56212,6 +56456,12 @@ }, /turf/open/floor/wood, /area/bridge/meeting_room) +"kwY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "kxf" = ( /obj/machinery/vr_sleeper{ dir = 4 @@ -56600,6 +56850,12 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"lzk" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 8 + }, +/turf/closed/wall, +/area/maintenance/fore) "lzt" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/stripes/line, @@ -56769,6 +57025,13 @@ }, /turf/closed/wall, /area/crew_quarters/fitness/pool) +"lZN" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Sauna"; + name = "Sauna" + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "maT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -56946,6 +57209,11 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"mwS" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "mxn" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three" @@ -57165,6 +57433,13 @@ "naI" = ( /turf/open/space, /area/space/station_ruins) +"nbr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/fore) "nbT" = ( /obj/structure/cable{ icon_state = "0-8" @@ -57278,6 +57553,12 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) +"noL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "noT" = ( /turf/open/floor/wood{ icon_state = "wood-broken4" @@ -57309,6 +57590,12 @@ "nsA" = ( /turf/closed/wall, /area/crew_quarters/abandoned_gambling_den) +"ntt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "nuw" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -57347,12 +57634,10 @@ /turf/closed/wall, /area/maintenance/disposal/incinerator) "nBI" = ( -/obj/item/cigbutt/cigarbutt, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/chair{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "nEj" = ( /obj/effect/spawner/structure/window/reinforced, @@ -57473,6 +57758,11 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"nXg" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "nYe" = ( /obj/structure/safe, /obj/item/clothing/head/bearpelt, @@ -57802,6 +58092,16 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"oCF" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "oDm" = ( /obj/machinery/gulag_teleporter, /turf/open/floor/plasteel, @@ -57985,6 +58285,14 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/fore) +"pkq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/port/fore) "pkF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/extinguisher_cabinet{ @@ -58056,6 +58364,13 @@ }, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"ppw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "pqe" = ( /obj/structure/chair/sofa, /obj/structure/window{ @@ -58070,6 +58385,19 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"pqR" = ( +/obj/structure/chair/pew/right{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) +"psf" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/sign/poster/official/the_owl{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "psk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58101,6 +58429,14 @@ dir = 1 }, /area/crew_quarters/fitness) +"pvJ" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "pzk" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -58282,6 +58618,12 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"pRj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "pRs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -58317,6 +58659,14 @@ }, /turf/open/floor/plating, /area/engine/atmos) +"pVi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/maintenance/port/fore) "pYQ" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, @@ -58403,6 +58753,20 @@ }, /turf/closed/wall, /area/quartermaster/miningdock) +"qjo" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"qll" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "qlY" = ( /obj/item/kirbyplants/random, /turf/open/floor/plating{ @@ -58495,6 +58859,12 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) +"qGw" = ( +/obj/structure/chair/pew/right{ + dir = 8 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "qIw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58516,6 +58886,12 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) +"qLy" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "qLR" = ( /obj/structure/mirror{ pixel_y = 32 @@ -58610,6 +58986,16 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"qZD" = ( +/obj/effect/decal/cleanable/egg_smudge, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"raH" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "rba" = ( /obj/structure/cable/white{ icon_state = "0-8" @@ -58908,6 +59294,12 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"rGo" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "rGq" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -58940,8 +59332,9 @@ /turf/open/floor/plating, /area/security/brig) "rJw" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, +/obj/structure/table/glass, +/obj/item/hemostat, +/turf/open/floor/plating, /area/maintenance/port/fore) "rKP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -59049,6 +59442,12 @@ dir = 1 }, /area/engine/atmos) +"rWw" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "rXl" = ( /obj/structure/chair/office/light, /obj/machinery/firealarm{ @@ -59060,6 +59459,14 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"rYa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/port/fore) "rZQ" = ( /obj/docking_port/stationary{ dir = 8; @@ -59155,6 +59562,15 @@ /obj/structure/closet/crate, /turf/open/floor/plasteel, /area/engine/atmos) +"spR" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/chair/pew{ + dir = 8 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "sqg" = ( /obj/structure/table/wood, /obj/item/clothing/under/misc/pj/red, @@ -59263,6 +59679,11 @@ icon_state = "wood-broken6" }, /area/maintenance/bar) +"sCa" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/monkey_recycler, +/turf/open/floor/plating, +/area/maintenance/port/fore) "sEi" = ( /obj/machinery/vr_sleeper{ dir = 4 @@ -59433,6 +59854,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/engine_smes) +"sRd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/girder, +/turf/open/floor/plating, +/area/maintenance/port/fore) "sRH" = ( /obj/machinery/autolathe/secure{ name = "public autolathe" @@ -59500,6 +59926,18 @@ /obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/crew_quarters/heads/captain) +"thg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "thB" = ( /obj/structure/sign/warning/securearea{ pixel_y = -32 @@ -59559,6 +59997,12 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"tqG" = ( +/obj/structure/chair/pew/left{ + dir = 8 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "trb" = ( /obj/machinery/light{ dir = 4 @@ -59625,9 +60069,9 @@ /area/crew_quarters/fitness/pool) "tAH" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/engine/atmos) "tCa" = ( /obj/structure/table/wood, /obj/item/instrument/guitar{ @@ -59806,12 +60250,29 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"tVE" = ( +/obj/item/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/port/fore) "tWj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, /turf/open/floor/wood, /area/crew_quarters/theatre) +"tXs" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "tXL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -59825,6 +60286,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"tZu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "uaw" = ( /obj/machinery/power/apc{ areastring = "/area/maintenance/bar"; @@ -59905,6 +60372,14 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"ugq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/fore) "ugu" = ( /obj/structure/cable{ icon_state = "1-4" @@ -60095,6 +60570,13 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"uBf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "uCo" = ( /obj/structure/chair{ dir = 1 @@ -60658,6 +61140,15 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/crew_quarters/cryopod) +"vHo" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Airlock"; + req_access_txt = "24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/engine/atmos) "vHz" = ( /obj/structure/chair{ dir = 8 @@ -60898,6 +61389,16 @@ "wkN" = ( /turf/closed/wall, /area/science/circuit) +"wlg" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/port/fore) "wly" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -61111,13 +61612,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "wWi" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock"; - req_access_txt = "24" - }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) "wWT" = ( @@ -61184,6 +61680,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) +"xbi" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/fore) "xbn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -61461,6 +61963,13 @@ /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/carpet, /area/library) +"xFM" = ( +/obj/item/clothing/gloves/color/rainbow, +/obj/item/clothing/head/soft/rainbow, +/obj/item/clothing/shoes/sneakers/rainbow, +/obj/item/clothing/under/color/rainbow, +/turf/open/floor/plating, +/area/maintenance/port/fore) "xGQ" = ( /obj/structure/sign/plaques/golden{ pixel_y = 32 @@ -61707,10 +62216,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "yds" = ( -/obj/effect/decal/cleanable/vomit, -/obj/structure/chair{ - dir = 1 - }, +/obj/structure/table, +/obj/item/stamp, +/obj/item/poster/random_official, /turf/open/floor/plating, /area/maintenance/port/fore) "ydD" = ( @@ -61728,6 +62236,12 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/hallway/primary/central) +"ygb" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "yhx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -74425,15 +74939,15 @@ aaa aaa aaa aaa -aaa -aaa aaf aaf aaf aaf alU +avS atJ amC +amC aKf bEJ axb @@ -74681,16 +75195,16 @@ aaa aaa aaa aaa -aae -aaa aaa aag alU alU alU alU -aCW +rGo amC +aKY +aoW asK alU alU @@ -74939,13 +75453,13 @@ aaa aaa aaa aaa -aaa -aaa aag -cyC +arN amC amC -gLH +auX +arM +ase ase avq aum @@ -75196,20 +75710,20 @@ aaa aaa aaa aaa -aaa -aaa gJi alU alU alU alU -asc -atn -aLt -aue -aue +aqO +alU +alU +kwY +qll aue aue +ayy +ayy aAe aBJ aCs @@ -75454,19 +75968,19 @@ aaa aaa aaa aaa -aaa -aaa alU -apL -aqK +atM +atW +alU +aqO alU -asc -atq aon -amC -axe -ays +aAY +aCW +gLH alU +hho +aKY auT aBI aCY @@ -75710,20 +76224,20 @@ aaa aaa aaa aaa -aaa -aaf alU alU -apM -aqL +atP +auV alU -asc +aqO +alU +axe atq -auX -avS amC amC alU +pvJ +mwS auT aBI aDc @@ -75966,21 +76480,21 @@ aaf aaf aaf aaf -aaa -aaa -aaa +aaf alU -aoS +arO amC aom ank -asc -atq -auZ -bsU +aqO +alU axf +ayu +auZ amC alU +gJN +amC auT aBI aDf @@ -76224,20 +76738,20 @@ aaa aaa aaa aaa -aaa -aaa alU +ash +atU aoR apO -aqM -arF -asc -atq -auY -amC -amC -ayt +aqO alU +axg +aAY +amC +rJw +alU +cGf +aKY aAw aBl aCZ @@ -76480,20 +76994,20 @@ aaf aaf aaf aaf -aaa -aaa -aaa +aaf alU +atn +amC aoT -amC +auY aqO -arG -asc -atq +alU +axi +aAY ava +gKo +alU amC -axg -ayu azF azF azF @@ -76738,19 +77252,19 @@ aaa aaa aaa aaa -aaa -aaa alU alU alU alU -arG -ash -atq -alU +auY +aqO +alU +alU +nBI alU alU alU +amC azF aAP aAP @@ -76995,14 +77509,14 @@ aaa aaa aaa aaa -aaa -aaa -aaf -aaa +gXs ali -aoX -arI -asi +aok +aKY +anJ +asc +aol +aol atr atN atN @@ -77252,18 +77766,18 @@ aaf aaf aaf aaa -aaa -aaa -aaf -aaa +gXs ali +aok amC +anJ +asi +arH +cCs +ann +ann +hCn arH -atP -auV -auV -auV -axK ayh azi aAx @@ -77511,16 +78025,16 @@ alR alR alR alR -alU -alU -alU +apL +pkq +wlg aqP -arJ alU -avb -aaH -bOi -atO +alU +alU +alU +alU +juy asK azF aAT @@ -77769,15 +78283,15 @@ amy ang alR aoj -amC -apP -amC -arH +kuL +anJ +tXs alU -aaH +axj +ayx bNb -aaf -atO +asO +alU asK azF aAS @@ -78026,15 +78540,15 @@ amA ani anI aol -aol -aol -aol -arL +jUV +arI +atL alU +axl avU avb bOi -atO +alU asK azF aAU @@ -78282,17 +78796,17 @@ alS amz anh anH +oCF amC -aok anJ aFJ -arK alU +axK +azG +aLt +jLJ alU -ali -alU -atO -asK +thg azF aAP aAP @@ -78539,16 +79053,16 @@ alR alR alR alR -amC -aom -apP -amC -arN -amC -amC -amC -amC -axi +alU +alU +arJ +alU +alU +ays +asO +bsU +tVE +alU asK azF azF @@ -78792,20 +79306,20 @@ aaf aaa aaa aaa -aaa alU +amF alF -anj -anJ +aoS +apM +enS aoU +aoW alU -amC -arM -alU +ayt avc -asO +pVi avV -atO +alU ayw atN aAV @@ -79049,22 +79563,22 @@ aaf aaf aaf aaf -gXs alU -alF -anl +amF +aoU amC alU -alU -amC -alU -alU apP +arK +amC alU alU -atP -auV -axK +alU +cyC +alU +pRj +cwS +cwS aAN aBL aDd @@ -79306,22 +79820,22 @@ aaf aaa aaa aaa -aaa alU alU ank alU alU -alU +aoW amC -amC -amC -arN -alU avW +axn +alU +nXg +jaG +alU +rYa amC -ayx -atO +sRd aAL aBQ aDb @@ -79563,22 +80077,22 @@ aaS aaa aaa aaa -aaa alU +anj amD -anm -amC -amC -ali amC alU -asO -atL -alU -avX -axf +arG +amC +arK +axn +alU +aoW +ntt +alU +fhu +amC amC -atO aAY aBQ aDl @@ -79820,23 +80334,23 @@ aaS aaf aaf aaf -gXs alU amC +arK amC +ank amC +arL amC -ali +aoW +dal +arK +noL +arH +psf +arK amC -alU -alU -alU -alU -alU -axj -alU -atO -aAY +klN aBQ aDk aDo @@ -80077,23 +80591,23 @@ aaS aaa aaa aaa -aaa alU +anl amE -ann -amC amC alU -amC +qjo alU -arN -atU alU -atU +alU +alU +alU +alU +alU +ntt amC -atJ -atO -aAY +avW +gYo aBQ aDn aDo @@ -80334,23 +80848,23 @@ aaa aaa aaa aaa -aaa alU alU alU -ank -alU -alU -amC -amC -amC amC alU -avc +alU +alU +avX amC -atJ -atO -aAY +arK +amC +amC +jFB +ppw +enJ +amC +iII aBQ aDm aDo @@ -80591,22 +81105,22 @@ aaa aaa aaa aaa -aaa alU -amF +anm alU amC alU +xFM alU -alU -alU +gLG +raH +jon +atU amC +uBf +amC +aKY amC -alU -atM -axl -auV -azG aAY aBQ aDp @@ -80848,21 +81362,21 @@ aaa aaa aaa aaa -aaa alU alU alU +ank +alU +alU +alU +alU +jbr +alU +alU amC -alU -aaH -rJw -arO -amC -amC -avc -atO +ntt axk -ayy +jbp ayy aAO aBN @@ -81106,20 +81620,20 @@ aaa aaa aaa aaa -aaa -aaa ali +aok +qZD anK -ali -aaf +geg alU -rJw -alU -atW -atW -atO -axn +pqR +kqo +hnc alU +amC +ntt +aAY +amC aoX atJ aBQ @@ -81363,19 +81877,19 @@ aaa aaa aaa aaa -aaa -aaa ali +aok +amC aKY -ali -aaf -aoV -aaf +cDs alU -ali -ali -atO -axo +fmJ +ygb +kiW +alU +amC +ntt +nbr ayz ayz ayz @@ -81613,26 +82127,26 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa ali ali +alU +alU +ali +alU +alU +alU +rGo amC -alU -alU -alU -aaf -aoV -aae -aaH -avY -axo +amC +amC +lZN +cPb +ygb +cPb +lZN +amC +jIW +ddI arP fgG rqW @@ -81867,29 +82381,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aae aaa aaa ali -yds +anL +avY +tZu amC aon -aoW +yds +alU +amC +amC +amC +htu +alU +edj +rWw +gKG arP -aqQ -aqQ -aqQ -aqQ -avZ -axo +aqR +awb +ugq arP rPU fne @@ -82127,24 +82641,24 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa ali +amC +avY aKY amC amC amC -gsM -aqR -aqR +ank +amC +fcd +dIu +qLy +alU +tqG +spR +qGw +arP aGh -aqR awb axo arP @@ -82384,21 +82898,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa ali -nBI -anL aoo +avY +amC +gsM +sCa aoX +alU +ali +ali +ali +ali +alU arP -arP +lzk arP arP arP @@ -82641,21 +83155,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ali ali ali alU alU -arP -aqR +ali +alU +alU +alU +aaa +aaa +aaa +eyq +jDZ +gQr +xbi wje rQJ uUi @@ -97122,9 +97636,9 @@ cCI cCJ cCI cCP -bLK +bMK chg -bLK +bMK aaf aoV aoV @@ -97637,11 +98151,11 @@ cdD bOh cCQ cCS -wWi +chg cCS -aaa -aaa -aaa +bLK +bLK +bLK gXs aaa aaa @@ -97894,11 +98408,11 @@ cbH bOh cCG tAH -dCt -fty -dCt -dCt -dCt +iKV +vHo +iKV +iKV +eCm fty dCt dCt @@ -98150,12 +98664,12 @@ ccD cbH bOh aaf -aaa -aaa -aaa -aaa -aaa -aoV +bMK +chg +bMK +bLK +bLK +bLK aaf aoV aoV @@ -98407,9 +98921,9 @@ bOh bOh bOh xcl -caJ -ciC -gXs +wWi +kil +cCS gXs tSo kcx diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 0ac49d7328..611a9b5715 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1309,6 +1309,45 @@ /obj/item/toy/poolnoodle/blue, /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/pool) +"acy" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "cargounload" + }, +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"acz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"acA" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "cargounload" + }, +/turf/open/floor/plating, +/area/quartermaster/storage) +"acB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/floor, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "acF" = ( /obj/docking_port/stationary{ dir = 2; @@ -12918,18 +12957,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aAH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "cargounload" - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aAI" = ( /obj/structure/cable/white, /obj/structure/cable/white{ @@ -13616,14 +13643,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aBZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aCa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown, @@ -14264,23 +14283,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aDf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "Supply Dock Airlock"; - req_access_txt = "31" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aDg" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -125650,14 +125652,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/electrical) -"hdH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor{ - dir = 9; - id = "cargoload" - }, -/turf/open/floor/plating, -/area/quartermaster/storage) "hic" = ( /obj/structure/table/reinforced, /obj/item/integrated_electronics/analyzer, @@ -171852,7 +171846,7 @@ azy aAG aDb aAG -aAG +acB azy azy aAG @@ -173134,7 +173128,7 @@ axk ayB azE azE -aBZ +acz azE azE azE @@ -173390,9 +173384,9 @@ aoF axl ayC azF -aAH -aCa -aCa +acy +aEf +aEf aEf aEf aCa @@ -173648,8 +173642,8 @@ axm ayD ayD ayD -hdH -azD +acA +aEe aaq azD kam @@ -173906,7 +173900,7 @@ ayE azG aAI aCb -aDf +aFk avW aFk aGD diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 4582400c1a..bf0e1dc797 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2927,13 +2927,6 @@ /obj/machinery/capture_the_flag/red, /turf/open/floor/circuit/green/anim, /area/ctf) -"hH" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/slot_machine, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "hI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -4178,6 +4171,10 @@ "ku" = ( /turf/closed/indestructible/fakeglass, /area/syndicate_mothership) +"kv" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) "kw" = ( /turf/open/floor/plasteel/yellowsiding, /area/centcom/supply) @@ -4505,6 +4502,10 @@ icon_state = "alien15" }, /area/abductor_ship) +"ll" = ( +/obj/machinery/vending/autodrobe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "ln" = ( /obj/machinery/light, /obj/effect/turf_decal/tile/brown, @@ -4762,11 +4763,15 @@ /turf/open/floor/plasteel/dark, /area/centcom/control) "lS" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja1"; - name = "Dorm 1" +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/wood, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/janiupgrade, +/obj/vehicle/ridden/janicart, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "lT" = ( /obj/machinery/door/airlock/centcom{ @@ -4828,14 +4833,14 @@ }, /area/abductor_ship) "ma" = ( -/obj/machinery/button/door{ - id = "Ninja7"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 25; - specialfunctions = 4 +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet" }, -/turf/open/indestructible/hotelwood, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/turf/open/floor/carpet/royalblue, /area/centcom/holding) "mb" = ( /obj/structure/table/reinforced, @@ -6427,6 +6432,23 @@ /obj/effect/turf_decal/tile/brown, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) +"oV" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"oW" = ( +/obj/structure/table/wood, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "oX" = ( /obj/structure/bookcase/random, /obj/machinery/light{ @@ -6769,14 +6791,6 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) -"px" = ( -/obj/structure/table, -/obj/item/storage/backpack/duffelbag/med/surgery, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "py" = ( /obj/machinery/smartfridge, /turf/closed/indestructible{ @@ -6792,6 +6806,41 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"pB" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/chem_master/condimaster{ + desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; + name = "BrewMaster 2199"; + pixel_x = -4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"pG" = ( +/obj/machinery/biogenerator, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "pH" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -7289,6 +7338,16 @@ "qE" = ( /turf/closed/indestructible/riveted/uranium, /area/wizard_station) +"qF" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/washing_machine, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "qI" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/light{ @@ -7296,13 +7355,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"qP" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "qQ" = ( /obj/machinery/door/airlock/centcom{ name = "Administrative Office"; @@ -7397,6 +7449,22 @@ /obj/machinery/vending/coffee, /turf/open/floor/plasteel, /area/syndicate_mothership) +"rg" = ( +/obj/structure/table, +/obj/item/clothing/mask/luchador, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) +"rh" = ( +/obj/structure/table/wood, +/obj/item/camera/detective{ + desc = "A polaroid camera with extra capacity for social media marketing."; + name = "Professional camera" + }, +/obj/item/camera_film, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "rk" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, @@ -7889,10 +7957,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"sa" = ( -/obj/item/hilbertshotel/ghostdojo, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "sc" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership/control; @@ -7905,12 +7969,11 @@ /turf/open/floor/plating, /area/syndicate_mothership) "sf" = ( -/obj/machinery/vending/wallmed{ - name = "Emergency NanoMed"; - pixel_y = 28; - use_power = 0 +/obj/effect/landmark/holding_facility, +/mob/living/simple_animal/bot/medbot{ + name = "Syndicate Hospitality Drone" }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "si" = ( /obj/structure/table/wood, @@ -7928,6 +7991,12 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) +"sk" = ( +/obj/machinery/door/airlock/wood{ + name = "Bathroom" + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "sq" = ( /obj/machinery/computer/shuttle/white_ship{ dir = 4 @@ -8341,6 +8410,31 @@ /obj/item/reagent_containers/food/drinks/bottle/vodka, /turf/open/floor/wood, /area/syndicate_mothership) +"ta" = ( +/obj/structure/closet{ + anchored = 1; + desc = "A storage unit for plasmaman internals, courtesy of the Spider Clan."; + icon_state = "emergency"; + name = "Plasmaman emergency closet" + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"tc" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Dorms" + }, +/turf/open/floor/wood, +/area/centcom/holding) "td" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -8427,6 +8521,9 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"tv" = ( +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "tx" = ( /obj/structure/table/wood, /obj/item/storage/dice, @@ -8712,13 +8809,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plasteel, /area/centcom/supplypod) -"tZ" = ( -/obj/structure/chair/wood/normal, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "uc" = ( /obj/effect/turf_decal/tile/green{ dir = 1 @@ -8734,6 +8824,10 @@ /obj/item/storage/crayons, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) +"ue" = ( +/obj/machinery/autolathe/toy, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "uf" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -8743,12 +8837,14 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"ug" = ( +/obj/structure/table, +/obj/machinery/dish_drive, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) "uh" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja2"; - name = "Dorm 2" - }, -/turf/open/floor/wood, +/obj/structure/dresser, +/turf/open/floor/carpet/royalblue, /area/centcom/holding) "uj" = ( /obj/item/clipboard, @@ -9033,6 +9129,16 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"uH" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/paperframes/fifty, +/obj/item/stack/sheet/paperframes/fifty, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/box/lights/mixed, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "uJ" = ( /obj/effect/baseturf_helper/asteroid/snow, /turf/closed/indestructible/riveted, @@ -9318,19 +9424,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"vs" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/turf_decal/tile/green{ - dir = 1 +"vp" = ( +/obj/structure/bed, +/obj/item/bedsheet/hos{ + desc = "A fancy red bedsheet."; + name = "red bedsheet" }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, +/turf/open/floor/carpet/red, /area/centcom/holding) "vt" = ( /obj/structure/rack, @@ -9348,17 +9448,6 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) -"vv" = ( -/obj/structure/closet, -/obj/item/storage/backpack/duffelbag/med/surgery, -/obj/machinery/iv_drip, -/obj/item/roller, -/obj/item/storage/firstaid/regular, -/obj/item/reagent_containers/medspray/synthflesh, -/obj/item/reagent_containers/medspray/synthflesh, -/obj/item/reagent_containers/medspray/synthflesh, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "vw" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -9367,6 +9456,12 @@ /mob/living/simple_animal/hostile/carp/cayenne, /turf/open/floor/plasteel, /area/syndicate_mothership) +"vx" = ( +/obj/structure/sign/barsign{ + pixel_y = 32 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "vy" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -9733,6 +9828,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"wi" = ( +/obj/effect/landmark/mafia_game_area, +/turf/open/space/basic, +/area/space) +"wj" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "wl" = ( /obj/structure/table/wood, /obj/item/paicard, @@ -9997,6 +10101,13 @@ /obj/item/toy/cards/deck, /turf/open/floor/carpet, /area/wizard_station) +"wU" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja7"; + name = "Dorm 7" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "wX" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -10005,10 +10116,12 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel, /area/syndicate_mothership) -"wZ" = ( -/obj/structure/bed, -/obj/item/bedsheet/syndie, -/obj/effect/landmark/holding_facility, +"wY" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/easel, +/obj/item/canvas/twentythreeXtwentythree, /turf/open/indestructible/hotelwood, /area/centcom/holding) "xa" = ( @@ -10228,6 +10341,16 @@ /obj/machinery/light, /turf/open/floor/carpet, /area/wizard_station) +"xB" = ( +/obj/machinery/button/door{ + id = "Ninja3"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "xG" = ( /obj/structure/closet/syndicate/personal, /obj/effect/turf_decal/stripes/line{ @@ -10244,13 +10367,18 @@ /obj/item/bedsheet/syndie, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"xO" = ( -/obj/structure/curtain, -/obj/machinery/shower, -/obj/structure/window{ - dir = 8 +"xL" = ( +/obj/structure/table/wood/bar, +/obj/structure/mirror{ + pixel_y = 28 }, -/turf/open/floor/mineral/titanium/blue, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "xQ" = ( /obj/effect/turf_decal/delivery, @@ -10375,6 +10503,10 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"yf" = ( +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "yg" = ( /obj/structure/chair, /turf/open/floor/mineral/titanium, @@ -10628,13 +10760,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"yS" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja7"; - name = "Dorm 7" - }, -/turf/open/floor/wood, -/area/centcom/holding) "yU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -10654,13 +10779,23 @@ /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) "yW" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/mirror{ + pixel_y = 28 }, -/obj/machinery/light{ - dir = 4 +/obj/structure/sink{ + dir = 1; + pixel_y = 25 }, -/turf/open/floor/grass, +/mob/living/simple_animal/bot/cleanbot, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"yX" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/obj/structure/window{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, /area/centcom/holding) "yY" = ( /obj/structure/table/wood, @@ -10891,6 +11026,10 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) +"zy" = ( +/obj/structure/mineral_door/paperframe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "zz" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, @@ -10948,6 +11087,21 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"zE" = ( +/obj/machinery/plantgenes/seedvault, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/table, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "zF" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -11071,15 +11225,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"zS" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) -"zT" = ( -/turf/open/indestructible/boss/air, -/area/centcom/holding) "zU" = ( /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/cafeteria, @@ -11095,13 +11240,6 @@ /obj/item/reagent_containers/food/snacks/carpmeat, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"zW" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja5"; - name = "Dorm 5" - }, -/turf/open/floor/wood, -/area/centcom/holding) "zX" = ( /obj/structure/table, /obj/machinery/light{ @@ -11111,12 +11249,14 @@ /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) "zY" = ( -/obj/item/bedsheet/wiz{ - desc = "A glow in the dark blue bedsheet."; - name = "blue bedsheet" +/obj/machinery/light{ + dir = 8 }, -/obj/structure/bed, -/turf/open/floor/carpet/royalblue, +/obj/structure/musician/piano, +/obj/structure/sign/painting{ + pixel_x = -32 + }, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Aa" = ( /turf/open/floor/mech_bay_recharge_floor, @@ -11356,16 +11496,6 @@ /obj/effect/decal/remains/xeno, /turf/open/floor/grass, /area/wizard_station) -"AC" = ( -/obj/machinery/button/door{ - id = "Ninja5"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "AD" = ( /obj/machinery/door/airlock/centcom{ name = "Leader's Room"; @@ -11373,10 +11503,6 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) -"AE" = ( -/obj/machinery/vending/coffee, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "AG" = ( /obj/structure/ladder/unbreakable/binary/space, /turf/open/indestructible/airblock, @@ -11595,15 +11721,13 @@ /obj/machinery/mech_bay_recharge_port, /turf/open/floor/plating, /area/syndicate_mothership) -"Bq" = ( -/obj/machinery/sleeper{ - dir = 8 +"Bm" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/painting{ + pixel_x = 32 }, -/turf/open/floor/plasteel/white, -/area/centcom/holding) -"Bs" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Bu" = ( @@ -12458,13 +12582,6 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) -"CQ" = ( -/obj/effect/landmark/holding_facility, -/mob/living/simple_animal/bot/medbot{ - name = "Syndicate Hospitality Drone" - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "CR" = ( /obj/machinery/computer/security{ dir = 8 @@ -12484,8 +12601,37 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) -"CV" = ( -/obj/structure/chair/stool, +"CS" = ( +/obj/structure/chair/wood/normal{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"CT" = ( +/obj/structure/bedsheetbin/towel, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"CU" = ( +/obj/structure/closet, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/stack/tile/wood{ + amount = 24 + }, +/obj/item/stack/tile/carpet/black/fifty, +/obj/item/stack/tile/carpet/blackred/fifty, +/obj/item/stack/tile/carpet/blue/fifty, +/obj/item/stack/tile/carpet/cyan/fifty, +/obj/item/stack/tile/carpet/fifty, +/obj/item/stack/tile/carpet/green/fifty, +/obj/item/stack/tile/carpet/monochrome/fifty, +/obj/item/stack/tile/carpet/orange/fifty, +/obj/item/stack/tile/carpet/purple/fifty, +/obj/item/stack/tile/carpet/red/fifty, +/obj/item/stack/tile/carpet/royalblack/fifty, +/obj/item/stack/tile/carpet/royalblue/fifty, /turf/open/indestructible/hotelwood, /area/centcom/holding) "CX" = ( @@ -12680,9 +12826,20 @@ /obj/structure/table, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"Dl" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/indestructible/hotelwood, +"Dm" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja2"; + name = "Dorm 2" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"Dn" = ( +/obj/machinery/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_y = 28; + use_power = 0 + }, +/turf/open/floor/plasteel/white, /area/centcom/holding) "Do" = ( /obj/effect/turf_decal/tile/bar, @@ -13277,14 +13434,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/engine/cult, /area/wizard_station) -"ED" = ( -/obj/machinery/vending/boozeomat, -/turf/closed/indestructible{ - icon = 'icons/turf/walls/wood_wall.dmi'; - icon_state = "wood"; - smooth = 1 - }, -/area/centcom/holding) "EE" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/tile/neutral{ @@ -13495,6 +13644,19 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"Fb" = ( +/obj/structure/chair/stool, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Fe" = ( +/turf/closed/indestructible/wood, +/area/centcom/holding) +"Ff" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Cryo" + }, +/turf/open/floor/wood, +/area/centcom/holding) "Fg" = ( /obj/structure/flora/grass/brown, /obj/effect/light_emitter, @@ -13503,9 +13665,9 @@ "Fh" = ( /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"Fl" = ( -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel/white, +"Fj" = ( +/obj/structure/closet/crate/bin, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fm" = ( /obj/machinery/shower{ @@ -13973,6 +14135,13 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"Gt" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/slot_machine, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Gu" = ( /obj/machinery/door/airlock/silver{ name = "Shower" @@ -14423,24 +14592,7 @@ /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) "Hj" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/musician/piano, -/obj/structure/sign/painting{ - pixel_x = -32 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Hk" = ( -/obj/structure/table/wood, -/obj/item/camera/detective{ - desc = "A polaroid camera with extra capacity for social media marketing."; - name = "Professional camera" - }, -/obj/item/camera_film, -/obj/item/paper_bin, -/obj/item/pen/fountain, +/obj/structure/bedsheetbin, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Hm" = ( @@ -14594,6 +14746,13 @@ }, /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) +"Hy" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja3"; + name = "Dorm 3" + }, +/turf/open/floor/wood, +/area/centcom/holding) "HA" = ( /obj/structure/sink{ dir = 8; @@ -14653,6 +14812,13 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"HE" = ( +/obj/structure/dresser, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "HF" = ( /obj/structure/sink{ dir = 4; @@ -15515,11 +15681,8 @@ /turf/open/floor/plasteel, /area/tdome/tdomeadmin) "Jq" = ( -/obj/machinery/camera{ - c_tag = "Arena"; - network = list("thunder"); - pixel_x = 10; - resistance_flags = 64 +/obj/machinery/camera/motion/thunderdome{ + pixel_x = 10 }, /turf/open/floor/circuit/green, /area/tdome/arena) @@ -15785,12 +15948,6 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) -"JV" = ( -/obj/structure/table, -/obj/item/stack/packageWrap, -/obj/item/reagent_containers/glass/beaker, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "JX" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -15846,13 +16003,6 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) -"Kf" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/turf/open/floor/carpet/red, -/area/centcom/holding) "Kg" = ( /turf/closed/indestructible/fakedoor{ name = "Thunderdome Admin" @@ -15869,16 +16019,6 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeadmin) -"Ki" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet" - }, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/turf/open/floor/carpet/royalblue, -/area/centcom/holding) "Kj" = ( /obj/machinery/door/airlock/external{ name = "Backup Emergency Escape Shuttle" @@ -16299,6 +16439,11 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) +"Ld" = ( +/obj/structure/table, +/obj/item/clothing/mask/luchador/rudos, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "Lh" = ( /obj/machinery/sleeper{ dir = 8 @@ -16311,44 +16456,29 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) -"Lk" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/turf/open/floor/plasteel/white, -/area/centcom/holding) -"Ll" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/easel, -/obj/item/canvas/twentythreeXtwentythree, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Lm" = ( -/obj/machinery/shower{ - dir = 4 - }, -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) -"Ln" = ( -/obj/structure/toilet{ +"Lj" = ( +/obj/machinery/light{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/centcom/holding) +"Lm" = ( +/obj/structure/table, +/obj/item/clothing/mask/luchador/tecnicos, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "Lp" = ( /obj/structure/chair{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) -"Lr" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/turf/open/indestructible/hotelwood, +"Lq" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja6"; + name = "Dorm 6" + }, +/turf/open/floor/wood, /area/centcom/holding) "Ls" = ( /obj/docking_port/stationary{ @@ -16379,6 +16509,13 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) +"Ly" = ( +/obj/structure/bed, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "LA" = ( /obj/structure/table, /obj/structure/bedsheetbin, @@ -16611,6 +16748,14 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"Mj" = ( +/obj/item/bedsheet/wiz{ + desc = "A glow in the dark blue bedsheet."; + name = "blue bedsheet" + }, +/obj/structure/bed, +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) "Mk" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -16620,8 +16765,22 @@ "Mm" = ( /turf/open/floor/grass, /area/centcom/holding) -"Ms" = ( -/obj/effect/mob_spawn/human/ghostcafe{ +"Mn" = ( +/obj/machinery/vr_sleeper/hugbox{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Mq" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ dir = 8 }, /turf/open/indestructible/hotelwood, @@ -16640,6 +16799,16 @@ /obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel, /area/centcom/supplypod) +"Mw" = ( +/obj/machinery/button/door{ + id = "Ninja7"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Mx" = ( /obj/machinery/light{ dir = 4 @@ -16666,13 +16835,10 @@ /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) "Mz" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/paperframes/fifty, -/obj/item/stack/sheet/paperframes/fifty, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/box/lights/mixed, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "MB" = ( @@ -16723,11 +16889,8 @@ "MI" = ( /turf/open/floor/plating, /area/syndicate_mothership) -"MJ" = ( -/obj/structure/bed, -/obj/machinery/light/small{ - dir = 1 - }, +"ML" = ( +/obj/structure/table/wood/fancy, /turf/open/indestructible/hotelwood, /area/centcom/holding) "MM" = ( @@ -16740,9 +16903,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"MR" = ( -/obj/machinery/light{ - dir = 4 +"MQ" = ( +/obj/machinery/button/door{ + id = "Ninja5"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) @@ -16758,6 +16925,29 @@ /obj/effect/turf_decal/tile/brown, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) +"MW" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/structure/sink/kitchen{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "sink"; + pixel_y = 28 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"MX" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/turf/open/floor/plasteel/white, +/area/centcom/holding) +"Na" = ( +/obj/item/paicard, +/obj/structure/table/wood, +/turf/open/floor/engine/cult, +/area/wizard_station) "Nc" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -16775,7 +16965,27 @@ }, /area/centcom/holding) "Nf" = ( -/obj/machinery/autolathe/toy, +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/centcom/holding) +"Ng" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/canvas/twentythreeXtwentythree, +/obj/item/canvas/twentythreeXtwentythree, +/obj/item/canvas/twentythreeXtwentythree, +/obj/item/canvas/twentythreeXnineteen, +/obj/item/canvas/twentythreeXnineteen, +/obj/item/canvas/twentythreeXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Ni" = ( @@ -16804,24 +17014,50 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) -"Nt" = ( -/obj/structure/bedsheetbin/color, +"Nl" = ( +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) +"Nn" = ( +/obj/machinery/vending/hydronutrients, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Np" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja7"; + name = "Dorm 7" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"Ns" = ( +/obj/structure/mopbucket, +/obj/item/mop, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Nu" = ( /turf/open/floor/wood, /area/syndicate_mothership) +"Nv" = ( +/obj/machinery/vending/boozeomat, +/turf/closed/indestructible{ + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood"; + smooth = 1 + }, +/area/centcom/holding) "Nw" = ( /obj/machinery/recharge_station, /turf/open/floor/plasteel/white, /area/centcom/holding) -"Nx" = ( -/obj/machinery/processor, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Nz" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -16831,28 +17067,11 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) -"NA" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXnineteen, -/obj/item/canvas/twentythreeXnineteen, -/obj/item/canvas/twentythreeXnineteen, -/obj/item/canvas/nineteenXnineteen, -/obj/item/canvas/nineteenXnineteen, -/obj/item/canvas/nineteenXnineteen, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"NE" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/centcom/holding) +"NB" = ( +/obj/structure/table, +/obj/item/storage/belt/champion/wrestling/holodeck, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "NF" = ( /obj/structure/ladder/unbreakable/binary, /turf/open/indestructible/airblock, @@ -16868,9 +17087,14 @@ }, /turf/open/floor/plasteel, /area/centcom/control) -"NN" = ( -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, +"NP" = ( +/obj/machinery/button/crematorium{ + id = "crematoriumGhostDojo"; + pixel_x = -25 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"NS" = ( /turf/open/indestructible/hotelwood, /area/centcom/holding) "NT" = ( @@ -16897,11 +17121,10 @@ /obj/machinery/vending/cola/sodie, /turf/open/floor/plasteel, /area/syndicate_mothership) -"NZ" = ( -/obj/structure/table/wood/bar, -/obj/structure/safe/floor, -/obj/item/seeds/cherry/bomb, -/obj/item/key/janitor, +"NX" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Oa" = ( @@ -16930,15 +17153,18 @@ /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"Of" = ( -/turf/open/floor/carpet/red, -/area/centcom/holding) "Oh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"Oi" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) "Oj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -16952,9 +17178,8 @@ }, /turf/open/floor/plasteel, /area/centcom/control) -"Ol" = ( -/obj/structure/table/wood/fancy, -/turf/open/indestructible/hotelwood, +"Ok" = ( +/turf/open/indestructible/boss/air, /area/centcom/holding) "Om" = ( /obj/effect/turf_decal/tile/brown, @@ -16963,9 +17188,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) -"On" = ( -/obj/structure/sign/painting{ - pixel_x = 32 +"Oo" = ( +/obj/machinery/button/door{ + id = "Ninja1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) @@ -16983,23 +17212,20 @@ /mob/living/simple_animal/bot/cleanbot, /turf/open/floor/plasteel/white, /area/centcom/holding) +"Oq" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet" + }, +/obj/item/coin/silver, +/obj/item/coin/silver, +/obj/item/coin/silver, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Or" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) -"Os" = ( -/obj/structure/chair/wood/normal{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Ot" = ( -/obj/machinery/washing_machine, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "Ou" = ( /turf/closed/indestructible/fakedoor{ name = "Cold Storage" @@ -17009,12 +17235,22 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"Ox" = ( -/obj/machinery/door/airlock/wood/glass{ - name = "Cryo" +"Ow" = ( +/obj/machinery/vending/kink{ + extended_inventory = 1 }, /turf/open/floor/wood, /area/centcom/holding) +"Oy" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/window{ + dir = 8 + }, +/obj/structure/curtain, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "Oz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -17038,17 +17274,14 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"OG" = ( -/obj/structure/dresser, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "OH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"OI" = ( +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "OL" = ( /obj/structure/mineral_door/paperframe{ name = "Dojo" @@ -17066,14 +17299,20 @@ /obj/item/storage/box/handcuffs, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"OO" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "OS" = ( /obj/structure/mecha_wreckage/mauler, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"OT" = ( -/obj/structure/table, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "OU" = ( /obj/item/clothing/under/costume/jabroni, /obj/item/clothing/under/costume/geisha, @@ -17088,47 +17327,16 @@ }, /turf/open/floor/wood, /area/syndicate_mothership) -"OW" = ( -/obj/structure/bedsheetbin/towel, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "OZ" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/syndicate_mothership) -"Pc" = ( -/obj/structure/sink/kitchen{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "sink"; - pixel_y = 28 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/book/manual/hydroponics_pod_people, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Pg" = ( /obj/machinery/light{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"Ph" = ( -/obj/structure/closet/crate/bin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Pl" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -17147,6 +17355,14 @@ }, /turf/open/indestructible/boss/air, /area/centcom/holding) +"Pp" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) "Pr" = ( /obj/structure/table, /obj/item/book/manual/chef_recipes, @@ -17170,6 +17386,15 @@ /obj/machinery/light/small, /turf/open/floor/wood, /area/syndicate_mothership) +"Px" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) +"Pz" = ( +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) "PA" = ( /obj/structure/window/reinforced{ dir = 4 @@ -17179,13 +17404,8 @@ "PD" = ( /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"PG" = ( -/obj/structure/table/reinforced, -/obj/item/camera, -/turf/open/floor/plasteel, -/area/centcom/supplypod) -"PI" = ( -/obj/machinery/biogenerator, +"PE" = ( +/obj/machinery/vending/hydroseeds, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17198,6 +17418,28 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"PG" = ( +/obj/structure/table/reinforced, +/obj/item/camera, +/turf/open/floor/plasteel, +/area/centcom/supplypod) +"PI" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker/large, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "PJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -17205,17 +17447,16 @@ /turf/open/floor/plating, /area/syndicate_mothership) "PL" = ( -/obj/machinery/autolathe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"PM" = ( -/obj/machinery/vending/clothing{ - extended_inventory = 1 +/obj/machinery/light{ + dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PO" = ( /obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 8 + }, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17234,11 +17475,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"PQ" = ( -/obj/structure/closet/secure_closet, -/obj/item/coin/silver, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "PS" = ( /obj/machinery/computer/shuttle/syndicate/recall, /obj/effect/turf_decal/tile/bar, @@ -17268,6 +17504,9 @@ /turf/open/indestructible/hotelwood, /area/centcom/holding) "PY" = ( +/obj/structure/closet/secure_closet/hydroponics{ + locked = 0 + }, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17278,6 +17517,10 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/item/seeds/ambrosia/gaia, +/obj/item/seeds/ambrosia/gaia, +/obj/item/seeds/pumpkin/blumpkin, +/obj/item/seeds/pumpkin/blumpkin, /turf/open/indestructible/hotelwood, /area/centcom/holding) "PZ" = ( @@ -17294,18 +17537,20 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/evac) -"Qc" = ( -/obj/effect/landmark/mafia_game_area, -/turf/open/space/basic, -/area/space) +"Qd" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Qe" = ( /turf/open/ai_visible, /area/ai_multicam_room) -"Qi" = ( -/obj/item/paicard, -/obj/structure/table/wood, -/turf/open/floor/engine/cult, -/area/wizard_station) +"Qh" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja1"; + name = "Dorm 1" + }, +/turf/open/floor/wood, +/area/centcom/holding) "Qk" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ppflowers, @@ -17313,31 +17558,27 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ql" = ( -/obj/machinery/light, -/obj/effect/landmark/holding_facility, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Qm" = ( /obj/singularity/wizard/mapped, /turf/open/indestructible/binary, /area/fabric_of_reality) "Qn" = ( -/obj/machinery/vr_sleeper/hugbox{ - dir = 8 - }, +/obj/machinery/door/airlock/wood, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Qo" = ( /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) -"Qp" = ( -/obj/structure/bedsheetbin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Qq" = ( /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) +"Qs" = ( +/obj/structure/table/wood/bar, +/obj/structure/safe/floor, +/obj/item/seeds/cherry/bomb, +/obj/item/key/janitor, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Qt" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, @@ -17347,20 +17588,33 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) -"Qu" = ( -/obj/machinery/door/airlock/wood/glass{ - name = "Dorms" - }, -/turf/open/floor/wood, -/area/centcom/holding) "Qw" = ( -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) +/obj/structure/table, +/obj/item/clothing/gloves/boxing, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing/green, +/obj/item/clothing/gloves/boxing/yellow, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "Qy" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/plasteel/white, +/obj/structure/table/wood/fancy/royalblue, +/turf/open/indestructible/hotelwood, /area/centcom/holding) -"Qz" = ( +"QA" = ( +/obj/machinery/deepfryer, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"QB" = ( +/obj/machinery/computer/telecrystals/uplinker, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/syndicate_mothership) +"QE" = ( +/turf/open/floor/plasteel, +/area/centcom/supplypod) +"QF" = ( /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/silver, @@ -17379,42 +17633,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"QA" = ( -/obj/machinery/deepfryer, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"QB" = ( -/obj/machinery/computer/telecrystals/uplinker, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/syndicate_mothership) -"QC" = ( -/obj/machinery/door/airlock/wood{ - name = "Bathroom" - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) -"QE" = ( -/turf/open/floor/plasteel, -/area/centcom/supplypod) -"QF" = ( -/obj/machinery/button/door{ - id = "Ninja3"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"QJ" = ( -/obj/structure/sign/barsign{ - pixel_y = 32 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "QK" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -17426,11 +17644,18 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"QN" = ( -/obj/machinery/light{ - dir = 4 +"QM" = ( +/obj/effect/mob_spawn/human/ghostcafe{ + dir = 8 }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"QN" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/turf/open/floor/carpet/red, /area/centcom/holding) "QP" = ( /obj/machinery/computer/mech_bay_power_console{ @@ -17450,6 +17675,15 @@ /obj/item/storage/box/donkpockets, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) +"QS" = ( +/obj/structure/chair/wood/normal{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "QT" = ( /obj/machinery/chem_dispenser/drinks, /turf/closed/indestructible{ @@ -17501,26 +17735,6 @@ }, /turf/open/floor/grass, /area/centcom/holding) -"Ri" = ( -/obj/structure/chair/wood/normal{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Rj" = ( -/obj/machinery/vending/hydroseeds, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Rl" = ( /obj/structure/mirror{ pixel_x = -28 @@ -17535,39 +17749,14 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ro" = ( -/obj/structure/closet{ - anchored = 1; - desc = "A storage unit for plasmaman internals, courtesy of the Spider Clan."; - icon_state = "emergency"; - name = "Plasmaman emergency closet" - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Rq" = ( -/obj/machinery/light{ - dir = 1; - light_color = "#cee5d2" - }, -/turf/open/indestructible/hotelwood, +/obj/machinery/washing_machine, +/turf/open/floor/mineral/titanium/blue, /area/centcom/holding) "Ru" = ( -/obj/structure/fireplace, -/turf/open/floor/carpet/red, -/area/centcom/holding) -"Rv" = ( -/obj/structure/dresser, -/turf/open/floor/carpet/royalblue, +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/plasteel/white, /area/centcom/holding) "Rz" = ( /obj/effect/turf_decal/loading_area, @@ -17583,48 +17772,12 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) -"RK" = ( -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/plasteel/white, -/area/centcom/holding) -"RL" = ( -/obj/machinery/vending/cola, +"RM" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479" + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"RN" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/light, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"RO" = ( -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/window{ - dir = 8 - }, -/obj/structure/curtain, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) -"RP" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja4"; - name = "Dorm 4" - }, -/turf/open/floor/wood, -/area/centcom/holding) "RQ" = ( /obj/item/kirbyplants{ icon_state = "plant-21"; @@ -17647,12 +17800,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"RX" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479" - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "RZ" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -17671,6 +17818,9 @@ /turf/open/floor/plasteel/dark, /area/syndicate_mothership) "Sd" = ( +/obj/structure/sign/painting{ + pixel_x = 32 + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Sf" = ( @@ -17698,13 +17848,6 @@ /obj/item/toy/nuke, /turf/open/floor/wood, /area/syndicate_mothership) -"Sj" = ( -/obj/machinery/vending/autodrobe{ - extended_inventory = 1 - }, -/obj/machinery/light, -/turf/open/floor/wood, -/area/centcom/holding) "So" = ( /obj/structure/chair/wood/wings{ dir = 4 @@ -17714,21 +17857,15 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Sw" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ +"St" = ( +/obj/machinery/shower{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) +"Sv" = ( +/obj/structure/closet/secure_closet, +/obj/item/coin/silver, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Sy" = ( @@ -17755,6 +17892,13 @@ /obj/item/mop, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) +"SE" = ( +/obj/structure/chair/wood/normal, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "SF" = ( /obj/effect/turf_decal/tile/brown{ dir = 1 @@ -17764,14 +17908,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"SG" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "SH" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -17789,6 +17925,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) +"SM" = ( +/obj/machinery/vending/autodrobe{ + extended_inventory = 1 + }, +/obj/machinery/light, +/turf/open/floor/wood, +/area/centcom/holding) "SN" = ( /obj/structure/mopbucket, /obj/item/mop, @@ -17798,16 +17941,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/space/basic, /area/centcom/supplypod) -"SR" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja7"; - name = "Dorm 7" +"SU" = ( +/obj/machinery/light{ + dir = 4 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"ST" = ( -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "SV" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -17817,7 +17956,14 @@ /turf/open/floor/plasteel, /area/syndicate_mothership) "SW" = ( -/obj/machinery/seed_extractor, +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/wirecutters, +/obj/item/wrench, +/obj/item/watertank, +/obj/item/cultivator, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17834,28 +17980,18 @@ /obj/structure/table/wood, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"SZ" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja3"; - name = "Dorm 3" - }, -/turf/open/floor/wood, -/area/centcom/holding) -"Tc" = ( -/obj/machinery/button/door{ - id = "Ninja2"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, +"Td" = ( +/obj/structure/fireplace, +/turf/open/floor/carpet/red, /area/centcom/holding) "Tf" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/floor/plasteel/freezer, +/obj/machinery/light, +/obj/effect/landmark/holding_facility, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Tg" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/white, /area/centcom/holding) "Tj" = ( /obj/effect/turf_decal/tile/bar, @@ -17875,26 +18011,14 @@ "To" = ( /turf/open/indestructible/airblock, /area/fabric_of_reality) -"Tq" = ( -/obj/structure/table/wood/bar, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/storage/toolbox/mechanical, -/obj/item/stack/sheet/plastic/fifty, -/obj/item/multitool, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Tr" = ( /obj/structure/closet/chefcloset, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"Tt" = ( -/obj/structure/toilet{ +"Ts" = ( +/obj/machinery/light{ dir = 4 }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, /turf/open/floor/plasteel/white, /area/centcom/holding) "Tu" = ( @@ -17905,38 +18029,6 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Tw" = ( -/obj/structure/closet{ - anchored = 1; - name = "Plasmaman suits" - }, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Tx" = ( -/obj/machinery/plantgenes/seedvault, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/structure/table, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Tz" = ( /obj/effect/light_emitter, /turf/open/floor/plating/asteroid/snow/airless, @@ -17951,17 +18043,9 @@ /obj/structure/reagent_dispensers/cooking_oil, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"TC" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) "TD" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/sign/painting{ - pixel_x = 32 - }, +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement, /turf/open/indestructible/hotelwood, /area/centcom/holding) "TF" = ( @@ -17973,15 +18057,12 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) -"TG" = ( -/obj/machinery/light{ - dir = 8 +"TJ" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja5"; + name = "Dorm 5" }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/machinery/washing_machine, -/turf/open/floor/plasteel/white, +/turf/open/floor/wood, /area/centcom/holding) "TM" = ( /mob/living/simple_animal/bot/medbot{ @@ -18008,24 +18089,46 @@ }, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) -"TY" = ( -/obj/machinery/light{ - dir = 1 +"TS" = ( +/obj/structure/closet{ + anchored = 1; + name = "Plasmaman suits" }, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/janiupgrade, -/obj/vehicle/ridden/janicart, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"TV" = ( +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/reagent_containers/glass/beaker, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"TY" = ( +/obj/structure/bedsheetbin/color, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"TZ" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Uc" = ( -/obj/machinery/vending/sustenance, +/obj/structure/bodycontainer/crematorium{ + dir = 4; + id = "crematoriumGhostDojo" + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ud" = ( -/turf/closed/indestructible/wood, -/area/centcom/holding) "Ug" = ( /obj/machinery/door/poddoor/shuttledock{ checkdir = 1; @@ -18045,11 +18148,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ui" = ( -/obj/structure/table, -/obj/item/clothing/mask/luchador/tecnicos, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) "Uj" = ( /obj/machinery/door/airlock/centcom{ name = "Restroom"; @@ -18058,23 +18156,7 @@ /turf/open/floor/plasteel, /area/syndicate_mothership) "Uk" = ( -/obj/structure/closet/crate, -/obj/item/vending_refill/autodrobe, -/obj/item/vending_refill/autodrobe, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/clothing, -/obj/item/vending_refill/coffee, -/obj/item/vending_refill/coffee, -/obj/item/vending_refill/cola, -/obj/item/vending_refill/cola, -/obj/item/vending_refill/wallmed, -/obj/item/vending_refill/wallmed, -/obj/item/vending_refill/snack, -/obj/item/vending_refill/snack, -/turf/open/indestructible/hotelwood, +/turf/open/floor/mineral/titanium/blue, /area/centcom/holding) "Ul" = ( /obj/structure/table, @@ -18083,15 +18165,27 @@ }, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"Um" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/shovel/spade, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/item/watertank, -/obj/item/cultivator, -/obj/item/reagent_containers/glass/bucket, -/obj/item/reagent_containers/glass/bucket, +"Un" = ( +/obj/machinery/door/airlock/centcom{ + name = "Thunderdome"; + req_access_txt = "101" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plasteel, +/area/tdome/tdomeobserve) +"Uq" = ( +/obj/machinery/button/door{ + id = "Ninja2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Ur" = ( +/obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -18104,29 +18198,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Un" = ( -/obj/machinery/door/airlock/centcom{ - name = "Thunderdome"; - req_access_txt = "101" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plasteel, -/area/tdome/tdomeobserve) -"Uq" = ( -/obj/structure/table/wood, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Ur" = ( -/turf/open/floor/carpet/royalblue, -/area/centcom/holding) "Uu" = ( /obj/machinery/light{ dir = 8 @@ -18143,30 +18214,19 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"Ux" = ( +/obj/structure/table, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Uy" = ( /obj/structure/flora/bush, /obj/effect/light_emitter, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) -"Uz" = ( -/obj/structure/table, -/obj/machinery/dish_drive, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "UC" = ( /obj/machinery/vending/cola, /turf/open/floor/plasteel, /area/centcom/supplypod) -"UD" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet" - }, -/obj/item/coin/silver, -/obj/item/coin/silver, -/obj/item/coin/silver, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "UE" = ( /obj/structure/chair/stool/bar, /turf/open/indestructible/hotelwood, @@ -18177,6 +18237,13 @@ /obj/effect/light_emitter, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) +"UI" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja4"; + name = "Dorm 4" + }, +/turf/open/floor/wood, +/area/centcom/holding) "UL" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18187,17 +18254,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"UN" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/mob/living/simple_animal/bot/cleanbot, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "UO" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; @@ -18211,6 +18267,10 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"UP" = ( +/obj/structure/chair/comfy/brown, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "UQ" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18221,16 +18281,21 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/one) -"US" = ( -/obj/machinery/gibber, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "UT" = ( /obj/structure/chair/wood/wings{ dir = 1 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"UU" = ( +/obj/structure/table/wood/bar, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/sheet/plastic/fifty, +/obj/item/multitool, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "UV" = ( /obj/machinery/computer/arcade, /turf/open/indestructible/hotelwood, @@ -18292,11 +18357,11 @@ /obj/structure/window/reinforced/tinted, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) -"Vk" = ( -/obj/structure/table, -/obj/item/storage/belt/champion/wrestling/holodeck, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) +"Vn" = ( +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Vt" = ( /obj/item/paper/fluff/stations/centcom/disk_memo, /obj/structure/noticeboard{ @@ -18359,6 +18424,16 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/one) +"VC" = ( +/obj/machinery/button/door{ + id = "Ninja6"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "VF" = ( /obj/structure/rack, /obj/item/nullrod/scythe/vibro{ @@ -18367,11 +18442,16 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"VL" = ( -/obj/machinery/button/crematorium{ - id = "crematoriumGhostDojo"; - pixel_x = -25 - }, +"VH" = ( +/obj/machinery/vending/sustenance, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"VI" = ( +/obj/machinery/autolathe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"VK" = ( +/obj/machinery/vending/clothing, /turf/open/indestructible/hotelwood, /area/centcom/holding) "VO" = ( @@ -18406,6 +18486,10 @@ /obj/effect/landmark/shuttle_import, /turf/open/space/basic, /area/space) +"VY" = ( +/obj/machinery/vending/cola, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Wb" = ( /obj/machinery/door/window/westleft, /turf/open/indestructible/boss/air, @@ -18423,6 +18507,10 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"We" = ( +/obj/machinery/vending/coffee, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Wi" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18440,58 +18528,38 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"Wl" = ( -/obj/machinery/door/airlock/wood, -/turf/open/indestructible/hotelwood, +"Wp" = ( +/obj/machinery/processor, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"Wq" = ( +/obj/machinery/gibber, +/turf/open/floor/plasteel/cafeteria, /area/centcom/holding) "Wr" = ( /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"Ws" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja6"; - name = "Dorm 6" +"Wu" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 }, -/turf/open/floor/wood, -/area/centcom/holding) -"Ww" = ( -/obj/structure/bodycontainer/crematorium{ - dir = 4; - id = "crematoriumGhostDojo" +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Wx" = ( -/obj/structure/table, -/obj/item/clothing/mask/luchador, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) -"Wz" = ( -/obj/structure/table, -/obj/item/storage/backpack/duffelbag/med/surgery, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "WC" = ( /obj/structure/table/reinforced, /obj/item/pen, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) -"WD" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/obj/structure/sink/kitchen{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "sink"; - pixel_y = 28 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"WE" = ( -/obj/machinery/vending/kink{ - extended_inventory = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding) "WH" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ @@ -18523,16 +18591,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"WN" = ( -/obj/machinery/button/door{ - id = "Ninja6"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "WO" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18554,27 +18612,44 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"WR" = ( +/obj/structure/bed, +/obj/item/bedsheet/syndie, +/obj/effect/landmark/holding_facility, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "WS" = ( /obj/structure/closet/syndicate/personal, /turf/open/floor/wood, /area/syndicate_mothership) "WV" = ( -/obj/structure/bed, -/obj/item/bedsheet/hos{ - desc = "A fancy red bedsheet."; - name = "red bedsheet" +/obj/machinery/vending/cigarette, +/obj/machinery/light{ + dir = 4 }, -/turf/open/floor/carpet/red, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "WW" = ( /obj/machinery/processor, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"WY" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/light{ - dir = 4 - }, +"Xb" = ( +/obj/structure/closet/crate, +/obj/item/vending_refill/autodrobe, +/obj/item/vending_refill/autodrobe, +/obj/item/vending_refill/boozeomat, +/obj/item/vending_refill/boozeomat, +/obj/item/vending_refill/cigarette, +/obj/item/vending_refill/cigarette, +/obj/item/vending_refill/clothing, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/cola, +/obj/item/vending_refill/cola, +/obj/item/vending_refill/wallmed, +/obj/item/vending_refill/wallmed, +/obj/item/vending_refill/snack, +/obj/item/vending_refill/snack, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Xd" = ( @@ -18584,23 +18659,6 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Xe" = ( -/obj/machinery/vending/autodrobe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Xf" = ( -/obj/structure/table/wood/bar, -/obj/structure/mirror{ - pixel_y = 28 - }, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xg" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -18613,6 +18671,15 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) +"Xk" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/centcom/holding) "Xl" = ( /obj/structure/closet/syndicate/personal, /obj/effect/turf_decal/stripes/line{ @@ -18620,9 +18687,14 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) -"Xn" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, +"Xm" = ( +/obj/machinery/button/door{ + id = "Ninja4"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Xo" = ( @@ -18646,10 +18718,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/four) -"Xs" = ( -/obj/structure/chair/comfy/brown, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xt" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; @@ -18669,10 +18737,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/holofloor, /area/holodeck/rec_center/firingrange) -"Xw" = ( -/obj/structure/table/wood/fancy/royalblue, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xy" = ( /obj/machinery/door/airlock/external{ name = "Ferry Airlock" @@ -18685,16 +18749,6 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) -"XD" = ( -/obj/machinery/button/door{ - id = "Ninja4"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "XE" = ( /obj/machinery/door/airlock/centcom{ name = "Kitchen"; @@ -18712,25 +18766,8 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"XS" = ( -/obj/structure/closet/secure_closet/hydroponics{ - locked = 0 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/item/seeds/ambrosia/gaia, -/obj/item/seeds/ambrosia/gaia, -/obj/item/seeds/pumpkin/blumpkin, -/obj/item/seeds/pumpkin/blumpkin, -/turf/open/indestructible/hotelwood, +"XN" = ( +/turf/open/floor/carpet/red, /area/centcom/holding) "XT" = ( /obj/structure/table/wood, @@ -18743,6 +18780,12 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"XW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "XX" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/sake, @@ -18755,14 +18798,8 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"Ya" = ( -/obj/machinery/button/door{ - id = "Ninja1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, +"XZ" = ( +/obj/effect/landmark/holding_facility, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Yc" = ( @@ -18794,30 +18831,14 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"Yh" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Yi" = ( /obj/structure/dresser, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"Yj" = ( -/obj/structure/table/optable, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "Ym" = ( /obj/machinery/computer/arcade/orion_trail, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Yo" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Ys" = ( /obj/structure/table/reinforced, /turf/open/floor/mineral/plastitanium/red, @@ -18839,11 +18860,6 @@ }, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"Yv" = ( -/obj/structure/table, -/obj/item/clothing/mask/luchador/rudos, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) "Yw" = ( /turf/closed/indestructible/fakedoor{ name = "External Access" @@ -18853,9 +18869,23 @@ /obj/machinery/door/airlock/titanium, /turf/open/floor/mineral/titanium, /area/centcom/evac) -"YC" = ( -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) +"Yz" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"YF" = ( +/obj/machinery/vending/clothing{ + extended_inventory = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"YH" = ( +/obj/item/hilbertshotel/ghostdojo, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "YJ" = ( /obj/item/reagent_containers/food/condiment/enzyme, /obj/item/reagent_containers/food/drinks/shaker, @@ -18864,10 +18894,6 @@ /obj/structure/closet/crate, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"YL" = ( -/obj/machinery/vending/clothing, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "YN" = ( /obj/structure/window/reinforced{ dir = 8 @@ -18875,10 +18901,24 @@ /mob/living/simple_animal/chicken, /turf/open/floor/grass, /area/centcom/holding) -"YO" = ( -/obj/structure/chair/comfy/brown{ +"YP" = ( +/obj/structure/sink/kitchen{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "sink"; + pixel_y = 28 + }, +/obj/effect/turf_decal/tile/green{ dir = 1 }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/book/manual/hydroponics_pod_people, /turf/open/indestructible/hotelwood, /area/centcom/holding) "YU" = ( @@ -18929,17 +18969,24 @@ /turf/open/floor/plasteel, /area/centcom/supplypod) "Zl" = ( -/obj/structure/table, -/obj/item/clothing/gloves/boxing, -/obj/item/clothing/gloves/boxing/blue, -/obj/item/clothing/gloves/boxing/green, -/obj/item/clothing/gloves/boxing/yellow, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) +/obj/structure/bed/dogbed, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Zr" = ( /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) +"Zv" = ( +/obj/structure/closet, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/machinery/iv_drip, +/obj/item/roller, +/obj/item/storage/firstaid/regular, +/obj/item/reagent_containers/medspray/synthflesh, +/obj/item/reagent_containers/medspray/synthflesh, +/obj/item/reagent_containers/medspray/synthflesh, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Zw" = ( /obj/structure/bed, /obj/item/bedsheet/syndie, @@ -18958,20 +19005,6 @@ /obj/effect/landmark/start/nukeop_leader, /turf/open/floor/wood, /area/syndicate_mothership) -"ZB" = ( -/obj/effect/landmark/holding_facility, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"ZE" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "ZF" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -19008,26 +19041,6 @@ /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) "ZL" = ( -/obj/structure/closet, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/stack/tile/wood{ - amount = 24 - }, -/obj/item/stack/tile/carpet/black/fifty, -/obj/item/stack/tile/carpet/blackred/fifty, -/obj/item/stack/tile/carpet/blue/fifty, -/obj/item/stack/tile/carpet/cyan/fifty, -/obj/item/stack/tile/carpet/fifty, -/obj/item/stack/tile/carpet/green/fifty, -/obj/item/stack/tile/carpet/monochrome/fifty, -/obj/item/stack/tile/carpet/orange/fifty, -/obj/item/stack/tile/carpet/purple/fifty, -/obj/item/stack/tile/carpet/red/fifty, -/obj/item/stack/tile/carpet/royalblack/fifty, -/obj/item/stack/tile/carpet/royalblue/fifty, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"ZN" = ( /obj/machinery/vending/snack, /turf/open/indestructible/hotelwood, /area/centcom/holding) @@ -19044,8 +19057,13 @@ /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) "ZR" = ( -/obj/structure/bed/dogbed, -/turf/open/indestructible/hotelwood, +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/open/floor/plasteel/white, /area/centcom/holding) "ZT" = ( /mob/living/simple_animal/cow, @@ -19082,27 +19100,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) -"ZZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/chem_master/condimaster{ - desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; - name = "BrewMaster 2199"; - pixel_x = -4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) (1,1,1) = {" aa @@ -26210,7 +26207,7 @@ lI lI lI Ax -Qi +Na qZ qZ Ax @@ -43442,50 +43439,50 @@ aa aa aa Nd -SW -PO -PO -Sw -PO -PO -PO +Mq +Ur +Ur PO +Ur +Ur +Ur +Ur Nd -Tt -Tt -TG +ZR +ZR +qF Op Nd Rm Tn UT yd -Sd -Sd +NS +NS XM NT UV -CV -Sd +Fb +NS Nd -OW -Ln +CT +oV Nd -Lm -Lm -Lm +St +St +St Nd -PQ -Sd -ZR +Sv +NS +Zl Nd -RL -Yo -Uq +VY +PL +oW Nd -VL -Ww -NN +NP +Uc +Vn Nd aa aa @@ -43699,49 +43696,49 @@ aa aa aa Nd -Pc -PY -PY -PY -PY -PY -PY -PY +YP +Wu +Wu +Wu +Wu +Wu +Wu +Wu Nd ZW ZW ZW ZW Za -Sd -Sd -Sd +NS +NS +NS Tu -Sd -Sd +NS +NS Tn NT RQ -Sd -Sd +NS +NS Nd -UN -ST +yW +Uk Nd -zS -Qw -TC +Oi +Pz +kv Nd -MJ -Sd -Sd +Ly +NS +NS Nd -AE -Sd -Ph +We +NS +Fj Nd Gs -Sd +NS HH Nd aa @@ -43947,59 +43944,59 @@ aa aa aa aa -Ud -Ud -Ud -Ud -Ud +Fe +Fe +Fe +Fe +Fe aa aa aa Nd -ZZ -PY -PY -PY -PY -PY -PY -RN +pB +Wu +Wu +Wu +Wu +Wu +Wu +PI Nd SB ZW ZW ZW Nd -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS GY NT UV -CV -Sd +Fb +NS Nd -Ot -ST +Rq +Uk Nd -Tf -Qw -Tf +Px +Pz +Px Nd -ma -Sd -Sd -Nd -ZN -Sd -Sd +Mw +NS +NS Nd ZL -Sd -Lr +NS +NS +Nd +CU +NS +Ns Nd aa aa @@ -44204,58 +44201,58 @@ aa aa aa aa -Ud -Uc -ZB -ZB -Ud +Fe +VH +XZ +XZ +Fe aa aa aa Nd -PI -PY -PY -PY -PY -PY -PY -Rj +pG +Wu +Wu +Wu +Wu +Wu +Wu +PE Nd SB -NE -Fl +Ts +OI Nw Nd -Sd -Sd -Sd -Ph -Sd +NS +NS +NS +Fj +NS Tu Vu Nd -hH -Sd -Sd +Gt +NS +NS Nd Nd -Wl +Qn Nd Nd -Wl +Qn Nd Nd Nd -yS +Np Nd Nd -WD -Sd +MW +NS HH Nd Nd -Ox +Ff Nd Nd aa @@ -44461,59 +44458,59 @@ aa aa aa aa -Ud -ZB -CQ -Ql -Ud +Fe +XZ +sf +Tf +Fe aa aa aa Nd -Tx +zE +Wu +Wu +Wu +SW PY -PY -PY -Um -XS -PY -vs +Wu +Nn Nd Nd Nd Nd Nd Nd -Sd -Sd +NS +NS XM QL -Sd -Sd +NS +NS XM NT PX -CV -Sd +Fb +NS NT -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS Nd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -WE +NS +NS +NS +NS +NS +NS +NS +NS +NS +NS +Ow Nd aa aa @@ -44718,11 +44715,11 @@ aa aa aa aa -Ud -wZ -ZB -Qn -Ud +Fe +WR +XZ +Mn +Fe aa aa aa @@ -44736,41 +44733,41 @@ Nd py Nd Nd -Yh -Sd -Yo -Sd -Wl -Sd -Sd +XW +NS +PL +NS +Qn +NS +NS Tn Tu -Sd -Sd +NS +NS Tn NT Zh -Sd -Sd -Dl -Sd -Sd -Sd -Sd -Sd -Sd -Qu -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sj +NS +NS +zy +NS +NS +NS +NS +NS +NS +tc +NS +NS +NS +NS +NS +NS +NS +NS +NS +NS +SM Nd aa aa @@ -44975,59 +44972,59 @@ aa aa aa aa -Ud -Ud -Ud -Ud -Ud +Fe +Fe +Fe +Fe +Fe aa aa aa Nd -Lr -Sd -Yo -Sd -Sd -Sd -Sd -Sd -Sd -Sd +Ns +NS +PL +NS +NS +NS +NS +NS +NS +NS Nd Nd Nd Nd Gs -Sd +NS GY Tu -Sd -Sd +NS +NS GY NT Ym -CV -Sd +Fb +NS NT -Sd -MR -Sd -Sd -MR -Sd +NS +SU +NS +NS +SU +NS Nd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -PM +NS +NS +NS +NS +NS +NS +NS +NS +NS +NS +YF Nd aa aa @@ -45241,31 +45238,31 @@ aa aa aa Nd -Tq -Sd +UU +NS MG YN Nd -US +Wq Fh Fh zV Nd Nd -Hj +zY Fa KT -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS HH Nd -Sd -Sd -Sd +NS +NS +NS Nd Nd Nd @@ -45278,8 +45275,8 @@ Nd Nd Nd Nd -Rq -Sd +Mz +NS HH Nd Nd @@ -45498,31 +45495,31 @@ aa aa aa Nd -ZL -Sd +CU +NS Rh Mm Nd -Nx +Wp Fh Fh Yu Nd -AE -CV -Sd -Ll -CV -Sd -Sd -Sd -Sd -Sd -Sd +We +Fb +NS +wY +Fb +NS +NS +NS +NS +NS +NS Re -Sd -Sd -Sd +NS +NS +NS NT vt YV @@ -45531,17 +45528,17 @@ OU RS VF Nd -UD -tZ +Oq +SE SY Nd -Sd -Sd -Sd +NS +NS +NS Nd SY -Os -UD +QS +Oq Nd aa aa @@ -45755,9 +45752,9 @@ aa aa aa Nd -ZN -Sd -yW +ZL +NS +Xk ZT Nd Pr @@ -45765,40 +45762,40 @@ Fh Fh QW Nd -QJ -Sd -Sd -NA -Sd -Sd -Sd -Sd -Sd -Sd -Sd +vx +NS +NS +Ng +NS +NS +NS +NS +NS +NS +NS Nd Gs Zx -Sd +NS OL -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS Nd -Sd -Sd -Sd -lS -Sd -Sd -Sd -RP -Sd -Sd -Sd +NS +NS +NS +Qh +NS +NS +NS +UI +NS +NS +NS Nd aa aa @@ -46022,40 +46019,40 @@ Fh Fh Vv Nd -Sd -Sd -Sd +NS +NS +NS FW -Sd -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS +NS Re -Sd -Sd -Sd +NS +NS +NS NT So XM -Sd +NS XM XM -Sd +NS Nd -Xn -Sd -Ya +wj +NS +Oo Nd -Sd -Sd -Sd +NS +NS +NS Nd -XD -Sd -Xn +Xm +NS +wj Nd aa aa @@ -46269,46 +46266,46 @@ aa aa aa Nd -NZ -Sd -Yo +Qs +NS PL +VI Nd -SG +Pp Fh Fh Fh -Wl +Qn +NS +Bm Sd -TD -On FX -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS HH Nd WM -Sd -Sd +NS +NS NT Nj Po Wb Po ZU -Sd +NS Nd Nd Nd Nd Nd -Sd -Sd -Sd +NS +NS +NS Nd Nd Nd @@ -46526,50 +46523,50 @@ aa aa aa Nd -OG -Sd -Sd -Tq +HE +NS +NS +UU Nd zX Fh Fh -JV +TV Nd -Dl +zy Nd Nd Nd Gs -Sd +NS XM Tu -Sd -Sd +NS +NS XM NT -Sd -Sd -Sd +NS +NS +NS NT YU -zT -zT -zT +Ok +Ok +Ok MM -Sd +NS Nd -UD -tZ +Oq +SE SY Nd -Sd -Sd -Sd +NS +NS +NS Nd SY -Os -UD +QS +Oq Nd aa aa @@ -46783,50 +46780,50 @@ aa aa aa Nd -Xf -Sd -Sd -Nf +xL +NS +NS +ue Nd QA Fh Fh -Uz -ED -Sd -Yo +ug +Nv +NS +PL Yf UE -Sd -Sd +NS +NS Tn Xd -Sd -Sd +NS +NS Tn NT -Sd -Sd -Sd +NS +NS +NS NT YU -zT -zT -zT +Ok +Ok +Ok MM TM Nd -Sd -Sd -Sd -uh -Sd -Sd -Sd -zW -Sd -Sd -Sd +NS +NS +NS +Dm +NS +NS +NS +TJ +NS +NS +NS Nd aa aa @@ -47040,50 +47037,50 @@ aa aa aa Nd -YL -Sd -Sd -Uk +VK +NS +NS +Xb Nd Xo Fh Fh Fh py -Sd -Sd +NS +NS SY UE -Sd -Sd +NS +NS GY Tu -Sd -Sd +NS +NS GY NT -Sd -Sd -Sd +NS +NS +NS NT YU -zT -zT -zT +Ok +Ok +Ok MM -Sd +NS Nd -Xn -Sd -Tc +wj +NS +Uq Nd -Sd -Sd -Sd +NS +NS +NS Nd -AC -Sd -Xn +MQ +NS +wj Nd aa aa @@ -47297,45 +47294,45 @@ aa aa aa Nd -Xe -Sd -Sd -ZL +ll +NS +NS +CU Nd TB Fh Fh Fh BV -Sd -Sd +NS +NS XT UE -Sd -Sd -Sd -Ph -Sd +NS +NS +NS +Fj +NS Qk Vu Nd Gs -Sd -Sd +NS +NS NT Mt PA Ra PA Pl -Sd +NS Nd Nd Nd Nd Nd -Rq -Sd +Mz +NS HH Nd Nd @@ -47554,50 +47551,50 @@ aa aa aa Nd -TY -Sd -Sd -Sd +lS +NS +NS +NS Nd Vz Fh Fh YJ QT -Sd -Sd +NS +NS SY UE -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS XM NT -Sd -Sd -Sd +NS +NS +NS NT Ye GY -Sd +NS GY GY -Sd +NS Nd -Xs -Ol -YO +UP +ML +NX Nd -Sd -Sd -Sd +NS +NS +NS Nd -RX -Xw -qP +RM +Qy +Yz Nd aa aa @@ -47811,49 +47808,49 @@ aa aa aa Nd -Bs -Ri -Sd -Sd +TD +CS +NS +NS XL Fh Fh Fh Fh XL -Sd -Sd +NS +NS XX UE -Sd -Sd -Sd +NS +NS +NS Tu -Sd -Sd +NS +NS Tn NT -Sd -Sd -Sd +NS +NS +NS OL -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS Nd Gs -Sd -Sd -SZ -Sd -Sd -Sd -Ws -Sd -Sd +NS +NS +Hy +NS +NS +NS +Lq +NS +NS HH Nd aa @@ -48068,50 +48065,50 @@ aa aa aa Nd -Hk -Sd -MR -Mz +rh +NS +SU +uH Nd SN pV pV Tr Nd -WY -Ph +WV +Fj Nd Nd Rm Tn UT Hm -Sd -Sd +NS +NS GY NT -Tw -Ms -Ro +TS +QM +ta NT vt Mx -Sd -Sd +NS +NS Uh tW Nd -Ru -Of -QF +Td +XN +xB Nd -Sd -Sd -Sd +NS +NS +NS Nd -WN -Ur -Ki +VC +Nl +ma Nd aa aa @@ -48353,22 +48350,22 @@ Nd Nd Nd Nd -Sd -Sd +NS +NS Nd Nd Nd -Kf -WV -Sd +QN +vp +NS Nd -sa -Sd -Sd +YH +NS +NS Nd -Sd -zY -Rv +NS +Mj +uh Nd aa aa @@ -48608,22 +48605,22 @@ aa aa aa Nd -vv +Zv VA ZW ZW -px -Lk +Nf +MX Nd Nd Nd -QC +sk Nd Nd -SR +wU Nd Nd -QC +sk Nd Nd Nd @@ -48865,24 +48862,24 @@ aa aa aa Nd -sf +Dn ZW ZW ZW ZW -OT +Ux Nd -Ln -ST -ST +oV +Uk +Uk Nd -Qp -Sd -Nt +Hj +NS +TY Nd -ST -ST -Ln +Uk +Uk +oV Nd aa aa @@ -49122,24 +49119,24 @@ aa aa aa Nd -Bq -RK -Qy -Yj +TZ +yf +Tg +Qd ZW -Wz +Ru Nd -xO -QN -ZE +yX +Lj +OO Nd -Qp -Qz -Nt +Hj +QF +TY Nd -ZE -QN -RO +OO +Lj +Oy Nd aa aa @@ -58969,7 +58966,7 @@ aa aa aa aa -Qc +wi aa aa aa @@ -72327,16 +72324,16 @@ aa aa aa bj -YC -YC -YC -YC -YC -YC -YC -YC -YC -YC +tv +tv +tv +tv +tv +tv +tv +tv +tv +tv fx aa aa @@ -72584,16 +72581,16 @@ aa aa aa bj -Vk -YC -YC -YC -YC -YC -YC -YC -YC -Vk +NB +tv +tv +tv +tv +tv +tv +tv +tv +NB fx aa aa @@ -72841,16 +72838,16 @@ aa aa aa bj -Vk -YC -YC -YC -YC -YC -YC -YC -YC -Vk +NB +tv +tv +tv +tv +tv +tv +tv +tv +NB fx aa aa @@ -73098,16 +73095,16 @@ aa aa aa bj -Vk -YC -YC -YC -YC -YC -YC -YC -YC -Vk +NB +tv +tv +tv +tv +tv +tv +tv +tv +NB fx aa aa @@ -73355,16 +73352,16 @@ aa aa aa bj -YC -YC -Wx -YC -Yv -Ui -YC -Zl -YC -YC +tv +tv +rg +tv +Ld +Lm +tv +Qw +tv +tv fx aa aa diff --git a/_maps/templates/hilbertshotel.dmm b/_maps/templates/hilbertshotel.dmm index da5d13d93e..5654e0428f 100644 --- a/_maps/templates/hilbertshotel.dmm +++ b/_maps/templates/hilbertshotel.dmm @@ -72,7 +72,7 @@ /turf/open/indestructible/hotelwood, /area/hilbertshotel) "n" = ( -/obj/effect/landmark/xmastree, +/obj/effect/landmark/xmastree/hilbert, /turf/open/indestructible/hotelwood, /area/hilbertshotel) "o" = ( diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 1d47549685..68515426c3 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -70,6 +70,7 @@ ///Heretics -- #define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic)) +#define IS_HERETIC_MONSTER(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) #define PATH_SIDE "Side" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 7eebada734..d12fe77448 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -81,6 +81,8 @@ //stamina stuff /// crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit #define STAMINA_CRIT 140 +/// Threshold for leaving stamina critical +#define STAMINA_CRIT_REMOVAL_THRESHOLD 100 /// Threshold under for which you are unable to draw from stamina health to replace stamina buffer #define STAMINA_NO_OVERDRAW_THRESHOLD 100 diff --git a/code/__DEFINES/combat/stamina_combat.dm b/code/__DEFINES/combat/stamina_combat.dm index 1f781ca3e0..351009f27f 100644 --- a/code/__DEFINES/combat/stamina_combat.dm +++ b/code/__DEFINES/combat/stamina_combat.dm @@ -10,7 +10,7 @@ /// Usage for eyestabbing with a screwdriver #define STAMINA_COST_ITEM_EYESTAB 7.5 /// Usage for shoving yourself off the ground instantly -#define STAMINA_COST_SHOVE_UP 10 +#define STAMINA_COST_SHOVE_UP 15 //items total mass, used to calculate their attacks' stamina costs. If not defined, the cost will be (w_class * 1.25) #define TOTAL_MASS_TINY_ITEM 1.25 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 7b214df421..51a5fb3ece 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -490,6 +490,17 @@ #define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful #define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites #define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component +/// Checks if a nanite component is able to be controlled by console +#define COMSIG_NANITE_CHECK_CONSOLE_LOCK "is_console_locked" +/// Checks if a nanite component is able to be interfaced with by a host with innate nanite control +#define COMSIG_NANITE_CHECK_HOST_LOCK "is_host_locked" +/// Checks if a nanite component is able to be overwritten by viral replica +#define COMSIG_NANITE_CHECK_VIRAL_PREVENTION "is_virus_locked" + #define NANITE_CHANGES_LOCKED 1 +// Internal signals that programs register to and respond with to not require for loops +#define COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK "naniteiconsolelocked" +#define COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK "naniteihostlocked" +#define COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK "naniteiviruslocked" // /datum/component/storage signals #define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool. diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index 6f1740cc9f..7fe5fa4876 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -67,3 +67,13 @@ #define LOADOUT_LIMB_AMPUTATED "Amputated" #define LOADOUT_LIMBS list(LOADOUT_LIMB_NORMAL,LOADOUT_LIMB_PROSTHETIC,LOADOUT_LIMB_AMPUTATED) //you can amputate your legs/arms though + +//loadout saving/loading specific defines +#define MAXIMUM_LOADOUT_SAVES 5 +#define LOADOUT_ITEM "loadout_item" +#define LOADOUT_COLOR "loadout_color" + +//loadout item flags +#define LOADOUT_CAN_NAME (1<<0) //renaming items +#define LOADOUT_CAN_DESCRIPTION (1<<1) //adding a custom description to items +#define LOADOUT_CAN_COLOR_POLYCHROMIC (1<<2) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e8849d04c8..153a82ad5e 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -48,6 +48,8 @@ #define MOB_EPIC (1 << 7) // Megafauna #define MOB_REPTILE (1 << 8) #define MOB_SPIRIT (1 << 9) +/// Mobs that otherwise support nanites +#define MOB_NANITES (1 << 10) // Organ defines for carbon mobs #define ORGAN_ORGANIC 1 @@ -56,6 +58,7 @@ #define BODYPART_ORGANIC 1 #define BODYPART_ROBOTIC 2 #define BODYPART_HYBRID 3 +#define BODYPART_NANITES 4 #define HYBRID_BODYPART_DAMAGE_THRESHHOLD 25 //How much damage has to be suffered until the damage threshhold counts as passed #define HYBRID_BODYPART_THESHHOLD_MINDAMAGE 15 //Which damage value this limb cannot be healed out of via easy nonsurgical means if the threshhold has been passed, state resets if damage value goes below mindamage. diff --git a/code/__DEFINES/mobs/innate_abilities.dm b/code/__DEFINES/mobs/innate_abilities.dm new file mode 100644 index 0000000000..d2d3dbbc67 --- /dev/null +++ b/code/__DEFINES/mobs/innate_abilities.dm @@ -0,0 +1,29 @@ +// helpers + +// sources +/// Species +#define ABILITY_SOURCE_SPECIES "species" +/// Changeling +#define ABILITY_SOURCE_CHANGELING "changeling" + +// abilities +/// Full customization and transformation of mutantparts/hair/sprite accessories/etc - excludes name by default +#define INNATE_ABILITY_HUMANOID_CUSTOMIZATION "humanoid_customization" +/// Slime blobform +#define INNATE_ABILITY_SLIME_BLOBFORM "slime_blobform" +/// limb regrowth +#define INNATE_ABILITY_LIMB_REGROWTH "limb_regrowth" + +/// ability properties +// customization/body change +/// is this silent? +#define PROPERTY_CUSTOMIZATION_SILENT "silent" +// blobform +/// Blobform color +#define PROPERTY_BLOBFORM_COLOR "color" +// limb regrwoth +/// limb regrowth usage type +#define PROPERTY_LIMB_REGROWTH_USAGE_TYPE "cost" + /// blood + #define REGROWTH_USES_BLOOD "blood" + diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index e70955845c..2562bfe4d3 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "5.2.8" +#define TGS_DMAPI_VERSION "5.2.9" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -117,22 +117,22 @@ //REQUIRED HOOKS /** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! - * - * * event_handler - Optional user defined [/datum/tgs_event_handler]. - * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. - */ + * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * + * * event_handler - Optional user defined [/datum/tgs_event_handler]. + * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + */ /world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) return /** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. - * - * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. - * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 - * Before this point, note that any static files or directories may be in use by another server. Your code should account for this. - * This function should not be called before ..() in [/world/proc/New]. - */ + * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * + * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. + * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 + * Before this point, note that any static files or directories may be in use by another server. Your code should account for this. + * This function should not be called before ..() in [/world/proc/New]. + */ /world/proc/TgsInitializationComplete() return @@ -140,8 +140,8 @@ #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return /** - * Call this at the beginning of [world/proc/Reboot]. - */ + * Call this at the beginning of [world/proc/Reboot]. + */ /world/proc/TgsReboot() return @@ -175,16 +175,16 @@ var/deprefixed_parameter /** - * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. - */ + * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. + */ /datum/tgs_version/proc/Wildcard() return /** - * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] equals some other version. - * - * other_version - The [/datum/tgs_version] to compare against. - */ + * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] equals some other version. + * + * other_version - The [/datum/tgs_version] to compare against. + */ /datum/tgs_version/proc/Equals(datum/tgs_version/other_version) return @@ -234,10 +234,10 @@ var/datum/tgs_chat_channel/channel /** - * User definable callback for handling TGS events. - * - * event_code - One of the TGS_EVENT_ defines. Extra parameters will be documented in each - */ + * User definable callback for handling TGS events. + * + * event_code - One of the TGS_EVENT_ defines. Extra parameters will be documented in each + */ /datum/tgs_event_handler/proc/HandleEvent(event_code, ...) set waitfor = FALSE return @@ -252,11 +252,11 @@ var/admin_only = FALSE /** - * Process command activation. Should return a string to respond to the issuer with. - * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. - */ + * Process command activation. Should return a string to respond to the issuer with. + * + * sender - The [/datum/tgs_chat_user] who issued the command. + * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + */ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") @@ -271,48 +271,48 @@ return /** - * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. - */ + * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. + */ /world/proc/TgsAvailable() return // No function below this succeeds if it TgsAvailable() returns FALSE or if TgsNew() has yet to be called. /** - * Forces a hard reboot of DreamDaemon by ending the process. - * - * Unlike del(world) clients will try to reconnect. - * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again - */ + * Forces a hard reboot of DreamDaemon by ending the process. + * + * Unlike del(world) clients will try to reconnect. + * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again + */ /world/proc/TgsEndProcess() return /** - * Send a message to connected chats. - * - * message - The string to send. - * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. - */ + * Send a message to connected chats. + * + * message - The string to send. + * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. + */ /world/proc/TgsTargetedChatBroadcast(message, admin_only = FALSE) return /** - * Send a private message to a specific user. - * - * message - The string to send. - * user: The [/datum/tgs_chat_user] to PM. - */ + * Send a private message to a specific user. + * + * message - The string to send. + * user: The [/datum/tgs_chat_user] to PM. + */ /world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) return // The following functions will sleep if a call to TgsNew() is sleeping /** - * Send a message to connected chats that are flagged as game-related in TGS. - * - * message - The string to send. - * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. - */ + * Send a message to connected chats that are flagged as game-related in TGS. + * + * message - The string to send. + * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. + */ /world/proc/TgsChatBroadcast(message, list/channels = null) return diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 1a3c926884..2275c4b90b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -213,6 +213,10 @@ #define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" /// Prevents stamina buffer regeneration #define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" /// Prevents stamina regeneration #define TRAIT_ARMOR_BROKEN "armor_broken" //acts as if you are wearing no clothing when taking damage, does not affect non-clothing sources of protection +/// forces update_density to make us not dense +#define TRAIT_LIVING_NO_DENSITY "living_no_density" +/// forces us to not render our overlays +#define TRAIT_HUMAN_NO_RENDER "human_no_render" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm index 0e97314f1f..34b31cc1c7 100644 --- a/code/__HELPERS/custom_holoforms.dm +++ b/code/__HELPERS/custom_holoforms.dm @@ -46,17 +46,29 @@ I = getPAIHologramIcon(I) return I -//Errors go to user. -/proc/generate_custom_holoform_from_prefs_safe(datum/preferences/prefs, mob/user) - if(user) - if(user.client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) - to_chat(user, "You are attempting to set your custom holoform too fast!") - return - return generate_custom_holoform_from_prefs(prefs, null, null, TRUE, TRUE) - //Prompts this client for custom holoform parameters. /proc/user_interface_custom_holoform(client/C) var/datum/preferences/target_prefs = C.prefs + if(target_prefs.path) + var/list/characters = list() + var/savefile/S = new /savefile(target_prefs.path) + if(S) + var/name + var/max_save_slots = C.prefs.max_save_slots + for(var/i=1, i<=max_save_slots, i++) + S.cd = "/character[i]" + S["real_name"] >> name + if(name) + characters[name] = i + var/chosen_name = input(C, "Which character do you wish to use as your appearance.") as anything in characters + if(chosen_name) + if(C.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) + to_chat(C.mob, "You are attempting to set your custom holoform too fast!") + return + target_prefs = new(C) + if(!target_prefs.load_character(characters[chosen_name], TRUE)) + target_prefs = C.prefs + ASSERT(target_prefs) //In the future, maybe add custom path allowances a la admin create outfit but for now.. - return generate_custom_holoform_from_prefs_safe(target_prefs, C.mob) + return generate_custom_holoform_from_prefs(target_prefs, null, null, TRUE, TRUE) diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 8c4fba367d..e8d9362dc3 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -100,5 +100,5 @@ SUBSYSTEM_DEF(input) /// *sigh /client/verb/NONSENSICAL_VERB_THAT_DOES_NOTHING() - set name = ".NONSENSICAL_VERB_THAT_DOES_NOTHING" + set name = "NONSENSICAL_VERB_THAT_DOES_NOTHING" set hidden = TRUE diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 0f936bdeff..4963e33cc3 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -670,11 +670,12 @@ SUBSYSTEM_DEF(job) var/mob/the_mob = N if(!the_mob) the_mob = M // cause this doesn't get assigned if player is a latejoiner - if(the_mob.client && the_mob.client.prefs && (the_mob.client.prefs.chosen_gear && the_mob.client.prefs.chosen_gear.len)) + var/list/chosen_gear = the_mob.client.prefs.loadout_data["SAVE_[the_mob.client.prefs.loadout_slot]"] + if(the_mob.client && the_mob.client.prefs && (chosen_gear && chosen_gear.len)) if(!ishuman(M))//no silicons allowed return - for(var/i in the_mob.client.prefs.chosen_gear) - var/datum/gear/G = i + for(var/i in chosen_gear) + var/datum/gear/G = istext(i[LOADOUT_ITEM]) ? text2path(i[LOADOUT_ITEM]) : i[LOADOUT_ITEM] G = GLOB.loadout_items[initial(G.category)][initial(G.subcategory)][initial(G.name)] if(!G) continue @@ -690,6 +691,19 @@ SUBSYSTEM_DEF(job) if(!permitted) continue var/obj/item/I = new G.path + if(I && length(i[LOADOUT_COLOR])) //handle loadout colors + //handle polychromic items + if((G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) && length(G.loadout_initial_colors)) + var/datum/element/polychromic/polychromic = I.comp_lookup["item_worn_overlays"] //stupid way to do it but GetElement does not work for this + if(polychromic && istype(polychromic)) + var/list/polychromic_entry = polychromic.colors_by_atom[I] + if(polychromic_entry) + polychromic.colors_by_atom[I] = i[LOADOUT_COLOR] + I.update_icon() + else + //handle non-polychromic items (they only have one color) + I.add_atom_colour(i[LOADOUT_COLOR][1], FIXED_COLOUR_PRIORITY) + I.update_icon() if(!M.equip_to_slot_if_possible(I, G.slot, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first if(iscarbon(M)) var/mob/living/carbon/C = M diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 29add286be..4e0ce3fc16 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -17,6 +17,44 @@ var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners + /// Delete ourselves when we're depleted. + var/qdel_self_on_depletion = TRUE + /// Allow deletion + var/can_be_deleted = TRUE + /// Whether or not we can survive no cloud syncing without errors + var/requires_cloud_sync = TRUE + /// Permanent programs - can never be deleted. does not count towards max_programs. + var/list/datum/nanite_program/permanent_programs = list() + + // Vulnerabilities + /// EMP flat deletion upper + var/emp_flat_deletion_upper = 35 + /// EMP flat deletion lower + var/emp_flat_deletion_lower = 20 + /// EMP percent deletion upper + var/emp_percent_deletion_upper = 0.35 + /// EMP percent deletion lower + var/emp_percent_deletion_lower = 0.30 + /// EMP severity multiplier, capping to 0 to 100 + var/emp_severity_mod = 1 + /// EMP severity div for cloudsync reset chance + var/emp_desync_mod = 0.25 + + /// Shock flat deletion upper + var/shock_flat_deletion_upper = 45 + /// Shock flat deletion lower + var/shock_flat_deletion_lower = 25 + /// Shock percent deletion upper + var/shock_percent_deletion_upper = 0.25 + /// Shock percent deletion lower + var/shock_percent_deletion_lower = 0.20 + + + /// minor shock deletion lower + var/minor_shock_deletion_lower = 5 + /// minor shock deletion upper + var/minor_shock_deletion_upper = 15 + /datum/component/nanites/Initialize(amount = 100, cloud = 0) if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup)) return COMPONENT_INCOMPATIBLE @@ -55,6 +93,9 @@ RegisterSignal(parent, COMSIG_NANITE_ADD_PROGRAM, .proc/add_program) RegisterSignal(parent, COMSIG_NANITE_SCAN, .proc/nanite_scan) RegisterSignal(parent, COMSIG_NANITE_SYNC, .proc/sync) + RegisterSignal(parent, COMSIG_NANITE_CHECK_CONSOLE_LOCK, .proc/check_console_locking) + RegisterSignal(parent, COMSIG_NANITE_CHECK_HOST_LOCK, .proc/check_host_lockout) + RegisterSignal(parent, COMSIG_NANITE_CHECK_VIRAL_PREVENTION, .proc/check_viral_prevention) if(isliving(parent)) RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp) @@ -118,13 +159,63 @@ next_sync = world.time + NANITE_SYNC_DELAY set_nanite_bar() +/** + * Called when nanites are depleted. + * Deletes ourselves by default. + */ +/datum/component/nanites/proc/nanites_depleted() + if(qdel_self_on_depletion) + delete_nanites() +/** + * Used to rid ourselves + */ /datum/component/nanites/proc/delete_nanites() - qdel(src) + if(can_be_deleted) + qdel(src) + +/** + * Adds permanent programs + * + * WARNING: Has no sanity checks. Make sure you know what you are doing! (make sure programs do not conflict) + */ +/datum/component/nanites/proc/add_permanent_program(list/program, immutable = FALSE) + if(!islist(program)) + program = list(program) + for(var/i in program) + if(i in permanent_programs) + continue + var/datum/nanite_program/P = i + permanent_programs += P + if(immutable) + P.immutable = TRUE + for(var/e in programs) + var/datum/nanite_program/E = e + if(E.unique && (E.type == P.type)) + qdel(e) + programs += P + +/** + * Checks if we can block out console modification + */ +/datum/component/nanites/proc/check_console_locking() + return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK) + +/** + * Checks if we can lock out host internal conscious modification + */ +/datum/component/nanites/proc/check_host_lockout() + return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK) + +/** + * Checks if we can block out viral replica + */ +/datum/component/nanites/proc/check_viral_prevention() + return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK) //Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status) /datum/component/nanites/proc/sync(datum/signal_source, datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE) - var/list/programs_to_remove = programs.Copy() + var/list/programs_to_remove = programs.Copy() - permanent_programs var/list/programs_to_add = source.programs.Copy() for(var/X in programs) var/datum/nanite_program/NP = X @@ -151,7 +242,7 @@ sync(null, cloud_copy) return //Without cloud syncing nanites can accumulate errors and/or defects - if(prob(8) && programs.len) + if(prob(8) && programs.len && requires_cloud_sync) var/datum/nanite_program/NP = pick(programs) NP.software_error() @@ -159,8 +250,11 @@ for(var/X in programs) var/datum/nanite_program/NP = X if(NP.unique && NP.type == new_program.type) - qdel(NP) - if(programs.len >= max_programs) + if(NP in permanent_programs) + return COMPONENT_PROGRAM_NOT_INSTALLED + else + qdel(NP) + if((programs.len - length(permanent_programs)) >= max_programs) return COMPONENT_PROGRAM_NOT_INSTALLED if(source_program) source_program.copy_programming(new_program) @@ -177,7 +271,7 @@ /datum/component/nanites/proc/adjust_nanites(datum/source, amount) nanite_volume = clamp(nanite_volume + amount, 0, max_nanites) if(nanite_volume <= 0) //oops we ran out - qdel(src) + nanites_depleted() /datum/component/nanites/proc/set_nanite_bar(remove = FALSE) var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD] @@ -191,28 +285,28 @@ holder.icon_state = "nanites[nanite_percent]" /datum/component/nanites/proc/on_emp(datum/source, severity) - nanite_volume *= (rand(60, 90) * 0.01) //Lose 10-40% of nanites - adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume - if(prob(40/severity)) + severity *= emp_severity_mod + var/loss = (severity / 100) * (rand(emp_percent_deletion_lower, emp_percent_deletion_upper) * nanite_volume) + rand(emp_flat_deletion_lower, emp_flat_deletion_upper) + adjust_nanites(null, -loss) + if(prob(severity * emp_desync_mod)) cloud_id = 0 for(var/X in programs) var/datum/nanite_program/NP = X NP.on_emp(severity) - /datum/component/nanites/proc/on_shock(datum/source, shock_damage, siemens_coeff = 1, flags = NONE) if(shock_damage < 1) return if(!HAS_TRAIT_NOT_FROM(host_mob, TRAIT_SHOCKIMMUNE, "nanites"))//Another shock protection must protect nanites too, but nanites protect only host - nanite_volume *= (rand(45, 80) * 0.01) //Lose 20-55% of nanites - adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume + var/loss = (rand(shock_percent_deletion_lower, shock_percent_deletion_upper) * nanite_volume) + rand(shock_flat_deletion_lower, shock_flat_deletion_upper) + adjust_nanites(null, -loss) for(var/X in programs) var/datum/nanite_program/NP = X NP.on_shock(shock_damage) /datum/component/nanites/proc/on_minor_shock(datum/source) - adjust_nanites(null, -(rand(5, 15))) //Lose 5-15 flat nanite volume + adjust_nanites(null, -(rand(minor_shock_deletion_lower, minor_shock_deletion_upper))) //Lose 5-15 flat nanite volume for(var/X in programs) var/datum/nanite_program/NP = X NP.on_minor_shock() @@ -237,7 +331,7 @@ NP.receive_comm_signal(comm_code, comm_message, comm_source) /datum/component/nanites/proc/check_viable_biotype() - if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) + if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD|MOB_NANITES))) qdel(src) //bodytype no longer sustains nanites /datum/component/nanites/proc/check_access(datum/source, obj/O) @@ -378,3 +472,10 @@ id++ mob_programs += list(mob_program) data["mob_programs"] = mob_programs + +/** + * Subtype that doesn't erase itself from running out + */ +/datum/component/nanites/permanent + qdel_self_on_depletion = FALSE + can_be_deleted = FALSE diff --git a/code/datums/dna.dm b/code/datums/dna.dm index fe041c41ff..b6b93bdddc 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -660,27 +660,34 @@ return if(dna.stability > 0) return - var/instability = -dna.stability + var/instability = - dna.stability dna.remove_all_mutations() dna.stability = 100 - if(prob(max(70-instability,0))) + if(prob(max(70 - instability,0))) switch(rand(0,3)) //not complete and utter death if(0) monkeyize() if(1) gain_trauma(/datum/brain_trauma/severe/paralysis) if(2) + unequip_everything() + drop_all_held_items() corgize() if(3) to_chat(src, "Oh, we actually feel quite alright!") else switch(rand(0,3)) if(0) + unequip_everything() + drop_all_held_items() gib() if(1) + unequip_everything() + drop_all_held_items() dust() - if(2) + unequip_everything() + drop_all_held_items() death() petrify(INFINITY) if(3) @@ -689,6 +696,8 @@ if(BP) BP.dismember() else + unequip_everything() + drop_all_held_items() gib() else set_species(/datum/species/dullahan) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 7ae0d04b05..600bf9250e 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -170,7 +170,7 @@ if(istype(source,/obj/item/clothing/suit/hooded)) //so how come it be like this, where toggleable headslots are named separately (helmet/hood) anyways? var/obj/item/clothing/suit/hooded/sourcesuit = source H = sourcesuit.hood - else if(istype(source,/obj/item/clothing/suit/space/hardsuit)) + else if(istype(source,/obj/item/clothing/suit/space/hardsuit)) var/obj/item/clothing/suit/space/hardsuit/sourcesuit = source H = sourcesuit.helmet else diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 14f3eae689..5683367c55 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -55,7 +55,7 @@ return user.log_message(msg, LOG_EMOTE) - msg = "[user] " + msg + msg = "[user] [msg]" for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) @@ -144,7 +144,7 @@ var/sound //Sound to play when emote is called var/vary = FALSE //used for the honk borg emote var/volume = 50 - mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon) + mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/camera/aiEye) /datum/emote/sound/run_emote(mob/user, params) . = ..() diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 1abe077980..90982a00ec 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -163,7 +163,7 @@ timeout = 3 MINUTES /datum/mood_event/gates_of_mansus - description = "LIVING IN A PERFORMANCE IS WORSE THAN DEATH\n" + description = "I HAD A GLIMPSE OF THE HORROR BEYOND THIS WORLD. REALITY UNCOILED BEFORE MY EYES!\n" mood_change = -25 timeout = 4 MINUTES diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index cabdd7cfb8..19b12410bc 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -586,7 +586,7 @@ var/list/mob/living/targets = list() for(var/mob/living/potential_target in oview(owner, 1)) - if(IS_HERETIC(potential_target) || potential_target.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) + if(IS_HERETIC(potential_target) || IS_HERETIC_MONSTER(potential_target)) continue targets += potential_target if(LAZYLEN(targets)) diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 43ea487894..e7f8c63d4a 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -150,7 +150,6 @@ /area/shuttle/escape/luxury name = "Luxurious Emergency Shuttle" - noteleport = TRUE /area/shuttle/escape/arena name = "The Arena" diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index d103e2a856..e515f56196 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -75,3 +75,38 @@ if (!area_motion) if(isliving(AM)) newTarget(AM) + +/obj/machinery/camera/motion/thunderdome + name = "entertainment camera" + network = list("thunder") + c_tag = "Arena" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF + +/obj/machinery/camera/motion/thunderdome/Initialize() + . = ..() + proximity_monitor.SetRange(7) + +/obj/machinery/camera/motion/thunderdome/HasProximity(atom/movable/AM as mob|obj) + if (!isliving(AM) || get_area(AM) != get_area(src)) + return + localMotionTargets |= WEAKREF(AM) + if (!detectTime) + for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines) + TV.notify(TRUE) + detectTime = world.time + 30 SECONDS + +/obj/machinery/camera/motion/thunderdome/process() + if (!detectTime) + return + + for (var/datum/weakref/targetref in localMotionTargets) + var/mob/target = targetref.resolve() + if(QDELETED(target) || target.stat == DEAD || get_dist(src, target) > 7 || get_area(src) != get_area(target)) + localMotionTargets -= targetref + + if (localMotionTargets.len) + detectTime = world.time + 30 SECONDS + else if (world.time > detectTime) + detectTime = 0 + for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines) + TV.notify(FALSE) \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index d42291cd3c..03a5a17493 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -246,10 +246,12 @@ network = list("thunder") density = FALSE circuit = null - interaction_flags_atom = NONE // interact() is called by BigClick() + //interaction_flags_atom = NONE // interact() is called by BigClick() var/icon_state_off = "entertainment_blank" var/icon_state_on = "entertainment" +/* If someone would like to try to get this long-distance viewing thing working, be my guest. I tried everything I could possibly think of and it just refused to operate correctly. + /obj/machinery/computer/security/telescreen/entertainment/Initialize() . = ..() RegisterSignal(src, COMSIG_CLICK, .proc/BigClick) @@ -258,6 +260,8 @@ /obj/machinery/computer/security/telescreen/entertainment/proc/BigClick() interact(usr) +*/ + /obj/machinery/computer/security/telescreen/entertainment/proc/notify(on) if(on && icon_state == icon_state_off) say(pick( @@ -278,7 +282,7 @@ name = "circuitry telescreen" desc = "Used for watching the other eggheads from the safety of the circuitry lab." network = list("rd") - + /obj/machinery/computer/security/telescreen/ce name = "\improper Chief Engineer's telescreen" desc = "Used for watching the engine, telecommunications and the minisat." diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index cde6f5bd5a..4080a45af0 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -17,9 +17,6 @@ /obj/item/storage/fancy icon = 'icons/obj/food/containers.dmi' - icon_state = "donutbox6" - name = "donut box" - desc = "Mmm. Donuts." resistance_flags = FLAMMABLE var/icon_type = "donut" var/spawn_type = null @@ -59,18 +56,22 @@ fancy_open = TRUE update_icon() +#define DONUT_INBOX_SPRITE_WIDTH 3 + /* * Donut Box */ /obj/item/storage/fancy/donut_box - icon = 'icons/obj/food/containers.dmi' - icon_state = "donutbox6" - icon_type = "donut" name = "donut box" + desc = "Mmm. Donuts." + icon = 'icons/obj/food/donut.dmi' + icon_state = "donutbox_inner" + icon_type = "donut" spawn_type = /obj/item/reagent_containers/food/snacks/donut fancy_open = TRUE custom_price = PRICE_NORMAL + appearance_flags = KEEP_TOGETHER /obj/item/storage/fancy/donut_box/ComponentInitialize() . = ..() @@ -78,6 +79,36 @@ STR.max_items = 6 STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/donut)) +/obj/item/storage/fancy/donut_box/PopulateContents() + . = ..() + update_icon() + +/obj/item/storage/fancy/donut_box/update_icon_state() + if(fancy_open) + icon_state = "donutbox_inner" + else + icon_state = "donutbox" + +/obj/item/storage/fancy/donut_box/update_overlays() + . = ..() + + if (!fancy_open) + return + + var/donuts = 0 + + for (var/_donut in contents) + var/obj/item/reagent_containers/food/snacks/donut/donut = _donut + if (!istype(donut)) + continue + + . += image(icon = initial(icon), icon_state = donut.in_box_sprite(), pixel_x = donuts * DONUT_INBOX_SPRITE_WIDTH) + donuts += 1 + + . += image(icon = initial(icon), icon_state = "donutbox_top") + +#undef DONUT_INBOX_SPRITE_WIDTH + /* * Egg Box */ diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 2a4856f60e..acddf27b6f 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -271,6 +271,11 @@ icon = "the_lightbulb" desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms." +/datum/barsign/goose + name = "The Loose Goose" + icon = "goose" + desc = "Drink till you puke and/or break the laws of reality!" + /datum/barsign/cybersylph name = "Cyber Sylph's" icon = "cybersylph" diff --git a/code/game/say.dm b/code/game/say.dm index a5691ad11f..61dd9c0879 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -96,18 +96,16 @@ GLOBAL_LIST_INIT(freqtospan, list( return "[say_mod(input, message_mode)][spanned ? ", \"[spanned]\"" : ""]" // Citadel edit [spanned ? ", \"[spanned]\"" : ""]" -#define ENCODE_HTML_EPHASIS(input, char, html, varname) \ - var/static/regex/##varname = regex("[char]{2}(.+?)[char]{2}", "g");\ - input = varname.Replace_char(input, "<[html]>$1") - +/// Converts specific characters, like +, |, and _ to formatted output. /atom/movable/proc/say_emphasis(input) - ENCODE_HTML_EPHASIS(input, "\\|", "i", italics) - ENCODE_HTML_EPHASIS(input, "\\+", "b", bold) - ENCODE_HTML_EPHASIS(input, "_", "u", underline) + var/static/regex/italics = regex(@"\|(\S[\w\W]*?\S)\|", "g") + input = italics.Replace_char(input, "$1") + var/static/regex/bold = regex(@"\+(\S[\w\W]*?\S)\+", "g") + input = bold.Replace_char(input, "$1") + var/static/regex/underline = regex(@"_(\S[\w\W]*?\S)_", "g") + input = underline.Replace_char(input, "$1") return input -#undef ENCODE_HTML_EPHASIS - /// Quirky citadel proc for our custom sayverbs to strip the verb out. Snowflakey as hell, say rewrite 3.0 when? /atom/movable/proc/quoteless_say_quote(input, list/spans = list(speech_span), message_mode) if((input[1] == "!") && (length_char(input) > 1)) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 41662c1cad..ffe5371619 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -131,7 +131,7 @@ for(var/mob/living/mob in thunderdome) qdel(mob) //Clear mobs for(var/obj/obj in thunderdome) - if(!istype(obj, /obj/machinery/camera)) + if(!istype(obj, /obj/machinery/camera) && !istype(obj, /obj/effect/abstract/proximity_checker)) qdel(obj) //Clear objects var/area/template = locate(/area/tdome/arena_source) diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index a3a1403e58..38e6edc6d4 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -45,8 +45,12 @@ desc = "A solid wall of slightly twitching tendrils with a reflective glow." damaged_desc = "A wall of twitching tendrils with a reflective glow." icon_state = "blob_glow" + flags_1 = DEFAULT_RICOCHET_1 flags_ricochet = RICOCHET_SHINY point_return = 8 max_integrity = 100 brute_resist = 1 explosion_block = 2 + +/obj/structure/blob/shield/reflective/check_projectile_ricochet(obj/item/projectile/P) + return PROJECTILE_RICOCHET_FORCE diff --git a/code/modules/antagonists/eldritch_cult/eldritch_book.dm b/code/modules/antagonists/eldritch_cult/eldritch_book.dm index 839150d37d..7f23922432 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_book.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_book.dm @@ -40,7 +40,7 @@ ///Gives you a charge and destroys a corresponding influence /obj/item/forbidden_book/proc/get_power_from_influence(atom/target, mob/user) var/obj/effect/reality_smash/RS = target - to_chat(target, "You start drawing power from influence...") + to_chat(user, "You start drawing power from influence...") if(do_after(user,10 SECONDS,TRUE,RS)) qdel(RS) charge += 1 @@ -50,7 +50,7 @@ for(var/turf/T in range(1,target)) if(is_type_in_typecache(T, blacklisted_turfs)) - to_chat(target, "The terrain doesn't support runes!") + to_chat(user, "The terrain doesn't support runes!") return var/A = get_turf(target) to_chat(user, "You start drawing a rune...") diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm index 99794024f1..99f0ae7596 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm @@ -8,6 +8,12 @@ ///Used mainly for summoning ritual to prevent spamming the rune to create millions of monsters. var/is_in_use = FALSE +/obj/effect/eldritch/Initialize() + . = ..() + var/image/I = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src) + I.override = TRUE + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "heretic_rune", I) + /obj/effect/eldritch/attack_hand(mob/living/user) . = ..() if(.) @@ -69,6 +75,7 @@ if(is_type_in_list(local_atom_in_range,local_required_atom_list)) selected_atoms |= local_atom_in_range local_required_atoms -= list(local_required_atom_list) + break if(length(local_required_atoms) > 0) continue @@ -190,6 +197,19 @@ icon_state = "pierced_illusion" anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + alpha = 0 + invisibility = INVISIBILITY_OBSERVER + +/obj/effect/broken_illusion/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/show_presence), 15 SECONDS) + var/image/I = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src) + I.override = TRUE + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "pierced_reality", I) + +/obj/effect/broken_illusion/proc/show_presence() + invisibility = 0 + animate(src, alpha = 255, time = 15 SECONDS) /obj/effect/broken_illusion/attack_hand(mob/living/user) if(!ishuman(user)) @@ -228,17 +248,19 @@ explosion.start() /obj/effect/broken_illusion/examine(mob/user) + . = ..() if(!IS_HERETIC(user) && ishuman(user)) var/mob/living/carbon/human/human_user = user to_chat(human_user,"Your brain hurts when you look at this!") - human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,30) - . = ..() + human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,20,190) + SEND_SIGNAL(human_user, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) /obj/effect/reality_smash name = "/improper reality smash" icon = 'icons/effects/eldritch.dmi' anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + invisibility = INVISIBILITY_OBSERVER ///We cannot use icon_state since this is invisible, functions the same way but with custom behaviour. var/image_state = "reality_smash" ///Who can see us? diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 739304e822..da2c61ad16 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -16,9 +16,9 @@ return var/dist = get_dist(user.loc,target.loc) var/dir = get_dir(user.loc,target.loc) - + if(user.z != target.z) - to_chat(user,"[target.real_name] is beyond our reach.") + to_chat(user,"[target.real_name] is on another plane of existance!") else switch(dist) if(0 to 15) @@ -33,6 +33,34 @@ if(target.stat == DEAD) to_chat(user,"[target.real_name] is dead. Bring them onto a transmutation rune!") +/datum/action/innate/heretic_shatter + name = "Shattering Offer" + desc = "By breaking your blade, you will be granted salvation from a dire situation. (Teleports you to a random safe turf on your current z level, but destroys your blade.)" + background_icon_state = "bg_ecult" + button_icon_state = "shatter" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + check_flags = MOBILITY_HOLD|MOBILITY_MOVE|MOBILITY_USE + var/mob/living/carbon/human/holder + var/obj/item/melee/sickly_blade/sword + +/datum/action/innate/heretic_shatter/Grant(mob/user, obj/object) + sword = object + holder = user + //i know what im doing + return ..() + +/datum/action/innate/heretic_shatter/IsAvailable() + if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder)) + return TRUE + else + return FALSE + +/datum/action/innate/heretic_shatter/Activate() + var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE) + do_teleport(holder,safe_turf,forceMove = TRUE) + to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...") + qdel(sword) + /obj/item/melee/sickly_blade name = "eldritch blade" desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..." @@ -50,15 +78,28 @@ throwforce = 10 hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "lacerated", "ripped", "diced", "rended") + var/datum/action/innate/heretic_shatter/linked_action + +/obj/item/melee/sickly_blade/Initialize() + . = ..() + linked_action = new(src) /obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user) - if(!IS_HERETIC(user)) + if(!(IS_HERETIC(user) || !IS_HERETIC_MONSTER(user))) to_chat(user,"You feel a pulse of some alien intellect lash out at your mind!") var/mob/living/carbon/human/human_user = user human_user.AdjustParalyzed(5 SECONDS) return FALSE return ..() +/obj/item/melee/sickly_blade/pickup(mob/user) + . = ..() + linked_action.Grant(user, src) + +/obj/item/melee/sickly_blade/dropped(mob/user, silent) + . = ..() + linked_action.Remove(user, src) + /obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() var/datum/antagonist/heretic/cultie = user.mind.has_antag_datum(/datum/antagonist/heretic) @@ -103,7 +144,7 @@ /obj/item/clothing/neck/eldritch_amulet/equipped(mob/user, slot) . = ..() - if(ishuman(user) && user.mind && slot == SLOT_NECK && IS_HERETIC(user)) + if(ishuman(user) && user.mind && slot == SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) ADD_TRAIT(user, trait, CLOTHING_TRAIT) user.update_sight() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm index a7330cd93a..e0189944e5 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm @@ -264,12 +264,19 @@ if(!LH.target) var/datum/objective/A = new A.owner = user.mind - var/datum/mind/targeted = A.find_target()//easy way, i dont feel like copy pasting that entire block of code - LH.target = targeted.current + var/list/targets = list() + for(var/i in 0 to 3) + var/datum/mind/targeted = A.find_target()//easy way, i dont feel like copy pasting that entire block of code + if(!targeted) + break + targets[targeted.current.real_name] = targeted.current + LH.target = targets[input(user,"Choose your next target","Target") in targets] + + if(!LH.target && targets.len) + LH.target = pick(targets) //Tsk tsk, you can and will get another target if you want it or not. qdel(A) if(LH.target) to_chat(user,"Your new target has been selected, go and sacrifice [LH.target.real_name]!") - else to_chat(user,"target could not be found for living heart.") diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index fbaa6cd26e..ba79cca07a 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -34,7 +34,7 @@ desc = "Touch spell that allows you to channel the power of the Old Gods through you." hand_path = /obj/item/melee/touch_attack/mansus_fist school = "evocation" - charge_max = 150 + charge_max = 100 clothes_req = FALSE action_icon = 'icons/mob/actions/actions_ecult.dmi' action_icon_state = "mansus_grasp" @@ -104,57 +104,61 @@ desc = "Spreads rust onto nearby turfs." range = 2 -/obj/effect/proc_holder/spell/targeted/touch/blood_siphon +/obj/effect/proc_holder/spell/pointed/blood_siphon name = "Blood Siphon" - desc = "Touch spell that heals you while damaging the enemy, has a chance to transfer wounds between you and your enemy." - hand_path = /obj/item/melee/touch_attack/blood_siphon + desc = "A touch spell that heals your wounds while damaging the enemy. It has a chance to transfer wounds between you and your enemy." school = "evocation" charge_max = 150 clothes_req = FALSE - invocation_type = "none" + invocation = "FL'MS O'ET'RN'ITY" + invocation_type = "whisper" action_icon = 'icons/mob/actions/actions_ecult.dmi' action_icon_state = "blood_siphon" action_background_icon_state = "bg_ecult" + range = 9 -/obj/item/melee/touch_attack/blood_siphon - name = "Blood Siphon" - desc = "A sinister looking aura that distorts the flow of reality around it." - color = RUNE_COLOR_RED - icon_state = "disintegrate" - item_state = "disintegrate" - catchphrase = "SUN'AI'KINI'MAS" - -/obj/item/melee/touch_attack/blood_siphon/afterattack(atom/target, mob/user, proximity_flag, proximity) - if(!proximity_flag) - return - playsound(user, 'sound/effects/curseattack.ogg', 75, TRUE) +/obj/effect/proc_holder/spell/pointed/blood_siphon/cast(list/targets, mob/user) + . = ..() + var/target = targets[1] + playsound(user, 'sound/magic/demon_attack1.ogg', 75, TRUE) if(ishuman(target)) var/mob/living/carbon/human/tar = target if(tar.anti_magic_check()) - tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + tar.visible_message("The spell bounces off of [target]!","The spell bounces off of you!") return ..() - var/mob/living/carbon/C2 = user + var/mob/living/carbon/carbon_user = user if(isliving(target)) - var/mob/living/L = target - L.adjustBruteLoss(20) - C2.adjustBruteLoss(-20) + var/mob/living/living_target = target + living_target.adjustBruteLoss(20) + carbon_user.adjustBruteLoss(-20) if(iscarbon(target)) - var/mob/living/carbon/C1 = target - for(var/obj/item/bodypart/bodypart in C2.bodyparts) + var/mob/living/carbon/carbon_target = target + for(var/bp in carbon_user.bodyparts) + var/obj/item/bodypart/bodypart = bp for(var/i in bodypart.wounds) var/datum/wound/iter_wound = i if(prob(50)) continue - var/obj/item/bodypart/target_bodypart = locate(bodypart.type) in C1.bodyparts + var/obj/item/bodypart/target_bodypart = locate(bodypart.type) in carbon_target.bodyparts if(!target_bodypart) continue iter_wound.remove_wound() iter_wound.apply_wound(target_bodypart) - C1.blood_volume -= 20 - if(C2.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all - C2.blood_volume += 20 - return ..() + carbon_target.blood_volume -= 20 + if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all + carbon_user.blood_volume += 20 + return + +/obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent) + . = ..() + if(!.) + return FALSE + if(!istype(target,/mob/living)) + if(!silent) + to_chat(user, "You are unable to siphon [target]!") + return FALSE + return TRUE /obj/effect/proc_holder/spell/aimed/rust_wave name = "Patron's Reach" @@ -451,7 +455,7 @@ new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) for(var/mob/living/livies in T.contents - centre) - livies.adjustFireLoss(10) + livies.adjustFireLoss(5) _range++ sleep(3) @@ -500,7 +504,7 @@ new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) for(var/mob/living/livies in T.contents - current_user) - livies.adjustFireLoss(5) + livies.adjustFireLoss(2.5) /obj/effect/proc_holder/spell/targeted/worm_contract @@ -519,6 +523,7 @@ . = ..() if(!istype(user,/mob/living/simple_animal/hostile/eldritch/armsy)) to_chat(user, "You try to contract your muscles but nothing happens...") + return var/mob/living/simple_animal/hostile/eldritch/armsy/armsy = user armsy.contract_next_chain_into_single_tile() @@ -727,7 +732,7 @@ /obj/effect/proc_holder/spell/cone/staggered/entropic_plume/do_mob_cone_effect(mob/living/victim, level) . = ..() - if(victim.anti_magic_check() || IS_HERETIC(victim) || victim.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) + if(victim.anti_magic_check() || IS_HERETIC(victim) || IS_HERETIC_MONSTER(victim)) return victim.apply_status_effect(STATUS_EFFECT_AMOK) victim.apply_status_effect(STATUS_EFFECT_CLOUDSTRUCK, (level*10)) diff --git a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm index 425052de2a..1edb0ff19a 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm @@ -190,7 +190,7 @@ required_atoms = list(/mob/living/carbon/human) cost = 5 route = PATH_ASH - var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE) + var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE) /datum/eldritch_knowledge/final/ash_final/on_finished_recipe(mob/living/user, list/atoms, loc) priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the blaze, for Ashbringer [user.real_name] has come! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') diff --git a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm index 5e32cf1b4e..2b9f5b309f 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm @@ -173,9 +173,9 @@ /datum/eldritch_knowledge/summon/stalker name = "Lonely Ritual" gain_text = "I was able to combine my greed and desires to summon an eldritch beast I have not seen before." - desc = "You can now summon a Stalker using a knife, a flower, a pen and a piece of paper using a transmutation circle. Stalkers possess the ability to shapeshift into various forms while assuming the vigor and powers of that form." + desc = "You can now summon a Stalker using a knife, a candle, a pen and a piece of paper using a transmutation circle. Stalkers possess the ability to shapeshift into various forms while assuming the vigor and powers of that form." cost = 1 - required_atoms = list(/obj/item/kitchen/knife,/obj/item/reagent_containers/food/snacks/grown/poppy,/obj/item/pen,/obj/item/paper) + required_atoms = list(/obj/item/kitchen/knife,/obj/item/candle,/obj/item/pen,/obj/item/paper) mob_to_summon = /mob/living/simple_animal/hostile/eldritch/stalker next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/flesh_blade_upgrade_2) route = PATH_FLESH @@ -203,7 +203,7 @@ gain_text = "Our blood is all the same after all, the owl told me." desc = "You are granted a spell that drains some of the targets health, and returns it to you. It also has a chance to transfer any wounds you possess onto the target." cost = 1 - spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/blood_siphon + spell_to_add = /obj/effect/proc_holder/spell/pointed/blood_siphon next_knowledge = list(/datum/eldritch_knowledge/summon/raw_prophet,/datum/eldritch_knowledge/spell/area_conversion) /datum/eldritch_knowledge/final/flesh_final diff --git a/code/modules/arousal/arousal.dm b/code/modules/arousal/arousal.dm index 99683f1688..4503bba0e8 100644 --- a/code/modules/arousal/arousal.dm +++ b/code/modules/arousal/arousal.dm @@ -68,6 +68,10 @@ R.reaction(turfing ? target : target.loc, TOUCH, 1, 0) if(!turfing) R.trans_to(target, R.total_volume * (spill ? G.fluid_transfer_factor : 1)) + + overlay_fullscreen("flash", /obj/screen/fullscreen/flash) // To be more true to the hentai + clear_fullscreen("flash", 20) + G.last_orgasmed = world.time R.clear_reagents() diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index 671c22bde5..12a5002ac7 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -60,6 +60,9 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they if(!dry_run && (sold || delete_unsold)) if(ismob(thing)) thing.investigate_log("deleted through cargo export",INVESTIGATE_CARGO) + if(ismecha(thing)) + var/obj/mecha/mech = thing + mech.wreckage = null // why a mech left a wreck when sold i will never know qdel(thing) return report diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm index 0cf12fbc5d..86c6b114f0 100644 --- a/code/modules/cargo/packs/materials.dm +++ b/code/modules/cargo/packs/materials.dm @@ -147,6 +147,14 @@ crate_name = "fuel tank crate" crate_type = /obj/structure/closet/crate/large +/datum/supply_pack/materials/hightankfuel + name = "Large Fuel Tank Crate" + desc = "Contains a high-capacity fuel tank. Keep contents away from open flame." + cost = 2000 + contains = list(/obj/structure/reagent_dispensers/fueltank/high) + crate_name = "high-capacity fuel tank crate" + crate_type = /obj/structure/closet/crate/large + /datum/supply_pack/materials/watertank name = "Water Tank Crate" desc = "Contains a tank of dihydrogen monoxide... sounds dangerous." diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 16d6ca351d..2de91f172d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -179,7 +179,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) ///loadout stuff var/gear_points = 10 var/list/gear_categories - var/list/chosen_gear = list() + var/list/loadout_data = list() + var/loadout_slot = 1 //goes from 1 to MAXIMUM_LOADOUT_SAVES var/gear_category var/gear_subcategory @@ -806,6 +807,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" if(3) + //calculate your gear points from the chosen item + gear_points = CONFIG_GET(number/initial_gear_points) + var/list/chosen_gear = loadout_data["SAVE_[loadout_slot]"] + if(chosen_gear) + for(var/loadout_item in chosen_gear) + var/loadout_item_path = loadout_item[LOADOUT_ITEM] + if(loadout_item_path) + var/datum/gear/loadout_gear = text2path(loadout_item_path) + if(loadout_gear) + gear_points -= initial(loadout_gear.cost) + else + chosen_gear = list() + dat += "" dat += "" dat += "" @@ -861,15 +875,27 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(donoritem && !gear.donator_ckey_check(user.ckey)) continue var/class_link = "" - if(gear.type in chosen_gear) + var/list/loadout_item = has_loadout_gear(loadout_slot, "[gear.type]") + var/extra_color_data = "" + if(loadout_item) class_link = "style='white-space:normal;' class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=0'" + if(gear.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) + extra_color_data += "
Color" + for(var/loadout_color in loadout_item[LOADOUT_COLOR]) + extra_color_data += "   " + else + var/loadout_color_non_poly = "#FFFFFF" + if(length(loadout_item[LOADOUT_COLOR])) + loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1] + extra_color_data += "
Color" + extra_color_data += "   " else if(gear_points <= 0) class_link = "style='white-space:normal;' class='linkOff'" else if(donoritem) class_link = "style='white-space:normal;background:#ebc42e;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" else class_link = "style='white-space:normal;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" - dat += "" + dat += "" dat += "
[gear_points] loadout points remaining. \[Clear Loadout\]
You can only choose one item per category, unless it's an item that spawns in your backpack or hands.
[name]
[name][extra_color_data][gear.cost]" if(islist(gear.restricted_roles)) if(gear.restricted_roles.len) @@ -2609,8 +2635,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) current_tab = text2num(href_list["tab"]) if(href_list["preference"] == "gear") if(href_list["clear_loadout"]) - chosen_gear = list() - gear_points = CONFIG_GET(number/initial_gear_points) + loadout_data["SAVE_[loadout_slot]"] = list() save_preferences() if(href_list["select_category"]) gear_category = html_decode(href_list["select_category"]) @@ -2623,10 +2648,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(!G) return var/toggle = text2num(href_list["toggle_gear"]) - if(!toggle && (G.type in chosen_gear))//toggling off and the item effectively is in chosen gear) - chosen_gear -= G.type - gear_points += initial(G.cost) - else if(toggle && (!(is_type_in_ref_list(G, chosen_gear)))) + if(!toggle && has_loadout_gear(loadout_slot, "[G.type]"))//toggling off and the item effectively is in chosen gear) + remove_gear_from_loadout(loadout_slot, "[G.type]") + else if(toggle && !(has_loadout_gear(loadout_slot, "[G.type]"))) if(!is_loadout_slot_available(G.category)) to_chat(user, "You cannot take this loadout, as you've already chosen too many of the same category!") return @@ -2634,8 +2658,46 @@ GLOBAL_LIST_EMPTY(preferences_datums) to_chat(user, "This is an item intended for donator use only. You are not authorized to use this item.") return if(gear_points >= initial(G.cost)) - chosen_gear += G.type - gear_points -= initial(G.cost) + var/list/new_loadout_data = list(LOADOUT_ITEM = "[G.type]") + if(length(G.loadout_initial_colors)) + new_loadout_data[LOADOUT_COLOR] = G.loadout_initial_colors + else + new_loadout_data[LOADOUT_COLOR] = list("#FFFFFF") + if(loadout_data["SAVE_[loadout_slot]"]) + loadout_data["SAVE_[loadout_slot]"] += list(new_loadout_data) //double packed because it does the union of the CONTENTS of the lists + else + loadout_data["SAVE_[loadout_slot]"] = list(new_loadout_data) //double packed because you somehow had no save slot in your loadout? + if(href_list["loadout_color"]) + var/name = html_decode(href_list["loadout_gear_name"]) + var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name] + if(!G) + return + var/user_gear = has_loadout_gear(loadout_slot, "[G.type]") + if(!user_gear) + return + if(!length(user_gear[LOADOUT_COLOR])) + user_gear[LOADOUT_COLOR] = list("#FFFFFF") + var/current_color = user_gear[LOADOUT_COLOR][1] + var/new_color = input(user, "Polychromic options", "Choose Color", current_color) as color|null + user_gear[LOADOUT_COLOR][1] = sanitize_hexcolor(new_color, 6, TRUE, current_color) + if(href_list["loadout_color_polychromic"]) + var/name = html_decode(href_list["loadout_gear_name"]) + var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name] + if(!G) + return + var/user_gear = has_loadout_gear(loadout_slot, "[G.type]") + if(!user_gear) + return + var/list/color_options = list() + for(var/i=1, i<=length(G.loadout_initial_colors), i++) + color_options += "Color [i]" + var/color_to_change = input(user, "Polychromic options", "Recolor [name]") as null|anything in color_options + if(color_to_change) + var/color_index = text2num(copytext(color_to_change, 7)) + var/current_color = user_gear[LOADOUT_COLOR][color_index] + var/new_color = input(user, "Polychromic options", "Choose [color_to_change] Color", current_color) as color|null + if(new_color) + user_gear[LOADOUT_COLOR][color_index] = sanitize_hexcolor(new_color, 6, TRUE, current_color) ShowChoices(user) return 1 @@ -2853,8 +2915,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/is_loadout_slot_available(slot) var/list/L LAZYINITLIST(L) - for(var/i in chosen_gear) - var/datum/gear/G = i + for(var/i in loadout_data["SAVE_[loadout_slot]"]) + var/datum/gear/G = i[LOADOUT_ITEM] var/occupied_slots = L[initial(G.category)] ? L[initial(G.category)] + 1 : 1 LAZYSET(L, initial(G.category), occupied_slots) switch(slot) @@ -2868,6 +2930,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(L[slot] < DEFAULT_SLOT_AMT) return TRUE +/datum/preferences/proc/has_loadout_gear(save_slot, gear_type) + var/list/gear_list = loadout_data["SAVE_[save_slot]"] + for(var/loadout_gear in gear_list) + if(loadout_gear[LOADOUT_ITEM] == gear_type) + return loadout_gear + return FALSE + +/datum/preferences/proc/remove_gear_from_loadout(save_slot, gear_type) + var/find_gear = has_loadout_gear(save_slot, gear_type) + if(find_gear) + loadout_data["SAVE_[save_slot]"] -= list(find_gear) + #undef DEFAULT_SLOT_AMT #undef HANDS_SLOT_AMT #undef BACKPACK_SLOT_AMT diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index acc24b13bd..86f7622a93 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 46 +#define SAVEFILE_VERSION_MAX 47 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -262,6 +262,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["color_scheme"] = OLD_CHARACTER_COLORING //advanced is off by default + if(current_version < 47) //loadout save gets changed to json + var/text_to_load + S["loadout"] >> text_to_load + var/list/saved_loadout_paths = splittext(text_to_load, "|") + //MAXIMUM_LOADOUT_SAVES save slots per loadout now + for(var/i=1, i<= MAXIMUM_LOADOUT_SAVES, i++) + loadout_data["SAVE_[i]"] = list() + for(var/some_gear_item in saved_loadout_paths) + if(!ispath(text2path(some_gear_item))) + message_admins("Failed to copy item [some_gear_item] to new loadout system when migrating from version [current_version] to 40, issue: item is not a path") + continue + var/datum/gear/gear_item = text2path(some_gear_item) + if(!(initial(gear_item.loadout_flags) & LOADOUT_CAN_COLOR_POLYCHROMIC)) + loadout_data["SAVE_1"] += list(list(LOADOUT_ITEM = some_gear_item)) //for the migration we put their old save into the first save slot, which is loaded by default! + else + //the same but we setup some new polychromic data (you can't get the initial value for a list so we have to do this horrible thing here) + var/datum/gear/temporary_gear_item = new gear_item + loadout_data["SAVE_1"] += list(list(LOADOUT_ITEM = some_gear_item, LOADOUT_COLOR = temporary_gear_item.loadout_initial_colors)) + qdel(temporary_gear_item) + //it's double packed into a list because += will union the two lists contents + + S["loadout"] = safe_json_encode(loadout_data) + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -711,20 +734,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/list/json_from_file = json_decode(file2text(char_vr_path)) if(json_from_file) belly_prefs = json_from_file["belly_prefs"] + //gear loadout - var/text_to_load - S["loadout"] >> text_to_load - var/list/saved_loadout_paths = splittext(text_to_load, "|") - chosen_gear = list() - gear_points = CONFIG_GET(number/initial_gear_points) - for(var/i in saved_loadout_paths) - var/datum/gear/path = text2path(i) - if(path) - var/init_cost = initial(path.cost) - if(init_cost > gear_points) - continue - chosen_gear += path - gear_points -= init_cost + loadout_data = safe_json_decode(S["loadout"]) //try to fix any outdated data if necessary //preference updating will handle saving the updated data for us. @@ -1058,11 +1070,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //gear loadout - if(chosen_gear.len) - var/text_to_save = chosen_gear.Join("|") - S["loadout"] << text_to_save + if(length(loadout_data)) + S["loadout"] << safe_json_encode(loadout_data) else - S["loadout"] << "" //empty string to reset the value + S["loadout"] << safe_json_encode(list()) cit_character_pref_save(S) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 66d4b46c60..15a5345ad1 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -11,12 +11,25 @@ flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH resistance_flags = NONE mutantrace_variation = STYLE_MUZZLE + visor_flags_inv = HIDEFACE + var/flavor_adjust = TRUE //can it do the heehoo alt click to hide/show identity + +/obj/item/clothing/mask/gas/examine(mob/user) + . = ..() + if(flavor_adjust) + . += "Alt-click to toggle identity concealment. it's currently [flags_inv & HIDEFACE ? "on" : "off"]." + +/obj/item/clothing/mask/gas/AltClick(mob/user) + . = ..() + if(flavor_adjust && adjustmask(user, TRUE)) + return TRUE /obj/item/clothing/mask/gas/glass name = "glass gas mask" desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." //More accurate icon_state = "gas_clear" flags_inv = HIDEEYES + flavor_adjust = FALSE // **** Welding gas mask **** @@ -35,6 +48,7 @@ visor_flags_inv = HIDEEYES visor_flags_cover = MASKCOVERSEYES resistance_flags = FIRE_PROOF + flavor_adjust = FALSE /obj/item/clothing/mask/gas/welding/attack_self(mob/user) weldingvisortoggle(user) @@ -72,7 +86,6 @@ flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) - visor_flags_inv = HIDEFACE dog_fashion = /datum/dog_fashion/head/clown var/static/list/clownmask_designs @@ -87,15 +100,6 @@ "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow") ) -/obj/item/clothing/mask/gas/clown_hat/examine(mob/user) - . = ..() - . += "Alt-click to toggle identity concealment. it's currently [flags_inv & HIDEFACE ? "on" : "off"]." - -/obj/item/clothing/mask/gas/clown_hat/AltClick(mob/user) - . = ..() - if(adjustmask(user, TRUE)) - return TRUE - /obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user) if(!istype(user) || user.incapacitated()) return @@ -130,18 +134,8 @@ flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) - visor_flags_inv = HIDEFACE var/static/list/mimemask_designs -/obj/item/clothing/mask/gas/mime/examine(mob/user) - . = ..() - . += "Alt-click to toggle identity concealment. it's currently [flags_inv & HIDEFACE ? "on" : "off"]." - -/obj/item/clothing/mask/gas/mime/AltClick(mob/user) - . = ..() - if(adjustmask(user, TRUE)) - return TRUE - /obj/item/clothing/mask/gas/mime/Initialize(mapload) .=..() if(!mimemask_designs) diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index ea63ee611f..919a1d2949 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -53,6 +53,9 @@ new festive_tree(get_turf(src)) return INITIALIZE_HINT_QDEL +/obj/effect/landmark/xmastree/hilbert + christmas_tree = /obj/structure/flora/tree/pine/xmas + /obj/effect/landmark/xmastree/rdrod name = "festivus pole spawner" festive_tree = /obj/structure/festivus diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 13a46395ea..94960a2658 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -34,6 +34,10 @@ filling_color = "#FF69B4" return TRUE +/// Returns the sprite of the donut while in a donut box +/obj/item/reagent_containers/food/snacks/donut/proc/in_box_sprite() + return "[icon_state]_inbox" + /obj/item/reagent_containers/food/snacks/donut/checkLiked(fraction, mob/M) //Sec officers always love donuts if(last_check_time + 50 < world.time) if(ishuman(M)) @@ -165,6 +169,10 @@ tastes = list("jelly" = 1, "donut" = 3) foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR | BREAKFAST +// Jelly donuts don't have holes, but look the same on the outside +/obj/item/reagent_containers/food/snacks/donut/jelly/in_box_sprite() + return "[replacetext(icon_state, "jelly", "donut")]_inbox" + /obj/item/reagent_containers/food/snacks/donut/jelly/Initialize() . = ..() if(extra_reagent) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 3aa9e6519a..c6c97f7cba 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -567,7 +567,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and /datum/holiday/xmas/proc/roundstart_celebrate() for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) - Monitor.icon_state = "entertainment_xmas" + Monitor.icon_state_on = "entertainment_xmas" for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list) Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index a381cc512a..99eb638ee0 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -12,6 +12,7 @@ sight = SEE_SELF move_on_shuttle = FALSE + /mob/camera/experience_pressure_difference() return @@ -23,5 +24,7 @@ /mob/camera/canUseStorage() return FALSE -/mob/camera/emote(act, m_type=1, message = null, intentional = FALSE) +/mob/camera/emote(act, m_type=1, message = null, intentional = FALSE, forced = FALSE) + if(forced) + return ..() return diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 91123c0c7f..35cf9f9440 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -16,6 +16,9 @@ //Used to make sure someone doesn't get spammed with messages if they're ineligible for roles var/ineligible_for_roles = FALSE + //is there a result we want to read from the age gate + var/age_gate_result + /mob/dead/new_player/Initialize() if(client && SSticker.state == GAME_STATE_STARTUP) var/obj/screen/splash/S = new(client, TRUE, TRUE) @@ -78,6 +81,43 @@ popup.set_content(output) popup.open(FALSE) +/mob/dead/new_player/proc/age_gate() + var/list/dat = list("
") + dat += "Enter your date of birth here, to confirm that you are over 18.
" + dat += "Your date of birth is not saved, only the fact that you are over/under 18 is.
" + dat += "
" + + dat += "
" + dat += "" + dat += HrefTokenFormField() + dat += "" + dat += "" + dat += "
" + dat += "
" + + winshow(src, "age_gate", TRUE) + var/datum/browser/popup = new(src, "age_gate", "
Age Gate
", 400, 250) + popup.set_content(dat.Join()) + popup.open(FALSE) + onclose(src, "age_gate") + + while(age_gate_result == null) + stoplag(1) + + popup.close() + + return age_gate_result + /mob/dead/new_player/proc/age_verify() if(CONFIG_GET(flag/age_verification) && !check_rights_for(client, R_ADMIN) && !(client.ckey in GLOB.bunker_passthrough)) //make sure they are verified if(!client.set_db_player_flags()) @@ -86,10 +126,12 @@ else var/dbflags = client.prefs.db_flags if(dbflags & DB_FLAG_AGE_CONFIRMATION_INCOMPLETE) //they have not completed age gate - var/age_verification = askuser(src, "Are you 18+", "Age Gate", "I am 18+", "I am not 18+", null, TRUE, null) + var/age_verification = age_gate() if(age_verification != 1) client.add_system_note("Automated-Age-Gate", "Failed automatic age gate process") - qdel(client) //kick the user + //ban them and kick them + AddBan(client.ckey, client.computer_id, "SYSTEM BAN - Inputted date during join verification was under 18 years of age. Contact administration on discord for verification.", "SYSTEM", FALSE, null, client.address) + qdel(client) return FALSE else //they claim to be of age, so allow them to continue and update their flags @@ -107,6 +149,45 @@ if(!client) return 0 + //don't let people get to this unless they are specifically not verified + if(href_list["Month"] && (CONFIG_GET(flag/age_verification) && !check_rights_for(client, R_ADMIN) && !(client.ckey in GLOB.bunker_passthrough))) + var/player_month = text2num(href_list["Month"]) + var/player_year = text2num(href_list["Year"]) + + var/current_time = world.realtime + var/current_month = text2num(time2text(current_time, "MM")) + var/current_year = text2num(time2text(current_time, "YYYY")) + + var/player_total_months = (player_year * 12) + player_month + + var/current_total_months = (current_year * 12) + current_month + + var/months_in_eighteen_years = 18 * 12 + + var/month_difference = current_total_months - player_total_months + if(month_difference > months_in_eighteen_years) + age_gate_result = TRUE // they're fine + else + if(month_difference < months_in_eighteen_years) + age_gate_result = FALSE + else + //they could be 17 or 18 depending on the /day/ they were born in + var/current_day = text2num(time2text(current_time, "DD")) + var/days_in_months = list(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) + if((player_year % 4) == 0) // leap year so february actually has 29 days + days_in_months[2] = 29 + var/total_days_in_player_month = days_in_months[player_month] + var/list/days = list() + for(var/number in 1 to total_days_in_player_month) + days += number + var/player_day = input(src, "What day of the month were you born in.") as anything in days + if(player_day <= current_day) + //their birthday has passed + age_gate_result = TRUE + else + //it has NOT been their 18th birthday yet + age_gate_result = FALSE + if(!age_verify()) return diff --git a/code/modules/mob/innate_abilities.dm b/code/modules/mob/innate_abilities.dm new file mode 100644 index 0000000000..aa2a924abe --- /dev/null +++ b/code/modules/mob/innate_abilities.dm @@ -0,0 +1,57 @@ +/** + * Sets an ability property + */ +/mob/proc/set_ability_property(ability, property, value) + LAZYINITLIST(ability_properties) + LAZYINITLIST(ability_properties[ability]) + ability_properties[ability][property] = value + +/** + * Gets an ability property + */ +/mob/proc/get_ability_property(ability, property) + return ability_properties && ability_properties[ability] && ability_properties[ability][property] + +GLOBAL_LIST_INIT(innate_ability_typepaths, all_innate_ability_typepaths()) + +/proc/all_innate_ability_typepaths() + return list( + INNATE_ABILITY_HUMANOID_CUSTOMIZATION = /datum/action/innate/ability/humanoid_customization, + INNATE_ABILITY_SLIME_BLOBFORM = /datum/action/innate/ability/slime_blobform, + INNATE_ABILITY_LIMB_REGROWTH = /datum/action/innate/ability/limb_regrowth + ) + +/** + * Grants an ability from a source + */ +/mob/proc/grant_ability_from_source(list/abilities, source) + if(!islist(abilities)) + abilities = list(abilities) + LAZYINITLIST(ability_actions) + LAZYINITLIST(innate_abilities) + for(var/ability in abilities) + LAZYINITLIST(innate_abilities[ability]) + innate_abilities[ability] |= source + if(ability_actions[ability]) + continue + var/path = GLOB.innate_ability_typepaths[ability] + var/datum/action/innate/ability/A = new path + ability_actions[ability] = A + A.Grant(src) + +/** + * Removes an ability from a source + */ +/mob/proc/remove_ability_from_source(list/abilities, source) + if(!islist(abilities)) + abilities = list(abilities) + if(!length(innate_abilities)) + return + for(var/ability in abilities) + if(!length(innate_abilities[ability])) + continue + innate_abilities[ability] -= source + if(!length(innate_abilities[ability])) + innate_abilities -= ability + qdel(ability_actions[ability]) + ability_actions -= ability diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 811c67cfe2..45a0d82d2c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -604,7 +604,7 @@ ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT) filters += CIT_FILTER_STAMINACRIT update_mobility() - if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_CRIT) + if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_CRIT_REMOVAL_THRESHOLD) to_chat(src, "You don't feel nearly as exhausted anymore.") DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT) filters -= CIT_FILTER_STAMINACRIT diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 97c40c96d7..509633c0d5 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -100,8 +100,3 @@ if(dna.species.space_move(src)) return TRUE return ..() - -/mob/living/carbon/human/CanPass(atom/movable/mover, turf/target) - if(dna.species.species_pass_check()) - return TRUE - return ..() diff --git a/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm b/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm new file mode 100644 index 0000000000..5d2693915d --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm @@ -0,0 +1,112 @@ + +/datum/action/innate/ability/slime_blobform + name = "Puddle Transformation" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimepuddle" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + required_mobility_flags = MOBILITY_STAND + var/is_puddle = FALSE + var/in_transformation_duration = 12 + var/out_transformation_duration = 7 + var/puddle_into_effect = /obj/effect/temp_visual/slime_puddle + var/puddle_from_effect = /obj/effect/temp_visual/slime_puddle/reverse + var/puddle_icon = 'icons/mob/mob.dmi' + var/puddle_state = "puddle" + var/mutable_appearance/tracked_overlay + var/datum/component/squeak/squeak + var/transforming = FALSE + var/last_use + +/datum/action/innate/ability/slime_blobform/IsAvailable() + if(!transforming) + return ..() + else + return FALSE + +/datum/action/innate/ability/slime_blobform/Remove(mob/M) + if(is_puddle) + detransform() + return ..() + +/datum/action/innate/ability/slime_blobform/Activate() + var/mob/living/carbon/human/H = owner + //if they have anything stuck to their hands, we immediately say 'no' and return + for(var/obj/item/I in H.held_items) + if(HAS_TRAIT(I, TRAIT_NODROP)) + to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") + return + if(IsAvailable()) + transforming = TRUE + UpdateButtonIcon() + var/mutcolor = owner.get_ability_property(INNATE_ABILITY_SLIME_BLOBFORM, PROPERTY_BLOBFORM_COLOR) || ("#" + H.dna.features["mcolor"]) + if(!is_puddle) + if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle + is_puddle = TRUE //so we know which transformation to use when its used + ADD_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT) + owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite + var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) + puddle_effect.color = mutcolor + H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming + + //series of traits that make up the puddle behaviour + ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) + H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed + + H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) + + H.layer -= 1 //go one layer down so people go over you + ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you + squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you + + //if the user is a changeling, retract their sting + H.unset_sting() + + sleep(in_transformation_duration) //wait for animation to end + + //set the puddle overlay up + var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) + puddle_overlay.color = mutcolor + tracked_overlay = puddle_overlay + owner.add_overlay(puddle_overlay) + + transforming = FALSE + UpdateButtonIcon() + else + detransform() + else + to_chat(owner, "You need to be standing up to do this!") //just assume they're a slime because it's such a weird edgecase to have it and not be one (it shouldn't even be possible) + +/datum/action/innate/ability/slime_blobform/proc/detransform() + var/mob/living/carbon/human/H = owner + //like the above, but reverse everything done! + H.cut_overlay(tracked_overlay) + var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) + puddle_effect.color = tracked_overlay.color + H.Stun(out_transformation_duration, ignore_canstun = TRUE) + sleep(out_transformation_duration) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT) + H.update_disabled_bodyparts(silent = TRUE) + H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) + H.layer += 1 //go one layer back above! + DISABLE_BITFIELD(H.pass_flags, PASSMOB) + is_puddle = FALSE + if(squeak) + squeak.RemoveComponent() + transforming = FALSE + UpdateButtonIcon() diff --git a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm new file mode 100644 index 0000000000..363f6ecbb2 --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm @@ -0,0 +1,208 @@ +/datum/action/innate/ability/humanoid_customization + name = "Alter Form" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "alter_form" //placeholder + icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/ability/humanoid_customization/Activate() + if(owner.get_ability_property(INNATE_ABILITY_HUMANOID_CUSTOMIZATION, PROPERTY_CUSTOMIZATION_SILENT)) + owner.visible_message("[owner] gains a look of \ + concentration while standing perfectly still.\ + Their body seems to shift and starts getting more goo-like.", + "You focus intently on altering your body while \ + standing perfectly still...") + change_form() + +/////// +/////// NOTICE: This currently doens't support skin tone - if anyone wants to add this to non slimes, it's up to YOU to do this. +////// (someone should also add genital color switching, more mutant color selection) +///// maybe just make this entire thing tgui based. maybe. +/////// + +/datum/action/innate/ability/humanoid_customization/proc/change_form() + var/mob/living/carbon/human/H = owner + var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel") + + if(select_alteration == "Body Color") + var/new_color = input(owner, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null + if(new_color) + var/temp_hsv = RGBtoHSV(new_color) + if(ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright + H.dna.features["mcolor"] = sanitize_hexcolor(new_color, 6) + H.update_body() + H.update_hair() + else + to_chat(H, "Invalid color. Your color is not bright enough.") + else if(select_alteration == "Hair Style") + if(H.gender == MALE) + var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list + if(new_style) + H.facial_hair_style = new_style + else + H.facial_hair_style = "Shaved" + //handle normal hair + var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list + if(new_style) + H.hair_style = new_style + H.update_hair() + else if (select_alteration == "Genitals") + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") + switch(operation) + if("add sexual organ") + var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list + if(!new_organ) + return + H.give_genital(GLOB.genitals_list[new_organ]) + + if("remove sexual organ") + var/list/organs = list() + for(var/obj/item/organ/genital/X in H.internal_organs) + var/obj/item/organ/I = X + organs["[I.name] ([I.type])"] = I + var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs + var/obj/item/organ/genital/G = organs[O] + if(!G) + return + G.forceMove(get_turf(H)) + qdel(G) + H.update_genitals() + + else if (select_alteration == "Ears") + var/list/snowflake_ears_list = list("Normal" = null) + for(var/path in GLOB.mam_ears_list) + var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_ears_list[S.name] = path + var/new_ears + new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list + if(new_ears) + H.dna.features["mam_ears"] = new_ears + H.update_body() + + else if (select_alteration == "Snout") + var/list/snowflake_snouts_list = list("Normal" = null) + for(var/path in GLOB.mam_snouts_list) + var/datum/sprite_accessory/snouts/mam_snouts/instance = GLOB.mam_snouts_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_snouts_list[S.name] = path + var/new_snout + new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list + if(new_snout) + H.dna.features["mam_snouts"] = new_snout + H.update_body() + + else if (select_alteration == "Markings") + var/list/snowflake_markings_list = list("None") + for(var/path in GLOB.mam_body_markings_list) + var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_markings_list[S.name] = path + var/new_mam_body_markings + new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list + if(new_mam_body_markings) + H.dna.features["mam_body_markings"] = new_mam_body_markings + for(var/X in H.bodyparts) //propagates the markings changes + var/obj/item/bodypart/BP = X + BP.update_limb(FALSE, H) + H.update_body() + + else if (select_alteration == "Tail") + var/list/snowflake_tails_list = list("Normal" = null) + for(var/path in GLOB.mam_tails_list) + var/datum/sprite_accessory/tails/mam_tails/instance = GLOB.mam_tails_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_tails_list[S.name] = path + var/new_tail + new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list + if(new_tail) + H.dna.features["mam_tail"] = new_tail + if(new_tail != "None") + H.dna.features["taur"] = "None" + H.update_body() + + else if (select_alteration == "Taur body") + var/list/snowflake_taur_list = list("Normal" = null) + for(var/path in GLOB.taur_list) + var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_taur_list[S.name] = path + var/new_taur + new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list + if(new_taur) + H.dna.features["taur"] = new_taur + if(new_taur != "None") + H.dna.features["mam_tail"] = "None" + H.update_body() + + else if (select_alteration == "Penis") + for(var/obj/item/organ/genital/penis/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list + if(new_shape) + H.dna.features["cock_shape"] = new_shape + H.update_genitals() + H.give_genital(/obj/item/organ/genital/testicles) + H.give_genital(/obj/item/organ/genital/penis) + H.apply_overlay() + + + else if (select_alteration == "Vagina") + for(var/obj/item/organ/genital/vagina/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list + if(new_shape) + H.dna.features["vag_shape"] = new_shape + H.update_genitals() + H.give_genital(/obj/item/organ/genital/womb) + H.give_genital(/obj/item/organ/genital/vagina) + H.apply_overlay() + + else if (select_alteration == "Penis Length") + for(var/obj/item/organ/genital/penis/X in H.internal_organs) + qdel(X) + var/min_D = CONFIG_GET(number/penis_min_inches_prefs) + var/max_D = CONFIG_GET(number/penis_max_inches_prefs) + var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null + if(new_length) + H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D) + H.update_genitals() + H.apply_overlay() + H.give_genital(/obj/item/organ/genital/testicles) + H.give_genital(/obj/item/organ/genital/penis) + + else if (select_alteration == "Breast Size") + for(var/obj/item/organ/genital/breasts/X in H.internal_organs) + qdel(X) + var/new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in CONFIG_GET(keyed_list/breasts_cups_prefs) + if(new_size) + H.dna.features["breasts_size"] = new_size + H.update_genitals() + H.apply_overlay() + H.give_genital(/obj/item/organ/genital/breasts) + + else if (select_alteration == "Breast Shape") + for(var/obj/item/organ/genital/breasts/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list + if(new_shape) + H.dna.features["breasts_shape"] = new_shape + H.update_genitals() + H.apply_overlay() + H.give_genital(/obj/item/organ/genital/breasts) + + else + return diff --git a/code/modules/mob/living/carbon/human/innate_abilities/limb_regeneration.dm b/code/modules/mob/living/carbon/human/innate_abilities/limb_regeneration.dm new file mode 100644 index 0000000000..ce36397c91 --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/limb_regeneration.dm @@ -0,0 +1,49 @@ + +/datum/action/innate/ability/limb_regrowth + name = "Regenerate Limbs" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimeheal" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + required_mobility_flags = NONE + +/datum/action/innate/ability/limb_regrowth/IsAvailable(silent = FALSE) + if(..()) + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + return 0 + var/mode = H.get_ability_property(INNATE_ABILITY_LIMB_REGROWTH, PROPERTY_LIMB_REGROWTH_USAGE_TYPE) + switch(mode) + if(REGROWTH_USES_BLOOD) + if(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) + return TRUE + else + return FALSE + return 0 + +/datum/action/innate/ability/limb_regrowth/Activate() + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + to_chat(H, "You feel intact enough as it is.") + return + to_chat(H, "You focus intently on your missing [limbs_to_heal.len >= 2 ? "limbs" : "limb"]...") + var/mode = H.get_ability_property(INNATE_ABILITY_LIMB_REGROWTH, PROPERTY_LIMB_REGROWTH_USAGE_TYPE) + switch(mode) + if(REGROWTH_USES_BLOOD) + if(H.blood_volume >= 40*limbs_to_heal.len+(BLOOD_VOLUME_OKAY*H.blood_ratio)) + H.regenerate_limbs() + H.blood_volume -= 40*limbs_to_heal.len + to_chat(H, "...and after a moment you finish reforming!") + return + else if(H.blood_volume >= 40)//We can partially heal some limbs + while(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) + var/healed_limb = pick(limbs_to_heal) + H.regenerate_limb(healed_limb) + limbs_to_heal -= healed_limb + H.blood_volume -= 40 + to_chat(H, "...but there is not enough of you to fix everything! You must attain more mass to heal completely!") + return + to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") + diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 2eb68fe30d..94d7e84c6b 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -176,6 +176,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //Called when cloning, copies some vars that should be kept /datum/species/proc/copy_properties_from(datum/species/old_species) mutant_bodyparts["limbs_id"] = old_species.mutant_bodyparts["limbs_id"] + eye_type = old_species.eye_type + mutanttongue = old_species.mutanttongue return //Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced. @@ -2000,14 +2002,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(HAS_BONE in species_traits) . |= BIO_JUST_BONE -//a check for if you should render any overlays or not -/datum/species/proc/should_render(mob/living/carbon/human/H) - return TRUE - -//a check for if you want to forcibly make CanPass return TRUE for the mob with this species -/datum/species/proc/species_pass_check() - return FALSE - ///////////// //BREATHING// ///////////// diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index ecac5fda10..988bf81f57 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -15,9 +15,6 @@ exotic_bloodtype = "GEL" exotic_blood_color = "BLOOD_COLOR_SLIME" damage_overlay_type = "" - var/datum/action/innate/regenerate_limbs/regenerate_limbs - var/datum/action/innate/slime_change/slime_change - var/datum/action/innate/slime_puddle/slime_puddle liked_food = TOXIC | MEAT disliked_food = null toxic_food = ANTITOXIC @@ -37,27 +34,19 @@ icon_state = "brain-slime" /datum/species/jelly/on_species_loss(mob/living/carbon/C) - if(slime_puddle && slime_puddle.is_puddle) - slime_puddle.Activate() - if(regenerate_limbs) - regenerate_limbs.Remove(C) - if(slime_change) - slime_change.Remove(C) - if(slime_puddle) - slime_puddle.Remove(C) C.faction -= "slime" + if(ishuman(C)) + var/mob/living/carbon/human/H = C + H.remove_ability_from_source(list(INNATE_ABILITY_SLIME_BLOBFORM, INNATE_ABILITY_LIMB_REGROWTH, INNATE_ABILITY_HUMANOID_CUSTOMIZATION), ABILITY_SOURCE_SPECIES) ..() C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) - regenerate_limbs = new - regenerate_limbs.Grant(C) - slime_change = new - slime_change.Grant(C) - slime_puddle = new - slime_puddle.Grant(C) + var/mob/living/carbon/human/H = C + H.grant_ability_from_source(list(INNATE_ABILITY_SLIME_BLOBFORM, INNATE_ABILITY_LIMB_REGROWTH, INNATE_ABILITY_HUMANOID_CUSTOMIZATION), ABILITY_SOURCE_SPECIES) + H.set_ability_property(INNATE_ABILITY_LIMB_REGROWTH, PROPERTY_LIMB_REGROWTH_USAGE_TYPE, REGROWTH_USES_BLOOD) C.faction |= "slime" /datum/species/jelly/handle_body(mob/living/carbon/human/H) @@ -65,18 +54,6 @@ //update blood color to body color exotic_blood_color = "#" + H.dna.features["mcolor"] -/datum/species/jelly/should_render() - if(slime_puddle && slime_puddle.is_puddle) - return FALSE - else - return ..() - -/datum/species/jelly/species_pass_check() - if(slime_puddle && slime_puddle.is_puddle) - return TRUE - else - return ..() - /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers return @@ -94,8 +71,6 @@ to_chat(H, "You feel drained!") if(H.blood_volume < (BLOOD_VOLUME_BAD*H.blood_ratio)) Cannibalize_Body(H) - if(regenerate_limbs) - regenerate_limbs.UpdateButtonIcon() /datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs() @@ -111,47 +86,6 @@ qdel(consumed_limb) H.blood_volume += 20 -/datum/action/innate/regenerate_limbs - name = "Regenerate Limbs" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimeheal" - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - required_mobility_flags = NONE - -/datum/action/innate/regenerate_limbs/IsAvailable(silent = FALSE) - if(..()) - var/mob/living/carbon/human/H = owner - var/list/limbs_to_heal = H.get_missing_limbs() - if(limbs_to_heal.len < 1) - return 0 - if(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) - return 1 - return 0 - -/datum/action/innate/regenerate_limbs/Activate() - var/mob/living/carbon/human/H = owner - var/list/limbs_to_heal = H.get_missing_limbs() - if(limbs_to_heal.len < 1) - to_chat(H, "You feel intact enough as it is.") - return - to_chat(H, "You focus intently on your missing [limbs_to_heal.len >= 2 ? "limbs" : "limb"]...") - if(H.blood_volume >= 40*limbs_to_heal.len+(BLOOD_VOLUME_OKAY*H.blood_ratio)) - H.regenerate_limbs() - H.blood_volume -= 40*limbs_to_heal.len - to_chat(H, "...and after a moment you finish reforming!") - return - else if(H.blood_volume >= 40)//We can partially heal some limbs - while(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) - var/healed_limb = pick(limbs_to_heal) - H.regenerate_limb(healed_limb) - limbs_to_heal -= healed_limb - H.blood_volume -= 40 - to_chat(H, "...but there is not enough of you to fix everything! You must attain more mass to heal completely!") - return - to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") - - ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. @@ -482,314 +416,6 @@ allowed_limb_ids = list(SPECIES_SLIME,SPECIES_STARGAZER,SPECIES_SLIME_LUMI) -/datum/action/innate/slime_change - name = "Alter Form" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "alter_form" //placeholder - icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - -/datum/action/innate/slime_change/Activate() - var/mob/living/carbon/human/H = owner - if(!isjellyperson(H)) - return - else - H.visible_message("[owner] gains a look of \ - concentration while standing perfectly still.\ - Their body seems to shift and starts getting more goo-like.", - "You focus intently on altering your body while \ - standing perfectly still...") - change_form() - -/datum/action/innate/slime_change/proc/change_form() - var/mob/living/carbon/human/H = owner - var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel") - - if(select_alteration == "Body Color") - var/new_color = input(owner, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null - if(new_color) - var/temp_hsv = RGBtoHSV(new_color) - if(ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright - H.dna.features["mcolor"] = sanitize_hexcolor(new_color, 6) - H.update_body() - H.update_hair() - else - to_chat(H, "Invalid color. Your color is not bright enough.") - else if(select_alteration == "Hair Style") - if(H.gender == MALE) - var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list - if(new_style) - H.facial_hair_style = new_style - else - H.facial_hair_style = "Shaved" - //handle normal hair - var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list - if(new_style) - H.hair_style = new_style - H.update_hair() - else if (select_alteration == "Genitals") - var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") - switch(operation) - if("add sexual organ") - var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list - if(!new_organ) - return - H.give_genital(GLOB.genitals_list[new_organ]) - - if("remove sexual organ") - var/list/organs = list() - for(var/obj/item/organ/genital/X in H.internal_organs) - var/obj/item/organ/I = X - organs["[I.name] ([I.type])"] = I - var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs - var/obj/item/organ/genital/G = organs[O] - if(!G) - return - G.forceMove(get_turf(H)) - qdel(G) - H.update_genitals() - - else if (select_alteration == "Ears") - var/list/snowflake_ears_list = list("Normal" = null) - for(var/path in GLOB.mam_ears_list) - var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_ears_list[S.name] = path - var/new_ears - new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list - if(new_ears) - H.dna.features["mam_ears"] = new_ears - H.update_body() - - else if (select_alteration == "Snout") - var/list/snowflake_snouts_list = list("Normal" = null) - for(var/path in GLOB.mam_snouts_list) - var/datum/sprite_accessory/snouts/mam_snouts/instance = GLOB.mam_snouts_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_snouts_list[S.name] = path - var/new_snout - new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list - if(new_snout) - H.dna.features["mam_snouts"] = new_snout - H.update_body() - - else if (select_alteration == "Markings") - var/list/snowflake_markings_list = list("None") - for(var/path in GLOB.mam_body_markings_list) - var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_markings_list[S.name] = path - var/new_mam_body_markings - new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list - if(new_mam_body_markings) - H.dna.features["mam_body_markings"] = new_mam_body_markings - for(var/X in H.bodyparts) //propagates the markings changes - var/obj/item/bodypart/BP = X - BP.update_limb(FALSE, H) - H.update_body() - - else if (select_alteration == "Tail") - var/list/snowflake_tails_list = list("Normal" = null) - for(var/path in GLOB.mam_tails_list) - var/datum/sprite_accessory/tails/mam_tails/instance = GLOB.mam_tails_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_tails_list[S.name] = path - var/new_tail - new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list - if(new_tail) - H.dna.features["mam_tail"] = new_tail - if(new_tail != "None") - H.dna.features["taur"] = "None" - H.update_body() - - else if (select_alteration == "Taur body") - var/list/snowflake_taur_list = list("Normal" = null) - for(var/path in GLOB.taur_list) - var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_taur_list[S.name] = path - var/new_taur - new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list - if(new_taur) - H.dna.features["taur"] = new_taur - if(new_taur != "None") - H.dna.features["mam_tail"] = "None" - H.update_body() - - else if (select_alteration == "Penis") - for(var/obj/item/organ/genital/penis/X in H.internal_organs) - qdel(X) - var/new_shape - new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list - if(new_shape) - H.dna.features["cock_shape"] = new_shape - H.update_genitals() - H.give_genital(/obj/item/organ/genital/testicles) - H.give_genital(/obj/item/organ/genital/penis) - H.apply_overlay() - - - else if (select_alteration == "Vagina") - for(var/obj/item/organ/genital/vagina/X in H.internal_organs) - qdel(X) - var/new_shape - new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list - if(new_shape) - H.dna.features["vag_shape"] = new_shape - H.update_genitals() - H.give_genital(/obj/item/organ/genital/womb) - H.give_genital(/obj/item/organ/genital/vagina) - H.apply_overlay() - - else if (select_alteration == "Penis Length") - for(var/obj/item/organ/genital/penis/X in H.internal_organs) - qdel(X) - var/min_D = CONFIG_GET(number/penis_min_inches_prefs) - var/max_D = CONFIG_GET(number/penis_max_inches_prefs) - var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null - if(new_length) - H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D) - H.update_genitals() - H.apply_overlay() - H.give_genital(/obj/item/organ/genital/testicles) - H.give_genital(/obj/item/organ/genital/penis) - - else if (select_alteration == "Breast Size") - for(var/obj/item/organ/genital/breasts/X in H.internal_organs) - qdel(X) - var/new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in CONFIG_GET(keyed_list/breasts_cups_prefs) - if(new_size) - H.dna.features["breasts_size"] = new_size - H.update_genitals() - H.apply_overlay() - H.give_genital(/obj/item/organ/genital/breasts) - - else if (select_alteration == "Breast Shape") - for(var/obj/item/organ/genital/breasts/X in H.internal_organs) - qdel(X) - var/new_shape - new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list - if(new_shape) - H.dna.features["breasts_shape"] = new_shape - H.update_genitals() - H.apply_overlay() - H.give_genital(/obj/item/organ/genital/breasts) - - else - return - -/datum/action/innate/slime_puddle - name = "Puddle Transformation" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimepuddle" - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - required_mobility_flags = MOBILITY_STAND - var/is_puddle = FALSE - var/in_transformation_duration = 12 - var/out_transformation_duration = 7 - var/puddle_into_effect = /obj/effect/temp_visual/slime_puddle - var/puddle_from_effect = /obj/effect/temp_visual/slime_puddle/reverse - var/puddle_icon = 'icons/mob/mob.dmi' - var/puddle_state = "puddle" - var/tracked_overlay - var/datum/component/squeak/squeak - var/transforming = FALSE - var/last_use - -/datum/action/innate/slime_puddle/IsAvailable() - if(!transforming) - return ..() - else - return FALSE - -/datum/action/innate/slime_puddle/Activate() - var/mob/living/carbon/human/H = owner - //if they have anything stuck to their hands, we immediately say 'no' and return - for(var/obj/item/I in H.held_items) - if(HAS_TRAIT(I, TRAIT_NODROP)) - to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") - return - if(isjellyperson(owner) && IsAvailable()) - transforming = TRUE - UpdateButtonIcon() - var/mutcolor = "#" + H.dna.features["mcolor"] - if(!is_puddle) - if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle - is_puddle = TRUE //so we know which transformation to use when its used - owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite - var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) - puddle_effect.color = mutcolor - H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming - - //series of traits that make up the puddle behaviour - ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) - H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed - - H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - - H.layer -= 1 //go one layer down so people go over you - ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you - squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you - - //if the user is a changeling, retract their sting - H.unset_sting() - - sleep(in_transformation_duration) //wait for animation to end - - //set the puddle overlay up - var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) - puddle_overlay.color = mutcolor - tracked_overlay = puddle_overlay - owner.add_overlay(puddle_overlay) - - transforming = FALSE - UpdateButtonIcon() - else - //like the above, but reverse everything done! - owner.cut_overlay(tracked_overlay) - var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) - puddle_effect.color = mutcolor - H.Stun(out_transformation_duration, ignore_canstun = TRUE) - sleep(out_transformation_duration) - REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) - H.update_disabled_bodyparts(silent = TRUE) - H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - H.layer += 1 //go one layer back above! - DISABLE_BITFIELD(H.pass_flags, PASSMOB) - is_puddle = FALSE - if(squeak) - squeak.RemoveComponent() - owner.regenerate_icons() - transforming = FALSE - UpdateButtonIcon() - else - to_chat(owner, "You need to be standing up to do this!") //just assume they're a slime because it's such a weird edgecase to have it and not be one (it shouldn't even be possible) - ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// //Luminescents are able to consume and use slime extracts, without them decaying. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f85efcf7f6..f05d795ba2 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -48,18 +48,22 @@ There are several things that need to be remembered: */ +/mob/living/carbon/human/ComponentInitialize() + . = ..() + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_HUMAN_NO_RENDER), /mob.proc/regenerate_icons) + //HAIR OVERLAY /mob/living/carbon/human/update_hair() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) dna.species.handle_hair(src) //used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. /mob/living/carbon/human/proc/update_mutant_bodyparts() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) dna.species.handle_mutant_bodyparts(src) /mob/living/carbon/human/update_body(update_genitals = FALSE) - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(BODY_LAYER) dna.species.handle_body(src) ..() @@ -69,11 +73,10 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_fire() ..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning") - /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) if(!..()) icon_render_key = null //invalidate bodyparts cache update_body(TRUE) @@ -102,7 +105,7 @@ There are several things that need to be remembered: //vvvvvv UPDATE_INV PROCS vvvvvv /mob/living/carbon/human/update_inv_w_uniform() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(UNIFORM_LAYER) if(client && hud_used) @@ -154,7 +157,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() /mob/living/carbon/human/update_inv_wear_id() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(ID_LAYER) if(client && hud_used) @@ -179,7 +182,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_gloves() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(GLOVES_LAYER) if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) @@ -213,7 +216,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_glasses() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(GLASSES_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated @@ -240,7 +243,7 @@ There are several things that need to be remembered: apply_overlay(GLASSES_LAYER) /mob/living/carbon/human/update_inv_ears() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(EARS_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated @@ -266,7 +269,7 @@ There are several things that need to be remembered: apply_overlay(EARS_LAYER) /mob/living/carbon/human/update_inv_shoes() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(SHOES_LAYER) if(get_num_legs(FALSE) <2) @@ -304,7 +307,7 @@ There are several things that need to be remembered: apply_overlay(SHOES_LAYER) /mob/living/carbon/human/update_inv_s_store() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) @@ -328,7 +331,7 @@ There are several things that need to be remembered: apply_overlay(SUIT_STORE_LAYER) /mob/living/carbon/human/update_inv_head() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(HEAD_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -368,7 +371,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() /mob/living/carbon/human/update_inv_belt() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(BELT_LAYER) if(client && hud_used) @@ -390,7 +393,7 @@ There are several things that need to be remembered: apply_overlay(BELT_LAYER) /mob/living/carbon/human/update_inv_wear_suit() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(SUIT_LAYER) if(client && hud_used) @@ -477,7 +480,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_wear_mask() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(FACEMASK_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -518,7 +521,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout /mob/living/carbon/human/update_inv_back() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) ..() var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] if(back_overlay) @@ -747,7 +750,7 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if if(!dna.species) return - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) return var/obj/item/bodypart/HD = get_bodypart("head") diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index ce8bbc5dab..cfebacb977 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -509,7 +509,7 @@ message = "beeps." message_param = "beeps at %t." sound = 'sound/machines/twobeep.ogg' - mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/carbon/human) + mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/carbon/human, /mob/camera/aiEye) /datum/emote/living/circle key = "circle" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 78de091923..0c7855ee16 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -34,6 +34,7 @@ ranged_ability.remove_ranged_ability(src) if(buckled) buckled.unbuckle_mob(src,force=1) + QDEL_LIST_ASSOC_VAL(ability_actions) remove_from_all_data_huds() GLOB.mob_living_list -= src diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index 8c6cf9d207..62c23cca9b 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -6,6 +6,7 @@ RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOPICKUP), .proc/update_mobility) RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOUSE), .proc/update_mobility) RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOREST), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_LIVING_NO_DENSITY), .proc/update_density) //Stuff like mobility flag updates, resting updates, etc. @@ -148,7 +149,7 @@ L.update_pull_movespeed() //Handle lying down, voluntary or involuntary - density = !lying + update_density() if(lying) set_resting(TRUE, TRUE, FALSE) if(layer == initial(layer)) //to avoid special cases like hiding larvas. diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 75d712afb9..0cdfe9dbf2 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -17,6 +17,9 @@ pixel_x = get_standard_pixel_x_offset(lying) pixel_y = get_standard_pixel_y_offset(lying) +/mob/living/proc/update_density() + density = !lying && !HAS_TRAIT(src, TRAIT_LIVING_NO_DENSITY) + /mob/living/CanPass(atom/movable/mover, turf/target) if((mover.pass_flags & PASSMOB)) return TRUE diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7ce1c1e7cc..fbf2d27c31 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -86,6 +86,7 @@ var/mob/living/silicon/robot/deployed_shell = null //For shell control var/datum/action/innate/deploy_shell/deploy_action = new var/datum/action/innate/deploy_last_shell/redeploy_action = new + var/datum/action/innate/custom_holoform/custom_holoform = new var/chnotify = 0 @@ -152,6 +153,7 @@ aicamera = new/obj/item/camera/siliconcam/ai_camera(src) deploy_action.Grant(src) + custom_holoform.Grant(src) if(isturf(loc)) add_verb(src, list(/mob/living/silicon/ai/proc/ai_network_change, \ @@ -1032,3 +1034,8 @@ qdel(src) else return + +/mob/living/silicon/ai/emote(act, m_type=1, message = null, intentional = FALSE) + if(current && eyeobj) + return eyeobj.emote(act, m_type, message, intentional, forced = TRUE) + return ..() diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 8ec39095fb..17de811cdd 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -204,3 +204,7 @@ alpha = 100 layer = ABOVE_ALL_MOB_LAYER plane = GAME_PLANE + +/mob/camera/aiEye/emote(act, m_type=1, message = null, intentional = FALSE, forced = FALSE) + if(ai?.current) + ..() diff --git a/code/modules/mob/living/silicon/custom_holoform.dm b/code/modules/mob/living/silicon/custom_holoform.dm index 8ce6e9a29a..e4f7f6780b 100644 --- a/code/modules/mob/living/silicon/custom_holoform.dm +++ b/code/modules/mob/living/silicon/custom_holoform.dm @@ -1,28 +1,12 @@ -/mob/living/silicon/verb/clear_custom_holoform() - set name = "Clear Custom Holoform" - set desc = "Clear your current custom holoform" - set category = "OOC" - +/mob/living/silicon/proc/attempt_set_custom_holoform() if(!client.prefs) to_chat(src, "No preferences datum on your client, contact an admin/coder!") return - client.prefs.custom_holoform_icon = null - client.prefs.cached_holoform_icons = null - to_chat(src, "Holoform removed.") - -/mob/living/silicon/verb/set_custom_holoform() - set name = "Set Custom Holoform" - set desc = "Set your custom holoform using your current preferences slot and a specified set of gear." - set category = "OOC" - - if(!client.prefs) - to_chat(src, "No preferences datum on your client, contact an admin/coder!") - return - if(client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) - to_chat(src, "You are attempting to change custom holoforms too fast!") var/icon/new_holoform = user_interface_custom_holoform(client) + client.prefs.last_custom_holoform = world.time if(new_holoform) client.prefs.custom_holoform_icon = new_holoform client.prefs.cached_holoform_icons = null - client.prefs.last_custom_holoform = world.time to_chat(src, "Holoform set.") + return TRUE + return FALSE diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 6d2da187a1..786c121ad6 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -131,6 +131,7 @@ var/datum/action/innate/pai/chassis/AC = new /datum/action/innate/pai/chassis var/datum/action/innate/pai/rest/AR = new /datum/action/innate/pai/rest var/datum/action/innate/pai/light/AL = new /datum/action/innate/pai/light + var/datum/action/innate/custom_holoform/custom_holoform = new /datum/action/innate/custom_holoform var/datum/action/language_menu/ALM = new SW.Grant(src) @@ -139,6 +140,7 @@ AR.Grant(src) AL.Grant(src) ALM.Grant(src) + custom_holoform.Grant(src) emitter_next_use = world.time + 10 SECONDS /mob/living/silicon/pai/ComponentInitialize() diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index c532e44ff5..d499c2abae 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,9 +1,9 @@ /datum/emote/silicon - mob_type_allowed_typecache = list(/mob/living/silicon) + mob_type_allowed_typecache = list(/mob/living/silicon, /mob/camera/aiEye) emote_type = EMOTE_AUDIBLE /datum/emote/sound/silicon - mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/carbon/human) + mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/carbon/human, /mob/camera/aiEye) emote_type = EMOTE_AUDIBLE var/unrestricted = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 83df3ffba5..7db417b8fa 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1022,6 +1022,32 @@ R.undeploy() return TRUE +/datum/action/innate/custom_holoform + name = "Select Custom Holoform" + desc = "Select one of your existing avatars to use as a holoform." + icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon_state = "custom_holoform" + required_mobility_flags = NONE + +/datum/action/innate/custom_holoform/Trigger() + if(!..()) + return FALSE + var/mob/living/silicon/S = owner + + //if setting the holoform succeeds, attempt to set it as the current holoform for the pAI or AI + if(S.attempt_set_custom_holoform()) + if(istype(S, /mob/living/silicon/pai)) + var/mob/living/silicon/pai/P = S + P.chassis = "custom" + else if(istype(S, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/A = S + if(A.client?.prefs?.custom_holoform_icon) + A.holo_icon = A.client.prefs.get_filtered_holoform(HOLOFORM_FILTER_AI) + else + A.holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "female")) + + return TRUE + /mob/living/silicon/robot/proc/undeploy() @@ -1043,6 +1069,8 @@ mainframe.laws.show_laws(mainframe) //Always remind the AI when switching mainframe = null + + /mob/living/silicon/robot/attack_ai(mob/user) if(shell && (!connected_ai || connected_ai == user)) var/mob/living/silicon/ai/AI = user diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 61187006a4..7b1e2dcaba 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -67,8 +67,12 @@ CR.button.screen_loc = "6:[pos],4:-2" CR.button.moved = "6:[pos],4:-2" +/mob/living/simple_animal/hostile/construct/Destroy() + original_mind = null + . = ..() + /mob/living/simple_animal/hostile/construct/death() - if(original_mind) + if(original_mind && !(QDELETED(original_mind))) transfer_ckey(original_mind.current) ..() diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 8c6b722140..dc81b3cfbf 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -11,7 +11,7 @@ blocks_emissive = EMISSIVE_BLOCK_GENERIC vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace. - + attack_hand_is_action = TRUE attack_hand_unwieldlyness = CLICK_CD_MELEE attack_hand_speed = 0 @@ -169,3 +169,11 @@ var/typing_indicator_timerid /// Current state of our typing indicator. Used for cut overlay, DO NOT RUNTIME ASSIGN OTHER THAN FROM SHOW/CLEAR. Used to absolutely ensure we do not get stuck overlays. var/mutable_appearance/typing_indicator_current + + /// Ability system based on action buttons. Can be ported to base /mob or /mob/living later if needed, easily - the procs are currently on living/carbon/human/innate_abilities.dm + /// datum traits-style lazylist of abilities + var/list/innate_abilities + /// ability = action button instance. + var/list/ability_actions + /// ability = list(data). see __DEFINES/mobs/innate_abilities.dm + var/list/ability_properties diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 3cda258bcf..471bd9939e 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -51,7 +51,7 @@ proc/get_top_level_mob(var/mob/S) return FALSE user.log_message(message, LOG_EMOTE) - message = "[user] " + "[user.say_emphasis(message)]" + message = "[user] [user.say_emphasis(message)]" for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) @@ -107,7 +107,7 @@ proc/get_top_level_mob(var/mob/S) return FALSE user.log_message(message, LOG_SUBTLER) - message = "[user] " + "[user.say_emphasis(message)]" + message = "[user] [user.say_emphasis(message)]" user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 6541deda1c..ffa3f7478b 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -123,7 +123,7 @@ /obj/structure/reagent_dispensers/plumbed/storage/ComponentInitialize() AddComponent(/datum/component/plumbing/tank) - + ////////////// //Fuel Tanks// ////////////// @@ -134,16 +134,20 @@ icon_state = "fuel" reagent_id = /datum/reagent/fuel -/obj/structure/reagent_dispensers/fueltank/high //Unused - Good for ghost roles +/obj/structure/reagent_dispensers/fueltank/high name = "high-capacity fuel tank" desc = "A now illegal tank, full of highly pressurized industrial welding fuel. Do not consume or have a open flame close to this tank." icon_state = "fuel_high" - tank_volume = 3000 + tank_volume = 5000 /obj/structure/reagent_dispensers/fueltank/boom() explosion(get_turf(src), 0, 1, 5, flame_range = 5) qdel(src) +/obj/structure/reagent_dispensers/fueltank/high/boom() + explosion(get_turf(src), 0, 2, 5, flame_range = 12) + qdel(src) + /obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B) boom() diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm index b157d0c349..38cd774683 100644 --- a/code/modules/research/designs/nanite_designs.dm +++ b/code/modules/research/designs/nanite_designs.dm @@ -113,7 +113,7 @@ /datum/design/nanites/spreading name = "Infective Exo-Locomotion" desc = "The nanites gain the ability to survive for brief periods outside of the human body, as well as the ability to start new colonies without an integration process; \ - resulting in an extremely infective strain of nanites." + resulting in an extremely infective strain of nanites. Bypasses antiviral defense" id = "spreading_nanites" program_type = /datum/nanite_program/spreading category = list("Utility Nanites") @@ -133,6 +133,21 @@ program_type = /datum/nanite_program/mitosis category = list("Utility Nanites") +/datum/design/nanites/antiviral + name = "Enhanced Error Correction" + desc = "The nanites self-propagate and replicate their program storage memory, preventing viral takeovers." + id = "antiviral_nanites" + program_type = /datum/nanite_program/lockout/antiviral + category = list("Utility Nanites") + +/datum/design/nanites/hostile_lockdown + name = "Hostile Lockdown" + desc = "The nanites constantly encrypt and scramble their own control sectors, preventing consoles from controlling them. Furthermore, \ + if the host happens to be a synthetic organism with innate control over nanite strains, this will prevent them from acting on the nanites as well." + id = "hostile_lockdown" + program_type = /datum/nanite_program/lockout/hostile_lockdown + category = list("Utility Nanites") + ////////////////////MEDICAL NANITES////////////////////////////////////// /datum/design/nanites/regenerative name = "Accelerated Regeneration" diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm index 01513a0b41..8675d54b46 100644 --- a/code/modules/research/nanites/nanite_chamber.dm +++ b/code/modules/research/nanites/nanite_chamber.dm @@ -41,12 +41,12 @@ update_icon() /obj/machinery/nanite_chamber/proc/set_safety(threshold) - if(!occupant) + if(!occupant || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) return SEND_SIGNAL(occupant, COMSIG_NANITE_SET_SAFETY, threshold) /obj/machinery/nanite_chamber/proc/set_cloud(cloud_id) - if(!occupant) + if(!occupant || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) return SEND_SIGNAL(occupant, COMSIG_NANITE_SET_CLOUD, cloud_id) @@ -82,7 +82,7 @@ return if((stat & MAINT) || panel_open) return - if(!occupant || busy) + if(!occupant || busy || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) return var/locked_state = locked @@ -173,7 +173,6 @@ return FALSE ..() - return TRUE /obj/machinery/nanite_chamber/relaymove(mob/user as mob) diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index 70e4d05590..f69cb58456 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -50,6 +50,10 @@ data["status_msg"] = chamber.busy_message return data + if(SEND_SIGNAL(L, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) + data["status_msg"] = "Error: Nanite keycodes scrambled. Unable to operate." + return data + data["status_msg"] = null data["scan_level"] = chamber.scan_level data["locked"] = chamber.locked diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm index faa81be0a5..d3cf755de2 100644 --- a/code/modules/research/nanites/nanite_programs.dm +++ b/code/modules/research/nanites/nanite_programs.dm @@ -54,6 +54,13 @@ //Rules that automatically manage if the program's active without requiring separate sensor programs var/list/datum/nanite_rule/rules = list() + /// Corruptable - able to have code/configuration changed + var/corruptable = TRUE + /// error flicking - able to be randomly toggled by errors + var/error_flicking = TRUE + /// immutable - cannot be overwritten by other programs + var/immutable = FALSE + /datum/nanite_program/New() . = ..() register_extra_settings() @@ -68,8 +75,15 @@ on_mob_remove() if(nanites) nanites.programs -= src + nanites.permanent_programs -= src return ..() +/** + * Checks if we're a permanent program + */ +/datum/nanite_program/proc/is_permanent() + return nanites && (src in nanites.permanent_programs) + /datum/nanite_program/proc/copy() var/datum/nanite_program/new_program = new type() copy_programming(new_program, TRUE) @@ -77,6 +91,8 @@ return new_program /datum/nanite_program/proc/copy_programming(datum/nanite_program/target, copy_activated = TRUE) + if(target.immutable) + return if(copy_activated) target.activated = activated target.timer_restart = timer_restart @@ -234,7 +250,7 @@ /datum/nanite_program/proc/on_emp(severity) if(program_flags & NANITE_EMP_IMMUNE) return - if(prob(80 / severity)) + if(prob(severity / 2)) software_error() /datum/nanite_program/proc/on_shock(shock_damage) @@ -242,7 +258,7 @@ if(prob(10)) software_error() else if(prob(33)) - qdel(src) + self_destruct() /datum/nanite_program/proc/on_minor_shock() if(!program_flags & NANITE_SHOCK_IMMUNE) @@ -254,26 +270,29 @@ /datum/nanite_program/proc/software_error(type) if(!type) - type = rand(1,5) + type = rand(1,is_permanent()? 4 : 5) switch(type) if(1) - qdel(src) //kill switch + self_destruct() //kill switch return if(2) //deprogram codes - activation_code = 0 - deactivation_code = 0 - kill_code = 0 - trigger_code = 0 + if(corruptable) + activation_code = 0 + deactivation_code = 0 + kill_code = 0 + trigger_code = 0 if(3) - toggle() //enable/disable + if(error_flicking) + toggle() //enable/disable if(4) - if(can_trigger) + if(error_flicking && can_trigger) trigger() if(5) //Program is scrambled and does something different - var/rogue_type = pick(rogue_types) - var/datum/nanite_program/rogue = new rogue_type - nanites.add_program(null, rogue, src) - qdel(src) + if(corruptable) + var/rogue_type = pick(rogue_types) + var/datum/nanite_program/rogue = new rogue_type + nanites.add_program(null, rogue, src) + self_destruct() /datum/nanite_program/proc/receive_signal(code, source) if(activation_code && code == activation_code && !activated) @@ -285,10 +304,18 @@ if(can_trigger && trigger_code && code == trigger_code) trigger() host_mob.investigate_log("'s [name] nanite program was triggered by [source] with code [code].", INVESTIGATE_NANITES) - if(kill_code && code == kill_code) + if((kill_code && code == kill_code) && !is_permanent()) host_mob.investigate_log("'s [name] nanite program was deleted by [source] with code [code].", INVESTIGATE_NANITES) qdel(src) +/** + * Attempts to destroy ourselves + */ +/datum/nanite_program/proc/self_destruct() + if(is_permanent()) + return + qdel(src) + ///A nanite program containing a behaviour protocol. Only one protocol of each class can be active at once. //Moved to being 'normally' researched due to lack of B.E.P.I.S. /datum/nanite_program/protocol diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 351318c2af..920faae928 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -11,7 +11,7 @@ return FALSE if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC)) + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC, BODYPART_NANITES)) if(!parts.len) return FALSE return ..() @@ -19,7 +19,7 @@ /datum/nanite_program/regenerative/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC)) + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC, BODYPART_NANITES)) if(!parts.len) return for(var/obj/item/bodypart/L in parts) @@ -121,7 +121,7 @@ if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID)) + var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID, BODYPART_NANITES)) if(!parts.len) return FALSE else @@ -132,7 +132,7 @@ /datum/nanite_program/repairing/active_effect(mob/living/M) if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID)) + var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID, BODYPART_NANITES)) if(!parts.len) return var/update = FALSE @@ -176,12 +176,12 @@ /datum/nanite_program/regenerative_advanced/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC)) + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC, BODYPART_NANITES)) if(!parts.len) return var/update = FALSE for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(3/parts.len, 3/parts.len, FALSE)) + if(L.heal_damage(3/parts.len, 3/parts.len, 0)) update = TRUE if(update) host_mob.update_damage_overlays() diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index f5372738db..eea8b7f18e 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -16,7 +16,7 @@ var/datum/nanite_extra_setting/program = extra_settings[NES_PROGRAM_OVERWRITE] var/datum/nanite_extra_setting/cloud = extra_settings[NES_CLOUD_OVERWRITE] for(var/mob/M in orange(host_mob, 5)) - if(SEND_SIGNAL(M, COMSIG_NANITE_IS_STEALTHY)) + if(SEND_SIGNAL(M, COMSIG_NANITE_CHECK_VIRAL_PREVENTION)) continue switch(program.get_value()) if("Overwrite") @@ -350,3 +350,66 @@ /datum/action/innate/nanite_button/Activate() program.press() + +/datum/nanite_program/lockout + unique = TRUE + var/emp_disable_time = 0 + var/shock_disable_time = 0 + var/minor_shock_disable_time = 0 + var/disable_time = 0 + var/lock_console = FALSE + var/lock_virus = FALSE + var/lock_host = FALSE + +/datum/nanite_program/lockout/enable_passive_effect() + . = ..() + if(lock_console) + RegisterSignal(src, COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK, .proc/check_antivirus) + if(lock_host) + RegisterSignal(src, COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK, .proc/check_antivirus) + if(lock_virus) + RegisterSignal(src, COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK, .proc/check_antivirus) + +/datum/nanite_program/lockout/disable_passive_effect() + . = ..() + UnregisterSignal(src, list( + COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK, + COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK, + COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK + )) + +/datum/nanite_program/lockout/on_emp(severity) + // no parent call on purpose + disable_time = max(disable_time, world.time + emp_disable_time) + +/datum/nanite_program/lockout/on_shock(shock_damage) + // no parent call on purpose + disable_time = max(disable_time, world.time + shock_disable_time) + +/datum/nanite_program/lockout/on_minor_shock() + // no parent call on purpose + disable_time = max(disable_time, world.time + minor_shock_disable_time) + +/datum/nanite_program/lockout/proc/check_antivirus() + return (world.time <= disable_time)? NANITE_CHANGES_LOCKED : NONE + +/datum/nanite_program/lockout/antiviral + name = "Enhanced Error Correction" + desc = "Through expensive CRC checking and replication, prevents viral takeover of the nanite strain's control sectors. \ + Temporarily disabled by EMPs and shocks." + use_rate = 0.5 + emp_disable_time = 3 MINUTES + shock_disable_time = 45 SECONDS + minor_shock_disable_time = 10 SECONDS + lock_virus = TRUE + +/datum/nanite_program/lockout/hostile_lockdown + name = "Hostile Lockdown" + desc = "Constantly encrypts and scrambles the nanites' control memory, preventing consoles from modifying them and also locking out conscious host control of the nanite strain, if the host happens to be capable of that. \ + Temporarily disabled by EMPs and shocks." + use_rate = 0.5 + emp_disable_time = 3 MINUTES + shock_disable_time = 1 MINUTES + minor_shock_disable_time = 15 SECONDS + lock_host = TRUE + lock_console = TRUE diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm index b9fa0db22f..e16ce873dc 100644 --- a/code/modules/research/nanites/nanite_programs/weapon.dm +++ b/code/modules/research/nanites/nanite_programs/weapon.dm @@ -91,7 +91,7 @@ var/heavy_range = FLOOR(nanite_amount/100, 1) - 1 var/light_range = FLOOR(nanite_amount/50, 1) - 1 explosion(host_mob, 0, heavy_range, light_range) - qdel(nanites) + nanites.delete_nanites() //TODO make it defuse if triggered again diff --git a/code/modules/research/techweb/nodes/nanites_nodes.dm b/code/modules/research/techweb/nodes/nanites_nodes.dm index 0a860c8938..024a384ef1 100644 --- a/code/modules/research/techweb/nodes/nanites_nodes.dm +++ b/code/modules/research/techweb/nodes/nanites_nodes.dm @@ -23,7 +23,7 @@ display_name = "Mesh Nanite Programming" description = "Nanite programs that require static structures and membranes." prereq_ids = list("nanite_base","engineering") - design_ids = list("hardening_nanites", "dermal_button_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites") + design_ids = list("hardening_nanites", "dermal_button_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites", "antiviral_nanites", "hostile_lockdown") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) /datum/techweb_node/nanite_bio diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index 5f8d711fcd..5b48d57a1f 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -1,4 +1,4 @@ -# DMAPI V4 +# DMAPI V5 This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. diff --git a/html/changelogs/AutoChangeLog-pr-13617.yml b/html/changelogs/AutoChangeLog-pr-13617.yml new file mode 100644 index 0000000000..532882eecc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13617.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "loadout now has save slot support and colour choosing/saving for polychromic items" diff --git a/html/changelogs/AutoChangeLog-pr-13699.yml b/html/changelogs/AutoChangeLog-pr-13699.yml new file mode 100644 index 0000000000..5b2234224e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13699.yml @@ -0,0 +1,5 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "nanite resistances tweaked" + - rscadd: "new nanite programs added for locking the user out from being modified by consoles or antivirals." diff --git a/html/changelogs/AutoChangeLog-pr-13704.yml b/html/changelogs/AutoChangeLog-pr-13704.yml new file mode 100644 index 0000000000..0ef8ca4a1d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13704.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "Emotes can properly be filtered for in TGUI." diff --git a/html/changelogs/AutoChangeLog-pr-13713.yml b/html/changelogs/AutoChangeLog-pr-13713.yml new file mode 100644 index 0000000000..36228f10c5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13713.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "all gas masks (but welding + glass) can be alt clicked to show/hide identity" diff --git a/html/changelogs/AutoChangeLog-pr-13734.yml b/html/changelogs/AutoChangeLog-pr-13734.yml new file mode 100644 index 0000000000..a4ea9fdfac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13734.yml @@ -0,0 +1,4 @@ +author: "keronshb" +delete-after: True +changes: + - bugfix: "Fixes Reflective Blobs" diff --git a/html/changelogs/AutoChangeLog-pr-13737.yml b/html/changelogs/AutoChangeLog-pr-13737.yml new file mode 100644 index 0000000000..6c1121256f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13737.yml @@ -0,0 +1,4 @@ +author: "qwertyquerty" +delete-after: True +changes: + - bugfix: "Flash the screen on climax" diff --git a/html/changelogs/AutoChangeLog-pr-13738.yml b/html/changelogs/AutoChangeLog-pr-13738.yml new file mode 100644 index 0000000000..f34f9d505a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13738.yml @@ -0,0 +1,4 @@ +author: "EdgeLordExe, MoonFalcon" +delete-after: True +changes: + - balance: "Ported a bunch of heretic-related tweaks and changes from tg" diff --git a/html/changelogs/AutoChangeLog-pr-13739.yml b/html/changelogs/AutoChangeLog-pr-13739.yml new file mode 100644 index 0000000000..6db29bf922 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13739.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "custom eyes and tongues now properly carry across cloning" diff --git a/html/changelogs/AutoChangeLog-pr-13743.yml b/html/changelogs/AutoChangeLog-pr-13743.yml new file mode 100644 index 0000000000..00ff1a55bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13743.yml @@ -0,0 +1,5 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "entertainment monitors no longer invisible" + - rscadd: "entertainment monitors now light up and display text when motion is detected in thunderdome" diff --git a/html/changelogs/AutoChangeLog-pr-13745.yml b/html/changelogs/AutoChangeLog-pr-13745.yml new file mode 100644 index 0000000000..af6cb787b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13745.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - bugfix: "Handles more edge cases with construct soul returning" diff --git a/html/changelogs/AutoChangeLog-pr-13746.yml b/html/changelogs/AutoChangeLog-pr-13746.yml new file mode 100644 index 0000000000..73c7ab4058 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13746.yml @@ -0,0 +1,5 @@ +author: "keronshb" +delete-after: True +changes: + - rscadd: "Adds more room to northwest maint" + - rscadd: "Adds a bridge between Atmos and the Turbine." diff --git a/html/changelogs/AutoChangeLog-pr-13747.yml b/html/changelogs/AutoChangeLog-pr-13747.yml new file mode 100644 index 0000000000..f8b6111c08 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13747.yml @@ -0,0 +1,6 @@ +author: "MrJWhit" +delete-after: True +changes: + - rscadd: "" + - tweak: "Added the ability for cargo to buy a large welding tank" + - imageadd: "Tweaked large tank reagent sprites to /tg/'s" diff --git a/html/changelogs/AutoChangeLog-pr-13750.yml b/html/changelogs/AutoChangeLog-pr-13750.yml new file mode 100644 index 0000000000..a89abdd440 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13750.yml @@ -0,0 +1,6 @@ +author: "EmeraldSundisk" +delete-after: True +changes: + - bugfix: "Fixes the conveyor belt issues in Delta Station's cargo wing" + - rscdel: "Removes some of the dirt around the affected area (presumably they would have cleaned it up while working on it)" + - rscadd: "Adds a floor light to fix the \"dark spot\" cargo had" diff --git a/html/changelogs/AutoChangeLog-pr-13751.yml b/html/changelogs/AutoChangeLog-pr-13751.yml new file mode 100644 index 0000000000..2d8c964a14 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13751.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "text formatting now uses one character instead of two around the text to emphasize." diff --git a/html/changelogs/AutoChangeLog-pr-13752.yml b/html/changelogs/AutoChangeLog-pr-13752.yml new file mode 100644 index 0000000000..2175ed469b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13752.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - balance: "stamina crit is only removed when at or under 100 stamina, rather than 140. stamina crit threshold is still at 140." diff --git a/html/changelogs/AutoChangeLog-pr-13753.yml b/html/changelogs/AutoChangeLog-pr-13753.yml new file mode 100644 index 0000000000..e752df79a0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13753.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - balance: "shoving yourself up now costs 50% more" diff --git a/html/changelogs/AutoChangeLog-pr-13757.yml b/html/changelogs/AutoChangeLog-pr-13757.yml new file mode 100644 index 0000000000..a36e67943e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13757.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "improvements to the automatic age gate" diff --git a/html/changelogs/AutoChangeLog-pr-13758.yml b/html/changelogs/AutoChangeLog-pr-13758.yml new file mode 100644 index 0000000000..fc4adc1614 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13758.yml @@ -0,0 +1,5 @@ +author: "timothyteakettle" +delete-after: True +changes: + - tweak: "custom holoforms are now accessible through an action instead of through verbs" + - tweak: "AI holoforms can now emote" diff --git a/html/changelogs/AutoChangeLog-pr-13761.yml b/html/changelogs/AutoChangeLog-pr-13761.yml new file mode 100644 index 0000000000..c8ab365fe3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13761.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - balance: "dna melt drops all items being destroying you" diff --git a/html/changelogs/AutoChangeLog-pr-13762.yml b/html/changelogs/AutoChangeLog-pr-13762.yml new file mode 100644 index 0000000000..841e4d91c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13762.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "luxury shuttle no longer has noteleport" diff --git a/html/changelogs/AutoChangeLog-pr-13764.yml b/html/changelogs/AutoChangeLog-pr-13764.yml new file mode 100644 index 0000000000..514705fd78 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13764.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "Exosuits sold on the Supply shuttle no longer leave wreckages." diff --git a/html/changelogs/AutoChangeLog-pr-13765.yml b/html/changelogs/AutoChangeLog-pr-13765.yml new file mode 100644 index 0000000000..7ca1695d0f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13765.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Updated jukebox sprite." diff --git a/html/changelogs/AutoChangeLog-pr-13766.yml b/html/changelogs/AutoChangeLog-pr-13766.yml new file mode 100644 index 0000000000..8ba317afed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13766.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Updates our dark gygax sprites to /tg/'s" diff --git a/html/changelogs/AutoChangeLog-pr-13767.yml b/html/changelogs/AutoChangeLog-pr-13767.yml new file mode 100644 index 0000000000..2d38af77e3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13767.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Updated meat icons" diff --git a/html/changelogs/AutoChangeLog-pr-13769.yml b/html/changelogs/AutoChangeLog-pr-13769.yml new file mode 100644 index 0000000000..04d1cbc11c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13769.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - rscadd: "Adds a goose bar sign" diff --git a/html/changelogs/AutoChangeLog-pr-13771.yml b/html/changelogs/AutoChangeLog-pr-13771.yml new file mode 100644 index 0000000000..e450508681 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13771.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Donut boxes show what's inside of them now" diff --git a/html/changelogs/AutoChangeLog-pr-13777.yml b/html/changelogs/AutoChangeLog-pr-13777.yml new file mode 100644 index 0000000000..0013a93ef5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13777.yml @@ -0,0 +1,4 @@ +author: "The Grinch" +delete-after: True +changes: + - rscdel: "infinite presents from hilbert hotel" diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi index 310dd6709c..d75ae09c97 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index d083206454..5e51eedffd 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/actions/actions_silicon.dmi b/icons/mob/actions/actions_silicon.dmi index cf3d7a2a95..fa7edf111a 100644 Binary files a/icons/mob/actions/actions_silicon.dmi and b/icons/mob/actions/actions_silicon.dmi differ diff --git a/icons/obj/barsigns.dmi b/icons/obj/barsigns.dmi index 22f3071862..20b919c09e 100644 Binary files a/icons/obj/barsigns.dmi and b/icons/obj/barsigns.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index 5e1332ffd9..e8bd4790dc 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/donut.dmi b/icons/obj/food/donut.dmi index 534e0e37bc..2c418b8e98 100644 Binary files a/icons/obj/food/donut.dmi and b/icons/obj/food/donut.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 078cadfd60..9ccfb9e7f8 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index f14f77585b..b9c891ddb9 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 16efcf262e..a4fbe53dba 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/icons/obj/status_display.dmi b/icons/obj/status_display.dmi index 68082395d0..6833e9ff24 100644 Binary files a/icons/obj/status_display.dmi and b/icons/obj/status_display.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 4a21fb41fd..d58dda7f7d 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -287,6 +287,8 @@ slot = SLOT_IN_BACKPACK path = /obj/item/clothing/neck/cloak/polychromic/polyce ckeywhitelist = list("worksbythesea", "blakeryan") + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#808080", "#8CC6FF", "#FF3535") /datum/gear/donator/ssk name = "Stun Sword Kit" diff --git a/modular_citadel/code/modules/client/loadout/_loadout.dm b/modular_citadel/code/modules/client/loadout/_loadout.dm index 0ebfa060f2..2a7b77bd47 100644 --- a/modular_citadel/code/modules/client/loadout/_loadout.dm +++ b/modular_citadel/code/modules/client/loadout/_loadout.dm @@ -53,6 +53,8 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids) var/path //item-to-spawn path var/cost = 1 //normally, each loadout costs a single point. var/geargroupID //defines the ID that the gear inherits from the config + var/loadout_flags = 0 + var/list/loadout_initial_colors = list() //NEW DONATOR SYTSEM STUFF var/donoritem //autoset on new if null diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm index c7eff6ce78..7c3c11f25c 100644 --- a/modular_citadel/code/modules/client/loadout/neck.dm +++ b/modular_citadel/code/modules/client/loadout/neck.dm @@ -86,7 +86,11 @@ /datum/gear/neck/polycloak name = "Polychromatic Cloak" path = /obj/item/clothing/neck/cloak/polychromic + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#FFFFFF", "#808080") /datum/gear/neck/altpolycloak name = "Alternate Cloak" path = /obj/item/clothing/neck/cloak/alt/polychromic + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#676767", "#4C4C4C") diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm index d0be26a8a4..7c21ed84d0 100644 --- a/modular_citadel/code/modules/client/loadout/suit.dm +++ b/modular_citadel/code/modules/client/loadout/suit.dm @@ -101,6 +101,8 @@ name = "Polychromic winter coat" path = /obj/item/clothing/suit/hooded/wintercoat/polychromic cost = 4 //too many people with neon green coats is hard on the eyes + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#6A6964", "#C4B8A6", "#0000FF") /datum/gear/suit/coat/med name = "Medical winter coat" diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index 76389e2015..b76e223f25 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -47,6 +47,8 @@ /datum/gear/uniform/maidcostume/polychromic name = "Polychromic maid costume" path = /obj/item/clothing/under/rank/civilian/janitor/maid/polychromic + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#000000") /datum/gear/uniform/mailmanuniform name = "Mailman's jumpsuit" @@ -227,36 +229,50 @@ name = "Polychromic Jumpsuit" path = /obj/item/clothing/under/misc/polyjumpsuit cost = 2 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#808080", "#353535") /datum/gear/uniform/skirt/poly name = "Polychromic Jumpskirt" path = /obj/item/clothing/under/dress/skirt/polychromic cost = 2 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#F08080", "#808080") /datum/gear/uniform/suit/poly name = "Polychromic Button-up Shirt" path = /obj/item/clothing/under/misc/poly_shirt cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#353535", "#353535") /datum/gear/uniform/skirt/poly/pleated name = "Polychromic Pleated Sweaterskirt" path = /obj/item/clothing/under/dress/skirt/polychromic/pleated cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#8CC6FF", "#808080", "#FF3535") /datum/gear/uniform/polykilt name = "Polychromic Kilt" path = /obj/item/clothing/under/costume/kilt/polychromic cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#F08080") /datum/gear/uniform/shorts/poly name = "Polychromic Shorts" path = /obj/item/clothing/under/misc/polyshorts cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#353535", "#808080", "#808080") /datum/gear/uniform/shorts/poly/athletic name = "Polychromic Athletic Shorts" path = /obj/item/clothing/under/shorts/polychromic cost = 2 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#F08080") /datum/gear/uniform/hopcasual name = "Casual Head of Personnel's uniform" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index ffd16faca7..1801986ebe 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -212,7 +212,7 @@ return ..() if(HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM)) C.adjustToxLoss(1, toxins_type = TOX_SYSCORRUPT) //Interferes with robots. Rare chem, so, pretty good at that too. - N.nanite_volume += -cached_purity*5//0.5 seems to be the default to me, so it'll neuter them. + N.adjust_nanites(-cached_purity*5) //0.5 seems to be the default to me, so it'll neuter them. ..() /datum/reagent/fermi/nanite_b_gone/overdose_process(mob/living/carbon/C) @@ -227,7 +227,7 @@ to_chat(C, "You feel a strange tingling sensation come from your core.") if(isnull(N)) return ..() - N.nanite_volume += -10*cached_purity + N.adjust_nanites(-10*cached_purity) ..() datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume) diff --git a/tgstation.dme b/tgstation.dme index 1387748839..efcebe58ea 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -145,6 +145,7 @@ #include "code\__DEFINES\dcs\signals.dm" #include "code\__DEFINES\mapping\maploader.dm" #include "code\__DEFINES\material\worth.dm" +#include "code\__DEFINES\mobs\innate_abilities.dm" #include "code\__DEFINES\mobs\slowdowns.dm" #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\research\stock_parts.dm" @@ -2403,6 +2404,7 @@ #include "code\modules\mob\clickdelay.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" +#include "code\modules\mob\innate_abilities.dm" #include "code\modules\mob\inventory.dm" #include "code\modules\mob\login.dm" #include "code\modules\mob\logout.dm" @@ -2556,6 +2558,9 @@ #include "code\modules\mob\living\carbon\human\status_procs.dm" #include "code\modules\mob\living\carbon\human\typing_indicator.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\blobform.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\customization.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm" #include "code\modules\mob\living\carbon\human\species_types\abductor.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" #include "code\modules\mob\living\carbon\human\species_types\angel.dm" diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index cab5491cee..7d11231b78 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -255,7 +255,7 @@ a.popt { /* ADD HERE FOR ITALIC */ -.italic, .italics, .emote { +.italic, .italics { font-style: italic; } diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index 5ba2930bcc..ea57f74640 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -273,8 +273,7 @@ a.popt { .italic, -.italics, -.emote { +.italics { font-style: italic; } @@ -443,10 +442,6 @@ h1.alert, h2.alert { color: #000000; } -.emote { - font-style: italic; -} - .userdanger { color: #ff0000; font-weight: bold; diff --git a/tgui/public/tgui-panel.bundle.css b/tgui/public/tgui-panel.bundle.css index 3371505c0d..7a7615b32c 100644 --- a/tgui/public/tgui-panel.bundle.css +++ b/tgui/public/tgui-panel.bundle.css @@ -1 +1 @@ -body,html{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}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin: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-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}.debug-layout,.debug-layout :not(g):not(path){color:hsla(0,0%,100%,.9)!important;background:transparent!important;outline:1px solid hsla(0,0%,100%,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout :not(g):not(path):hover{outline-color:hsla(0,0%,100%,.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}.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 .far,.Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .far,.Button--hasContent .fas{margin-right:.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--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color .1s,background-color .1s}.Button--color--black:focus,.Button--color--black:hover{background-color:#0a0a0a;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color .1s,background-color .1s}.Button--color--white:focus,.Button--color--white:hover{background-color:#f3f3f3;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color .1s,background-color .1s}.Button--color--red:focus,.Button--color--red:hover{background-color:#d52b2b;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color .1s,background-color .1s}.Button--color--orange:focus,.Button--color--orange:hover{background-color:#ed6f1d;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color .1s,background-color .1s}.Button--color--yellow:focus,.Button--color--yellow:hover{background-color:#f3d00e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color .1s,background-color .1s}.Button--color--olive:focus,.Button--color--olive:hover{background-color:#afc41f;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color .1s,background-color .1s}.Button--color--green:focus,.Button--color--green:hover{background-color:#27ab46;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color .1s,background-color .1s}.Button--color--teal:focus,.Button--color--teal:hover{background-color:#0aafa8;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color .1s,background-color .1s}.Button--color--blue:focus,.Button--color--blue:hover{background-color:#2883c8;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color .1s,background-color .1s}.Button--color--violet:focus,.Button--color--violet:hover{background-color:#653ac1;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color .1s,background-color .1s}.Button--color--purple:focus,.Button--color--purple:hover{background-color:#9e38c1;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color .1s,background-color .1s}.Button--color--pink:focus,.Button--color--pink:hover{background-color:#dd3794;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color .1s,background-color .1s}.Button--color--brown:focus,.Button--color--brown:hover{background-color:#a06844;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color .1s,background-color .1s}.Button--color--grey:focus,.Button--color--grey:hover{background-color:#757575;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color .1s,background-color .1s}.Button--color--good:focus,.Button--color--good:hover{background-color:#5da52d;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color .1s,background-color .1s}.Button--color--average:focus,.Button--color--average:hover{background-color:#e68d18;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color .1s,background-color .1s}.Button--color--bad:focus,.Button--color--bad:hover{background-color:#d52b2b;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color .1s,background-color .1s}.Button--color--label:focus,.Button--color--label:hover{background-color:#7b8da4;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color .1s,background-color .1s}.Button--color--default:focus,.Button--color--default:hover{background-color:#4c729d;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color .1s,background-color .1s}.Button--color--caution:focus,.Button--color--caution:hover{background-color:#f3d00e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color .1s,background-color .1s}.Button--color--danger:focus,.Button--color--danger:hover{background-color:#d52b2b;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:hsla(0,0%,100%,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color .1s,background-color .1s}.Button--color--transparent:focus,.Button--color--transparent:hover{background-color:#2c2c2c;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color .1s,background-color .1s}.Button--selected:focus,.Button--selected:hover{background-color:#27ab46;color:#fff}.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}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid hsla(0,0%,100%,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid hsla(0,0%,100%,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.5em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;overflow-y:scroll}.Dropdown__menu,.Dropdown__menu-noscroll{position:absolute;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{overflow-y:auto}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s}.Dropdown__menuentry:hover{background-color:hsla(0,0%,100%,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:table!important;width:105%;border-collapse:collapse;border-spacing:0}.Flex--iefix:after{content:"";display:table-cell;width:5%}.Flex--iefix--column{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Flex--iefix--column>.Flex__item--iefix{display:table-row!important}.Flex--iefix--column>.Flex__item--iefix--grow{height:100%!important}.Flex__item--iefix{display:table-cell!important;width:1%!important;min-width:99%}.Flex__item--iefix--grow{width:auto!important}.Flex--spacing--1{margin:0 -.25em}.Flex--spacing--1>.Flex__item{margin:0 .25em}.Flex--spacing--2{margin:0 -.5em}.Flex--spacing--2>.Flex__item{margin:0 .5em}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;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(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 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:hsla(0,0%,100%,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:transparent;stroke:hsla(0,0%,100%,.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:transparent;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}.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}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.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) 0,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--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:transparent;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--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}.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__content{padding:.66em .5em}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill .Section__content{flex-grow:1}.Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:scroll}.Section--level--1 .Section__titleText{font-size:1.1666666667em}.Section--level--2 .Section__titleText{font-size:1.0833333333em}.Section--level--3 .Section__titleText{font-size:1em}.Section--level--2,.Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.Slider{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 transparent;border-right:.4166666667em solid transparent;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:translateX(50%);white-space:nowrap}.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__cell--header,.Table__row--header .Table__cell{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden}.Tabs--vertical{flex-direction:column}.Tabs--horizontal{margin-bottom:.5em}.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;color:hsla(0,0%,100%,.5);min-height:2.25em;min-width:4em}.Tab--selected{color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{margin-left:.25em}.Tab__left,.Tab__right{min-width:1.5em;text-align:center}.Tab__right{margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.Tabs--vertical .Tab--selected{border-right:.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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.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:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.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:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.Tooltip{position:absolute;top:0;left:0;right:0;bottom:0;font-style:normal;font-weight:400}.Tooltip:after{position:absolute;display:block;white-space:nowrap;z-index:2;padding:.5em .75em;transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;text-align:left;content:attr(data-tooltip);transition:all .15s;background-color:#000;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em}.Tooltip:hover:after{transition:all 70ms;pointer-events:none;visibility:visible;opacity:1}.Tooltip--long:after{width:20.8333333333em;white-space:normal}.Tooltip--top:after{bottom:100%;left:50%;transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom:after,.Tooltip--top:hover:after{transform:translateX(-50%) translateY(-.5em)}.Tooltip--bottom:after{top:100%;left:50%}.Tooltip--bottom:hover:after{transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom-left:after{top:100%;right:50%;transform:translateX(12px) translateY(-.5em)}.Tooltip--bottom-left:hover:after{transform:translateX(12px) translateY(.5em)}.Tooltip--bottom-right:after{top:100%;left:50%;transform:translateX(-12px) translateY(-.5em)}.Tooltip--bottom-right:hover:after{transform:translateX(-12px) translateY(.5em)}.Tooltip--left:after{top:50%;right:100%;transform:translateX(.5em) translateY(-50%)}.Tooltip--left:hover:after,.Tooltip--right:after{transform:translateX(-.5em) translateY(-50%)}.Tooltip--right:after{top:50%;left:100%}.Tooltip--right:hover:after{transform:translateX(.5em) translateY(-50%)}.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 hsla(0,0%,54.9%,.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;bottom:1em;left:1em;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__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{bottom:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(180deg,#202020 0,#202020)}.Window,.Window__titleBar{position:fixed;top:0;left:0}.Window__titleBar{z-index:1;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}a{color:#397ea5}a.visited,a:visited{color:#7c00e6}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,.popup .head{background:#999}.popup .head{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]:active,.popup input[type=text]:focus,.popup input[type=text]:hover{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]:active,.popup input[type=submit]:focus,.popup input[type=submit]:hover{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:active,.motd a:hover,.motd a:link,.motd a:visited{color:#a4bad6}.admin,.adminooc,.bold,.looc,.medal,.name,.ooc,.prefix,.yell{font-weight:700}.emote,.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal}.ooc,em{font-weight:700}.ooc{color:#cca300}.looc{color:#69c;font-weight:700}.antagooc{color:#b8002e;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#3d5bc3;font-weight:700}.adminsay{color:#ff4500;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#5975da;font-weight:700}.mentorsay{color:#e236d8;font-weight:700}.mentorsay_admin{color:#8a2be2;font-weight:700}.name{font-weight:700}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:#0f0}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.yell{font-weight:700}.alert{color:#d82020}.emote{font-style:italic}.userdanger{font-weight:700;font-size:185%}.danger,.userdanger,.warning{color:#c51e1e}.warning{font-style:italic}.alertwarning{color:red;font-weight:700}.boldwarning{font-style:italic}.announce,.boldannounce,.boldwarning{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.tinynotice{font-size:85%}.smallnotice,.tinynotice{color:#6685f5;font-style:italic}.smallnotice{font-size:90%}.boldnotice{color:#6685f5;font-weight:700}.hear{font-style:italic}.adminnotice,.hear{color:#6685f5}.adminhelp{color:red;font-weight:700}.unconscious{color:#a4bad6;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.userlove{color:#ff42a6;font-weight:700;text-shadow:0 0 6px #82365e}.love,.userlove{font-style:italic}.love{color:#ff4591;text-shadow:0 0 6px #994449}.cult{color:#aa1c1c}.cultbold,.cultitalic{color:#aa1c1c;font-style:italic}.cultbold{font-weight:700}.cultboldtalic,.cultlarge{color:#aa1c1c;font-weight:700;font-size:185%}.narsie{font-size:925%}.narsie,.narsiesmall{color:#aa1c1c;font-weight:700}.narsiesmall{font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:700;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenbignotice,.revenboldnotice{color:#c099e2;font-weight:700}.revenbignotice{font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:185%}.umbra{color:#5000a0}.umbra_emphasis,.umbra_large{color:#5000a0;font-weight:700;font-style:italic}.umbra_large{font-size:3}.deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.brass,.heavy_brass{color:#be8700}.heavy_brass{font-weight:700;font-style:italic}.large_brass{color:#be8700;font-size:185%}.big_brass{font-size:185%}.big_brass,.ratvar{color:#be8700;font-weight:700;font-style:italic}.ratvar{font-size:6}.alloy{color:#42474d}.heavy_alloy,.nezbere_large{color:#42474d;font-weight:700;font-style:italic}.nezbere_large{font-size:185%}.nezbere{font-weight:700;font-style:italic}.nezbere,.nezbere_small{color:#42474d}.sevtug_large{font-size:185%}.sevtug,.sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.sevtug_small{color:#af0aaf}.inathneq_large{font-size:185%}.inathneq,.inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.inathneq_small{color:#1e8ce1}.nzcrentr_large{font-size:185%}.nzcrentr,.nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.nzcrentr_small{color:#daaa18}.neovgre_large{font-size:185%}.neovgre,.neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.neovgre_small{color:#6e001a}.ghostalert{color:#60f;font-style:italic;font-weight:700}.alien{color:#855d85}.alertalien,.noticealien{color:#059223}.alertalien{font-weight:700}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red}.alertsyndie,.spider{font-size:185%;font-weight:700}.spider{color:#80f}.interface{color:#750e75}.sans{font-family:Comic Sans MS,cursive,sans-serif}.papyrus{font-family:Papyrus,cursive,sans-serif}.robot{font-family:Courier New,cursive,sans-serif}.command_headset{font-weight:700;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.yellowtext{color:#fc0;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.spooky{color:#ff9100}.hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}.velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}.phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}.icon{height:1em;width:auto}.memo{color:#638500}.memo,.memoedit{text-align:center}.memoedit{font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:700}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.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-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 .Tabs{display:flex;align-items:stretch;overflow:hidden}.theme-light .Tabs--vertical{flex-direction:column}.theme-light .Tabs--horizontal{margin-bottom:.5em}.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;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-light .Tab--selected{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 transparent;border-bottom:.1666666667em solid transparent}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.theme-light .Tabs--vertical .Tab--selected{border-right:.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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-color:#353535}.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__content{padding:.66em .5em}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill .Section__content{flex-grow:1}.theme-light .Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:scroll}.theme-light .Section--level--1 .Section__titleText{font-size:1.1666666667em}.theme-light .Section--level--2 .Section__titleText{font-size:1.0833333333em}.theme-light .Section--level--3 .Section__titleText{font-size:1em}.theme-light .Section--level--2,.theme-light .Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.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 .far,.theme-light .Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .far,.theme-light .Button--hasContent .fas{margin-right:.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--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--black:focus,.theme-light .Button--color--black:hover{background-color:#0a0a0a;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--white:focus,.theme-light .Button--color--white:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--red:focus,.theme-light .Button--color--red:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--orange:focus,.theme-light .Button--color--orange:hover{background-color:#d76316;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--yellow:focus,.theme-light .Button--color--yellow:hover{background-color:#d7b90d;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--olive:focus,.theme-light .Button--color--olive:hover{background-color:#9cae1d;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--green:focus,.theme-light .Button--color--green:hover{background-color:#24993f;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--teal:focus,.theme-light .Button--color--teal:hover{background-color:#0a9c95;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--blue:focus,.theme-light .Button--color--blue:hover{background-color:#2475b1;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--violet:focus,.theme-light .Button--color--violet:hover{background-color:#5a35ac;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--purple:focus,.theme-light .Button--color--purple:hover{background-color:#8d33ab;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--pink:focus,.theme-light .Button--color--pink:hover{background-color:#ce2985;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--brown:focus,.theme-light .Button--color--brown:hover{background-color:#8f5d3c;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--grey:focus,.theme-light .Button--color--grey:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--good:focus,.theme-light .Button--color--good:hover{background-color:#539329;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--average:focus,.theme-light .Button--color--average:hover{background-color:#cd7d16;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--bad:focus,.theme-light .Button--color--bad:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--label:focus,.theme-light .Button--color--label:hover{background-color:#393939;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--default:focus,.theme-light .Button--color--default:hover{background-color:#d3d3d3;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--caution:focus,.theme-light .Button--color--caution:hover{background-color:#d67313;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--danger:focus,.theme-light .Button--color--danger:hover{background-color:#afb30a;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:hsla(0,0%,93.3%,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--transparent:focus,.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color .1s,background-color .1s}.theme-light .Button--selected:focus,.theme-light .Button--selected:hover{background-color:#107ad0;color:#fff}.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:#fff;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;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;text-align:right}.theme-light .Input,.theme-light .NumberInput__input{line-height:1.4166666667em;background-color:#fff;color:#000}.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;padding:0 .3333333333em;margin-right:.1666666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.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:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.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:#fff;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:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.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:transparent;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(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 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:hsla(0,0%,100%,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.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:transparent;stroke:hsla(0,0%,100%,.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:transparent;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 .Slider{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 transparent;border-right:.4166666667em solid transparent;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:translateX(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:transparent;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--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 .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__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(180deg,#eee 0,#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:hsla(0,0%,98.8%,.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:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light body,.theme-light html{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#e0e0e0;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.visited,.theme-light a:visited{color:#f0f}.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]:active,.theme-light .popup input[type=text]:focus,.theme-light .popup input[type=text]:hover{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]:active,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:hover{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:active,.theme-light .motd a:hover,.theme-light .motd a:link,.theme-light .motd a:visited{color:#638500}.theme-light .admin,.theme-light .adminooc,.theme-light .bold,.theme-light .looc,.theme-light .medal,.theme-light .name,.theme-light .ooc,.theme-light .prefix,.theme-light .yell{font-weight:700}.theme-light .emote,.theme-light .italic,.theme-light .italics{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 .ooc{color:#002eb8;font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .antagooc{color:#b8002e;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#700038;font-weight:700}.theme-light .adminsay{color:#ff4500;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#4473ff;font-weight:700}.theme-light .mentorsay{color:#e236d8;font-weight:700}.theme-light .mentorsay_admin{color:#8a2be2;font-weight:700}.theme-light .name{font-weight:700}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:#0f0}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#948f02}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#337296}.theme-light .engradio{color:#fb5613}.theme-light .suppradio{color:#a8732b}.theme-light .servradio{color:#6eaa2c}.theme-light .syndradio{color:#6d3f40}.theme-light .centcomradio{color:#686868}.theme-light .aiprivradio{color:#f0f}.theme-light .redteamradio{color:red}.theme-light .blueteamradio{color:#00f}.theme-light .yell{font-weight:700}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .emote{font-style:italic}.theme-light .userdanger{font-size:185%}.theme-light .bolddanger,.theme-light .userdanger{color:red;font-weight:700}.theme-light .danger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:700}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .announce{color:#228b22;font-weight:700}.theme-light .boldannounce{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .tinynotice{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:#00f}.theme-light .adminhelp{color:red;font-weight:700}.theme-light .unconscious{color:#00f;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .red{color:red}.theme-light .blue{color:#00f}.theme-light .nicegreen{color:#14a833}.theme-light .userlove{color:#ff1493;font-style:italic;font-weight:700;text-shadow:0 0 6px #ff6dbc}.theme-light .love{color:#ff006a;font-style:italic;text-shadow:0 0 6px #ff6d6d}.theme-light .cult{color:#960000}.theme-light .cultbold,.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultbold{font-weight:700}.theme-light .cultboldtalic,.theme-light .cultlarge{color:#960000;font-weight:700;font-size:185%}.theme-light .narsie{color:#960000;font-weight:700;font-size:925%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{font-weight:700}.theme-light .hierophant,.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenbignotice,.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-light .umbra{color:#5000a0}.theme-light .umbra_emphasis,.theme-light .umbra_large{color:#5000a0;font-weight:700;font-style:italic}.theme-light .umbra_large{font-size:3}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .brass{color:#be8700}.theme-light .heavy_brass{color:#be8700;font-weight:700;font-style:italic}.theme-light .big_brass,.theme-light .large_brass{color:#be8700;font-size:185%}.theme-light .big_brass,.theme-light .ratvar{font-weight:700;font-style:italic}.theme-light .ratvar{color:#be8700;font-size:6}.theme-light .alloy{color:#42474d}.theme-light .heavy_alloy,.theme-light .nezbere_large{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_large{font-size:185%}.theme-light .nezbere{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_small{color:#42474d}.theme-light .sevtug_large{font-size:185%}.theme-light .sevtug,.theme-light .sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.theme-light .sevtug_small{color:#af0aaf}.theme-light .inathneq_large{font-size:185%}.theme-light .inathneq,.theme-light .inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.theme-light .inathneq_small{color:#1e8ce1}.theme-light .nzcrentr_large{font-size:185%}.theme-light .nzcrentr,.theme-light .nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.theme-light .nzcrentr_small{color:#daaa18}.theme-light .neovgre_large{font-size:185%}.theme-light .neovgre,.theme-light .neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.theme-light .neovgre_small{color:#6e001a}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-light .spider{color:#4d004d;font-weight:700;font-size:185%}.theme-light .interface{color:#303}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-light .robot{font-family:Courier New,cursive,sans-serif}.theme-light .command_headset{font-weight:700;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:#0f0;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .yellowtext{color:#fc0;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-light .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .spooky{color:#ff9100}.theme-light .hypnophrase{color:#0d0d0d;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}to{color:#3bb5d3}}.theme-light .velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}@keyframes velvet{0%{color:#400020}40%{color:red}50%{color:#f88}60%{color:red}to{color:#400020}}.theme-light .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}to{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:700;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .monkeyhive{color:#774704}.theme-light .monkeylead{color:#774704;font-size:80%}.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 .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em} \ No newline at end of file +body,html{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}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin: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-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}.debug-layout,.debug-layout :not(g):not(path){color:hsla(0,0%,100%,.9)!important;background:transparent!important;outline:1px solid hsla(0,0%,100%,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout :not(g):not(path):hover{outline-color:hsla(0,0%,100%,.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}.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 .far,.Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .far,.Button--hasContent .fas{margin-right:.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--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color .1s,background-color .1s}.Button--color--black:focus,.Button--color--black:hover{background-color:#0a0a0a;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color .1s,background-color .1s}.Button--color--white:focus,.Button--color--white:hover{background-color:#f3f3f3;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color .1s,background-color .1s}.Button--color--red:focus,.Button--color--red:hover{background-color:#d52b2b;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color .1s,background-color .1s}.Button--color--orange:focus,.Button--color--orange:hover{background-color:#ed6f1d;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color .1s,background-color .1s}.Button--color--yellow:focus,.Button--color--yellow:hover{background-color:#f3d00e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color .1s,background-color .1s}.Button--color--olive:focus,.Button--color--olive:hover{background-color:#afc41f;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color .1s,background-color .1s}.Button--color--green:focus,.Button--color--green:hover{background-color:#27ab46;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color .1s,background-color .1s}.Button--color--teal:focus,.Button--color--teal:hover{background-color:#0aafa8;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color .1s,background-color .1s}.Button--color--blue:focus,.Button--color--blue:hover{background-color:#2883c8;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color .1s,background-color .1s}.Button--color--violet:focus,.Button--color--violet:hover{background-color:#653ac1;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color .1s,background-color .1s}.Button--color--purple:focus,.Button--color--purple:hover{background-color:#9e38c1;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color .1s,background-color .1s}.Button--color--pink:focus,.Button--color--pink:hover{background-color:#dd3794;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color .1s,background-color .1s}.Button--color--brown:focus,.Button--color--brown:hover{background-color:#a06844;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color .1s,background-color .1s}.Button--color--grey:focus,.Button--color--grey:hover{background-color:#757575;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color .1s,background-color .1s}.Button--color--good:focus,.Button--color--good:hover{background-color:#5da52d;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color .1s,background-color .1s}.Button--color--average:focus,.Button--color--average:hover{background-color:#e68d18;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color .1s,background-color .1s}.Button--color--bad:focus,.Button--color--bad:hover{background-color:#d52b2b;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color .1s,background-color .1s}.Button--color--label:focus,.Button--color--label:hover{background-color:#7b8da4;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color .1s,background-color .1s}.Button--color--default:focus,.Button--color--default:hover{background-color:#4c729d;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color .1s,background-color .1s}.Button--color--caution:focus,.Button--color--caution:hover{background-color:#f3d00e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color .1s,background-color .1s}.Button--color--danger:focus,.Button--color--danger:hover{background-color:#d52b2b;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:hsla(0,0%,100%,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color .1s,background-color .1s}.Button--color--transparent:focus,.Button--color--transparent:hover{background-color:#2c2c2c;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color .1s,background-color .1s}.Button--selected:focus,.Button--selected:hover{background-color:#27ab46;color:#fff}.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}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid hsla(0,0%,100%,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid hsla(0,0%,100%,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.5em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;overflow-y:scroll}.Dropdown__menu,.Dropdown__menu-noscroll{position:absolute;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{overflow-y:auto}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s}.Dropdown__menuentry:hover{background-color:hsla(0,0%,100%,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:table!important;width:105%;border-collapse:collapse;border-spacing:0}.Flex--iefix:after{content:"";display:table-cell;width:5%}.Flex--iefix--column{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Flex--iefix--column>.Flex__item--iefix{display:table-row!important}.Flex--iefix--column>.Flex__item--iefix--grow{height:100%!important}.Flex__item--iefix{display:table-cell!important;width:1%!important;min-width:99%}.Flex__item--iefix--grow{width:auto!important}.Flex--spacing--1{margin:0 -.25em}.Flex--spacing--1>.Flex__item{margin:0 .25em}.Flex--spacing--2{margin:0 -.5em}.Flex--spacing--2>.Flex__item{margin:0 .5em}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;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(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 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:hsla(0,0%,100%,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:transparent;stroke:hsla(0,0%,100%,.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:transparent;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}.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}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.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) 0,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--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:transparent;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--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}.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__content{padding:.66em .5em}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill .Section__content{flex-grow:1}.Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:scroll}.Section--level--1 .Section__titleText{font-size:1.1666666667em}.Section--level--2 .Section__titleText{font-size:1.0833333333em}.Section--level--3 .Section__titleText{font-size:1em}.Section--level--2,.Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.Slider{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 transparent;border-right:.4166666667em solid transparent;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:translateX(50%);white-space:nowrap}.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__cell--header,.Table__row--header .Table__cell{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden}.Tabs--vertical{flex-direction:column}.Tabs--horizontal{margin-bottom:.5em}.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;color:hsla(0,0%,100%,.5);min-height:2.25em;min-width:4em}.Tab--selected{color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{margin-left:.25em}.Tab__left,.Tab__right{min-width:1.5em;text-align:center}.Tab__right{margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.Tabs--vertical .Tab--selected{border-right:.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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.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:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.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:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.Tooltip{position:absolute;top:0;left:0;right:0;bottom:0;font-style:normal;font-weight:400}.Tooltip:after{position:absolute;display:block;white-space:nowrap;z-index:2;padding:.5em .75em;transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;text-align:left;content:attr(data-tooltip);transition:all .15s;background-color:#000;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em}.Tooltip:hover:after{transition:all 70ms;pointer-events:none;visibility:visible;opacity:1}.Tooltip--long:after{width:20.8333333333em;white-space:normal}.Tooltip--top:after{bottom:100%;left:50%;transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom:after,.Tooltip--top:hover:after{transform:translateX(-50%) translateY(-.5em)}.Tooltip--bottom:after{top:100%;left:50%}.Tooltip--bottom:hover:after{transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom-left:after{top:100%;right:50%;transform:translateX(12px) translateY(-.5em)}.Tooltip--bottom-left:hover:after{transform:translateX(12px) translateY(.5em)}.Tooltip--bottom-right:after{top:100%;left:50%;transform:translateX(-12px) translateY(-.5em)}.Tooltip--bottom-right:hover:after{transform:translateX(-12px) translateY(.5em)}.Tooltip--left:after{top:50%;right:100%;transform:translateX(.5em) translateY(-50%)}.Tooltip--left:hover:after,.Tooltip--right:after{transform:translateX(-.5em) translateY(-50%)}.Tooltip--right:after{top:50%;left:100%}.Tooltip--right:hover:after{transform:translateX(.5em) translateY(-50%)}.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 hsla(0,0%,54.9%,.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;bottom:1em;left:1em;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__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{bottom:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(180deg,#202020 0,#202020)}.Window,.Window__titleBar{position:fixed;top:0;left:0}.Window__titleBar{z-index:1;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}a{color:#397ea5}a.visited,a:visited{color:#7c00e6}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,.popup .head{background:#999}.popup .head{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]:active,.popup input[type=text]:focus,.popup input[type=text]:hover{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]:active,.popup input[type=submit]:focus,.popup input[type=submit]:hover{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:active,.motd a:hover,.motd a:link,.motd a:visited{color:#a4bad6}.admin,.adminooc,.bold,.looc,.medal,.name,.ooc,.prefix,.yell{font-weight:700}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal}.ooc,em{font-weight:700}.ooc{color:#cca300}.looc{color:#69c;font-weight:700}.antagooc{color:#b8002e;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#3d5bc3;font-weight:700}.adminsay{color:#ff4500;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#5975da;font-weight:700}.mentorsay{color:#e236d8;font-weight:700}.mentorsay_admin{color:#8a2be2;font-weight:700}.name{font-weight:700}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:#0f0}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.yell{font-weight:700}.alert{color:#d82020}.emote{font-style:italic}.userdanger{font-weight:700;font-size:185%}.danger,.userdanger,.warning{color:#c51e1e}.warning{font-style:italic}.alertwarning{color:red;font-weight:700}.boldwarning{font-style:italic}.announce,.boldannounce,.boldwarning{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.tinynotice{font-size:85%}.smallnotice,.tinynotice{color:#6685f5;font-style:italic}.smallnotice{font-size:90%}.boldnotice{color:#6685f5;font-weight:700}.hear{font-style:italic}.adminnotice,.hear{color:#6685f5}.adminhelp{color:red;font-weight:700}.unconscious{color:#a4bad6;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.userlove{color:#ff42a6;font-weight:700;text-shadow:0 0 6px #82365e}.love,.userlove{font-style:italic}.love{color:#ff4591;text-shadow:0 0 6px #994449}.cult{color:#aa1c1c}.cultbold,.cultitalic{color:#aa1c1c;font-style:italic}.cultbold{font-weight:700}.cultboldtalic,.cultlarge{color:#aa1c1c;font-weight:700;font-size:185%}.narsie{font-size:925%}.narsie,.narsiesmall{color:#aa1c1c;font-weight:700}.narsiesmall{font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:700;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenbignotice,.revenboldnotice{color:#c099e2;font-weight:700}.revenbignotice{font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:185%}.umbra{color:#5000a0}.umbra_emphasis,.umbra_large{color:#5000a0;font-weight:700;font-style:italic}.umbra_large{font-size:3}.deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.brass,.heavy_brass{color:#be8700}.heavy_brass{font-weight:700;font-style:italic}.large_brass{color:#be8700;font-size:185%}.big_brass{font-size:185%}.big_brass,.ratvar{color:#be8700;font-weight:700;font-style:italic}.ratvar{font-size:6}.alloy{color:#42474d}.heavy_alloy,.nezbere_large{color:#42474d;font-weight:700;font-style:italic}.nezbere_large{font-size:185%}.nezbere{font-weight:700;font-style:italic}.nezbere,.nezbere_small{color:#42474d}.sevtug_large{font-size:185%}.sevtug,.sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.sevtug_small{color:#af0aaf}.inathneq_large{font-size:185%}.inathneq,.inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.inathneq_small{color:#1e8ce1}.nzcrentr_large{font-size:185%}.nzcrentr,.nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.nzcrentr_small{color:#daaa18}.neovgre_large{font-size:185%}.neovgre,.neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.neovgre_small{color:#6e001a}.ghostalert{color:#60f;font-style:italic;font-weight:700}.alien{color:#855d85}.alertalien,.noticealien{color:#059223}.alertalien{font-weight:700}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red}.alertsyndie,.spider{font-size:185%;font-weight:700}.spider{color:#80f}.interface{color:#750e75}.sans{font-family:Comic Sans MS,cursive,sans-serif}.papyrus{font-family:Papyrus,cursive,sans-serif}.robot{font-family:Courier New,cursive,sans-serif}.command_headset{font-weight:700;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.yellowtext{color:#fc0;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.spooky{color:#ff9100}.hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}.velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}.phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}.icon{height:1em;width:auto}.memo{color:#638500}.memo,.memoedit{text-align:center}.memoedit{font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:700}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.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-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 .Tabs{display:flex;align-items:stretch;overflow:hidden}.theme-light .Tabs--vertical{flex-direction:column}.theme-light .Tabs--horizontal{margin-bottom:.5em}.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;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-light .Tab--selected{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 transparent;border-bottom:.1666666667em solid transparent}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.theme-light .Tabs--vertical .Tab--selected{border-right:.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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-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-right-color:#353535}.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__content{padding:.66em .5em}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill .Section__content{flex-grow:1}.theme-light .Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:scroll}.theme-light .Section--level--1 .Section__titleText{font-size:1.1666666667em}.theme-light .Section--level--2 .Section__titleText{font-size:1.0833333333em}.theme-light .Section--level--3 .Section__titleText{font-size:1em}.theme-light .Section--level--2,.theme-light .Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.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 .far,.theme-light .Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .far,.theme-light .Button--hasContent .fas{margin-right:.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--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--black:focus,.theme-light .Button--color--black:hover{background-color:#0a0a0a;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--white:focus,.theme-light .Button--color--white:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--red:focus,.theme-light .Button--color--red:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--orange:focus,.theme-light .Button--color--orange:hover{background-color:#d76316;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--yellow:focus,.theme-light .Button--color--yellow:hover{background-color:#d7b90d;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--olive:focus,.theme-light .Button--color--olive:hover{background-color:#9cae1d;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--green:focus,.theme-light .Button--color--green:hover{background-color:#24993f;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--teal:focus,.theme-light .Button--color--teal:hover{background-color:#0a9c95;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--blue:focus,.theme-light .Button--color--blue:hover{background-color:#2475b1;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--violet:focus,.theme-light .Button--color--violet:hover{background-color:#5a35ac;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--purple:focus,.theme-light .Button--color--purple:hover{background-color:#8d33ab;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--pink:focus,.theme-light .Button--color--pink:hover{background-color:#ce2985;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--brown:focus,.theme-light .Button--color--brown:hover{background-color:#8f5d3c;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--grey:focus,.theme-light .Button--color--grey:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--good:focus,.theme-light .Button--color--good:hover{background-color:#539329;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--average:focus,.theme-light .Button--color--average:hover{background-color:#cd7d16;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--bad:focus,.theme-light .Button--color--bad:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--label:focus,.theme-light .Button--color--label:hover{background-color:#393939;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--default:focus,.theme-light .Button--color--default:hover{background-color:#d3d3d3;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--caution:focus,.theme-light .Button--color--caution:hover{background-color:#d67313;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--danger:focus,.theme-light .Button--color--danger:hover{background-color:#afb30a;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:hsla(0,0%,93.3%,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--transparent:focus,.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color .1s,background-color .1s}.theme-light .Button--selected:focus,.theme-light .Button--selected:hover{background-color:#107ad0;color:#fff}.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:#fff;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;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;text-align:right}.theme-light .Input,.theme-light .NumberInput__input{line-height:1.4166666667em;background-color:#fff;color:#000}.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;padding:0 .3333333333em;margin-right:.1666666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.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:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.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:#fff;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:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.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:transparent;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(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 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:hsla(0,0%,100%,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.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:transparent;stroke:hsla(0,0%,100%,.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:transparent;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 .Slider{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 transparent;border-right:.4166666667em solid transparent;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:translateX(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:transparent;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--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 .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__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(180deg,#eee 0,#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:hsla(0,0%,98.8%,.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:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light body,.theme-light html{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#e0e0e0;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.visited,.theme-light a:visited{color:#f0f}.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]:active,.theme-light .popup input[type=text]:focus,.theme-light .popup input[type=text]:hover{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]:active,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:hover{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:active,.theme-light .motd a:hover,.theme-light .motd a:link,.theme-light .motd a:visited{color:#638500}.theme-light .admin,.theme-light .adminooc,.theme-light .bold,.theme-light .looc,.theme-light .medal,.theme-light .name,.theme-light .ooc,.theme-light .prefix,.theme-light .yell{font-weight:700}.theme-light .italic,.theme-light .italics{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 .ooc{color:#002eb8;font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .antagooc{color:#b8002e;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#700038;font-weight:700}.theme-light .adminsay{color:#ff4500;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#4473ff;font-weight:700}.theme-light .mentorsay{color:#e236d8;font-weight:700}.theme-light .mentorsay_admin{color:#8a2be2;font-weight:700}.theme-light .name{font-weight:700}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:#0f0}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#948f02}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#337296}.theme-light .engradio{color:#fb5613}.theme-light .suppradio{color:#a8732b}.theme-light .servradio{color:#6eaa2c}.theme-light .syndradio{color:#6d3f40}.theme-light .centcomradio{color:#686868}.theme-light .aiprivradio{color:#f0f}.theme-light .redteamradio{color:red}.theme-light .blueteamradio{color:#00f}.theme-light .yell{font-weight:700}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .userdanger{font-size:185%}.theme-light .bolddanger,.theme-light .userdanger{color:red;font-weight:700}.theme-light .danger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:700}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .announce{color:#228b22;font-weight:700}.theme-light .boldannounce{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .tinynotice{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:#00f}.theme-light .adminhelp{color:red;font-weight:700}.theme-light .unconscious{color:#00f;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .red{color:red}.theme-light .blue{color:#00f}.theme-light .nicegreen{color:#14a833}.theme-light .userlove{color:#ff1493;font-style:italic;font-weight:700;text-shadow:0 0 6px #ff6dbc}.theme-light .love{color:#ff006a;font-style:italic;text-shadow:0 0 6px #ff6d6d}.theme-light .cult{color:#960000}.theme-light .cultbold,.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultbold{font-weight:700}.theme-light .cultboldtalic,.theme-light .cultlarge{color:#960000;font-weight:700;font-size:185%}.theme-light .narsie{color:#960000;font-weight:700;font-size:925%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{font-weight:700}.theme-light .hierophant,.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenbignotice,.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-light .umbra{color:#5000a0}.theme-light .umbra_emphasis,.theme-light .umbra_large{color:#5000a0;font-weight:700;font-style:italic}.theme-light .umbra_large{font-size:3}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .brass{color:#be8700}.theme-light .heavy_brass{color:#be8700;font-weight:700;font-style:italic}.theme-light .big_brass,.theme-light .large_brass{color:#be8700;font-size:185%}.theme-light .big_brass,.theme-light .ratvar{font-weight:700;font-style:italic}.theme-light .ratvar{color:#be8700;font-size:6}.theme-light .alloy{color:#42474d}.theme-light .heavy_alloy,.theme-light .nezbere_large{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_large{font-size:185%}.theme-light .nezbere{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_small{color:#42474d}.theme-light .sevtug_large{font-size:185%}.theme-light .sevtug,.theme-light .sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.theme-light .sevtug_small{color:#af0aaf}.theme-light .inathneq_large{font-size:185%}.theme-light .inathneq,.theme-light .inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.theme-light .inathneq_small{color:#1e8ce1}.theme-light .nzcrentr_large{font-size:185%}.theme-light .nzcrentr,.theme-light .nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.theme-light .nzcrentr_small{color:#daaa18}.theme-light .neovgre_large{font-size:185%}.theme-light .neovgre,.theme-light .neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.theme-light .neovgre_small{color:#6e001a}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-light .spider{color:#4d004d;font-weight:700;font-size:185%}.theme-light .interface{color:#303}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-light .robot{font-family:Courier New,cursive,sans-serif}.theme-light .command_headset{font-weight:700;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:#0f0;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .yellowtext{color:#fc0;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-light .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .spooky{color:#ff9100}.theme-light .hypnophrase{color:#0d0d0d;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}to{color:#3bb5d3}}.theme-light .velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}@keyframes velvet{0%{color:#400020}40%{color:red}50%{color:#f88}60%{color:red}to{color:#400020}}.theme-light .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}to{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:700;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .monkeyhive{color:#774704}.theme-light .monkeylead{color:#774704;font-size:80%}.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 .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em} \ No newline at end of file