diff --git a/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm b/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm index 4ff1b225364c1..49da2fefd64b6 100644 --- a/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm +++ b/_maps/RandomRuins/SpaceRuins/Fast_Food.dmm @@ -519,7 +519,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/powered/macspace) "cd" = ( -/obj/item/food/toastedsandwich, +/obj/item/food/grilled_cheese_sandwich, /obj/structure/table/wood/fancy/blue, /turf/open/floor/iron/cafeteria, /area/ruin/space/has_grav/powered/macspace) diff --git a/_maps/boxstation.json b/_maps/boxstation.json index b1279ac62327e..e2bba152ea251 100644 --- a/_maps/boxstation.json +++ b/_maps/boxstation.json @@ -1,6 +1,6 @@ { "map_name": "Box Station", - "map_link": "BoxStation", + "map_link": "boxstation", "map_path": "map_files/BoxStation", "map_file": "BoxStation.dmm", "shuttles": { diff --git a/_maps/corgstation.json b/_maps/corgstation.json index e29bbe0de2f33..405fe87a355e0 100644 --- a/_maps/corgstation.json +++ b/_maps/corgstation.json @@ -1,6 +1,6 @@ { "map_name": "Corg Station", - "map_link": "CorgStation", + "map_link": "corgstation", "map_path": "map_files/CorgStation", "map_file": "CorgStation.dmm", "shuttles": { diff --git a/_maps/deltastation.json b/_maps/deltastation.json index 242904a1c3185..a1e6fc2fd08a3 100644 --- a/_maps/deltastation.json +++ b/_maps/deltastation.json @@ -1,6 +1,6 @@ { "map_name": "Delta Station", - "map_link": "DeltaStation", + "map_link": "deltsatation", "map_path": "map_files/Deltastation", "map_file": "DeltaStation2.dmm", "shuttles": { diff --git a/_maps/echostation.json b/_maps/echostation.json index 3cdf003eb821f..11d427772d898 100644 --- a/_maps/echostation.json +++ b/_maps/echostation.json @@ -1,6 +1,6 @@ { "map_name": "Echo Station", - "map_link": "EchoStation", + "map_link": "echostation", "map_path": "map_files/EchoStation", "map_file": "EchoStation.dmm", "shuttles": { diff --git a/_maps/flandstation.json b/_maps/flandstation.json index ac4190a9e38e5..357b524e7ab2d 100644 --- a/_maps/flandstation.json +++ b/_maps/flandstation.json @@ -1,6 +1,6 @@ { "map_name": "Fland Station", - "map_link": "FlandStation", + "map_link": "flandstation", "map_path": "map_files/FlandStation", "map_file": "FlandStation.dmm", "shuttles": { diff --git a/_maps/kilostation.json b/_maps/kilostation.json index 961c50a3dba9e..476acd646c18f 100644 --- a/_maps/kilostation.json +++ b/_maps/kilostation.json @@ -1,6 +1,6 @@ { "map_name": "Kilo Station", - "map_link": "KiloStation", + "map_link": "kilostation", "map_path": "map_files/KiloStation", "map_file": "KiloStation.dmm", "shuttles": { diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index f3ed424e9463f..61e05c1584277 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -4259,6 +4259,12 @@ "aTN" = ( /obj/structure/table, /obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3 + }, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "aTO" = ( @@ -4515,13 +4521,7 @@ /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "aVD" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, +/obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "aVE" = ( @@ -44208,9 +44208,7 @@ /area/security/courtroom) "ooe" = ( /obj/structure/closet/secure_closet/freezer/kitchen, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -58441,7 +58439,7 @@ /turf/open/floor/iron, /area/security/checkpoint/supply) "uBy" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 8 }, /obj/effect/turf_decal/tile/red/anticorner/contrasted, @@ -62554,6 +62552,13 @@ /obj/structure/cable/yellow, /turf/open/floor/plating, /area/crew_quarters/heads/cmo) +"wCj" = ( +/obj/structure/table, +/obj/machinery/dish_drive{ + pixel_y = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/crew_quarters/kitchen) "wCo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/yellow{ @@ -104700,8 +104705,8 @@ uve lCW hcL bEr -aVD aVE +aVD aXm aVz kVI @@ -104958,7 +104963,7 @@ aJI aRB thS aTN -cCq +wCj aVz cAg kVI diff --git a/_maps/map_files/CorgStation/CorgStation.dmm b/_maps/map_files/CorgStation/CorgStation.dmm index 054ebcd8a0716..ea6161c73c61c 100644 --- a/_maps/map_files/CorgStation/CorgStation.dmm +++ b/_maps/map_files/CorgStation/CorgStation.dmm @@ -691,16 +691,6 @@ }, /turf/open/floor/iron/dark, /area/security/nuke_storage) -"afY" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/quartermaster/storage) "agb" = ( /obj/machinery/atmospherics/components/binary/volume_pump/on{ dir = 1; @@ -1545,6 +1535,19 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/central) +"apN" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/auto_name/north, +/turf/open/floor/iron/dark, +/area/quartermaster/storage) "apW" = ( /obj/structure/chair{ dir = 1 @@ -3776,18 +3779,6 @@ }, /turf/open/space/basic, /area/solar/port/fore) -"aTC" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/iron, -/area/quartermaster/storage) "aTD" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -5744,6 +5735,30 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark, /area/engine/engine_room) +"bCq" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining{ + name = "Quartermaster's Office"; + req_access_txt = "41" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/iron, +/area/quartermaster/qm) "bCP" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -6301,14 +6316,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/medical/cryo) -"bKR" = ( -/obj/machinery/deepfryer, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners/contrasted, -/turf/open/floor/iron/white, -/area/crew_quarters/kitchen) "bKV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 @@ -7214,14 +7221,6 @@ }, /turf/open/floor/iron/dark, /area/security/main) -"bZk" = ( -/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, -/obj/effect/turf_decal/bot, -/obj/structure/extinguisher_cabinet{ - pixel_x = -25 - }, -/turf/open/floor/iron, -/area/quartermaster/storage) "bZp" = ( /obj/structure/rack, /obj/item/stock_parts/cell/high/plus, @@ -8394,6 +8393,14 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAP) +"cvn" = ( +/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, +/obj/effect/turf_decal/bot, +/obj/structure/extinguisher_cabinet{ + pixel_x = -25 + }, +/turf/open/floor/iron, +/area/quartermaster/storage) "cvq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -8991,15 +8998,6 @@ }, /turf/open/floor/iron/white, /area/crew_quarters/heads/cmo) -"cHq" = ( -/obj/structure/table/reinforced, -/obj/item/storage/bag/tray, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners/contrasted, -/turf/open/floor/iron/white, -/area/crew_quarters/kitchen) "cHt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/iron, @@ -12840,6 +12838,18 @@ dir = 5 }, /area/science/breakroom) +"dUC" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/iron, +/area/quartermaster/storage) "dUK" = ( /obj/structure/reagent_dispensers/watertank/high, /obj/machinery/light/small{ @@ -13377,30 +13387,6 @@ }, /turf/open/floor/carpet/purple, /area/crew_quarters/heads/hor) -"ecV" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Quartermaster's Office"; - req_access_txt = "41" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/iron, -/area/quartermaster/qm) "edi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating/asteroid, @@ -22283,6 +22269,20 @@ "hdz" = ( /turf/closed/wall, /area/science/mixing) +"hdA" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "qmoffice"; + name = "Quartermaster's Office Shutters" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/qm) "hdC" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -26891,24 +26891,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/wood, /area/crew_quarters/bar) -"izh" = ( -/obj/effect/turf_decal/tile/red/fourcorners/contrasted, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/structure/chair/fancy/comfy{ - color = "#666666"; - dir = 1 - }, -/obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/security/main) "izP" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -31405,20 +31387,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/white, /area/crew_quarters/kitchen) -"kaB" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "qmoffice"; - name = "Quartermaster's Office Shutters" - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/quartermaster/qm) "kaW" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -31994,6 +31962,24 @@ }, /turf/open/floor/iron/dark, /area/ai_monitored/turret_protected/aisat/foyer) +"kkG" = ( +/obj/effect/turf_decal/tile/red/fourcorners/contrasted, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/chair/fancy/comfy{ + color = "#666666"; + dir = 1 + }, +/obj/effect/landmark/start/security_officer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/security/main) "kkP" = ( /obj/structure/chair/office{ dir = 1 @@ -32481,6 +32467,36 @@ }, /turf/open/floor/plating, /area/security/prison) +"kqV" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/command/glass{ + name = "Head of Security"; + req_access_txt = "58" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + id = "hosoffice"; + name = "Head Of Security Blast door" + }, +/turf/open/floor/iron/dark, +/area/security/brig) "krj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -34005,17 +34021,6 @@ }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAP) -"kUb" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "hosoffice"; - name = "Head Of Security Blast door" - }, -/turf/open/floor/plating, -/area/security/brig) "kUj" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -34052,6 +34057,15 @@ /obj/machinery/washing_machine, /turf/open/floor/iron/freezer, /area/security/prison) +"kUI" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/tray, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners/contrasted, +/turf/open/floor/iron/white, +/area/crew_quarters/kitchen) "kUJ" = ( /obj/structure/chair/office/light{ dir = 4 @@ -34125,7 +34139,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/secondary) "kVR" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /obj/machinery/power/apc/auto_name/west{ @@ -37501,26 +37515,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/ai_monitored/storage/eva) -"lZt" = ( -/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/quartermaster/qm) "lZv" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -39346,6 +39340,17 @@ }, /turf/open/floor/iron/dark, /area/crew_quarters/heads/hos) +"mAc" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "hosoffice"; + name = "Head Of Security Blast door" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/hos) "mAf" = ( /obj/machinery/atmospherics/pipe/simple/dark{ dir = 9 @@ -40323,25 +40328,6 @@ }, /turf/open/floor/iron/white, /area/medical/genetics/cloning) -"mOu" = ( -/obj/structure/table, -/obj/item/clothing/under/rank/cargo/tech{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/gloves/fingerless{ - pixel_x = 1 - }, -/obj/structure/cable/yellow, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/item/radio/intercom{ - pixel_x = -29; - pixel_y = -2 - }, -/turf/open/floor/iron, -/area/quartermaster/storage) "mOF" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -41718,16 +41704,6 @@ }, /turf/open/floor/iron/dark, /area/maintenance/department/chapel/monastery) -"nok" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/security/brig) "noq" = ( /obj/item/storage/toolbox/electrical, /obj/machinery/airalarm/directional/west, @@ -43937,24 +43913,6 @@ }, /turf/open/floor/wood, /area/library) -"nXN" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, -/obj/structure/table/reinforced, -/obj/item/computer_hardware/hard_drive/role/quartermaster{ - pixel_x = -6 - }, -/obj/item/computer_hardware/hard_drive/role/quartermaster{ - pixel_x = 6 - }, -/obj/item/computer_hardware/hard_drive/role/quartermaster{ - pixel_y = 6 - }, -/obj/item/gps/mining, -/turf/open/floor/iron/dark, -/area/quartermaster/qm) "nXW" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -45229,6 +45187,23 @@ }, /turf/open/floor/iron/white, /area/medical/medbay/lobby) +"oud" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "hosoffice"; + name = "Head Of Security Blast door" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/hos) "oui" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -45716,6 +45691,26 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"oCA" = ( +/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/quartermaster/qm) "oCK" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/item/radio/intercom{ @@ -46837,6 +46832,14 @@ }, /turf/closed/wall, /area/engine/atmospherics_engine) +"oYs" = ( +/obj/machinery/deepfryer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners/contrasted, +/turf/open/floor/iron/white, +/area/crew_quarters/kitchen) "oYA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -49011,15 +49014,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners/contrasted, /turf/open/floor/iron, /area/hallway/primary/fore) -"pLo" = ( -/obj/structure/cable/yellow, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "hosoffice"; - name = "Head Of Security Blast door" - }, -/turf/open/floor/plating, -/area/crew_quarters/heads/hos) "pLz" = ( /obj/machinery/power/apc/auto_name/south{ pixel_y = -24 @@ -49484,17 +49478,6 @@ /obj/structure/closet/firecloset/full, /turf/open/floor/iron, /area/hallway/primary/starboard) -"pSX" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "hosoffice"; - name = "Head Of Security Blast door" - }, -/turf/open/floor/plating, -/area/crew_quarters/heads/hos) "pTe" = ( /turf/open/floor/plating, /area/crew_quarters/fitness/recreation) @@ -53422,36 +53405,6 @@ /obj/structure/disposalpipe/junction, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"riQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/airlock/command/glass{ - name = "Head of Security"; - req_access_txt = "58" - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/door/poddoor/preopen{ - id = "hosoffice"; - name = "Head Of Security Blast door" - }, -/turf/open/floor/iron/dark, -/area/security/brig) "rjb" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -53553,6 +53506,17 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/crew_quarters/toilet) +"rkB" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "hosoffice"; + name = "Head Of Security Blast door" + }, +/turf/open/floor/plating, +/area/security/brig) "rkK" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/white{ @@ -53723,23 +53687,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/fitness/recreation) -"rnk" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "hosoffice"; - name = "Head Of Security Blast door" - }, -/turf/open/floor/plating, -/area/crew_quarters/heads/hos) "rnn" = ( /obj/machinery/light_switch{ pixel_x = 1; @@ -56568,6 +56515,15 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark, /area/security/warden) +"siu" = ( +/obj/structure/cable/yellow, +/obj/machinery/door/poddoor/preopen{ + id = "hosoffice"; + name = "Head Of Security Blast door" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/security/brig) "siV" = ( /obj/item/kirbyplants/random, /obj/machinery/light, @@ -58310,6 +58266,15 @@ }, /turf/closed/wall, /area/engine/atmospherics_engine) +"sLg" = ( +/obj/structure/cable/yellow, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "hosoffice"; + name = "Head Of Security Blast door" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/hos) "sLm" = ( /turf/closed/wall, /area/science/storage) @@ -58665,6 +58630,14 @@ }, /turf/open/floor/engine, /area/engine/atmospherics_engine) +"sRL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Cargo Maintenance"; + req_access_txt = "31" + }, +/turf/open/floor/plating, +/area/quartermaster/storage) "sSj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -58692,6 +58665,16 @@ /obj/effect/turf_decal/tile/yellow/fourcorners/contrasted, /turf/open/floor/iron, /area/engine/atmos) +"sSB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/security/brig) "sSL" = ( /obj/structure/window/reinforced/spawner, /obj/structure/window/reinforced/spawner{ @@ -61419,6 +61402,25 @@ }, /turf/open/floor/iron/dark, /area/hallway/primary/central) +"tOn" = ( +/obj/structure/table, +/obj/item/clothing/under/rank/cargo/tech{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/gloves/fingerless{ + pixel_x = 1 + }, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom{ + pixel_x = -29; + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/quartermaster/storage) "tOF" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -64407,14 +64409,6 @@ }, /turf/open/floor/iron/dark, /area/maintenance/department/chapel/monastery) -"uLB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Cargo Maintenance"; - req_access_txt = "31" - }, -/turf/open/floor/plating, -/area/quartermaster/storage) "uMg" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/neutral{ @@ -65458,19 +65452,6 @@ }, /turf/open/floor/iron, /area/engine/engine_room) -"veL" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/apc/auto_name/north, -/turf/open/floor/iron/dark, -/area/quartermaster/storage) "veT" = ( /obj/structure/table/wood, /obj/item/storage/fancy/candle_box, @@ -65629,6 +65610,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"vhD" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/quartermaster/storage) "vhE" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -67165,6 +67156,24 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/security/brig) +"vEj" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/fourcorners/contrasted, +/obj/structure/table/reinforced, +/obj/item/computer_hardware/hard_drive/role/quartermaster{ + pixel_x = -6 + }, +/obj/item/computer_hardware/hard_drive/role/quartermaster{ + pixel_x = 6 + }, +/obj/item/computer_hardware/hard_drive/role/quartermaster{ + pixel_y = 6 + }, +/obj/item/gps/mining, +/turf/open/floor/iron/dark, +/area/quartermaster/qm) "vEs" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -68311,7 +68320,7 @@ /turf/open/floor/plating, /area/crew_quarters/heads/cmo) "vXY" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /turf/open/floor/carpet/royalblue, @@ -68769,15 +68778,6 @@ }, /turf/open/floor/iron/dark, /area/quartermaster/miningdock) -"wgP" = ( -/obj/machinery/button/door{ - id = "detectivewindows"; - name = "Detective Private Shutters"; - pixel_y = -8; - req_access_txt = "4" - }, -/turf/closed/wall, -/area/security/detectives_office) "wgR" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/white, @@ -71481,6 +71481,15 @@ }, /turf/open/floor/iron/dark, /area/engine/atmospherics_engine) +"wZF" = ( +/obj/machinery/button/door{ + id = "detectivewindows"; + name = "Detective Private Shutters"; + pixel_y = -8; + req_access_txt = "4" + }, +/turf/closed/wall, +/area/security/detectives_office) "wZS" = ( /obj/structure/table/glass, /obj/machinery/requests_console{ @@ -74278,15 +74287,6 @@ }, /turf/open/floor/iron/dark, /area/bridge) -"xUc" = ( -/obj/structure/cable/yellow, -/obj/machinery/door/poddoor/preopen{ - id = "hosoffice"; - name = "Head Of Security Blast door" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/brig) "xUf" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -110841,7 +110841,7 @@ sIf cyL uYN qsX -bKR +oYs wWq jOn jNy @@ -111355,7 +111355,7 @@ aYT tnJ hZf aPw -cHq +kUI wWq gEw aYT @@ -113084,7 +113084,7 @@ ykq wkk tmQ kQW -izh +kkG qRL nXe hhE @@ -113857,7 +113857,7 @@ uQV kkf vwV wKV -wgP +wZF dqa lev ijS @@ -115142,7 +115142,7 @@ wBm fEX tXi rfO -nok +sSB mLz bkx nPz @@ -115647,9 +115647,9 @@ sEA ezb eZq eZq -kUb -riQ -xUc +rkB +kqV +siu duF duF cik @@ -118217,9 +118217,9 @@ fpM ajU naL iRh -pSX -rnk -pLo +mAc +oud +sLg iRh iRh anT @@ -118762,8 +118762,8 @@ hcZ oeF ivK ecG -uLB -aTC +sRL +dUC enS qUi kuy @@ -119020,7 +119020,7 @@ oeF ivK sKt aWM -veL +apN aiQ cNs uiA @@ -119519,11 +119519,11 @@ ivK sEx lJc hgC -lZt -ecV +oCA +bCq fcU -afY -bZk +vhD +cvn mqk azU mqk @@ -119533,7 +119533,7 @@ lDt rDh gMD kvM -mOu +tOn gdv gdv wpa @@ -119777,7 +119777,7 @@ sEx kYZ mKw pZL -kaB +hdA qZv nxL nxL @@ -120033,8 +120033,8 @@ ivK sEx vjM vqO -nXN -kaB +vEj +hdA aFR vQo enI diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ce04c26e93f98..7de1e97e0fac8 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -10012,9 +10012,7 @@ /turf/open/floor/iron, /area/crew_quarters/kitchen) "bhR" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, -/obj/item/book/manual/wiki/cooking_to_serve_man, +/obj/machinery/griddle, /turf/open/floor/iron, /area/crew_quarters/kitchen) "bhS" = ( @@ -10563,6 +10561,7 @@ pixel_y = 5 }, /obj/effect/turf_decal/bot, +/obj/item/book/manual/wiki/cooking_to_serve_man, /turf/open/floor/iron, /area/crew_quarters/kitchen) "blw" = ( @@ -36560,7 +36559,7 @@ /turf/open/floor/iron, /area/engine/storage_shared) "eNB" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /turf/open/floor/prison, diff --git a/_maps/map_files/EchoStation/EchoStation.dmm b/_maps/map_files/EchoStation/EchoStation.dmm index e0ea43e0b62de..de3787324a6c0 100644 --- a/_maps/map_files/EchoStation/EchoStation.dmm +++ b/_maps/map_files/EchoStation/EchoStation.dmm @@ -5972,7 +5972,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 5 }, -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 1 }, /obj/structure/railing, @@ -9023,6 +9023,18 @@ req_access = null; req_one_access_txt = "28;25;35" }, +/obj/item/storage/box/ingredients/fruity{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/box/ingredients/vegetarian{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/storage/box/ingredients/wildcard{ + pixel_x = -5; + pixel_y = 8 + }, /turf/open/floor/iron/freezer, /area/crew_quarters/kitchen/coldroom) "eoQ" = ( @@ -28962,15 +28974,7 @@ /obj/effect/turf_decal/tile/dark_green/fourcorners/contrasted, /mob/living/simple_animal/hostile/retaliate/frog{ attacked_sound = 'sound/effects/huuu.ogg'; - density = 0; - desc = "It seems a little sad."; dir = 8; - head_icon = 'icons/mob/pets_held.dmi'; - held_state = ""; - icon = 'icons/mob/animal.dmi'; - icon_dead = "frog_dead"; - icon_living = "frog"; - icon_state = "frog"; name = "Larry"; pixel_y = 12; stepped_sound = null @@ -35130,19 +35134,7 @@ /turf/open/floor/iron, /area/engine/engineering) "rZh" = ( -/obj/structure/table, -/obj/item/storage/box/ingredients/wildcard{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/storage/box/ingredients/fruity{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/box/ingredients/vegetarian{ - pixel_x = -1; - pixel_y = 4 - }, +/obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "rZv" = ( @@ -36559,7 +36551,6 @@ /area/crew_quarters/cafeteria) "sMM" = ( /obj/machinery/airalarm{ - dir = 2; pixel_y = 28 }, /turf/open/openspace, diff --git a/_maps/map_files/FlandStation/FlandStation.dmm b/_maps/map_files/FlandStation/FlandStation.dmm index 00421407d23e9..8dbf4af27ce4d 100644 --- a/_maps/map_files/FlandStation/FlandStation.dmm +++ b/_maps/map_files/FlandStation/FlandStation.dmm @@ -4474,9 +4474,7 @@ /turf/open/floor/iron/dark, /area/hallway/secondary/entry) "aYi" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/effect/turf_decal/tile/blue/fourcorners/contrasted, /obj/machinery/camera{ c_tag = "Medbay - Chief Medical Officer's Office"; @@ -6052,9 +6050,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/chapel/office) @@ -9911,12 +9907,9 @@ }, /area/hallway/primary/port) "czD" = ( -/obj/structure/table, /obj/effect/turf_decal/bot, -/obj/item/reagent_containers/glass/bowl, -/obj/item/food/grown/tomato, -/obj/item/food/dough, /obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "czF" = ( @@ -10225,9 +10218,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -11785,9 +11776,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -11915,6 +11904,10 @@ /obj/effect/turf_decal/bot, /obj/structure/table, /obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/food/condiment/flour{ + pixel_x = 4 + }, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "dap" = ( @@ -14949,6 +14942,10 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, /turf/open/floor/iron/dark, /area/hydroponics) "dPC" = ( @@ -16114,6 +16111,10 @@ }, /turf/open/floor/prison, /area/security/prison) +"ehF" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/hydroponics) "ehG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/closeup{ @@ -19089,9 +19090,7 @@ /turf/open/floor/plating, /area/maintenance/port/central) "eSB" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -19213,9 +19212,7 @@ /turf/open/floor/iron/grid/steel, /area/bridge) "eTQ" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /turf/open/floor/iron/dark, /area/engine/storage) @@ -19702,6 +19699,10 @@ }, /turf/open/floor/iron, /area/quartermaster/office) +"eYj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/kitchen) "eYk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/circuit, @@ -20411,6 +20412,14 @@ }, /turf/open/floor/iron, /area/hallway/primary/port) +"fiV" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table, +/obj/item/food/dough, +/obj/item/reagent_containers/glass/bowl, +/obj/item/food/grown/tomato, +/turf/open/floor/iron/cafeteria, +/area/crew_quarters/kitchen) "fiW" = ( /obj/effect/turf_decal/stripes/end, /obj/effect/turf_decal/stripes/red/end, @@ -20843,13 +20852,13 @@ /turf/open/floor/engine/air/light, /area/engine/atmos) "foJ" = ( -/obj/machinery/deepfryer, /obj/item/radio/intercom{ pixel_x = 28 }, /obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, +/obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/vacant_room/commissary/commissaryFood) "foO" = ( @@ -23237,9 +23246,7 @@ /turf/open/floor/iron, /area/hallway/primary/central) "fSI" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /obj/structure/cable/yellow{ icon_state = "0-8" @@ -23929,9 +23936,7 @@ /turf/open/floor/iron/dark, /area/ai_monitored/turret_protected/ai_upload_foyer) "gbx" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -24435,10 +24440,6 @@ /turf/open/floor/plating, /area/maintenance/port/central) "ghK" = ( -/obj/structure/noticeboard{ - dir = 8; - pixel_x = 32 - }, /obj/machinery/light/small{ dir = 4 }, @@ -26111,6 +26112,9 @@ /obj/item/storage/bag/plants/portaseeder, /obj/item/plant_analyzer, /obj/item/reagent_containers/glass/bucket, +/obj/item/seeds/wheat, +/obj/item/seeds/wheat, +/obj/item/seeds/wheat, /turf/open/floor/grass, /area/hydroponics/garden) "gCA" = ( @@ -26258,9 +26262,7 @@ dir = 9; network = list("vault") }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -30283,9 +30285,7 @@ /turf/open/floor/iron, /area/hallway/primary/central) "hJw" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -37168,9 +37168,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/chair/foldable{ dir = 8 }, @@ -39582,9 +39580,7 @@ /obj/machinery/airalarm{ pixel_y = 22 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -41952,10 +41948,6 @@ /obj/item/hand_labeler, /obj/effect/turf_decal/bot, /obj/structure/table, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, /turf/open/floor/iron/grid/steel, /area/hydroponics) "kFJ" = ( @@ -42458,16 +42450,9 @@ /turf/closed/wall/r_wall, /area/engine/supermatter) "kMK" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/flour{ - pixel_x = 4 - }, -/obj/item/food/chocolatebar, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron/cafeteria, -/area/crew_quarters/kitchen) +/mob/living/simple_animal/chicken, +/turf/open/floor/grass, +/area/hydroponics/garden) "kMO" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -42933,9 +42918,7 @@ name = "medbay camera"; network = list("ss13","medbay") }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -43951,9 +43934,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -47803,9 +47784,7 @@ /obj/item/stock_parts/cell/hyper, /obj/item/stack/cable_coil, /obj/effect/turf_decal/bot, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -48968,9 +48947,7 @@ /turf/open/floor/carpet/orange, /area/quartermaster/qm) "muu" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /turf/open/floor/carpet, /area/hallway/primary/starboard) @@ -50334,6 +50311,7 @@ /obj/item/storage/box/ingredients/wildcard, /obj/item/food/mint, /obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/food/chocolatebar, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) "mLS" = ( @@ -53079,6 +53057,10 @@ pixel_x = 4; pixel_y = -4 }, +/obj/structure/noticeboard{ + dir = 4; + pixel_x = -27 + }, /turf/open/floor/iron/dark, /area/crew_quarters/bar) "nwT" = ( @@ -55690,7 +55672,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /turf/open/floor/iron, @@ -59259,9 +59241,7 @@ /turf/open/floor/iron/dark, /area/bridge) "pgZ" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -63031,9 +63011,7 @@ /area/maintenance/central) "qfK" = ( /obj/item/kirbyplants/random, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -65806,9 +65784,7 @@ /turf/open/floor/iron/freezer, /area/crew_quarters/kitchen/coldroom) "qPX" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -66573,7 +66549,7 @@ /obj/structure/railing{ dir = 1 }, -/obj/machinery/computer/arcade, +/obj/effect/spawner/randomarcade, /obj/effect/turf_decal{ dir = 1 }, @@ -66714,9 +66690,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/machinery/light_switch{ pixel_x = 24; pixel_y = 24 @@ -68753,9 +68727,7 @@ /turf/open/floor/iron/dark, /area/quartermaster/miningdock) "rCW" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -70048,9 +70020,7 @@ /area/hydroponics) "rQK" = ( /obj/item/kirbyplants/random, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -71329,6 +71299,11 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/execution/transfer) +"sis" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table, +/turf/open/floor/iron/cafeteria, +/area/crew_quarters/kitchen) "siB" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/closeup, @@ -72236,7 +72211,7 @@ /turf/closed/wall/r_wall, /area/crew_quarters/heads/cmo) "suV" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /obj/machinery/status_display/ai{ @@ -72786,9 +72761,7 @@ /turf/open/floor/iron/ridged/steel, /area/science/xenobiology) "sBB" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -73098,9 +73071,7 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -75200,7 +75171,7 @@ /turf/open/floor/iron/sepia, /area/engine/engineering) "thX" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /obj/machinery/light/small{ @@ -77012,9 +76983,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/effect/turf_decal/tile/yellow/fourcorners/contrasted, /turf/open/floor/iron, /area/storage/tools) @@ -77677,7 +77646,7 @@ /turf/open/floor/iron/dark, /area/security/brig) "tPH" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /obj/effect/turf_decal/bot, @@ -79728,9 +79697,7 @@ dir = 5 }, /obj/item/kirbyplants/random, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -80675,9 +80642,7 @@ /area/engine/engine_room) "uBs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -81655,9 +81620,7 @@ /turf/open/floor/iron/dark, /area/engine/gravity_generator) "uOg" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -83805,9 +83768,7 @@ /turf/open/floor/wood, /area/security/detectives_office) "vmR" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /turf/open/floor/iron/dark, /area/science/robotics/mechbay) @@ -89063,9 +89024,7 @@ /turf/open/floor/iron/dark, /area/science/lobby) "wvS" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/structure/closet/secure_closet/injection, @@ -116658,7 +116617,7 @@ tqu fUf fUf fUf -fUf +kMK fUf veT gVE @@ -119242,7 +119201,7 @@ ajI vqH vqH vpW -vqH +eYj lHN sxF mRd @@ -120518,7 +120477,7 @@ arZ mEH ptN kFI -arZ +ehF kZd jAa xNi @@ -120788,8 +120747,8 @@ cRo mib mib rfs -mib -mib +sis +fiV mib njG jOJ @@ -121046,7 +121005,7 @@ pYP qxm mib mLj -kMK +czD mib qrj jOJ diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 41232f42c62e2..6d9777691fd90 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -33331,9 +33331,7 @@ "ewl" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/dark/opposingcorners, -/obj/machinery/atmospherics/components/unary/cryo_cell{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/cryo_cell, /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/medical/cryo) @@ -51709,7 +51707,7 @@ /turf/open/floor/iron/dark, /area/security/main) "kAD" = ( -/obj/machinery/computer/arcade, +/obj/effect/spawner/randomarcade, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/wood{ dir = 1; @@ -53329,9 +53327,7 @@ "lgL" = ( /obj/effect/turf_decal/tile/dark/opposingcorners, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/components/unary/cryo_cell{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/cryo_cell, /turf/open/floor/iron/dark, /area/medical/cryo) "lgN" = ( @@ -55048,14 +55044,12 @@ /area/medical/medbay/central) "lHW" = ( /obj/structure/table, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/item/storage/bag/tray, /obj/item/book/manual/chef_recipes{ pixel_x = -4; pixel_y = 6 }, -/obj/item/book/manual/chef_recipes{ - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/crew_quarters/kitchen) "lIC" = ( @@ -61752,7 +61746,6 @@ /turf/open/floor/iron/showroomfloor, /area/medical/surgery) "nZX" = ( -/obj/machinery/deepfryer, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/line{ @@ -61761,6 +61754,7 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 }, +/obj/machinery/food_cart, /turf/open/floor/iron/dark, /area/crew_quarters/kitchen) "oaf" = ( @@ -61845,10 +61839,12 @@ /area/maintenance/starboard) "ocf" = ( /obj/structure/table, -/obj/item/storage/bag/tray, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 }, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, /turf/open/floor/iron/dark, /area/crew_quarters/kitchen) "ocg" = ( @@ -65601,9 +65597,7 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "plP" = ( -/obj/effect/turf_decal/tile/dark_green/half/contrasted{ - color = "#439C1E" - }, +/obj/effect/turf_decal/tile/dark_green/half/contrasted, /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -74739,7 +74733,7 @@ /turf/open/floor/iron/dark, /area/crew_quarters/heads/hor) "stT" = ( -/obj/machinery/computer/arcade, +/obj/effect/spawner/randomarcade, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -85868,13 +85862,13 @@ /turf/open/floor/iron/showroomfloor, /area/medical/medbay/central) "wgS" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, /obj/structure/table, /obj/machinery/microwave{ pixel_y = 5 }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/crew_quarters/kitchen) "wgX" = ( @@ -90967,13 +90961,10 @@ }, /area/maintenance/starboard/aft) "xQc" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_y = 5 - }, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, +/obj/machinery/griddle, /turf/open/floor/iron/dark, /area/crew_quarters/kitchen) "xQl" = ( @@ -92397,9 +92388,7 @@ /area/crew_quarters/cryopods) "ylk" = ( /obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/tile/dark_green/half/contrasted{ - color = "#439C1E" - }, +/obj/effect/turf_decal/tile/dark_green/half/contrasted, /obj/effect/turf_decal/stripes/line{ dir = 4 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 7b6dd78d5e312..d1017c4555e51 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -29469,8 +29469,6 @@ /turf/open/floor/iron/dark, /area/aisat) "fpB" = ( -/obj/structure/table, -/obj/item/food/mint, /obj/machinery/airalarm{ dir = 4; pixel_x = -23 @@ -29481,6 +29479,13 @@ pixel_y = -24 }, /obj/structure/cable/yellow, +/obj/structure/rack, +/obj/item/storage/box/donkpockets, +/obj/item/stack/package_wrap, +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "fpC" = ( @@ -35284,10 +35289,12 @@ /turf/open/floor/plating, /area/maintenance/aft/secondary) "hEt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/poddoor/preopen{ + id = "kitchenwindow"; + name = "kitchen shutters" }, -/turf/open/floor/iron/checker, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, /area/crew_quarters/kitchen) "hEL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -43273,6 +43280,7 @@ "kId" = ( /obj/structure/table, /obj/item/book/manual/wiki/cooking_to_serve_man, +/obj/item/storage/box/donkpockets, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "kIn" = ( @@ -43473,6 +43481,7 @@ /obj/item/reagent_containers/food/condiment/enzyme{ layer = 5 }, +/obj/item/food/mint, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "kKl" = ( @@ -44187,7 +44196,7 @@ /turf/open/floor/iron/white, /area/science/research) "kZa" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /turf/open/floor/prison, @@ -44469,7 +44478,7 @@ /turf/open/floor/iron, /area/storage/tools) "lge" = ( -/obj/machinery/computer/arcade, +/obj/effect/spawner/randomarcade, /obj/machinery/airalarm{ dir = 8; pixel_x = 24 @@ -45876,9 +45885,6 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, @@ -53120,10 +53126,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white, /area/medical/medbay/aft) -"oub" = ( -/obj/structure/sign/poster/official/random, -/turf/closed/wall, -/area/hydroponics) "oue" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 @@ -59033,9 +59035,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -60310,9 +60310,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -62521,13 +62519,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -30 }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot{ - dir = 1 - }, +/obj/machinery/processor, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "sdw" = ( @@ -64629,11 +64621,6 @@ /turf/open/floor/engine, /area/science/xenobiology) "sVr" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 4 - }, /obj/machinery/button/door{ id = "kitchen"; name = "Kitchen Shutters Control"; @@ -64648,6 +64635,10 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/table, +/obj/machinery/dish_drive{ + pixel_y = 5 + }, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "sVA" = ( @@ -66326,13 +66317,11 @@ /turf/open/floor/iron/grid/steel, /area/medical/virology) "tDj" = ( -/obj/structure/rack, -/obj/item/book/manual/chef_recipes{ - pixel_x = 2; - pixel_y = 6 +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 4 }, -/obj/item/stack/package_wrap, -/obj/item/storage/box/donkpockets, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "tDC" = ( @@ -66353,8 +66342,7 @@ /turf/open/floor/iron/white, /area/medical/medbay/aft) "tDH" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, +/obj/machinery/griddle, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "tDM" = ( @@ -66627,9 +66615,6 @@ /turf/open/floor/iron, /area/hallway/primary/fore) "tIN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -66639,6 +66624,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 1 + }, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "tIU" = ( @@ -68041,7 +68029,6 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/deepfryer, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "ukx" = ( @@ -71280,9 +71267,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -75165,7 +75150,11 @@ departmentType = 2; pixel_x = 30 }, -/obj/machinery/processor, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/iron/checker, /area/crew_quarters/kitchen) "wVV" = ( @@ -75924,9 +75913,7 @@ name = "medbay camera"; network = list("ss13","medbay") }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /turf/open/floor/iron/dark, /area/medical/surgery) @@ -77493,7 +77480,6 @@ /obj/effect/turf_decal/tile/red/fourcorners/contrasted, /mob/living/simple_animal/kalo{ desc = "The Perma brig's cute grass snake."; - icon = 'icons/mob/animal.dmi'; icon_dead = "snake_dead"; icon_living = "snake"; icon_state = "snake"; @@ -111795,7 +111781,7 @@ dik bKe bOP bOP -bOP +hEt bKe bSS soe @@ -113082,7 +113068,7 @@ leM kId qqj djR -oub +bUe bUi hzl bWT @@ -113595,7 +113581,7 @@ ujJ duS owC qqj -hEt +ujJ bSV bUh mPh @@ -114110,7 +114096,7 @@ dLU agH wVR tIN -bST +bUe kwI hzl bWT diff --git a/_maps/map_files/RadStation/RadStation.dmm b/_maps/map_files/RadStation/RadStation.dmm index 3edc695f1ca9b..2c6cbec8a9542 100644 --- a/_maps/map_files/RadStation/RadStation.dmm +++ b/_maps/map_files/RadStation/RadStation.dmm @@ -453,9 +453,7 @@ /turf/open/floor/iron, /area/hallway/primary/fore) "agS" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -494,9 +492,7 @@ /area/ai_monitored/turret_protected/ai) "aic" = ( /obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/item/clothing/glasses/welding, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) @@ -1159,9 +1155,7 @@ /obj/item/radio/intercom{ pixel_y = -35 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/recharge_station{ name = "EPS recharging station" }, @@ -1831,8 +1825,7 @@ dir = 2 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/guideline/guideline_in/darkblue{ dir = 4 @@ -2141,7 +2134,6 @@ dir = 1 }, /obj/machinery/camera/autoname{ - dir = 2; view_range = 12 }, /obj/machinery/status_display/evac{ @@ -2747,7 +2739,6 @@ broadcasting = 1; canhear_range = 6; dir = 8; - listening = 1; name = "Station Intercom (Court)" }, /obj/item/gavelhammer{ @@ -3060,9 +3051,7 @@ /turf/open/floor/iron, /area/science/xenobiology) "aXX" = ( -/obj/structure/chair/wood/normal{ - dir = 2 - }, +/obj/structure/chair/wood/normal, /turf/open/floor/wood, /area/crew_quarters/theatre) "aYr" = ( @@ -3381,8 +3370,7 @@ /obj/item/toy/figure/captain{ icon_state = "nuketoy"; name = "Toy Nuke"; - toysay = "What the fuck did you do?"; - toysound = 'sound/machines/click.ogg' + toysay = "What the fuck did you do?" }, /turf/open/floor/plating/airless, /area/science/test_area) @@ -3683,7 +3671,6 @@ dir = 1 }, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","engine") }, /turf/open/floor/iron/tech, @@ -3855,7 +3842,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -4298,8 +4284,7 @@ dir = 5 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/sorting/mail{ name = "Security" @@ -4667,9 +4652,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/cable{ icon_state = "4-8" }, @@ -4701,7 +4684,6 @@ /obj/structure/closet/secure_closet/freezer/meat, /obj/effect/turf_decal/bot, /obj/machinery/airalarm{ - dir = 2; pixel_y = 28 }, /turf/open/floor/iron/freezer, @@ -4752,8 +4734,7 @@ /area/medical/sleeper) "bCx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/bot, /obj/machinery/light{ @@ -5481,7 +5462,6 @@ dir = 8 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -5740,7 +5720,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -6087,7 +6066,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -6228,7 +6206,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -6259,7 +6236,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -6271,8 +6247,7 @@ /area/crew_quarters/heads/hos) "ccv" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/guideline/guideline_in/darkblue{ dir = 4 @@ -7135,7 +7110,6 @@ "coY" = ( /obj/structure/table, /obj/machinery/door/window/eastright{ - dir = 4; icon_state = "left"; name = "Research and Development Desk"; req_one_access_txt = "7;29" @@ -7541,8 +7515,7 @@ /area/engine/atmos) "cvf" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 2 @@ -7904,7 +7877,6 @@ dir = 1 }, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","medbay"); view_range = 10 }, @@ -8041,9 +8013,7 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/obj/machinery/nuclearbomb/selfdestruct{ - base_icon_state = null - }, +/obj/machinery/nuclearbomb/selfdestruct, /turf/open/floor/circuit/green{ luminosity = 2 }, @@ -8615,7 +8585,6 @@ }, /obj/effect/turf_decal/guideline/guideline_edge_alt/blue, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 4 }, /turf/open/floor/iron/white/side{ @@ -9202,15 +9171,11 @@ /turf/open/floor/iron/dark, /area/hallway/primary/central) "cWP" = ( -/obj/structure/chair/wood/normal{ - dir = 2 - }, +/obj/structure/chair/wood/normal, /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, @@ -9569,9 +9534,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/hallway/primary/central) "dcB" = ( /obj/machinery/ai_slipper{ @@ -10256,8 +10219,7 @@ /area/quartermaster/storage) "dmU" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/bot, @@ -10560,9 +10522,7 @@ pixel_x = -1; pixel_y = 5 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/camera/autoname{ c_tag = "Starbird Security Checkpoint"; dir = 1 @@ -10981,7 +10941,6 @@ pixel_y = -32 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E"; dir = 1 }, @@ -11084,9 +11043,7 @@ dir = 8 }, /obj/effect/turf_decal/guideline/guideline_edge/red, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, @@ -11201,8 +11158,7 @@ /area/engine/atmos) "dBX" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 2 @@ -11581,7 +11537,6 @@ dir = 6 }, /obj/machinery/airalarm{ - dir = 2; pixel_y = 28 }, /obj/machinery/chem_dispenser/mutagensaltpetersmall, @@ -11804,7 +11759,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -12110,9 +12064,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/science/mixing/chamber) "dNE" = ( /obj/effect/landmark/start/janitor, @@ -12278,9 +12230,7 @@ /turf/open/floor/engine, /area/science/xenobiology) "dQf" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -12521,7 +12471,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -12586,7 +12535,6 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/components/binary/pump{ - dir = 2; name = "Atmos to Loop" }, /obj/effect/turf_decal/delivery, @@ -13468,7 +13416,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -13534,8 +13481,7 @@ "elG" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ alpha = 180; - color = "#DE3A3A"; - dir = 2 + color = "#DE3A3A" }, /obj/structure/cable/yellow{ icon_state = "1-8" @@ -13887,9 +13833,7 @@ /turf/open/floor/iron, /area/maintenance/starboard/aft) "ert" = ( -/obj/machinery/power/emitter/welded{ - dir = 2 - }, +/obj/machinery/power/emitter/welded, /obj/structure/cable/yellow{ icon_state = "0-4" }, @@ -14411,7 +14355,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -15270,8 +15213,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -15307,9 +15249,7 @@ dir = 1; network = list("ss13","security") }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/item/radio/intercom{ frequency = 1423; name = "Interrogation Intercom"; @@ -15667,7 +15607,6 @@ }, /obj/effect/turf_decal/guideline/guideline_edge_alt/blue, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 4 }, /turf/open/floor/iron/white/side{ @@ -15697,9 +15636,7 @@ "eTm" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /turf/open/floor/iron, /area/engine/atmos) "eTn" = ( @@ -15986,7 +15923,6 @@ }, /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/camera/autoname{ - c_tag = null; dir = 8; network = list("ss13","medbay"); view_range = 8 @@ -16705,9 +16641,7 @@ /area/maintenance/port/aft) "fid" = ( /obj/effect/turf_decal/siding/wideplating/dark, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, @@ -17391,7 +17325,6 @@ dir = 8 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -17414,7 +17347,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -17767,9 +17699,7 @@ pixel_x = 1; pixel_y = -36 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/chair/fancy/sofa/old/right{ dir = 1 }, @@ -17896,9 +17826,7 @@ /turf/open/floor/wood, /area/security/courtroom) "fzv" = ( -/obj/machinery/computer/cloning{ - dir = 2 - }, +/obj/machinery/computer/cloning, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/medical/genetics/cloning) @@ -18074,9 +18002,7 @@ dir = 1 }, /obj/effect/turf_decal/siding/wideplating/dark, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/hallway/primary/central) "fCz" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -18594,7 +18520,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -18613,15 +18538,11 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /turf/open/floor/plating, /area/security/courtroom) "fLQ" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/science/lobby) @@ -19590,9 +19511,7 @@ layer = 3.00001; pixel_y = 1 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/extinguisher_cabinet{ pixel_y = -33 }, @@ -19888,9 +19807,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/hallway/primary/central) "geq" = ( /obj/machinery/meter, @@ -20179,9 +20096,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -33 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /turf/open/floor/iron/white/side{ dir = 1 }, @@ -20421,8 +20336,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -21147,8 +21061,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/guideline/guideline_in/darkblue{ dir = 4 @@ -21553,8 +21466,7 @@ location = "2-Sec" }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -21814,7 +21726,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -21992,7 +21903,6 @@ pixel_y = 1 }, /obj/machinery/airalarm{ - dir = 2; pixel_y = 28 }, /turf/open/floor/iron/white, @@ -22139,8 +22049,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/guideline/guideline_in/neutral{ - alpha = 255; - dir = 2 + alpha = 255 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -22288,7 +22197,6 @@ pixel_y = 29 }, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","rd") }, /turf/open/floor/iron/dark, @@ -22526,9 +22434,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /turf/open/floor/engine, /area/science/explab) "gRN" = ( @@ -22943,7 +22849,6 @@ dir = 1 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -23021,9 +22926,7 @@ /turf/open/floor/iron/white, /area/science/research) "gYh" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23745,11 +23648,8 @@ /obj/effect/turf_decal/guideline/guideline_edge_alt/blue{ dir = 8 }, -/obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9" - }, +/obj/effect/turf_decal/guideline/guideline_tri/blue, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","medbay"); view_range = 10 }, @@ -23946,7 +23846,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -24180,9 +24079,7 @@ /turf/open/floor/iron/stairs/right, /area/hallway/primary/central) "hsL" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /turf/open/floor/iron, /area/hallway/primary/central) "hsU" = ( @@ -25383,9 +25280,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /turf/open/floor/plating, /area/crew_quarters/heads/chief) "hNf" = ( @@ -25711,7 +25606,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -25813,9 +25707,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/camera/autoname{ - dir = 2 - }, +/obj/machinery/camera/autoname, /turf/open/floor/iron/dark, /area/storage/primary) "hTN" = ( @@ -27875,8 +27767,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -28047,9 +27938,7 @@ "iJN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/components/trinary/filter{ - flipped = 0 - }, +/obj/machinery/atmospherics/components/trinary/filter, /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/engine/atmospherics_engine) @@ -28237,9 +28126,7 @@ /turf/open/floor/iron/dark, /area/security/courtroom) "iNu" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, @@ -28757,9 +28644,7 @@ alpha = 180; dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -29471,8 +29356,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -30333,8 +30217,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -30408,9 +30291,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/hallway/primary/central) "jwG" = ( /obj/effect/turf_decal/guideline/guideline_in/neutral{ @@ -30510,8 +30391,6 @@ pixel_y = -2 }, /obj/machinery/door/window/northright{ - dir = 1; - icon_state = "right"; layer = 3.1; name = "Jetpack Storage"; req_access_txt = "19" @@ -30735,9 +30614,7 @@ /obj/structure/reagent_dispensers/peppertank{ pixel_y = -30 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/button/door/incinerator_vent_toxmix{ id = "tox_ESD"; name = "Emergency space door"; @@ -31004,7 +30881,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -31176,9 +31052,7 @@ pixel_y = 5 }, /obj/structure/table/wood, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-2" }, @@ -32083,7 +31957,6 @@ "jXw" = ( /obj/structure/bed/roller, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 8 }, /turf/open/floor/iron/white/side{ @@ -32331,8 +32204,7 @@ /area/science/robotics/mechbay) "kaQ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /turf/open/floor/iron, /area/engine/storage) @@ -32416,7 +32288,6 @@ }, /obj/machinery/firealarm/directional/north, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","engine") }, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -32636,7 +32507,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -32834,9 +32704,7 @@ /turf/open/floor/iron/dark, /area/engine/atmos) "kjs" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/stripes/line{ @@ -33083,7 +32951,6 @@ "kmq" = ( /obj/effect/turf_decal/box/white, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 2; external_pressure_bound = 120; name = "server vent" }, @@ -33411,7 +33278,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -34093,9 +33959,7 @@ /area/ai_monitored/turret_protected/ai_upload) "kDX" = ( /obj/effect/landmark/start/randommaint/magician, -/obj/structure/chair/wood/normal{ - dir = 2 - }, +/obj/structure/chair/wood/normal, /turf/open/floor/wood, /area/crew_quarters/theatre) "kEh" = ( @@ -34140,9 +34004,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -34261,9 +34123,7 @@ dir = 1 }, /obj/effect/turf_decal/siding/wideplating/dark, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/hallway/primary/central) "kIg" = ( /obj/item/soap/nanotrasen, @@ -34627,7 +34487,6 @@ /area/space) "kOt" = ( /obj/docking_port/stationary{ - dir = 1; dwidth = 12; height = 69; id = "whiteship_home"; @@ -34807,8 +34666,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -35501,9 +35359,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -35584,8 +35440,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/guideline/guideline_in/darkblue{ dir = 4 @@ -35696,9 +35551,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -36439,9 +36292,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /turf/open/floor/wood, /area/security/courtroom) @@ -36791,10 +36642,6 @@ /turf/open/floor/iron, /area/medical/apothecary) "lxd" = ( -/obj/machinery/camera/autoname{ - dir = 2; - network = list("ss13","rd") - }, /obj/machinery/requests_console{ department = "Science"; departmentType = 2; @@ -36802,6 +36649,10 @@ pixel_y = 30; receive_ore_updates = 1 }, +/obj/machinery/camera/autoname{ + dir = 2; + network = list("ss13","rd") + }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37099,9 +36950,7 @@ /turf/open/floor/iron/dark, /area/engine/atmos) "lBL" = ( -/obj/effect/turf_decal/tile/dark_green{ - dir = 2 - }, +/obj/effect/turf_decal/tile/dark_green, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/reagent_dispensers/cooking_oil, /turf/open/floor/iron, @@ -37198,9 +37047,7 @@ /obj/structure/table/reinforced, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high/plus, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/camera/autoname{ dir = 1; network = list("ss13","engine") @@ -37263,7 +37110,6 @@ id = "chapelgun" }, /obj/machinery/door/window{ - dir = 2; name = "Mass Driver"; req_access_txt = "22" }, @@ -37865,7 +37711,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E"; dir = 1 }, @@ -38583,12 +38428,10 @@ "mbI" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ - layer = 3; pixel_x = -8; pixel_y = 15 }, /obj/item/storage/secure/briefcase{ - layer = 3; pixel_x = 2; pixel_y = 8 }, @@ -38631,7 +38474,6 @@ dir = 4 }, /obj/machinery/door/airlock/virology/glass{ - id_tag = null; name = "Virology Ward"; req_access_txt = "39" }, @@ -39900,6 +39742,9 @@ pixel_x = 26; pixel_y = -1 }, +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, /turf/open/floor/iron/freezer, /area/crew_quarters/kitchen/coldroom) "mwM" = ( @@ -41193,7 +41038,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -41291,19 +41135,6 @@ "mRV" = ( /turf/closed/wall/mineral/plastitanium, /area/security/brig/medbay) -"mSi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/sign/warning/securearea{ - pixel_y = 30 - }, -/obj/machinery/camera/autoname{ - dir = 2; - network = list("ss13","engine") - }, -/turf/open/floor/iron/dark, -/area/engine/engine_room) "mSo" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -41449,7 +41280,6 @@ icon_state = "2-4" }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -41493,6 +41323,16 @@ /obj/machinery/light_switch{ pixel_x = 21 }, +/obj/item/food/dough{ + pixel_y = 1 + }, +/obj/item/food/dough{ + pixel_x = -4 + }, +/obj/item/kitchen/rollingpin{ + pixel_x = 3; + pixel_y = 5 + }, /turf/open/floor/iron/white, /area/crew_quarters/kitchen) "mVA" = ( @@ -41573,7 +41413,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E"; dir = 1 }, @@ -41763,7 +41602,6 @@ dir = 1 }, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 4 }, /obj/effect/turf_decal/guideline/guideline_edge_alt/blue, @@ -42101,9 +41939,7 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/guideline/guideline_in/blue{ - dir = 2 - }, +/obj/effect/turf_decal/guideline/guideline_in/blue, /obj/machinery/light_switch{ pixel_x = 21; pixel_y = -21 @@ -43183,8 +43019,7 @@ "nss" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ alpha = 180; - color = "#DE3A3A"; - dir = 2 + color = "#DE3A3A" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -43978,7 +43813,6 @@ /area/hallway/primary/fore) "nDB" = ( /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /obj/effect/turf_decal/tile/dark_green/half/contrasted{ @@ -44735,7 +44569,7 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "nQr" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 8 }, /obj/effect/turf_decal/siding/wood{ @@ -45324,8 +45158,7 @@ dir = 2 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/guideline/guideline_in/darkblue{ dir = 4 @@ -46487,9 +46320,6 @@ name = "Security Viewing Hall" }) "ovc" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo" - }, /obj/machinery/light{ dir = 8 }, @@ -46497,6 +46327,7 @@ dir = 4 }, /obj/effect/turf_decal/bot, +/obj/machinery/deepfryer, /turf/open/floor/iron/white, /area/crew_quarters/kitchen) "ovj" = ( @@ -46679,9 +46510,7 @@ /area/medical/surgery) "ozf" = ( /obj/effect/turf_decal/tile/neutral/fourcorners/contrasted, -/obj/effect/turf_decal/numbers/two_nine{ - dir = 2 - }, +/obj/effect/turf_decal/numbers/two_nine, /obj/effect/turf_decal/box, /turf/open/floor/iron, /area/maintenance/port/aft) @@ -47584,9 +47413,7 @@ /obj/effect/turf_decal/guideline/guideline_half_edge/blue{ dir = 10 }, -/obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9" - }, +/obj/effect/turf_decal/guideline/guideline_tri/blue, /obj/effect/turf_decal/guideline/guideline_edge_alt/blue{ dir = 8 }, @@ -47651,9 +47478,7 @@ }, /area/quartermaster/exploration_prep) "oOw" = ( -/obj/machinery/power/emitter/welded{ - dir = 2 - }, +/obj/machinery/power/emitter/welded, /obj/structure/cable/yellow, /obj/structure/cable/yellow{ icon_state = "1-4" @@ -48102,23 +47927,25 @@ /turf/open/floor/plating, /area/engine/break_room) "oVm" = ( -/obj/structure/table, -/obj/item/food/dough{ - pixel_x = -4 - }, -/obj/item/food/dough{ - pixel_y = 1 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = 3; - pixel_y = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/machinery/light{ dir = 4 }, +/obj/structure/table, +/obj/item/storage/box/ingredients/wildcard{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/storage/box/ingredients/fruity{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/box/ingredients/vegetarian{ + pixel_x = -1; + pixel_y = 4 + }, /turf/open/floor/iron/white, /area/crew_quarters/kitchen) "oVx" = ( @@ -48954,8 +48781,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /turf/open/floor/iron/dark/corner{ dir = 1 @@ -48997,8 +48823,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -49146,9 +48971,7 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/guideline/guideline_in/blue{ - dir = 2 - }, +/obj/effect/turf_decal/guideline/guideline_in/blue, /obj/machinery/light{ dir = 8 }, @@ -49469,9 +49292,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/extinguisher_cabinet{ pixel_x = -8; pixel_y = -30 @@ -49851,7 +49672,6 @@ /area/engine/atmos) "pxJ" = ( /obj/machinery/door/window/brigdoor/northleft{ - dir = 1; name = "Telecommunications"; req_access_txt = "49" }, @@ -49864,7 +49684,6 @@ /obj/effect/turf_decal/tile/red/fourcorners/contrasted, /mob/living/simple_animal/kalo{ desc = "The Perma brig's cute grass snake."; - icon = 'icons/mob/animal.dmi'; icon_dead = "snake_dead"; icon_living = "snake"; icon_state = "snake"; @@ -49911,9 +49730,7 @@ "pzk" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/yellow, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -50008,9 +49825,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/camera/autoname{ dir = 1; pixel_x = 2 @@ -50107,9 +49922,7 @@ /turf/open/floor/iron/tech, /area/engine/engine_room) "pCi" = ( -/obj/effect/turf_decal/tile/dark_green{ - dir = 2 - }, +/obj/effect/turf_decal/tile/dark_green, /turf/open/floor/iron, /area/maintenance/central) "pCu" = ( @@ -50284,9 +50097,7 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /turf/open/floor/plating, /area/crew_quarters/heads/chief) "pEZ" = ( @@ -50473,7 +50284,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/door/window/southleft{ - dir = 2; name = "Engineering Delivery"; req_access_txt = "24" }, @@ -50618,7 +50428,6 @@ /area/maintenance/department/medical) "pJP" = ( /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 8 }, /obj/structure/cable/yellow{ @@ -50777,7 +50586,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -51482,7 +51290,6 @@ }, /obj/machinery/recharge_station, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","rd") }, /obj/effect/landmark/start/cyborg, @@ -51608,8 +51415,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/turf_decal/guideline/guideline_in/darkblue{ dir = 4 @@ -51652,7 +51458,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /obj/machinery/navbeacon{ @@ -51912,9 +51717,7 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/guideline/guideline_in/blue{ - dir = 2 - }, +/obj/effect/turf_decal/guideline/guideline_in/blue, /turf/open/floor/iron/white, /area/medical/medbay/lobby) "qcz" = ( @@ -51926,8 +51729,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -51951,8 +51753,7 @@ /area/hallway/secondary/exit/departure_lounge) "qcH" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/bot, @@ -52021,7 +51822,6 @@ dir = 1 }, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 4 }, /obj/effect/turf_decal/guideline/guideline_edge_alt/blue, @@ -52796,8 +52596,7 @@ dir = 2 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/guideline/guideline_half_in/darkblue{ @@ -52933,9 +52732,7 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/guideline/guideline_in/blue{ - dir = 2 - }, +/obj/effect/turf_decal/guideline/guideline_in/blue, /turf/open/floor/iron/white, /area/medical/medbay/lobby) "quK" = ( @@ -53040,7 +52837,6 @@ dir = 10 }, /obj/machinery/camera/autoname{ - dir = 2; view_range = 12 }, /obj/effect/turf_decal/siding/wideplating/dark/corner{ @@ -53376,7 +53172,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -53418,8 +53213,7 @@ /area/science/mixing) "qCQ" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/landmark/start/cyborg, /turf/open/floor/iron, @@ -53519,7 +53313,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -53621,7 +53414,6 @@ "qGM" = ( /obj/effect/turf_decal/tile/green/fourcorners/contrasted, /obj/machinery/door/airlock/virology/glass{ - id_tag = null; name = "Virology Ward"; req_access_txt = "39" }, @@ -54172,8 +53964,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, @@ -54366,7 +54157,6 @@ dir = 5 }, /obj/effect/turf_decal/guideline/guideline_tri/_corner/blue{ - color = "#52B4E9"; dir = 1 }, /turf/open/floor/iron/white, @@ -54657,7 +54447,6 @@ icon_state = "4-8" }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -54706,7 +54495,6 @@ /area/engine/engine_room) "qYz" = ( /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","rd") }, /obj/structure/disposalpipe/segment{ @@ -54796,7 +54584,6 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical{ - id_tag = null; name = "Medbay"; req_one_access_txt = "5" }, @@ -54912,7 +54699,6 @@ dir = 8 }, /obj/effect/turf_decal/guideline/guideline_tri/_corner/blue{ - color = "#52B4E9"; dir = 8 }, /turf/open/floor/iron/white, @@ -55068,9 +54854,7 @@ /turf/open/floor/iron/white, /area/medical/sleeper) "res" = ( -/obj/machinery/computer/operating{ - dir = 2 - }, +/obj/machinery/computer/operating, /turf/open/floor/iron/white, /area/science/robotics) "rev" = ( @@ -55798,9 +55582,7 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/dark_green{ - dir = 2 - }, +/obj/effect/turf_decal/tile/dark_green, /turf/open/floor/iron, /area/hallway/secondary/service) "rqR" = ( @@ -56467,17 +56249,6 @@ /obj/structure/table/wood/fancy, /turf/open/floor/carpet/grimy, /area/chapel/office) -"rCc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, -/area/hallway/primary/central) "rCn" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -56523,7 +56294,6 @@ dir = 4 }, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","security") }, /obj/machinery/power/apc/auto_name/east, @@ -56817,9 +56587,7 @@ /obj/effect/turf_decal/tile/dark_blue/fourcorners/contrasted{ alpha = 180 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/extinguisher_cabinet{ pixel_x = 27; pixel_y = -1 @@ -56828,8 +56596,7 @@ /area/ai_monitored/turret_protected/aisat/foyer) "rHP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -56986,9 +56753,7 @@ /turf/open/floor/carpet/blue, /area/medical/exam_room) "rKH" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/computer/med_data{ dir = 1 }, @@ -57139,8 +56904,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -57814,7 +57578,6 @@ /area/maintenance/port/aft) "rZQ" = ( /obj/machinery/camera/autoname{ - c_tag = null; dir = 4; network = list("ss13","medbay"); view_range = 8 @@ -59557,8 +59320,7 @@ dir = 8 }, /obj/machinery/camera/preset/toxins{ - dir = 4; - network = list("rd","toxins") + dir = 4 }, /turf/open/floor/plating/airless, /area/science/test_area) @@ -59793,8 +59555,7 @@ "sIW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -60379,8 +60140,7 @@ /obj/structure/chair/office, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ alpha = 180; - color = "#DE3A3A"; - dir = 2 + color = "#DE3A3A" }, /obj/machinery/newscaster{ pixel_x = 32; @@ -60945,9 +60705,7 @@ /turf/closed/wall/r_wall, /area/security/warden) "taL" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/table/reinforced, /obj/item/stack/sheet/iron/fifty{ pixel_x = -2; @@ -61118,7 +60876,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -61234,9 +60991,7 @@ pixel_y = -33 }, /obj/machinery/disposal/bin, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, /obj/effect/turf_decal/bot, /obj/structure/disposalpipe/trunk{ @@ -61822,7 +61577,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -62043,9 +61797,7 @@ }, /area/hallway/secondary/exit/departure_lounge) "tpM" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, @@ -62670,9 +62422,7 @@ /area/medical/medbay/lobby) "tyE" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -63298,7 +63048,6 @@ "tIJ" = ( /obj/structure/table/wood, /obj/item/toy/plush/moth/luna{ - layer = 3; pixel_x = -18; pixel_y = 16 }, @@ -63330,8 +63079,7 @@ "tIT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 1 @@ -63958,9 +63706,7 @@ /area/engine/atmos) "tTZ" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -64283,9 +64029,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/guideline/guideline_edge/purple, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /turf/open/floor/iron/white/side{ dir = 1 }, @@ -65179,9 +64923,7 @@ /area/hallway/primary/port) "umA" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /turf/open/floor/plating, /area/crew_quarters/dorms) "umL" = ( @@ -65253,9 +64995,7 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, -/obj/structure/curtain/directional{ - dir = 2 - }, +/obj/structure/curtain/directional, /turf/open/floor/plating, /area/security/courtroom) "uog" = ( @@ -65379,9 +65119,7 @@ /area/crew_quarters/dorms) "upL" = ( /obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/item/aicard, /turf/open/floor/iron/dark, /area/ai_monitored/turret_protected/aisat_interior) @@ -65704,7 +65442,6 @@ "uvp" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/camera/autoname{ - c_tag = null; dir = 8; network = list("ss13","medbay"); view_range = 8 @@ -65826,7 +65563,6 @@ /area/maintenance/department/medical/morgue) "uxt" = ( /obj/machinery/camera/autoname{ - c_tag = null; dir = 8; network = list("ss13","medbay") }, @@ -66162,9 +65898,7 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 4 }, -/obj/machinery/camera/autoname{ - dir = 2 - }, +/obj/machinery/camera/autoname, /obj/vehicle/ridden/janicart, /obj/item/key/janitor, /turf/open/floor/iron, @@ -66306,7 +66040,6 @@ dir = 8 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /turf/open/floor/iron, @@ -67307,9 +67040,7 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/dark_green{ - dir = 2 - }, +/obj/effect/turf_decal/tile/dark_green, /turf/open/floor/iron, /area/maintenance/central) "uWe" = ( @@ -67414,8 +67145,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/guideline/guideline_in/neutral{ - alpha = 255; - dir = 2 + alpha = 255 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -67475,15 +67205,12 @@ /turf/open/floor/plating/rust, /area/maintenance/starboard/aft) "uXH" = ( -/obj/machinery/computer/operating{ - dir = 2 - }, +/obj/machinery/computer/operating, /obj/effect/turf_decal/bot, /obj/machinery/newscaster{ pixel_y = 34 }, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","medbay") }, /turf/open/floor/iron, @@ -67674,7 +67401,6 @@ "vat" = ( /obj/structure/bookcase/random/fiction, /obj/machinery/airalarm{ - dir = 2; pixel_y = 28 }, /turf/open/floor/wood, @@ -67860,9 +67586,7 @@ /turf/open/floor/carpet/purple, /area/chapel/main) "vdz" = ( -/obj/effect/turf_decal/numbers/two_nine{ - dir = 2 - }, +/obj/effect/turf_decal/numbers/two_nine, /turf/open/floor/iron/grid/steel, /area/medical/virology) "vdH" = ( @@ -68188,22 +67912,10 @@ /turf/open/floor/iron/white, /area/medical/medbay/central) "vjD" = ( -/obj/structure/table, -/obj/item/storage/box/ingredients/wildcard{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/storage/box/ingredients/fruity{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/box/ingredients/vegetarian{ - pixel_x = -1; - pixel_y = 4 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/griddle, /turf/open/floor/iron/white, /area/crew_quarters/kitchen) "vjG" = ( @@ -68299,7 +68011,7 @@ /obj/machinery/camera/autoname{ dir = 4 }, -/obj/machinery/computer/arcade{ +/obj/effect/spawner/randomarcade{ dir = 4 }, /turf/open/floor/carpet, @@ -68409,7 +68121,6 @@ /area/engine/atmospherics_engine) "vma" = ( /obj/machinery/camera/autoname{ - c_tag = null; dir = 4; network = list("ss13","medbay") }, @@ -68486,9 +68197,7 @@ /area/maintenance/department/medical) "vnI" = ( /obj/effect/turf_decal/bot, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/effect/turf_decal/tile/blue/fourcorners/contrasted, /obj/structure/cable/yellow, /obj/item/kirbyplants/random, @@ -68547,8 +68256,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/guideline/guideline_in/neutral{ - alpha = 255; - dir = 2 + alpha = 255 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -68631,9 +68339,7 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/guideline/guideline_in/blue{ - dir = 2 - }, +/obj/effect/turf_decal/guideline/guideline_in/blue, /turf/open/floor/iron/white, /area/medical/medbay/lobby) "vqq" = ( @@ -68651,9 +68357,7 @@ /obj/effect/turf_decal/tile/dark_blue/fourcorners/contrasted{ alpha = 180 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/structure/extinguisher_cabinet{ pixel_x = -26; pixel_y = -1 @@ -68860,7 +68564,6 @@ }, /obj/machinery/door/window/northright{ dir = 2; - icon_state = "right"; name = "Engi Desk"; req_one_access_txt = "32;19" }, @@ -68912,11 +68615,9 @@ dir = 1 }, /obj/machinery/camera/autoname{ - dir = 2; network = list("ss13","medbay") }, /obj/machinery/airalarm{ - dir = 2; pixel_y = 28 }, /obj/structure/cable/yellow{ @@ -69111,8 +68812,8 @@ /turf/open/floor/iron/dark, /area/science/misc_lab/range) "vzi" = ( -/obj/machinery/deepfryer, -/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/item/knife/kitchen, /turf/open/floor/iron/white, /area/crew_quarters/kitchen) "vzm" = ( @@ -69168,7 +68869,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -69295,7 +68995,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/guideline/guideline_tri/blue{ - color = "#52B4E9"; dir = 1 }, /obj/structure/cable/yellow{ @@ -69797,9 +69496,7 @@ /area/construction/mining/aux_base) "vJG" = ( /obj/structure/lattice/catwalk, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/machinery/porta_turret/ai{ dir = 4 }, @@ -69857,8 +69554,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 @@ -70631,14 +70327,6 @@ /obj/effect/turf_decal/tile/dark_green/fourcorners/contrasted, /mob/living/simple_animal/hostile/retaliate/frog{ attacked_sound = 'sound/effects/huuu.ogg'; - density = 0; - desc = "It seems a little sad."; - head_icon = 'icons/mob/pets_held.dmi'; - held_state = ""; - icon = 'icons/mob/animal.dmi'; - icon_dead = "frog_dead"; - icon_living = "frog"; - icon_state = "frog"; name = "Larry"; pixel_y = 12; stepped_sound = null @@ -70932,9 +70620,7 @@ /turf/open/floor/iron, /area/maintenance/department/medical) "wcw" = ( -/obj/machinery/power/emitter/welded{ - dir = 2 - }, +/obj/machinery/power/emitter/welded, /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -71205,9 +70891,7 @@ /turf/open/floor/plating, /area/maintenance/port/central) "wgp" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/machinery/light{ dir = 4 }, @@ -71432,7 +71116,6 @@ }, /obj/machinery/firealarm/directional/west, /obj/machinery/camera/autoname{ - c_tag = null; dir = 4; network = list("ss13","medbay"); view_range = 8 @@ -71936,7 +71619,6 @@ name = "Toxins Storage"; pixel_x = -1; pixel_y = -29; - req_access = null; req_access_txt = "49" }, /obj/structure/cable/yellow{ @@ -72049,9 +71731,7 @@ /obj/structure/chair/fancy/bench/pew/right{ dir = 8 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /turf/open/floor/iron/dark, /area/chapel/main) "wyu" = ( @@ -72099,9 +71779,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark/side{ - dir = 2 - }, +/turf/open/floor/iron/dark/side, /area/hallway/primary/central) "wzs" = ( /obj/machinery/door/firedoor, @@ -73151,7 +72829,6 @@ dir = 4 }, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E" }, /obj/structure/cable/yellow{ @@ -73261,9 +72938,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/chair/wood/normal{ - dir = 2 - }, +/obj/structure/chair/wood/normal, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -73861,9 +73536,7 @@ /turf/open/floor/iron, /area/hallway/primary/starboard) "xcR" = ( -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, @@ -74000,7 +73673,6 @@ broadcasting = 1; canhear_range = 6; dir = 8; - listening = 1; name = "Station Intercom (Court)" }, /turf/open/floor/wood, @@ -74286,7 +73958,6 @@ broadcasting = 1; canhear_range = 6; dir = 8; - listening = 1; name = "Station Intercom (Court)" }, /obj/machinery/firealarm/directional/west, @@ -74502,8 +74173,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/guideline/guideline_in/neutral{ - alpha = 255; - dir = 2 + alpha = 255 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -75043,7 +74713,6 @@ /obj/machinery/light/floor{ brightness = 15; bulb_colour = "#FFE4CE"; - bulb_emergency_brightness_mul = 0.25; bulb_vacuum_brightness = 15; nightshift_brightness = 10; nightshift_light_color = "#E6EBFF" @@ -75249,15 +74918,12 @@ /area/maintenance/port/aft) "xwZ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/closet/secure_closet/engineering_electrical, /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/structure/cable/yellow, /turf/open/floor/iron, /area/engine/storage) @@ -75412,9 +75078,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/machinery/light{ - dir = 2 - }, +/obj/machinery/light, /obj/effect/decal/cleanable/shreds, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, @@ -76053,8 +75717,7 @@ /area/medical/chemistry) "xII" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - alpha = 180; - dir = 2 + alpha = 180 }, /obj/structure/disposalpipe/segment{ dir = 2 @@ -76783,9 +76446,7 @@ /turf/open/floor/iron, /area/science/lobby) "xXE" = ( -/obj/machinery/power/apc/auto_name/east{ - pixel_x = 24 - }, +/obj/machinery/power/apc/auto_name/east, /obj/machinery/camera/autoname{ dir = 1 }, @@ -77586,7 +77247,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/guideline/guideline_in/green{ - alpha = 180; color = "#439C1E"; dir = 1 }, @@ -108641,7 +108301,7 @@ seT seT hdp hdp -rCc +xgv fWh vAx hVF @@ -109237,7 +108897,7 @@ oOn lbK poW mKJ -mSi +lnr rVX hvL pBG diff --git a/_maps/metastation.json b/_maps/metastation.json index c1be1376ca429..14ebf764f95f7 100644 --- a/_maps/metastation.json +++ b/_maps/metastation.json @@ -1,6 +1,6 @@ { "map_name": "MetaStation", - "map_link": "MetaStation", + "map_link": "metastation", "map_path": "map_files/MetaStation", "map_file": "MetaStation.dmm", "shuttles": { diff --git a/_maps/radstation.json b/_maps/radstation.json index 4f9737f7aa7f8..4ac2e8435d78b 100644 --- a/_maps/radstation.json +++ b/_maps/radstation.json @@ -1,6 +1,6 @@ { "map_name": "Rad Station", - "map_link": "RadStation", + "map_link": "radstation", "map_path": "map_files/RadStation", "map_file": "RadStation.dmm", "shuttles": { diff --git a/_maps/shuttles/emergency/emergency_funnypod.dmm b/_maps/shuttles/emergency/emergency_funnypod.dmm new file mode 100644 index 0000000000000..84e5505309e15 --- /dev/null +++ b/_maps/shuttles/emergency/emergency_funnypod.dmm @@ -0,0 +1,181 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"i" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"v" = ( +/obj/machinery/computer/emergency_shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"x" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"L" = ( +/obj/machinery/door/airlock/titanium{ + name = "Escape Pod Airlock" + }, +/obj/docking_port/mobile/emergency, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"R" = ( +/obj/structure/chair/fancy/shuttle{ + dir = 4 + }, +/obj/machinery/status_display/evac{ + pixel_y = -32 + }, +/obj/machinery/light/small, +/obj/item/storage/pod{ + pixel_y = 27; + pixel_x = 6 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"T" = ( +/obj/structure/chair/fancy/shuttle{ + dir = 4 + }, +/obj/item/storage/pod{ + pixel_y = 27; + pixel_x = 6 + }, +/obj/machinery/status_display/evac{ + pixel_y = -32 + }, +/obj/machinery/light/small, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) + +(1,1,1) = {" +x +L +x +"} +(2,1,1) = {" +a +T +a +"} +(3,1,1) = {" +a +T +a +"} +(4,1,1) = {" +a +T +a +"} +(5,1,1) = {" +a +T +a +"} +(6,1,1) = {" +a +T +a +"} +(7,1,1) = {" +a +T +a +"} +(8,1,1) = {" +a +T +a +"} +(9,1,1) = {" +a +T +a +"} +(10,1,1) = {" +a +T +a +"} +(11,1,1) = {" +a +T +a +"} +(12,1,1) = {" +a +R +a +"} +(13,1,1) = {" +a +T +a +"} +(14,1,1) = {" +a +R +a +"} +(15,1,1) = {" +a +T +a +"} +(16,1,1) = {" +a +T +a +"} +(17,1,1) = {" +a +T +a +"} +(18,1,1) = {" +a +T +a +"} +(19,1,1) = {" +a +T +a +"} +(20,1,1) = {" +a +R +a +"} +(21,1,1) = {" +a +T +a +"} +(22,1,1) = {" +a +T +a +"} +(23,1,1) = {" +a +T +a +"} +(24,1,1) = {" +a +v +a +"} +(25,1,1) = {" +a +i +a +"} diff --git a/_maps/shuttles/emergency/emergency_honkco.dmm b/_maps/shuttles/emergency/emergency_honkco.dmm new file mode 100644 index 0000000000000..ec44991eeb001 --- /dev/null +++ b/_maps/shuttles/emergency/emergency_honkco.dmm @@ -0,0 +1,737 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"am" = ( +/obj/structure/chair/stool/bar{ + dir = 1 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"aq" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#0d2dff" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"aD" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = 32 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"aL" = ( +/obj/item/grown/bananapeel, +/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"bB" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#ff0000" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "i"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "t"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = -8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"bQ" = ( +/obj/structure/chair/stool/bar{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"cH" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/shuttle/escape) +"dS" = ( +/obj/item/grown/bananapeel, +/obj/structure/chair/stool/bar, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"ep" = ( +/obj/machinery/computer/emergency_shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"gF" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"hz" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"hZ" = ( +/mob/living/simple_animal/hostile/retaliate/clown/mutant, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"ik" = ( +/obj/structure/sign/poster/contraband/clown{ + pixel_y = 32 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"iN" = ( +/obj/structure/chair/stool/bar, +/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"jb" = ( +/obj/item/grown/bananapeel, +/obj/structure/chair/stool/bar, +/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"kc" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"me" = ( +/obj/machinery/nuclearbomb/syndicate/bananium, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"nc" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#ff0000" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"nv" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#ff0000" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "s"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = 11 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"pH" = ( +/obj/machinery/door/airlock/bananium/glass, +/obj/docking_port/mobile/emergency{ + dir = 2 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"qt" = ( +/mob/living/simple_animal/hostile/retaliate/clown/banana, +/obj/structure/chair/stool/bar, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"sh" = ( +/obj/item/grown/bananapeel, +/obj/item/grown/bananapeel, +/mob/living/simple_animal/hostile/retaliate/clown/banana, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"tN" = ( +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"uo" = ( +/obj/item/grown/bananapeel, +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"uI" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/food/honkdae{ + pixel_x = 10 + }, +/obj/item/food/honkdae{ + pixel_x = 10 + }, +/obj/item/food/donkpocket/warm/honk{ + pixel_x = -5; + pixel_y = 13 + }, +/obj/item/food/donkpocket/warm/honk{ + pixel_x = -5; + pixel_y = 13 + }, +/obj/item/clothing/suit/space/hardsuit/clown{ + pixel_x = -12 + }, +/obj/item/clothing/mask/gas/clown_hat, +/obj/item/gun/magic/staff/honk, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"vO" = ( +/obj/item/grown/bananapeel, +/obj/structure/chair/stool/bar, +/obj/item/grown/bananapeel, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"vY" = ( +/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"xf" = ( +/obj/item/grown/bananapeel, +/obj/structure/chair/stool/bar, +/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob, +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"ye" = ( +/obj/item/grown/bananapeel, +/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"yH" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/structure/chair/stool/bar{ + dir = 1 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"zo" = ( +/obj/item/grown/bananapeel, +/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"zv" = ( +/obj/item/grown/bananapeel, +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/effect/decal/cleanable/crayon{ + icon_state = "c"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = 18 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "o"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "m"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "m"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = -16 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "a"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = -26 + }, +/obj/item/grown/bananapeel, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Am" = ( +/mob/living/simple_animal/hostile/retaliate/clown/fleshclown, +/obj/item/grown/bananapeel, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Ao" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/item/grown/bananapeel, +/obj/structure/chair/stool/bar, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"AH" = ( +/mob/living/simple_animal/hostile/retaliate/clown/clownhulk, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"AP" = ( +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"CN" = ( +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"DM" = ( +/obj/machinery/light/small, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/obj/structure/mecha_wreckage/honker, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Fq" = ( +/obj/item/grown/bananapeel, +/obj/effect/decal/cleanable/crayon{ + icon_state = "n"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "d"; + color = "#0d2dff"; + pixel_x = 17; + pixel_y = -17 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"FO" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#ff0000" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "y"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = 8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"FW" = ( +/obj/item/grown/bananapeel, +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#0d2dff" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Gz" = ( +/obj/item/grown/bananapeel, +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#ff0000" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Hj" = ( +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/obj/structure/mecha_wreckage/honker, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"HC" = ( +/obj/structure/statue/bananium/clown, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = 32 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"IC" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/structure/chair/stool/bar, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Jp" = ( +/obj/structure/statue/bananium/clown, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"KA" = ( +/obj/machinery/door/airlock/bananium/glass, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Mk" = ( +/obj/structure/chair/stool/bar{ + dir = 1 + }, +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"NJ" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Ok" = ( +/obj/structure/statue/bananium/clown, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = 32 + }, +/obj/item/clothing/mask/gas/clown_hat, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"OO" = ( +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/item/grown/bananapeel, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Pl" = ( +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/obj/item/grown/bananapeel, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"PX" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#ff0000" + }, +/mob/living/simple_animal/hostile/retaliate/clown, +/obj/effect/decal/cleanable/crayon{ + icon_state = "e"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = 29 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "c"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = 16 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "u"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "r"; + color = "#ff0000"; + pixel_x = 17; + pixel_y = -8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Qk" = ( +/turf/closed/wall/mineral/bananium, +/area/shuttle/escape) +"Ri" = ( +/obj/item/grown/bananapeel, +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#0d2dff" + }, +/mob/living/simple_animal/hostile/retaliate/clown/banana, +/obj/effect/decal/cleanable/crayon{ + icon_state = "line"; + color = "#0d2dff" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"SS" = ( +/turf/template_noop, +/area/space) +"To" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"XB" = ( +/obj/structure/chair/stool/bar{ + dir = 1 + }, +/mob/living/simple_animal/hostile/retaliate/clown/longface, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"XS" = ( +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Yc" = ( +/obj/item/grown/bananapeel, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) + +(1,1,1) = {" +SS +SS +To +To +To +To +To +To +To +SS +SS +"} +(2,1,1) = {" +SS +Qk +CN +CN +CN +CN +CN +CN +CN +Qk +SS +"} +(3,1,1) = {" +Qk +Qk +HC +Pl +Pl +Pl +Pl +Pl +Jp +Qk +Qk +"} +(4,1,1) = {" +Qk +Ok +uI +Yc +tN +AH +tN +Yc +uI +Hj +Qk +"} +(5,1,1) = {" +KA +tN +Gz +Gz +nv +PX +bB +FO +nc +bQ +Qk +"} +(6,1,1) = {" +Qk +aD +tN +xf +Yc +vO +Am +Mk +tN +bQ +Qk +"} +(7,1,1) = {" +KA +tN +hZ +Ao +Yc +jb +Yc +am +gF +bQ +Qk +"} +(8,1,1) = {" +Qk +aD +Yc +dS +OO +dS +sh +am +Yc +bQ +Qk +"} +(9,1,1) = {" +Qk +aD +gF +iN +tN +NJ +vY +am +Yc +bQ +Qk +"} +(10,1,1) = {" +Qk +aD +Yc +kc +Yc +qt +tN +XB +ye +bQ +Qk +"} +(11,1,1) = {" +Qk +aD +tN +kc +hZ +kc +gF +am +tN +bQ +Qk +"} +(12,1,1) = {" +Qk +aD +gF +IC +Yc +dS +Yc +yH +tN +bQ +Qk +"} +(13,1,1) = {" +pH +tN +zo +uo +zv +Fq +aL +XS +AH +bQ +Qk +"} +(14,1,1) = {" +Qk +ik +aq +Ri +FW +aq +FW +aq +aq +DM +Qk +"} +(15,1,1) = {" +Qk +HC +uI +AP +hz +AP +hz +AP +uI +Jp +Qk +"} +(16,1,1) = {" +Qk +Qk +HC +tN +tN +ep +me +tN +Jp +Qk +Qk +"} +(17,1,1) = {" +SS +Qk +cH +cH +cH +cH +cH +cH +cH +Qk +SS +"} diff --git a/_maps/shuttles/emergency/emergency_theatre.dmm b/_maps/shuttles/emergency/emergency_theatre.dmm new file mode 100644 index 0000000000000..3f3755ff8d4e6 --- /dev/null +++ b/_maps/shuttles/emergency/emergency_theatre.dmm @@ -0,0 +1,989 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"at" = ( +/obj/machinery/door/airlock/gold, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"bP" = ( +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"ct" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"eX" = ( +/obj/item/reagent_containers/glass/bottle/epinephrine{ + pixel_x = 6 + }, +/obj/item/reagent_containers/glass/bottle/charcoal{ + pixel_x = -3 + }, +/obj/item/reagent_containers/glass/bottle/epinephrine{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/reagent_containers/glass/bottle/charcoal{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/structure/table/wood/fancy/cyan, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"fI" = ( +/turf/template_noop, +/area/shuttle/escape) +"ga" = ( +/obj/structure/chair/fancy/corp{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"gh" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"gk" = ( +/obj/structure/closet/crate/internals, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"hG" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"jl" = ( +/obj/machinery/vending/autodrobe/all_access, +/turf/open/floor/wood, +/area/shuttle/escape) +"kg" = ( +/obj/machinery/recharge_station, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"kz" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood, +/area/shuttle/escape) +"lt" = ( +/obj/machinery/door/airlock/gold, +/obj/docking_port/mobile/emergency, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"ml" = ( +/obj/structure/table/wood/fancy/red, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/item/storage/fancy/cigarettes/cigars/havana, +/obj/item/storage/box/matches{ + pixel_y = 9 + }, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"mK" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/storage/box/matches{ + pixel_y = 7 + }, +/obj/item/storage/box/matches{ + pixel_y = 11 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"oH" = ( +/obj/structure/shuttle/engine/heater, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"oJ" = ( +/obj/machinery/computer/emergency_shuttle{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"pr" = ( +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"qn" = ( +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"rt" = ( +/obj/structure/chair/fancy/corp{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"ru" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 26 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"sV" = ( +/obj/structure/chair/fancy/corp{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"ux" = ( +/turf/open/floor/wood, +/area/shuttle/escape) +"vI" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 26 + }, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"wn" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"ww" = ( +/obj/machinery/stasis{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"xm" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"xR" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/optable, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"yx" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"yE" = ( +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"yG" = ( +/obj/structure/statue/sandstone/venus{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"zb" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/escape) +"AU" = ( +/obj/structure/table/wood/fancy/cyan, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/o2{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"Bb" = ( +/obj/item/storage/fancy/cigarettes/cigars/havana, +/obj/structure/table/wood/fancy/royalblue, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Ce" = ( +/obj/structure/curtain/bounty, +/turf/open/floor/wood, +/area/shuttle/escape) +"CG" = ( +/obj/structure/table/wood/fancy/red, +/obj/machinery/recharger, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"CZ" = ( +/obj/structure/table/wood/fancy/red, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/storage/lockbox/loyalty{ + pixel_y = 6; + pixel_x = 14 + }, +/obj/item/storage/box/zipties, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"DN" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Eq" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"EG" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/storage/box/matches, +/obj/item/storage/box/matches{ + pixel_y = 7 + }, +/obj/item/storage/box/matches{ + pixel_y = 11 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Gh" = ( +/obj/structure/chair/fancy/corp{ + dir = 1 + }, +/obj/structure/chair/fancy/corp{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Hb" = ( +/obj/machinery/door/airlock/gold, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Hk" = ( +/obj/machinery/shieldgen, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"HN" = ( +/obj/structure/table/wood/fancy/cyan, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"HP" = ( +/obj/machinery/vending/boozeomat, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"IK" = ( +/obj/item/scalpel{ + pixel_y = 12 + }, +/obj/item/circular_saw, +/obj/item/retractor{ + pixel_x = 4 + }, +/obj/item/hemostat{ + pixel_x = -4 + }, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/surgicaldrill, +/obj/item/cautery, +/obj/structure/table/wood/fancy/cyan, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"Jn" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Js" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 8 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 1 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 8 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 8 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 8 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"JG" = ( +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"JO" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 9; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 9; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/bottle/champagne{ + pixel_y = 11 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 4; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 4; + pixel_x = -6 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"LQ" = ( +/obj/structure/statue/sandstone/venus, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Nn" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/glasses/monocle, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"NH" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"OI" = ( +/obj/item/storage/fancy/cigarettes/cigars/havana, +/obj/structure/table/wood/fancy/royalblue, +/obj/item/storage/box/matches{ + pixel_x = -10; + pixel_y = 7 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Pk" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Escape Shuttle Infirmary" + }, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"PH" = ( +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"Rv" = ( +/obj/structure/shuttle/engine/propulsion, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"RK" = ( +/obj/structure/chair/fancy/corp{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Sk" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"SP" = ( +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Tx" = ( +/obj/structure/chair/fancy/corp{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"VZ" = ( +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/obj/machinery/light/floor{ + brightness = 15; + bulb_colour = "#FFE4CE"; + bulb_emergency_brightness_mul = 0.25; + bulb_vacuum_brightness = 15; + nightshift_brightness = 10; + nightshift_light_color = "#E6EBFF" + }, +/turf/open/floor/carpet/black, +/area/shuttle/escape) +"Xc" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"XP" = ( +/obj/structure/table/wood/fancy/cyan, +/obj/item/defibrillator/loaded, +/turf/open/floor/carpet/cyan, +/area/shuttle/escape) +"Yv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/escape) +"ZW" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit"; + req_access_txt = "19" + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) + +(1,1,1) = {" +fI +DN +DN +DN +DN +at +DN +lt +xm +xm +xm +xm +xm +Hb +DN +Hb +DN +fI +fI +"} +(2,1,1) = {" +DN +DN +Tx +Tx +Tx +SP +xm +qn +Js +EG +Nn +mK +Js +qn +Jn +qn +DN +DN +fI +"} +(3,1,1) = {" +DN +CZ +SP +SP +SP +SP +gh +qn +bP +bP +bP +bP +qn +qn +qn +qn +Hk +oH +Rv +"} +(4,1,1) = {" +DN +ml +SP +SP +SP +SP +xm +qn +RK +RK +RK +bP +qn +qn +qn +qn +gk +oH +Rv +"} +(5,1,1) = {" +DN +CG +Tx +Tx +Tx +Tx +xm +wn +RK +RK +RK +bP +qn +ru +qn +qn +kg +oH +Rv +"} +(6,1,1) = {" +DN +xm +xm +xm +xm +xm +DN +LQ +RK +RK +RK +bP +qn +DN +xm +xm +DN +zb +Yv +"} +(7,1,1) = {" +DN +Ce +Ce +Ce +Ce +Ce +Ce +qn +bP +bP +bP +bP +bP +xm +eX +ww +AU +oH +Rv +"} +(8,1,1) = {" +DN +jl +JG +ux +ux +JG +Ce +bP +ga +Gh +Gh +Gh +qn +xm +PH +PH +HN +oH +Rv +"} +(9,1,1) = {" +DN +kz +ux +ux +ux +ux +Ce +bP +ga +Gh +Gh +Gh +qn +Pk +PH +PH +pr +oH +Rv +"} +(10,1,1) = {" +DN +ux +ux +ux +ux +ux +Ce +bP +ga +Gh +Gh +Gh +qn +xm +Eq +PH +pr +zb +Yv +"} +(11,1,1) = {" +DN +kz +ux +ux +ux +ux +Ce +bP +ga +Gh +Gh +Gh +qn +Pk +PH +PH +pr +oH +Rv +"} +(12,1,1) = {" +DN +jl +JG +ux +ux +JG +Ce +bP +ga +Gh +Gh +Gh +qn +xm +XP +PH +PH +oH +Rv +"} +(13,1,1) = {" +DN +Ce +Ce +Ce +Ce +Ce +Ce +qn +bP +bP +bP +bP +bP +xm +IK +xR +vI +oH +Rv +"} +(14,1,1) = {" +DN +xm +xm +xm +xm +xm +DN +yG +sV +sV +sV +bP +qn +DN +xm +xm +DN +zb +Yv +"} +(15,1,1) = {" +DN +rt +rt +rt +rt +rt +xm +wn +sV +sV +sV +bP +qn +ct +qn +qn +kg +oH +Rv +"} +(16,1,1) = {" +DN +OI +rt +rt +rt +Bb +xm +qn +sV +sV +sV +bP +qn +qn +qn +qn +gk +oH +Rv +"} +(17,1,1) = {" +DN +Sk +yE +yE +yE +yE +ZW +qn +bP +bP +bP +VZ +qn +qn +qn +qn +Hk +oH +Rv +"} +(18,1,1) = {" +DN +HP +oJ +Xc +yx +JO +xm +qn +Js +mK +hG +mK +Js +qn +NH +qn +DN +DN +fI +"} +(19,1,1) = {" +fI +DN +DN +DN +DN +DN +DN +DN +xm +xm +xm +xm +xm +xm +DN +xm +DN +fI +fI +"} diff --git a/beestation.dme b/beestation.dme index 8948f9d982e06..7c54948f9d506 100644 --- a/beestation.dme +++ b/beestation.dme @@ -297,6 +297,7 @@ #include "code\__HELPERS\sorts\MergeSort.dm" #include "code\__HELPERS\sorts\TimSort.dm" #include "code\_globalvars\bitfields.dm" +#include "code\_globalvars\colorvars.dm" #include "code\_globalvars\configuration.dm" #include "code\_globalvars\game_modes.dm" #include "code\_globalvars\genetics.dm" @@ -634,6 +635,7 @@ #include "code\datums\components\force_move.dm" #include "code\datums\components\forensics.dm" #include "code\datums\components\gps.dm" +#include "code\datums\components\grillable.dm" #include "code\datums\components\gravity_aura.dm" #include "code\datums\components\haircolor_clothes.dm" #include "code\datums\components\heirloom.dm" @@ -880,6 +882,7 @@ #include "code\datums\martial\wrestling.dm" #include "code\datums\materials\_material.dm" #include "code\datums\materials\basemats.dm" +#include "code\datums\materials\meat.dm" #include "code\datums\mocking\client.dm" #include "code\datums\mood_events\drink_events.dm" #include "code\datums\mood_events\drug_events.dm" @@ -1093,6 +1096,7 @@ #include "code\game\machinery\recycler.dm" #include "code\game\machinery\requests_console.dm" #include "code\game\machinery\scan_gate.dm" +#include "code\game\machinery\sheetifier.dm" #include "code\game\machinery\shieldgen.dm" #include "code\game\machinery\sleeper.dm" #include "code\game\machinery\slotmachine.dm" @@ -1674,6 +1678,7 @@ #include "code\game\turfs\closed\_closed.dm" #include "code\game\turfs\closed\minerals.dm" #include "code\game\turfs\closed\walls.dm" +#include "code\game\turfs\closed\wall\material_walls.dm" #include "code\game\turfs\closed\wall\mineral_walls.dm" #include "code\game\turfs\closed\wall\misc_walls.dm" #include "code\game\turfs\closed\wall\reinf_walls.dm" @@ -1734,6 +1739,7 @@ #include "code\modules\admin\sql_ban_system.dm" #include "code\modules\admin\sql_message_system.dm" #include "code\modules\admin\stickyban.dm" +#include "code\modules\admin\tag.dm" #include "code\modules\admin\team_panel.dm" #include "code\modules\admin\topic.dm" #include "code\modules\admin\whitelist.dm" @@ -1814,6 +1820,7 @@ #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" #include "code\modules\admin\view_variables\admin_delete.dm" +#include "code\modules\admin\view_variables\color_matrix_editor.dm" #include "code\modules\admin\view_variables\debug_variables.dm" #include "code\modules\admin\view_variables\filterrific.dm" #include "code\modules\admin\view_variables\get_variables.dm" @@ -1821,6 +1828,7 @@ #include "code\modules\admin\view_variables\mass_edit_variables.dm" #include "code\modules\admin\view_variables\modify_variables.dm" #include "code\modules\admin\view_variables\reference_tracking.dm" +#include "code\modules\admin\view_variables\tag_datum.dm" #include "code\modules\admin\view_variables\topic.dm" #include "code\modules\admin\view_variables\topic_basic.dm" #include "code\modules\admin\view_variables\topic_list.dm" @@ -2445,6 +2453,7 @@ #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\shoes\taeclowndo.dm" +#include "code\modules\clothing\shoes\wheelys.dm" #include "code\modules\clothing\spacesuits\_spacesuits.dm" #include "code\modules\clothing\spacesuits\chronosuit.dm" #include "code\modules\clothing\spacesuits\hardsuit.dm" @@ -2618,6 +2627,7 @@ #include "code\modules\food_and_drinks\kitchen_machinery\deep_fryer.dm" #include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" #include "code\modules\food_and_drinks\kitchen_machinery\gibber.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\griddle.dm" #include "code\modules\food_and_drinks\kitchen_machinery\grill.dm" #include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" #include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm" diff --git a/code/__DEFINES/_helpers.dm b/code/__DEFINES/_helpers.dm index 22ca001ae4e61..5fc95acb1af11 100644 --- a/code/__DEFINES/_helpers.dm +++ b/code/__DEFINES/_helpers.dm @@ -7,3 +7,8 @@ //Returns an integer given a hex input, supports negative values "-ff" //skips preceding invalid characters #define hex2num(X) text2num(X, 16) + +// Refs contain a type id within their string that can be used to identify byond types. +// Custom types that we define don't get a unique id, but this is useful for identifying +// types that don't normally have a way to run istype() on them. +#define TYPEID(thing) copytext(REF(thing), 4, 6) diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm index 534f5a6629662..8e134d4828e8f 100644 --- a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm @@ -27,6 +27,20 @@ ///called on item when created through microwaving (): (obj/machinery/microwave/M, cooking_efficiency) #define COMSIG_ITEM_MICROWAVE_COOKED "microwave_cooked" +// Grilling foods (griddle, grill, and bonfire) +///Called when an object is placed onto a griddle +#define COMSIG_ITEM_GRILL_PLACED "item_placed_on_griddle" +///Called when an object is grilled ontop of a griddle +#define COMSIG_ITEM_GRILL_PROCESS "item_griddled" + /// Return to not burn the item + #define COMPONENT_HANDLED_GRILLING (1<<0) +///Called when an object is turned into another item through grilling ontop of a griddle +#define COMSIG_ITEM_GRILLED "item_grill_completed" + +#define COMSIG_GRILL_COMPLETED "grill_completed" +///Called when an object is meant to be grilled through a grill: (atom/fry_object, grill_time) +#define COMSIG_GRILL_FOOD "item_grill_food" + ///From /datum/component/edible/on_compost(source, /mob/living/user) #define COMSIG_EDIBLE_ON_COMPOST "on_compost" // Used to stop food from being composted. diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 11b5ae5dc21f4..20dca4ef23366 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -26,19 +26,34 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define DF_VAR_EDITED (1<<1) #define DF_ISPROCESSING (1<<2) -//! ## FLAGS BITMASK -#define CONDUCT_1 (1<<5) //! conducts electricity (iron etc.) -#define NODECONSTRUCT_1 (1<<7) //! For machines and structures that should not break into parts, eg, holodeck stuff -#define OVERLAY_QUEUED_1 (1<<8) //! atom queued to SSoverlay -#define ON_BORDER_1 (1<<9) //! item has priority to check when entering or leaving -#define PREVENT_CLICK_UNDER_1 (1<<11) //! Prevent clicking things below it on the same turf eg. doors/ fulltile windows -#define HOLOGRAM_1 (1<<12) -#define TESLA_IGNORE_1 (1<<13) //! TESLA_IGNORE grants immunity from being targeted by tesla-style electricity -#define INITIALIZED_1 (1<<14) //! Whether /atom/Initialize(mapload) has already run for the object -#define ADMIN_SPAWNED_1 (1<<15) //! was this spawned by an admin? used for stat tracking stuff. -#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16) -#define UNPAINTABLE_1 (1<<17) -#define HTML_USE_INITAL_ICON_1 (1<<18) //! Should we use the initial icon for display? Mostly used by overlay only objects +//FLAGS BITMASK + +/// conducts electricity (iron etc.) +#define CONDUCT_1 (1<<1) +/// For machines and structures that should not break into parts, eg, holodeck stuff +#define NODECONSTRUCT_1 (1<<2) +/// atom queued to SSoverlay +#define OVERLAY_QUEUED_1 (1<<3) +/// item has priority to check when entering or leaving +#define ON_BORDER_1 (1<<4) +/// Prevent clicking things below it on the same turf eg. doors/ fulltile windows +#define PREVENT_CLICK_UNDER_1 (1<<5) +///specifies that this atom is a hologram that isnt real +#define HOLOGRAM_1 (1<<6) +/// grants immunity from being targeted by tesla-style electricity +#define TESLA_IGNORE_1 (1<<7) +///Whether /atom/Initialize() has already run for the object +#define INITIALIZED_1 (1<<8) +/// was this spawned by an admin? used for stat tracking stuff. +#define ADMIN_SPAWNED_1 (1<<9) +/// should not get harmed if this gets caught by an explosion? +#define PREVENT_CONTENTS_EXPLOSION_1 (1<<10) +/// Should this object be unpaintable? +#define UNPAINTABLE_1 (1<<11) +/// Is this atom on top of another atom, and as such has click priority? +#define IS_ONTOP_1 (1<<12) +/// Should we use the initial icon for display? Mostly used by overlay only objects +#define HTML_USE_INITAL_ICON_1 (1<<13) // Update flags for [/atom/proc/update_appearance] /// Update the atom's name @@ -57,9 +72,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define UPDATE_ICON (UPDATE_ICON_STATE|UPDATE_OVERLAYS) /// If the thing can reflect light (lasers/energy) -#define RICOCHET_SHINY (1<<0) +#define RICOCHET_SHINY (1<<0) /// If the thing can reflect matter (bullets/bomb shrapnel) -#define RICOCHET_HARD (1<<1) +#define RICOCHET_HARD (1<<1) //turf-only flags #define NOJAUNT_1 (1<<0) @@ -169,6 +184,21 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define AA_TARGET_SEE_APPEARANCE (1<<0) #define AA_MATCH_TARGET_OVERLAYS (1<<1) +#define KEEP_TOGETHER_ORIGINAL "keep_together_original" + +//setter for KEEP_TOGETHER to allow for multiple sources to set and unset it +#define ADD_KEEP_TOGETHER(x, source)\ + if ((x.appearance_flags & KEEP_TOGETHER) && !HAS_TRAIT(x, TRAIT_KEEP_TOGETHER)) ADD_TRAIT(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL); \ + ADD_TRAIT(x, TRAIT_KEEP_TOGETHER, source);\ + x.appearance_flags |= KEEP_TOGETHER + +#define REMOVE_KEEP_TOGETHER(x, source)\ + REMOVE_TRAIT(x, TRAIT_KEEP_TOGETHER, source);\ + if(HAS_TRAIT_FROM_ONLY(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL))\ + REMOVE_TRAIT(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL);\ + else if(!HAS_TRAIT(x, TRAIT_KEEP_TOGETHER))\ + x.appearance_flags &= ~KEEP_TOGETHER + //dir macros ///Returns true if the dir is diagonal, false otherwise #define ISDIAGONALDIR(d) (d&(d-1)) diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index b1af0b7cd6f56..fbf418ae4b46b 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -6,6 +6,7 @@ #define FOOTSTEP_GRASS "grass" #define FOOTSTEP_WATER "water" #define FOOTSTEP_LAVA "lava" +#define FOOTSTEP_MEAT "meat" //barefoot sounds #define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot" #define FOOTSTEP_WOOD_CLAW "woodclaw" @@ -71,6 +72,8 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0) )) //bare footsteps lists GLOBAL_LIST_INIT(barefootstep, list( @@ -112,6 +115,8 @@ GLOBAL_LIST_INIT(barefootstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0), )) //claw footsteps lists @@ -154,6 +159,8 @@ GLOBAL_LIST_INIT(clawfootstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0), )) //heavy footsteps list @@ -170,5 +177,7 @@ GLOBAL_LIST_INIT(heavyfootstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0), )) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index a5707b237f125..01593bf7699fb 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -11,6 +11,15 @@ #define isweakref(D) (istype(D, /datum/weakref)) +#define isimage(thing) (istype(thing, /image)) + +GLOBAL_VAR_INIT(magic_appearance_detecting_image, new /image) // appearances are awful to detect safely, but this seems to be the best way ~ninjanomnom +#define isappearance(thing) (!ispath(thing) && istype(GLOB.magic_appearance_detecting_image, thing)) + +// The filters list has the same ref type id as a filter, but isnt one and also isnt a list, so we have to check if the thing has Cut() instead +GLOBAL_VAR_INIT(refid_filter, TYPEID(filter(type="angular_blur"))) +#define isfilter(thing) (!hascall(thing, "Cut") && TYPEID(thing) == GLOB.refid_filter) + // simple check whether or not a player is a guest using their key #define IS_GUEST_KEY(key) (findtextEx(key, "Guest-", 1, 7)) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 1d7fb760ea26c..7fad19e2aa6d3 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -11,6 +11,7 @@ #define COMSIG_KB_ADMIN_AGHOST_DOWN "keybinding_admin_aghost_down" #define COMSIG_KB_ADMIN_PLAYERPANEL_DOWN "keybinding_admin_playerpanelnew_down" #define COMSIG_KB_ADMIN_INVISIMINTOGGLE_DOWN "keybinding_admin_invisimintoggle_down" +#define COMSIG_KB_ADMIN_VIEWTAGS_DOWN "keybinding_admin_viewtags_down" //Carbon #define COMSIG_KB_CARBON_TOGGLETHROWMODE_DOWN "keybinding_carbon_togglethrowmode_down" diff --git a/code/__DEFINES/materials.dm b/code/__DEFINES/materials.dm index 99d4dba01d6d0..2eac9aa92787f 100644 --- a/code/__DEFINES/materials.dm +++ b/code/__DEFINES/materials.dm @@ -18,6 +18,8 @@ /// Applies the material greyscale color to the atom's greyscale color. #define MATERIAL_GREYSCALE (1<<4) +#define MATERIAL_SOURCE(mat) "[mat.name]_material" + /// Create standardized stack sizes. #define STACKSIZE_MACRO(Path)\ diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 6135c11a12cd4..51d9cc95802f2 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -90,6 +90,9 @@ #define DIGITIGRADE_OPTIONAL 1 #define DIGITIGRADE_FORCED 2 +// Health/damage defines +#define MAX_LIVING_HEALTH 100 + //Reagent Metabolization flags, defines the type of reagents that affect this mob #define PROCESS_ORGANIC 1 //Only processes reagents with "ORGANIC" or "ORGANIC | SYNTHETIC" #define PROCESS_SYNTHETIC 2 //Only processes reagents with "SYNTHETIC" or "ORGANIC | SYNTHETIC" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index d3e8ea0f2a104..b0fe2d1f7c879 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -270,6 +270,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_METALANGUAGE_KEY_ALLOWED "metalanguage_key_allowed" // you can use language key for metalanguage (,`) and but also you see lang icon #define TRAIT_HYPERSPACED "hyperspaced" // Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent #define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement" // Gives the movable free hyperspace movement without being pulled during shuttle transit +#define TRAIT_FAST_CUFF_REMOVAL "fast_cuff_removal" // Faster cuff removal // You can stare into the abyss, but it does not stare back. // You're immune to the hallucination effect of the supermatter, either @@ -277,7 +278,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MADNESS_IMMUNE "supermatter_madness_immune" //non-mob traits -#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it +//Used for limb-based paralysis, where replacing the limb will fix it +#define TRAIT_PARALYSIS "paralysis" + +///Used for managing KEEP_TOGETHER in [appearance_flags] +#define TRAIT_KEEP_TOGETHER "keep-together" #define TRAIT_HEARING_SENSITIVE "hearing_sensitive" diff --git a/code/__DEFINES/typeids.dm b/code/__DEFINES/typeids.dm index d659d564152f4..16a71266becf0 100644 --- a/code/__DEFINES/typeids.dm +++ b/code/__DEFINES/typeids.dm @@ -3,6 +3,6 @@ #define TYPEID_NORMAL_LIST "f" //helper macros #define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, -7) ) ) -#define IS_NORMAL_LIST(L) (GET_TYPEID(FAST_REF(L)) == TYPEID_NORMAL_LIST) - - +// Only allowed raw ref, since this is for lists explicitly and they will get no use from it +// Also it tends to be used in a hot context so let's be nice yes? +#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST) diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 97e924dea766d..dab3fe081b034 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -2,6 +2,8 @@ #define VV_TEXT "Text" #define VV_MESSAGE "Mutiline Text" #define VV_ICON "Icon" +#define VV_COLOR "Color" +#define VV_COLOR_MATRIX "Color Matrix" #define VV_ATOM_REFERENCE "Atom Reference" #define VV_DATUM_REFERENCE "Datum Reference" #define VV_MOB_REFERENCE "Mob Reference" @@ -16,13 +18,17 @@ #define VV_NEW_TYPE "New Custom Typepath" #define VV_NEW_LIST "New List" #define VV_NULL "NULL" +#define VV_INFINITY "Infinity" #define VV_RESTORE_DEFAULT "Restore to Default" #define VV_MARKED_DATUM "Marked Datum" +#define VV_TAGGED_DATUM "Tagged Datum" #define VV_BITFIELD "Bitfield" #define VV_TEXT_LOCATE "Custom Reference Locate" #define VV_PROCCALL_RETVAL "Return Value of Proccall" +#define VV_WEAKREF "Weak Reference Datum" #define VV_MSG_MARKED "
Marked Object" +#define VV_MSG_TAGGED(num) "
Tagged Datum #[num]" #define VV_MSG_EDITED "
Var Edited" #define VV_MSG_DELETED "
Deleted" @@ -73,11 +79,13 @@ #define VV_HK_EXPOSE "expose" #define VV_HK_CALLPROC "proc_call" #define VV_HK_MARK "mark" +#define VV_HK_TAG "tag" #define VV_HK_ADDCOMPONENT "addcomponent" #define VV_HK_MODIFY_TRAITS "modtraits" // /datum/weakref -#define VV_HK_TRACK_REF "track_ref" +#define VV_HK_WEAKREF_RESOLVE "weakref_resolve" + // /atom #define VV_HK_MODIFY_TRANSFORM "atom_transform" @@ -88,6 +96,7 @@ #define VV_HK_AUTO_RENAME "auto_rename" #define VV_HK_RADIATE "radiate" #define VV_HK_EDIT_FILTERS "edit_filters" +#define VV_HK_EDIT_COLOR_MATRIX "edit_color_matrix" #define VV_HK_EDIT_PARTICLES "edit_particles" #define VV_HK_ADD_EMITTER "add_emitter" #define VV_HK_REMOVE_EMITTER "remove_emitter" @@ -163,3 +172,8 @@ // paintings #define VV_HK_REMOVE_PAINTING "remove_painting" + +// Flags for debug_variable() that do little things to what we end up rendering + +/// ALWAYS render a reduced list, useful for fuckoff big datums that need to be condensed for the sake of client load +#define VV_ALWAYS_CONTRACT_LIST (1<<0) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 5cc9b0bee2bd3..8118796298447 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -13,6 +13,14 @@ * Misc */ +// Generic listoflist safe add and removal macros: +///If value is a list, wrap it in a list so it can be used with list add/remove operations +#define LIST_VALUE_WRAP_LISTS(value) (islist(value) ? list(value) : value) +///Add an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_ADD(list, item) (list += LIST_VALUE_WRAP_LISTS(item)) +///Remove an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_REMOVE(list, item) (list -= LIST_VALUE_WRAP_LISTS(item)) + ///Initialize the lazylist #define LAZYINITLIST(L) if (!L) { L = list(); } ///If the provided list is empty, set it to null @@ -282,7 +290,7 @@ if(skiprep) for(var/e in first) if(!(e in result) && !(e in second)) - result += e + UNTYPED_LIST_ADD(result, e) else result = first - second return result @@ -360,7 +368,7 @@ if(!value) continue for(var/i in 1 to value / gcf) - output += item + UNTYPED_LIST_ADD(output, item) return output /// Takes a list of numbers as input, returns the highest value that is cleanly divides them all @@ -446,7 +454,7 @@ /proc/unique_list(list/inserted_list) . = list() for(var/i in inserted_list) - . |= i + . |= LIST_VALUE_WRAP_LISTS(i) // Return a list with no duplicate entries inplace /proc/unique_list_in_place(list/inserted_list) @@ -628,12 +636,6 @@ if(checked_datum.vars[varname] == value) return checked_datum -/// remove all nulls from a list -/proc/remove_nulls_from_list(list/inserted_list) - while(inserted_list.Remove(null)) - continue - return inserted_list - ///Copies a list, and all lists inside it recusively ///Does not copy any other reference type /proc/deep_copy_list(list/inserted_list) @@ -690,7 +692,7 @@ return null . = list() for(var/key in key_list) - . |= key_list[key] + . |= LIST_VALUE_WRAP_LISTS(key_list[key]) /proc/make_associative(list/flat_list) . = list() @@ -733,7 +735,7 @@ /proc/assoc_to_keys(list/input) var/list/keys = list() for(var/key in input) - keys += key + UNTYPED_LIST_ADD(keys, key) return keys /// Checks if a value is contained in an associative list's values @@ -780,7 +782,7 @@ . = list() for(var/i in L) if(condition.Invoke(i)) - . |= i + . |= LIST_VALUE_WRAP_LISTS(i) /// Runtimes if the passed in list is not sorted /proc/assert_sorted(list/list, name, cmp = /proc/cmp_numeric_asc) diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 2d831ea4bb956..53acf40b9a4de 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -94,3 +94,7 @@ return crunch + . + ((desired_format == 4) ? "f" : "ff") else //not a supported hex color format. return default ? default : crunch + repeat_string(desired_format, "0") + +/// Makes sure the input color is text with a # at the start followed by 6 hexadecimal characters. Examples: "#ff1234", "#A38321", COLOR_GREEN_GRAY +/proc/sanitize_ooccolor(color) + return findtext(color, GLOB.is_color) ? color : GLOB.normal_ooc_colour diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index f83a5104731ac..ce2ce6a863aad 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -170,9 +170,9 @@ DEFINE_BITFIELD(resistance_flags, list( DEFINE_BITFIELD(flags_1, list( "NOJAUNT_1" = NOJAUNT_1, "UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1, + "NO_LAVA_GEN_1" = NO_LAVA_GEN_1, "CAN_BE_DIRTY_1" = CAN_BE_DIRTY_1, "CONDUCT_1" = CONDUCT_1, - "NO_LAVA_GEN_1" = NO_LAVA_GEN_1, "NODECONSTRUCT_1" = NODECONSTRUCT_1, "OVERLAY_QUEUED_1" = OVERLAY_QUEUED_1, "ON_BORDER_1" = ON_BORDER_1, diff --git a/code/_globalvars/colorvars.dm b/code/_globalvars/colorvars.dm new file mode 100644 index 0000000000000..c49a3d90dfc0e --- /dev/null +++ b/code/_globalvars/colorvars.dm @@ -0,0 +1 @@ +GLOBAL_LIST_INIT(color_vars, list("color")) diff --git a/code/_globalvars/lists/admin.dm b/code/_globalvars/lists/admin.dm index 4d46c5358641d..aa7075fd54dda 100644 --- a/code/_globalvars/lists/admin.dm +++ b/code/_globalvars/lists/admin.dm @@ -8,3 +8,19 @@ GLOBAL_LIST_INIT_TYPED(smite_list, /datum/smite, init_smites()) GLOBAL_VAR_INIT(admin_notice, "") // Admin notice that all clients see when joining the server + +// A list of all the special byond lists that need to be handled different by vv +GLOBAL_LIST_INIT(vv_special_lists, init_special_list_names()) + +/proc/init_special_list_names() + var/list/output = list() + var/obj/sacrifice = new + for(var/varname in sacrifice.vars) + var/value = sacrifice.vars[varname] + if(!islist(value)) + if(!isdatum(value) && hascall(value, "Cut")) + output += varname + continue + if(isnull(locate(REF(value)))) + output += varname + return output diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 9c1d53535056c..37ea04ee9d918 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -89,7 +89,10 @@ ShiftClickOn(A) return if(LAZYACCESS(modifiers, MIDDLE_CLICK)) - MiddleClickOn(A) + if(LAZYACCESS(modifiers, CTRL_CLICK)) + CtrlMiddleClickOn(A) + return + MiddleClickOn(A, params) return if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt) AltClickOn(A) @@ -192,7 +195,7 @@ for(var/atom/target in checking) // will filter out nulls if(closed[target] || isarea(target)) // avoid infinity situations continue - if(isturf(target) || isturf(target.loc) || (target in direct_access)) //Directly accessible atoms + if(isturf(target) || isturf(target.loc) || (target in direct_access) || (isobj(target) && target.flags_1 & IS_ONTOP_1)) //Directly accessible atoms if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks return TRUE @@ -331,6 +334,15 @@ H.changeNext_move(CLICK_CD_MELEE) else ..() + +/mob/proc/CtrlMiddleClickOn(atom/A) + // specifically made for admin feature. + if(check_rights_for(client, R_ADMIN)) + client.toggle_tag_datum(A) + return + A.CtrlClick(src) // this assumes you did CtrlClick instead of MiddleClick + return + /* Alt click Unused except for AI diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index d36861f6bdcf2..aade401925f88 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -43,6 +43,12 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) return FALSE return ..() +/datum/controller/global_vars/vv_get_var(var_name) + switch(var_name) + if (NAMEOF(src, vars)) + return debug_variable(var_name, list(), 0, src) + return debug_variable(var_name, vars[var_name], 0, src, display_flags = VV_ALWAYS_CONTRACT_LIST) + /datum/controller/global_vars/can_vv_get(var_name) if(var_name == "gvars_datum_protected_varlist" || var_name == "gvars_datum_in_built_vars") return FALSE diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 92348374d0b5b..91a160f0eb3e1 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -35,7 +35,7 @@ SUBSYSTEM_DEF(idlenpcpool) if(!SA) stack_trace("Null entry found at GLOB.simple_animals\[AI_IDLE\]. Null entries will be purged. Yell at coderbus. Subsystem will try to continue.") - remove_nulls_from_list(GLOB.simple_animals[AI_IDLE]) + list_clear_nulls(GLOB.simple_animals[AI_IDLE]) continue if(!SA.ckey) diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 2f4c6488ee639..fff7000689273 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -12,23 +12,28 @@ SUBSYSTEM_DEF(materials) var/list/materials ///Dictionary of category || list of material refs var/list/materials_by_category + ///Dictionary of category || list of material types, mostly used by rnd machines like autolathes. + var/list/materialtypes_by_category ///A cache of all material combinations that have been used var/list/list/material_combos ///List of stackcrafting recipes for materials using rigid materials var/list/rigid_stack_recipes = list( new /datum/stack_recipe("chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), + new /datum/stack_recipe("Floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE), ) ///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info) /datum/controller/subsystem/materials/proc/InitializeMaterials() materials = list() materials_by_category = list() + materialtypes_by_category = list() material_combos = list() for(var/type in subtypesof(/datum/material)) var/datum/material/ref = new type materials[type] = ref for(var/c in ref.categories) materials_by_category[c] += list(ref) + materialtypes_by_category[c] += list(type) // Adds the dupe recipes into multiple material recipes var/list/global_mat_recipes = ref.get_material_recipes() diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 8e9d7153b1b5f..77af2706946b9 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -25,7 +25,7 @@ SUBSYSTEM_DEF(npcpool) if(!SA) stack_trace("Null entry found at GLOB.simple_animals\[AI_ON\]. Null entries will be purged. Yell at coderbus. Subsystem will try to continue.") - remove_nulls_from_list(GLOB.simple_animals[AI_ON]) + list_clear_nulls(GLOB.simple_animals[AI_ON]) continue if(!SA.ckey && !SA.notransform) diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 8901bfdba4343..ced03d367abaa 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -1,9 +1,15 @@ /datum/component/butchering - var/speed = 80 //time in deciseconds taken to butcher something - var/effectiveness = 100 //percentage effectiveness; numbers above 100 yield extra drops - var/bonus_modifier = 0 //percentage increase to bonus item chance - var/butcher_sound = 'sound/weapons/slice.ogg' //sound played when butchering + /// Time in deciseconds taken to butcher something + var/speed = 8 SECONDS + /// Percentage effectiveness; numbers above 100 yield extra drops + var/effectiveness = 100 + /// Percentage increase to bonus item chance + var/bonus_modifier = 0 + /// Sound played when butchering + var/butcher_sound = 'sound/weapons/slice.ogg' + /// Whether or not this component can be used to butcher currently. Used to temporarily disable butchering var/butchering_enabled = TRUE + /// Whether or not this component is compatible with blunt tools. var/can_be_blunt = FALSE /datum/component/butchering/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled, _can_be_blunt) diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 3d9d7fed20181..c26b81bc41eb3 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -11,6 +11,7 @@ /obj/item/weaponcrafting/stock name = "rifle stock" desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood." + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 6) icon = 'icons/obj/improvised.dmi' icon_state = "riflestock" diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 1526db2b6e68a..1d5e69085fa81 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -10,8 +10,8 @@ var/delete_after /// For items, lets us determine where things should be hit. var/equipped_slot - /// Whether this component is currently in the process of exploding. - var/tmp/exploding = FALSE + /// it won't explode again if cooldown is on. This is necessary because explosion() proc through SSexplosion doesn't tell if it's exploded + COOLDOWN_DECLARE(explosion_cooling) /datum/component/explodable/Initialize(devastation_range, heavy_impact_range, light_impact_range, flash_range, uncapped = FALSE, delete_after = EXPLODABLE_DELETE_PARENT) if(!isatom(parent)) @@ -125,12 +125,11 @@ /// Expldoe and remove the object /datum/component/explodable/proc/detonate() SIGNAL_HANDLER - if (exploding) + if(!COOLDOWN_FINISHED(src, explosion_cooling)) return // If we don't do this and this doesn't delete it can lock the MC into only processing Input, Timers, and Explosions. + COOLDOWN_START(src, explosion_cooling, 1) var/atom/bomb = parent - - exploding = TRUE explosion(bomb, devastation_range, heavy_impact_range, light_impact_range, flash_range, uncapped) //epic explosion time switch(delete_after) @@ -138,14 +137,3 @@ qdel(src) if(EXPLODABLE_DELETE_PARENT) qdel(bomb) - else - addtimer(CALLBACK(src, PROC_REF(reset_exploding), 0.1 SECONDS)) - -/** - * Resets the expoding flag - */ -/datum/component/explodable/proc/reset_exploding() - SIGNAL_HANDLER - src.exploding = FALSE - - diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 32f03b53d12b7..89a1aa809b4b1 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -82,6 +82,7 @@ Behavior that's still missing from this component that original food items had t if(isitem(parent)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(use_from_hand)) + RegisterSignal(parent, COMSIG_GRILL_FOOD, PROC_REF(GrillFood)) RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_ACT, PROC_REF(on_microwaved)) RegisterSignal(parent, COMSIG_ITEM_USED_AS_INGREDIENT, PROC_REF(used_to_customize)) @@ -173,6 +174,28 @@ Behavior that's still missing from this component that original food items had t return TryToEat(M, user) +/datum/component/edible/proc/GrillFood(datum/source, atom/fry_object, grill_time) + SIGNAL_HANDLER + + var/atom/this_food = parent + + switch(grill_time) //no 0-20 to prevent spam + if(20 to 30) + this_food.name = "lightly-grilled [this_food.name]" + this_food.desc = "[this_food.desc] It's been lightly grilled." + if(30 to 80) + this_food.name = "grilled [this_food.name]" + this_food.desc = "[this_food.desc] It's been grilled." + foodtypes |= FRIED + if(80 to 100) + this_food.name = "heavily grilled [this_food.name]" + this_food.desc = "[this_food.desc] It's been heavily grilled." + foodtypes |= FRIED + if(100 to INFINITY) //grill marks reach max alpha + this_food.name = "Powerfully Grilled [this_food.name]" + this_food.desc = "A [this_food.name]. Reminds you of your wife, wait, no, it's prettier!" + foodtypes |= FRIED + ///Called when food is created through processing (Usually this means it was sliced). We use this to pass the OG items reagents. /datum/component/edible/proc/on_processed(datum/source, atom/original_atom, list/chosen_processing_option) SIGNAL_HANDLER @@ -261,9 +284,6 @@ Behavior that's still missing from this component that original food items had t set waitfor = FALSE // We might end up sleeping here, so we don't want to hold up anything - if(QDELETED(parent)) - return - var/atom/owner = parent if(feeder.a_intent == INTENT_HARM) @@ -446,6 +466,7 @@ Behavior that's still missing from this component that original food items had t on_consume?.Invoke(eater, feeder) + to_chat(feeder, "There is nothing left of [parent], oh no!") if(isturf(parent)) var/turf/T = parent T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm new file mode 100644 index 0000000000000..cb1f25e30c3d1 --- /dev/null +++ b/code/datums/components/grillable.dm @@ -0,0 +1,91 @@ +/datum/component/grillable + ///Result atom type of grilling this object + var/atom/cook_result + ///Amount of time required to cook the food + var/required_cook_time = 2 MINUTES + ///Is this a positive grill result? + var/positive_result = TRUE + + ///Time spent cooking so far + var/current_cook_time = 0 + + ///Are we currently grilling? + var/currently_grilling = FALSE + + ///Do we use the large steam sprite? + var/use_large_steam_sprite = FALSE + +/datum/component/grillable/Initialize(cook_result, required_cook_time, positive_result, use_large_steam_sprite) + . = ..() + if(!isitem(parent)) //Only items support grilling at the moment + return COMPONENT_INCOMPATIBLE + + src.cook_result = cook_result + src.required_cook_time = required_cook_time + src.positive_result = positive_result + src.use_large_steam_sprite = use_large_steam_sprite + + RegisterSignal(parent, COMSIG_ITEM_GRILLED, PROC_REF(OnGrill)) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(OnExamine)) + +///Ran every time an item is grilled by something +/datum/component/grillable/proc/OnGrill(datum/source, atom/used_grill, delta_time = 1) + SIGNAL_HANDLER + + . = COMPONENT_HANDLED_GRILLING + + current_cook_time += delta_time * 10 //turn it into ds + if(current_cook_time >= required_cook_time) + FinishGrilling(used_grill) + else if(!currently_grilling) //We havn't started grilling yet + StartGrilling(used_grill) + + +///Ran when an object starts grilling on something +/datum/component/grillable/proc/StartGrilling(atom/grill_source) + currently_grilling = TRUE + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(OnMoved)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(AddGrilledItemOverlay)) + + var/atom/A = parent + A.update_appearance() + +///Ran when an object finished grilling +/datum/component/grillable/proc/FinishGrilling(atom/grill_source) + var/atom/original_object = parent + var/atom/grilled_result = new cook_result(original_object.loc) + + grilled_result.pixel_x = original_object.pixel_x + grilled_result.pixel_y = original_object.pixel_y + + grill_source.visible_message("[parent] turns into \a [grilled_result]!") + SEND_SIGNAL(parent, COMSIG_GRILL_COMPLETED, grilled_result) + currently_grilling = FALSE + qdel(parent) + +///Ran when an object almost finishes grilling +/datum/component/grillable/proc/OnExamine(atom/A, mob/user, list/examine_list) + SIGNAL_HANDLER + if(!current_cook_time) //Not grilled yet + return + + if(positive_result) + if(current_cook_time <= required_cook_time * 0.75) + examine_list += "[parent] probably needs to be cooked a bit longer!" + else if(current_cook_time <= required_cook_time) + examine_list += "[parent] seems to be almost finished cooking!" + else + examine_list += "[parent] should probably not be put on the grill" + +///Ran when an object moves from the grill +/datum/component/grillable/proc/OnMoved(atom/A, atom/OldLoc, Dir, Forced) + SIGNAL_HANDLER + currently_grilling = FALSE + UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + A.update_appearance() + +/datum/component/grillable/proc/AddGrilledItemOverlay(datum/source, list/overlays) + SIGNAL_HANDLER + + overlays += mutable_appearance('icons/effects/steam.dmi', "[use_large_steam_sprite ? "steam_triple" : "steam_single"]", ABOVE_OBJ_LAYER) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 1516d60734213..edf7cb0157990 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -230,12 +230,14 @@ sheet_amt = round(materials[M] / MINERAL_MATERIAL_AMOUNT) var/count = 0 while(sheet_amt > MAX_STACK_SIZE) - new M.sheet_type(target, MAX_STACK_SIZE) + var/obj/item/stack/sheets = new M.sheet_type(null, MAX_STACK_SIZE) + sheets.forceMove(target) count += MAX_STACK_SIZE use_amount_mat(sheet_amt * MINERAL_MATERIAL_AMOUNT, M) sheet_amt -= MAX_STACK_SIZE if(sheet_amt >= 1) - new M.sheet_type(target, sheet_amt) + var/obj/item/stack/sheets = new M.sheet_type(null, sheet_amt) + sheets.forceMove(target) count += sheet_amt use_amount_mat(sheet_amt * MINERAL_MATERIAL_AMOUNT, M) return count diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index cc06f85e39b4b..3a2109a1643ac 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -82,9 +82,10 @@ out += "[length(out) ? " and it " : "[master] "]seems to be glowing a bit." if(RAD_AMOUNT_HIGH to INFINITY) //At this level the object can contaminate other objects out += "[length(out) ? " and it " : "[master] "]hurts to look at." - else - out += "." - to_chat(user, out.Join()) + if(!LAZYLEN(out)) + return + out += "." + to_chat(user, "[out.Join()]") /datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user) SIGNAL_HANDLER diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index f9d39be51b928..0707320767c4a 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -20,21 +20,28 @@ /datum/proc/can_vv_mark() return TRUE -//please call . = ..() first and append to the result, that way parent items are always at the top and child items are further down -//add separaters by doing . += "---" +/** + * Gets all the dropdown options in the vv menu. + * When overriding, make sure to call . = ..() first and appent to the result, that way parent items are always at the top and child items are further down. + * Add seperators by doing VV_DROPDOWN_OPTION("", "---") + */ /datum/proc/vv_get_dropdown() + SHOULD_CALL_PARENT(TRUE) . = list() VV_DROPDOWN_OPTION("", "---") VV_DROPDOWN_OPTION(VV_HK_CALLPROC, "Call Proc") VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object") + VV_DROPDOWN_OPTION(VV_HK_TAG, "Tag Datum") VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete") VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player") VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element") VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRAITS, "Modify Traits") -//This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks! -//href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables! -//This proc is for "high level" actions like admin heal/set species/etc/etc. The low level debugging things should go in admin/view_variables/topic_basic.dm incase this runtimes. +/** + * This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks! + * href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables! + * This proc is for "high level" actions like admin heal/set species/etc/etc. The low level debugging things should go in admin/view_variables/topic_basic.dm incase this runtimes. + */ /datum/proc/vv_do_topic(list/href_list) if(!usr || !usr.client || !usr.client.holder || !check_rights(NONE)) return FALSE //This is VV, not to be called by anything else. diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm index b37c40a1d2f67..807187a048209 100644 --- a/code/datums/greyscale/_greyscale_config.dm +++ b/code/datums/greyscale/_greyscale_config.dm @@ -243,6 +243,7 @@ var/icon/icon_bundle = GenerateBundle(color_string, last_external_icon=last_external_icon) icon_bundle = fcopy_rsc(icon_bundle) + icon_cache[key] = icon_bundle var/icon/output = icon(icon_bundle) return output diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index 00892af276943..a6d65ac40c52d 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -99,6 +99,19 @@ user.invisimin() return TRUE +/datum/keybinding/admin/view_tags + keys = list("F9") + name = "view_tags" + full_name = "View Tags" + description = "Open the View-Tags menu" + keybind_signal = COMSIG_KB_ADMIN_VIEWTAGS_DOWN + +/datum/keybinding/admin/view_tags/down(client/user) + . = ..() + if(.) + return + user.holder?.display_tags() + return TRUE /datum/keybinding/admin/dead_say keys = list("F10") diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index be22022823965..24224a15f0ba1 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -41,6 +41,13 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/looping_sound/grill + mid_sounds = list('sound/machines/grill/grillsizzle.ogg' = 1) + mid_length = 18 + volume = 50 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/deep_fryer mid_length = 2 mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1) volume = 30 diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 5a161b8d39bdd..f633e21d85043 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -31,6 +31,21 @@ Simple datum which is instanced once per type and is used for every object of sa ///How beautiful is this material per unit var/beauty_modifier = 0 */ + ///Can be used to override the sound items make, lets add some SLOSHing. + var/item_sound_override + ///Can be used to override the stepsound a turf makes. MORE SLOOOSH + var/turf_sound_override + ///what texture icon state to overlay + var/texture_layer_icon_state + ///a cached icon for the texture filter + var/cached_texture_filter_icon + +/datum/material/New() + . = ..() + if(texture_layer_icon_state) + cached_texture_filter_icon = icon('icons/materials/composite.dmi', texture_layer_icon_state) + + ///This proc is called when the material is added to an object. /datum/material/proc/on_applied(atom/source, amount, material_flags) @@ -39,17 +54,31 @@ Simple datum which is instanced once per type and is used for every object of sa source.add_atom_colour(color, FIXED_COLOUR_PRIORITY) if(alpha) source.alpha = alpha + if(texture_layer_icon_state) + ADD_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) + source.add_filter("material_texture_[name]",1,layering_filter(icon=cached_texture_filter_icon,blend_mode=BLEND_INSET_OVERLAY)) if(material_flags & MATERIAL_GREYSCALE) var/config_path = get_greyscale_config_for(source.greyscale_config) source.set_greyscale(greyscale_colors, config_path) + if(alpha < 255) + source.opacity = FALSE if(material_flags & MATERIAL_ADD_PREFIX) source.name = "[name] [source.name]" if(istype(source, /obj)) //objs on_applied_obj(source, amount, material_flags) + if(istype(source, /turf)) //turfs + on_applied_turf(source, amount, material_flags) + + source.mat_update_desc(src) + +///This proc is called when a material updates an object's description +/atom/proc/mat_update_desc(/datum/material/mat) + return + ///This proc is called when the material is added to an object specifically. /datum/material/proc/on_applied_obj(obj/o, amount, material_flags) if(material_flags & MATERIAL_AFFECT_STATISTICS) @@ -63,13 +92,18 @@ Simple datum which is instanced once per type and is used for every object of sa if(!istype(o.armor)) return + + var/list/current_armor = o.armor?.getList() + + for(var/i in current_armor) + temp_armor_list[i] = current_armor[i] * armor_modifiers[i] + o.armor = getArmor(arglist(temp_armor_list)) */ if(!isitem(o)) return var/obj/item/item = o - if(material_flags & MATERIAL_GREYSCALE) var/worn_path = get_greyscale_config_for(item.greyscale_config_worn) var/lefthand_path = get_greyscale_config_for(item.greyscale_config_inhand_left) @@ -80,12 +114,42 @@ Simple datum which is instanced once per type and is used for every object of sa new_inhand_right = righthand_path ) + if(!item_sound_override) + return + item.hitsound = item_sound_override + item.usesound = item_sound_override + item.mob_throw_hit_sound = item_sound_override + item.equip_sound = item_sound_override + item.pickup_sound = item_sound_override + item.drop_sound = item_sound_override + +/datum/material/proc/on_applied_turf(var/turf/T, amount, material_flags) + if(isopenturf(T)) + if(!turf_sound_override) + return + var/turf/open/O = T + O.footstep = turf_sound_override + O.barefootstep = turf_sound_override + O.clawfootstep = turf_sound_override + O.heavyfootstep = turf_sound_override + return + +/datum/material/proc/get_greyscale_config_for(datum/greyscale_config/config_path) + if(!config_path) + return + for(var/datum/greyscale_config/path as anything in subtypesof(config_path)) + if(type != initial(path.material_skin)) + continue + return path ///This proc is called when the material is removed from an object. /datum/material/proc/on_removed(atom/source, material_flags) if(material_flags & MATERIAL_COLOR) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example if(color) source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color) + if(texture_layer_icon_state) + source.remove_filter("material_texture_[name]") + REMOVE_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) source.alpha = initial(source.alpha) if(material_flags & MATERIAL_GREYSCALE) @@ -97,8 +161,11 @@ Simple datum which is instanced once per type and is used for every object of sa if(istype(source, /obj)) //objs on_removed_obj(source, material_flags) + if(istype(source, /turf)) //turfs + on_removed_turf(source, material_flags) + ///This proc is called when the material is removed from an object specifically. -/datum/material/proc/on_removed_obj(var/obj/o, amount, material_flags) +/datum/material/proc/on_removed_obj(obj/o, material_flags) if(material_flags & MATERIAL_AFFECT_STATISTICS) var/new_max_integrity = initial(o.max_integrity) o.modify_max_integrity(new_max_integrity) @@ -113,6 +180,9 @@ Simple datum which is instanced once per type and is used for every object of sa new_inhand_right = initial(item.greyscale_config_inhand_right) ) +/datum/material/proc/on_removed_turf(turf/T, material_flags) + return + /** * This proc is called when the mat is found in an item that's consumed by accident. see /obj/item/proc/on_accidental_consumption. * Arguments @@ -122,14 +192,6 @@ Simple datum which is instanced once per type and is used for every object of sa /datum/material/proc/on_accidental_mat_consumption(mob/living/carbon/M, obj/item/S) return FALSE -/datum/material/proc/get_greyscale_config_for(datum/greyscale_config/config_path) - if(!config_path) - return - for(var/datum/greyscale_config/path as anything in subtypesof(config_path)) - if(type != initial(path.material_skin)) - continue - return path - /// Returns GLOB.recipes of a material to modify the recipes. /// This will be only called once from SSMaterials. diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index a4bbb81651187..4b43e6be829fa 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -171,6 +171,31 @@ Unless you know what you're doing, only use the first three numbers. They're in strength_modifier = 0.8 value_per_unit = 0.025 +/datum/material/wood + name = "wood" + desc = "Flexible, durable, but flamable. Hard to come across in space." + color = "#bb8e53" + greyscale_colors = "#bb8e53" + strength_modifier = 0.5 + sheet_type = /obj/item/stack/sheet/wood + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + value_per_unit = 0.01 + //beauty_modifier = 0.1 + //armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, ACID = 0.3) + texture_layer_icon_state = "woodgrain" + +/datum/material/wood/on_applied_obj(obj/source, amount, material_flags) + . = ..() + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/obj/wooden = source + wooden.resistance_flags |= FLAMMABLE + +/datum/material/wood/on_removed_obj(obj/source, amount, material_flags) + . = ..() + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/obj/wooden = source + wooden.resistance_flags &= ~FLAMMABLE + ///Stronk force increase /datum/material/adamantine name = "adamantine" diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm new file mode 100644 index 0000000000000..f2a3526c368db --- /dev/null +++ b/code/datums/materials/meat.dm @@ -0,0 +1,32 @@ +///It's gross, gets the name of it's owner, and is all kinds of fucked up +/datum/material/meat + name = "meat" + desc = "Meat" + color = rgb(214, 67, 67) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/meat + value_per_unit = 0.05 + //beauty_modifier = -0.3 + strength_modifier = 0.7 + //armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1) + item_sound_override = 'sound/effects/meatslap.ogg' + turf_sound_override = FOOTSTEP_MEAT + texture_layer_icon_state = "meat" + +/datum/material/meat/on_removed(atom/source, material_flags) + . = ..() + qdel(source.GetComponent(/datum/component/edible)) + +/datum/material/meat/on_applied_obj(obj/O, amount, material_flags) + . = ..() + O.obj_flags |= UNIQUE_RENAME //So you can name it after the person its made from, a depressing comprimise. + make_edible(O, amount, material_flags) + +/datum/material/meat/on_applied_turf(turf/T, amount, material_flags) + . = ..() + make_edible(T, amount, material_flags) + +/datum/material/meat/proc/make_edible(atom/source, amount, material_flags) + var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT) + var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT) + source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, RAW | MEAT | GORE, null, 30, list("Fleshy")) diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 96fe31b2ba3ad..35b65db187607 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -16,7 +16,8 @@ TRAIT_CONFUSEIMMUNE, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_NOSTAMCRIT, - TRAIT_NOLIMBDISABLE + TRAIT_NOLIMBDISABLE, + TRAIT_FAST_CUFF_REMOVAL ) /datum/mutation/hulk/on_acquiring(mob/living/carbon/human/owner) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 28adcf06f54cb..dc6202d1d3531 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -279,6 +279,13 @@ Has medical facilities." credit_cost = 5000 +/datum/map_template/shuttle/emergency/theatre + suffix = "theatre" + name = "The Emergency Fancy Theatre" + description = "Put on your best show with the emergency theatre on the couple minutes it takes you to get to CentCom! Includes a medbay, cockpit, brig and tons of fancy stuff for the crew" + admin_notes = "Theatre with seats, brig, cockpit and medbay included, for shows or improvisation by the crewmembers" + credit_cost = 5000 + /datum/map_template/shuttle/emergency/pod suffix = "pod" name = "Emergency Pods" @@ -312,6 +319,22 @@ credit_cost = 10000 danger_level = SHUTTLE_DANGER_SUBPAR +/datum/map_template/shuttle/emergency/funnypod + suffix = "funnypod" + name = "Comically Large Escape Pod" + description = "A bunch of scrapped escape pods glued together." + admin_notes = "This shuttle will 100% cause mayhem, as the space avaiable is 1x23 and anyone can open the door in the end." + credit_cost = 2000 + danger_level = SHUTTLE_DANGER_SUBPAR + +/datum/map_template/shuttle/emergency/honkco + suffix = "honkco" + name = "Honk.Co shuttle" + description = "From the creators of Snappop(tm)!, the signature Honk.Co shuttle is now avaiable to purchase, with no usable chairs and filled with bananas, clown artifacts and all types of clowns." + admin_notes = "Bananium shuttle full of clowns and cluwnes that turn hostile if attacked, 4 staffs of the honk mother, bananas everywhere, clown food and space suits and no usable chairs." + credit_cost = 5000 + danger_level = SHUTTLE_DANGER_HIGH + /datum/map_template/shuttle/emergency/discoinferno suffix = "discoinferno" name = "Disco Inferno" diff --git a/code/datums/weakrefs.dm b/code/datums/weakrefs.dm index f87da566c4e90..d7578e4d78961 100644 --- a/code/datums/weakrefs.dm +++ b/code/datums/weakrefs.dm @@ -85,19 +85,19 @@ var/datum/D = locate(reference) return (!QDELETED(D) && D.weak_reference == src) ? D : null - -// QoL stuff /datum/weakref/vv_get_dropdown() - . = list() - VV_DROPDOWN_OPTION(VV_HK_TRACK_REF, "View the original reference") - . += ..() + . = ..() + VV_DROPDOWN_OPTION(VV_HK_WEAKREF_RESOLVE, "Go to reference") /datum/weakref/vv_do_topic(list/href_list) . = ..() - if(href_list[VV_HK_TRACK_REF]) - var/datum/original = resolve() - if(!original) - to_chat(usr, "Failed to resolve. It might be qdeleted already.") + if(!.) + return + + if(href_list[VV_HK_WEAKREF_RESOLVE]) + if(!check_rights(NONE)) return - usr.client.debug_variables(original) + var/datum/R = resolve() + if(R) + usr.client.debug_variables(R) diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index 929c312a64b3a..3f162914b61e5 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -173,6 +173,7 @@ name = "Capture the Flag" icon_state = "yellow" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED has_gravity = STANDARD_GRAVITY airlock_hack_difficulty = AIRLOCK_WIRE_SECURITY_ELITE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 068af46ae5c65..45f1fd3caea5d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1240,6 +1240,7 @@ VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") VV_DROPDOWN_OPTION(VV_HK_RADIATE, "Radiate") VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters") + VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix") VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller") if(greyscale_colors) VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE, "Modify greyscale colors") @@ -1332,6 +1333,10 @@ var/client/C = usr.client C?.open_filter_editor(src) + if(href_list[VV_HK_EDIT_COLOR_MATRIX] && check_rights(R_VAREDIT)) + var/client/C = usr.client + C?.open_color_matrix_editor(src) + /atom/vv_get_header() . = ..() var/refid = REF(src) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index cc30d74f7c456..17214114501de 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -354,6 +354,9 @@ GLOBAL_LIST_EMPTY(cryopod_computers) if(!istype(target) || user.incapacitated() || !target.Adjacent(user) || !Adjacent(user) || !ismob(target) || (!ishuman(user) && !iscyborg(user)) || !istype(user.loc, /turf) || target.buckled) return + if(!target.mind) + to_chat(user, "[target] is not a player controlled mob.") + return if(occupant) to_chat(user, "The cryo pod is already occupied!") return diff --git a/code/game/machinery/fabricators/modular_fabricator.dm b/code/game/machinery/fabricators/modular_fabricator.dm index 2bc67d66cfe17..ef400e362273c 100644 --- a/code/game/machinery/fabricators/modular_fabricator.dm +++ b/code/game/machinery/fabricators/modular_fabricator.dm @@ -69,7 +69,7 @@ if(remote_materials) AddComponent(/datum/component/remote_materials, "modfab", mapload, TRUE, auto_link) else - AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/copper, /datum/material/gold, /datum/material/gold, /datum/material/silver, /datum/material/diamond, /datum/material/uranium, /datum/material/plasma, /datum/material/bluespace, /datum/material/bananium, /datum/material/titanium, /datum/material/plastic, /datum/material/adamantine), 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert))) + AddComponent(/datum/component/material_container, SSmaterials.materialtypes_by_category[MAT_CATEGORY_RIGID], 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert))) . = ..() stored_research = new stored_research_type @@ -493,12 +493,13 @@ use_power(power) materials.use_materials(materials_used) if(is_stack) - var/obj/item/stack/N = new being_built.build_path(A, multiplier) + var/obj/item/stack/N = new being_built.build_path(null, multiplier) + N.forceMove(A) N.update_icon() else for(var/i in 1 to multiplier) - var/obj/item/new_item = new being_built.build_path(A) - + var/obj/item/new_item = new being_built.build_path(null) + new_item.forceMove(A) if(length(picked_materials)) new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount being_built = null diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm new file mode 100644 index 0000000000000..c8dfea81e4994 --- /dev/null +++ b/code/game/machinery/sheetifier.dm @@ -0,0 +1,58 @@ +/obj/machinery/sheetifier + name = "Sheet-meister 2000" + desc = "A very sheety machine" + icon = 'icons/obj/machines/sheetifier.dmi' + icon_state = "base_machine" + density = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + circuit = /obj/item/circuitboard/machine/sheetifier + layer = BELOW_OBJ_LAYER + var/busy_processing = FALSE + +/obj/machinery/sheetifier/Initialize(mapload) + . = ..() + AddComponent(/datum/component/material_container, list(/datum/material/meat), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/food/meat/slab, CALLBACK(src, PROC_REF(CanInsertMaterials)), CALLBACK(src, PROC_REF(AfterInsertMaterials))) + +/obj/machinery/sheetifier/update_overlays() + . = ..() + if(machine_stat & (BROKEN|NOPOWER)) + return + var/mutable_appearance/on_overlay = mutable_appearance(icon, "buttons_on") + . += on_overlay + +/obj/machinery/sheetifier/update_icon_state() + icon_state = "base_machine[busy_processing ? "_processing" : ""]" + return ..() + +/obj/machinery/sheetifier/proc/CanInsertMaterials() + return !busy_processing + +/obj/machinery/sheetifier/proc/AfterInsertMaterials(item_inserted, id_inserted, amount_inserted) + busy_processing = TRUE + update_appearance() + var/datum/material/last_inserted_material = id_inserted + var/mutable_appearance/processing_overlay = mutable_appearance(icon, "processing") + processing_overlay.color = last_inserted_material.color + flick_overlay_static(processing_overlay, src, 64) + addtimer(CALLBACK(src, PROC_REF(finish_processing)), 64) + +/obj/machinery/sheetifier/proc/finish_processing() + busy_processing = FALSE + update_appearance() + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + materials.retrieve_all() //Returns all as sheets + +/obj/machinery/sheetifier/wrench_act(mob/living/user, obj/item/tool) + . = ..() + default_unfasten_wrench(user, tool) + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/sheetifier/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I)) + update_appearance() + return + if(default_deconstruction_crowbar(I)) + return + return ..() diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index a283f551f1eca..55f9515d880e5 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -153,15 +153,16 @@ playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1) if(do_after(user, PLACE_SPEED, target=src)) - if(!D || QDELETED(D)) + if(QDELETED(D)) return if(iswallturf(src) && user && user.loc == temp_loc) //Let's check if everything is still there to_chat(user, "You place the poster!") return - to_chat(user, "The poster falls down!") - D.roll_and_drop(temp_loc) + if(D.loc == src) //Would do QDELETED, but it's also possible the poster gets taken down by dismantling the wall + to_chat(user, "The poster falls down!") + D.roll_and_drop(temp_loc) // Various possible posters follow @@ -171,6 +172,9 @@ name = "ripped poster" desc = "You can't make out anything from the poster's original print. It's ruined." +/obj/structure/sign/poster/ripped/roll_and_drop() + qdel(src) //We shouldn't be an item + /obj/structure/sign/poster/random name = "random poster" // could even be ripped icon_state = "random_anything" diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 049027e4e5852..8dd4963d9f633 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -150,6 +150,7 @@ /obj/effect/mine/proc/triggermine(mob/living/victim) visible_message("[victim] sets off [icon2html(src, viewers(src))] [src]!") + log_combat(victim, src, "triggered a", important = FALSE) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) s.start() @@ -190,6 +191,7 @@ /obj/effect/mine/explosive/mineEffect(mob/victim) explosion(loc, range_devastation, range_heavy, range_light, range_flash) + log_bomber(victim, "has primed a", src, "for detonation (Range:[range_devastation]/[range_heavy]/[range_light]/[range_flash])") /obj/effect/mine/explosive/traitor/toy disarm_time = 2 SECONDS diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index b9cadb303aff8..5653c6e959140 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -109,6 +109,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM name = "firebrand" desc = "An unlit firebrand. It makes you wonder why it's not just called a stick." smoketime = 40 + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/carbon = 2) /obj/item/match/firebrand/Initialize(mapload) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index c976427405fe9..7e70e7d6740e3 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -1057,6 +1057,13 @@ req_components = list(/obj/item/stock_parts/micro_laser = 1) needs_anchored = FALSE +/obj/item/circuitboard/machine/griddle + name = "circuit board (Griddle)" + icon_state = "service" + build_path = /obj/machinery/griddle + req_components = list(/obj/item/stock_parts/micro_laser = 1) + needs_anchored = FALSE + /obj/item/circuitboard/machine/dish_drive name = "dish drive (Machine Board)" icon_state = "service" @@ -1277,6 +1284,13 @@ //Misc +/obj/item/circuitboard/machine/sheetifier + name = "Sheet-meister 2000 (Machine Board)" + icon_state = "supply" + build_path = /obj/machinery/sheetifier + req_components = list( + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/matter_bin = 2) /obj/item/circuitboard/machine/abductor name = "alien board (Report This)" diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index 35f6278449f9c..7e12b97e6cb38 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -48,6 +48,7 @@ make_edible() make_processable() make_leave_trash() + make_grillable() ///This proc adds the edible component, overwrite this if you for some reason want to change some specific args like callbacks. /obj/item/food/proc/make_edible() @@ -68,6 +69,11 @@ /obj/item/food/proc/make_processable() return +///This proc handles grillable components, overwrite if you want different grill results etc. +/obj/item/food/proc/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/badrecipe, rand(20 SECONDS, 30 SECONDS), FALSE) + return + ///This proc handles trash components, overwrite this if you want the object to spawn trash /obj/item/food/proc/make_leave_trash() if(trash_type) diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 069b37e1c2f2b..88ed34df18b6b 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -130,6 +130,9 @@ foodtypes = MEAT | TOXIC w_class = WEIGHT_CLASS_SMALL +/obj/item/food/spiderleg/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/boiledspiderleg, rand(50 SECONDS, 60 SECONDS), TRUE, TRUE) + /obj/item/food/cornedbeef name = "corned beef and cabbage" desc = "Now you can feel like a real tourist vacationing in Ireland." @@ -158,20 +161,168 @@ foodtypes = MEAT | ALCOHOL w_class = WEIGHT_CLASS_SMALL +//Raw + +/obj/item/food/raw_meatball + name = "raw meatball" + desc = "A great meal all round. Not a cord of wood. Kinda raw" + icon = 'icons/obj/food/meat.dmi' + icon_state = "raw_meatball" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) + tastes = list("meat" = 1) + foodtypes = MEAT | RAW + w_class = WEIGHT_CLASS_SMALL + var/meatball_type = /obj/item/food/meatball + var/patty_type = /obj/item/food/raw_patty + +/obj/item/food/raw_meatball/make_grillable() + AddComponent(/datum/component/grillable, meatball_type, rand(30 SECONDS, 40 SECONDS), TRUE) + +/obj/item/food/raw_meatball/make_processable() + AddElement(/datum/element/processable, TOOL_ROLLINGPIN, patty_type, 1, 20) + +/obj/item/food/raw_meatball/human + name = "strange raw meatball" + meatball_type = /obj/item/food/meatball/human + patty_type = /obj/item/food/raw_patty/human + +/obj/item/food/raw_meatball/corgi + name = "raw corgi meatball" + meatball_type = /obj/item/food/meatball/corgi + patty_type = /obj/item/food/raw_patty/corgi + +/obj/item/food/raw_meatball/xeno + name = "raw xeno meatball" + meatball_type = /obj/item/food/meatball/xeno + patty_type = /obj/item/food/raw_patty/xeno + +/obj/item/food/raw_meatball/bear + name = "raw bear meatball" + meatball_type = /obj/item/food/meatball/bear + patty_type = /obj/item/food/raw_patty/bear + +/obj/item/food/raw_meatball/chicken + name = "raw chicken meatball" + meatball_type = /obj/item/food/meatball/chicken + patty_type = /obj/item/food/raw_patty/chicken + +//Cooked + /obj/item/food/meatball name = "meatball" desc = "A great meal all round. Not a cord of wood." icon = 'icons/obj/food/meat.dmi' icon_state = "meatball" food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 2, - /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/protein = 2 ) tastes = list("meat" = 1) foodtypes = MEAT food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL +/obj/item/food/meatball/human + name = "strange meatball" + +/obj/item/food/meatball/corgi + name = "corgi meatball" + +/obj/item/food/meatball/bear + name = "bear meatball" + tastes = list("meat" = 1, "salmon" = 1) + +/obj/item/food/meatball/xeno + name = "xenomorph meatball" + tastes = list("meat" = 1, "acid" = 1) + +/obj/item/food/meatball/chicken + name = "chicken meatball" + tastes = list("chicken" = 1) + icon_state = "chicken_meatball" + +/obj/item/food/raw_patty + name = "raw patty" + desc = "I'm.....NOT REAAADDYY." + icon = 'icons/obj/food/meat.dmi' + icon_state = "raw_patty" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) + tastes = list("meat" = 1) + foodtypes = MEAT | RAW + w_class = WEIGHT_CLASS_SMALL + var/patty_type = /obj/item/food/patty/plain + +/obj/item/food/raw_patty/make_grillable() + AddComponent(/datum/component/grillable, patty_type, rand(30 SECONDS, 40 SECONDS), TRUE) + +/obj/item/food/raw_patty/human + name = "strange raw patty" + patty_type = /obj/item/food/patty/human + +/obj/item/food/raw_patty/corgi + name = "raw corgi patty" + patty_type = /obj/item/food/patty/corgi + +/obj/item/food/raw_patty/bear + name = "raw bear patty" + tastes = list("meat" = 1, "salmon" = 1) + patty_type = /obj/item/food/patty/bear + +/obj/item/food/raw_patty/xeno + name = "raw xenomorph patty" + tastes = list("meat" = 1, "acid" = 1) + patty_type = /obj/item/food/patty/xeno + +/obj/item/food/raw_patty/chicken + name = "raw chicken patty" + tastes = list("chicken" = 1) + patty_type = /obj/item/food/patty/chicken + +/obj/item/food/patty + name = "patty" + desc = "The nanotrasen patty is the patty for you and me!" + icon = 'icons/obj/food/meat.dmi' + icon_state = "patty" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) + tastes = list("meat" = 1) + foodtypes = MEAT + w_class = WEIGHT_CLASS_SMALL + +///Exists purely for the crafting recipe (because itll take subtypes) +/obj/item/food/patty/plain + +/obj/item/food/patty/human + name = "strange patty" + +/obj/item/food/patty/corgi + name = "corgi patty" + +/obj/item/food/patty/bear + name = "bear patty" + tastes = list("meat" = 1, "salmon" = 1) + +/obj/item/food/patty/xeno + name = "xenomorph patty" + tastes = list("meat" = 1, "acid" = 1) + +/obj/item/food/patty/chicken + name = "chicken patty" + tastes = list("chicken" = 1) + icon_state = "chicken_patty" + +/obj/item/food/raw_sausage + name = "raw sausage" + desc = "A piece of mixed, long meat, but then raw" + icon = 'icons/obj/food/meat.dmi' + icon_state = "raw_sausage" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 2) + tastes = list("meat" = 1) + foodtypes = MEAT | RAW + eatverbs = list("bite","chew","nibble","deep throat","gobble","chomp") + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/raw_sausage/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/sausage, rand(60 SECONDS, 75 SECONDS), TRUE) + /obj/item/food/sausage name = "sausage" desc = "A piece of mixed, long meat." @@ -190,6 +341,15 @@ /obj/item/food/sausage/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 3 SECONDS, table_required = TRUE,/* screentip_verb = "Slice"*/) + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/sausage/american, 1, 3 SECONDS, table_required = TRUE) + +/obj/item/food/sausage/american + name = "american sausage" + desc = "Snip." + icon_state = "american_sausage" + +/obj/item/food/sausage/american/make_processable() //or else it would make itself? Lmao + return /obj/item/food/salami name = "salami" @@ -218,7 +378,10 @@ tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) foodtypes = MEAT | RAW w_class = WEIGHT_CLASS_SMALL - microwaved_type = /obj/item/food/khinkali + +/obj/item/food/rawkhinkali/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/khinkali, rand(50 SECONDS, 60 SECONDS), TRUE) + /obj/item/food/khinkali name = "khinkali" desc = "One hundred khinkalis? Do I look like a pig?" diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm index 5c75dfc18830b..86c3d3c2bb629 100644 --- a/code/game/objects/items/food/meatslab.dm +++ b/code/game/objects/items/food/meatslab.dm @@ -1,5 +1,5 @@ /obj/item/food/meat - //custom_materials = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT * 4) + custom_materials = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT * 4) w_class = WEIGHT_CLASS_SMALL icon = 'icons/obj/food/meat.dmi' var/subjectname = "" @@ -10,7 +10,6 @@ desc = "A slab of meat." icon_state = "meat" //dried_type = /obj/item/food//sosjerky/healthy - microwaved_type = /obj/item/food/meat/steak/plain bite_consumption = 3 food_reagents = list( /datum/reagent/consumable/nutriment/protein = 6, @@ -21,10 +20,8 @@ ///Legacy code, handles the coloring of the overlay of the cutlets made from this. var/slab_color = "#FF0000" -/* -/obj/item/food/meat/slab/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/plain) -*/ +/obj/item/food/meat/slab/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? /obj/item/food/meat/slab/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain, 3, 30) @@ -33,14 +30,11 @@ /obj/item/food/meat/slab/human name = "meat" - microwaved_type = /obj/item/food/meat/steak/plain/human tastes = list("tender meat" = 1) foodtypes = MEAT | RAW | GORE -/* -/obj/item/food/meat/slab/human/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/plain/human) -*/ +/obj/item/food/meat/slab/human/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? /obj/item/food/meat/slab/human/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain/human, 3, 30) @@ -73,14 +67,11 @@ /obj/item/food/meat/slab/human/mutant/lizard icon_state = "lizardmeat" desc = "Delicious dino damage." - microwaved_type = /obj/item/food/meat/steak/plain/human/lizard tastes = list("meat" = 4, "scales" = 1) foodtypes = MEAT | RAW | GORE -/* -/obj/item/food/meat/slab/human/mutant/lizard/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/plain/human/lizard) -*/ +/obj/item/food/meat/slab/human/mutant/lizard/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/human/lizard, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) /obj/item/food/meat/slab/human/mutant/plant icon_state = "plantmeat" @@ -156,19 +147,16 @@ desc = "A synthetic slab of... ethical* meat?" foodtypes = RAW | MEAT // If it looks like a duck, quacks like a duck, its probably... +/obj/item/food/meat/slab/synthmeat/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/plain/synth, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/meatproduct name = "meat product" //icon_state = "meatproduct" - microwaved_type = /obj/item/food/meat/steak/meatproduct desc = "A slab of station reclaimed and chemically processed meat product." tastes = list("meat flavoring" = 2, "modified starches" = 2, "natural & artificial dyes" = 1, "butyric acid" = 1) // its supposed to be various processed chemicals seen in very processed food. Butyric acid is a reference to how a certain North American Candymaker puts a chemical commonly seen in vomit into chocolate foodtypes = RAW | MEAT -/* -/obj/item/food/meat/slab/meatproduct/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/meatproduct) -*/ - /obj/item/food/meat/slab/monkey name = "monkey meat" foodtypes = RAW | MEAT @@ -199,15 +187,12 @@ name = "killer tomato meat" desc = "A slice from a huge tomato." icon_state = "tomatomeat" - microwaved_type = /obj/item/food/meat/steak/killertomato food_reagents = list(/datum/reagent/consumable/nutriment = 2) tastes = list("tomato" = 1) foodtypes = FRUIT // Yeah, tomatoes are FRUIT. Bite me. -/* -/obj/item/food/meat/slab/killertomato/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/killertomato) -*/ +/obj/item/food/meat/slab/killertomato/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/killertomato, rand(70 SECONDS, 85 SECONDS), TRUE, TRUE) /obj/item/food/meat/slab/killertomato/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/killertomato, 3, 30) @@ -216,7 +201,6 @@ name = "bear meat" desc = "A very manly slab of meat." icon_state = "bearmeat" - microwaved_type = /obj/item/food/meat/steak/bear food_reagents = list( /datum/reagent/consumable/nutriment/protein = 16, /datum/reagent/medicine/morphine = 5, @@ -226,10 +210,8 @@ tastes = list("meat" = 1, "salmon" = 1) foodtypes = RAW | MEAT -/* -/obj/item/food/meat/slab/bear/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/bear) -*/ +/obj/item/food/meat/slab/bear/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/bear, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE) /obj/item/food/meat/slab/bear/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/bear, 3, 30) @@ -238,7 +220,6 @@ name = "xeno meat" desc = "A slab of meat." icon_state = "xenomeat" - microwaved_type = /obj/item/food/meat/steak/xeno food_reagents = list( /datum/reagent/consumable/nutriment/protein = 8, /datum/reagent/consumable/nutriment/vitamin = 3 @@ -247,19 +228,16 @@ tastes = list("meat" = 1, "acid" = 1) foodtypes = RAW | MEAT -/* -/obj/item/food/meat/slab/xeno/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/xeno) -*/ - /obj/item/food/meat/slab/xeno/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/xeno, 3, 30) +/obj/item/food/meat/slab/xeno/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/xeno, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/spider name = "spider meat" desc = "A slab of spider meat. That is so Kafkaesque." icon_state = "spidermeat" - microwaved_type = /obj/item/food/meat/steak/spider food_reagents = list( /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/toxin = 3, @@ -268,14 +246,12 @@ tastes = list("cobwebs" = 1) foodtypes = RAW | MEAT | TOXIC -/* -/obj/item/food/meat/slab/spider/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/spider) -*/ - /obj/item/food/meat/slab/spider/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/spider, 3, 30) +/obj/item/food/meat/slab/spider/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/spider, rand(40 SECONDS, 70 SECONDS), TRUE, TRUE) + /obj/item/food/meat/slab/goliath name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." @@ -320,7 +296,6 @@ name = "raw piece of bacon" desc = "A raw piece of bacon." icon_state = "bacon" - microwaved_type = /obj/item/food/meat/bacon bite_consumption = 2 food_reagents = list( /datum/reagent/consumable/nutriment/protein = 2, @@ -329,10 +304,8 @@ tastes = list("bacon" = 1) foodtypes = RAW | MEAT | BREAKFAST -/* -/obj/item/food/meat/rawbacon/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/bacon) -*/ +/obj/item/food/meat/rawbacon/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/bacon, rand(25 SECONDS, 45 SECONDS), TRUE, TRUE) /obj/item/food/meat/bacon name = "piece of bacon" @@ -349,7 +322,6 @@ /obj/item/food/meat/slab/gondola name = "gondola meat" desc = "According to legends of old, consuming raw gondola flesh grants one inner peace." - microwaved_type = /obj/item/food/meat/steak/gondola food_reagents = list( /datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/tranquility = 5, @@ -358,18 +330,15 @@ tastes = list("meat" = 4, "tranquility" = 1) foodtypes = RAW | MEAT -/* -/obj/item/food/meat/slab/gondola/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/gondola) -*/ +/obj/item/food/meat/slab/gondola/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/gondola, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? /obj/item/food/meat/slab/gondola/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/gondola, 3, 30) /obj/item/food/meat/slab/penguin name = "penguin meat" - //icon_state = "birdmeat" - microwaved_type = /obj/item/food/meat/steak/penguin + icon_state = "birdmeat" desc = "A slab of penguin meat." food_reagents = list( /datum/reagent/consumable/nutriment/protein = 4, @@ -377,10 +346,8 @@ ) tastes = list("beef" = 1, "cod fish" = 1) -/* -/obj/item/food/meat/slab/penguin/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/penguin) -*/ +/obj/item/food/meat/slab/penguin/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/penguin, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? /obj/item/food/meat/slab/penguin/make_processable() . = ..() @@ -399,10 +366,8 @@ tastes = list("raw crab" = 1) foodtypes = RAW | MEAT -/* -/obj/item/food/meat/rawcrab/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/crab) -*/ +/obj/item/food/meat/slab/rawcrab/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/crab, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? /obj/item/food/meat/crab name = "crab meat" @@ -418,17 +383,15 @@ /obj/item/food/meat/slab/chicken name = "chicken meat" - //icon_state = "birdmeat" - microwaved_type = /obj/item/food/meat/steak/chicken + icon_state = "birdmeat" desc = "A slab of raw chicken. Remember to wash your hands!" food_reagents = list( /datum/reagent/consumable/nutriment/protein = 6 ) //low fat tastes = list("chicken" = 1) -/* -/obj/item/food/meat/slab/chicken/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/steak/chicken) -*/ + +/obj/item/food/meat/slab/chicken/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/chicken, rand(30 SECONDS, 90 SECONDS), TRUE, TRUE) //Add medium rare later maybe? (no this is chicken) /obj/item/food/meat/slab/chicken/make_processable() . = ..() @@ -529,17 +492,17 @@ /obj/item/food/meat/steak/penguin name = "penguin steak" - //icon_state = "birdsteak" + icon_state = "birdsteak" tastes = list("beef" = 1, "cod fish" = 1) /obj/item/food/meat/steak/chicken name = "chicken steak" //Can you have chicken steaks? Maybe this should be renamed once it gets new sprites. //I concur - //icon_state = "birdsteak" + icon_state = "birdsteak" tastes = list("chicken" = 1) /obj/item/food/meat/steak/plain/human/lizard name = "lizard steak" - //icon_state = "birdsteak" + icon_state = "birdsteak" //cause they're birds. Get it? tastes = list("juicy chicken" = 3, "scales" = 1) foodtypes = MEAT @@ -554,7 +517,7 @@ //icon_state = "meatproductsteak" tastes = list("enhanced char" = 2, "suspicious tenderness" = 2, "natural & artificial dyes" = 2, "emulsifying agents" = 1) -/obj/item/food/meat/steak/synth +/obj/item/food/meat/steak/plain/synth name = "synthsteak" desc = "A synthetic meat steak. It doesn't look quite right, now does it?" icon_state = "meatsteak" @@ -592,19 +555,16 @@ name = "raw cutlet" desc = "A raw meat cutlet." icon_state = "rawcutlet" - microwaved_type = /obj/item/food/meat/cutlet/plain bite_consumption = 2 food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 1 + /datum/reagent/consumable/nutriment/protein = 2 ) tastes = list("meat" = 1) foodtypes = MEAT | RAW var/meat_type = "meat" -/* -/obj/item/food/meat/rawcutlet/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/plain) -*/ +/obj/item/food/meat/rawcutlet/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/plain, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom) . = ..() @@ -620,14 +580,11 @@ foodtypes = MEAT /obj/item/food/meat/rawcutlet/plain/human - microwaved_type = /obj/item/food/meat/cutlet/plain/human tastes = list("tender meat" = 1) foodtypes = MEAT | RAW | GORE -/* -/obj/item/food/meat/rawcutlet/plain/human/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/plain/human) -*/ +/obj/item/food/meat/rawcutlet/plain/human/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/plain/human, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/plain/human/OnCreatedFromProcessing(mob/living/user, obj/item/I, list/chosen_option, atom/original_atom) . = ..() @@ -644,72 +601,51 @@ name = "raw killer tomato cutlet" tastes = list("tomato" = 1) foodtypes = FRUIT - microwaved_type = /obj/item/food/meat/cutlet/killertomato -/* -/obj/item/food/meat/rawcutlet/killertomato/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/killertomato) -*/ +/obj/item/food/meat/rawcutlet/killertomato/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/killertomato, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/bear name = "raw bear cutlet" tastes = list("meat" = 1, "salmon" = 1) - microwaved_type = /obj/item/food/meat/cutlet/bear -/* -/obj/item/food/meat/rawcutlet/bear/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/bear) -*/ +/obj/item/food/meat/rawcutlet/bear/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/bear, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/xeno name = "raw xeno cutlet" tastes = list("meat" = 1, "acid" = 1) - microwaved_type = /obj/item/food/meat/cutlet/xeno -/* -/obj/item/food/meat/rawcutlet/xeno/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/xeno) -*/ +/obj/item/food/meat/rawcutlet/xeno/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/xeno, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/spider name = "raw spider cutlet" tastes = list("cobwebs" = 1) - microwaved_type = /obj/item/food/meat/cutlet/spider -/* -/obj/item/food/meat/rawcutlet/spider/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/spider) -*/ +/obj/item/food/meat/rawcutlet/spider/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/spider, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/gondola name = "raw gondola cutlet" tastes = list("meat" = 1, "tranquility" = 1) - microwaved_type = /obj/item/food/meat/cutlet/gondola -/* -/obj/item/food/meat/rawcutlet/gondola/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/gondola) -*/ +/obj/item/food/meat/rawcutlet/gondola/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/gondola, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/penguin name = "raw penguin cutlet" tastes = list("beef" = 1, "cod fish" = 1) - microwaved_type = /obj/item/food/meat/cutlet/penguin -/* -/obj/item/food/meat/rawcutlet/penguin/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/penguin) -*/ +/obj/item/food/meat/rawcutlet/penguin/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/penguin, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/chicken name = "raw chicken cutlet" tastes = list("chicken" = 1) - microwaved_type = /obj/item/food/meat/cutlet/chicken -/* -/obj/item/food/meat/rawcutlet/chicken/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/chicken) -*/ +/obj/item/food/meat/rawcutlet/chicken/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/chicken, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/meat/rawcutlet/grub //grub meat is small, so its in cutlets name = "redgrub cutlet" @@ -725,10 +661,8 @@ foodtypes = RAW | MEAT | TOXIC microwaved_type = /obj/item/food/meat/cutlet/grub -/* -/obj/item/food/meat/rawcutlet/grub/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/meat/cutlet/grub) -*/ +/obj/item/food/meat/rawcutlet/grub/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/grub, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE) //Cooked cutlets diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 57300f36796e4..b6b5df75ec0c1 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -59,6 +59,14 @@ foodtypes = GROSS w_class = WEIGHT_CLASS_SMALL +/obj/item/food/badrecipe/Initialize() + . = ..() + RegisterSignal(src, COMSIG_ITEM_GRILLED, PROC_REF(OnGrill)) + +///Prevents grilling burnt shit from well, burning. +/obj/item/food/badrecipe/proc/OnGrill() + return COMPONENT_HANDLED_GRILLING + /obj/item/food/badrecipe/burn() if(QDELETED(src)) return @@ -69,6 +77,9 @@ SSfire_burning.processing -= src qdel(src) +// We override the parent procs here to prevent burned messes from cooking into burned messes. +/obj/item/food/badrecipe/make_grillable() + return /obj/item/food/spidereggs name = "spider eggs" diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm index 8b5fc86d82cb6..9f977a7702882 100644 --- a/code/game/objects/items/food/sandwichtoast.dm +++ b/code/game/objects/items/food/sandwichtoast.dm @@ -9,24 +9,10 @@ /datum/reagent/consumable/nutriment/vitamin = 1 ) tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1) - microwaved_type = /obj/item/food/toastedsandwich foodtypes = GRAIN | VEGETABLES food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL -/obj/item/food/toastedsandwich - name = "toasted sandwich" - desc = "Now if you only had a pepper bar." - icon = 'icons/obj/food/burgerbread.dmi' - icon_state = "toastedsandwich" - trash_type = /obj/item/trash/plate - food_reagents = list( - /datum/reagent/consumable/nutriment = 6, - /datum/reagent/carbon = 2 - ) - tastes = list("toast" = 1) - foodtypes = GRAIN - /obj/item/food/grilled_cheese_sandwich name = "grilled cheese sandwich" desc = "A warm, melty sandwich that goes perfectly with tomato soup." @@ -43,6 +29,20 @@ food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL +/obj/item/food/cheese_sandwich + name = "cheese sandwich" + desc = "A light snack for a warm day. ...but what if you grilled it?" + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "sandwich" + trash_type = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/protein = 3, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("bread" = 1, "cheese" = 1) + foodtypes = GRAIN | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/cheese_sandwich/make_grillable() + AddComponent(/datum/component/grillable, /obj/item/food/grilled_cheese_sandwich, rand(30 SECONDS, 60 SECONDS), TRUE) + /obj/item/food/jellysandwich name = "jelly sandwich" desc = "You wish you had some peanut butter to go with this..." diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 3cc4a0a6d37a9..55047742d7d46 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -82,6 +82,7 @@ throwforce = 5 throw_speed = 3 throw_range = 7 + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 1.5) w_class = WEIGHT_CLASS_NORMAL attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") custom_price = 20 diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 5df5f5d218f76..e4f792a46c54d 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -150,7 +150,7 @@ block_upgrade_walk = 1 lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - custom_materials = null + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 10) resistance_flags = FLAMMABLE transparent = FALSE max_integrity = 55 diff --git a/code/game/objects/items/stacks/ores/ore_type.dm b/code/game/objects/items/stacks/ores/ore_type.dm index 817e5823af784..8220463da6814 100644 --- a/code/game/objects/items/stacks/ores/ore_type.dm +++ b/code/game/objects/items/stacks/ores/ore_type.dm @@ -84,7 +84,7 @@ STACKSIZE_MACRO(/obj/item/stack/ore/glass) icon_state = "volcanic_sand" singular_name = "volcanic ash pile" -STACKSIZE_MACRO(/obj/item/stack/ore/basalt) +STACKSIZE_MACRO(/obj/item/stack/ore/glass/basalt) /* Plasma ore */ diff --git a/code/game/objects/items/stacks/sheets/mineral/exotics.dm b/code/game/objects/items/stacks/sheets/mineral/exotics.dm index 0c46b0d5256cc..0453b51e9766d 100644 --- a/code/game/objects/items/stacks/sheets/mineral/exotics.dm +++ b/code/game/objects/items/stacks/sheets/mineral/exotics.dm @@ -19,6 +19,7 @@ Exotic mineral Sheets point_value = 50 merge_type = /obj/item/stack/sheet/mineral/bananium material_type = /datum/material/bananium + walltype = /turf/closed/wall/mineral/bananium /obj/item/stack/sheet/mineral/bananium/get_recipes() return GLOB.bananium_recipes diff --git a/code/game/objects/items/stacks/sheets/mineral/exotics_recipes.dm b/code/game/objects/items/stacks/sheets/mineral/exotics_recipes.dm index 8934f8c3670f6..3ef7790683d50 100644 --- a/code/game/objects/items/stacks/sheets/mineral/exotics_recipes.dm +++ b/code/game/objects/items/stacks/sheets/mineral/exotics_recipes.dm @@ -27,3 +27,10 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ )) STACKSIZE_MACRO(/obj/item/stack/sheet/mineral/abductor) + +/* Meat */ +GLOBAL_LIST_INIT(meat_recipes, list ( + //new/datum/stack_recipe("meat recipe example", /obj/structure/bed/meat, 2, one_per_turf = TRUE, on_floor = TRUE), + )) + +STACKSIZE_MACRO(/obj/item/stack/sheet/meat) diff --git a/code/game/objects/items/stacks/sheets/mineral/materials.dm b/code/game/objects/items/stacks/sheets/mineral/materials.dm index 3730ab8a64b7c..256533a7ab67a 100644 --- a/code/game/objects/items/stacks/sheets/mineral/materials.dm +++ b/code/game/objects/items/stacks/sheets/mineral/materials.dm @@ -28,6 +28,7 @@ Mineral Sheets mats_per_unit = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) sheettype = "sandstone" merge_type = /obj/item/stack/sheet/mineral/sandstone + walltype = /turf/closed/wall/mineral/sandstone /obj/item/stack/sheet/mineral/sandstone/get_recipes() return GLOB.sandstone_recipes @@ -45,6 +46,7 @@ Mineral Sheets point_value = 25 merge_type = /obj/item/stack/sheet/mineral/diamond material_type = /datum/material/diamond + walltype = /turf/closed/wall/mineral/diamond /obj/item/stack/sheet/mineral/diamond/get_recipes() return GLOB.diamond_recipes @@ -62,6 +64,7 @@ Mineral Sheets point_value = 20 merge_type = /obj/item/stack/sheet/mineral/uranium material_type = /datum/material/uranium + walltype = /turf/closed/wall/mineral/uranium /obj/item/stack/sheet/mineral/uranium/get_recipes() return GLOB.uranium_recipes @@ -81,6 +84,7 @@ Mineral Sheets point_value = 20 merge_type = /obj/item/stack/sheet/mineral/plasma material_type = /datum/material/plasma + walltype = /turf/closed/wall/mineral/plasma /obj/item/stack/sheet/mineral/plasma/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins licking \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -117,6 +121,7 @@ Mineral Sheets point_value = 20 merge_type = /obj/item/stack/sheet/mineral/gold material_type = /datum/material/gold + walltype = /turf/closed/wall/mineral/gold /obj/item/stack/sheet/mineral/gold/get_recipes() return GLOB.gold_recipes @@ -135,6 +140,7 @@ Mineral Sheets merge_type = /obj/item/stack/sheet/mineral/silver material_type = /datum/material/silver tableVariant = /obj/structure/table/optable + walltype = /turf/closed/wall/mineral/silver /obj/item/stack/sheet/mineral/silver/get_recipes() return GLOB.silver_recipes @@ -174,6 +180,7 @@ Mineral Sheets point_value = 20 merge_type = /obj/item/stack/sheet/mineral/titanium material_type = /datum/material/titanium + walltype = /turf/closed/wall/mineral/titanium /obj/item/stack/sheet/mineral/titanium/get_recipes() return GLOB.titanium_recipes @@ -195,6 +202,7 @@ Mineral Sheets point_value = 45 merge_type = /obj/item/stack/sheet/mineral/plastitanium material_flags = NONE + walltype = /turf/closed/wall/mineral/plastitanium /obj/item/stack/sheet/mineral/plastitanium/get_recipes() return GLOB.plastitanium_recipes diff --git a/code/game/objects/items/stacks/sheets/miscellaneous/miscellaneous_mats.dm b/code/game/objects/items/stacks/sheets/miscellaneous/miscellaneous_mats.dm index b3b8638c62526..0c2b11a72fed6 100644 --- a/code/game/objects/items/stacks/sheets/miscellaneous/miscellaneous_mats.dm +++ b/code/game/objects/items/stacks/sheets/miscellaneous/miscellaneous_mats.dm @@ -135,3 +135,17 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ desc = "A source of raw socialism, capable of bringing forth the prophesized Soviet Golem." icon_state = "sheet-stalinium" merge_type = /obj/item/stack/sheet/stalinium + +/obj/item/stack/sheet/meat + name = "meat sheets" + desc = "Something's bloody meat compressed into a nice solid sheet" + singular_name = "meat sheet" + icon_state = "sheet-meat" + material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR + mats_per_unit = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT) + merge_type = /obj/item/stack/sheet/meat + material_type = /datum/material/meat + material_modifier = 1 //None of that wussy stuff + +/obj/item/stack/sheet/meat/get_recipes() + return GLOB.meat_recipes diff --git a/code/game/objects/items/stacks/sheets/organic/wood.dm b/code/game/objects/items/stacks/sheets/organic/wood.dm index ba78f3e6e14af..4f214afd20bc5 100644 --- a/code/game/objects/items/stacks/sheets/organic/wood.dm +++ b/code/game/objects/items/stacks/sheets/organic/wood.dm @@ -16,11 +16,14 @@ Woods Sheets icon_state = "sheet-wood" item_state = "sheet-wood" icon = 'icons/obj/stacks/organic.dmi' + mats_per_unit = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT) sheettype = "wood" armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0) resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/wood + material_type = /datum/material/wood grind_results = list(/datum/reagent/carbon = 20) + walltype = /turf/closed/wall/mineral/wood /obj/item/stack/sheet/wood/get_recipes() return GLOB.wood_recipes diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 16515791b97ea..1103a669f4b75 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -13,6 +13,8 @@ material_flags = MATERIAL_EFFECTS var/sheettype = null //this is used for girders in the creation of walls/false walls var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity. + ///What type of wall does this sheet spawn + var/walltype /obj/item/stack/sheet/Initialize(mapload, new_amount, merge) . = ..() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 4baa1301b6b70..acbd02ae01b91 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -12,6 +12,7 @@ throw_range = 7 max_amount = 60 novariants = TRUE + material_flags = MATERIAL_EFFECTS /// What type of turf does this tile produce. var/turf_type = null /// Determines certain welder interactions. @@ -26,6 +27,24 @@ if(tile_reskin_types) tile_reskin_types = tile_reskin_list(tile_reskin_types) +/obj/item/stack/tile/examine(mob/user) + . = ..() + if(throwforce && !is_cyborg) //do not want to divide by zero or show the message to borgs who can't throw + var/verb + switch(CEILING(MAX_LIVING_HEALTH / throwforce, 1)) //throws to crit a human + if(1 to 3) + verb = "superb" + if(4 to 6) + verb = "great" + if(7 to 9) + verb = "good" + if(10 to 12) + verb = "fairly decent" + if(13 to 15) + verb = "mediocre" + if(!verb) + return + . += "Those could work as a [verb] throwing weapon." /obj/item/stack/tile/attackby(obj/item/W, mob/user, params) if (W.tool_behaviour == TOOL_WELDER) @@ -498,7 +517,7 @@ /obj/item/stack/tile/iron name = "floor tile" singular_name = "floor tile" - desc = "Those could work as a pretty decent throwing weapon." + desc = "The ground you walk on." icon_state = "tile" item_state = "tile" force = 6 @@ -596,3 +615,18 @@ icon_state = "tile_drydock" custom_materials = list(/datum/material/iron=1000, /datum/material/plasma=1000) turf_type = /turf/open/floor/dock/drydock + +/obj/item/stack/tile/material + name = "floor tile" + singular_name = "floor tile" + desc = "The ground you walk on." + throwforce = 10 + icon_state = "material_tile" + turf_type = /turf/open/floor/material + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + merge_type = /obj/item/stack/tile/material + +/obj/item/stack/tile/material/place_tile(turf/open/target_plating, mob/user) + . = ..() + var/turf/open/floor/material/floor = . + floor?.set_custom_materials(mats_per_unit) diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index dba7a2e16b003..28e2eef2001fd 100644 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -22,6 +22,7 @@ // Built automatically from the corresponding vending machine. // If null, considered to be full. Otherwise, is list(/typepath = amount). var/list/products + var/list/product_categories var/list/contraband var/list/premium @@ -40,7 +41,7 @@ . += "It can restock [num] item\s." /obj/item/vending_refill/get_part_rating() - if (!products || !contraband || !premium) + if (!products || !product_categories || !contraband || !premium) return INFINITY . = 0 for(var/key in products) @@ -49,3 +50,9 @@ . += contraband[key] for(var/key in premium) . += premium[key] + for (var/list/category as anything in product_categories) + var/list/products = category["products"] + for (var/product_key in products) + . += products[product_key] + + return . diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 8c2d32d682cdc..a85793b9fc005 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -689,6 +689,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 force = 13 throwforce = 6 attack_verb = list("beat", "smacked") + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5) w_class = WEIGHT_CLASS_HUGE var/homerun_ready = 0 var/homerun_able = 0 diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 64b66506c069b..b3ba40a6ef6b4 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -4,9 +4,12 @@ if(QDELETED(src)) stack_trace("[src] taking damage after deletion") return + if(obj_integrity <= 0) + stack_trace("[src] taking damage while having <= 0 integrity") + return if(sound_effect) play_attack_sound(damage_amount, damage_type, damage_flag) - if((resistance_flags & INDESTRUCTIBLE) || obj_integrity <= 0) + if(resistance_flags & INDESTRUCTIBLE) return damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration) if(damage_amount < DAMAGE_PRECISION) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index decf5bd890d9c..026b9dc5561a1 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -238,6 +238,7 @@ name = "painting frame" desc = "The perfect showcase for your favorite deathtrap memories." icon = 'icons/obj/decals.dmi' + custom_materials = list(/datum/material/wood = 2000) flags_1 = NONE icon_state = "frame-empty" result_path = /obj/structure/sign/painting @@ -249,6 +250,7 @@ icon = 'icons/obj/decals.dmi' icon_state = "frame-empty" base_icon_state = "frame" //temporal replacement before the update_appearance() port + custom_materials = list(/datum/material/wood = 2000) buildable_sign = FALSE ///Canvas we're currently displaying. var/obj/item/canvas/current_canvas diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 62fec0c853c3d..e9fd7f1bbf230 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -121,6 +121,7 @@ //Overlay is similar enough for both that we can use the same mask for both . += emissive_appearance(icon, icon_locked, src.layer) + ADD_LUM_SOURCE(src, LUM_SOURCE_MANAGED_OVERLAY) . += locked ? icon_locked : icon_unlocked /obj/structure/closet/update_appearance(updates=ALL) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 74c01cb144705..b016188c0b4c9 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -168,7 +168,7 @@ qdel(src) return - if(S.sheettype && S.sheettype != "runed") + if(S.sheettype != "runed") var/M = S.sheettype if(state == GIRDER_DISPLACED) if(S.get_amount() < 2) @@ -195,7 +195,16 @@ S.use(2) balloon_alert(user, "You add plating.") var/turf/T = get_turf(src) - T.PlaceOnTop(text2path("/turf/closed/wall/mineral/[M]")) + if(S.walltype) + T.PlaceOnTop(S.walltype) + else + var/turf/newturf = T.PlaceOnTop(/turf/closed/wall/material) + var/list/material_list = list() + if(S.material_type) + material_list[SSmaterials.GetMaterialRef(S.material_type)] = MINERAL_MATERIAL_AMOUNT * 2 + if(material_list) + newturf.set_custom_materials(material_list) + transfer_fingerprints_to(T) qdel(src) return diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 8513d9835c88b..3b3b2f65a15a0 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -5,6 +5,9 @@ desc = "A board for pinning important notices upon." icon = 'icons/obj/stationobjs.dmi' icon_state = "nboard00" + custom_materials = list( + /datum/material/wood = MINERAL_MATERIAL_AMOUNT, + ) layer = ABOVE_WINDOW_LAYER density = FALSE anchored = TRUE diff --git a/code/game/turfs/closed/wall/material_walls.dm b/code/game/turfs/closed/wall/material_walls.dm new file mode 100644 index 0000000000000..14a9087bbd4d4 --- /dev/null +++ b/code/game/turfs/closed/wall/material_walls.dm @@ -0,0 +1,26 @@ +/turf/closed/wall/material + name = "wall" + desc = "A huge chunk of material used to separate rooms." + icon = 'icons/turf/walls/materialwall.dmi' + icon_state = "materialwall-0" + base_icon_state = "materialwall" + canSmoothWith = list(/turf/closed/wall/material) + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MATERIAL_WALLS, SMOOTH_GROUP_WALLS) + canSmoothWith = list(SMOOTH_GROUP_MATERIAL_WALLS) + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + +/turf/closed/wall/material/break_wall() + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) + if(girder_type) + return new girder_type(src) + +/turf/closed/wall/material/devastate_wall() + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) + +/turf/closed/wall/material/mat_update_desc(mat) + desc = "A huge chunk of [mat] used to separate rooms." diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 1cb488f34eb23..6dcd409cc3e94 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -171,6 +171,7 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WOOD_WALLS) canSmoothWith = list(SMOOTH_GROUP_WOOD_WALLS) + custom_materials = list(/datum/material/wood = 4000) max_integrity = 200 damage_deflection = 0 diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index df8f24a35a679..8fc40fedaf0ea 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -126,9 +126,17 @@ if(user && !silent) to_chat(user, "You remove the floor tile.") if(floor_tile && make_tile) - new floor_tile(src) + spawn_tile() return make_plating() +/turf/open/floor/proc/has_tile() + return floor_tile + +/turf/open/floor/proc/spawn_tile() + if(!has_tile()) + return null + return new floor_tile(src) + /turf/open/floor/singularity_pull(S, current_size) ..() if(current_size == STAGE_THREE) @@ -287,3 +295,18 @@ variants += list("[icon_state]" = 1) for(var/i in 1 to max) variants += list("[icon_state][i]" = 1) + +/turf/open/floor/material + name = "floor" + icon_state = "materialfloor" + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + floor_tile = /obj/item/stack/tile/material + +/turf/open/floor/material/has_tile() + return LAZYLEN(custom_materials) + +/turf/open/floor/material/spawn_tile() + . = ..() + if(.) + var/obj/item/stack/tile = . + tile.set_mats_per_unit(custom_materials, 1) diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index d6e5d3c22e004..f76676a0d20a9 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -82,7 +82,7 @@ if(do_after(user, 30, target = src)) if (R.get_amount() >= 1 && !istype(src, /turf/open/floor/engine)) PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) - playsound(src, 'sound/items/deconstruct.ogg', 80, 1) + playsound(src, 'sound/items/deconstruct.ogg', 80, TRUE) R.use(1) to_chat(user, "You reinforce the floor.") return @@ -111,7 +111,7 @@ return var/obj/item/stack/tile/tile = C tile.place_tile(src) - playsound(src, 'sound/weapons/genhit.ogg', 50, 1) + playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) else to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.") diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f630ba0bb35ca..760a3a6e2a0fe 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -130,6 +130,15 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) if (opacity) directional_opacity = ALL_CARDINALS + if(custom_materials) + + var/temp_list = list() + for(var/i in custom_materials) + temp_list[SSmaterials.GetMaterialRef(i)] = custom_materials[i] //Get the proper instanced version + + custom_materials = null //Null the list to prepare for applying the materials properly + set_custom_materials(temp_list) + ComponentInitialize() if(isopenturf(src)) var/turf/open/O = src diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ee0b2723b089e..f8322f8cd4cec 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -18,6 +18,7 @@ GLOBAL_PROTECT(admin_verbs_default) /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ /client/proc/stop_sounds, /client/proc/mark_datum_mapview, + /client/proc/tag_datum_mapview, /client/proc/requests, ) GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) @@ -76,6 +77,7 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/delete_book, /client/proc/cmd_admin_send_pda_msg, /client/proc/fax_panel, /*send a paper to fax*/ + /datum/admins/proc/display_tags, ) GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel, /client/proc/old_ban_panel)) GLOBAL_PROTECT(admin_verbs_ban) diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index b06241e919add..8a58558416126 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -172,7 +172,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) if(named_arg) named_args[named_arg] = value["value"] else - . += value["value"] + . += LIST_VALUE_WRAP_LISTS(value["value"]) if(LAZYLEN(named_args)) . += named_args diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 0e4e9c3b412cf..4e327ef6e3992 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -39,6 +39,9 @@ GLOBAL_PROTECT(href_token) /// Banning Panel var/datum/admin_ban_panel/ban_panel + /// A lazylist of tagged datums, for quick reference with the View Tags verb + var/list/tagged_datums + /datum/admins/New(datum/admin_rank/R, ckey, force_active = FALSE, protected) if(IsAdminAdvancedProcCall()) var/msg = " has tried to elevate permissions!" diff --git a/code/modules/admin/tag.dm b/code/modules/admin/tag.dm new file mode 100644 index 0000000000000..beb202325edbd --- /dev/null +++ b/code/modules/admin/tag.dm @@ -0,0 +1,108 @@ +/** + * Inserts the target_datum into [/datum/admins/var/tagged_datums], for later reference. + * + * Arguments: + * * target_datum - The datum you want to create a tag for + */ +/datum/admins/proc/add_tagged_datum(datum/target_datum) + if(LAZYFIND(tagged_datums, target_datum)) + to_chat(owner, "[target_datum] is already tagged!") + return + + LAZYADD(tagged_datums, target_datum) + RegisterSignal(target_datum, COMSIG_PARENT_QDELETING, PROC_REF(handle_tagged_del), override = TRUE) + to_chat(owner, "[target_datum] has been tagged.") + +/// Get ahead of the curve with deleting +/datum/admins/proc/handle_tagged_del(datum/source) + SIGNAL_HANDLER + + if(owner) + to_chat(owner, "Tagged datum [source] ([source.type]) has been deleted.") + remove_tagged_datum(source, silent = TRUE) + +/** + * Attempts to remove the specified datum from [/datum/admins/var/tagged_datums] if it exists + * + * Arguments: + * * target_datum - The datum you want to remove from the tagged_datums list + * * silent - If TRUE, won't print messages to the owner's chat + */ +/datum/admins/proc/remove_tagged_datum(datum/target_datum, silent=FALSE) + if(!istype(target_datum)) + return + + if(LAZYFIND(tagged_datums, target_datum)) + LAZYREMOVE(tagged_datums, target_datum) + if(!silent) + to_chat(owner, "[target_datum] has been untagged.") + else if(!silent) + to_chat(owner, "[target_datum] was not already tagged.") + +/// Quick define for readability +#define TAG_DEL(X) "(UNTAG)" +#define TAG_MARK(X) "(MARK)" +#define TAG_SIMPLE_HEALTH(X) "Health: [X.health]" +#define TAG_CARBON_HEALTH(X) "Health: [X.health] (\ + [X.getBruteLoss()] \ + [X.getFireLoss()] \ + [X.getToxLoss()] \ + [X.getOxyLoss()]\ + [X.getCloneLoss() ? " [X.getCloneLoss()]" : ""])" + +/// Display all of the tagged datums +/datum/admins/proc/display_tags() + set category = "Admin" + set name = "View Tags" + + if (!istype(src, /datum/admins)) + src = usr.client.holder + if (!istype(src, /datum/admins)) + to_chat(usr, "Error: you are not an admin!") + return + + var/index = 0 + var/list/dat = list("
Tag Menu

") + + dat += "
Refresh
" + if(LAZYLEN(tagged_datums)) + for(var/datum/iter_datum as anything in tagged_datums) + index++ + var/specific_info + + if(isnull(iter_datum)) + dat += "\t[index]: Null reference - Check runtime logs!" + stack_trace("Null datum found in tagged datum menu! User: [usr]") + continue + else if(iscarbon(iter_datum)) + var/mob/living/carbon/resolved_carbon = iter_datum + specific_info = "[TAG_CARBON_HEALTH(resolved_carbon)] | [AREACOORD(resolved_carbon)] [ADMIN_PP(iter_datum)] [ADMIN_FLW(iter_datum)]" + else if(isliving(iter_datum)) + var/mob/living/resolved_living = iter_datum + specific_info = "[TAG_SIMPLE_HEALTH(resolved_living)] | [AREACOORD(resolved_living)] [ADMIN_PP(iter_datum)] [ADMIN_FLW(iter_datum)]" + else if(ismob(iter_datum)) + var/atom/resolved_atom = iter_datum // needed for ADMIN_JMP + specific_info = "[AREACOORD(resolved_atom)] [ADMIN_PP(iter_datum)] [ADMIN_FLW(iter_datum)]" + else if(ismovable(iter_datum)) + var/atom/resolved_atom = iter_datum // needed for ADMIN_JMP + specific_info = "[AREACOORD(resolved_atom)] [ADMIN_FLW(iter_datum)]" + else if(isatom(iter_datum)) + var/atom/resolved_atom = iter_datum // needed for ADMIN_JMP + specific_info = "[AREACOORD(resolved_atom)] [ADMIN_JMP(resolved_atom)]" + else if(istype(iter_datum, /datum/controller/subsystem)) + var/datum/controller/subsystem/resolved_subsystem = iter_datum + specific_info = "[resolved_subsystem.stat_entry()]" + // else, it's just a /datum + + dat += "\t[index]: [iter_datum] | [specific_info] | [ADMIN_VV(iter_datum)]| [TAG_DEL(iter_datum)] | [iter_datum == marked_datum ? "Marked" : TAG_MARK(iter_datum)] " + dat += "\t([iter_datum.type])" + else + dat += "No datums tagged :(" + + dat = dat.Join("
") + usr << browse(dat, "window=tag;size=800x480") + +#undef TAG_DEL +#undef TAG_MARK +#undef TAG_SIMPLE_HEALTH +#undef TAG_CARBON_HEALTH diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a0b3ef5ba447f..c99e67824bddb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1907,6 +1907,35 @@ return GLOB.interviews.ui_interact(usr) + else if(href_list["tag_datum"]) + if(!check_rights(R_ADMIN)) + return + var/datum/datum_to_tag = locate(href_list["tag_datum"]) + if(!datum_to_tag) + return + return add_tagged_datum(datum_to_tag) + + else if(href_list["del_tag"]) + if(!check_rights(R_ADMIN)) + return + var/datum/datum_to_remove = locate(href_list["del_tag"]) + if(!datum_to_remove) + return + return remove_tagged_datum(datum_to_remove) + + else if(href_list["show_tags"]) + if(!check_rights(R_ADMIN)) + return + return display_tags() + + else if(href_list["mark_datum"]) + if(!check_rights(R_ADMIN)) + return + var/datum/datum_to_mark = locate(href_list["mark_datum"]) + if(!datum_to_mark) + return + return usr.client?.mark_datum(datum_to_mark) + else if(href_list["backstory_select"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/cluwneplayer.dm b/code/modules/admin/verbs/cluwneplayer.dm index e19f75f7bacaf..42df6bd2a4c25 100644 --- a/code/modules/admin/verbs/cluwneplayer.dm +++ b/code/modules/admin/verbs/cluwneplayer.dm @@ -8,10 +8,12 @@ var/mob/living/simple_animal/cluwne/newmob = new(get_turf(src)) - if (client) + if(client) client.give_award(/datum/award/achievement/misc/cluwne, client.mob) - M.transfer_to(newmob) + if(mind) // If the mob has a mind, we transfer + M.transfer_to(newmob) + if(key) // afk (no mind) newmob.key = key diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm new file mode 100644 index 0000000000000..1f1634a284b6c --- /dev/null +++ b/code/modules/admin/view_variables/color_matrix_editor.dm @@ -0,0 +1,129 @@ +INITIALIZE_IMMEDIATE(/atom/movable/screen/color_matrix_proxy_view) + +/atom/movable/screen/color_matrix_proxy_view + name = "color_matrix_proxy_view" + del_on_map_removal = FALSE + layer = GAME_PLANE + plane = GAME_PLANE + + var/list/plane_masters = list() + + /// The client that is watching this view + var/client/client + +/atom/movable/screen/color_matrix_proxy_view/Initialize(mapload) + . = ..() + + assigned_map = "color_matrix_proxy_[REF(src)]" + set_position(1, 1) + +/atom/movable/screen/color_matrix_proxy_view/Destroy() + for (var/plane_master in plane_masters) + client?.screen -= plane_master + qdel(plane_master) + + client?.clear_map(assigned_map) + + client = null + plane_masters = null + + return ..() + +/atom/movable/screen/color_matrix_proxy_view/proc/register_to_client(client/client) + QDEL_LIST(plane_masters) + + src.client = client + + if (!client) + return + + for (var/plane_master_type in subtypesof(/atom/movable/screen/plane_master) - /atom/movable/screen/plane_master/blackness) + var/atom/movable/screen/plane_master/plane_master = new plane_master_type() + plane_master.screen_loc = "[assigned_map]:CENTER" + client?.screen |= plane_master + + plane_masters += plane_master + + client?.register_map_obj(src) + +/datum/color_matrix_editor + var/client/owner + var/datum/weakref/target + var/atom/movable/screen/color_matrix_proxy_view/proxy_view + var/list/current_color + var/closed + +/datum/color_matrix_editor/New(user, atom/_target = null) + owner = CLIENT_FROM_VAR(user) + if(islist(_target?.color)) + current_color = _target.color + else if(istext(_target?.color)) + current_color = color_hex2color_matrix(_target.color) + else + current_color = color_matrix_identity() + proxy_view = new + if(_target) + target = WEAKREF(_target) + proxy_view.appearance = image(_target) + else + proxy_view.appearance = image('icons/misc/colortest.dmi', "colors") + + proxy_view.color = current_color + proxy_view.register_to_client(owner) + +/datum/color_matrix_editor/Destroy(force, ...) + QDEL_NULL(proxy_view) + return ..() + +/datum/color_matrix_editor/ui_state(mob/user) + return GLOB.admin_state + +/datum/color_matrix_editor/ui_static_data(mob/user) + var/list/data = list() + data["mapRef"] = proxy_view.assigned_map + + return data + +/datum/color_matrix_editor/ui_data(mob/user) + var/list/data = list() + data["currentColor"] = current_color + + return data + +/datum/color_matrix_editor/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ColorMatrixEditor") + ui.open() + +/datum/color_matrix_editor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("transition_color") + current_color = params["color"] + animate(proxy_view, time = 4, color = current_color) + if("confirm") + on_confirm() + SStgui.close_uis(src) + +/datum/color_matrix_editor/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/color_matrix_editor/proc/on_confirm() + var/atom/target_atom = target?.resolve() + if(istype(target_atom)) + target_atom.add_atom_colour(current_color, ADMIN_COLOUR_PRIORITY) + +/datum/color_matrix_editor/proc/wait() + while(!closed) + stoplag(1) + +/client/proc/open_color_matrix_editor(atom/in_atom) + var/datum/color_matrix_editor/editor = new /datum/color_matrix_editor(src, in_atom) + editor.ui_interact(mob) + editor.wait() + . = editor.current_color + qdel(editor) diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm index 0ef5615f04350..8aea000a1a631 100644 --- a/code/modules/admin/view_variables/debug_variables.dm +++ b/code/modules/admin/view_variables/debug_variables.dm @@ -1,88 +1,125 @@ #define VV_HTML_ENCODE(thing) ( sanitize ? html_encode(thing) : thing ) /// Get displayed variable in VV variable list -/proc/debug_variable(name, value, level, datum/D, sanitize = TRUE) //if D is a list, name will be index, and value will be assoc value. - var/header - if(D) - if(islist(D)) +/proc/debug_variable(name, value, level, datum/owner, sanitize = TRUE, display_flags = NONE) //if D is a list, name will be index, and value will be assoc value. + if(owner) + if(islist(owner)) var/index = name if (value) - name = D[name] //name is really the index until this line + name = owner[name] //name is really the index until this line else - value = D[name] - header = "
  • ([VV_HREF_TARGET_1V(D, VV_HK_LIST_EDIT, "E", index)]) ([VV_HREF_TARGET_1V(D, VV_HK_LIST_CHANGE, "C", index)]) ([VV_HREF_TARGET_1V(D, VV_HK_LIST_REMOVE, "-", index)]) " + value = owner[name] + . = "
  • ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_EDIT, "E", index)]) ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_CHANGE, "C", index)]) ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_REMOVE, "-", index)]) " else - header = "
  • ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_EDIT, "E", name)]) ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_CHANGE, "C", name)]) ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_MASSEDIT, "M", name)]) " + . = "
  • ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_EDIT, "E", name)]) ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_CHANGE, "C", name)]) ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_MASSEDIT, "M", name)]) " else - header = "
  • " + . = "
  • " - var/item - if (isnull(value)) - item = "[VV_HTML_ENCODE(name)] = null" + var/name_part = VV_HTML_ENCODE(name) + if(level > 0 || islist(owner)) //handling keys in assoc lists + if(istype(name,/datum)) + name_part = "[VV_HTML_ENCODE(name)] [REF(name)]" + else if(islist(name)) + var/list/list_value = name + name_part = " /list ([length(list_value)]) [REF(name)]" - else if (istext(value)) - item = "[VV_HTML_ENCODE(name)] = \"[VV_HTML_ENCODE(value)]\"" + . = "[.][name_part] = " - else if (isicon(value)) + var/item = _debug_variable_value(name, value, level, owner, sanitize, display_flags) + + return "[.][item]
  • " + +// This is split into a seperate proc mostly to make errors that happen not break things too much +/proc/_debug_variable_value(name, value, level, datum/owner, sanitize, display_flags) + . = "DISPLAY_ERROR: ([value] [REF(value)])" // Make sure this line can never runtime + + if(isnull(value)) + return "null" + + if(istext(value)) + return "\"[VV_HTML_ENCODE(value)]\"" + + if(isicon(value)) #ifdef VARSICON - var/icon/I = icon(value) + var/icon/icon_value = icon(value) var/rnd = rand(1,10000) - var/rname = "tmp[REF(I)][rnd].png" - usr << browse_rsc(I, rname) - item = "[VV_HTML_ENCODE(name)] = ([value]) " + var/rname = "tmp[REF(icon_value)][rnd].png" + usr << browse_rsc(icon_value, rname) + return "([value]) " #else - item = "[VV_HTML_ENCODE(name)] = /icon ([value])" + return "/icon ([value])" #endif - else if (isfile(value)) - item = "[VV_HTML_ENCODE(name)] = '[value]'" + if(isappearance(value)) + var/image/actually_an_appearance = value + return "/appearance ([actually_an_appearance.icon])" - else if(istype(value,/matrix)) // Needs to be before datum - var/matrix/M = value - item = {"[VV_HTML_ENCODE(name)] = -
      - - - - - - -
    [M.a][M.d]0
    [M.b][M.e]0
    [M.c][M.f]1
     
    "} //TODO link to modify_transform wrapper for all matrices - else if (istype(value, /datum)) - var/datum/DV = value - if ("[DV]" != "[DV.type]") //if the thing as a name var, lets use it. - item = "[VV_HTML_ENCODE(name)] [REF(value)] = [DV] [DV.type]" - else - item = "[VV_HTML_ENCODE(name)] [REF(value)] = [DV.type]" + if(isfilter(value)) + var/datum/filter_value = value + return "/filter ([filter_value.type] [REF(filter_value)])" + + if(isfile(value)) + return "'[value]'" - else if (islist(value)) - var/list/L = value + if(isdatum(value)) + var/datum/datum_value = value + return datum_value.debug_variable_value(name, level, owner, sanitize, display_flags) + + if(islist(value) || (name in GLOB.vv_special_lists)) // Some special lists arent detectable as a list through istype + var/list/list_value = value var/list/items = list() - if (L.len > 0 && !(name == "underlays" || name == "overlays" || L.len > (IS_NORMAL_LIST(L) ? VV_NORMAL_LIST_NO_EXPAND_THRESHOLD : VV_SPECIAL_LIST_NO_EXPAND_THRESHOLD))) - for (var/i in 1 to L.len) - var/key = L[i] + // This is becuse some lists either dont count as lists or a locate on their ref will return null + var/link_vars = "Vars=[REF(value)]" + if(name in GLOB.vv_special_lists) + link_vars = "Vars=[REF(owner)];special_varname=[name]" + + if (!(display_flags & VV_ALWAYS_CONTRACT_LIST) && list_value.len > 0 && list_value.len <= (IS_NORMAL_LIST(list_value) ? VV_NORMAL_LIST_NO_EXPAND_THRESHOLD : VV_SPECIAL_LIST_NO_EXPAND_THRESHOLD)) + for (var/i in 1 to list_value.len) + var/key = list_value[i] var/val - if (IS_NORMAL_LIST(L) && !isnum_safe(key)) - val = L[key] - if (isnull(val)) // we still want to display non-null false values, such as 0 or "" + if (IS_NORMAL_LIST(list_value) && !isnum(key)) + val = list_value[key] + if (isnull(val)) // we still want to display non-null false values, such as 0 or "" val = key key = i items += debug_variable(key, val, level + 1, sanitize = sanitize) - item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" + return "/list ([list_value.len])" else - item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" + return "/list ([list_value.len])" - else if (name in GLOB.bitfields) + if(name in GLOB.bitfields) var/list/flags = list() for (var/i in GLOB.bitfields[name]) if (value & GLOB.bitfields[name][i]) flags += i - item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(jointext(flags, ", "))]" + if(length(flags)) + return "[VV_HTML_ENCODE(jointext(flags, ", "))]" + else + return "NONE" else - item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(value)]" + return "[VV_HTML_ENCODE(value)]" + +/datum/proc/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + if("[src]" != "[type]") // If we have a name var, let's use it. + return "[src] [type] [REF(src)]" + else + return "[type] [REF(src)]" + +/datum/weakref/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + . = ..() + return "[.] (Resolve)" - return "[header][item]" +/matrix/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + return {" +
      + + + + + + +
    [a][d]0
    [b][e]0
    [c][f]1
     
    "} //TODO link to modify_transform wrapper for all matrices #undef VV_HTML_ENCODE diff --git a/code/modules/admin/view_variables/get_variables.dm b/code/modules/admin/view_variables/get_variables.dm index 45d3a82348234..c59391371dff0 100644 --- a/code/modules/admin/view_variables/get_variables.dm +++ b/code/modules/admin/view_variables/get_variables.dm @@ -2,7 +2,7 @@ if(isnull(var_value)) . = VV_NULL - else if(isnum_safe(var_value)) + else if(isnum(var_value)) if(var_name in GLOB.bitfields) . = VV_BITFIELD else @@ -11,6 +11,8 @@ else if(istext(var_value)) if(findtext(var_value, "\n")) . = VV_MESSAGE + else if(findtext(var_value, GLOB.is_color)) + . = VV_COLOR else . = VV_TEXT @@ -26,7 +28,10 @@ else if(istype(var_value, /client)) . = VV_CLIENT - else if(istype(var_value, /datum)) + else if(isweakref(var_value)) + . = VV_WEAKREF + + else if(isdatum(var_value)) . = VV_DATUM_REFERENCE else if(ispath(var_value)) @@ -38,7 +43,10 @@ . = VV_TYPE else if(islist(var_value)) - . = VV_LIST + if(var_name in GLOB.color_vars) + . = VV_COLOR_MATRIX + else + . = VV_LIST else if(isfile(var_value)) . = VV_FILE @@ -54,6 +62,8 @@ VV_TEXT, VV_MESSAGE, VV_ICON, + VV_COLOR, + VV_COLOR_MATRIX, VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, @@ -67,9 +77,11 @@ VV_NEW_TYPE, VV_NEW_LIST, VV_NULL, + VV_INFINITY, VV_RESTORE_DEFAULT, VV_TEXT_LOCATE, VV_PROCCALL_RETVAL, + VV_WEAKREF, ) var/markstring @@ -77,6 +89,15 @@ markstring = "[VV_MARKED_DATUM] (CURRENT: [(istype(holder) && istype(holder.marked_datum))? holder.marked_datum.type : "NULL"])" classes += markstring + var/list/tagstrings = new + if(!(VV_TAGGED_DATUM in restricted_classes) && holder && LAZYLEN(holder.tagged_datums)) + var/i = 0 + for(var/datum/iter_tagged_datum as anything in holder.tagged_datums) + i++ + var/new_tagstring = "[VV_TAGGED_DATUM] #[i]: [iter_tagged_datum.type])" + tagstrings[new_tagstring] = iter_tagged_datum + classes += new_tagstring + if(restricted_classes) classes -= restricted_classes @@ -87,6 +108,12 @@ if(holder && holder.marked_datum && .["class"] == markstring) .["class"] = VV_MARKED_DATUM + if(holder && tagstrings[.["class"]]) + var/datum/chosen_datum = tagstrings[.["class"]] + .["value"] = chosen_datum + .["class"] = VV_TAGGED_DATUM + + switch(.["class"]) if(VV_TEXT) .["value"] = input("Enter new text:", "Text", current_value) as null|text @@ -178,6 +205,19 @@ return .["value"] = things[value] + if(VV_WEAKREF) + var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types()) + var/subtypes = vv_subtype_prompt(type) + if(subtypes == null) + .["class"] = null + return + var/list/things = vv_reference_list(type, subtypes) + var/value = input("Select reference:", "Reference", current_value) as null|anything in things + if(!value) + .["class"] = null + return + .["value"] = WEAKREF(things[value]) + if(VV_CLIENT) .["value"] = input("Select reference:", "Reference", current_value) as null|anything in GLOB.clients if(.["value"] == null) @@ -202,10 +242,15 @@ .["class"] = null return + if(VV_TAGGED_DATUM) + if(.["value"] == null) + .["class"] = null + return + if(VV_PROCCALL_RETVAL) var/list/get_retval = list() callproc_blocking(get_retval) - .["value"] = get_retval[1] //should have been set in proccall! + .["value"] = get_retval[1] //should have been set in proccall! if(.["value"] == null) .["class"] = null return @@ -250,8 +295,23 @@ .["value"] = newguy if(VV_NEW_LIST) - .["value"] = list() .["type"] = /list + var/list/value = list() + + var/expectation = alert("Would you like to populate the list", "Populate List?", "Yes", "No") + if(!expectation || expectation == "No") + .["value"] = value + return . + + var/list/insert = null + while(TRUE) + insert = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) + if(!insert["class"]) + break + value += LIST_VALUE_WRAP_LISTS(insert["value"]) + + + .["value"] = value if(VV_TEXT_LOCATE) var/datum/D @@ -261,11 +321,25 @@ break D = locate(ref) if(!D) - alert("Invalid ref!") + tgui_alert(usr,"Invalid ref!") continue if(!D.can_vv_mark()) - alert("Datum can not be marked!") + tgui_alert(usr,"Datum can not be marked!") continue while(!D) .["type"] = D.type .["value"] = D + + if(VV_COLOR) + .["value"] = input("Enter new color:", "Color", current_value) as color|null + if(.["value"] == null) + .["class"] = null + return + + if(VV_COLOR_MATRIX) + .["value"] = open_color_matrix_editor() + if(.["value"] == color_matrix_identity()) //identity is equivalent to null + .["class"] = null + + if(VV_INFINITY) + .["value"] = INFINITY diff --git a/code/modules/admin/view_variables/tag_datum.dm b/code/modules/admin/view_variables/tag_datum.dm new file mode 100644 index 0000000000000..3b611e3cdf934 --- /dev/null +++ b/code/modules/admin/view_variables/tag_datum.dm @@ -0,0 +1,18 @@ +/client/proc/tag_datum(datum/target_datum) + if(!holder || QDELETED(target_datum)) + return + holder.add_tagged_datum(target_datum) + +/client/proc/toggle_tag_datum(datum/target_datum) + if(!holder || !target_datum) + return + + if(LAZYFIND(holder.tagged_datums, target_datum)) + holder.remove_tagged_datum(target_datum) + else + holder.add_tagged_datum(target_datum) + +/client/proc/tag_datum_mapview(datum/target_datum as mob|obj|turf|area in view(view)) + set category = "Debug" + set name = "Tag Datum" + tag_datum(target_datum) diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 9a0956174b0a2..f753221828cea 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -11,7 +11,10 @@ else if(islist(target)) vv_do_list(target, href_list) if(href_list["Vars"]) - debug_variables(locate(href_list["Vars"])) + var/datum/vars_target = locate(href_list["Vars"]) + if(href_list["special_varname"]) // Some special vars can't be located even if you have their ref, you have to use this instead + vars_target = vars_target.vars[href_list["special_varname"]] + debug_variables(vars_target) //Stuff below aren't in dropdowns/etc. diff --git a/code/modules/admin/view_variables/topic_basic.dm b/code/modules/admin/view_variables/topic_basic.dm index b02ef9d96a6f2..5765199b84bb9 100644 --- a/code/modules/admin/view_variables/topic_basic.dm +++ b/code/modules/admin/view_variables/topic_basic.dm @@ -57,7 +57,8 @@ if(href_list[VV_HK_MARK] && check_rights(R_VAREDIT)) usr.client.mark_datum(target) - + if(href_list[VV_HK_TAG]) + usr.client.tag_datum(target) if(href_list[VV_HK_ADDCOMPONENT]) if(!check_rights(R_VAREDIT)) return diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index fe337274443ab..136d82b732cbc 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -1,52 +1,65 @@ -/client/proc/debug_variables(datum/D in world) +/client/proc/debug_variables(datum/thing in world) set category = "Debug" set name = "View Variables" //set src in world var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round. - if(!usr.client || !usr.client.holder) //This is usr because admins can call the proc on other clients, even if they're not admins, to show them VVs. + if(!usr.client || !usr.client.holder) //This is usr because admins can call the proc on other clients, even if they're not admins, to show them VVs. to_chat(usr, "You need to be an administrator to access this.") return - if(!D) + if(!thing) return var/datum/asset/asset_cache_datum = get_asset_datum(/datum/asset/simple/vv) asset_cache_datum.send(usr) - var/islist = islist(D) - if(!islist && !istype(D)) + var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists dont count as lists, but can be detected by if they have list procs + if(!islist && !isdatum(thing)) return var/title = "" - var/refid = REF(D) + var/refid = REF(thing) var/icon/sprite var/hash - var/type = islist? /list : D.type + var/type = islist? /list : thing.type + var/no_icon = FALSE - if(istype(D, /atom)) - sprite = getFlatIcon(D) - hash = md5(icon2base64(sprite)) - if(hash) //Fixes VV shitting it's pants if the icon isn't valid - src << browse_rsc(sprite, "vv[hash].png") + if(isatom(thing)) + sprite = getFlatIcon(thing) + if(!sprite) + no_icon = TRUE - title = "[D] ([REF(D)]) = [type]" - var/formatted_type = replacetext("[type]", "/", "/") + else if(isimage(thing)) + var/image/image_object = thing + sprite = icon(image_object.icon, image_object.icon_state) var/sprite_text if(sprite) - sprite_text = "" - var/list/header = islist(D)? list("/list") : D.vv_get_header() + hash = md5(sprite) + src << browse_rsc(sprite, "vv[hash].png") + sprite_text = no_icon ? "\[NO ICON\]" : "" + + title = "[thing] ([REF(thing)]) = [type]" + var/formatted_type = replacetext("[type]", "/", "/") + + var/list/header = islist ? list("/list") : thing.vv_get_header() + + var/ref_line = "@[copytext(refid, 2, -1)]" // get rid of the brackets, add a @ prefix for copy pasting in asay var/marked_line - if(holder && holder.marked_datum && holder.marked_datum == D) + if(holder && holder.marked_datum && holder.marked_datum == thing) marked_line = VV_MSG_MARKED + var/tagged_line + if(holder && LAZYFIND(holder.tagged_datums, thing)) + var/tag_index = LAZYFIND(holder.tagged_datums, thing) + tagged_line = VV_MSG_TAGGED(tag_index) var/varedited_line - if(!islist && (D.datum_flags & DF_VAR_EDITED)) + if(!islist && (thing.datum_flags & DF_VAR_EDITED)) varedited_line = VV_MSG_EDITED var/deleted_line - if(!islist && D.gc_destroyed) + if(!islist && thing.gc_destroyed) deleted_line = VV_MSG_DELETED var/list/dropdownoptions @@ -66,28 +79,29 @@ var/link = dropdownoptions[name] dropdownoptions[i] = "" else - dropdownoptions = D.vv_get_dropdown() + dropdownoptions = thing.vv_get_dropdown() var/list/names = list() if(!islist) - for(var/V in D.vars) - names += V - sleep(1) + for(var/varname in thing.vars) + names += varname + + sleep(1 TICKS) var/list/variable_html = list() if(islist) - var/list/L = D - for(var/i in 1 to L.len) - var/key = L[i] + var/list/list_value = thing + for(var/i in 1 to list_value.len) + var/key = list_value[i] var/value - if(IS_NORMAL_LIST(L) && IS_VALID_ASSOC_KEY(key)) - value = L[key] - variable_html += debug_variable(i, value, 0, L) + if(IS_NORMAL_LIST(list_value) && IS_VALID_ASSOC_KEY(key)) + value = list_value[key] + variable_html += debug_variable(i, value, 0, list_value) else names = sort_list(names) - for(var/V in names) - if(D.can_vv_get(V)) - variable_html += D.vv_get_var(V) + for(var/varname in names) + if(thing.can_vv_get(varname)) + variable_html += thing.vv_get_var(varname) var/html = {" @@ -114,8 +128,8 @@ var ca = document.cookie.split(';'); for(var i=0; i
    [formatted_type] +
    [ref_line] [marked_line] + [tagged_line] [varedited_line] [deleted_line]
    @@ -263,5 +279,5 @@ datumrefresh=[refid];[HrefToken()]'>Refresh "} src << browse(html, "window=variables[refid];size=475x650") -/client/proc/vv_update_display(datum/D, span, content) - src << output("[span]:[content]", "variables[REF(D)].browser:replace_span") +/client/proc/vv_update_display(datum/thing, span, content) + src << output("[span]:[content]", "variables[REF(thing)].browser:replace_span") diff --git a/code/modules/antagonists/clock_cult/clockwork_massive.dm b/code/modules/antagonists/clock_cult/clockwork_massive.dm index 7ad4dfb145675..46c74b77669fa 100644 --- a/code/modules/antagonists/clock_cult/clockwork_massive.dm +++ b/code/modules/antagonists/clock_cult/clockwork_massive.dm @@ -69,24 +69,30 @@ GLOBAL_LIST_INIT(clockwork_portals, list()) to_chat(world, pick(phase_messages)) /obj/structure/destructible/clockwork/massive/celestial_gateway/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(!disassembled) - resistance_flags |= INDESTRUCTIBLE - visible_message("[src] begins to pulse uncontrollably... you might want to run!") - sound_to_playing_players(volume = 50, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_disrupted.ogg')) - for(var/mob/M in GLOB.player_list) - var/turf/T = get_turf(M) - if((T && T.get_virtual_z_level() == get_virtual_z_level()) || is_servant_of_ratvar(M)) - M.playsound_local(M, 'sound/machines/clockcult/ark_deathrattle.ogg', 100, FALSE, pressure_affected = FALSE) - sleep(27) - explosion(src, 1, 3, 8, 8) - sound_to_playing_players('sound/effects/explosion_distant.ogg', volume = 50) - for(var/obj/effect/portal/wormhole/clockcult/CC in GLOB.all_wormholes) - qdel(CC) - SSshuttle.clearHostileEnvironment(src) - set_security_level(SEC_LEVEL_RED) - sleep(300) - SSticker.force_ending = TRUE + if((flags_1 & NODECONSTRUCT_1)) + return + if(disassembled) + return + resistance_flags |= INDESTRUCTIBLE + visible_message("[src] begins to pulse uncontrollably... you might want to run!") + sound_to_playing_players(volume = 50, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_disrupted.ogg')) + for(var/mob/M in GLOB.player_list) + var/turf/T = get_turf(M) + if((T && T.get_virtual_z_level() == get_virtual_z_level()) || is_servant_of_ratvar(M)) + M.playsound_local(M, 'sound/machines/clockcult/ark_deathrattle.ogg', 100, FALSE, pressure_affected = FALSE) + addtimer(CALLBACK(src, PROC_REF(last_call)), 27) + +/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/last_call() + explosion(src, 1, 3, 8, 8) + sound_to_playing_players('sound/effects/explosion_distant.ogg', volume = 50) + for(var/obj/effect/portal/wormhole/clockcult/CC in GLOB.all_wormholes) + qdel(CC) + SSshuttle.clearHostileEnvironment(src) + set_security_level(SEC_LEVEL_RED) + addtimer(CALLBACK(src, PROC_REF(clockies_win)), 300) + +/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/clockies_win() + SSticker.force_ending = TRUE qdel(src) /obj/structure/destructible/clockwork/massive/celestial_gateway/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index f4fea0d2ca283..507c5627e06ce 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -166,11 +166,10 @@ /datum/asset/simple/namespaced/fontawesome legacy = TRUE assets = list( - "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', - "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', - "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', - "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', - "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' + "fa-regular-400.ttf" = 'html/font-awesome/webfonts/fa-regular-400.ttf', + "fa-solid-900.ttf" = 'html/font-awesome/webfonts/fa-solid-900.ttf', + "fa-v4compatibility.ttf" = 'html/font-awesome/webfonts/fa-v4compatibility.ttf', + "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css', ) parents = list("font-awesome.css" = 'html/font-awesome/css/all.min.css') diff --git a/code/modules/client/loadout/loadout_accessories.dm b/code/modules/client/loadout/loadout_accessories.dm index 0e39ffdbb2923..60c18fcbc94be 100644 --- a/code/modules/client/loadout/loadout_accessories.dm +++ b/code/modules/client/loadout/loadout_accessories.dm @@ -156,6 +156,10 @@ display_name = "circular glasses" path = /obj/item/clothing/glasses/regular/circle +/datum/gear/accessory/glasses/circle_sunglasses + display_name = "circular sunglasses" + path = /obj/item/clothing/glasses/sunglasses/circle_sunglasses + /datum/gear/accessory/glasses/sunglasses display_name = "sunglasses" path = /obj/item/clothing/glasses/sunglasses diff --git a/code/modules/client/loadout/loadout_uniform.dm b/code/modules/client/loadout/loadout_uniform.dm index 1a374bb2e6ad1..3d10f591c6aad 100644 --- a/code/modules/client/loadout/loadout_uniform.dm +++ b/code/modules/client/loadout/loadout_uniform.dm @@ -248,6 +248,10 @@ display_name = "white and green suit" path = /obj/item/clothing/under/suit/white_on_white +/datum/gear/uniform/suit/relaxed + display_name = "relaxed slacks" + path = /obj/item/clothing/under/suit/relaxed + /datum/gear/uniform/suit/sl_suit display_name = "amish suit" path = /obj/item/clothing/under/suit/sl diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm index 6b5c11abfb457..22b74454a21cc 100644 --- a/code/modules/client/verbs/looc.dm +++ b/code/modules/client/verbs/looc.dm @@ -73,7 +73,11 @@ GLOBAL_VAR_INIT(looc_allowed, TRUE) for(var/client/client in GLOB.admins) if(!client.prefs.read_player_preference(/datum/preference/toggle/chat_ooc)) continue - var/prefix = "[(client in targets) ? "" : "(R)"]LOOC" + var/prefix + if(in_view[get_turf(client.mob)]) + prefix = "[(client in targets) ? "" : "(R)"]LOOC (NEARBY)" + else + prefix = "[(client in targets) ? "" : "(R)"]LOOC" to_chat(client, "[prefix]: [ADMIN_LOOKUPFLW(mob)]: [msg]", avoid_highlighting = (client == src)) /proc/log_looc(text) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 32f919ef77e17..799def9787b81 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -249,6 +249,12 @@ icon_state = "circle_glasses" item_state = "circle_glasses" +/obj/item/clothing/glasses/sunglasses/circle_sunglasses + name = "circle sunglasses" + desc = "Shit's pimpin'" + icon_state = "circle_sunglasses" + item_state = "circle_sunglasses" + //Here lies green glasses, so ugly they died. RIP /obj/item/clothing/glasses/sunglasses diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 23278fc7f1c71..75ee19d22c3a3 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -196,6 +196,7 @@ desc = "A creepy wooden mask. Surprisingly expressive for a poorly carved bit of wood." icon_state = "tiki_eyebrow" item_state = "tiki_eyebrow" + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 1.25) resistance_flags = FLAMMABLE max_integrity = 100 actions_types = list(/datum/action/item_action/adjust) diff --git a/code/modules/clothing/shoes/color.dm b/code/modules/clothing/shoes/color.dm index 391919f2825ba..72ff41ae34335 100644 --- a/code/modules/clothing/shoes/color.dm +++ b/code/modules/clothing/shoes/color.dm @@ -50,6 +50,7 @@ name = "rainbow shoes" desc = "Very gay shoes." icon_state = "rain_bow" + greyscale_colors = null greyscale_config = null greyscale_config_inhand_left = null @@ -103,3 +104,24 @@ if(!do_after(hummie,15 SECONDS, src)) return FALSE return ..() + +/obj/item/clothing/shoes/sneakers/mime + name = "mime shoes" + greyscale_colors = "#ffffff#ffffff" + +/obj/item/clothing/shoes/sneakers/marisa + desc = "A pair of magic black shoes." + name = "magic shoes" + worn_icon_state = "marisa" + greyscale_colors = "#545454#ffffff" + greyscale_config = /datum/greyscale_config/sneakers_marisa + greyscale_config_worn = null + strip_delay = 5 + equip_delay_other = 50 + permeability_coefficient = 0.9 + resistance_flags = FIRE_PROOF | ACID_PROOF + +/obj/item/clothing/shoes/sneakers/cyborg + name = "cyborg boots" + desc = "Shoes for a cyborg costume." + greyscale_colors = "#4e4e4e#4e4e4e" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 364ae9828cdbd..a58e4c78e8118 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,10 +1,6 @@ /obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION) -/obj/item/clothing/shoes/sneakers/mime - name = "mime shoes" - greyscale_colors = "#ffffff#ffffff" - /obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses name = "combat boots" desc = "High speed, low drag combat boots." @@ -29,23 +25,12 @@ desc = "A pair of rather plain wooden sandals." name = "sandals" icon_state = "wizard" + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 0.5) strip_delay = 50 equip_delay_other = 50 permeability_coefficient = 0.9 strip_delay = 5 -/obj/item/clothing/shoes/sneakers/marisa - desc = "A pair of magic black shoes." - name = "magic shoes" - worn_icon_state = "marisa" - greyscale_colors = "#545454#ffffff" - greyscale_config = /datum/greyscale_config/sneakers_marisa - greyscale_config_worn = null - strip_delay = 5 - equip_delay_other = 50 - permeability_coefficient = 0.9 - resistance_flags = FIRE_PROOF | ACID_PROOF - /obj/item/clothing/shoes/sandal/magic name = "magical sandals" desc = "A pair of sandals imbued with magic." @@ -211,11 +196,6 @@ . = ..() ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) -/obj/item/clothing/shoes/sneakers/cyborg - name = "cyborg boots" - desc = "Shoes for a cyborg costume." - greyscale_colors = "#4e4e4e#4e4e4e" - /obj/item/clothing/shoes/laceup name = "laceup shoes" desc = "The height of fashion, and they're pre-polished!" @@ -292,48 +272,6 @@ . = ..() AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50) -/obj/item/clothing/shoes/wheelys - name = "Wheely-Heels" - desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel - item_state = "wheelys" - greyscale_colors = "#545454#ffffff" - greyscale_config = /datum/greyscale_config/sneakers_wheelys - icon_state = "sneakers" - worn_icon_state = "wheelys" - actions_types = list(/datum/action/item_action/wheelys) - var/wheelToggle = FALSE //False means wheels are not popped out - var/obj/vehicle/ridden/scooter/wheelys/W - -/obj/item/clothing/shoes/wheelys/Initialize(mapload) - . = ..() - W = new /obj/vehicle/ridden/scooter/wheelys(null) - -/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) - if(!isliving(user)) - return - if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) - to_chat(user, "You must be wearing the wheely-heels to use them!") - return - if(!(W.is_occupant(user))) - wheelToggle = FALSE - if(wheelToggle) - W.unbuckle_mob(user) - wheelToggle = FALSE - return - W.forceMove(get_turf(user)) - W.buckle_mob(user) - wheelToggle = TRUE - -/obj/item/clothing/shoes/wheelys/dropped(mob/user) - ..() - if(wheelToggle) - W.unbuckle_mob(user) - wheelToggle = FALSE - -/obj/item/clothing/shoes/wheelys/Destroy() - QDEL_NULL(W) - . = ..() - /obj/item/clothing/shoes/kindleKicks name = "Kindle Kicks" desc = "They'll sure kindle something in you, and it's not childhood nostalgia..." diff --git a/code/modules/clothing/shoes/wheelys.dm b/code/modules/clothing/shoes/wheelys.dm new file mode 100644 index 0000000000000..6a2eaad54784e --- /dev/null +++ b/code/modules/clothing/shoes/wheelys.dm @@ -0,0 +1,45 @@ +/obj/item/clothing/shoes/wheelys + name = "Wheely-Heels" + desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel + icon_state = "sneakers" + worn_icon_state = "wheelys" + item_state = "wheelys" + greyscale_colors = "#545454#ffffff" + greyscale_config = /datum/greyscale_config/sneakers_wheelys + worn_x_dimension = 64 + worn_y_dimension = 64 + actions_types = list(/datum/action/item_action/wheelys) + ///False means wheels are not popped out + var/wheelToggle = FALSE + ///The vehicle associated with the shoes + var/obj/vehicle/ridden/scooter/wheelys/W + +/obj/item/clothing/shoes/wheelys/Initialize(mapload) + . = ..() + W = new /obj/vehicle/ridden/scooter/wheelys(null) + +/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) + if(!isliving(user)) + return + if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) + balloon_alert(user, "must be worn!") + return + if(!(W.is_occupant(user))) + wheelToggle = FALSE + if(wheelToggle) + W.unbuckle_mob(user) + wheelToggle = FALSE + return + W.forceMove(get_turf(user)) + W.buckle_mob(user) + wheelToggle = TRUE + +/obj/item/clothing/shoes/wheelys/dropped(mob/user) + ..() + if(wheelToggle) + W.unbuckle_mob(user) + wheelToggle = FALSE + +/obj/item/clothing/shoes/wheelys/Destroy() + QDEL_NULL(W) + . = ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index d6bd7718c8d28..0716b2cb5ef24 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -234,11 +234,11 @@ desc = "A multi-colored jumpsuit!" icon_state = "rainbow" item_state = "rainbow" - can_adjust = FALSE greyscale_config = null greyscale_config_inhand_left = null greyscale_config_inhand_right = null greyscale_config_worn = null + can_adjust = FALSE /obj/item/clothing/under/color/jumpskirt/rainbow name = "rainbow jumpskirt" @@ -249,6 +249,7 @@ greyscale_config_inhand_left = null greyscale_config_inhand_right = null greyscale_config_worn = null + can_adjust = FALSE /obj/item/clothing/under/color/rainbow/denied name = "ERROR jumpsuit" diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm index a717bc8fb3a85..a5f046efd97aa 100644 --- a/code/modules/clothing/under/suits.dm +++ b/code/modules/clothing/under/suits.dm @@ -30,6 +30,13 @@ item_state = "blackslacks" can_adjust = TRUE +/obj/item/clothing/under/suit/relaxed + name = "relaxed slacks" + desc = "A somewhat less professional set of black slacks and a white dress shirt." + icon_state = "relaxed" + item_state = "relaxed" + can_adjust = TRUE + /obj/item/clothing/under/suit/black/skirt name = "black suitskirt" desc = "A professional black suit. Nanotrasen Investigation Bureau approved!" diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 181e3e404cc2c..00f32debdeac2 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -56,7 +56,7 @@ originMachine.visible_message("[originMachine] beeps and seems lifeless.") kill() return - vendingMachines = remove_nulls_from_list(vendingMachines) + vendingMachines = list_clear_nulls(vendingMachines) if(!vendingMachines.len) //if every machine is infected infectedMachines.Add(originMachine) for(var/obj/machinery/vending/upriser in infectedMachines) diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm new file mode 100644 index 0000000000000..2d47a4e325322 --- /dev/null +++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm @@ -0,0 +1,149 @@ +/obj/machinery/griddle + name = "griddle" + desc = "Because using pans is for pansies." + icon = 'icons/obj/machines/kitchenmachines.dmi' + icon_state = "griddle1_off" + density = TRUE + pass_flags_self = PASSMACHINE | PASSTABLE| LETPASSTHROW + use_power = IDLE_POWER_USE + idle_power_usage = 5 + layer = BELOW_OBJ_LAYER + circuit = /obj/item/circuitboard/machine/griddle + processing_flags = START_PROCESSING_MANUALLY + resistance_flags = FIRE_PROOF + + ///Things that are being griddled right now + var/list/griddled_objects = list() + ///Looping sound for the grill + var/datum/looping_sound/grill/grill_loop + ///Whether or not the machine is turned on right now + var/on = FALSE + ///What variant of griddle is this? + var/variant = 1 + ///How many shit fits on the griddle? + var/max_items = 8 + +/obj/machinery/griddle/Initialize() + . = ..() + grill_loop = new(src, FALSE) + if(isnum(variant)) + variant = rand(1,3) + // Add expose_reagent to add pancakes. I tried already. https://github.com/BeeStation/BeeStation-Hornet/pull/8479 + //RegisterSignal(src, COMSIG_ATOM_EXPOSE_REAGENT, PROC_REF(on_expose_reagent)) + +/obj/machinery/griddle/Destroy() + QDEL_NULL(grill_loop) + return ..() + +/obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I) + . = ..() + if(flags_1 & NODECONSTRUCT_1) + return + if(default_deconstruction_crowbar(I, ignore_panel = TRUE)) + return + variant = rand(1,3) + +/* See https://github.com/BeeStation/BeeStation-Hornet/pull/8479 +/obj/machinery/griddle/proc/on_expose_reagent(atom/parent_atom, datum/reagent/exposing_reagent, reac_volume) + SIGNAL_HANDLER + + if(griddled_objects.len >= max_items || !istype(exposing_reagent, /datum/reagent/consumable/pancakebatter) || reac_volume < 5) + return NONE //make sure you have space... it's actually batter... and a proper amount of it. + + for(var/pancakes in 1 to FLOOR(reac_volume, 5) step 5) //this adds as many pancakes as you possibly could make, with 5u needed per pancake + var/obj/item/food/pancakes/raw/new_pancake = new(src) + new_pancake.pixel_x = rand(16,-16) + new_pancake.pixel_y = rand(16,-16) + AddToGrill(new_pancake) + if(griddled_objects.len >= max_items) + break + visible_message("[exposing_reagent] begins to cook on [src].") + return NONE +*/ + +/obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I) + . = ..() + return default_deconstruction_crowbar(I, ignore_panel = TRUE) + +/obj/machinery/griddle/attackby(obj/item/I, mob/user, params) + if(griddled_objects.len >= max_items) + to_chat(user, "[src] can't fit more items!") + return + var/list/modifiers = params2list(params) + //Center the icon where the user clicked. + if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) + return + if(user.transferItemToLoc(I, src, silent = FALSE)) + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) + I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + to_chat(user, "You place [I] on [src].") + AddToGrill(I, user) + update_appearance() + else + return ..() + +/obj/machinery/griddle/attack_hand(mob/user) + . = ..() + on = !on + if(on) + begin_processing() + else + end_processing() + update_appearance() + update_grill_audio() + + +/obj/machinery/griddle/proc/AddToGrill(obj/item/item_to_grill, mob/user) + vis_contents += item_to_grill + griddled_objects += item_to_grill + item_to_grill.flags_1 |= IS_ONTOP_1 + RegisterSignal(item_to_grill, COMSIG_MOVABLE_MOVED, PROC_REF(ItemMoved)) + RegisterSignal(item_to_grill, COMSIG_GRILL_COMPLETED, PROC_REF(GrillCompleted)) + RegisterSignal(item_to_grill, COMSIG_PARENT_QDELETING, PROC_REF(ItemRemovedFromGrill)) + update_grill_audio() + +/obj/machinery/griddle/proc/ItemRemovedFromGrill(obj/item/I) + SIGNAL_HANDLER + I.flags_1 &= ~IS_ONTOP_1 + griddled_objects -= I + vis_contents -= I + UnregisterSignal(I, list(COMSIG_GRILL_COMPLETED, COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) + update_grill_audio() + +/obj/machinery/griddle/proc/ItemMoved(obj/item/I, atom/OldLoc, Dir, Forced) + SIGNAL_HANDLER + ItemRemovedFromGrill(I) + +/obj/machinery/griddle/proc/GrillCompleted(obj/item/source, atom/grilled_result) + SIGNAL_HANDLER + AddToGrill(grilled_result) + +/obj/machinery/griddle/proc/update_grill_audio() + if(on && griddled_objects.len) + grill_loop.start() + else + grill_loop.stop() + +/obj/machinery/griddle/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I, 2 SECONDS) + return TRUE + +///Override to prevent storage dumping onto the griddle until I figure out how to navigate the mess that is storage code to allow me to nicely move the dumped objects onto the griddle. +/obj/machinery/griddle/get_dumping_location(obj/item/storage/source, mob/user) + return + +/obj/machinery/griddle/process(delta_time) + ..() + for(var/i in griddled_objects) + var/obj/item/griddled_item = i + if(SEND_SIGNAL(griddled_item, COMSIG_ITEM_GRILLED, src, delta_time) & COMPONENT_HANDLED_GRILLING) + continue + griddled_item.fire_act(1000) //Hot hot hot! + if(prob(10)) + visible_message("[griddled_item] doesn't seem to be doing too great on the [src]!") + +/obj/machinery/griddle/update_icon_state() + icon_state = "griddle[variant]_[on ? "on" : "off"]" + return ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index 426cd431cd1ff..3963ffa3cfb0e 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -9,10 +9,11 @@ icon = 'icons/obj/kitchen.dmi' icon_state = "grill_open" density = TRUE + pass_flags_self = PASSMACHINE | LETPASSTHROW // sorta like griddles layer = BELOW_OBJ_LAYER use_power = NO_POWER_USE var/grill_fuel = 0 - var/obj/item/reagent_containers/food/grilled_item + var/obj/item/food/grilled_item var/grill_time = 0 var/datum/looping_sound/grill/grill_loop @@ -20,13 +21,20 @@ . = ..() grill_loop = new(src, FALSE) -/obj/machinery/grill/update_icon() +/obj/machinery/grill/Destroy() + grilled_item = null + QDEL_NULL(grill_loop) + return ..() + +/obj/machinery/grill/update_icon_state() if(grilled_item) icon_state = "grill" - else if(grill_fuel > 0) + return ..() + if(grill_fuel > 0) icon_state = "grill_on" - else - icon_state = "grill_open" + return ..() + icon_state = "grill_open" + return ..() /obj/machinery/grill/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/wood)) @@ -38,36 +46,36 @@ else grill_fuel += (50 * stackamount) S.use(stackamount) - update_icon() + update_appearance() return if(I.resistance_flags & INDESTRUCTIBLE) to_chat(user, "You don't feel it would be wise to grill [I]...") return ..() - if(istype(I, /obj/item/reagent_containers)) - if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks)) - if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL))) - return ..() - else if(!grill_fuel) - to_chat(user, "There is not enough fuel.") - return - else if(!grilled_item && user.transferItemToLoc(I, src)) - grilled_item = I - to_chat(user, "You put the [grilled_item] on [src].") - update_icon() - grill_loop.start() - return - else - if(I.reagents.has_reagent(/datum/reagent/consumable/monkey_energy)) - grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy))) - to_chat(user, "You pour the Monkey Energy in [src].") - I.reagents.remove_reagent(/datum/reagent/consumable/monkey_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy)) - update_icon() - return + if(istype(I, /obj/item/reagent_containers/glass)) + if(I.reagents.has_reagent(/datum/reagent/consumable/monkey_energy)) + grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy))) + to_chat(user, "You pour the Monkey Energy in [src].") + I.reagents.remove_reagent(/datum/reagent/consumable/monkey_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy)) + update_appearance() + return + else if(IS_EDIBLE(I)) + if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL))) + return ..() + else if(!grill_fuel) + to_chat(user, "There is not enough fuel.") + return + else if(!grilled_item && user.transferItemToLoc(I, src)) + grilled_item = I + RegisterSignal(grilled_item, COMSIG_GRILL_COMPLETED, PROC_REF(GrillCompleted)) + to_chat(user, "You put the [grilled_item] on [src].") + update_appearance() + grill_loop.start() + return ..() /obj/machinery/grill/process(delta_time) ..() - update_icon() + update_appearance() if(grill_fuel <= 0) return else @@ -77,6 +85,7 @@ smoke.set_up(1, loc) smoke.start() if(grilled_item) + SEND_SIGNAL(grilled_item, COMSIG_ITEM_GRILLED, src, delta_time) grill_time += delta_time grilled_item.reagents.add_reagent(/datum/reagent/consumable/char, 0.5 * delta_time) grill_fuel -= GRILL_FUELUSAGE_ACTIVE * delta_time @@ -88,11 +97,6 @@ grilled_item = null return ..() -/obj/machinery/grill/Destroy() - QDEL_NULL(grill_loop) - grilled_item = null - . = ..() - /obj/machinery/grill/handle_atom_del(atom/A) if(A == grilled_item) grilled_item = null @@ -117,30 +121,21 @@ if(grilled_item) to_chat(user, "You take out [grilled_item] from [src].") grilled_item.forceMove(drop_location()) - update_icon() + update_appearance() return return ..() /obj/machinery/grill/proc/finish_grill() - switch(grill_time) //no 0-20 to prevent spam - if(20 to 30) - grilled_item.name = "lightly-grilled [grilled_item.name]" - grilled_item.desc = "[grilled_item.desc] It's been lightly grilled." - if(30 to 80) - grilled_item.name = "grilled [grilled_item.name]" - grilled_item.desc = "[grilled_item.desc] It's been grilled." - grilled_item.foodtype |= FRIED - if(80 to 100) - grilled_item.name = "heavily grilled [grilled_item.name]" - grilled_item.desc = "[grilled_item.desc] It's been heavily grilled." - grilled_item.foodtype |= FRIED - if(100 to INFINITY) //grill marks reach max alpha - grilled_item.name = "Powerfully Grilled [grilled_item.name]" - grilled_item.desc = "A [grilled_item.name]. Reminds you of your wife, wait, no, it's prettier!" - grilled_item.foodtype |= FRIED + SEND_SIGNAL(grilled_item, COMSIG_GRILL_FOOD, grilled_item, grill_time) grill_time = 0 + UnregisterSignal(grilled_item, COMSIG_GRILL_COMPLETED, PROC_REF(GrillCompleted)) grill_loop.stop() +///Called when a food is transformed by the grillable component +/obj/machinery/grill/proc/GrillCompleted(obj/item/source, atom/grilled_result) + SIGNAL_HANDLER + grilled_item = grilled_result //use the new item!! + /obj/machinery/grill/unwrenched anchored = FALSE diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index d60f250236763..1d09b6b72a037 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -29,8 +29,10 @@ /obj/machinery/processor/proc/process_food(datum/food_processor_process/recipe, atom/movable/what) if (recipe.output && loc && !QDELETED(src)) - for(var/i = 0, i < rating_amount, i++) + var/cached_multiplier = (recipe.food_multiplier * rating_amount) + for(var/i in 1 to cached_multiplier) new recipe.output(drop_location()) + if (ismob(what)) var/mob/themob = what themob.gib(TRUE,TRUE,TRUE) diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index e80e29079a6e9..42bf986021265 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -2,11 +2,56 @@ var/input var/output var/time = 40 + /// The machine required to do this recipe var/required_machine = /obj/machinery/processor + /// Multiplied additional food made when processed + var/food_multiplier = 1 /datum/food_processor_process/meat input = /obj/item/food/meat/slab - output = /obj/item/food/meatball + output = /obj/item/food/raw_meatball + food_multiplier = 3 + +/datum/food_processor_process/cutlet + input = /obj/item/food/meat/cutlet/plain + output = /obj/item/food/raw_meatball + +/datum/food_processor_process/meat/human + input = /obj/item/food/meat/slab/human + output = /obj/item/food/raw_meatball/human + +/datum/food_processor_process/cutlet/human + input = /obj/item/food/meat/cutlet/plain/human + output = /obj/item/food/raw_meatball/human + +/datum/food_processor_process/meat/corgi + input = /obj/item/food/meat/slab/corgi + output = /obj/item/food/raw_meatball/corgi + +/datum/food_processor_process/meat/xeno + input = /obj/item/food/meat/slab/xeno + output = /obj/item/food/raw_meatball/xeno + +/datum/food_processor_process/cutlet/xeno + input = /obj/item/food/meat/cutlet/xeno + output = /obj/item/food/raw_meatball/xeno + +/datum/food_processor_process/meat/bear + input = /obj/item/food/meat/slab/bear + output = /obj/item/food/raw_meatball/bear + +/datum/food_processor_process/cutlet/bear + input = /obj/item/food/meat/cutlet/bear + output = /obj/item/food/raw_meatball/bear + +/datum/food_processor_process/meat/chicken + input = /obj/item/food/meat/slab/chicken + output = /obj/item/food/raw_meatball/chicken + food_multiplier = 3 + +/datum/food_processor_process/cutlet/chicken + input = /obj/item/food/meat/cutlet/chicken + output = /obj/item/food/raw_meatball/chicken /datum/food_processor_process/bacon input = /obj/item/food/meat/rawcutlet diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 6ecf1a02fcf8b..24bc4b08519b5 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -8,10 +8,10 @@ name = "Human burger" reqs = list( /obj/item/food/bun = 1, - /obj/item/food/meat/steak/plain/human = 1 + /obj/item/food/patty/human = 1 ) parts = list( - /obj/item/food/meat/steak/plain/human = 1 + /obj/item/food/patty = 1 ) result = /obj/item/food/burger/human subcategory = CAT_BURGER @@ -19,7 +19,7 @@ /datum/crafting_recipe/food/burger name = "Burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/food/bun = 1 ) @@ -29,7 +29,7 @@ /datum/crafting_recipe/food/corgiburger name = "Corgi burger" reqs = list( - /obj/item/food/meat/slab/corgi = 1, + /obj/item/food/patty/corgi = 1, /obj/item/food/bun = 1 ) @@ -57,7 +57,7 @@ /datum/crafting_recipe/food/xenoburger name = "Xeno burger" reqs = list( - /obj/item/food/meat/steak/xeno = 1, + /obj/item/food/patty/xeno = 1, /obj/item/food/bun = 1 ) result = /obj/item/food/burger/xeno @@ -66,7 +66,7 @@ /datum/crafting_recipe/food/bearger name = "Bearger" reqs = list( - /obj/item/food/meat/steak/bear = 1, + /obj/item/food/patty/bear = 1, /obj/item/food/bun = 1 ) result = /obj/item/food/burger/bearger @@ -122,7 +122,7 @@ /datum/crafting_recipe/food/redburger name = "Red burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/red = 1, /obj/item/food/bun = 1 ) @@ -132,7 +132,7 @@ /datum/crafting_recipe/food/orangeburger name = "Orange burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/orange = 1, /obj/item/food/bun = 1 ) @@ -142,7 +142,7 @@ /datum/crafting_recipe/food/yellowburger name = "Yellow burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/yellow = 1, /obj/item/food/bun = 1 ) @@ -152,7 +152,7 @@ /datum/crafting_recipe/food/greenburger name = "Green burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/green = 1, /obj/item/food/bun = 1 ) @@ -162,7 +162,7 @@ /datum/crafting_recipe/food/blueburger name = "Blue burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/blue = 1, /obj/item/food/bun = 1 ) @@ -172,7 +172,7 @@ /datum/crafting_recipe/food/purpleburger name = "Purple burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/purple = 1, /obj/item/food/bun = 1 ) @@ -182,7 +182,7 @@ /datum/crafting_recipe/food/blackburger name = "Black burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/black = 1, /obj/item/food/bun = 1 ) @@ -192,7 +192,7 @@ /datum/crafting_recipe/food/whiteburger name = "White burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/toy/crayon/white = 1, /obj/item/food/bun = 1 ) @@ -211,7 +211,7 @@ /datum/crafting_recipe/food/bigbiteburger name = "Big bite burger" reqs = list( - /obj/item/food/meat/steak/plain = 3, + /obj/item/food/patty/plain = 3, /obj/item/food/cheese/wedge = 2, /obj/item/food/bun = 1 ) @@ -223,7 +223,7 @@ reqs = list( /datum/reagent/consumable/sodiumchloride = 5, /datum/reagent/consumable/blackpepper = 5, - /obj/item/food/meat/steak/plain = 5, + /obj/item/food/patty/plain = 5, /obj/item/food/grown/tomato = 4, /obj/item/food/cheese/wedge = 3, /obj/item/food/boiledegg = 1, @@ -255,7 +255,7 @@ /datum/crafting_recipe/food/fivealarmburger name = "Five alarm burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/food/grown/ghost_chili = 2, /obj/item/food/bun = 1 ) @@ -313,7 +313,7 @@ /datum/crafting_recipe/food/cheeseburger name = "Cheese Burger" reqs = list( - /obj/item/food/meat/steak/plain = 1, + /obj/item/food/patty/plain = 1, /obj/item/food/cheese/wedge = 1, /obj/item/food/bun = 1 ) @@ -353,7 +353,7 @@ /datum/crafting_recipe/food/chickenburger name = "Chicken Sandwich" reqs = list( - /obj/item/food/meat/steak/chicken = 1, + /obj/item/food/patty/chicken = 1, /datum/reagent/consumable/mayonnaise = 5, /obj/item/food/bun = 1 ) @@ -363,7 +363,7 @@ /datum/crafting_recipe/food/crazyhamburger name = "Crazy Hamburger" reqs = list( - /obj/item/food/meat/steak/plain = 1, // we have no horse meat sadly + /obj/item/food/patty/plain = 1, // we have no horse meat sadly /obj/item/food/grown/chili = 2, /datum/reagent/consumable/cooking_oil = 20, /obj/item/food/grown/nettle/death = 2, // closest thing to "grass of death" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index 41ad014451470..7b539a450b8c4 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -141,7 +141,7 @@ /obj/item/food/meatball = 1, /obj/item/food/meat/cutlet = 2 ) - result = /obj/item/food/sausage + result = /obj/item/food/raw_sausage subcategory = CAT_MEAT /datum/crafting_recipe/food/nugget diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm index ca80830f284b8..88301a9d199bf 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm @@ -16,13 +16,13 @@ result = /obj/item/food/sandwich subcategory = CAT_SANDWICH -/datum/crafting_recipe/food/grilled_cheese_sandwich +/datum/crafting_recipe/food/cheese_sandwich name = "Cheese sandwich" reqs = list( /obj/item/food/breadslice/plain = 2, /obj/item/food/cheese/wedge = 2 ) - result = /obj/item/food/grilled_cheese_sandwich + result = /obj/item/food/cheese_sandwich subcategory = CAT_SANDWICH /datum/crafting_recipe/food/slimesandwich diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 14e8832ff2606..694593f8e28f7 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -292,9 +292,9 @@ var/mob/living/L = A L.adjust_fire_stacks(fire_stack_strength * 0.5 * delta_time) L.IgniteMob() - else if(istype(A, /obj/item) && DT_PROB(10, delta_time)) - var/obj/item/O = A - O.microwave_act() + else if(istype(A, /obj/item)) + var/obj/item/grilled_item = A + SEND_SIGNAL(grilled_item, COMSIG_ITEM_GRILLED, src, delta_time) //Not a big fan, maybe make this use fire_act() in the future. /obj/structure/bonfire/process(delta_time) if(needs_oxygen && !CheckOxygen()) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 98684b32144d5..533b9e7e7b714 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -129,7 +129,7 @@ return to_chat(usr, "[src] clanks to life briefly before vending [prize.equipment_name]!") var/obj/created = new prize.equipment_path(loc) - if (M.CanReach(src)) + if (M.CanReach(src) && isitem(created)) M.put_in_hands(created) SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]")) . = TRUE diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index be290ffa21dad..33c789d845e56 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -766,7 +766,7 @@ else set_stat(CONSCIOUS) if(!is_blind()) - var/datum/component/blind_sense/B = GetComponent(/datum/component/blind_sense) + var/datum/component/blind_sense/B = GetComponent(/datum/component/blind_sense) B?.RemoveComponent() update_mobility() update_damage_hud() @@ -801,6 +801,9 @@ if(!getorganslot(ORGAN_SLOT_LIVER)) return FALSE + // We don't want walking husks god no + if(HAS_TRAIT(src, TRAIT_HUSK)) + src.cure_husk() return ..() /mob/living/carbon/fully_heal(admin_revive = FALSE) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 75b9770b02f25..46fd45fd1bb3e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -588,8 +588,9 @@ to_chat(C, "You feel a breath of fresh air, which is a sensation you don't recognise.") /mob/living/carbon/human/cuff_resist(obj/item/I) - if(dna && dna.check_mutation(HULK)) - say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") + if(HAS_TRAIT(src, TRAIT_FAST_CUFF_REMOVAL)) + if(dna && dna.check_mutation(HULK)) + say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") if(..(I, cuff_break = FAST_CUFFBREAK)) dropItemToGround(I) else diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 8223885b6036f..52e0b37c4cc8c 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -8,7 +8,7 @@ meat = /obj/item/food/meat/slab/human/mutant/zombie species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING) inherent_traits = list(TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,\ - TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS) + TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS, TRAIT_FAST_CUFF_REMOVAL) inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID) mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 4ef1b04c85762..55e8d04d80df4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -93,6 +93,40 @@ There are several things that need to be remembered: //damage overlays update_damage_overlays() +/mob/living/carbon/human/update_clothing(slot_flags) + if(slot_flags & ITEM_SLOT_BACK) + update_inv_back() + if(slot_flags & ITEM_SLOT_MASK) + update_inv_wear_mask() + if(slot_flags & ITEM_SLOT_NECK) + update_inv_neck() + if(slot_flags & ITEM_SLOT_HANDCUFFED) + update_inv_handcuffed() + if(slot_flags & ITEM_SLOT_LEGCUFFED) + update_inv_legcuffed() + if(slot_flags & ITEM_SLOT_BELT) + update_inv_belt() + if(slot_flags & ITEM_SLOT_ID) + update_inv_wear_id() + if(slot_flags & ITEM_SLOT_EARS) + update_inv_ears() + if(slot_flags & ITEM_SLOT_EYES) + update_inv_glasses() + if(slot_flags & ITEM_SLOT_GLOVES) + update_inv_gloves() + if(slot_flags & ITEM_SLOT_HEAD) + update_inv_head() + if(slot_flags & ITEM_SLOT_FEET) + update_inv_shoes() + if(slot_flags & ITEM_SLOT_OCLOTHING) + update_inv_wear_suit() + if(slot_flags & ITEM_SLOT_ICLOTHING) + update_inv_w_uniform() + if(slot_flags & ITEM_SLOT_SUITSTORE) + update_inv_s_store() + if(slot_flags & ITEM_SLOT_LPOCKET || slot_flags & ITEM_SLOT_RPOCKET) + update_inv_pockets() + /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index baa849705bb87..57a54c5f479ff 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -4,6 +4,9 @@ /mob/proc/regenerate_icons() //TODO: phase this out completely if possible return +/mob/proc/update_clothing(slot_flags) + return + /mob/proc/update_icons() return diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index 200faa172dabb..0660c0fb637de 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -4,7 +4,7 @@ name = "picture frame" desc = "The perfect showcase for your favorite deathtrap memories." icon = 'icons/obj/decals.dmi' - custom_materials = null + custom_materials = list(/datum/material/wood = 2000) flags_1 = 0 icon_state = "frame-empty" result_path = /obj/structure/sign/picture_frame @@ -65,6 +65,7 @@ desc = "Every time you look it makes you laugh." icon = 'icons/obj/decals.dmi' icon_state = "frame-empty" + custom_materials = list(/datum/material/wood = 2000) layer = ABOVE_WINDOW_LAYER var/obj/item/photo/framed var/persistence_id diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 9e0ce641eeab8..ce4b100c3cfe0 100755 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -431,6 +431,7 @@ amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50, 100) volume = 100 + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT) reagent_flags = OPENCONTAINER spillable = TRUE var/obj/item/grinded diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 32454a53fea2f..f388dbfb71a8f 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -571,6 +571,14 @@ category = list ("Misc. Machinery") departmental_flags = DEPARTMENTAL_FLAG_SERVICE +/datum/design/board/griddle + name = "Machine Design (Griddle)" + desc = "The circuit board for a Griddle." + id = "griddle" + build_path = /obj/item/circuitboard/machine/griddle + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + /datum/design/board/donksofttoyvendor name = "Machine Design (Donksoft Toy Vendor Board)" desc = "The circuit board for a Donksoft Toy Vendor." @@ -723,3 +731,11 @@ build_path = /obj/item/electronics/genpop_interface departmental_flags = DEPARTMENTAL_FLAG_SECURITY category = list("Misc. Machinery") + +/datum/design/board/sheetifier + name = "Sheetifier" + desc = "This machine turns weird things into sheets." + id = "sheetifier" + build_path = /obj/item/circuitboard/machine/sheetifier + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ALL diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 9174d2dc8b990..c2de7f1b63abe 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -287,7 +287,7 @@ "dish_drive", "fat_sucker", "gibber", - "gibber", + "griddle", "microwave", "monkey_recycler", "processor", @@ -451,6 +451,7 @@ "rcd_loaded", "rpd_loaded", "weldingmask", + "sheetifier" ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/tgui/status_composers.dm b/code/modules/tgui/status_composers.dm index 3384a89449f03..9a2200eda3b65 100644 --- a/code/modules/tgui/status_composers.dm +++ b/code/modules/tgui/status_composers.dm @@ -47,6 +47,14 @@ /proc/ui_status_user_is_abled(mob/user, atom/source) return user.shared_ui_interaction(source) +/// Return UI_INTERACTIVE if the user is strictly adjacent to the target atom, whether they can see it or not. +/// Return UI_CLOSE otherwise. +/proc/ui_status_user_strictly_adjacent(mob/user, atom/target) + if(get_dist(target, user) > 1) + return UI_CLOSE + + return UI_INTERACTIVE + /// Returns a UI status such that advanced tool users will be able to update, /// but everyone else can only watch. /proc/ui_status_user_is_advanced_tool_user(mob/user, atom/source) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 924f08a59d823..cc928a429e305 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -26,15 +26,23 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C name = "generic" ///Typepath of the product that is created when this record "sells" var/product_path = null + ///How many of this product we currently have var/amount = 0 + ///How many we can store at maximum var/max_amount = 0 + ///Does the item have a custom price override var/custom_price + ///Does the item have a custom premium price override var/custom_premium_price + /// The category the product was in, if any. + /// Sourced directly from product_categories. + var/category + /** * # vending machines * @@ -78,7 +86,19 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C * * form should be list(/type/path = amount, /type/path2 = amount2) */ - var/list/products = list() + var/list/products = list() + + /** + * List of products this machine sells, categorized. + * Can only be used as an alternative to `products`, not alongside it. + * + * Form should be list( + * "name" = "Category Name", + * "icon" = "UI Icon (Font Awesome or tgfont)", + * "products" = list(/type/path = amount, ...), + * ) + */ + var/list/product_categories = null /** * List of products this machine sells when you hack it @@ -184,9 +204,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C . = ..() wires = new /datum/wires/vending(src) if(build_inv) //non-constructable vending machine - build_inventory(products, product_records) - build_inventory(contraband, hidden_records) - build_inventory(premium, coin_records) + build_inventories() slogan_list = splittext(product_slogans, ";") // So not all machines speak at the exact same time. @@ -219,12 +237,14 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C if(!component_parts) return + build_products_from_categories() + product_records = list() hidden_records = list() coin_records = list() - build_inventory(products, product_records, start_empty = TRUE) - build_inventory(contraband, hidden_records, start_empty = TRUE) - build_inventory(premium, coin_records, start_empty = TRUE) + + build_inventories(start_empty = TRUE) + for(var/obj/item/vending_refill/VR in component_parts) restock(VR) @@ -271,7 +291,14 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C * * recordlist - the list containing /datum/data/vending_product datums * * startempty - should we set vending_product record amount from the product list (so it's prefilled at roundstart) */ -/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE) +/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, list/categories, start_empty = FALSE) + + var/list/product_to_category = list() + for (var/list/category as anything in categories) + var/list/products = category["products"] + for (var/product_key in products) + product_to_category[product_key] = category + for(var/typepath in productlist) var/amount = productlist[typepath] if(isnull(amount)) @@ -286,7 +313,32 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C R.max_amount = amount R.custom_price = initial(temp.custom_price) R.custom_premium_price = initial(temp.custom_premium_price) + R.category = product_to_category[typepath] recordlist += R + +/obj/machinery/vending/proc/build_inventories(start_empty) + build_inventory(products, product_records, product_categories, start_empty) + build_inventory(contraband, hidden_records, create_categories_from(contraband, "mask", "Contraband"), start_empty) + build_inventory(premium, coin_records, create_categories_from(premium, "coins", "Premium"), start_empty) + +/obj/machinery/vending/proc/create_categories_from(products, icon, name) + return list(list( + "name" = name, + "icon" = icon, + "products" = products, + )) + +/obj/machinery/vending/proc/build_products_from_categories() + if (isnull(product_categories)) + return + + products = list() + + for (var/list/category in product_categories) + var/list/category_products = category["products"] + for (var/product_key in category_products) + products[product_key] += category_products[product_key] + /** * Refill a vending machine from a refill canister * @@ -303,9 +355,25 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C if (!canister.premium) canister.premium = premium.Copy() . = 0 - . += refill_inventory(canister.products, product_records) + if (isnull(canister.product_categories) && !isnull(product_categories)) + canister.product_categories = product_categories.Copy() + + if (!isnull(canister.product_categories)) + var/list/products_unwrapped = list() + for (var/list/category as anything in canister.product_categories) + var/list/products = category["products"] + for (var/product_key in products) + products_unwrapped[product_key] += products[product_key] + + . += refill_inventory(products_unwrapped, product_records) + else + . += refill_inventory(canister.products, product_records) + . += refill_inventory(canister.contraband, hidden_records) . += refill_inventory(canister.premium, coin_records) + + return . + /** * Refill our inventory from the passed in product list into the record list * @@ -335,7 +403,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C if (!R) CRASH("Constructible vending machine did not have a refill canister") - R.products = unbuild_inventory(product_records) + unbuild_inventory_into(product_records, R.products, R.product_categories) R.contraband = unbuild_inventory(hidden_records) R.premium = unbuild_inventory(coin_records) @@ -348,6 +416,50 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/datum/data/vending_product/record = R .[record.product_path] += record.amount +/// Put stuff in product_categories if the products have a category, otherwise put them in products +/obj/machinery/vending/proc/unbuild_inventory_into(list/product_records, list/products, list/product_categories) + products?.Cut() + product_categories?.Cut() + + var/others_have_category = null + + var/list/categories_to_index = list() + + for (var/datum/data/vending_product/record as anything in product_records) + var/list/category = record.category + var/has_category = !isnull(category) + + if (isnull(others_have_category)) + others_have_category = has_category + else if (others_have_category != has_category) + if (has_category) + WARNING("[record.product_path] in [type] has a category, but other products don't") + else + WARNING("[record.product_path] in [type] does not have a category, but other products do") + + continue + + if (has_category) + var/index = categories_to_index.Find(category) + + if (index) + var/list/category_in_list = product_categories[index] + var/list/products_in_category = category_in_list["products"] + products_in_category[record.product_path] += record.amount + else + categories_to_index += list(category) + index = categories_to_index.len + + var/list/category_clone = category.Copy() + + var/list/initial_product_list = list() + initial_product_list[record.product_path] = record.amount + category_clone["products"] = initial_product_list + + product_categories += list(category_clone) + else + products[record.product_path] = record.amount + /obj/machinery/vending/crowbar_act(mob/living/user, obj/item/I) if(!component_parts) return FALSE @@ -647,45 +759,57 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "Vending") + ui = new(user, src, "Vending", name) ui.open() /obj/machinery/vending/ui_static_data(mob/user) - . = list() - .["onstation"] = onstation - .["department_bitflag"] = dept_req_for_free - .["product_records"] = list() - for (var/datum/data/vending_product/R in product_records) - var/list/data = list( - path = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-"), - name = R.name, - price = R.custom_price || default_price, - max_amount = R.max_amount, - ref = REF(R) - ) - .["product_records"] += list(data) - .["coin_records"] = list() - for (var/datum/data/vending_product/R in coin_records) - var/list/data = list( - path = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-"), - name = R.name, - price = R.custom_premium_price || extra_price, - max_amount = R.max_amount, - ref = REF(R), - premium = TRUE - ) - .["coin_records"] += list(data) - .["hidden_records"] = list() - for (var/datum/data/vending_product/R in hidden_records) - var/list/data = list( - path = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-"), - name = R.name, - price = R.custom_price || default_price, - max_amount = R.max_amount, - ref = REF(R), - premium = TRUE + var/list/data = list() + data["onstation"] = onstation + data["department_bitflag"] = dept_req_for_free + data["product_records"] = list() + + var/list/categories = list() + + data["product_records"] = collect_records_for_static_data(product_records, categories) + data["coin_records"] = collect_records_for_static_data(coin_records, categories, premium = TRUE) + data["hidden_records"] = collect_records_for_static_data(hidden_records, categories, premium = TRUE) + + data["categories"] = categories + + return data + +/obj/machinery/vending/proc/collect_records_for_static_data(list/records, list/categories, premium) + var/static/list/default_category = list( + "name" = "Products", + "icon" = "cart-shopping", + ) + + var/list/out_records = list() + + for (var/datum/data/vending_product/record as anything in records) + var/list/static_record = list( + path = replacetext(replacetext("[record.product_path]", "/obj/item/", ""), "/", "-"), + name = record.name, + price = premium ? (record.custom_premium_price || extra_price) : (record.custom_price || default_price), + max_amount = record.max_amount, + ref = REF(record), ) - .["hidden_records"] += list(data) + + var/list/category = record.category || default_category + if (!isnull(category)) + if (!(category["name"] in categories)) + categories[category["name"]] = list( + "icon" = category["icon"], + ) + + static_record["category"] = category["name"] + + if (premium) + static_record["premium"] = TRUE + + out_records += list(static_record) + + return out_records /obj/machinery/vending/ui_data(mob/user) . = list() @@ -711,8 +835,13 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C if(R) .["user"]["job"] = R.fields["rank"] .["stock"] = list() - for (var/datum/data/vending_product/R in product_records + coin_records + hidden_records) - .["stock"]["[replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-")]"] = R.amount + for (var/datum/data/vending_product/product_record in product_records + coin_records + hidden_records) + var/list/product_data = list( + name = product_record.name, + amount = product_record.amount, + ) + + .["stock"][product_record.name] = product_data .["extended_inventory"] = extended_inventory /obj/machinery/vending/ui_act(action, params) @@ -721,83 +850,141 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C return switch(action) if("vend") - if(!vend_ready) - return - if(panel_open) - to_chat(usr, "The vending machine cannot dispense products while its service panel is open!") - return - vend_ready = FALSE //One thing at a time!! - var/datum/data/vending_product/R = locate(params["ref"]) - var/list/record_to_check = product_records + coin_records - if(extended_inventory) - record_to_check = product_records + coin_records + hidden_records - if(!R || !istype(R) || !R.product_path) - vend_ready = TRUE - return - var/price_to_use = default_price - if(R.custom_price) - price_to_use = R.custom_price - if(R in hidden_records) - if(!extended_inventory) - vend_ready = TRUE - return - else if (!(R in record_to_check)) - vend_ready = TRUE - message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!") - return - if (R.amount <= 0) - say("Sold out of [R.name].") - flick(icon_deny,src) - vend_ready = TRUE - return - if(onstation && ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/obj/item/card/id/C = H.get_idcard(TRUE) + . = vend(params) + if("select_colors") + . = select_colors(params) - var/datum/bank_account/account = C?.registered_account - if(account?.account_job && (account?.active_departments & dept_req_for_free)) - price_to_use = 0 - if(coin_records.Find(R)) - price_to_use = R.custom_premium_price ? R.custom_premium_price : extra_price - if(price_to_use) - if(!H.spend_cash(price_to_use)) - var/additional_message = "" - if(!C) - additional_message += "No ID card found. " - if(!C?.registered_account) - additional_message += "No account found. " - say("[additional_message]Not enough funds to purchase [R.name].") - flick(icon_deny,src) - vend_ready = TRUE - return +/obj/machinery/vending/proc/can_vend(user, silent=FALSE) + . = FALSE + if(!vend_ready) + return + if(panel_open) + to_chat(user, "The vending machine cannot dispense products while its service panel is open!") + return + return TRUE - // each department (seller_department) will earn the profit - if(price_to_use && seller_department) - var/list/dept_list = SSeconomy.get_dept_id_by_bitflag(seller_department) - if(length(dept_list)) - price_to_use = round(price_to_use/length(dept_list)) - for(var/datum/bank_account/department/D in dept_list) - if(D) - D.adjust_money(price_to_use) - - if(last_shopper != REF(usr) || COOLDOWN_FINISHED(src, purchase_message_cooldown)) - say("Thank you for shopping with [src]!") - COOLDOWN_START(src, purchase_message_cooldown, (5 SECONDS)) - //This is not the best practice, but it's safe enough here since the chances of two people using a machine with the same ref in 5 seconds is fuck low - last_shopper = REF(usr) - use_power(5) - if(icon_vend) //Show the vending animation if needed - flick(icon_vend,src) - playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) - var/obj/item/vended_item = new R.product_path(get_turf(src)) - R.amount-- - if(usr.CanReach(src) && usr.put_in_hands(vended_item)) - to_chat(usr, "You take [R.name] out of the slot.") - else - to_chat(usr, "[capitalize(R.name)] falls onto the floor!") - . = TRUE - SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]")) +/obj/machinery/vending/proc/select_colors(list/params) + . = TRUE + if(!can_vend(usr)) + return + var/datum/data/vending_product/product = locate(params["ref"]) + var/atom/fake_atom = product.product_path + + var/list/allowed_configs = list() + var/config = initial(fake_atom.greyscale_config) + if(!config) + return + allowed_configs += "[config]" + if(ispath(fake_atom, /obj/item)) + var/obj/item/item = fake_atom + if(initial(item.greyscale_config_worn)) + allowed_configs += "[initial(item.greyscale_config_worn)]" + if(initial(item.greyscale_config_inhand_left)) + allowed_configs += "[initial(item.greyscale_config_inhand_left)]" + if(initial(item.greyscale_config_inhand_right)) + allowed_configs += "[initial(item.greyscale_config_inhand_right)]" + + var/datum/greyscale_modify_menu/menu = new( + src, usr, allowed_configs, CALLBACK(src, PROC_REF(vend_greyscale), params), + starting_icon_state=initial(fake_atom.icon_state), + starting_config=initial(fake_atom.greyscale_config), + starting_colors=initial(fake_atom.greyscale_colors) + ) + menu.ui_interact(usr) + +/obj/machinery/vending/proc/vend_greyscale(list/params, datum/greyscale_modify_menu/menu) + if(usr != menu.user) + return + if(!menu.target.can_interact(usr)) + return + vend(params, menu.split_colors) + +/obj/machinery/vending/proc/vend(list/params, list/greyscale_colors) + . = TRUE + if(!can_vend(usr)) + return + vend_ready = FALSE //One thing at a time!! + var/datum/data/vending_product/R = locate(params["ref"]) + var/list/record_to_check = product_records + coin_records + if(extended_inventory) + record_to_check = product_records + coin_records + hidden_records + if(!R || !istype(R) || !R.product_path) + vend_ready = TRUE + return + var/price_to_use = default_price + if(R.custom_price) + price_to_use = R.custom_price + if(R in hidden_records) + if(!extended_inventory) + vend_ready = TRUE + return + else if (!(R in record_to_check)) + vend_ready = TRUE + message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!") + return + if (R.amount <= 0) + say("Sold out of [R.name].") + flick(icon_deny,src) + vend_ready = TRUE + return + if(onstation) + var/obj/item/card/id/C + if(isliving(usr)) + var/mob/living/L = usr + C = L.get_idcard(TRUE) + if(!C) + say("No card found.") + flick(icon_deny,src) + vend_ready = TRUE + return + else if (!C.registered_account) + say("No account found.") + flick(icon_deny,src) + vend_ready = TRUE + return + else if(!C.registered_account.account_job) + say("Departmental accounts have been blacklisted from personal expenses due to embezzlement.") + flick(icon_deny, src) + vend_ready = TRUE + return + + var/datum/bank_account/account = C.registered_account + if(account.account_job && (account.active_departments & dept_req_for_free)) + price_to_use = 0 + if(coin_records.Find(R) || hidden_records.Find(R)) + price_to_use = R.custom_premium_price ? R.custom_premium_price : extra_price + if(price_to_use && !account.adjust_money(-price_to_use)) + say("You do not possess the funds to purchase [R.name].") + flick(icon_deny,src) vend_ready = TRUE + return + + if(price_to_use && seller_department) + var/list/dept_list = SSeconomy.get_dept_id_by_bitflag(seller_department) + if(length(dept_list)) + price_to_use = round(price_to_use/length(dept_list)) + for(var/datum/bank_account/department/D in dept_list) + if(D) + D.adjust_money(price_to_use) + + if(last_shopper != usr || purchase_message_cooldown < world.time) + say("Thank you for shopping with [src]!") + purchase_message_cooldown = world.time + 5 SECONDS + last_shopper = usr + use_power(5) + if(icon_vend) //Show the vending animation if needed + flick(icon_vend,src) + playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) + var/obj/item/vended_item = new R.product_path(get_turf(src)) + if(greyscale_colors) + vended_item.set_greyscale(colors=greyscale_colors) + R.amount-- + if(usr.CanReach(src) && usr.put_in_hands(vended_item)) + to_chat(usr, "You take [R.name] out of the slot.") + else + to_chat(usr, "[capitalize(R.name)] falls onto the floor!") + SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]")) + vend_ready = TRUE /obj/machinery/vending/process(delta_time) if(machine_stat & (BROKEN|NOPOWER)) diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 402ae979b0c6a..933d7e6d82f20 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -41,6 +41,7 @@ /obj/item/clothing/under/dress/skirt = 1, /obj/item/clothing/accessory/waistcoat = 1, /obj/item/clothing/under/suit/black = 1, + /obj/item/clothing/under/suit/relaxed = 1, /obj/item/clothing/head/that = 1, /obj/item/clothing/under/costume/kilt = 1, /obj/item/clothing/head/beret/vintage = 1, diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 68986c1a8b413..a04b245598aa1 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -1,153 +1,204 @@ -//DON'T FORGET TO CHANGE THE REFILL SIZE IF YOU CHANGE THE MACHINE'S CONTENTS! /obj/machinery/vending/clothing - name = "ClothesMate" //renamed to make the slogan rhyme + name = "ClothesMate" desc = "A vending machine for clothing." icon_state = "clothes" icon_deny = "clothes-deny" product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this swag!;Why leave style up to fate? Use the ClothesMate!" vend_reply = "Thank you for using the ClothesMate!" light_color = LIGHT_COLOR_GREEN - products = list(/obj/item/clothing/head/beanie = 3, - /obj/item/clothing/head/beanie/black = 3, - /obj/item/clothing/head/beanie/red = 3, - /obj/item/clothing/head/beanie/green = 3, - /obj/item/clothing/head/beanie/darkblue = 3, - /obj/item/clothing/head/beanie/purple = 3, - /obj/item/clothing/head/beanie/yellow = 3, - /obj/item/clothing/head/beanie/orange = 3, - /obj/item/clothing/head/beanie/cyan = 3, - /obj/item/clothing/head/beanie/christmas = 3, - /obj/item/clothing/head/beanie/striped = 3, - /obj/item/clothing/head/beanie/stripedred = 3, - /obj/item/clothing/head/beanie/stripedblue = 3, - /obj/item/clothing/head/beanie/stripedgreen = 3, - /obj/item/clothing/head/beanie/rasta = 3, - /obj/item/clothing/head/beret = 3, - /obj/item/clothing/head/beret/black = 3, - /obj/item/clothing/head/kippah = 3, - /obj/item/clothing/head/taqiyahred = 3, - /obj/item/clothing/gloves/fingerless = 2, - /obj/item/clothing/neck/scarf/pink = 3, - /obj/item/clothing/neck/scarf/red = 3, - /obj/item/clothing/neck/scarf/green = 3, - /obj/item/clothing/neck/scarf/darkblue = 3, - /obj/item/clothing/neck/scarf/purple = 3, - /obj/item/clothing/neck/scarf/yellow = 3, - /obj/item/clothing/neck/scarf/orange = 3, - /obj/item/clothing/neck/scarf/cyan = 3, - /obj/item/clothing/neck/scarf = 3, - /obj/item/clothing/neck/scarf/black = 3, - /obj/item/clothing/neck/scarf/zebra = 3, - /obj/item/clothing/neck/scarf/christmas = 3, - /obj/item/clothing/neck/stripedredscarf = 3, - /obj/item/clothing/neck/stripedbluescarf = 3, - /obj/item/clothing/neck/stripedgreenscarf = 3, - /obj/item/clothing/neck/tie/blue = 3, - /obj/item/clothing/neck/tie/red = 3, - /obj/item/clothing/neck/tie/black = 3, - /obj/item/clothing/neck/tie/horrible = 3, - /obj/item/storage/belt/fannypack = 3, - /obj/item/storage/belt/fannypack/blue = 3, - /obj/item/storage/belt/fannypack/red = 3, - /obj/item/clothing/ears/headphones = 2, - /obj/item/clothing/under/misc/overalls = 2, - /obj/item/clothing/under/pants/jeans = 2, - /obj/item/clothing/under/pants/classicjeans = 2, - /obj/item/clothing/under/pants/camo = 2, - /obj/item/clothing/under/pants/blackjeans = 2, - /obj/item/clothing/under/pants/khaki = 2, - /obj/item/clothing/under/pants/white = 2, - /obj/item/clothing/under/pants/red = 2, - /obj/item/clothing/under/pants/black = 2, - /obj/item/clothing/under/pants/tan = 2, - /obj/item/clothing/under/pants/track = 2, - /obj/item/clothing/suit/hooded/hoodie = 3, - /obj/item/clothing/suit/hooded/hoodie/blue = 3, - /obj/item/clothing/suit/hooded/hoodie/green = 3, - /obj/item/clothing/suit/hooded/hoodie/orange = 3, - /obj/item/clothing/suit/hooded/hoodie/pink = 3, - /obj/item/clothing/suit/hooded/hoodie/red = 3, - /obj/item/clothing/suit/hooded/hoodie/black = 3, - /obj/item/clothing/suit/hooded/hoodie/yellow = 3, - /obj/item/clothing/suit/hooded/hoodie/darkblue = 3, - /obj/item/clothing/suit/hooded/hoodie/teal = 3, - /obj/item/clothing/suit/hooded/hoodie/purple = 3, - /obj/item/clothing/shoes/winterboots = 3, - /obj/item/clothing/shoes/jackboots_replica = 3, - /obj/item/clothing/shoes/sneakers/black = 4, - /obj/item/clothing/shoes/sneakers/brown = 4, - /obj/item/clothing/shoes/sneakers/yellow = 4, - /obj/item/clothing/shoes/sneakers/green = 4, - /obj/item/clothing/shoes/sneakers/blue = 4, - /obj/item/clothing/shoes/sneakers/purple = 4, - /obj/item/clothing/shoes/sneakers/red = 4, - /obj/item/clothing/shoes/sneakers/orange = 4, - /obj/item/clothing/shoes/sneakers/white = 4, - /obj/item/clothing/head/wig/natural = 4, - /obj/item/clothing/under/dress/skirt/plaid = 2, - /obj/item/clothing/under/dress/skirt/plaid/blue = 2, - /obj/item/clothing/under/dress/skirt/plaid/green = 2, - /obj/item/clothing/under/dress/skirt/plaid/purple = 2, - /obj/item/clothing/under/dress/skirt = 2, - /obj/item/clothing/under/dress/skirt/blue = 2, - /obj/item/clothing/under/dress/skirt/red = 2, - /obj/item/clothing/under/dress/skirt/purple = 2, - /obj/item/clothing/suit/jacket = 2, - /obj/item/clothing/suit/jacket/puffer/vest = 2, - /obj/item/clothing/suit/jacket/puffer = 2, - /obj/item/clothing/suit/toggle/softshell = 2, - /obj/item/clothing/suit/jacket/letterman = 2, - /obj/item/clothing/suit/jacket/letterman_red = 2, - /obj/item/clothing/glasses/sunglasses = 2, - /obj/item/clothing/glasses/regular = 2, - /obj/item/clothing/glasses/regular/jamjar = 1, - /obj/item/clothing/glasses/orange = 1, - /obj/item/clothing/glasses/red = 1, - /obj/item/clothing/under/suit/navy = 1, - /obj/item/clothing/under/suit/black_really = 1, - /obj/item/clothing/under/suit/burgundy = 1, - /obj/item/clothing/under/suit/charcoal = 1, - /obj/item/clothing/under/suit/white = 1, - /obj/item/clothing/under/suit/sl = 1, - /obj/item/clothing/accessory/waistcoat = 1, - /obj/item/clothing/head/that = 1, - /obj/item/clothing/head/fedora = 1, - /obj/item/clothing/glasses/monocle = 1, - /obj/item/clothing/head/sombrero = 1, - /obj/item/clothing/suit/poncho = 1, - /obj/item/clothing/head/cowboy = 1, - /obj/item/clothing/under/costume/kilt = 1, - /obj/item/clothing/under/dress/sundress = 1, - /obj/item/clothing/under/dress/striped = 1, - /obj/item/clothing/under/dress/sailor = 1, - /obj/item/clothing/under/dress/redeveninggown = 1, - /obj/item/clothing/under/dress/blacktango = 1, - /obj/item/clothing/suit/ianshirt = 1, - /obj/item/clothing/suit/hooded/wintercoat/old = 3, - /obj/item/clothing/suit/hooded/wintercoat/white = 3, - /obj/item/clothing/shoes/laceup = 2, - /obj/item/clothing/shoes/sandal = 2, - /obj/item/clothing/suit/jacket/miljacket = 1, - /obj/item/clothing/suit/apron/purple_bartender = 2, - /obj/item/clothing/under/rank/civilian/bartender/purple = 2) - contraband = list(/obj/item/clothing/under/syndicate/tacticool = 1, - /obj/item/clothing/mask/balaclava = 1, - /obj/item/clothing/head/ushanka = 1, - /obj/item/clothing/under/costume/soviet = 1, - /obj/item/storage/belt/fannypack/black = 2, - /obj/item/clothing/suit/jacket/letterman_syndie = 1, - /obj/item/clothing/under/costume/jabroni = 1, - /obj/item/clothing/suit/vapeshirt = 1, - /obj/item/clothing/under/costume/geisha = 1) - premium = list(/obj/item/clothing/under/suit/checkered = 1, - /obj/item/clothing/suit/jacket/leather = 1, - /obj/item/clothing/suit/jacket/leather/overcoat = 1, - /obj/item/clothing/under/pants/mustangjeans = 1, - /obj/item/clothing/neck/necklace/dope = 3, - /obj/item/clothing/suit/jacket/letterman_nanotrasen = 1) + product_categories = list( + list( + "name" = "Head", + "icon" = "hat-cowboy", + "products" = list( + /obj/item/clothing/head/wig/natural = 4, + /obj/item/clothing/head/beanie = 3, + /obj/item/clothing/head/beanie/black = 3, + /obj/item/clothing/head/beanie/red = 3, + /obj/item/clothing/head/beanie/green = 3, + /obj/item/clothing/head/beanie/darkblue = 3, + /obj/item/clothing/head/beanie/purple = 3, + /obj/item/clothing/head/beanie/yellow = 3, + /obj/item/clothing/head/beanie/orange = 3, + /obj/item/clothing/head/beanie/cyan = 3, + /obj/item/clothing/head/beanie/christmas = 3, + /obj/item/clothing/head/beanie/striped = 3, + /obj/item/clothing/head/beanie/stripedred = 3, + /obj/item/clothing/head/beanie/stripedblue = 3, + /obj/item/clothing/head/beanie/stripedgreen = 3, + /obj/item/clothing/head/beanie/rasta = 3, + /obj/item/clothing/head/beret = 3, + /obj/item/clothing/head/beret/black = 3, + /obj/item/clothing/neck/scarf/pink = 3, + /obj/item/clothing/neck/scarf/red = 3, + /obj/item/clothing/neck/scarf/green = 3, + /obj/item/clothing/neck/scarf/darkblue = 3, + /obj/item/clothing/neck/scarf/purple = 3, + /obj/item/clothing/neck/scarf/yellow = 3, + /obj/item/clothing/neck/scarf/orange = 3, + /obj/item/clothing/neck/scarf/cyan = 3, + /obj/item/clothing/neck/scarf = 3, + /obj/item/clothing/neck/scarf/black = 3, + /obj/item/clothing/neck/scarf/zebra = 3, + /obj/item/clothing/neck/scarf/christmas = 3, + /obj/item/clothing/neck/stripedredscarf = 3, + /obj/item/clothing/neck/stripedbluescarf = 3, + /obj/item/clothing/neck/stripedgreenscarf = 3, + /obj/item/clothing/neck/tie/blue = 3, + /obj/item/clothing/neck/tie/red = 3, + /obj/item/clothing/neck/tie/black = 3, + /obj/item/clothing/neck/tie/horrible = 3, + /obj/item/clothing/head/kippah = 3, + /obj/item/clothing/head/taqiyahred = 3, + /obj/item/clothing/head/that = 1, + /obj/item/clothing/head/fedora = 1, + /obj/item/clothing/head/cowboy = 1, + /obj/item/clothing/head/sombrero = 1, + + ), + ), + + list( + "name" = "Accessories", + "icon" = "glasses", + "products" = list( + /obj/item/clothing/accessory/waistcoat = 1, + /obj/item/clothing/glasses/regular = 2, + /obj/item/clothing/glasses/regular/jamjar = 1, + /obj/item/clothing/glasses/regular/circle = 1, + /obj/item/clothing/glasses/sunglasses = 2, + /obj/item/clothing/glasses/sunglasses/circle_sunglasses = 1, + /obj/item/clothing/glasses/orange = 1, + /obj/item/clothing/glasses/red = 1, + /obj/item/clothing/gloves/fingerless = 2, + /obj/item/storage/belt/fannypack = 3, + /obj/item/storage/belt/fannypack/blue = 3, + /obj/item/storage/belt/fannypack/red = 3, + ), + ), + + list( + "name" = "Under", + "icon" = "shirt", + "products" = list( + /obj/item/clothing/under/pants/jeans = 2, + /obj/item/clothing/under/pants/classicjeans = 2, + /obj/item/clothing/under/pants/blackjeans = 2, + /obj/item/clothing/under/pants/khaki = 2, + /obj/item/clothing/under/pants/white = 2, + /obj/item/clothing/under/pants/red = 2, + /obj/item/clothing/under/pants/black = 2, + /obj/item/clothing/under/pants/tan = 2, + /obj/item/clothing/under/dress/sundress = 1, + /obj/item/clothing/under/dress/blacktango = 1, + /obj/item/clothing/under/dress/redeveninggown = 1, + /obj/item/clothing/under/dress/skirt/plaid = 2, + /obj/item/clothing/under/dress/skirt/plaid/blue = 2, + /obj/item/clothing/under/dress/skirt/plaid/green = 2, + /obj/item/clothing/under/dress/skirt/plaid/purple = 2, + /obj/item/clothing/under/dress/skirt = 2, + /obj/item/clothing/under/dress/skirt/blue = 2, + /obj/item/clothing/under/dress/skirt/red = 2, + /obj/item/clothing/under/dress/skirt/purple = 2, + /obj/item/clothing/under/misc/overalls = 2, + /obj/item/clothing/under/pants/camo = 2, + /obj/item/clothing/under/pants/track = 2, + /obj/item/clothing/under/costume/kilt = 1, + /obj/item/clothing/under/dress/striped = 1, + /obj/item/clothing/under/dress/sailor = 1, + ), + ), + + list( + "name" = "Suits & Skirts", + "icon" = "vest", + "products" = list( + /obj/item/clothing/suit/hooded/wintercoat/old = 3, + /obj/item/clothing/suit/hooded/wintercoat/white = 3, + /obj/item/clothing/under/suit/navy = 1, + /obj/item/clothing/under/suit/black_really = 1, + /obj/item/clothing/under/suit/burgundy = 1, + /obj/item/clothing/under/suit/charcoal = 1, + /obj/item/clothing/under/suit/white = 1, + /obj/item/clothing/under/suit/sl = 1, + /obj/item/clothing/under/suit/tan = 1, + /obj/item/clothing/suit/jacket = 2, + /obj/item/clothing/suit/jacket/puffer/vest = 2, + /obj/item/clothing/suit/jacket/puffer = 2, + /obj/item/clothing/suit/toggle/softshell = 2, + /obj/item/clothing/suit/jacket/letterman = 2, + /obj/item/clothing/suit/jacket/letterman_red = 2, + /obj/item/clothing/suit/poncho = 1, + /obj/item/clothing/suit/jacket/miljacket = 1, + /obj/item/clothing/suit/hooded/hoodie = 3, + /obj/item/clothing/suit/hooded/hoodie/blue = 3, + /obj/item/clothing/suit/hooded/hoodie/green = 3, + /obj/item/clothing/suit/hooded/hoodie/orange = 3, + /obj/item/clothing/suit/hooded/hoodie/pink = 3, + /obj/item/clothing/suit/hooded/hoodie/red = 3, + /obj/item/clothing/suit/hooded/hoodie/black = 3, + /obj/item/clothing/suit/hooded/hoodie/yellow = 3, + /obj/item/clothing/suit/hooded/hoodie/darkblue = 3, + /obj/item/clothing/suit/hooded/hoodie/teal = 3, + /obj/item/clothing/suit/hooded/hoodie/purple = 3, + /obj/item/clothing/suit/ianshirt = 1, + ), + ), + + list( + "name" = "Shoes", + "icon" = "socks", + "products" = list( + /obj/item/clothing/shoes/sneakers/black = 4, + /obj/item/clothing/shoes/sneakers/brown = 4, + /obj/item/clothing/shoes/sneakers/yellow = 4, + /obj/item/clothing/shoes/sneakers/green = 4, + /obj/item/clothing/shoes/sneakers/blue = 4, + /obj/item/clothing/shoes/sneakers/purple = 4, + /obj/item/clothing/shoes/sneakers/red = 4, + /obj/item/clothing/shoes/sneakers/orange = 4, + /obj/item/clothing/shoes/sneakers/white = 4, + /obj/item/clothing/shoes/sandal = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/winterboots = 3, + /obj/item/clothing/shoes/jackboots_replica = 3, + ), + ), + + list( + "name" = "Special", + "icon" = "star", + "products" = list( + /obj/item/clothing/ears/headphones = 2, + /obj/item/clothing/glasses/monocle = 1, + /obj/item/clothing/suit/apron/purple_bartender = 2, + /obj/item/clothing/under/rank/civilian/bartender/purple = 2 + ), + ), + ) + + contraband = list( + /obj/item/clothing/under/syndicate/tacticool = 1, + /obj/item/clothing/mask/balaclava = 1, + /obj/item/clothing/head/ushanka = 1, + /obj/item/clothing/under/costume/soviet = 1, + /obj/item/storage/belt/fannypack/black = 2, + /obj/item/clothing/suit/jacket/letterman_syndie = 1, + /obj/item/clothing/under/costume/jabroni = 1, + /obj/item/clothing/suit/vapeshirt = 1, + /obj/item/clothing/under/costume/geisha = 1 + ) + premium = list( + /obj/item/clothing/under/suit/checkered = 1, + /obj/item/clothing/suit/jacket/leather = 1, + /obj/item/clothing/suit/jacket/leather/overcoat = 1, + /obj/item/clothing/under/pants/mustangjeans = 1, + /obj/item/clothing/neck/necklace/dope = 3, + /obj/item/clothing/suit/jacket/letterman_nanotrasen = 1 + ) refill_canister = /obj/item/vending_refill/clothing - default_price = 40 - extra_price = 60 + default_price = PAYCHECK_MEDIUM + extra_price = PAYCHECK_HARD dept_req_for_free = NO_FREEBIES /obj/item/vending_refill/clothing diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 9b7da91332875..839198b55b3f5 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -87,6 +87,9 @@ C.visible_message("[owner] suddenly convulses, as [owner.p_they()][stand_up ? " stagger to [owner.p_their()] feet and" : ""] gain a ravenous hunger in [owner.p_their()] eyes!", "You HUNGER!") playsound(C.loc, 'sound/hallucinations/far_noise.ogg', 50, 1) + if(C.handcuffed) + C.visible_message("[owner] continues convulsing breaking free of [owner.p_their()] restraints!") + C.uncuff() C.do_jitter_animation(living_transformation_time) C.Stun(living_transformation_time) to_chat(C, "You are now a zombie! Do not seek to be cured, do not help any non-zombies in any way, do not harm your zombie brethren and spread the disease by killing others. You are a creature of hunger and violence.") diff --git a/html/changelog.html b/html/changelog.html index 759f87d1a514b..00b9623d13b2d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,93 @@ -->
    +

    06 April 2024

    +

    Miliviu updated:

    + +

    Ratón updated:

    + +

    XeonMations updated:

    + +

    rkz, Dakae updated:

    + + +

    05 April 2024

    +

    EvilDragonfiend updated:

    + +

    Miliviu updated:

    + +

    Ratón updated:

    + +

    rkz, Krysonism updated:

    + + +

    04 April 2024

    +

    ClownMoff updated:

    + +

    EvilDragonfiend updated:

    + +

    rkz, ArcaneMusic, qustinnus, 4Dplanner, cacogen, AnturK updated:

    + + +

    03 April 2024

    +

    EveLed updated:

    + +

    HowToLoLu updated:

    + + +

    02 April 2024

    +

    pigeonverde, rkz, qustinnus(deleted account, credit him anyway), tralezab, Sylphet, JohnFulpWillard, FernandoJ8 updated:

    + +

    01 April 2024

    ClownMoff updated:

    GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 1bde93693d4fd..04c17354fa9b4 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -42941,3 +42941,62 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. rkz, Rohesie: - refactor: progressbar handling, especially deletion - code_imp: adds stack traces & code docs to progressbars +2024-04-02: + pigeonverde, rkz, qustinnus(deleted account, credit him anyway), tralezab, Sylphet, JohnFulpWillard, FernandoJ8: + - rscadd: A new kitchen machine, the griddle, for cooking your meats on! + - rscadd: remapped kitchens to support new machine + - tweak: Most meats are cooked through the griddle, rather than microwaving. Not + following this will lead to your meat just producing a burnt mess when you microwave + it. + - tweak: burgers are now made with meat patties. These patties can be made by rolling + a meatball. + - rscadd: patty sprites, new meatballs sprites, new sausage sprites, griddle sprites, + steam animation + - balance: Upgrading the food processor actually works. + - code_imp: Added check to prevent mindless runtime when cluwning mob + - bugfix: Grills now grill food, not reagent containers +2024-04-03: + EveLed: + - rscadd: added circular sunglasses + - rscadd: added relaxed slacks + - rscadd: added circular sunglasses to the clothing vendor + - rscadd: added circular glasses to the clothes vendor + - rscadd: added relaxed slacks to the autodrobe + - imageadd: sprites for circular sunglasses + - imageadd: sprites for relaxed slacks + HowToLoLu: + - bugfix: CTF is no longer completely dark +2024-04-04: + ClownMoff: + - tweak: KiloStation cryo tubes now face the proper direction for them to work. + EvilDragonfiend: + - bugfix: explodable component no longer executes loop to explode again + rkz, ArcaneMusic, qustinnus, 4Dplanner, cacogen, AnturK: + - rscadd: Adds meat & wood material datums + - rscadd: Sheetifier machine, for making raw meat into a building material! + - rscadd: tile & walls support for the basemat system + - tweak: more wooden items are now flammable +2024-04-05: + EvilDragonfiend: + - bugfix: view tags verb is now in Admin category instead of Admin.Game + Miliviu: + - tweak: Updated the Webmap URL to the new domain + - bugfix: Multiple Random Arcades now work and spawn a random arcade + "Rat\xF3n": + - bugfix: lockers now glow in the dark + - bugfix: Vendors will no longer try to put mobs in your hands + rkz, Krysonism: + - rscadd: Chicken, Lizardmeat, synthmeat now have their own meat sprites + - rscadd: replaces sprites for meat +2024-04-06: + Miliviu: + - admin: LOOC will now tell you if you were near the sender + - tweak: cryogenic freezer no longer accepts mobs that were never controlled by + a player + "Rat\xF3n": + - bugfix: Heretics can no longer create walking husks by sacrificing a husked target. + - bugfix: No more floating things spat out of fabricators! + XeonMations: + - rscadd: Added tan suits to the clothesmate + rkz, Dakae: + - code_imp: removed sleeper in deconstruct() diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css index a3fb0572e89d1..096ceb4fc5638 100644 --- a/html/font-awesome/css/all.min.css +++ b/html/font-awesome/css/all.min.css @@ -1,5 +1,6 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.1.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff) format("woff")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff) format("woff")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-duotone,.fa-light,.fa-regular,.fa-solid,.fa-thin,.fab,.fad,.fal,.far,.fas,.fat{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-a:before{content:"\41"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-anchor:before{content:"\f13d"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-anchor-lock:before{content:"\e4ad"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-ankh:before{content:"\f644"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-archway:before{content:"\f557"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-arrow-trend-down:before{content:"\e097"}.fa-arrow-trend-up:before{content:"\e098"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-arrows-spin:before{content:"\e4bb"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-asterisk:before{content:"\2a"}.fa-at:before{content:"\40"}.fa-atom:before{content:"\f5d2"}.fa-audio-description:before{content:"\f29e"}.fa-austral-sign:before{content:"\e0a9"}.fa-award:before{content:"\f559"}.fa-b:before{content:"\42"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-backward:before{content:"\f04a"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-baht-sign:before{content:"\e0ac"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-barcode:before{content:"\f02a"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-bell:before{content:"\f0f3"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bicycle:before{content:"\f206"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blog:before{content:"\f781"}.fa-bold:before{content:"\f032"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-book-bookmark:before{content:"\e0bb"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-bookmark:before{content:"\f02e"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-bore-hole:before{content:"\e4c3"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-bottle-water:before{content:"\e4c5"}.fa-bowl-food:before{content:"\e4c6"}.fa-bowl-rice:before{content:"\e2eb"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes-packing:before{content:"\e4c7"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-bread-slice:before{content:"\f7ec"}.fa-bridge:before{content:"\e4c8"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-bridge-water:before{content:"\e4ce"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broom:before{content:"\f51a"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-brush:before{content:"\f55d"}.fa-bucket:before{content:"\e4cf"}.fa-bug:before{content:"\f188"}.fa-bug-slash:before{content:"\e490"}.fa-bugs:before{content:"\e4d0"}.fa-building:before{content:"\f1ad"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-building-circle-check:before{content:"\e4d2"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-building-flag:before{content:"\e4d5"}.fa-building-lock:before{content:"\e4d6"}.fa-building-ngo:before{content:"\e4d7"}.fa-building-shield:before{content:"\e4d8"}.fa-building-un:before{content:"\e4d9"}.fa-building-user:before{content:"\e4da"}.fa-building-wheat:before{content:"\e4db"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-burst:before{content:"\e4dc"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-c:before{content:"\43"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-week:before{content:"\f784"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-camera-rotate:before{content:"\e0d8"}.fa-campground:before{content:"\f6bb"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-car-on:before{content:"\e4dd"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-car-side:before{content:"\f5e4"}.fa-car-tunnel:before{content:"\e4de"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-cart-plus:before{content:"\f217"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cedi-sign:before{content:"\e0df"}.fa-cent-sign:before{content:"\e3f5"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-charging-station:before{content:"\f5e7"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-chart-column:before{content:"\e0e3"}.fa-chart-gantt:before{content:"\e0e4"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-chart-simple:before{content:"\e473"}.fa-check:before{content:"\f00c"}.fa-check-double:before{content:"\f560"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-child-dress:before{content:"\e59c"}.fa-child-reaching:before{content:"\e59d"}.fa-child-rifle:before{content:"\e4e0"}.fa-children:before{content:"\e4e1"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-circle-nodes:before{content:"\e4e2"}.fa-circle-notch:before{content:"\f1ce"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-city:before{content:"\f64f"}.fa-clapperboard:before{content:"\e131"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-question:before{content:"\e4e3"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-clover:before{content:"\e139"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-compare:before{content:"\e13a"}.fa-code-fork:before{content:"\e13b"}.fa-code-merge:before{content:"\f387"}.fa-code-pull-request:before{content:"\e13c"}.fa-coins:before{content:"\f51e"}.fa-colon-sign:before{content:"\e140"}.fa-comment:before{content:"\f075"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-compress:before{content:"\f066"}.fa-computer:before{content:"\e4e5"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-d:before{content:"\44"}.fa-database:before{content:"\f1c0"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-democrat:before{content:"\f747"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-dharmachakra:before{content:"\f655"}.fa-diagram-next:before{content:"\e476"}.fa-diagram-predecessor:before{content:"\e477"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-diagram-successor:before{content:"\e47a"}.fa-diamond:before{content:"\f219"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-disease:before{content:"\f7fa"}.fa-display:before{content:"\e163"}.fa-divide:before{content:"\f529"}.fa-dna:before{content:"\f471"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-dong-sign:before{content:"\e169"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dove:before{content:"\f4ba"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-download:before{content:"\f019"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-e:before{content:"\45"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elevator:before{content:"\e16d"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-equals:before{content:"\3d"}.fa-eraser:before{content:"\f12d"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-exclamation:before{content:"\21"}.fa-expand:before{content:"\f065"}.fa-explosion:before{content:"\e4e9"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-eye-slash:before{content:"\f070"}.fa-f:before{content:"\46"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-fan:before{content:"\f863"}.fa-faucet:before{content:"\e005"}.fa-faucet-drip:before{content:"\e006"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-ferry:before{content:"\e4ea"}.fa-file:before{content:"\f15b"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-file-audio:before{content:"\f1c7"}.fa-file-circle-check:before{content:"\e5a0"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-file-circle-plus:before{content:"\e494"}.fa-file-circle-question:before{content:"\e4ef"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-excel:before{content:"\f1c3"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-file-medical:before{content:"\f477"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-shield:before{content:"\e4f0"}.fa-file-signature:before{content:"\f573"}.fa-file-video:before{content:"\f1c8"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-file-word:before{content:"\f1c2"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-burner:before{content:"\e4f1"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-fish:before{content:"\f578"}.fa-fish-fins:before{content:"\e4f2"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flask-vial:before{content:"\e4f3"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-florin-sign:before{content:"\e184"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-folder-closed:before{content:"\e185"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-tree:before{content:"\f802"}.fa-font:before{content:"\f031"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-franc-sign:before{content:"\e18f"}.fa-frog:before{content:"\f52e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-g:before{content:"\47"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-glass-water:before{content:"\e4f4"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-glasses:before{content:"\f530"}.fa-globe:before{content:"\f0ac"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-greater-than:before{content:"\3e"}.fa-greater-than-equal:before{content:"\f532"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-guarani-sign:before{content:"\e19a"}.fa-guitar:before{content:"\f7a6"}.fa-gun:before{content:"\e19b"}.fa-h:before{content:"\48"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-handcuffs:before{content:"\e4f8"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-hands-bound:before{content:"\e4f9"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-hands-clapping:before{content:"\e1a8"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-handshake:before{content:"\f2b5"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-hashtag:before{content:"\23"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-heart-circle-plus:before{content:"\e500"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-helicopter-symbol:before{content:"\e502"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-helmet-un:before{content:"\e503"}.fa-highlighter:before{content:"\f591"}.fa-hill-avalanche:before{content:"\e507"}.fa-hill-rockslide:before{content:"\e508"}.fa-hippo:before{content:"\f6ed"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-house-chimney-user:before{content:"\e065"}.fa-house-chimney-window:before{content:"\e00d"}.fa-house-circle-check:before{content:"\e509"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-house-crack:before{content:"\e3b1"}.fa-house-fire:before{content:"\e50c"}.fa-house-flag:before{content:"\e50d"}.fa-house-flood-water:before{content:"\e50e"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-house-lock:before{content:"\e510"}.fa-house-medical:before{content:"\e3b2"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-house-medical-flag:before{content:"\e514"}.fa-house-signal:before{content:"\e012"}.fa-house-tsunami:before{content:"\e515"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-hurricane:before{content:"\f751"}.fa-i:before{content:"\49"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-images:before{content:"\f302"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-italic:before{content:"\f033"}.fa-j:before{content:"\4a"}.fa-jar:before{content:"\e516"}.fa-jar-wheat:before{content:"\e517"}.fa-jedi:before{content:"\f669"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-jet-fighter-up:before{content:"\e518"}.fa-joint:before{content:"\f595"}.fa-jug-detergent:before{content:"\e519"}.fa-k:before{content:"\4b"}.fa-kaaba:before{content:"\f66b"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-khanda:before{content:"\f66d"}.fa-kip-sign:before{content:"\e1c4"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-kitchen-set:before{content:"\e51a"}.fa-kiwi-bird:before{content:"\f535"}.fa-l:before{content:"\4c"}.fa-land-mine-on:before{content:"\e51b"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-landmark-flag:before{content:"\e51c"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-file:before{content:"\e51d"}.fa-laptop-medical:before{content:"\f812"}.fa-lari-sign:before{content:"\e1c8"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-lemon:before{content:"\f094"}.fa-less-than:before{content:"\3c"}.fa-less-than-equal:before{content:"\f537"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-lines-leaning:before{content:"\e51e"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-lira-sign:before{content:"\f195"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-location-arrow:before{content:"\f124"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-location-pin-lock:before{content:"\e51f"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-locust:before{content:"\e520"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-m:before{content:"\4d"}.fa-magnet:before{content:"\f076"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-manat-sign:before{content:"\e1d5"}.fa-map:before{content:"\f279"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-pin:before{content:"\f276"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-and-venus:before{content:"\f224"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-mask:before{content:"\f6fa"}.fa-mask-face:before{content:"\e1d7"}.fa-mask-ventilator:before{content:"\e524"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-mattress-pillow:before{content:"\e525"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-medal:before{content:"\f5a2"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-mill-sign:before{content:"\e1ed"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-mitten:before{content:"\f7b5"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-mobile-button:before{content:"\f10b"}.fa-mobile-retro:before{content:"\e527"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-money-bills:before{content:"\e1f3"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-mosquito-net:before{content:"\e52c"}.fa-motorcycle:before{content:"\f21c"}.fa-mound:before{content:"\e52d"}.fa-mountain:before{content:"\f6fc"}.fa-mountain-city:before{content:"\e52e"}.fa-mountain-sun:before{content:"\e52f"}.fa-mug-hot:before{content:"\f7b6"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-music:before{content:"\f001"}.fa-n:before{content:"\4e"}.fa-naira-sign:before{content:"\e1f6"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-not-equal:before{content:"\f53e"}.fa-notdef:before{content:"\e1fe"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-notes-medical:before{content:"\f481"}.fa-o:before{content:"\4f"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-oil-can:before{content:"\f613"}.fa-oil-well:before{content:"\e532"}.fa-om:before{content:"\f679"}.fa-otter:before{content:"\f700"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-p:before{content:"\50"}.fa-pager:before{content:"\f815"}.fa-paint-roller:before{content:"\f5aa"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-palette:before{content:"\f53f"}.fa-pallet:before{content:"\f482"}.fa-panorama:before{content:"\e209"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-passport:before{content:"\f5ab"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-pause:before{content:"\f04c"}.fa-paw:before{content:"\f1b0"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-people-group:before{content:"\e533"}.fa-people-line:before{content:"\e534"}.fa-people-pulling:before{content:"\e535"}.fa-people-robbery:before{content:"\e536"}.fa-people-roof:before{content:"\e537"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-person-booth:before{content:"\f756"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-person-burst:before{content:"\e53b"}.fa-person-cane:before{content:"\e53c"}.fa-person-chalkboard:before{content:"\e53d"}.fa-person-circle-check:before{content:"\e53e"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-person-circle-minus:before{content:"\e540"}.fa-person-circle-plus:before{content:"\e541"}.fa-person-circle-question:before{content:"\e542"}.fa-person-circle-xmark:before{content:"\e543"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-person-dress-burst:before{content:"\e544"}.fa-person-drowning:before{content:"\e545"}.fa-person-falling:before{content:"\e546"}.fa-person-falling-burst:before{content:"\e547"}.fa-person-half-dress:before{content:"\e548"}.fa-person-harassing:before{content:"\e549"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-person-military-pointing:before{content:"\e54a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-person-military-to-person:before{content:"\e54c"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-person-pregnant:before{content:"\e31e"}.fa-person-rays:before{content:"\e54d"}.fa-person-rifle:before{content:"\e54e"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-person-shelter:before{content:"\e54f"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-person-through-window:before{content:"\e5a9"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-person-walking-luggage:before{content:"\e554"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-peseta-sign:before{content:"\e221"}.fa-peso-sign:before{content:"\e222"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-circle-check:before{content:"\e555"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-lock:before{content:"\e558"}.fa-plane-slash:before{content:"\e069"}.fa-plane-up:before{content:"\e22d"}.fa-plant-wilt:before{content:"\e5aa"}.fa-plate-wheat:before{content:"\e55a"}.fa-play:before{content:"\f04b"}.fa-plug:before{content:"\f1e6"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-plug-circle-check:before{content:"\e55c"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-plus-minus:before{content:"\e43c"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-power-off:before{content:"\f011"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-puzzle-piece:before{content:"\f12e"}.fa-q:before{content:"\51"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\3f"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-r:before{content:"\52"}.fa-radiation:before{content:"\f7b9"}.fa-radio:before{content:"\f8d7"}.fa-rainbow:before{content:"\f75b"}.fa-ranking-star:before{content:"\e561"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-recycle:before{content:"\f1b8"}.fa-registered:before{content:"\f25d"}.fa-repeat:before{content:"\f363"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-republican:before{content:"\f75e"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-ribbon:before{content:"\f4d6"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-road-barrier:before{content:"\e562"}.fa-road-bridge:before{content:"\e563"}.fa-road-circle-check:before{content:"\e564"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-road-circle-xmark:before{content:"\e566"}.fa-road-lock:before{content:"\e567"}.fa-road-spikes:before{content:"\e568"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-route:before{content:"\f4d7"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-rug:before{content:"\e569"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-rupiah-sign:before{content:"\e23d"}.fa-s:before{content:"\53"}.fa-sack-dollar:before{content:"\f81d"}.fa-sack-xmark:before{content:"\e56a"}.fa-sailboat:before{content:"\e445"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-school:before{content:"\f549"}.fa-school-circle-check:before{content:"\e56b"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-school-flag:before{content:"\e56e"}.fa-school-lock:before{content:"\e56f"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-screwdriver:before{content:"\f54a"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-scroll:before{content:"\f70e"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-sd-card:before{content:"\f7c2"}.fa-section:before{content:"\e447"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-server:before{content:"\f233"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-sheet-plastic:before{content:"\e571"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-shield-cat:before{content:"\e572"}.fa-shield-dog:before{content:"\e573"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-shield-heart:before{content:"\e574"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-shoe-prints:before{content:"\f54b"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-shop-lock:before{content:"\e4a5"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-shower:before{content:"\f2cc"}.fa-shrimp:before{content:"\e448"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-sim-card:before{content:"\f7c4"}.fa-sink:before{content:"\e06d"}.fa-sitemap:before{content:"\f0e8"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-spa:before{content:"\f5bb"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-spray-can:before{content:"\f5bd"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-square:before{content:"\f0c8"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-square-full:before{content:"\f45c"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-square-nfi:before{content:"\e576"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-square-person-confined:before{content:"\e577"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-square-virus:before{content:"\e578"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-stairs:before{content:"\e289"}.fa-stamp:before{content:"\f5bf"}.fa-stapler:before{content:"\e5af"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-stethoscope:before{content:"\f0f1"}.fa-stop:before{content:"\f04d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-slash:before{content:"\e071"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stroopwafel:before{content:"\f551"}.fa-subscript:before{content:"\f12c"}.fa-suitcase:before{content:"\f0f2"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-superscript:before{content:"\f12b"}.fa-swatchbook:before{content:"\f5c3"}.fa-synagogue:before{content:"\f69b"}.fa-syringe:before{content:"\f48e"}.fa-t:before{content:"\54"}.fa-table:before{content:"\f0ce"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-tablet-button:before{content:"\f10a"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tarp:before{content:"\e57b"}.fa-tarp-droplet:before{content:"\e57c"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-tent:before{content:"\e57d"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tent-arrows-down:before{content:"\e581"}.fa-tents:before{content:"\e582"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-text-width:before{content:"\f035"}.fa-thermometer:before{content:"\f491"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-timeline:before{content:"\e29c"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toilet-portable:before{content:"\e583"}.fa-toilets-portable:before{content:"\e584"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-tower-cell:before{content:"\e585"}.fa-tower-observation:before{content:"\e586"}.fa-tractor:before{content:"\f722"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-train-tram:before{content:"\e5b4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-tree-city:before{content:"\e587"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-trophy:before{content:"\f091"}.fa-trowel:before{content:"\e589"}.fa-trowel-bricks:before{content:"\e58a"}.fa-truck:before{content:"\f0d1"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-truck-droplet:before{content:"\e58c"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-truck-field:before{content:"\e58d"}.fa-truck-field-un:before{content:"\e58e"}.fa-truck-front:before{content:"\e2b7"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plane:before{content:"\e58f"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-u:before{content:"\55"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-universal-access:before{content:"\f29a"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-upload:before{content:"\f093"}.fa-user:before{content:"\f007"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-clock:before{content:"\f4fd"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-user-graduate:before{content:"\f501"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-user-injured:before{content:"\f728"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-user-lock:before{content:"\f502"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-between-lines:before{content:"\e591"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-users-line:before{content:"\e592"}.fa-users-rays:before{content:"\e593"}.fa-users-rectangle:before{content:"\e594"}.fa-users-slash:before{content:"\e073"}.fa-users-viewfinder:before{content:"\e595"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-v:before{content:"\56"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-vault:before{content:"\e2c5"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-vial:before{content:"\f492"}.fa-vial-circle-check:before{content:"\e596"}.fa-vial-virus:before{content:"\e597"}.fa-vials:before{content:"\f493"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-virus:before{content:"\e074"}.fa-virus-covid:before{content:"\e4a8"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-vr-cardboard:before{content:"\f729"}.fa-w:before{content:"\57"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-wallet:before{content:"\f555"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-wand-sparkles:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-wave-square:before{content:"\f83e"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-wheelchair:before{content:"\f193"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-wind:before{content:"\f72e"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-worm:before{content:"\e599"}.fa-wrench:before{content:"\f0ad"}.fa-x:before{content:"\58"}.fa-x-ray:before{content:"\f497"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-xmarks-lines:before{content:"\e59a"}.fa-y:before{content:"\59"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-z:before{content:"\5a"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-alipay:before{content:"\f642"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-amilia:before{content:"\f36d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-artstation:before{content:"\f77a"}.fa-asymmetrik:before{content:"\f372"}.fa-atlassian:before{content:"\f77b"}.fa-audible:before{content:"\f373"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-bandcamp:before{content:"\f2d5"}.fa-battle-net:before{content:"\f835"}.fa-behance:before{content:"\f1b4"}.fa-bilibili:before{content:"\e3d9"}.fa-bimobject:before{content:"\f378"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bootstrap:before{content:"\f836"}.fa-bots:before{content:"\e340"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-buromobelexperte:before{content:"\f37f"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cmplid:before{content:"\e360"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-critical-role:before{content:"\f6c9"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dhl:before{content:"\f790"}.fa-diaspora:before{content:"\f791"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-elementor:before{content:"\f430"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-evernote:before{content:"\f839"}.fa-expeditedssl:before{content:"\f23e"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-figma:before{content:"\f799"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-fulcrum:before{content:"\f50b"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-gofore:before{content:"\f3a7"}.fa-golang:before{content:"\e40f"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-wallet:before{content:"\f1ee"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-gulp:before{content:"\f3ae"}.fa-hacker-news:before{content:"\f1d4"}.fa-hackerrank:before{content:"\f5f7"}.fa-hashnode:before{content:"\e499"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-hive:before{content:"\e07f"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-hotjar:before{content:"\f3b1"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-ideal:before{content:"\e013"}.fa-imdb:before{content:"\f2d8"}.fa-instagram:before{content:"\f16d"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaggle:before{content:"\f5fa"}.fa-keybase:before{content:"\f4f5"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-leanpub:before{content:"\f212"}.fa-less:before{content:"\f41d"}.fa-line:before{content:"\f3c0"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-mailchimp:before{content:"\f59e"}.fa-mandalorian:before{content:"\f50f"}.fa-markdown:before{content:"\f60f"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medapps:before{content:"\f3c6"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-mendeley:before{content:"\f7b3"}.fa-meta:before{content:"\e49b"}.fa-microblog:before{content:"\e01a"}.fa-microsoft:before{content:"\f3ca"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-nfc-directional:before{content:"\e530"}.fa-nfc-symbol:before{content:"\e531"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-old-republic:before{content:"\f510"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-padlet:before{content:"\e4a0"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-palfed:before{content:"\f3d8"}.fa-patreon:before{content:"\f3d9"}.fa-paypal:before{content:"\f1ed"}.fa-perbyte:before{content:"\e083"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pix:before{content:"\e43a"}.fa-playstation:before{content:"\f3df"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-r-project:before{content:"\f4f7"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-redhat:before{content:"\f7bc"}.fa-renren:before{content:"\f18b"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-rev:before{content:"\f5b2"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rust:before{content:"\e07a"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-schlix:before{content:"\f3ea"}.fa-screenpal:before{content:"\e570"}.fa-scribd:before{content:"\f28a"}.fa-searchengin:before{content:"\f3eb"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-servicestack:before{content:"\f3ec"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopify:before{content:"\e057"}.fa-shopware:before{content:"\f5b5"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sith:before{content:"\f512"}.fa-sitrox:before{content:"\e44a"}.fa-sketch:before{content:"\f7c6"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-slideshare:before{content:"\f1e7"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-space-awesome:before{content:"\e5ac"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spotify:before{content:"\f1bc"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-symbol:before{content:"\f3f6"}.fa-sticker-mule:before{content:"\f3f7"}.fa-strava:before{content:"\f428"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-superpowers:before{content:"\f2dd"}.fa-supple:before{content:"\f3f9"}.fa-suse:before{content:"\f7d6"}.fa-swift:before{content:"\f8e1"}.fa-symfony:before{content:"\f83d"}.fa-teamspeak:before{content:"\f4f9"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-the-red-yeti:before{content:"\f69d"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-think-peaks:before{content:"\f731"}.fa-tiktok:before{content:"\e07b"}.fa-trade-federation:before{content:"\f513"}.fa-trello:before{content:"\f181"}.fa-tumblr:before{content:"\f173"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-uncharted:before{content:"\e084"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-vaadin:before{content:"\f408"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viber:before{content:"\f409"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-vuejs:before{content:"\f41f"}.fa-watchman-monitoring:before{content:"\e087"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whmcs:before{content:"\f40d"}.fa-wikipedia-w:before{content:"\f266"}.fa-windows:before{content:"\f17a"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-zhihu:before{content:"\f63f"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-family:"Font Awesome 6 Free";font-weight:400}:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-family:"Font Awesome 6 Free";font-weight:900}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css index b2b65a4ea1947..4dba1a40d1ef2 100644 --- a/html/font-awesome/css/v4-shims.min.css +++ b/html/font-awesome/css/v4-shims.min.css @@ -1,5 +1,6 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.1.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. */ -.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot deleted file mode 100644 index d62be2fad885f..0000000000000 Binary files a/html/font-awesome/webfonts/fa-regular-400.eot and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-regular-400.ttf b/html/font-awesome/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000000000..c5ac00957778d Binary files /dev/null and b/html/font-awesome/webfonts/fa-regular-400.ttf differ diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff deleted file mode 100644 index 43b1a9ae49db0..0000000000000 Binary files a/html/font-awesome/webfonts/fa-regular-400.woff and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot deleted file mode 100644 index c77baa8d46ab4..0000000000000 Binary files a/html/font-awesome/webfonts/fa-solid-900.eot and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-solid-900.ttf b/html/font-awesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000000..43ba1cc7d94f6 Binary files /dev/null and b/html/font-awesome/webfonts/fa-solid-900.ttf differ diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff deleted file mode 100644 index 77c1786227f53..0000000000000 Binary files a/html/font-awesome/webfonts/fa-solid-900.woff and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-v4compatibility.ttf b/html/font-awesome/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000000000..243bc25bd5ee1 Binary files /dev/null and b/html/font-awesome/webfonts/fa-v4compatibility.ttf differ diff --git a/icons/effects/steam.dmi b/icons/effects/steam.dmi new file mode 100644 index 0000000000000..d79e58e2d5490 Binary files /dev/null and b/icons/effects/steam.dmi differ diff --git a/icons/materials/composite.dmi b/icons/materials/composite.dmi new file mode 100644 index 0000000000000..7bb2d4717887c Binary files /dev/null and b/icons/materials/composite.dmi differ diff --git a/icons/misc/colortest.dmi b/icons/misc/colortest.dmi new file mode 100644 index 0000000000000..0f74685ebc24d Binary files /dev/null and b/icons/misc/colortest.dmi differ diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi index 24a1c7f32a430..6ff20dec3cdba 100644 Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 7a880ceb9ca3b..a2a698483d158 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 4e1328394514f..d9baab161a897 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index f9b6d4369ada4..042b80c858961 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/food/meat.dmi b/icons/obj/food/meat.dmi index 6b4502f4695a8..b4262337788b2 100644 Binary files a/icons/obj/food/meat.dmi and b/icons/obj/food/meat.dmi differ diff --git a/icons/obj/machines/kitchenmachines.dmi b/icons/obj/machines/kitchenmachines.dmi new file mode 100644 index 0000000000000..32098601bf914 Binary files /dev/null and b/icons/obj/machines/kitchenmachines.dmi differ diff --git a/icons/obj/machines/sheetifier.dmi b/icons/obj/machines/sheetifier.dmi new file mode 100644 index 0000000000000..46d8b06babcd4 Binary files /dev/null and b/icons/obj/machines/sheetifier.dmi differ diff --git a/icons/obj/stacks/minerals.dmi b/icons/obj/stacks/minerals.dmi index fb4b99ef4fe14..7e86d7143c2a7 100644 Binary files a/icons/obj/stacks/minerals.dmi and b/icons/obj/stacks/minerals.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 3c0ac7c912e59..1797f6eef571c 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index a752f3bd3e614..97e8d5badf1c1 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/walls/materialwall.dmi b/icons/turf/walls/materialwall.dmi index 1027effda9475..c81fd64c21b77 100644 Binary files a/icons/turf/walls/materialwall.dmi and b/icons/turf/walls/materialwall.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index 45073c32cdfae..2e6d20e7da7ee 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -264,6 +264,6 @@ Any-Mode: (hotkey doesn't need to be on) else if(SSmapping.config.map_link) if(alert("This will open the current map in your browser. Are you sure?",,"Yes","No")!="Yes") return - src << link("https://affectedarc07.github.io/SS13WebMap/BeeStation/[SSmapping.config.map_link]") + src << link("https://webmap.affectedarc07.co.uk/maps/bee/[SSmapping.config.map_link]") else to_chat(src, "The current map is either invalid or unavailable. Open an issue on the github. ") diff --git a/sound/effects/meatslap.ogg b/sound/effects/meatslap.ogg new file mode 100644 index 0000000000000..3d8ea7df1ac45 Binary files /dev/null and b/sound/effects/meatslap.ogg differ diff --git a/sound/machines/grill/grillsizzle.ogg b/sound/machines/grill/grillsizzle.ogg new file mode 100644 index 0000000000000..056ce45941c41 Binary files /dev/null and b/sound/machines/grill/grillsizzle.ogg differ diff --git a/tgui/packages/tgui/interfaces/ColorMatrixEditor.js b/tgui/packages/tgui/interfaces/ColorMatrixEditor.js new file mode 100644 index 0000000000000..4bf3883afc6ed --- /dev/null +++ b/tgui/packages/tgui/interfaces/ColorMatrixEditor.js @@ -0,0 +1,68 @@ +import { useBackend } from '../backend'; +import { toFixed } from 'common/math'; +import { Box, Stack, Section, ByondUi, NumberInput, Button } from '../components'; +import { Window } from '../layouts'; + +export const ColorMatrixEditor = (props, context) => { + const { act, data } = useBackend(context); + const { mapRef, currentColor } = data; + const [[rr, rg, rb, ra], [gr, gg, gb, ga], [br, bg, bb, ba], [ar, ag, ab, aa], [cr, cg, cb, ca]] = currentColor; + const prefixes = ['r', 'g', 'b', 'a', 'c']; + return ( + + + + + + + +
    + + {[0, 1, 2, 3].map((col, key) => ( + + + {[0, 1, 2, 3, 4].map((row, key) => ( + + + {`${prefixes[row]}${prefixes[col]}:`} + + toFixed(value, 2)} + onDrag={(e, value) => { + let retColor = currentColor; + retColor[row * 4 + col] = value; + act('transition_color', { color: retColor }); + }} + /> + + ))} + + + ))} + +
    +
    + + + act('confirm')} /> + +
    +
    + + + +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx b/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx index 6eb4a28d9b149..1a90a844a4e68 100644 --- a/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx +++ b/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx @@ -263,45 +263,14 @@ export const GreyscaleModifyMenu = (props, context) => { - - {!!data.unlocked && ( - - + ))} + + + + ); +};