diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
index f0422a336249..a86efe2e9744 100644
--- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
+++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
@@ -250,21 +250,6 @@
},
/turf/open/floor/plating,
/area/ruin/powered)
-"ga" = (
-/obj/structure/table/wood/reinforced,
-/obj/item/gun/ballistic/automatic/toy{
- pixel_x = 5;
- pixel_y = 7
- },
-/obj/item/ammo_box/foambox/riot{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/powered)
"gp" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/cable{
@@ -1871,6 +1856,21 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating/rust,
/area/ruin/powered)
+"RC" = (
+/obj/structure/table/wood/reinforced,
+/obj/item/gun/ballistic/automatic/toy{
+ pixel_x = 5;
+ pixel_y = 7
+ },
+/obj/item/ammo_box/foambox/riot{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/powered)
"RM" = (
/obj/effect/spawner/structure/window/hollow/reinforced,
/turf/open/floor/plating,
@@ -2968,7 +2968,7 @@ RU
bO
cv
oc
-ga
+RC
Tl
ko
kU
@@ -3367,7 +3367,7 @@ of
IA
ro
ro
-hJ
+bf
Ew
LT
hi
@@ -3446,7 +3446,7 @@ je
kC
nq
qm
-hJ
+bf
tw
tC
vK
diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm
index d4c307df25d7..219fc7a6b6b6 100644
--- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm
+++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm
@@ -243,7 +243,7 @@
},
/obj/effect/turf_decal/siding/wood,
/obj/structure/chair/stool/bar,
-/mob/living/simple_animal/hostile/human/hermit/survivor,
+/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger,
/turf/open/floor/wood,
/area/ruin/whitesands/saloon)
"gC" = (
@@ -445,7 +445,6 @@
"lI" = (
/obj/structure/table/wood/poker,
/obj/effect/spawner/lootdrop/gambling,
-/obj/item/spacecash/bundle/loadsamoney,
/turf/open/floor/carpet,
/area/ruin/whitesands/saloon)
"lV" = (
@@ -890,6 +889,9 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/human/hermit/survivor{
+ dir = 4
+ },
/turf/open/floor/wood{
icon_state = "wood-broken5"
},
@@ -1029,7 +1031,8 @@
icon_state = "pulse_carbine";
name = "pulse rifle";
desc = "A supposedly heavy-duty, multifaceted energy rifle. The barrel looks off and the casing seems to be made of plastic";
- item_state = "pulse"
+ item_state = "pulse";
+ icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/48x32.dmi'
},
/turf/open/floor/wood,
/area/ruin/whitesands/saloon)
@@ -1114,7 +1117,7 @@
/obj/structure/chair/stool/bar{
dir = 8
},
-/mob/living/simple_animal/hostile/human/hermit/survivor{
+/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger{
dir = 8
},
/turf/open/floor/wood,
@@ -1497,7 +1500,7 @@
/area/ruin/whitesands/saloon)
"Ua" = (
/obj/structure/chair/stool/bar,
-/mob/living/simple_animal/hostile/human/hermit/survivor{
+/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger{
dir = 8
},
/turf/open/floor/wood{
@@ -1672,6 +1675,7 @@
pixel_y = 6;
pixel_x = 3
},
+/obj/item/spacecash/bundle/loadsamoney,
/turf/open/floor/carpet,
/area/ruin/whitesands/saloon)
"ZG" = (
diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm
index d7a3341b8927..618a40d3996f 100644
--- a/_maps/shuttles/independent/independent_mudskipper.dmm
+++ b/_maps/shuttles/independent/independent_mudskipper.dmm
@@ -349,6 +349,7 @@
/obj/item/circular_saw,
/obj/item/multitool,
/obj/item/stack/marker_beacon/thirty,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/tech,
/area/ship/cargo)
"gT" = (
diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm
index 632337fab263..15265d30016b 100644
--- a/_maps/shuttles/independent/independent_rigger.dmm
+++ b/_maps/shuttles/independent/independent_rigger.dmm
@@ -4468,6 +4468,7 @@
/obj/item/storage/toolbox/mechanical,
/obj/item/storage/belt/utility,
/obj/item/clothing/glasses/welding,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plating,
/area/ship/engineering)
diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm
index 459bfebcd48f..0481bd2506fa 100644
--- a/_maps/shuttles/independent/independent_shetland.dmm
+++ b/_maps/shuttles/independent/independent_shetland.dmm
@@ -4725,6 +4725,8 @@
/obj/item/multitool,
/obj/item/clothing/glasses/welding,
/obj/item/clothing/glasses/welding,
+/obj/item/gun/energy/plasmacutter,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/dark,
/area/ship/engineering/electrical)
"OU" = (
diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm
index 5158b94a1a21..1babd6a9b001 100644
--- a/_maps/shuttles/inteq/inteq_talos.dmm
+++ b/_maps/shuttles/inteq/inteq_talos.dmm
@@ -654,6 +654,34 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/engineering/engine)
+"es" = (
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/clothing/head/soft/inteq,
+/obj/item/clothing/head/hardhat,
+/obj/item/clothing/shoes/combat,
+/obj/item/storage/belt/utility/full,
+/obj/effect/turf_decal/techfloor{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 8
+ },
+/obj/item/clothing/glasses/meson,
+/obj/item/radio/intercom/directional/east,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "eng_secure";
+ name = "artificer's locker";
+ req_access_txt = "11";
+ req_one_access = null
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"eu" = (
/obj/machinery/cryopod{
dir = 4
@@ -903,33 +931,6 @@
},
/turf/open/floor/plasteel/grimy,
/area/ship/crew)
-"gk" = (
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/clothing/head/soft/inteq,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/shoes/combat,
-/obj/item/storage/belt/utility/full,
-/obj/effect/turf_decal/techfloor{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 8
- },
-/obj/item/clothing/glasses/meson,
-/obj/item/radio/intercom/directional/east,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "eng_secure";
- name = "artificer's locker";
- req_access_txt = "11";
- req_one_access = null
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"gm" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt/dust,
@@ -1323,33 +1324,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/engineering)
-"iE" = (
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/clothing/head/soft/inteq,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/shoes/combat,
-/obj/structure/railing,
-/obj/item/storage/belt/utility/full,
-/obj/effect/turf_decal/techfloor{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 8
- },
-/obj/item/clothing/glasses/meson,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "eng_secure";
- name = "artificer's locker";
- req_access_txt = "11";
- req_one_access = null
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"iM" = (
/obj/effect/turf_decal/industrial/warning{
dir = 4
@@ -1611,42 +1585,6 @@
/obj/structure/sign/warning/securearea,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/engineering)
-"jY" = (
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/clothing/head/soft/inteq,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/shoes/combat,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "eng_secure";
- name = "artificer's locker";
- req_access_txt = "11";
- req_one_access = null
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/machinery/light/directional/north,
-/obj/item/storage/belt/utility/full,
-/obj/effect/turf_decal/techfloor{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 8
- },
-/obj/item/clothing/glasses/meson,
-/obj/machinery/light_switch{
- dir = 8;
- pixel_x = 20;
- pixel_y = 11
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"jZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -3102,38 +3040,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/hallway/port)
-"sM" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/official/ion_carbine{
- pixel_x = -32
- },
-/obj/item/ammo_box/magazine/m12g_bulldog{
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/item/ammo_box/magazine/m12g_bulldog{
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/item/ammo_box/magazine/m12g_bulldog{
- pixel_x = -5
- },
-/obj/item/ammo_box/magazine/m12g_bulldog{
- pixel_x = -5
- },
-/obj/item/ammo_box/magazine/co9mm{
- pixel_x = 5
- },
-/obj/item/ammo_box/magazine/co9mm{
- pixel_x = -5
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/security/armory)
"sN" = (
/obj/effect/turf_decal/industrial/warning{
dir = 8
@@ -3413,23 +3319,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel/grimy,
/area/ship/crew)
-"ug" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/siding/thinplating/dark,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/retro/lasergun_new{
- pixel_x = -32
- },
-/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{
- pixel_x = -8;
- pixel_y = 8
- },
-/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{
- pixel_x = -12
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/security/armory)
"ul" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 1
@@ -4937,6 +4826,43 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/crew/canteen)
+"EQ" = (
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/clothing/head/soft/inteq,
+/obj/item/clothing/head/hardhat,
+/obj/item/clothing/shoes/combat,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "eng_secure";
+ name = "artificer's locker";
+ req_access_txt = "11";
+ req_one_access = null
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/machinery/light/directional/north,
+/obj/item/storage/belt/utility/full,
+/obj/effect/turf_decal/techfloor{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 8
+ },
+/obj/item/clothing/glasses/meson,
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 20;
+ pixel_y = 11
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"Fe" = (
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{
dir = 8
@@ -5341,6 +5267,23 @@
"Hq" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/security/armory)
+"Hv" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/siding/thinplating/dark,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/retro/lasergun_new{
+ pixel_x = -32
+ },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{
+ pixel_x = -8;
+ pixel_y = 8
+ },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{
+ pixel_x = -12
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/security/armory)
"HB" = (
/obj/machinery/suit_storage_unit/inherit/industrial,
/obj/item/clothing/suit/space/hardsuit/engine,
@@ -6244,37 +6187,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/storage)
-"Ok" = (
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "ce";
- name = "honorable artificer's locker";
- req_access_txt = "56"
- },
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/toggle/industrial,
-/obj/item/clothing/head/hardhat/white,
-/obj/item/clothing/head/beret/sec/inteq,
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/mask/gas/sechailer/balaclava/inteq,
-/obj/item/clothing/gloves/combat,
-/obj/item/megaphone/cargo{
- name = "engineering megaphone"
- },
-/obj/item/stamp/ce{
- name = "honorable artificer's rubber stamp"
- },
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/welding,
-/obj/item/pipe_dispenser,
-/obj/item/storage/belt/utility/chief{
- name = "honorable artificer's toolbelt"
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering/communications)
"Oq" = (
/obj/effect/turf_decal/corner/opaque/yellow{
dir = 1
@@ -6304,6 +6216,34 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4,
/turf/open/floor/plasteel/tech,
/area/ship/engineering)
+"OJ" = (
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/clothing/head/soft/inteq,
+/obj/item/clothing/head/hardhat,
+/obj/item/clothing/shoes/combat,
+/obj/structure/railing,
+/obj/item/storage/belt/utility/full,
+/obj/effect/turf_decal/techfloor{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 8
+ },
+/obj/item/clothing/glasses/meson,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "eng_secure";
+ name = "artificer's locker";
+ req_access_txt = "11";
+ req_one_access = null
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"OK" = (
/obj/machinery/cryopod{
dir = 8
@@ -6561,6 +6501,38 @@
},
/turf/open/floor/engine/air,
/area/ship/engineering/engine)
+"QP" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/official/ion_carbine{
+ pixel_x = -32
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = -5
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = -5
+ },
+/obj/item/ammo_box/magazine/co9mm{
+ pixel_x = 5
+ },
+/obj/item/ammo_box/magazine/co9mm{
+ pixel_x = -5
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/security/armory)
"QR" = (
/obj/effect/turf_decal/corner/opaque/yellow,
/obj/effect/turf_decal/corner/opaque/brown{
@@ -7809,6 +7781,38 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering/communications)
+"ZA" = (
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "ce";
+ name = "honorable artificer's locker";
+ req_access_txt = "56"
+ },
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/toggle/industrial,
+/obj/item/clothing/head/hardhat/white,
+/obj/item/clothing/head/beret/sec/inteq,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/mask/gas/sechailer/balaclava/inteq,
+/obj/item/clothing/gloves/combat,
+/obj/item/megaphone/cargo{
+ name = "engineering megaphone"
+ },
+/obj/item/stamp/ce{
+ name = "honorable artificer's rubber stamp"
+ },
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/welding,
+/obj/item/pipe_dispenser,
+/obj/item/storage/belt/utility/chief{
+ name = "honorable artificer's toolbelt"
+ },
+/obj/machinery/airalarm/directional/west,
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering/communications)
"ZB" = (
/obj/machinery/firealarm/directional/west,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -8049,7 +8053,7 @@ ZU
eC
Zu
SK
-Ok
+ZA
vp
HB
MS
@@ -8153,9 +8157,9 @@ aD
MC
zR
vp
-jY
-gk
-iE
+EQ
+es
+OJ
Xn
gP
qh
@@ -8576,9 +8580,9 @@ hT
sq
Rg
Hq
-sM
+QP
bI
-ug
+Hv
Hq
sw
sw
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm
index 351f188e3369..2cb4e641cd53 100644
--- a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm
+++ b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm
@@ -383,6 +383,7 @@
/obj/item/clothing/under/rank/cargo/miner,
/obj/item/clothing/gloves/color/black,
/obj/item/clothing/glasses/meson,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/patterned/grid,
/area/ship/cargo/port)
"dC" = (
@@ -4112,6 +4113,7 @@
/obj/item/clothing/under/rank/cargo/miner,
/obj/item/clothing/gloves/color/black,
/obj/item/clothing/glasses/meson,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/patterned/grid,
/area/ship/cargo/starboard)
"Qc" = (
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm
index e72766239a4f..96bd414525c0 100644
--- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm
+++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm
@@ -1474,6 +1474,7 @@
pixel_y = -11;
pixel_x = 9
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/dark,
/area/ship/engineering)
"gd" = (
@@ -10650,6 +10651,7 @@
pixel_y = -10;
pixel_x = 5
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/dark,
/area/ship/engineering)
"NC" = (
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm
index 0c860abb9e20..564cf0733f9f 100644
--- a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm
+++ b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm
@@ -5899,6 +5899,7 @@
},
/obj/item/holosign_creator/engineering,
/obj/item/storage/box/metalfoam,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/patterned/grid,
/area/ship/engineering)
"My" = (
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm
index 342ffb8fa928..d2ccfdcfe910 100644
--- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm
+++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm
@@ -1554,6 +1554,7 @@
/obj/item/clothing/glasses/meson/gar{
pixel_y = 8
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/mono/dark,
/area/ship/engineering)
"pA" = (
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
index 3226bf24babc..3649eed505b2 100644
--- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
+++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
@@ -880,27 +880,6 @@
},
/turf/open/floor/plating,
/area/ship/maintenance/starboard)
-"pt" = (
-/obj/effect/turf_decal/industrial/outline,
-/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/accessory/armband/cargo,
-/obj/item/storage/belt/mining,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/machinery/light/small/directional/north,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "mining";
- name = "wrecker's locker";
- req_access = list(48)
- },
-/obj/machinery/firealarm/directional/east,
-/obj/effect/turf_decal/industrial/outline,
-/obj/item/clothing/under/syndicate/ngr/jumpsuit,
-/obj/item/clothing/suit/hazardvest/ngr,
-/obj/item/clothing/head/hardhat/ngr,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/storage)
"pu" = (
/obj/structure/bed,
/obj/item/bedsheet/black,
@@ -1136,25 +1115,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/maintenance/port)
-"tx" = (
-/obj/effect/turf_decal/industrial/outline,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "mining";
- name = "wrecker's locker";
- req_access = list(48)
- },
-/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/accessory/armband/cargo,
-/obj/item/storage/belt/mining,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/machinery/airalarm/directional/north,
-/obj/item/clothing/under/syndicate/ngr/jumpsuit,
-/obj/item/clothing/suit/hazardvest/ngr,
-/obj/item/clothing/head/hardhat/ngr,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/storage)
"tI" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -1430,6 +1390,19 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
+"yH" = (
+/obj/effect/turf_decal/industrial/outline,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/item/gun/energy/plasmacutter{
+ pixel_y = 10
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/storage)
"yM" = (
/obj/item/lighter{
pixel_x = -8;
@@ -1638,32 +1611,6 @@
},
/turf/open/floor/plating,
/area/ship/storage)
-"Bv" = (
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "warden";
- name = "foreman's locker";
- req_access = list(56)
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/gloves/combat,
-/obj/item/storage/belt/utility/chief{
- name = "\improper Foreman's toolbelt"
- },
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/item/storage/toolbox/syndicate,
-/obj/item/wrench/combat,
-/obj/item/clothing/accessory/holster,
-/obj/item/grenade/chem_grenade/metalfoam,
-/obj/machinery/airalarm/directional/west,
-/obj/item/clothing/suit/ngr,
-/obj/item/clothing/head/hardhat/ngr/foreman,
-/obj/item/tank/jetpack/suit,
-/obj/item/storage/pistolcase/ringneck,
-/turf/open/floor/carpet/red,
-/area/ship/cargo/office)
"BB" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/corner_techfloor_grid{
@@ -1972,6 +1919,26 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/plasteel/tech/grid,
/area/ship/maintenance/port)
+"GM" = (
+/obj/effect/turf_decal/industrial/outline,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "mining";
+ name = "wrecker's locker";
+ req_access = list(48)
+ },
+/obj/item/clothing/shoes/workboots/mining,
+/obj/item/clothing/accessory/armband/cargo,
+/obj/item/storage/belt/mining,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/welding,
+/obj/machinery/airalarm/directional/north,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
+/obj/item/pickaxe/drill,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/storage)
"GV" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/crew/dorm)
@@ -2496,6 +2463,32 @@
},
/turf/closed/wall/mineral/plastitanium,
/area/ship/bridge)
+"QG" = (
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "warden";
+ name = "foreman's locker";
+ req_access = list(56)
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/ngr/officer,
+/obj/item/clothing/gloves/combat,
+/obj/item/storage/belt/utility/chief{
+ name = "\improper Foreman's toolbelt"
+ },
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/welding,
+/obj/item/storage/toolbox/syndicate,
+/obj/item/wrench/combat,
+/obj/item/clothing/accessory/holster,
+/obj/item/grenade/chem_grenade/metalfoam,
+/obj/machinery/airalarm/directional/west,
+/obj/item/clothing/suit/ngr,
+/obj/item/clothing/head/hardhat/ngr/foreman,
+/obj/item/tank/jetpack/suit,
+/obj/item/storage/pistolcase/ringneck,
+/turf/open/floor/carpet/red,
+/area/ship/cargo/office)
"QW" = (
/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium,
/obj/machinery/door/poddoor/shutters{
@@ -3039,6 +3032,28 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/cargo/office)
+"Xv" = (
+/obj/effect/turf_decal/industrial/outline,
+/obj/item/clothing/shoes/workboots/mining,
+/obj/item/clothing/accessory/armband/cargo,
+/obj/item/storage/belt/mining,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/welding,
+/obj/machinery/light/small/directional/north,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "mining";
+ name = "wrecker's locker";
+ req_access = list(48)
+ },
+/obj/machinery/firealarm/directional/east,
+/obj/effect/turf_decal/industrial/outline,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
+/obj/item/pickaxe/drill,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/storage)
"Xz" = (
/obj/machinery/power/shuttle/engine/fueled/plasma{
dir = 4
@@ -3153,19 +3168,6 @@
/obj/structure/closet/emcloset/wall/directional/north,
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
-"Yc" = (
-/obj/effect/turf_decal/industrial/outline,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/obj/structure/rack,
-/obj/item/pickaxe/drill/jackhammer/old{
- pixel_y = 10
- },
-/obj/item/pickaxe/drill/jackhammer/old,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/storage)
"Yv" = (
/obj/machinery/nuclearbomb/beer{
desc = "An evidently-decommissioned nuclear warhead. Sloppy paint on the casing declares 'VICTORY OVER NANOTRASEN,' followed by a badly-smudged date of 25-something. A drink tap has been drilled directly into the metal.";
@@ -3385,7 +3387,7 @@ iT
XO
VX
iL
-Yc
+yH
Sm
Sa
sE
@@ -3424,7 +3426,7 @@ KH
Ic
vG
iT
-tx
+GM
dh
Oy
KX
@@ -3445,7 +3447,7 @@ uq
La
Gw
iT
-pt
+Xv
qO
xx
rF
@@ -3599,7 +3601,7 @@ bN
Zn
fL
KW
-Bv
+QG
QW
nn
Zb
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
index baf999523d2f..d218dc5581b1 100644
--- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
+++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
@@ -115,22 +115,6 @@
/obj/machinery/door/window/eastright,
/turf/open/floor/mineral/plastitanium,
/area/ship/medical)
-"bw" = (
-/obj/item/scalpel{
- pixel_x = 10;
- pixel_y = 6
- },
-/obj/structure/table/reinforced,
-/obj/item/hemostat,
-/obj/machinery/light/directional/west,
-/obj/effect/spawner/lootdrop/random_prosthetic{
- pixel_x = 6
- },
-/obj/effect/spawner/lootdrop/random_prosthetic{
- pixel_x = -6
- },
-/turf/open/floor/pod/dark,
-/area/ship/medical)
"bA" = (
/obj/machinery/door/poddoor{
id = "syndie_warship_cargo";
@@ -218,6 +202,24 @@
/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
+"dG" = (
+/obj/effect/turf_decal/spline/fancy/opaque/black{
+ dir = 5
+ },
+/obj/structure/railing{
+ dir = 5;
+ layer = 2.9
+ },
+/obj/structure/bed/dogbed,
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child{
+ desc = "A little guy.";
+ environment_smash = 0;
+ faction = list("neutral","playerSyndicate");
+ name = "Goliath"
+ },
+/obj/effect/decal/cleanable/wrapping,
+/turf/open/floor/plasteel/tech,
+/area/ship/bridge)
"dJ" = (
/obj/effect/turf_decal/industrial/warning{
dir = 4
@@ -322,6 +324,20 @@
dir = 1
},
/area/ship/crew/dorm)
+"eo" = (
+/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/light_switch{
+ pixel_x = 12;
+ pixel_y = 21
+ },
+/obj/machinery/power/apc/auto_name/directional/north,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/crew/canteen)
"es" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/techfloor{
@@ -329,16 +345,6 @@
},
/turf/open/floor/plasteel/telecomms_floor,
/area/ship/cargo)
-"ev" = (
-/obj/structure/table/reinforced,
-/obj/item/toy/figure/syndie{
- pixel_x = -8;
- pixel_y = 5
- },
-/obj/machinery/light/directional/south,
-/obj/machinery/fax/syndicate,
-/turf/open/floor/plasteel/dark,
-/area/ship/bridge)
"ew" = (
/obj/effect/turf_decal/industrial/warning{
dir = 8
@@ -496,6 +502,25 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"fD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = -23
+ },
+/turf/open/floor/plasteel/stairs{
+ dir = 8
+ },
+/area/ship/bridge)
"fX" = (
/obj/effect/turf_decal/industrial/warning{
dir = 1
@@ -790,25 +815,6 @@
/obj/item/radio/intercom/directional/north,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
-"iE" = (
-/obj/structure/table/reinforced,
-/obj/machinery/button/door{
- dir = 8;
- id = "warshipbridge";
- name = "Bridge Window";
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/item/reagent_containers/food/drinks/mug{
- pixel_x = -6;
- pixel_y = 9
- },
-/obj/item/gps{
- pixel_x = 6;
- pixel_y = 4
- },
-/turf/open/floor/plasteel/tech,
-/area/ship/bridge)
"iH" = (
/obj/machinery/computer/mech_bay_power_console{
dir = 4
@@ -954,6 +960,25 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/aft)
+"jy" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/toolbox/ammo/c10mm,
+/obj/structure/closet/secure_closet/wall/directional/west{
+ icon_state = "sec_wall";
+ name = "Ammo Locker";
+ req_access_txt = "1"
+ },
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ship/security/armory)
"jA" = (
/obj/machinery/door/poddoor/shutters{
dir = 8;
@@ -1076,13 +1101,26 @@
/obj/structure/table/reinforced,
/turf/open/floor/circuit/green/off,
/area/ship/maintenance/starboard)
-"kt" = (
-/obj/structure/mecha_wreckage/touro,
-/obj/effect/turf_decal/techfloor{
- dir = 8
+"kw" = (
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "hos";
+ name = "captain's locker";
+ req_access_txt = "20"
},
-/turf/open/floor/plasteel/telecomms_floor,
-/area/ship/cargo)
+/obj/item/clothing/gloves/krav_maga/combatglovesplus,
+/obj/item/clothing/glasses/thermal/eyepatch,
+/obj/item/gun/ballistic/revolver/viper,
+/obj/item/clothing/under/syndicate/sniper,
+/obj/item/ammo_box/a357,
+/obj/item/ammo_box/a357,
+/obj/item/radio/headset/syndicate/alt/leader,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners/officer,
+/obj/item/clothing/suit/toggle/armor/vest/hardliners,
+/obj/item/clothing/head/hardliners/peaked,
+/turf/open/floor/carpet/black,
+/area/ship/bridge)
"kD" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/crew/canteen)
@@ -1359,6 +1397,19 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"mZ" = (
+/obj/item/kirbyplants/random,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 1
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_x = 4;
+ pixel_y = -23
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/hallway/aft)
"nb" = (
/obj/effect/turf_decal/techfloor,
/obj/item/storage/bag/ore,
@@ -1374,6 +1425,25 @@
/obj/item/gps/mining,
/turf/open/floor/plasteel/tech,
/area/ship/cargo)
+"nh" = (
+/obj/structure/salvageable/server,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/techfloor{
+ dir = 8
+ },
+/obj/machinery/button/shieldwallgen{
+ id = "komodo_port";
+ pixel_x = 6;
+ pixel_y = 24
+ },
+/obj/machinery/button/door{
+ id = "Artillery1shutter";
+ name = "Artillery Hatch";
+ pixel_x = -4;
+ pixel_y = 26
+ },
+/turf/open/floor/plasteel/telecomms_floor,
+/area/ship/maintenance/port)
"nq" = (
/obj/effect/turf_decal/spline/fancy/opaque/black{
dir = 9
@@ -1609,45 +1679,12 @@
},
/turf/open/floor/plating,
/area/ship/engineering)
-"pL" = (
-/obj/item/gun/ballistic/automatic/pistol/ringneck,
-/obj/item/gun/ballistic/automatic/pistol/ringneck{
- pixel_y = 3
- },
-/obj/effect/turf_decal/industrial/fire{
- dir = 8
- },
-/obj/structure/guncloset,
-/obj/structure/railing,
-/obj/item/gun/ballistic/automatic/smg/cobra,
-/obj/machinery/light/directional/east,
-/turf/open/floor/pod/dark,
-/area/ship/security/armory)
"pN" = (
/obj/machinery/porta_turret/ship/syndicate/weak{
dir = 9
},
/turf/closed/wall/mineral/plastitanium,
/area/ship/bridge)
-"pU" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light_switch{
- dir = 1;
- pixel_x = 3;
- pixel_y = -23
- },
-/turf/open/floor/plasteel/stairs{
- dir = 8
- },
-/area/ship/bridge)
"qf" = (
/obj/structure/railing{
dir = 8
@@ -1672,6 +1709,22 @@
},
/turf/open/floor/plating,
/area/ship/engineering)
+"qm" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/industrial/fire,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/trash/syndi_cakes{
+ pixel_x = 4;
+ pixel_y = 6
+ },
+/obj/item/t_scanner{
+ pixel_x = -2;
+ pixel_y = 12
+ },
+/obj/machinery/light/directional/north,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/pod/dark,
+/area/ship/security/armory)
"qz" = (
/obj/effect/turf_decal/industrial/warning{
dir = 9
@@ -1735,35 +1788,26 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"qP" = (
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/gun/ballistic/automatic/pistol/ringneck{
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/industrial/fire{
+ dir = 8
+ },
+/obj/structure/guncloset,
+/obj/structure/railing,
+/obj/item/gun/ballistic/automatic/smg/cobra,
+/obj/machinery/light/directional/east,
+/turf/open/floor/pod/dark,
+/area/ship/security/armory)
"qZ" = (
/obj/structure/chair/comfy/grey/directional/east,
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light/directional/west,
/turf/open/floor/carpet/red_gold,
/area/ship/crew/dorm)
-"rc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light_switch{
- dir = 1;
- pixel_x = 6;
- pixel_y = -21
- },
-/obj/machinery/firealarm/directional/south{
- pixel_x = -6
- },
-/turf/open/floor/pod,
-/area/ship/cargo)
"rg" = (
/obj/item/cautery,
/obj/structure/table/reinforced,
@@ -1773,19 +1817,6 @@
},
/turf/open/floor/pod/dark,
/area/ship/medical)
-"rk" = (
-/obj/item/kirbyplants/random,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 1
- },
-/obj/machinery/light_switch{
- dir = 1;
- pixel_x = 4;
- pixel_y = -23
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/hallway/aft)
"rm" = (
/obj/effect/turf_decal/industrial/warning{
dir = 4
@@ -1824,22 +1855,41 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
-"rP" = (
+"rI" = (
/obj/structure/table/reinforced,
-/obj/effect/turf_decal/industrial/fire,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/trash/syndi_cakes{
+/obj/item/toy/cards/deck/syndicate,
+/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
+ dir = 10
+ },
+/obj/item/spacecash/bundle/c1000{
+ pixel_x = 5;
+ pixel_y = 11
+ },
+/obj/item/spacecash/bundle/c1000{
+ pixel_x = 3;
+ pixel_y = 8
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -7;
+ pixel_y = 3
+ },
+/obj/machinery/light_switch{
+ dir = 1;
pixel_x = 4;
- pixel_y = 6
+ pixel_y = -23
},
-/obj/item/t_scanner{
- pixel_x = -2;
- pixel_y = 12
+/turf/open/floor/mineral/plastitanium,
+/area/ship/crew/canteen)
+"rN" = (
+/obj/structure/table/reinforced,
+/obj/item/toy/figure/syndie{
+ pixel_x = -8;
+ pixel_y = 5
},
-/obj/machinery/light/directional/north,
-/obj/machinery/firealarm/directional/east,
-/turf/open/floor/pod/dark,
-/area/ship/security/armory)
+/obj/machinery/light/directional/south,
+/obj/machinery/fax/syndicate,
+/turf/open/floor/plasteel/dark,
+/area/ship/bridge)
"rS" = (
/obj/machinery/porta_turret/ship/syndicate/weak{
dir = 5
@@ -2154,6 +2204,21 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/engineering)
+"us" = (
+/obj/structure/bookcase/random/fiction,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light_switch{
+ pixel_x = -6;
+ pixel_y = 23
+ },
+/obj/machinery/firealarm/directional/east{
+ pixel_y = -8
+ },
+/turf/open/floor/holofloor/wood,
+/area/ship/crew/dorm)
"uG" = (
/obj/effect/turf_decal/industrial/warning{
dir = 8
@@ -2903,31 +2968,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/engineering)
-"BX" = (
-/obj/structure/closet/wall/orange/directional/south{
- name = "Engineering locker"
- },
-/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/head/welding,
-/obj/item/clothing/head/hardhat/red,
-/obj/item/clothing/head/hardhat/weldhat/orange{
- pixel_x = 7;
- pixel_y = 2
- },
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/storage/belt/utility/full/engi,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "engine fuel pump"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/item/clothing/under/syndicate/hardliners,
-/obj/item/clothing/suit/hazardvest/hardliners,
-/obj/item/clothing/gloves/color/red/insulated,
-/turf/open/floor/plasteel/tech,
-/area/ship/engineering)
"BY" = (
/obj/effect/turf_decal/industrial/warning/corner{
dir = 1
@@ -3036,18 +3076,6 @@
/obj/structure/closet/firecloset/wall/directional/east,
/turf/open/floor/plasteel/tech/techmaint,
/area/ship/engineering)
-"DZ" = (
-/obj/structure/sink{
- pixel_y = 16
- },
-/obj/structure/mirror{
- layer = 2.8;
- pixel_y = 30
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/plasteel/showroomfloor,
-/area/ship/hallway/aft)
"Eb" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/techfloor{
@@ -3318,21 +3346,6 @@
/obj/structure/extinguisher_cabinet/directional/south,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
-"GU" = (
-/obj/structure/bookcase/random/fiction,
-/obj/effect/turf_decal/siding/wood{
- dir = 5
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/light_switch{
- pixel_x = -6;
- pixel_y = 23
- },
-/obj/machinery/firealarm/directional/east{
- pixel_y = -8
- },
-/turf/open/floor/holofloor/wood,
-/area/ship/crew/dorm)
"Hc" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/maintenance/starboard)
@@ -3529,6 +3542,23 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"Im" = (
+/obj/machinery/button/door{
+ dir = 1;
+ id = "syndiewarship_armorybay";
+ name = "Weapon Hold";
+ pixel_y = -26;
+ req_access_txt = "3"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"It" = (
/obj/effect/turf_decal/borderfloor,
/obj/effect/decal/cleanable/generic,
@@ -3570,6 +3600,18 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ship/crew/canteen)
+"Jp" = (
+/obj/structure/sink{
+ pixel_y = 16
+ },
+/obj/structure/mirror{
+ layer = 2.8;
+ pixel_y = 30
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/plasteel/showroomfloor,
+/area/ship/hallway/aft)
"Jt" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/techfloor{
@@ -3588,25 +3630,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
-"Jy" = (
-/obj/effect/turf_decal/industrial/warning{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/storage/toolbox/ammo/c10mm,
-/obj/structure/closet/secure_closet/wall/directional/west{
- icon_state = "sec_wall";
- name = "Ammo Locker";
- req_access_txt = "1"
- },
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m45_cobra,
-/obj/item/ammo_box/magazine/m45_cobra,
-/turf/open/floor/mineral/plastitanium/red,
-/area/ship/security/armory)
"JJ" = (
/obj/structure/barricade/wooden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
@@ -3664,26 +3687,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/holofloor/wood,
/area/ship/bridge)
-"JU" = (
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "hos";
- name = "captain's locker";
- req_access_txt = "20"
- },
-/obj/item/clothing/gloves/krav_maga/combatglovesplus,
-/obj/item/clothing/glasses/thermal/eyepatch,
-/obj/item/gun/ballistic/revolver/viper,
-/obj/item/clothing/under/syndicate/sniper,
-/obj/item/ammo_box/a357,
-/obj/item/ammo_box/a357,
-/obj/item/radio/headset/syndicate/alt/leader,
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/under/syndicate/hardliners/officer,
-/obj/item/clothing/suit/toggle/armor/vest/hardliners,
-/obj/item/clothing/head/hardliners/peaked,
-/turf/open/floor/carpet/black,
-/area/ship/bridge)
"JV" = (
/obj/effect/turf_decal/industrial/warning,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -3751,6 +3754,32 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"KK" = (
+/obj/structure/closet/wall/orange/directional/south{
+ name = "Engineering locker"
+ },
+/obj/item/clothing/shoes/workboots,
+/obj/item/clothing/head/welding,
+/obj/item/clothing/head/hardhat/red,
+/obj/item/clothing/head/hardhat/weldhat/orange{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/storage/belt/utility/full/engi,
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "engine fuel pump"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/item/clothing/under/syndicate/hardliners,
+/obj/item/clothing/suit/hazardvest/hardliners,
+/obj/item/gun/energy/plasmacutter,
+/obj/item/clothing/gloves/color/red/insulated,
+/turf/open/floor/plasteel/tech,
+/area/ship/engineering)
"KL" = (
/obj/structure/table/reinforced{
color = "#c1b6a5"
@@ -3807,6 +3836,22 @@
/obj/item/clothing/under/syndicate/hardliners/jumpsuit,
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/central)
+"Lj" = (
+/obj/item/scalpel{
+ pixel_x = 10;
+ pixel_y = 6
+ },
+/obj/structure/table/reinforced,
+/obj/item/hemostat,
+/obj/machinery/light/directional/west,
+/obj/effect/spawner/lootdrop/random_prosthetic{
+ pixel_x = 6
+ },
+/obj/effect/spawner/lootdrop/random_prosthetic{
+ pixel_x = -6
+ },
+/turf/open/floor/pod/dark,
+/area/ship/medical)
"Lk" = (
/obj/structure/railing/corner,
/obj/structure/railing/corner{
@@ -3894,6 +3939,31 @@
},
/turf/open/floor/plating,
/area/ship/bridge)
+"MF" = (
+/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
+ dir = 6
+ },
+/obj/structure/closet/wall/red/directional/south{
+ name = "Bartender's locker"
+ },
+/obj/item/clothing/shoes/cowboy/black,
+/obj/item/storage/belt/military/snack,
+/obj/item/storage/pill_bottle/lsd{
+ pixel_x = 9;
+ pixel_y = 5
+ },
+/obj/item/clothing/accessory/waistcoat,
+/obj/item/reagent_containers/food/drinks/shaker{
+ pixel_x = -9;
+ pixel_y = 2
+ },
+/obj/item/clothing/under/suit/waiter/syndicate,
+/obj/machinery/vending/boozeomat/syndicate_access{
+ density = 0;
+ pixel_x = 32
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/crew/canteen)
"MG" = (
/obj/machinery/door/airlock/hatch{
name = "Dormitory"
@@ -4034,6 +4104,20 @@
},
/turf/open/floor/plasteel/telecomms_floor,
/area/ship/cargo)
+"ND" = (
+/obj/structure/railing,
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8;
+ piping_layer = 2
+ },
+/obj/effect/turf_decal/industrial/outline/yellow,
+/obj/effect/decal/cleanable/greenglow,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"NI" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -4120,41 +4204,6 @@
/obj/machinery/door/firedoor/border_only,
/turf/open/floor/mineral/plastitanium,
/area/ship/medical)
-"Pb" = (
-/obj/effect/turf_decal/spline/fancy/opaque/black{
- dir = 5
- },
-/obj/structure/railing{
- dir = 5;
- layer = 2.9
- },
-/obj/structure/bed/dogbed,
-/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child{
- desc = "A little guy.";
- environment_smash = 0;
- faction = list("neutral","playerSyndicate");
- name = "Goliath"
- },
-/obj/effect/decal/cleanable/wrapping,
-/turf/open/floor/plasteel/tech,
-/area/ship/bridge)
-"Pk" = (
-/obj/machinery/button/door{
- dir = 1;
- id = "syndiewarship_armorybay";
- name = "Weapon Hold";
- pixel_y = -26;
- req_access_txt = "3"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"Pl" = (
/obj/structure/railing,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
@@ -4195,6 +4244,13 @@
},
/turf/open/floor/plating,
/area/ship/engineering)
+"PA" = (
+/obj/structure/mecha_wreckage/touro,
+/obj/effect/turf_decal/techfloor{
+ dir = 8
+ },
+/turf/open/floor/plasteel/telecomms_floor,
+/area/ship/cargo)
"PE" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
@@ -4340,31 +4396,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
-"Qy" = (
-/obj/structure/table/reinforced,
-/obj/item/toy/cards/deck/syndicate,
-/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
- dir = 10
- },
-/obj/item/spacecash/bundle/c1000{
- pixel_x = 5;
- pixel_y = 11
- },
-/obj/item/spacecash/bundle/c1000{
- pixel_x = 3;
- pixel_y = 8
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = -7;
- pixel_y = 3
- },
-/obj/machinery/light_switch{
- dir = 1;
- pixel_x = 4;
- pixel_y = -23
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/crew/canteen)
"QC" = (
/obj/structure/table/reinforced,
/obj/machinery/chem_dispenser/drinks{
@@ -4372,20 +4403,6 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ship/crew/canteen)
-"QG" = (
-/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/light_switch{
- pixel_x = 12;
- pixel_y = 21
- },
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/crew/canteen)
"QI" = (
/obj/effect/turf_decal/industrial/warning{
dir = 10
@@ -4684,32 +4701,6 @@
dir = 1
},
/area/ship/crew/dorm)
-"Ua" = (
-/obj/effect/turf_decal/borderfloor{
- dir = 1
- },
-/obj/item/gun/ballistic/automatic/pistol/ringneck{
- pixel_y = 3
- },
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/c10mm,
-/obj/item/clothing/gloves/tackler/combat/insulated,
-/obj/structure/closet/secure_closet/wall/directional/west{
- icon_state = "sec_wall";
- name = "Sergeant's Locker";
- req_access_txt = "58"
- },
-/obj/item/melee/classic_baton/telescopic,
-/obj/item/clothing/suit/armor/vest/blueshirt,
-/obj/item/clothing/accessory/holster,
-/obj/item/clothing/shoes/combat,
-/obj/item/radio/headset/syndicate,
-/obj/item/clothing/under/syndicate/hardliners/officer,
-/obj/item/clothing/suit/armor/hardliners/sergeant,
-/obj/item/clothing/head/hardliners/peaked,
-/turf/open/floor/plasteel/dark,
-/area/ship/bridge)
"Uh" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -5019,20 +5010,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
-"Wy" = (
-/obj/structure/railing,
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 8;
- piping_layer = 2
- },
-/obj/effect/turf_decal/industrial/outline/yellow,
-/obj/effect/decal/cleanable/greenglow,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"WA" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin{
@@ -5069,6 +5046,25 @@
/obj/machinery/computer/helm/viewscreen/directional/north,
/turf/open/floor/pod,
/area/ship/cargo)
+"WK" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ dir = 8;
+ id = "warshipbridge";
+ name = "Bridge Window";
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/item/reagent_containers/food/drinks/mug{
+ pixel_x = -6;
+ pixel_y = 9
+ },
+/obj/item/gps{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/turf/open/floor/plasteel/tech,
+/area/ship/bridge)
"WL" = (
/obj/structure/chair/comfy/shuttle{
dir = 8;
@@ -5137,25 +5133,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
-"Xk" = (
-/obj/structure/salvageable/server,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/techfloor{
- dir = 8
- },
-/obj/machinery/button/shieldwallgen{
- id = "komodo_port";
- pixel_x = 6;
- pixel_y = 24
- },
-/obj/machinery/button/door{
- id = "Artillery1shutter";
- name = "Artillery Hatch";
- pixel_x = -4;
- pixel_y = 26
- },
-/turf/open/floor/plasteel/telecomms_floor,
-/area/ship/maintenance/port)
"Xp" = (
/obj/machinery/portable_atmospherics/canister/air,
/obj/effect/turf_decal/techfloor{
@@ -5207,31 +5184,6 @@
/obj/structure/closet/crate/freezer/blood,
/turf/open/floor/pod/dark,
/area/ship/medical)
-"XN" = (
-/obj/effect/turf_decal/trimline/transparent/bar/filled/line{
- dir = 6
- },
-/obj/structure/closet/wall/red/directional/south{
- name = "Bartender's locker"
- },
-/obj/item/clothing/shoes/cowboy/black,
-/obj/item/storage/belt/military/snack,
-/obj/item/storage/pill_bottle/lsd{
- pixel_x = 9;
- pixel_y = 5
- },
-/obj/item/clothing/accessory/waistcoat,
-/obj/item/reagent_containers/food/drinks/shaker{
- pixel_x = -9;
- pixel_y = 2
- },
-/obj/item/clothing/under/suit/waiter/syndicate,
-/obj/machinery/vending/boozeomat/syndicate_access{
- density = 0;
- pixel_x = 32
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/crew/canteen)
"XS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel/stairs{
@@ -5373,6 +5325,32 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
+"YY" = (
+/obj/effect/turf_decal/borderfloor{
+ dir = 1
+ },
+/obj/item/gun/ballistic/automatic/pistol/ringneck{
+ pixel_y = 3
+ },
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/c10mm,
+/obj/item/clothing/gloves/tackler/combat/insulated,
+/obj/structure/closet/secure_closet/wall/directional/west{
+ icon_state = "sec_wall";
+ name = "Sergeant's Locker";
+ req_access_txt = "58"
+ },
+/obj/item/melee/classic_baton/telescopic,
+/obj/item/clothing/suit/armor/vest/blueshirt,
+/obj/item/clothing/accessory/holster,
+/obj/item/clothing/shoes/combat,
+/obj/item/radio/headset/syndicate,
+/obj/item/clothing/under/syndicate/hardliners/officer,
+/obj/item/clothing/suit/armor/hardliners/sergeant,
+/obj/item/clothing/head/hardliners/peaked,
+/turf/open/floor/plasteel/dark,
+/area/ship/bridge)
"Zb" = (
/obj/structure/railing{
dir = 4
@@ -5473,6 +5451,29 @@
/obj/item/clothing/under/syndicate/hardliners,
/turf/open/floor/mineral/plastitanium,
/area/ship/medical)
+"Zy" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light_switch{
+ dir = 1;
+ pixel_x = 6;
+ pixel_y = -21
+ },
+/obj/machinery/firealarm/directional/south{
+ pixel_x = -6
+ },
+/turf/open/floor/pod,
+/area/ship/cargo)
"Zz" = (
/obj/structure/railing/corner{
dir = 8
@@ -5629,7 +5630,7 @@ wG
yb
YR
nA
-BX
+KK
hY
"}
(6,1,1) = {"
@@ -5666,7 +5667,7 @@ BR
sq
sq
Vl
-Wy
+ND
dL
mP
sq
@@ -5717,7 +5718,7 @@ CM
CM
Ep
Nq
-kt
+PA
iH
LP
Ep
@@ -5743,7 +5744,7 @@ uV
Ep
vY
Ce
-rk
+mZ
CL
VN
CL
@@ -5785,7 +5786,7 @@ TB
Ci
KT
CL
-GU
+us
Wq
sQ
NI
@@ -5820,14 +5821,14 @@ tr
YQ
aL
Ep
-DZ
+Jp
mX
dR
kh
gE
ue
vp
-Jy
+jy
Ni
km
tf
@@ -5845,7 +5846,7 @@ VR
Ci
UF
gE
-rP
+qm
TE
FB
nD
@@ -5866,7 +5867,7 @@ jv
VR
gE
gE
-pL
+qP
VU
MV
eY
@@ -5877,7 +5878,7 @@ CM
Vk
HI
Xd
-rc
+Zy
Ep
Ep
Nf
@@ -5908,7 +5909,7 @@ BQ
dD
gE
wT
-Pk
+Im
gE
Bx
"}
@@ -5979,7 +5980,7 @@ sn
ho
Uy
PE
-Qy
+rI
kD
Fe
xH
@@ -5987,7 +5988,7 @@ LV
Vc
wk
Vj
-bw
+Lj
kq
CM
CM
@@ -6036,9 +6037,9 @@ CM
CM
CM
Aj
-QG
+eo
sy
-XN
+MF
kD
kD
fX
@@ -6155,7 +6156,7 @@ OP
(32,1,1) = {"
CM
gN
-Xk
+nh
aO
Ab
tC
@@ -6184,7 +6185,7 @@ wR
ae
GS
tC
-JU
+kw
RK
tC
yd
@@ -6242,7 +6243,7 @@ tC
Oe
eK
tC
-pU
+fD
tC
tC
tC
@@ -6261,10 +6262,10 @@ FV
tC
YX
It
-Pb
+dG
WR
ub
-Ua
+YY
jn
tC
dc
@@ -6305,7 +6306,7 @@ Rl
hJ
vI
WA
-ev
+rN
tC
BP
nv
@@ -6342,7 +6343,7 @@ CM
ME
jE
lz
-iE
+WK
Bd
Al
ME
diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
index 5504f16364e3..bca4d457916a 100644
--- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
+++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
@@ -91,6 +91,33 @@
},
/turf/open/floor/plating,
/area/ship/engineering/atmospherics)
+"aF" = (
+/obj/structure/rack,
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag{
+ pixel_y = -3;
+ pixel_x = 2
+ },
+/obj/machinery/light/directional/north,
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_x = -8;
+ pixel_y = -4
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_y = -7
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_y = -9;
+ pixel_x = -10
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_y = -12
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"aG" = (
/obj/structure/closet/secure_closet/wall/directional/east,
/obj/item/kitchen/knife,
@@ -755,47 +782,6 @@
rad_insulation = 0
},
/area/ship/medical)
-"eD" = (
-/obj/structure/sign/poster/contraband/m90{
- icon_state = "poster-m90";
- pixel_x = -32
- },
-/obj/effect/turf_decal/spline/fancy/opaque/black{
- dir = 8
- },
-/obj/effect/turf_decal/spline/fancy/opaque/syndiered{
- dir = 9
- },
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "syndicate";
- name = "lieutenant locker";
- req_access = list(3,150)
- },
-/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/suit/armor/ngr/captain,
-/obj/item/clothing/head/ngr/peaked,
-/obj/item/clothing/shoes/combat,
-/obj/item/megaphone/sec{
- name = "syndicate megaphone"
- },
-/obj/item/storage/pistolcase/ringneck,
-/obj/item/clothing/head/HoS/beret/syndicate,
-/obj/item/radio/headset/syndicate/alt/leader,
-/obj/item/clothing/gloves/krav_maga/combatglovesplus,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/clothing/suit/armor/hos/trenchcoat,
-/obj/machinery/button/door{
- pixel_x = 9;
- pixel_y = 25;
- id = "twinkle_armory";
- name = "Armory Access";
- req_access = list(3,150)
- },
-/obj/item/ammo_box/c10mm,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"eF" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/cigarettes/cigars/havana{
@@ -1170,6 +1156,30 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/tech,
/area/ship/hallway/port)
+"hh" = (
+/obj/structure/closet/secure_closet/engineering_personal{
+ req_access = list(150,10);
+ populate = 0
+ },
+/obj/effect/turf_decal/corner/opaque/orange{
+ dir = 10
+ },
+/obj/machinery/light/directional/south,
+/obj/item/clothing/shoes/magboots/syndie,
+/obj/item/clothing/head/helmet/space/syndicate/black/engie,
+/obj/item/clothing/suit/space/syndicate/black/engie,
+/obj/item/pipe_dispenser,
+/obj/item/storage/belt/utility/syndicate,
+/obj/item/clothing/under/syndicate/gec,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/head/hardhat/red{
+ name = "hard hat"
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
"hr" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -1193,6 +1203,33 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/bridge)
+"hB" = (
+/obj/effect/turf_decal/corner/opaque/orange/three_quarters{
+ dir = 1
+ },
+/obj/item/clothing/under/syndicate/gec,
+/obj/item/clothing/shoes/magboots/syndie,
+/obj/item/clothing/head/helmet/space/syndicate/black/engie,
+/obj/item/clothing/suit/space/syndicate/black/engie,
+/obj/structure/closet/secure_closet/engineering_personal{
+ req_access = list(150,10);
+ populate = 0
+ },
+/obj/item/pipe_dispenser,
+/obj/structure/sign/poster/contraband/gec{
+ pixel_y = -32
+ },
+/obj/item/storage/belt/utility/syndicate,
+/obj/item/clothing/under/syndicate/gec,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/head/hardhat/red{
+ name = "hard hat"
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
"hN" = (
/obj/effect/turf_decal/corner/opaque/orange{
dir = 5
@@ -1782,6 +1819,31 @@
/obj/item/ammo_box/a357,
/turf/open/floor/carpet/nanoweave/red,
/area/ship/crew/dorm/dormtwo)
+"kr" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/machinery/light/directional/west,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"ky" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/obj/machinery/light/directional/east,
@@ -2027,6 +2089,33 @@
},
/turf/open/floor/wood,
/area/ship/crew/canteen)
+"lZ" = (
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/machinery/light/directional/east,
+/obj/item/clothing/head/soft/black,
+/obj/item/clothing/glasses/sunglasses,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"ma" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -2766,33 +2855,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel/dark,
/area/ship/hallway/port)
-"qn" = (
-/obj/structure/rack,
-/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag{
- pixel_x = -7;
- pixel_y = 7
- },
-/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag{
- pixel_y = -3;
- pixel_x = 2
- },
-/obj/machinery/light/directional/north,
-/obj/item/ammo_box/magazine/m12g_bulldog/drum{
- pixel_x = -8;
- pixel_y = -4
- },
-/obj/item/ammo_box/magazine/m12g_bulldog/drum{
- pixel_y = -7
- },
-/obj/item/ammo_box/magazine/m12g_bulldog/drum{
- pixel_y = -9;
- pixel_x = -10
- },
-/obj/item/ammo_box/magazine/m12g_bulldog/drum{
- pixel_y = -12
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"qo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -3236,6 +3298,32 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/plasteel/tech,
/area/ship/engineering/atmospherics)
+"sU" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/machinery/light/directional/east,
+/obj/item/clothing/head/beret/black,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"sW" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 8
@@ -3243,6 +3331,32 @@
/obj/effect/turf_decal/industrial/outline,
/turf/open/floor/plasteel/mono/dark,
/area/ship/engineering/engine)
+"sX" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "explosives locker"
+ },
+/obj/item/storage/backpack/duffelbag/syndie/c4{
+ pixel_x = -1;
+ pixel_y = -10
+ },
+/obj/item/gun/ballistic/rocketlauncher/mako{
+ pixel_y = 6;
+ pixel_x = -3
+ },
+/obj/item/ammo_casing/caseless/rocket/hedp,
+/obj/item/ammo_casing/caseless/rocket/hedp,
+/obj/item/ammo_casing/caseless/rocket{
+ pixel_x = -6;
+ pixel_y = -3
+ },
+/obj/item/ammo_casing/caseless/rocket{
+ pixel_x = -6;
+ pixel_y = -3
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"sY" = (
/obj/machinery/computer/atmos_control/tank/nitrogen_tank{
dir = 8
@@ -3459,19 +3573,38 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/medical)
-"uP" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/obj/structure/sign/poster/contraband/atmosia_independence{
- pixel_x = -32
+"uM" = (
+/obj/structure/rack,
+/obj/machinery/camera/autoname{
+ dir = 6
},
-/turf/closed/wall/r_wall/syndicate/nodiagonal{
- rad_insulation = 0
+/obj/item/ammo_box/magazine/sniper_rounds{
+ pixel_x = 9;
+ pixel_y = 4
},
-/area/ship/engineering/communications)
-"uX" = (
-/obj/machinery/door/airlock/medical/glass{
- req_one_access_txt = "150";
- req_access = list(150);
+/obj/item/ammo_box/magazine/sniper_rounds{
+ pixel_x = 6;
+ pixel_y = 1
+ },
+/obj/item/gun/ballistic/automatic/marksman/taipan/no_mag{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
+"uP" = (
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
+/obj/structure/sign/poster/contraband/atmosia_independence{
+ pixel_x = -32
+ },
+/turf/closed/wall/r_wall/syndicate/nodiagonal{
+ rad_insulation = 0
+ },
+/area/ship/engineering/communications)
+"uX" = (
+/obj/machinery/door/airlock/medical/glass{
+ req_one_access_txt = "150";
+ req_access = list(150);
dir = 4
},
/obj/effect/turf_decal/corner/opaque/syndiered/full,
@@ -3697,32 +3830,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
-"wv" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
- },
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/machinery/light/directional/east,
-/obj/item/clothing/head/beret/black,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"wx" = (
/obj/effect/turf_decal/steeldecal/steel_decals4,
/turf/open/floor/mineral/plastitanium/red,
@@ -4203,28 +4310,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/port)
-"yU" = (
-/obj/structure/closet/secure_closet/warden{
- name = "redshield's locker";
- populate = 0
- },
-/obj/item/clothing/shoes/combat/suns,
-/obj/item/clothing/shoes/laceup/suns,
-/obj/item/clothing/glasses/hud/security/suns,
-/obj/item/clothing/gloves/tackler/dolphin/suns,
-/obj/item/clothing/suit/toggle/suns/pkcoat,
-/obj/item/clothing/suit/armor/vest/suns/hos,
-/obj/item/clothing/suit/armor/vest/suns/ehos,
-/obj/item/clothing/head/welding/suns/hos,
-/obj/item/clothing/under/syndicate/suns/pkuniform,
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/storage/belt/sabre/solgov,
-/obj/item/storage/pistolcase/modelh,
-/obj/item/ammo_box/ferroslugbox,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/bridge)
"yX" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 8
@@ -4414,32 +4499,6 @@
rad_insulation = 0
},
/area/ship/medical)
-"zZ" = (
-/obj/effect/turf_decal/corner/opaque/orange/three_quarters{
- dir = 1
- },
-/obj/item/clothing/under/syndicate/gec,
-/obj/item/clothing/shoes/magboots/syndie,
-/obj/item/clothing/head/helmet/space/syndicate/black/engie,
-/obj/item/clothing/suit/space/syndicate/black/engie,
-/obj/structure/closet/secure_closet/engineering_personal{
- req_access = list(150,10);
- populate = 0
- },
-/obj/item/pipe_dispenser,
-/obj/structure/sign/poster/contraband/gec{
- pixel_y = -32
- },
-/obj/item/storage/belt/utility/syndicate,
-/obj/item/clothing/under/syndicate/gec,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/head/hardhat/red{
- name = "hard hat"
- },
-/turf/open/floor/plasteel/dark,
-/area/ship/engineering)
"Af" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{
dir = 8
@@ -4984,33 +5043,29 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/medical)
-"Di" = (
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
+"Dj" = (
+/obj/structure/rack,
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_x = 10;
+ pixel_y = -1
},
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_x = 4
},
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_y = -3;
+ pixel_x = 7
},
-/obj/machinery/light/directional/east,
-/obj/item/clothing/head/soft/black,
-/obj/item/clothing/glasses/sunglasses,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_y = -2
+ },
+/obj/item/gun/ballistic/automatic/assault/hydra/dmr/no_mag{
+ pixel_x = -7;
+ pixel_y = 4
+ },
+/obj/item/gun/ballistic/automatic/assault/hydra/dmr/no_mag,
/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
+/area/ship/security/armory)
"Dk" = (
/obj/effect/turf_decal/corner/opaque/orange{
dir = 5
@@ -6199,32 +6254,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/medical)
-"JG" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "explosives locker"
- },
-/obj/item/storage/backpack/duffelbag/syndie/c4{
- pixel_x = -1;
- pixel_y = -10
- },
-/obj/item/gun/ballistic/rocketlauncher/mako{
- pixel_y = 6;
- pixel_x = -3
- },
-/obj/item/ammo_casing/caseless/rocket/hedp,
-/obj/item/ammo_casing/caseless/rocket/hedp,
-/obj/item/ammo_casing/caseless/rocket{
- pixel_x = -6;
- pixel_y = -3
- },
-/obj/item/ammo_casing/caseless/rocket{
- pixel_x = -6;
- pixel_y = -3
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"JH" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -6434,25 +6463,6 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ship/crew/office)
-"KH" = (
-/obj/structure/rack,
-/obj/machinery/camera/autoname{
- dir = 6
- },
-/obj/item/ammo_box/magazine/sniper_rounds{
- pixel_x = 9;
- pixel_y = 4
- },
-/obj/item/ammo_box/magazine/sniper_rounds{
- pixel_x = 6;
- pixel_y = 1
- },
-/obj/item/gun/ballistic/automatic/marksman/taipan/no_mag{
- pixel_x = -3;
- pixel_y = 6
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"KI" = (
/obj/structure/table/optable,
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{
@@ -6973,31 +6983,6 @@
},
/turf/open/floor/engine,
/area/ship/engineering/engine)
-"OI" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
- },
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/machinery/light/directional/west,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"OK" = (
/obj/effect/turf_decal/syndicateemblem/bottom/middle{
dir = 1
@@ -7124,6 +7109,31 @@
/obj/structure/catwalk/over/plated_catwalk/dark,
/turf/open/floor/plating,
/area/ship/hallway/starboard)
+"Pf" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/machinery/light/directional/east,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"Pn" = (
/obj/machinery/light/small/directional/east,
/obj/effect/turf_decal/trimline/opaque/syndiered/warning,
@@ -7340,6 +7350,28 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/crew/janitor)
+"Qt" = (
+/obj/structure/closet/secure_closet/warden{
+ name = "redshield's locker";
+ populate = 0
+ },
+/obj/item/clothing/shoes/combat/suns,
+/obj/item/clothing/shoes/laceup/suns,
+/obj/item/clothing/glasses/hud/security/suns,
+/obj/item/clothing/gloves/tackler/dolphin/suns,
+/obj/item/clothing/suit/toggle/suns/pkcoat,
+/obj/item/clothing/suit/armor/vest/suns/hos,
+/obj/item/clothing/suit/armor/vest/suns/ehos,
+/obj/item/clothing/head/welding/suns/hos,
+/obj/item/clothing/under/syndicate/suns/pkuniform,
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/storage/belt/sabre/solgov,
+/obj/item/storage/pistolcase/modelh,
+/obj/item/ammo_box/ferroslugbox,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/bridge)
"Qv" = (
/obj/structure/sign/poster/official/moth{
pixel_x = 32
@@ -7546,6 +7578,27 @@
},
/turf/open/floor/circuit/red,
/area/ship/engineering/communications)
+"RF" = (
+/obj/structure/rack,
+/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
+ pixel_x = 2;
+ pixel_y = 8
+ },
+/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
+ pixel_y = 3
+ },
+/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
+ pixel_y = -2;
+ pixel_x = 3
+ },
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"RG" = (
/obj/effect/turf_decal/corner/opaque/orange{
dir = 5
@@ -8386,31 +8439,6 @@
},
/turf/open/floor/engine/plasma,
/area/ship/engineering/atmospherics)
-"Wx" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/ammo_box/magazine/m10mm_ringneck,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
- },
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/machinery/light/directional/east,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"Wy" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2,
/obj/structure/catwalk/over/plated_catwalk/dark,
@@ -8602,29 +8630,6 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/bridge)
-"Xv" = (
-/obj/structure/rack,
-/obj/item/ammo_box/magazine/m556_42_hydra/small{
- pixel_x = 10;
- pixel_y = -1
- },
-/obj/item/ammo_box/magazine/m556_42_hydra/small{
- pixel_x = 4
- },
-/obj/item/ammo_box/magazine/m556_42_hydra/small{
- pixel_y = -3;
- pixel_x = 7
- },
-/obj/item/ammo_box/magazine/m556_42_hydra/small{
- pixel_y = -2
- },
-/obj/item/gun/ballistic/automatic/assault/hydra/dmr/no_mag{
- pixel_x = -7;
- pixel_y = 4
- },
-/obj/item/gun/ballistic/automatic/assault/hydra/dmr/no_mag,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"XE" = (
/obj/effect/turf_decal/corner/opaque/syndiered{
dir = 6
@@ -8637,27 +8642,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
-"XI" = (
-/obj/structure/rack,
-/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
- pixel_x = 2;
- pixel_y = 8
- },
-/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
- pixel_y = 3
- },
-/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
- pixel_y = -2;
- pixel_x = 3
- },
-/obj/item/ammo_box/magazine/m45_cobra,
-/obj/item/ammo_box/magazine/m45_cobra,
-/obj/item/ammo_box/magazine/m45_cobra,
-/obj/item/ammo_box/magazine/m45_cobra,
-/obj/item/ammo_box/magazine/m45_cobra,
-/obj/item/ammo_box/magazine/m45_cobra,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"XL" = (
/obj/machinery/door/airlock/external{
req_access = list(150)
@@ -8833,6 +8817,47 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ship/bridge)
+"YI" = (
+/obj/structure/sign/poster/contraband/m90{
+ icon_state = "poster-m90";
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/spline/fancy/opaque/black{
+ dir = 8
+ },
+/obj/effect/turf_decal/spline/fancy/opaque/syndiered{
+ dir = 9
+ },
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "syndicate";
+ name = "lieutenant locker";
+ req_access = list(3,150)
+ },
+/obj/item/clothing/under/syndicate/ngr/officer,
+/obj/item/clothing/suit/armor/ngr/captain,
+/obj/item/clothing/head/ngr/peaked,
+/obj/item/clothing/shoes/combat,
+/obj/item/megaphone/sec{
+ name = "syndicate megaphone"
+ },
+/obj/item/storage/pistolcase/ringneck,
+/obj/item/clothing/head/HoS/beret/syndicate,
+/obj/item/radio/headset/syndicate/alt/leader,
+/obj/item/clothing/gloves/krav_maga/combatglovesplus,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/clothing/suit/armor/hos/trenchcoat,
+/obj/machinery/button/door{
+ pixel_x = 9;
+ pixel_y = 25;
+ id = "twinkle_armory";
+ name = "Armory Access";
+ req_access = list(3,150)
+ },
+/obj/item/ammo_box/c10mm,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"YJ" = (
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line,
/obj/machinery/iv_drip,
@@ -8896,29 +8921,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/bridge)
-"Zc" = (
-/obj/structure/closet/secure_closet/engineering_personal{
- req_access = list(150,10);
- populate = 0
- },
-/obj/effect/turf_decal/corner/opaque/orange{
- dir = 10
- },
-/obj/machinery/light/directional/south,
-/obj/item/clothing/shoes/magboots/syndie,
-/obj/item/clothing/head/helmet/space/syndicate/black/engie,
-/obj/item/clothing/suit/space/syndicate/black/engie,
-/obj/item/pipe_dispenser,
-/obj/item/storage/belt/utility/syndicate,
-/obj/item/clothing/under/syndicate/gec,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/head/hardhat/red{
- name = "hard hat"
- },
-/turf/open/floor/plasteel/dark,
-/area/ship/engineering)
"Zg" = (
/obj/effect/turf_decal/industrial/warning{
dir = 6
@@ -9482,7 +9484,7 @@ ZX
Qd
bM
zH
-zZ
+hB
ZX
hN
IT
@@ -9517,7 +9519,7 @@ ZX
fz
zK
qK
-Zc
+hh
ZX
RG
BV
@@ -9674,7 +9676,7 @@ xo
pc
TT
PL
-Xv
+Dj
Si
Sg
PL
@@ -9744,7 +9746,7 @@ oX
PN
ec
PL
-XI
+RF
ji
wg
Uc
@@ -9779,14 +9781,14 @@ ea
BG
tY
PL
-qn
+aF
jx
TC
on
ep
sd
da
-Di
+lZ
Bj
"}
(22,1,1) = {"
@@ -9814,9 +9816,9 @@ sO
AK
Pe
PL
-KH
+uM
Fr
-JG
+sX
PL
Tt
sd
@@ -9856,7 +9858,7 @@ PL
BL
EG
da
-OI
+kr
Bj
"}
(24,1,1) = {"
@@ -9884,7 +9886,7 @@ sO
QC
Cq
Bj
-eD
+YI
nt
oc
Eh
@@ -9961,7 +9963,7 @@ Bj
Tt
sd
da
-Wx
+Pf
Bj
"}
(27,1,1) = {"
@@ -10031,7 +10033,7 @@ Pa
At
sd
da
-OI
+kr
Bj
"}
(29,1,1) = {"
@@ -10136,7 +10138,7 @@ GD
Nj
eN
da
-wv
+sU
Bj
"}
(32,1,1) = {"
@@ -10475,7 +10477,7 @@ vL
cI
bL
Hx
-yU
+Qt
Lw
nb
MP
diff --git a/code/__DEFINES/botany.dm b/code/__DEFINES/botany.dm
index 4780f819f555..4abffb067dd2 100644
--- a/code/__DEFINES/botany.dm
+++ b/code/__DEFINES/botany.dm
@@ -15,3 +15,24 @@
//Floral Somoray
#define REVOLUTION_CHARGE 10000 // Default flora cell
+
+/// -- Trait IDs. Plants that match IDs cannot be added to the same plant. --
+/// Plants that glow.
+#define GLOW_ID (1<<0)
+/// Plant types.
+#define PLANT_TYPE_ID (1<<1)
+/// Plants that affect the reagent's temperature.
+#define TEMP_CHANGE_ID (1<<2)
+/// Plants that affect the reagent contents.
+#define CONTENTS_CHANGE_ID (1<<3)
+/// Plants that do something special when they impact.
+#define THROW_IMPACT_ID (1<<4)
+/// Plants that transfer reagents on impact.
+#define REAGENT_TRANSFER_ID (1<<5)
+/// Plants that have a unique effect on attack_self.
+#define ATTACK_SELF_ID (1<<6)
+
+#define HYDROTRAY_NO_PLANT "missing"
+#define HYDROTRAY_PLANT_DEAD "dead"
+#define HYDROTRAY_PLANT_GROWING "growing"
+#define HYDROTRAY_PLANT_HARVESTABLE "harvestable"
diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm
new file mode 100644
index 000000000000..4906c6bdd4fd
--- /dev/null
+++ b/code/__DEFINES/clothing.dm
@@ -0,0 +1,39 @@
+/*
+//stages of shoe tying-ness
+/// Shoes are untied
+#define SHOES_UNTIED 0
+/// Shoes are tied normally
+#define SHOES_TIED 1
+/// Shoes have been tied in knots
+#define SHOES_KNOTTED 2
+
+//suit sensors: sensor_mode defines
+/// Suit sensor is turned off
+#define SENSOR_OFF 0
+/// Suit sensor displays the mob as alive or dead
+#define SENSOR_LIVING 1
+/// Suit sensor displays the mob damage values
+#define SENSOR_VITALS 2
+/// Suit sensor displays the mob damage values and exact location
+#define SENSOR_COORDS 3
+
+//suit sensors: has_sensor defines
+/// Suit sensor has been EMP'd and cannot display any information (can be fixed)
+#define BROKEN_SENSORS -1
+/// Suit sensor is not present and cannot display any information
+#define NO_SENSORS 0
+/// Suit sensor is present and can display information
+#define HAS_SENSORS 1
+/// Suit sensor is present and is forced to display information (used on prisoner jumpsuits)
+#define LOCKED_SENSORS 2
+*/
+
+/// Wrapper for adding clothing based traits
+#define ADD_CLOTHING_TRAIT(mob, trait) ADD_TRAIT(mob, trait, "[CLOTHING_TRAIT]_[REF(src)]")
+/// Wrapper for removing clothing based traits
+#define REMOVE_CLOTHING_TRAIT(mob, trait) REMOVE_TRAIT(mob, trait, "[CLOTHING_TRAIT]_[REF(src)]")
+
+/*
+/// How much integrity does a shirt lose every time we bite it?
+#define MOTH_EATING_CLOTHING_DAMAGE 15
+*/
diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_hydroponic.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_hydroponic.dm
new file mode 100644
index 000000000000..32fbb4867b2d
--- /dev/null
+++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_hydroponic.dm
@@ -0,0 +1,34 @@
+//Plants / Plant Traits
+
+///called when a plant with slippery skin is slipped on (mob/victim)
+#define COMSIG_PLANT_ON_SLIP "plant_on_slip"
+///called when a plant with liquid contents is squashed on (atom/target)
+#define COMSIG_PLANT_ON_SQUASH "plant_on_squash"
+///called when a plant backfires via the backfire element (mob/victim)
+#define COMSIG_PLANT_ON_BACKFIRE "plant_on_backfire"
+///called when a seed grows in a tray (obj/machinery/hydroponics)
+#define COMSIG_SEED_ON_GROW "plant_on_grow"
+///called when a seed is planted in a tray (obj/machinery/hydroponics)
+#define COMSIG_SEED_ON_PLANTED "plant_on_plant"
+
+//Hydro tray
+///from base of /obj/machinery/hydroponics/set_seed() : (obj/item/new_seed)
+#define COMSIG_HYDROTRAY_SET_SEED "hydrotray_set_seed"
+///from base of /obj/machinery/hydroponics/set_self_sustaining() : (new_value)
+#define COMSIG_HYDROTRAY_SET_SELFSUSTAINING "hydrotray_set_selfsustaining"
+///from base of /obj/machinery/hydroponics/set_weedlevel() : (new_value)
+#define COMSIG_HYDROTRAY_SET_WEEDLEVEL "hydrotray_set_weedlevel"
+///from base of /obj/machinery/hydroponics/set_pestlevel() : (new_value)
+#define COMSIG_HYDROTRAY_SET_PESTLEVEL "hydrotray_set_pestlevel"
+///from base of /obj/machinery/hydroponics/set_waterlevel() : (new_value)
+#define COMSIG_HYDROTRAY_SET_WATERLEVEL "hydrotray_set_waterlevel"
+///from base of /obj/machinery/hydroponics/set_plant_health() : (new_value)
+#define COMSIG_HYDROTRAY_SET_PLANT_HEALTH "hydrotray_set_plant_health"
+///from base of /obj/machinery/hydroponics/set_toxic() : (new_value)
+#define COMSIG_HYDROTRAY_SET_TOXIC "hydrotray_set_toxic"
+///from base of /obj/machinery/hydroponics/set_plant_status() : (new_value)
+#define COMSIG_HYDROTRAY_SET_PLANT_STATUS "hydrotray_set_plant_status"
+///from base of /obj/machinery/hydroponics/update_tray() : (mob/user, product_count)
+#define COMSIG_HYDROTRAY_ON_HARVEST "hydrotray_on_harvest"
+///from base of /obj/machinery/hydroponics/plantdies()
+#define COMSIG_HYDROTRAY_PLANT_DEATH "hydrotray_plant_death"
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index a89965da7bec..02e6853338d7 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -123,9 +123,16 @@
#define MACHINE_ELECTRIFIED_PERMANENT -1
#define MACHINE_DEFAULT_ELECTRIFY_TIME 30
-//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
+/// -- Flags for genes --
+/// Plant genes that can be removed via gene shears.
#define PLANT_GENE_REMOVABLE (1<<0)
-#define PLANT_GENE_EXTRACTABLE (1<<1)
+/// Plant genes that can be mutated randomly in strange seeds / due to high instability.
+#define PLANT_GENE_MUTATABLE (1<<1)
+#define PLANT_GENE_EXTRACTABLE (1<<2)
+
+/// -- Flags for traits. --
+/// Caps the plant's yield at 5 instead of 10.
+#define TRAIT_HALVES_YIELD (1<<0)
//used to determine what rotation mode the ore redemption machine is in
#define ORM_BOTH 0
diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm
index 61038b17c1ec..db31a4b5552d 100644
--- a/code/__DEFINES/projectiles.dm
+++ b/code/__DEFINES/projectiles.dm
@@ -7,3 +7,9 @@
#define PROJECTILE_PIERCE_PHASE 2
// Delete self without hitting
#define PROJECTILE_DELETE_WITHOUT_HITTING 3
+
+#define PROJECTILE_BONUS_DAMAGE_NONE 0
+#define PROJECTILE_BONUS_DAMAGE_MINERALS (1<<0) //minable walls
+#define PROJECTILE_BONUS_DAMAGE_WALLS (1<<1) // walls
+#define PROJECTILE_BONUS_DAMAGE_RWALLS (1<<2) //reinforced walls
+
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 7b687330d71a..c97fa62ffc5d 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -274,6 +274,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_SCOOPABLE "scoopable"
//your smooches actually deal damage to their target
#define TRAIT_KISS_OF_DEATH "kiss_of_death"
+/// We can handle 'dangerous' plants in botany safely
+#define TRAIT_PLANT_SAFE "plant_safe"
/// This mob overrides certian SSlag_switch measures with this special trait
#define TRAIT_BYPASS_MEASURES "bypass_lagswitch_measures"
//non-mob traits
diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm
index 571bade19ef2..30db6fc98f33 100644
--- a/code/__DEFINES/turfs.dm
+++ b/code/__DEFINES/turfs.dm
@@ -12,3 +12,9 @@
#define CHANGETURF_DEFER_BATCH (1 << 5)
#define IS_OPAQUE_TURF(turf) (turf.directional_opacity == ALL_CARDINALS)
+
+// Integrity of mineral walls.
+#define MINERAL_WALL_INTEGRITY 100
+
+// how many bullet holes a wall can have at a given time
+#define MAX_DENT_DECALS 15
diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm
index a155e570df4f..d87596cf828c 100644
--- a/code/_globalvars/traits.dm
+++ b/code/_globalvars/traits.dm
@@ -148,8 +148,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_HOLDABLE" = TRAIT_HOLDABLE,
"TRAIT_SCOOPABLE" = TRAIT_SCOOPABLE,
"TRAIT_ANXIOUS" = TRAIT_ANXIOUS,
- "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH
-
+ "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH,
+ "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE
),
/obj/item/bodypart = list(
"TRAIT_PARALYSIS" = TRAIT_PARALYSIS
diff --git a/code/datums/elements/plant_backfire.dm b/code/datums/elements/plant_backfire.dm
new file mode 100644
index 000000000000..47cd1de51fe9
--- /dev/null
+++ b/code/datums/elements/plant_backfire.dm
@@ -0,0 +1,125 @@
+/// -- Plant backfire element --
+/// Certain high-danger plants, like death-nettles, will backfire and harm the holder if they're not properly protected.
+/// If a user is protected with something like leather gloves, they can handle them normally.
+/// If they're not protected properly, we invoke a callback on the user, harming or inconveniencing them.
+/datum/element/plant_backfire
+ element_flags = ELEMENT_BESPOKE
+ id_arg_index = 2
+ /// Whether we stop the current action if backfire is triggered (EX: returning CANCEL_ATTACK_CHAIN)
+ var/cancel_action = FALSE
+ /// Any extra traits we want to check in addition to TRAIT_PLANT_SAFE. Mobs with a trait in this list will be considered safe. List of traits.
+ var/extra_traits
+ /// Any plant genes we want to check that are required for our plant to be dangerous. Plants without a gene in this list will be considered safe. List of typepaths.
+ var/extra_genes
+
+/datum/element/plant_backfire/Attach(datum/target, cancel_action = FALSE, extra_traits, extra_genes)
+ . = ..()
+ if(!isitem(target))
+ return ELEMENT_INCOMPATIBLE
+
+ src.cancel_action = cancel_action
+ src.extra_traits = extra_traits
+ src.extra_genes = extra_genes
+
+ RegisterSignal(target, COMSIG_ITEM_PRE_ATTACK, PROC_REF(attack_safety_check))
+ RegisterSignal(target, COMSIG_ITEM_PICKUP, PROC_REF(pickup_safety_check))
+ RegisterSignal(target, COMSIG_MOVABLE_PRE_THROW, PROC_REF(throw_safety_check))
+
+/datum/element/plant_backfire/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, list(COMSIG_ITEM_PRE_ATTACK, COMSIG_ITEM_PICKUP, COMSIG_MOVABLE_PRE_THROW))
+
+/**
+ * Checks before we attack if we're okay to continue.
+ *
+ * source - our plant
+ * user - the mob wielding our [source]
+ */
+/datum/element/plant_backfire/proc/attack_safety_check(obj/item/source, atom/target, mob/user)
+ SIGNAL_HANDLER
+
+ // Covers stuff like tk, since we aren't actually touching the plant.
+ if(!user.is_holding(source))
+ return
+ if(!backfire(source, user))
+ return
+
+ return //cancel_action ? COMPONENT_CANCEL_ATTACK_CHAIN : NONE
+
+/**
+ * Checks before we pick up the plant if we're okay to continue.
+ *
+ * source - our plant
+ * user - the mob picking our [source]
+ */
+/datum/element/plant_backfire/proc/pickup_safety_check(obj/item/source, mob/user)
+ SIGNAL_HANDLER
+
+ backfire(source, user)
+
+/**
+ * Checks before we throw the plant if we're okay to continue.
+ *
+ * source - our plant
+ * thrower - the mob throwing our [source]
+ */
+/datum/element/plant_backfire/proc/throw_safety_check(obj/item/source, list/arguments)
+ SIGNAL_HANDLER
+
+ var/mob/living/thrower = arguments[4] // the 4th arg = the mob throwing our item
+ if(!istype(thrower) || !thrower.is_holding(source))
+ return
+ if(!backfire(source, thrower))
+ return
+
+ return //cancel_action ? COMPONENT_CANCEL_ATTACK_CHAIN : NONE
+
+/**
+ * The actual backfire occurs here.
+ * Checks if the user is able to safely handle the plant.
+ * If not, sends the backfire signal (meaning backfire will occur and be handled by one or multiple genes).
+ *
+ * Returns FALSE if the user was safe and no backfire occured.
+ * Returns TRUE if the user was not safe and a backfire actually happened.
+ */
+/datum/element/plant_backfire/proc/backfire(obj/item/plant, mob/user)
+ if(plant_safety_check(plant, user))
+ return FALSE
+
+ SEND_SIGNAL(plant, COMSIG_PLANT_ON_BACKFIRE, user)
+ return TRUE
+
+/**
+ * Actually checks if our user is safely handling our plant.
+ *
+ * Checks for TRAIT_PLANT_SAFE, and returns TRUE if we have it.
+ * Then, any extra traits we need to check (Like TRAIT_PIERCEIMMUNE for nettles) and returns TRUE if we have one of them.
+ * Then, any extra genes we need to check (Like liquid contents for bluespace tomatos) and returns TRUE if we don't have the gene.
+ *
+ * source - our plant
+ * user - the carbon handling our [source]
+ *
+ * returns FALSE if none of the checks are successful.
+ */
+/datum/element/plant_backfire/proc/plant_safety_check(obj/item/plant, mob/living/carbon/user)
+ if(!istype(user))
+ return TRUE
+
+ if(HAS_TRAIT(user, TRAIT_PLANT_SAFE))
+ return TRUE
+
+ for(var/checked_trait in extra_traits)
+ if(HAS_TRAIT(user, checked_trait))
+ return TRUE
+
+ var/obj/item/seeds/our_seed = plant.get_plant_seed()
+ if(our_seed)
+ for(var/checked_gene in extra_genes)
+ if(!our_seed.get_gene(checked_gene))
+ return TRUE
+
+ for(var/obj/item/clothing/worn_item in user.get_equipped_items())
+ if((worn_item.body_parts_covered & HANDS) && (worn_item.clothing_flags & THICKMATERIAL))
+ return TRUE
+
+ return FALSE
diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm
index 6283cd278645..e99d24e3f558 100644
--- a/code/game/mecha/equipment/tools/mining_tools.dm
+++ b/code/game/mecha/equipment/tools/mining_tools.dm
@@ -17,6 +17,7 @@
toolspeed = 0.9
var/drill_delay = 7
var/drill_level = DRILL_BASIC
+ wall_decon_damage = 100
/obj/item/mecha_parts/mecha_equipment/drill/Initialize()
. = ..()
@@ -62,15 +63,19 @@
return
/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
- if(drill.do_after_mecha(src, 60 / drill.drill_level))
+ while(drill.do_after_mecha(src, 15 / drill.drill_level))
drill.log_message("Drilled through [src]", LOG_MECHA)
- dismantle_wall(devastated = TRUE)
+ alter_integrity(-drill.wall_decon_damage)
+ drill.occupant_message("You drill through some of the outer plating...")
+ playsound(src,'sound/weapons/drill.ogg',60,TRUE)
/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
if(drill.drill_level >= DRILL_HARDENED)
- if(drill.do_after_mecha(src, 120 / drill.drill_level))
+ while(drill.do_after_mecha(src, 20 / drill.drill_level))
drill.log_message("Drilled through [src]", LOG_MECHA)
- dismantle_wall(devastated = TRUE)
+ alter_integrity(-drill.wall_decon_damage)
+ drill.occupant_message("You drill through some of the outer plating...")
+ playsound(src,'sound/weapons/drill.ogg',60,TRUE)
else
drill.occupant_message("[src] is too durable to drill through.")
@@ -150,6 +155,7 @@
drill_level = DRILL_HARDENED
force = 15
toolspeed = 0.7
+ wall_decon_damage = 300
/obj/item/mecha_parts/mecha_equipment/mining_scanner
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 45d83621b431..376d1ba16d11 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -162,6 +162,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/tool_behaviour = NONE
///How fast does the tool work
var/toolspeed = 1
+ /// how much damage does this item do when tearing down walls during deconstruction steps?
+ var/wall_decon_damage = 0
var/block_chance = 0
var/block_cooldown_time = 1 SECONDS
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index f3f891bad11d..c4cafbc8fdb9 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -52,6 +52,9 @@
target.cut_overlay(plastic_overlay, TRUE)
if(!ismob(target) || full_damage_on_mobs)
target.ex_act(EXPLODE_HEAVY, target)
+ if(iswallturf(target))
+ var/turf/closed/wall/wall = target
+ wall.dismantle_wall(TRUE)
else
location = get_turf(src)
if(location)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 50798c54f543..0910b704db84 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -74,7 +74,8 @@
/obj/item/chisel,
/obj/item/clothing/glasses/welding, //WS edit: ok mald sure I'll add the welding stuff to the. ok.
/obj/item/clothing/mask/gas/welding,
- /obj/item/clothing/head/welding //WS end
+ /obj/item/clothing/head/welding, //WS end
+ /obj/item/gun/energy/plasmacutter
))
/obj/item/storage/belt/utility/chief
diff --git a/code/game/objects/items/storage/guncases.dm b/code/game/objects/items/storage/guncases.dm
index 7247a2e0b916..8fe256f2b6c2 100644
--- a/code/game/objects/items/storage/guncases.dm
+++ b/code/game/objects/items/storage/guncases.dm
@@ -30,6 +30,15 @@
/obj/item/storage/guncase/winchester/PopulateContents()
new /obj/item/gun/ballistic/shotgun/flamingarrow/no_mag(src)
+/obj/item/storage/guncase/conflagration
+/obj/item/storage/guncase/conflagration/PopulateContents()
+ new /obj/item/gun/ballistic/shotgun/flamingarrow/conflagration/no_mag(src)
+
+/obj/item/storage/guncase/absolution
+/obj/item/storage/guncase/absolution/PopulateContents()
+ new /obj/item/gun/ballistic/shotgun/flamingarrow/absolution/no_mag(src)
+
+
/obj/item/storage/guncase/skm
/obj/item/storage/guncase/skm/PopulateContents()
new /obj/item/gun/ballistic/automatic/assault/skm/no_mag(src)
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index c792af38486a..53f3396f2727 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -39,6 +39,7 @@
var/acti_sound = 'sound/items/welderactivate.ogg'
var/deac_sound = 'sound/items/welderdeactivate.ogg'
var/start_full = TRUE
+ wall_decon_damage = 50
/obj/item/weldingtool/empty
start_full = FALSE
@@ -348,6 +349,7 @@
light_system = NO_LIGHT_SUPPORT
light_range = 0
change_icons = 0
+ wall_decon_damage = 500
/obj/item/weldingtool/abductor/process()
if(get_fuel() <= max_fuel)
@@ -378,6 +380,7 @@
can_off_process = 1
light_range = 1
toolspeed = 0.5
+ wall_decon_damage = 100
var/last_gen = 0
var/nextrefueltick = 0
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 714129498e4c..7731bf48d2ff 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -27,7 +27,8 @@
var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
- var/cutting_tool = /obj/item/weldingtool
+ // defaults to welder if null
+ var/cutting_tool = TOOL_WELDER
var/open_sound = 'sound/machines/closet_open.ogg'
var/close_sound = 'sound/machines/closet_close.ogg'
var/open_sound_volume = 35
@@ -261,27 +262,22 @@
/obj/structure/closet/proc/tool_interact(obj/item/W, mob/user)//returns TRUE if attackBy call shouldnt be continued (because tool was used/closet was of wrong type), FALSE if otherwise
. = TRUE
if(opened)
- if(istype(W, cutting_tool))
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
-
- to_chat(user, "You begin cutting \the [src] apart...")
- if(W.use_tool(src, user, 40, volume=50))
- if(!opened)
- return
- user.visible_message("[user] slices apart \the [src].",
- "You cut \the [src] apart with \the [W].",
- "You hear welding.")
- deconstruct(TRUE)
+ if(W.tool_behaviour == cutting_tool && user.a_intent != INTENT_HELP)
+ if(!W.tool_start_check(user, amount=0))
return
- else // for example cardboard box is cut with wirecutters
- user.visible_message("[user] cut apart \the [src].", \
- "You cut \the [src] apart with \the [W].")
+
+ to_chat(user, "You begin cutting \the [src] apart...")
+ if(W.use_tool(src, user, 40, volume=50))
+ if(!opened)
+ return
+ user.visible_message("[user] slices apart \the [src].",
+ "You cut \the [src] apart with \the [W].",
+ "You hear cutting.")
deconstruct(TRUE)
- return
+ return
if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too
return
+ return
else if(W.tool_behaviour == TOOL_WELDER && can_weld_shut)
if(!W.tool_start_check(user, amount=0))
return
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
index a5d7531b0aa8..7135b3d199a2 100644
--- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -8,7 +8,7 @@
max_integrity = 70
integrity_failure = 0
can_weld_shut = 0
- cutting_tool = /obj/item/wirecutters
+ cutting_tool = TOOL_WIRECUTTER
material_drop = /obj/item/stack/sheet/cardboard
delivery_icon = "deliverybox"
anchorable = FALSE
@@ -70,7 +70,7 @@
mob_storage_capacity = 5
resistance_flags = NONE
move_speed_multiplier = 2
- cutting_tool = /obj/item/weldingtool
+ cutting_tool = TOOL_WELDER
open_sound = 'sound/machines/crate_open.ogg'
close_sound = 'sound/machines/crate_close.ogg'
open_sound_volume = 35
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 6463282eb6df..6a3cae5bbd72 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -38,7 +38,7 @@
if(istype(W, /obj/item/gun/energy/plasmacutter))
to_chat(user, "You start slicing apart the girder...")
- if(W.use_tool(src, user, 40, volume=100))
+ if(W.use_tool(src, user, 10, volume=100))
to_chat(user, "You slice apart the girder.")
var/obj/item/stack/sheet/metal/M = new (loc, 2)
M.add_fingerprint(user)
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index 2b7d93ae2590..dc410d027504 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -7,8 +7,88 @@
rad_insulation = RAD_MEDIUM_INSULATION
pass_flags_self = PASSCLOSEDTURF
+ ///lower numbers are harder. Used to determine the probability of a hulk smashing through.
+ var/hardness = 40
+ var/breakdown_duration = 20 //default time it takes for a tool to break the wall
+
+ var/attack_hitsound = 'sound/weapons/smash.ogg'
+ var/break_sound = 'sound/items/welder.ogg'
+ hitsound_type = PROJECTILE_HITSOUND_METAL
+
+ // The wall will ignore damage from weak items, depending on their
+ // force, damage type, tool behavior, and sharpness. This is the minimum
+ // amount of force that a blunt, brute item must have to damage the wall.
+ var/min_dam = 0
+ var/max_integrity = 100
+ var/integrity
+ var/brute_mod = 1
+ var/burn_mod = 1
+ // Projectiles that do extra damage to the wall
+ var/list/extra_dam_proj
+
+ var/mob_smash_flags
+ var/proj_bonus_damage_flags
+
+ var/mutable_appearance/damage_overlay
+ var/damage_visual = 'icons/effects/wall_damage.dmi'
+ var/overlay_layer = BULLET_HOLE_LAYER
+
+ var/list/dent_decals
+
/turf/closed/Initialize(mapload, inherited_virtual_z)
. = ..()
+ if(integrity == null)
+ integrity = max_integrity
+
+/turf/closed/copyTurf(turf/T, copy_air, flags)
+ . = ..()
+ var/turf/closed/wall_copy = T
+ if(LAZYLEN(dent_decals))
+ wall_copy.dent_decals = dent_decals.Copy()
+ wall_copy.update_appearance()
+
+/turf/closed/update_overlays()
+ . = ..()
+ damage_overlay = null
+ var/adj_dam_pct = 1 - (integrity/(max_integrity))
+ if(adj_dam_pct < 0)
+ adj_dam_pct = 0
+ if(!damage_overlay)
+ damage_overlay = mutable_appearance(damage_visual, "cracks", overlay_layer)
+ damage_overlay.alpha = adj_dam_pct*255
+ . += damage_overlay
+ for(var/decal in dent_decals)
+ . += decal
+
+/turf/closed/proc/add_dent(denttype, x=rand(-8, 8), y=rand(-8, 8))
+ if(LAZYLEN(dent_decals) >= MAX_DENT_DECALS)
+ return
+
+ var/mutable_appearance/decal = mutable_appearance('icons/effects/effects.dmi', "", BULLET_HOLE_LAYER)
+ switch(denttype)
+ if(WALL_DENT_SHOT)
+ decal.icon_state = "bullet_hole"
+ if(WALL_DENT_HIT)
+ decal.icon_state = "impact[rand(1, 3)]"
+
+ decal.pixel_x = x
+ decal.pixel_y = y
+ LAZYADD(dent_decals, decal)
+ update_appearance()
+
+/turf/closed/examine(mob/user)
+ . = ..()
+ . += damage_hints(user)
+
+/turf/closed/proc/damage_hints(mob/user)
+ switch(integrity / max_integrity)
+ if(0.5 to 0.99)
+ return "[p_they(TRUE)] look[p_s()] slightly damaged."
+ if(0.25 to 0.5)
+ return "[p_they(TRUE)] appear[p_s()] heavily damaged."
+ if(0 to 0.25)
+ return "[p_theyre(TRUE)] falling apart!"
+ return
/turf/closed/AfterChange()
. = ..()
@@ -17,269 +97,209 @@
/turf/closed/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
return FALSE
-/turf/closed/indestructible
- name = "wall"
- desc = "Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls.dmi'
- explosion_block = 50
-
-/turf/closed/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE)
- return
-
-/turf/closed/indestructible/acid_act(acidpwr, acid_volume, acid_id)
- return 0
-
-/turf/closed/indestructible/Melt()
- to_be_destroyed = FALSE
- return src
-
-/turf/closed/indestructible/singularity_act()
- return
-
-/turf/closed/indestructible/sandstone
- name = "sandstone wall"
- desc = "A wall with sandstone plating. Rough."
- icon = 'icons/turf/walls/sandstone_wall.dmi'
- icon_state = "sandstone_wall-0"
- base_icon_state = "sandstone_wall"
- baseturfs = /turf/closed/indestructible/sandstone
- smoothing_flags = SMOOTH_BITMASK
-
-/turf/closed/indestructible/splashscreen
- name = "Space Station 13"
- icon = 'icons/blank_title.png'
- icon_state = ""
- layer = SPLASHSCREEN_LAYER
- plane = SPLASHSCREEN_PLANE
- bullet_bounce_sound = null
-
-/turf/closed/indestructible/splashscreen/New()
- SStitle.splash_turf = src
- if(SStitle.icon)
- icon = SStitle.icon
- ..()
-
-/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value)
+/// Damage Code
+
+// negative values reduce integrity, positive values increase integrity.
+// Devastate forces a devestate, safe decon prevents it.
+/turf/closed/proc/alter_integrity(damage, mob/user, devastate = FALSE, safe_decon = FALSE)
+ integrity += damage
+ if(integrity >= max_integrity)
+ integrity = max_integrity
+ if(integrity <= 0)
+ if(safe_decon)
+ dismantle_wall(FALSE, user)
+ return FALSE
+ // if damage put us 50 points or more below 0, and not safe decon we got proper demolished
+ if(integrity <= -50)
+ dismantle_wall(TRUE, user)
+ return FALSE
+ if(devastate)
+ dismantle_wall(TRUE, user)
+ return FALSE
+ dismantle_wall(FALSE,user)
+ return FALSE
+ integrity = min(integrity, max_integrity)
+ update_stats()
+ return integrity
+
+/turf/closed/proc/set_integrity(amount,devastate = FALSE, mob/user)
+ integrity = amount
+ update_stats()
+ if(integrity <= 0)
+ dismantle_wall(devastate, user)
+
+/turf/closed/proc/dismantle_wall(devastate = FALSE, mob/user)
+ for(var/obj/structure/sign/poster/P in src.contents) //Eject contents!
+ P.roll_and_drop(src)
+
+ ScrapeAway()
+
+/turf/closed/proc/update_stats()
+ update_appearance()
+
+/turf/closed/bullet_act(obj/projectile/P)
. = ..()
- if(.)
- switch(var_name)
- if(NAMEOF(src, icon))
- SStitle.icon = icon
-
-
-/turf/closed/indestructible/reinforced
- name = "reinforced wall"
- desc = "A huge chunk of reinforced metal used to separate rooms. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/rwalls/reinforced_wall.dmi'
- icon_state = "reinforced_wall-0"
- base_icon_state = "reinforced_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
- canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK)
-
-/turf/closed/indestructible/titanium
- name = "wall"
- desc = "A light-weight titanium wall used in shuttles. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "shuttle_wall-0"
- base_icon_state = "shuttle_wall"
- flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE)
-
-/turf/closed/indestructible/riveted
- icon = 'icons/turf/walls/riveted.dmi'
- icon_state = "riveted-0"
- base_icon_state = "riveted"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS)
- canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
-
-/turf/closed/indestructible/syndicate
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "plastitanium_wall-0"
- base_icon_state = "plastitanium_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
-
-/turf/closed/indestructible/riveted/uranium
- icon = 'icons/turf/walls/uranium_wall.dmi'
- icon_state = "uranium_wall-0"
- base_icon_state = "uranium_wall"
- smoothing_flags = SMOOTH_BITMASK
-
-/turf/closed/indestructible/riveted/plastinum
- name = "plastinum wall"
- desc = "A luxurious wall made out of a plasma-platinum alloy. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/plastinum_wall.dmi'
- icon_state = "plastinum_wall-0"
- base_icon_state = "plastinum_wall"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
-
-/turf/closed/indestructible/wood
- icon = 'icons/turf/walls/wood_wall.dmi'
- icon_state = "wood_wall-0"
- base_icon_state = "wood_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
- canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK)
-
-
-/turf/closed/indestructible/alien
- name = "alien wall"
- desc = "A wall with alien alloy plating."
- icon = 'icons/turf/walls/abductor_wall.dmi'
- icon_state = "abductor_wall-0"
- base_icon_state = "abductor_wall"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS)
-
-
-/turf/closed/indestructible/cult
- name = "runed metal wall"
- desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound. Effectively impervious to conventional methods of destruction."
- icon = 'icons/turf/walls/cult_wall.dmi'
- icon_state = "cult_wall-0"
- base_icon_state = "cult_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_WALLS)
-
-
-/turf/closed/indestructible/abductor
- icon_state = "alien1"
-
-/turf/closed/indestructible/opshuttle
- icon_state = "wall3"
-
-
-/turf/closed/indestructible/fakeglass
- name = "window"
- icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
- icon_state = "fake_window"
- base_icon_state = "reinforced_window"
- opacity = FALSE
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
-
-/turf/closed/indestructible/fakeglass/Initialize(mapload, inherited_virtual_z)
+ var/dam = get_proj_damage(P)
+ var/shooter = P.firer
+ if(!dam)
+ return
+ if(P.suppressed != SUPPRESSED_VERY)
+ visible_message("[src] is hit by \a [P]!", null, null, COMBAT_MESSAGE_RANGE)
+ if(!QDELETED(src))
+ add_dent(WALL_DENT_SHOT)
+ alter_integrity(-dam, shooter)
+
+/turf/closed/proc/get_item_damage(obj/item/I, t_min = min_dam)
+ var/dam = I.force
+ if(istype(I, /obj/item/clothing/gloves/gauntlets))
+ dam = 20
+ else if(I.tool_behaviour == TOOL_MINING)
+ dam *= (4/3)
+ else
+ switch(I.damtype)
+ if(BRUTE)
+ if(I.get_sharpness())
+ dam *= 2/3
+ if(BURN)
+ dam *= burn_mod
+ else
+ return 0
+ // if dam is below t_min, then the hit has no effect
+ return (dam < t_min ? 0 : dam)
+
+/turf/closed/proc/get_proj_damage(obj/projectile/P, t_min = min_dam)
+ var/dam = P.damage
+ if(proj_bonus_damage_flags & P.wall_damage_flags)
+ dam = P.wall_damage_override
+ else
+ switch(P.damage_type)
+ if(BRUTE)
+ dam *= brute_mod
+ if(BURN)
+ dam *= burn_mod
+ else
+ return 0
+ // if dam is below t_min, then the hit has no effect
+ return (dam < t_min ? 0 : dam)
+
+/turf/closed/ex_act(severity, target)
+ if(target == src || !density)
+ return ..()
+ switch(severity)
+ if(EXPLODE_DEVASTATE)
+ // SN src = null
+ var/turf/NT = ScrapeAway()
+ NT.contents_explosion(severity, target)
+ return
+ if(EXPLODE_HEAVY)
+ alter_integrity(rand(-500, -800))
+ if(EXPLODE_LIGHT)
+ alter_integrity(rand(-200, -700))
+
+/turf/closed/attack_paw(mob/living/user)
+ user.changeNext_move(CLICK_CD_MELEE)
+ return attack_hand(user)
+
+/turf/closed/attack_hand(mob/user)
. = ..()
- underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay
- underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille
+ if(.)
+ return
+ user.changeNext_move(CLICK_CD_MELEE)
+ to_chat(user, "You push \the [src] but nothing happens!")
+ playsound(src, 'sound/weapons/genhit.ogg', 25, TRUE)
+ add_fingerprint(user)
+
+/turf/closed/attackby(obj/item/W, mob/user, params)
+ user.changeNext_move(CLICK_CD_MELEE)
+ if (!user.IsAdvancedToolUser())
+ to_chat(user, "You don't have the dexterity to do this!")
+ return
+
+ //get the user's location
+ if(!isturf(user.loc))
+ return //can't do this stuff whilst inside objects and such
+
+ add_fingerprint(user)
+
+ var/turf/T = user.loc //get user's location for delay checks
+
+ attack_override(W,user,T)
+ return ..()
+
+/turf/closed/proc/attack_override(obj/item/W, mob/user, turf/loc)
+ //the istype cascade has been spread among various procs for easy overriding or if we want to call something specific
+ if(try_decon(W, user, loc) || try_destroy(W, user, loc))
+ return
+
+// catch-all for using most items on the closed turf -- attempt to smash
+/turf/closed/proc/try_destroy(obj/item/W, mob/user, turf/T)
+ var/dam = get_item_damage(W)
+ user.do_attack_animation(src)
+ if(!dam)
+ to_chat(user, "[W] isn't strong enough to damage [src]!")
+ playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
+ return TRUE
+ log_combat(user, src, "attacked", W)
+ user.visible_message("[user] hits [src] with [W]!", \
+ "You hit [src] with [W]!", null, COMBAT_MESSAGE_RANGE)
+ switch(W.damtype)
+ if(BRUTE)
+ playsound(src,attack_hitsound, 100, TRUE)
+ if(BURN)
+ playsound(src, 'sound/items/welder.ogg', 100, TRUE)
+ add_dent(WALL_DENT_HIT)
+ alter_integrity(-dam, user)
+ return TRUE
+/turf/closed/proc/try_decon(obj/item/I, mob/user, turf/T)
+ if(I.tool_behaviour == TOOL_WELDER)
+ if(!I.tool_start_check(user, amount=0))
+ return FALSE
-/turf/closed/indestructible/opsglass
- name = "window"
- icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
- icon_state = "plastitanium_window-0"
- base_icon_state = "plastitanium_window"
- opacity = FALSE
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
- canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
+ to_chat(user, "You begin slicing through the outer plating...")
+ while(I.use_tool(src, user, breakdown_duration, volume=50))
+ if(iswallturf(src))
+ to_chat(user, "You slice through some of the outer plating...")
+ alter_integrity(-(I.wall_decon_damage),user,FALSE,TRUE)
-/turf/closed/indestructible/opsglass/Initialize()
- . = ..()
- icon_state = null
- underlays += mutable_appearance('icons/obj/structures.dmi', "grille")
- underlays += mutable_appearance('icons/turf/floors.dmi', "plating")
-
-/turf/closed/indestructible/fakedoor
- name = "CentCom Access"
- icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
- icon_state = "fakedoor"
-
-/turf/closed/indestructible/rock
- name = "dense rock"
- desc = "An extremely densely-packed rock, most mining tools or explosives would never get through this."
- icon = 'icons/turf/walls/rock_wall.dmi'
- icon_state = "rock_wall-0"
- base_icon_state = "rock_wall"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER | SMOOTH_CONNECTORS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
- no_connector_typecache = list(/turf/closed/mineral, /turf/closed/indestructible/rock)
- connector_icon = 'icons/turf/connectors/smoothrocks_connector.dmi'
- connector_icon_state = "smoothrocks_connector"
- pixel_x = -4
- pixel_y = -4
-
-/turf/closed/indestructible/rock/snow
- name = "mountainside"
- desc = "Extremely densely-packed sheets of ice and rock, forged over the years of the harsh cold."
- icon = 'icons/turf/walls/icerock_wall.dmi'
- icon_state = "icerock_wall-0"
- base_icon_state = "icerock_wall"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
- pixel_x = -4
- pixel_y = -4
- bullet_sizzle = TRUE
- bullet_bounce_sound = null
-
-/turf/closed/indestructible/rock/schist
- name = "schist"
- desc = "Extremely densely-packed layers of schist. Say it ten times fast."
- icon = 'icons/turf/walls/rockwall_icemoon.dmi'
- icon_state = "rockwall_icemoon-0"
- base_icon_state = "rockwall_icemoon"
-
-/turf/closed/indestructible/paper
- name = "thick paper wall"
- desc = "A wall layered with impenetrable sheets of paper."
- icon = 'icons/turf/walls.dmi'
- icon_state = "paperwall"
-
-/turf/closed/indestructible/necropolis
- name = "necropolis wall"
- desc = "A seemingly impenetrable wall."
- icon = 'icons/turf/walls.dmi'
- icon_state = "necro"
- explosion_block = 50
- baseturfs = /turf/closed/indestructible/necropolis
-
-/turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/floors.dmi'
- underlay_appearance.icon_state = "necro1"
- return TRUE
+ return FALSE
-/turf/closed/indestructible/riveted/boss
- name = "thick stone wall"
- desc = "A thick, seemingly indestructible stone wall."
- icon = 'icons/turf/walls/boss_wall.dmi'
- icon_state = "boss_wall-0"
- base_icon_state = "boss_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_BOSS_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BOSS_WALLS)
- explosion_block = 50
- baseturfs = /turf/closed/indestructible/riveted/boss
-
-/turf/closed/indestructible/riveted/boss/see_through
- opacity = FALSE
-
-/turf/closed/indestructible/riveted/boss/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/floors.dmi'
- underlay_appearance.icon_state = "basalt"
+/turf/closed/mech_melee_attack(obj/mecha/M)
+ M.do_attack_animation(src)
+ switch(M.damtype)
+ if(BRUTE)
+ playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
+ if(BURN)
+ playsound(src, 'sound/items/welder.ogg', 100, TRUE)
+ if(TOX)
+ playsound(src, 'sound/effects/spray2.ogg', 100, TRUE)
+
+
+ if(prob(hardness + M.force) && M.force > 20)
+ M.visible_message("[M.name] hits [src] with great force!", \
+ "You hit [src] with incredible force!", null, COMBAT_MESSAGE_RANGE)
+ dismantle_wall(TRUE)
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
+ else
+ M.visible_message("[M.name] hits [src]!", \
+ "You hit [src]!", null, COMBAT_MESSAGE_RANGE)
+ alter_integrity(M.force * 20)
+
+/turf/closed/attack_hulk(mob/living/carbon/user)
+ ..()
+ var/obj/item/bodypart/arm = user.hand_bodyparts[user.active_hand_index]
+ if(!arm || arm.bodypart_disabled)
+ return
+ alter_integrity(-250,user)
+ user.visible_message("[user] smashes \the [src]!", \
+ "You smash \the [src]!", \
+ "You hear a booming smash!")
return TRUE
-/turf/closed/indestructible/riveted/hierophant
- name = "wall"
- desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern."
- icon = 'icons/turf/walls/hierophant_wall.dmi'
- icon_state = "wall"
- smoothing_flags = SMOOTH_CORNERS
- smoothing_groups = list(SMOOTH_GROUP_HIERO_WALL)
- canSmoothWith = list(SMOOTH_GROUP_HIERO_WALL)
-
-/turf/closed/indestructible/blank
- name = "space"
- desc = "It's the end of the world every day, for someone."
- icon = 'icons/turf/space.dmi'
- icon_state = "black"
- explosion_block = 1000 // fuck it, let's go higher
+/turf/closed/attack_animal(mob/living/simple_animal/M)
+ M.changeNext_move(CLICK_CD_MELEE)
+ M.do_attack_animation(src)
+ if((M.environment_smash & mob_smash_flags))
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
+ alter_integrity(-400)
+ return
diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm
new file mode 100644
index 000000000000..5c3b554c98dd
--- /dev/null
+++ b/code/game/turfs/closed/indestructible.dm
@@ -0,0 +1,308 @@
+/turf/closed/indestructible
+ name = "wall"
+ desc = "Effectively impervious to conventional methods of destruction."
+ icon = 'icons/turf/walls.dmi'
+ explosion_block = 50
+ max_integrity = 10000000
+
+/turf/closed/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE)
+ return
+
+/turf/closed/indestructible/acid_act(acidpwr, acid_volume, acid_id)
+ return 0
+
+/turf/closed/indestructible/ex_act(severity, target)
+ return
+
+/turf/closed/indestructible/alter_integrity(damage, mob/user, devastate, safe_decon)
+ return FALSE
+
+/turf/closed/indestructible/set_integrity(amount, devastate, mob/user)
+ return
+
+/turf/closed/indestructible/dismantle_wall(devastate, mob/user)
+ return
+
+/turf/closed/indestructible/try_decon(obj/item/I, mob/user, turf/T)
+ return FALSE
+
+/turf/closed/indestructible/try_destroy(obj/item/W, mob/user, turf/T)
+ user.do_attack_animation(src)
+ to_chat(user, "[W] isn't strong enough to damage [src]!")
+ playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
+ return TRUE
+
+/turf/closed/indestructible/mech_melee_attack(obj/mecha/M)
+ M.do_attack_animation(src)
+ switch(M.damtype)
+ if(BRUTE)
+ playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
+ if(BURN)
+ playsound(src, 'sound/items/welder.ogg', 100, TRUE)
+ if(TOX)
+ playsound(src, 'sound/effects/spray2.ogg', 100, TRUE)
+ M.visible_message("[M.name] hits [src] and doesn't even leave a mark!", \
+ "You hit [src] and fail to damage it.", null, COMBAT_MESSAGE_RANGE)
+
+/turf/closed/indestructible/attack_hulk(mob/living/carbon/user)
+ return FALSE
+
+/turf/closed/indestructible/attack_animal(mob/living/simple_animal/M)
+ M.changeNext_move(CLICK_CD_MELEE)
+ M.do_attack_animation(src)
+ return
+
+/turf/closed/indestructible/Melt()
+ to_be_destroyed = FALSE
+ return src
+
+/turf/closed/indestructible/singularity_act()
+ return
+
+/turf/closed/indestructible/sandstone
+ name = "sandstone wall"
+ desc = "A wall with sandstone plating. Rough."
+ icon = 'icons/turf/walls/sandstone_wall.dmi'
+ icon_state = "sandstone_wall-0"
+ base_icon_state = "sandstone_wall"
+ baseturfs = /turf/closed/indestructible/sandstone
+ smoothing_flags = SMOOTH_BITMASK
+
+/turf/closed/indestructible/splashscreen
+ name = "Space Station 13"
+ icon = 'icons/blank_title.png'
+ icon_state = ""
+ layer = SPLASHSCREEN_LAYER
+ plane = SPLASHSCREEN_PLANE
+ bullet_bounce_sound = null
+
+/turf/closed/indestructible/splashscreen/New()
+ SStitle.splash_turf = src
+ if(SStitle.icon)
+ icon = SStitle.icon
+ ..()
+
+/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value)
+ . = ..()
+ if(.)
+ switch(var_name)
+ if(NAMEOF(src, icon))
+ SStitle.icon = icon
+
+
+/turf/closed/indestructible/reinforced
+ name = "reinforced wall"
+ desc = "A huge chunk of reinforced metal used to separate rooms. Effectively impervious to conventional methods of destruction."
+ icon = 'icons/turf/walls/rwalls/reinforced_wall.dmi'
+ icon_state = "reinforced_wall-0"
+ base_icon_state = "reinforced_wall"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK)
+
+/turf/closed/indestructible/titanium
+ name = "wall"
+ desc = "A light-weight titanium wall used in shuttles. Effectively impervious to conventional methods of destruction."
+ icon = 'icons/turf/walls/shuttle_wall.dmi'
+ icon_state = "shuttle_wall-0"
+ base_icon_state = "shuttle_wall"
+ flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD
+ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE)
+
+/turf/closed/indestructible/riveted
+ icon = 'icons/turf/walls/riveted.dmi'
+ icon_state = "riveted-0"
+ base_icon_state = "riveted"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS)
+ canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
+
+/turf/closed/indestructible/syndicate
+ icon = 'icons/turf/walls/plastitanium_wall.dmi'
+ icon_state = "plastitanium_wall-0"
+ base_icon_state = "plastitanium_wall"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
+
+/turf/closed/indestructible/riveted/uranium
+ icon = 'icons/turf/walls/uranium_wall.dmi'
+ icon_state = "uranium_wall-0"
+ base_icon_state = "uranium_wall"
+ smoothing_flags = SMOOTH_BITMASK
+
+/turf/closed/indestructible/riveted/plastinum
+ name = "plastinum wall"
+ desc = "A luxurious wall made out of a plasma-platinum alloy. Effectively impervious to conventional methods of destruction."
+ icon = 'icons/turf/walls/plastinum_wall.dmi'
+ icon_state = "plastinum_wall-0"
+ base_icon_state = "plastinum_wall"
+ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
+
+/turf/closed/indestructible/wood
+ icon = 'icons/turf/walls/wood_wall.dmi'
+ icon_state = "wood_wall-0"
+ base_icon_state = "wood_wall"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK)
+
+
+/turf/closed/indestructible/alien
+ name = "alien wall"
+ desc = "A wall with alien alloy plating."
+ icon = 'icons/turf/walls/abductor_wall.dmi'
+ icon_state = "abductor_wall-0"
+ base_icon_state = "abductor_wall"
+ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS)
+
+
+/turf/closed/indestructible/cult
+ name = "runed metal wall"
+ desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound. Effectively impervious to conventional methods of destruction."
+ icon = 'icons/turf/walls/cult_wall.dmi'
+ icon_state = "cult_wall-0"
+ base_icon_state = "cult_wall"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_WALLS)
+
+
+/turf/closed/indestructible/abductor
+ icon_state = "alien1"
+
+/turf/closed/indestructible/opshuttle
+ icon_state = "wall3"
+
+
+/turf/closed/indestructible/fakeglass
+ name = "window"
+ icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
+ icon_state = "fake_window"
+ base_icon_state = "reinforced_window"
+ opacity = FALSE
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
+
+/turf/closed/indestructible/fakeglass/Initialize(mapload, inherited_virtual_z)
+ . = ..()
+ underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay
+ underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille
+
+
+/turf/closed/indestructible/opsglass
+ name = "window"
+ icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
+ icon_state = "plastitanium_window-0"
+ base_icon_state = "plastitanium_window"
+ opacity = FALSE
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
+ canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM)
+
+/turf/closed/indestructible/opsglass/Initialize()
+ . = ..()
+ icon_state = null
+ underlays += mutable_appearance('icons/obj/structures.dmi', "grille")
+ underlays += mutable_appearance('icons/turf/floors.dmi', "plating")
+
+/turf/closed/indestructible/fakedoor
+ name = "CentCom Access"
+ icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
+ icon_state = "fakedoor"
+
+/turf/closed/indestructible/rock
+ name = "dense rock"
+ desc = "An extremely densely-packed rock, most mining tools or explosives would never get through this."
+ icon = 'icons/turf/walls/rock_wall.dmi'
+ icon_state = "rock_wall-0"
+ base_icon_state = "rock_wall"
+ smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER | SMOOTH_CONNECTORS
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
+ no_connector_typecache = list(/turf/closed/mineral, /turf/closed/indestructible/rock)
+ connector_icon = 'icons/turf/connectors/smoothrocks_connector.dmi'
+ connector_icon_state = "smoothrocks_connector"
+ pixel_x = -4
+ pixel_y = -4
+
+/turf/closed/indestructible/rock/snow
+ name = "mountainside"
+ desc = "Extremely densely-packed sheets of ice and rock, forged over the years of the harsh cold."
+ icon = 'icons/turf/walls/icerock_wall.dmi'
+ icon_state = "icerock_wall-0"
+ base_icon_state = "icerock_wall"
+ smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
+ pixel_x = -4
+ pixel_y = -4
+ bullet_sizzle = TRUE
+ bullet_bounce_sound = null
+
+/turf/closed/indestructible/rock/schist
+ name = "schist"
+ desc = "Extremely densely-packed layers of schist. Say it ten times fast."
+ icon = 'icons/turf/walls/rockwall_icemoon.dmi'
+ icon_state = "rockwall_icemoon-0"
+ base_icon_state = "rockwall_icemoon"
+
+/turf/closed/indestructible/paper
+ name = "thick paper wall"
+ desc = "A wall layered with impenetrable sheets of paper."
+ icon = 'icons/turf/walls.dmi'
+ icon_state = "paperwall"
+
+/turf/closed/indestructible/necropolis
+ name = "necropolis wall"
+ desc = "A seemingly impenetrable wall."
+ icon = 'icons/turf/walls.dmi'
+ icon_state = "necro"
+ explosion_block = 50
+ baseturfs = /turf/closed/indestructible/necropolis
+
+/turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
+ underlay_appearance.icon = 'icons/turf/floors.dmi'
+ underlay_appearance.icon_state = "necro1"
+ return TRUE
+
+/turf/closed/indestructible/riveted/boss
+ name = "thick stone wall"
+ desc = "A thick, seemingly indestructible stone wall."
+ icon = 'icons/turf/walls/boss_wall.dmi'
+ icon_state = "boss_wall-0"
+ base_icon_state = "boss_wall"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_BOSS_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_BOSS_WALLS)
+ explosion_block = 50
+ baseturfs = /turf/closed/indestructible/riveted/boss
+
+/turf/closed/indestructible/riveted/boss/see_through
+ opacity = FALSE
+
+/turf/closed/indestructible/riveted/boss/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
+ underlay_appearance.icon = 'icons/turf/floors.dmi'
+ underlay_appearance.icon_state = "basalt"
+ return TRUE
+
+/turf/closed/indestructible/riveted/hierophant
+ name = "wall"
+ desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern."
+ icon = 'icons/turf/walls/hierophant_wall.dmi'
+ icon_state = "wall"
+ smoothing_flags = SMOOTH_CORNERS
+ smoothing_groups = list(SMOOTH_GROUP_HIERO_WALL)
+ canSmoothWith = list(SMOOTH_GROUP_HIERO_WALL)
+
+/turf/closed/indestructible/blank
+ name = "space"
+ desc = "It's the end of the world every day, for someone."
+ icon = 'icons/turf/space.dmi'
+ icon_state = "black"
+ explosion_block = 1000 // fuck it, let's go higher
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 33fcf315fc52..0d9b3205cc27 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -30,8 +30,20 @@
var/x_offset = -4
var/y_offset = -4
+ attack_hitsound = 'sound/effects/break_stone.ogg'
+ break_sound = 'sound/effects/break_stone.ogg'
hitsound_type = PROJECTILE_HITSOUND_STONE
+ min_dam = 5
+ max_integrity = MINERAL_WALL_INTEGRITY
+ brute_mod = 1
+ burn_mod = 1
+
+ mob_smash_flags = ENVIRONMENT_SMASH_MINERALS
+ proj_bonus_damage_flags = PROJECTILE_BONUS_DAMAGE_MINERALS
+
+ overlay_layer = ON_EDGED_TURF_LAYER
+
/turf/closed/mineral/Initialize(mapload, inherited_virtual_z)
. = ..()
if(has_borders)
@@ -66,33 +78,38 @@
return TRUE
return ..()
-
-/turf/closed/mineral/attackby(obj/item/I, mob/user, params)
- if (!user.IsAdvancedToolUser())
- to_chat(usr, "You don't have the dexterity to do this!")
- return
-
+/turf/closed/mineral/try_decon(obj/item/I, mob/user, turf/T)
if(I.tool_behaviour == TOOL_MINING)
- var/turf/T = user.loc
- if (!isturf(T))
- return
+ if(!I.tool_start_check(user, amount=0))
+ return FALSE
- if(last_act + (40 * I.toolspeed) > world.time)//prevents message spam
- return
- last_act = world.time
- balloon_alert(user, "digging...")
-
- if(I.use_tool(src, user, 40, volume=50))
+ to_chat(user, "You begin breaking through the rock...")
+ while(I.use_tool(src, user, breakdown_duration, volume=50))
if(ismineralturf(src))
- gets_drilled(user, TRUE)
+ to_chat(user, "You break through some of the stone...")
SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
+ alter_integrity(-(I.wall_decon_damage),user,FALSE,TRUE)
+
+ return FALSE
+
+/turf/closed/mineral/dismantle_wall(devastate = FALSE,mob/user)
+ var/slagged = 0
+ if(devastate == TRUE)
+ slagged = 100
+ if(ismineralturf(src))
+ gets_drilled(user, TRUE, slagged)
else
- return attack_hand(user)
+ return FALSE
-/turf/closed/mineral/proc/gets_drilled(user, give_exp = FALSE)
+/turf/closed/mineral/proc/gets_drilled(user, give_exp = FALSE, slag_chance = 0)
if (mineralType && (mineralAmt > 0))
- new mineralType(src, mineralAmt)
- SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType)
+ //oops, you ruined the ore
+ if(prob(slag_chance))
+ new /obj/item/stack/ore/slag(src,mineralAmt)
+ visible_message(span_warning("The ore was completely ruined!"))
+ else
+ new mineralType(src, mineralAmt)
+ SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(give_exp)
@@ -106,9 +123,10 @@
var/flags = NONE
if(defer_change) // TODO: make the defer change var a var for any changeturf flag
flags = CHANGETURF_DEFER_CHANGE
+ playsound(src, break_sound, 50, TRUE) //beautiful destruction
ScrapeAway(null, flags)
addtimer(CALLBACK(src, PROC_REF(AfterChange)), 1, TIMER_UNIQUE)
- playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
+
/turf/closed/mineral/attack_animal(mob/living/simple_animal/user)
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS) || (user.environment_smash & ENVIRONMENT_SMASH_MINERALS))
@@ -128,7 +146,10 @@
var/mob/living/carbon/human/H = AM
var/obj/item/I = H.is_holding_tool_quality(TOOL_MINING)
if(I)
- attackby(I, H)
+ if(last_act + (40 * I.toolspeed) > world.time)//prevents message spam
+ return
+ last_act = world.time
+ try_decon(I, H)
return
else if(iscyborg(AM))
var/mob/living/silicon/robot/R = AM
diff --git a/code/game/turfs/closed/wall/conc_walls.dm b/code/game/turfs/closed/wall/conc_walls.dm
index 6f0487ff39b7..aa5845b1144b 100644
--- a/code/game/turfs/closed/wall/conc_walls.dm
+++ b/code/game/turfs/closed/wall/conc_walls.dm
@@ -11,34 +11,26 @@
hardness = 30 // doesn't matter much; everything that uses it gets overridden
explosion_block = 3
break_sound = 'sound/effects/break_stone.ogg'
+ attack_hitsound = 'sound/effects/hit_stone.ogg'
+ hitsound_type = PROJECTILE_HITSOUND_STONE
sheet_type = null
girder_type = /obj/structure/grille
- // The wall will ignore damage from weak items, depending on their
- // force, damage type, tool behavior, and sharpness. This is the minimum
- // amount of force that a blunt, brute item must have to damage the wall.
- var/min_dam = 8
- // This should all be handled by integrity should that ever be expanded to walls.
- var/max_health = 650
- var/health
- // used to give mining projectiles a bit of an edge against conc walls
- var/static/list/extra_dam_proj = typecacheof(list(
- /obj/projectile/kinetic,
- /obj/projectile/destabilizer,
- /obj/projectile/plasma
- ))
-
var/time_to_harden = 30 SECONDS
// fraction ranging from 0 to 1 -- 0 is fully soft, 1 is fully hardened
// don't change this in subtypes unless you want them to spawn in soft on maps
var/harden_lvl = 1
- var/mutable_appearance/crack_overlay
+ burn_mod = 0.66
+ repair_amount = 0
+ //mining projectiles do extra damage
+ extra_dam_proj = list(
+ /obj/projectile/kinetic,
+ /obj/projectile/destabilizer,
+ /obj/projectile/plasma)
/turf/closed/wall/concrete/Initialize(mapload, ...)
. = ..()
- if(health == null)
- health = max_health
check_harden()
update_stats()
@@ -46,9 +38,9 @@
. = ..()
// by this point it's guaranteed to be a concrete wall
var/turf/closed/wall/concrete/conc_wall = T
- if(conc_wall.health != health || conc_wall.harden_lvl != harden_lvl)
+ if(conc_wall.integrity != integrity || conc_wall.harden_lvl != harden_lvl)
conc_wall.harden_lvl = harden_lvl
- conc_wall.health = health
+ conc_wall.integrity = integrity
// very much not a fan of all the repetition here,
// but there's unfortunately no easy way around it
conc_wall.check_harden()
@@ -68,17 +60,7 @@
add_filter("harden", 1, color_matrix_filter(col_filter, FILTER_COLOR_RGB))
return
-/turf/closed/wall/concrete/update_overlays()
- . = ..()
- var/adj_dam_pct = 1 - (health/(max_health*0.7))
- if(adj_dam_pct <= 0)
- return
- if(!crack_overlay)
- crack_overlay = mutable_appearance('icons/effects/concrete_damage.dmi', "cracks", BULLET_HOLE_LAYER)
- crack_overlay.alpha = adj_dam_pct*255
- . += crack_overlay
-
-// we use this to show health + drying percentage
+// we use this to show integrity + drying percentage
/turf/closed/wall/concrete/deconstruction_hints(mob/user)
. = list()
. += "[p_they(TRUE)] look[p_s()] like you could smash [p_them()]."
@@ -89,19 +71,12 @@
. += "[p_they(TRUE)] look[p_s()] a little wet."
if(0 to 0.4)
. += "[p_they(TRUE)] look[p_s()] freshly poured."
- switch(health / max_health)
- if(0.5 to 0.99)
- . += "[p_they(TRUE)] look[p_s()] slightly damaged."
- if(0.25 to 0.5)
- . += "[p_they(TRUE)] appear[p_s()] heavily damaged."
- if(0 to 0.25)
- . += "[p_theyre(TRUE)] falling apart!"
return
/turf/closed/wall/concrete/create_girder()
var/obj/girder = ..()
- if(health < 0)
- girder.take_damage(min(abs(health), 50))
+ if(integrity < 0)
+ girder.take_damage(min(abs(integrity), 50))
return girder
/turf/closed/wall/concrete/proc/check_harden()
@@ -115,66 +90,16 @@
STOP_PROCESSING(SSobj, src)
update_stats()
-/turf/closed/wall/concrete/proc/update_stats()
+/turf/closed/wall/concrete/update_stats()
+ .= .. ()
// explosion block is diminished on a damaged / soft wall
- explosion_block = (health / max_health) * harden_lvl * initial(explosion_block)
- update_appearance()
+ explosion_block = (integrity / max_integrity) * harden_lvl * initial(explosion_block)
-/turf/closed/wall/concrete/proc/alter_health(delta)
+/turf/closed/wall/concrete/alter_integrity(damage)
// 8x as vulnerable when unhardened
- if(delta < 0)
- delta *= 1 + 7*(1-harden_lvl)
- health += delta
- if(health <= 0)
- // if damage put us 50 points or more below 0, we got proper demolished
- dismantle_wall(health <= -50 ? TRUE : FALSE)
- return FALSE
- health = min(health, max_health)
- update_stats()
- return health
-
-/turf/closed/wall/concrete/ex_act(severity, target)
- if(target == src || !density)
- return ..()
- switch(severity)
- if(EXPLODE_DEVASTATE)
- alter_health(-2000)
- if(EXPLODE_HEAVY)
- alter_health(rand(-500, -800))
- if(EXPLODE_LIGHT)
- alter_health(rand(-200, -700))
-
-/turf/closed/wall/concrete/bullet_act(obj/projectile/P)
- . = ..()
- var/dam = get_proj_damage(P)
- if(!dam)
- return
- if(P.suppressed != SUPPRESSED_VERY)
- visible_message("[src] is hit by \a [P]!", null, null, COMBAT_MESSAGE_RANGE)
- if(!QDELETED(src))
- alter_health(-dam)
-
-/turf/closed/wall/concrete/attack_animal(mob/living/simple_animal/M)
- M.changeNext_move(CLICK_CD_MELEE)
- M.do_attack_animation(src)
- if((M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- alter_health(-400)
- return
-
-/turf/closed/wall/concrete/attack_hulk(mob/living/carbon/user)
- SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user)
- log_combat(user, src, "attacked")
- var/obj/item/bodypart/arm = user.hand_bodyparts[user.active_hand_index]
- if(!arm || arm.bodypart_disabled)
- return FALSE
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- user.visible_message("[user] smashes \the [src]!", \
- "You smash \the [src]!", \
- "You hear a booming smash!")
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
- alter_health(-250)
- return TRUE
+ if(damage < 0)
+ damage *= 1 + 7*(1-harden_lvl)
+ .= ..()
/turf/closed/wall/concrete/mech_melee_attack(obj/mecha/M)
M.do_attack_animation(src)
@@ -184,7 +109,7 @@
"You hit [src]!", null, COMBAT_MESSAGE_RANGE)
playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- alter_health(M.force * -20)
+ alter_integrity(M.force * -20)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, TRUE)
if(TOX)
@@ -198,60 +123,14 @@
/turf/closed/wall/concrete/try_decon(obj/item/W, mob/user, turf/T)
return null
-// catch-all for using most items on the wall -- attempt to smash
-/turf/closed/wall/concrete/try_destroy(obj/item/W, mob/user, turf/T)
- var/dam = get_item_damage(W)
- user.do_attack_animation(src)
- if(!dam)
- to_chat(user, "[W] isn't strong enough to damage [src]!")
- playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
- return TRUE
- log_combat(user, src, "attacked", W)
- user.visible_message("[user] hits [src] with [W]!", \
- "You hit [src] with [W]!", null, COMBAT_MESSAGE_RANGE)
- switch(W.damtype)
- if(BRUTE)
- playsound(src, 'sound/effects/hit_stone.ogg', 50, TRUE)
- if(BURN)
- playsound(src, 'sound/items/welder.ogg', 100, TRUE)
- alter_health(-dam)
- return TRUE
+/turf/closed/wall/concrete/get_item_damage(obj/item/I, t_min = min_dam)
+ t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable
+ . = .. ()
-/turf/closed/wall/concrete/proc/get_item_damage(obj/item/I)
- var/dam = I.force
- if(istype(I, /obj/item/clothing/gloves/gauntlets))
- dam = 20
- else if(I.tool_behaviour == TOOL_MINING)
- dam *= (4/3)
- else
- switch(I.damtype)
- if(BRUTE)
- if(I.get_sharpness())
- dam *= 2/3
- if(BURN)
- dam *= 2/3
- else
- return 0
- var/t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable
- // if dam is below t_min, then the hit has no effect
- return (dam < t_min ? 0 : dam)
-/turf/closed/wall/concrete/proc/get_proj_damage(obj/projectile/P)
- var/dam = P.damage
- // mining projectiles have an edge
- if(is_type_in_typecache(P, extra_dam_proj))
- dam = max(dam, 30)
- else
- switch(P.damage_type)
- if(BRUTE)
- dam *= 1
- if(BURN)
- dam *= 2/3
- else
- return 0
- var/t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable
- // if dam is below t_min, then the hit has no effect
- return (dam < t_min ? 0 : dam)
+/turf/closed/wall/concrete/get_proj_damage(obj/projectile/P, t_min = min_dam)
+ t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable
+ . = ..()
/turf/closed/wall/concrete/reinforced
name = "hexacrete wall"
@@ -266,7 +145,7 @@
girder_type = /obj/structure/girder
min_dam = 13
- max_health = 1300
+ max_integrity = 1300
time_to_harden = 60 SECONDS
// requires ENVIRONMENT_SMASH_RWALLS for simplemobs to break
@@ -276,7 +155,7 @@
if(!M.environment_smash)
return
if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS)
- alter_health(-600) // 3 hits to kill
+ alter_integrity(-600) // 3 hits to kill
playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
else
playsound(src, 'sound/effects/bang.ogg', 50, TRUE)
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index 53dbb9479f3b..04d4bc7895d6 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -23,6 +23,8 @@
connector_icon = 'icons/turf/connectors/gold_wall_connector.dmi'
connector_icon_state = "gold_wall_connector"
no_connector_typecache = list(/turf/closed/wall/mineral/gold, /obj/structure/falsewall/gold)
+ max_integrity = 150
+ brute_mod = 1.5
/turf/closed/wall/mineral/gold/yesdiag
icon_state = "gold_wall-255"
@@ -41,6 +43,8 @@
connector_icon = 'icons/turf/connectors/silver_wall_connector.dmi'
connector_icon_state = "silver_wall_connector"
no_connector_typecache = list(/turf/closed/wall/mineral/silver, /obj/structure/falsewall/silver)
+ max_integrity = 150
+ brute_mod = 1.5
/turf/closed/wall/mineral/silver/yesdiag
icon_state = "silver_wall-255"
@@ -53,7 +57,7 @@
icon_state = "diamond_wall-0"
base_icon_state = "diamond_wall"
sheet_type = /obj/item/stack/sheet/mineral/diamond
- slicing_duration = 200 //diamond wall takes twice as much time to slice
+ breakdown_duration = 50
explosion_block = 3
smoothing_flags = SMOOTH_BITMASK | SMOOTH_CONNECTORS
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_DIAMOND_WALLS)
@@ -63,6 +67,7 @@
no_connector_typecache = list(/turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond)
hitsound_type = PROJECTILE_HITSOUND_GLASS
+ max_integrity = 800
/turf/closed/wall/mineral/diamond/yesdiag
icon_state = "diamond_wall-255"
@@ -84,6 +89,8 @@
no_connector_typecache = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone)
hitsound_type = PROJECTILE_HITSOUND_NON_LIVING
+ max_integrity = 150
+ min_dam = 5
/turf/closed/wall/mineral/sandstone/yesdiag
icon_state = "sandstone_wall-255"
@@ -103,6 +110,7 @@
connector_icon = 'icons/turf/connectors/uranium_wall_connector.dmi'
connector_icon_state = "uranium_wall_connector"
no_connector_typecache = list(/turf/closed/wall/mineral/uranium, /obj/structure/falsewall/uranium)
+ max_integrity = 600
/turf/closed/wall/mineral/uranium/yesdiag
icon_state = "uranium_wall-255"
@@ -170,6 +178,8 @@
no_connector_typecache = list(/turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma)
hitsound_type = PROJECTILE_HITSOUND_GLASS
+ max_integrity = 300
+ burn_mod = 3
/turf/closed/wall/mineral/plasma/yesdiag
icon_state = "plasma_wall-255"
@@ -221,6 +231,9 @@
no_connector_typecache = list(/turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood)
hitsound_type = PROJECTILE_HITSOUND_WOOD
+ max_integrity = 75
+ burn_mod = 3
+ min_dam = 3
/turf/closed/wall/mineral/wood/yesdiag
icon_state = "wood_wall-255"
@@ -260,6 +273,8 @@
connector_icon_state = "iron_wall_connector"
no_connector_typecache = list(/turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron)
+ max_integrity = 300
+
/turf/closed/wall/mineral/iron/yesdiag
icon_state = "iron_wall-255"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
@@ -278,7 +293,7 @@
no_connector_typecache = list(/turf/closed/wall/mineral/snow)
hardness = 80
explosion_block = 0
- slicing_duration = 30
+ breakdown_duration = 30
sheet_type = /obj/item/stack/sheet/mineral/snow
canSmoothWith = null
girder_type = null
@@ -287,6 +302,11 @@
hitsound_type = PROJECTILE_HITSOUND_SNOW
+ max_integrity = 50
+ burn_mod = 3
+ brute_mod = 1.5
+ min_dam = 1
+
/turf/closed/wall/mineral/snow/yesdiag
icon_state = "snow_wall-255"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
@@ -298,12 +318,14 @@
icon_state = "abductor_wall-0"
base_icon_state = "abductor_wall"
sheet_type = /obj/item/stack/sheet/mineral/abductor
- slicing_duration = 200 //alien wall takes twice as much time to slice
+ breakdown_duration = 100 //alien wall takes twice as much time to slice
explosion_block = 3
smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS,SMOOTH_GROUP_AIRLOCK)
+ max_integrity = 1000
+
/////////////////////Titanium walls/////////////////////
/turf/closed/wall/mineral/titanium //has to use this path due to how building walls works
@@ -322,6 +344,8 @@
hitsound_type = PROJECTILE_HITSOUND_NON_LIVING
+ max_integrity = 450
+
/turf/closed/wall/mineral/titanium/exterior
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS_EXTERIOR)
canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS_EXTERIOR, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE)
@@ -400,6 +424,8 @@
hitsound_type = PROJECTILE_HITSOUND_NON_LIVING
+ max_integrity = 500
+
/turf/closed/wall/mineral/plastitanium/nodiagonal
icon = 'icons/turf/walls/plastitanium_wall.dmi'
icon_state = "map-shuttle_nd"
diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm
index 7fbcab55504a..b674e25fc8f8 100644
--- a/code/game/turfs/closed/wall/misc_walls.dm
+++ b/code/game/turfs/closed/wall/misc_walls.dm
@@ -10,6 +10,8 @@
sheet_amount = 1
girder_type = /obj/structure/girder/cult
+ max_integrity = 600
+
/turf/closed/wall/mineral/cult/Initialize(mapload, inherited_virtual_z)
new /obj/effect/temp_visual/cult/turf(src)
. = ..()
@@ -47,8 +49,9 @@
smoothing_flags = SMOOTH_BITMASK
canSmoothWith = null
hardness = 35
- slicing_duration = 150 //welding through the ice+metal
+ breakdown_duration = 40
bullet_sizzle = TRUE
+ burn_mod = 2
/turf/closed/wall/rust
name = "rusted wall"
@@ -58,6 +61,8 @@
base_icon_state = "rusty_wall"
smoothing_flags = SMOOTH_BITMASK
hardness = 45
+ max_integrity = 300
+ min_dam = 5
/turf/closed/wall/rust/yesdiag
icon_state = "rusty_wall-255"
@@ -71,6 +76,8 @@
base_icon_state = "rusty_reinforced_wall"
smoothing_flags = SMOOTH_BITMASK
hardness = 15
+ integrity = 1000
+ min_dam = 5
/turf/closed/wall/r_wall/rust/yesdiag
icon_state = "rusty_reinforced_wall-255"
diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm
index 1bd8f6783fd5..ed2f0141eaff 100644
--- a/code/game/turfs/closed/wall/reinf_walls.dm
+++ b/code/game/turfs/closed/wall/reinf_walls.dm
@@ -21,6 +21,11 @@
///Dismantled state, related to deconstruction.
var/d_state = INTACT
+ max_integrity = 1400
+
+ mob_smash_flags = ENVIRONMENT_SMASH_RWALLS
+ proj_bonus_damage_flags = PROJECTILE_BONUS_DAMAGE_RWALLS
+
/turf/closed/wall/r_wall/yesdiag
icon_state = "reinforced_wall-255"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
@@ -54,28 +59,37 @@
playsound(src, 'sound/effects/bang.ogg', 50, TRUE)
to_chat(M, "This wall is far too strong for you to destroy.")
-/turf/closed/wall/r_wall/try_destroy(obj/item/I, mob/user, turf/T)
- if(istype(I, /obj/item/pickaxe/drill/jackhammer))
- to_chat(user, "You begin to smash though [src]...")
- if(do_after(user, 75, target = src))
- if(!istype(src, /turf/closed/wall/r_wall))
- return TRUE
- I.play_tool_sound(src)
- visible_message("[user] smashes through [src] with [I]!", "You hear the grinding of metal.")
- dismantle_wall()
- return TRUE
- return FALSE
+/turf/closed/wall/r_wall/update_stats()
+ var/integrity_per_state = max_integrity/7
+ d_state = (7 - round(integrity/integrity_per_state))
+ .= ..()
+
+/// Calculate how much integrity the r-wall should have a a given state.
+/turf/closed/wall/r_wall/proc/get_state_integrity(state)
+ if(state > INTACT)
+ state = INTACT
+ if(state < SHEATH)
+ state = SHEATH
+ return max_integrity - ((max_integrity/7) * state)
/turf/closed/wall/r_wall/try_decon(obj/item/W, mob/user, turf/T)
//DECONSTRUCTION
+ if(istype(W,/obj/item/gun/energy/plasmacutter))
+ to_chat(user, "You begin slicing through the [src].")
+ while(W.use_tool(src,user,30,volume = 100))
+ to_chat(user, "You slice through some of the outer plating...")
+ alter_integrity(-(W.wall_decon_damage))
+ return 1
+
switch(d_state)
if(INTACT)
if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- d_state = SUPPORT_LINES
- update_appearance()
- to_chat(user, "You cut the outer grille.")
- return 1
+ if(W.use_tool(src, user, 40, volume=100))
+ W.play_tool_sound(src, 100)
+ d_state = SUPPORT_LINES
+ set_integrity(get_state_integrity(SUPPORT_LINES))
+ to_chat(user, "You cut the outer grille.")
+ return 1
if(SUPPORT_LINES)
if(W.tool_behaviour == TOOL_SCREWDRIVER)
@@ -84,16 +98,18 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_LINES)
return 1
d_state = COVER
+ set_integrity(get_state_integrity(COVER))
update_appearance()
to_chat(user, "You unsecure the support lines.")
return 1
else if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- d_state = INTACT
- update_appearance()
- to_chat(user, "You repair the outer grille.")
- return 1
+ if(W.use_tool(src, user, 40, volume=100))
+ W.play_tool_sound(src, 100)
+ d_state = INTACT
+ set_integrity(get_state_integrity(INTACT))
+ to_chat(user, "You repair the outer grille.")
+ return 1
if(COVER)
if(W.tool_behaviour == TOOL_WELDER)
@@ -104,7 +120,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER)
return 1
d_state = CUT_COVER
- update_appearance()
+ set_integrity(get_state_integrity(CUT_COVER))
to_chat(user, "You press firmly on the cover, dislodging it.")
return 1
@@ -114,7 +130,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER)
return 1
d_state = SUPPORT_LINES
- update_appearance()
+ set_integrity(get_state_integrity(SUPPORT_LINES))
to_chat(user, "The support lines have been secured.")
return 1
@@ -125,7 +141,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER)
return 1
d_state = ANCHOR_BOLTS
- update_appearance()
+ set_integrity(get_state_integrity(ANCHOR_BOLTS))
to_chat(user, "You pry off the cover.")
return 1
@@ -137,7 +153,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER)
return TRUE
d_state = COVER
- update_appearance()
+ set_integrity(get_state_integrity(COVER))
to_chat(user, "The metal cover has been welded securely to the frame.")
return 1
@@ -148,7 +164,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS)
return 1
d_state = SUPPORT_RODS
- update_appearance()
+ set_integrity(get_state_integrity(SUPPORT_RODS))
to_chat(user, "You remove the bolts anchoring the support rods.")
return 1
@@ -158,7 +174,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS)
return 1
d_state = CUT_COVER
- update_appearance()
+ set_integrity(get_state_integrity(CUT_COVER))
to_chat(user, "The metal cover has been pried back into place.")
return 1
@@ -171,7 +187,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS)
return 1
d_state = SHEATH
- update_appearance()
+ set_integrity(get_state_integrity(SHEATH))
to_chat(user, "You slice through the support rods.")
return 1
@@ -182,7 +198,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS)
return 1
d_state = ANCHOR_BOLTS
- update_appearance()
+ set_integrity(get_state_integrity(ANCHOR_BOLTS))
to_chat(user, "You tighten the bolts anchoring the support rods.")
return 1
@@ -204,7 +220,7 @@
if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH)
return TRUE
d_state = SUPPORT_RODS
- update_appearance()
+ set_integrity(get_state_integrity(SUPPORT_RODS))
to_chat(user, "You weld the support rods back together.")
return 1
return 0
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index f93faeb8297d..bed648ff592b 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -1,5 +1,3 @@
-#define MAX_DENT_DECALS 15
-
/turf/closed/wall
name = "wall"
desc = "A huge chunk of metal used to separate rooms."
@@ -19,15 +17,20 @@
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK)
canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK)
- ///lower numbers are harder. Used to determine the probability of a hulk smashing through.
- var/hardness = 40
- var/slicing_duration = 100 //default time taken to slice the wall
+ breakdown_duration = 25
var/sheet_type = /obj/item/stack/sheet/metal
var/sheet_amount = 2
var/obj/girder_type = /obj/structure/girder
- var/break_sound = 'sound/items/welder.ogg'
- var/list/dent_decals
+ min_dam = 8
+ max_integrity = 400
+ brute_mod = 1
+ burn_mod = 1
+ var/repair_amount = 50
+
+ mob_smash_flags = ENVIRONMENT_SMASH_WALLS
+ proj_bonus_damage_flags = PROJECTILE_BONUS_DAMAGE_WALLS
+
/turf/closed/wall/yesdiag
icon_state = "wall-255"
@@ -47,18 +50,6 @@
fixed_underlay = string_assoc_list(fixed_underlay)
underlays += underlay_appearance
-/turf/closed/wall/copyTurf(turf/T, copy_air, flags)
- . = ..()
- var/turf/closed/wall/wall_copy = T
- if(LAZYLEN(dent_decals))
- wall_copy.dent_decals = dent_decals.Copy()
- wall_copy.update_appearance()
-
-/turf/closed/wall/update_overlays()
- . = ..()
- for(var/decal in dent_decals)
- . += decal
-
/turf/closed/wall/examine(mob/user)
. += ..()
. += deconstruction_hints(user)
@@ -69,7 +60,7 @@
/turf/closed/wall/attack_tk()
return
-/turf/closed/wall/proc/dismantle_wall(devastated = FALSE)
+/turf/closed/wall/dismantle_wall(devastated = FALSE)
create_sheets()
var/obj/newgirder = create_girder()
if(devastated)
@@ -81,10 +72,7 @@
transfer_fingerprints_to(newgirder)
playsound(src, break_sound, 100, TRUE)
- for(var/obj/structure/sign/poster/P in src.contents) //Eject contents!
- P.roll_and_drop(src)
-
- ScrapeAway()
+ ..()
/turf/closed/wall/proc/create_sheets()
if(sheet_type)
@@ -96,117 +84,26 @@
return new girder_type(src)
return null
-/turf/closed/wall/ex_act(severity, target)
- if(target == src)
- dismantle_wall(devastated = TRUE)
- return
- switch(severity)
- if(EXPLODE_DEVASTATE)
- //SN src = null
- var/turf/NT = ScrapeAway()
- NT.contents_explosion(severity, target)
- return
- if(EXPLODE_HEAVY)
- if (prob(50))
- dismantle_wall(devastated = TRUE)
- else
- dismantle_wall(devastated = FALSE)
- if(EXPLODE_LIGHT)
- if (prob(hardness))
- dismantle_wall(devastated = FALSE)
- if(!density)
- ..()
-
-/turf/closed/wall/mech_melee_attack(obj/mecha/M)
- M.do_attack_animation(src)
- switch(M.damtype)
- if(BRUTE)
- playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
- M.visible_message("[M.name] hits [src]!", \
- "You hit [src]!", null, COMBAT_MESSAGE_RANGE)
- if(prob(hardness + M.force) && M.force > 20)
- dismantle_wall(devastated = TRUE)
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- else
- add_dent(WALL_DENT_HIT)
- if(BURN)
- playsound(src, 'sound/items/welder.ogg', 100, TRUE)
- if(TOX)
- playsound(src, 'sound/effects/spray2.ogg', 100, TRUE)
-
-/turf/closed/wall/attack_paw(mob/living/user)
- user.changeNext_move(CLICK_CD_MELEE)
- return attack_hand(user)
-
-
-/turf/closed/wall/attack_animal(mob/living/simple_animal/M)
- M.changeNext_move(CLICK_CD_MELEE)
- M.do_attack_animation(src)
- if((M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- dismantle_wall(devastated = TRUE)
+/turf/closed/wall/attack_override(obj/item/W, mob/user, turf/loc)
+ if(try_clean(W, user, loc) || try_wallmount(W, user, loc))
return
-
-/turf/closed/wall/attack_hulk(mob/living/carbon/user)
..()
- var/obj/item/bodypart/arm = user.hand_bodyparts[user.active_hand_index]
- if(!arm || arm.bodypart_disabled)
- return
- if(prob(hardness))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
- dismantle_wall(devastated = TRUE)
- else
- playsound(src, 'sound/effects/bang.ogg', 50, TRUE)
- add_dent(WALL_DENT_HIT)
- user.visible_message("[user] smashes \the [src]!", \
- "You smash \the [src]!", \
- "You hear a booming smash!")
- return TRUE
-
-/turf/closed/wall/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- user.changeNext_move(CLICK_CD_MELEE)
- to_chat(user, "You push the wall but nothing happens!")
- playsound(src, 'sound/weapons/genhit.ogg', 25, TRUE)
- add_fingerprint(user)
-
-/turf/closed/wall/attackby(obj/item/W, mob/user, params)
- user.changeNext_move(CLICK_CD_MELEE)
- if (!user.IsAdvancedToolUser())
- to_chat(user, "You don't have the dexterity to do this!")
- return
-
- //get the user's location
- if(!isturf(user.loc))
- return //can't do this stuff whilst inside objects and such
-
- add_fingerprint(user)
-
- var/turf/T = user.loc //get user's location for delay checks
-
- //the istype cascade has been spread among various procs for easy overriding
- if(try_clean(W, user, T) || try_wallmount(W, user, T) || try_decon(W, user, T) || try_destroy(W, user, T))
- return
-
- return ..()
/turf/closed/wall/proc/try_clean(obj/item/W, mob/user, turf/T)
- if((user.a_intent != INTENT_HELP) || !LAZYLEN(dent_decals))
+ if((user.a_intent != INTENT_HELP))
return FALSE
if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
+ if(!W.tool_start_check(user, amount=0) || (integrity >= max_integrity))
return FALSE
to_chat(user, "You begin fixing dents on the wall...")
- if(W.use_tool(src, user, 0, volume=100))
+ if(W.use_tool(src, user, breakdown_duration, volume=100))
if(iswallturf(src) && LAZYLEN(dent_decals))
to_chat(user, "You fix some dents on the wall.")
dent_decals = null
update_appearance()
+ alter_integrity(repair_amount)
return TRUE
return FALSE
@@ -225,33 +122,19 @@
return FALSE
-/turf/closed/wall/proc/try_decon(obj/item/I, mob/user, turf/T)
+/turf/closed/wall/try_decon(obj/item/I, mob/user, turf/T)
if(I.tool_behaviour == TOOL_WELDER)
if(!I.tool_start_check(user, amount=0))
return FALSE
to_chat(user, "You begin slicing through the outer plating...")
- if(I.use_tool(src, user, slicing_duration, volume=100))
+ while(I.use_tool(src, user, breakdown_duration, volume=50))
if(iswallturf(src))
- to_chat(user, "You remove the outer plating.")
- dismantle_wall()
- return TRUE
+ to_chat(user, "You slice through some of the outer plating...")
+ alter_integrity(-(I.wall_decon_damage),FALSE,TRUE)
return FALSE
-
-/turf/closed/wall/proc/try_destroy(obj/item/I, mob/user, turf/T)
- if(istype(I, /obj/item/pickaxe/drill/jackhammer))
- to_chat(user, "You begin to smash though [src]...")
- if(do_after(user, 50, target = src))
- if(!iswallturf(src))
- return TRUE
- I.play_tool_sound(src)
- visible_message("[user] smashes through [src] with [I]!", "You hear the grinding of metal.")
- dismantle_wall()
- return TRUE
- return FALSE
-
/turf/closed/wall/singularity_pull(S, current_size)
..()
wall_singularity_pull(current_size)
@@ -295,20 +178,5 @@
return TRUE
return FALSE
-/turf/closed/wall/proc/add_dent(denttype, x=rand(-8, 8), y=rand(-8, 8))
- if(LAZYLEN(dent_decals) >= MAX_DENT_DECALS)
- return
-
- var/mutable_appearance/decal = mutable_appearance('icons/effects/effects.dmi', "", BULLET_HOLE_LAYER)
- switch(denttype)
- if(WALL_DENT_SHOT)
- decal.icon_state = "bullet_hole"
- if(WALL_DENT_HIT)
- decal.icon_state = "impact[rand(1, 3)]"
- decal.pixel_x = x
- decal.pixel_y = y
- LAZYADD(dent_decals, decal)
- update_appearance()
-#undef MAX_DENT_DECALS
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index 83abc98ed990..771cc021906e 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -147,13 +147,11 @@
)
/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/cargo/blackmarket/blackmarket_items/ammo.dm b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
index 467392b1885f..a420b3d4cd90 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
@@ -219,3 +219,34 @@
stock_max = 5
availability_prob = 0
+/datum/blackmarket_item/ammo/mauler_mag
+ name = "Mauler Magazine"
+ desc = "A 12 round 9mm magazine for the Mauler Machine Pistol."
+ item = /obj/item/ammo_box/magazine/m9mm_mauler
+ price_min = 250
+ price_max = 750
+ stock_min = 3
+ stock_max = 5
+ availability_prob = 0
+
+/datum/blackmarket_item/ammo/spitter_mag
+ name = "Spitter Magazine"
+ desc = "A 30 round 9mm magazine for the Spitter submachine gun."
+ item = /obj/item/ammo_box/magazine/spitter_9mm
+
+ price_min = 250
+ price_max = 750
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 0
+
+/datum/blackmarket_item/ammo/pounder_mag
+ name = "Pounder Pan Magazine"
+ desc = "A 50 round pan magazine for the Pounder submachine gun. Heavy enough to double as an emergency melee weapon to beat off your enemies in a pinch."
+ item = /obj/item/ammo_box/magazine/c22lr_pounder_pan
+
+ price_min = 400
+ price_max = 750
+ stock = 2
+ availability_prob = 0
+
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
index 731a6a8de35f..eb16758b103b 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
@@ -293,6 +293,40 @@
stock = 2
availability_prob = 30
+/datum/blackmarket_item/weapon/mauler
+ name = "Mauler Machine Pistol"
+ desc = "This gun's got teeth! Twelve 9mm teeth to be exact. Hardly a full smile, and you'll be losing the rest pretty quick with this thing's rate of fire."
+ item = /obj/item/gun/ballistic/automatic/pistol/mauler
+ pair_item = list(/datum/blackmarket_item/ammo/mauler_mag)
+
+ price_min = 1000
+ price_max = 2000
+ stock_max = 3
+ availability_prob = 50
+
+/datum/blackmarket_item/weapon/spitter
+ name = "Spitter Submachine Gun"
+ desc = "The aptly named Spitter won't be hitting anything outside of spitting distance. Anything in that range on the otherhand? Let's just say the bereaved will be wanting a closed casket funeral. Chambered in 9mm."
+ item = /obj/item/gun/ballistic/automatic/pistol/spitter
+ pair_item = list(/datum/blackmarket_item/ammo/spitter_mag)
+
+ price_min = 1500
+ price_max = 2250
+ stock_min = 1
+ stock_max = 2
+ availability_prob = 30
+
+/datum/blackmarket_item/weapon/pounder
+ name = "Pounder Submachine Gun"
+ desc = "There's a certain quality to quantity. With a massive 50 round capacity, this .22lr submachine is capable of laying down an jawdropping amount of fire."
+ item = /obj/item/gun/ballistic/automatic/smg/pounder
+ pair_item = list(/datum/blackmarket_item/ammo/pounder_mag,/datum/blackmarket_item/ammo/himehabu_box)
+
+ price_min = 1500
+ price_max = 2000
+ stock = 1
+ availability_prob = 35
+
/datum/blackmarket_item/weapon/polymer
name = "Polymer Survivor Rifle"
desc = "A slapdash rifle held together by spite, dreams and a good helping of duct tape. Chambered in 7.62x40mm CLIP."
diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm
index bf72bbeb26e3..0db05b144da5 100644
--- a/code/modules/cargo/packs/ammo.dm
+++ b/code/modules/cargo/packs/ammo.dm
@@ -76,6 +76,12 @@
cost = 210
contains = list(/obj/item/storage/box/techshot)
+/datum/supply_pack/ammo/rubbershot
+ name = "Rubbershot Crate"
+ desc = "Contains a box of twenty-five rubbershot shells for use in crowd control or training."
+ cost = 500
+ contains = list(/obj/item/ammo_box/a12g/rubbershot)
+
/*
.38 ammo
*/
diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm
index 7ec67caf4031..2091bf3e9ba9 100644
--- a/code/modules/cargo/packs/gun.dm
+++ b/code/modules/cargo/packs/gun.dm
@@ -121,6 +121,13 @@
contains = list(/obj/item/storage/guncase/doublebarrel)
crate_name = "shotguns crate"
+/datum/supply_pack/gun/conflagration
+ name = "Conflagration Lever Action Shotgun Crate"
+ desc = "For when you need to deal with 6 hooligans and look good doing it. Contains one lever-action shotgun, with a 6 round capacity."
+ cost = 1500
+ contains = list(/obj/item/storage/guncase/conflagration)
+ crate_name = "shotguns crate"
+
/datum/supply_pack/gun/hellfire_shotgun
name = "Hellfire Shotgun Crate"
desc = "For when you need to deal with 8 hooligans. Contains a pump shotgun, with a 8-round capacity."
@@ -146,6 +153,13 @@
contains = list(/obj/item/storage/guncase/winchester)
crate_name = "rifle crate"
+/datum/supply_pack/gun/absolution
+ name = "Absolution Lever Action Rifle Crate"
+ desc = "Contains a powerful lever-action rifle for hunting larger wildlife. Chambered in .357."
+ cost = 2000
+ contains = list(/obj/item/storage/guncase/absolution)
+ crate_name = "shotguns crate"
+
/datum/supply_pack/gun/illestren
name = "Illestren Rifle Crate"
desc = "Contains an expertly made bolt action rifle intended for hunting wildlife. Chambered in 8x50mmR rounds."
diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm
index 6b43448a5d81..25ed4aaab554 100644
--- a/code/modules/cargo/packs/tools.dm
+++ b/code/modules/cargo/packs/tools.dm
@@ -69,11 +69,17 @@
/datum/supply_pack/tools/jackhammer
name = "Jackhammer Crate"
- desc = "Contains a jackhammer, ideal for breaking rocks and breaking hull."
+ desc = "Contains a jackhammer, ideal for breaking rocks."
cost = 1750
contains = list(/obj/item/pickaxe/drill/jackhammer)
crate_name = "jackhammer crate"
+/datum/supply_pack/tools/plasmacutter
+ name = "Plasmacutter Crate"
+ desc = "Contains a plasmacutter, capable of rapidly breaking down hull."
+ cost = 1250
+ contains = list(/obj/item/gun/energy/plasmacutter)
+ crate_name = "plasmacutter crate"
/datum/supply_pack/tools/metalfoam
name = "Metal Foam Grenade Crate"
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 166f437dc3af..a6bb80499588 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -42,6 +42,10 @@
/// If this can be eaten by a moth
var/moth_edible = TRUE
+ // Not used yet
+ /// Trait modification, lazylist of traits to add/take away, on equipment/drop in the correct slot
+ var/list/clothing_traits
+
/obj/item/clothing/Initialize()
if((clothing_flags & VOICEBOX_TOGGLABLE))
actions_types += /datum/action/item_action/toggle_voice_box
@@ -111,6 +115,8 @@
..()
if(!istype(user))
return
+ for(var/trait in clothing_traits)
+ REMOVE_CLOTHING_TRAIT(user, trait)
if(LAZYLEN(user_vars_remembered))
for(var/variable in user_vars_remembered)
if(variable in user.vars)
@@ -123,12 +129,48 @@
if (!istype(user))
return
if(slot_flags & slot) //Was equipped to a valid slot for this item?
+ for(var/trait in clothing_traits)
+ ADD_CLOTHING_TRAIT(user, trait)
if (LAZYLEN(user_vars_to_edit))
for(var/variable in user_vars_to_edit)
if(variable in user.vars)
LAZYSET(user_vars_remembered, variable, user.vars[variable])
user.vv_edit_var(variable, user_vars_to_edit[variable])
+/**
+ * Inserts a trait (or multiple traits) into the clothing traits list
+ *
+ * If worn, then we will also give the wearer the trait as if equipped
+ *
+ * This is so you can add clothing traits without worrying about needing to equip or unequip them to gain effects
+ */
+/obj/item/clothing/proc/attach_clothing_traits(trait_or_traits)
+ if(!islist(trait_or_traits))
+ trait_or_traits = list(trait_or_traits)
+
+ LAZYOR(clothing_traits, trait_or_traits)
+ var/mob/wearer = loc
+ if(istype(wearer) && (wearer.get_slot_by_item(src) & slot_flags))
+ for(var/new_trait in trait_or_traits)
+ ADD_CLOTHING_TRAIT(wearer, new_trait)
+
+/**
+ * Removes a trait (or multiple traits) from the clothing traits list
+ *
+ * If worn, then we will also remove the trait from the wearer as if unequipped
+ *
+ * This is so you can add clothing traits without worrying about needing to equip or unequip them to gain effects
+ */
+/obj/item/clothing/proc/detach_clothing_traits(trait_or_traits)
+ if(!islist(trait_or_traits))
+ trait_or_traits = list(trait_or_traits)
+
+ LAZYREMOVE(clothing_traits, trait_or_traits)
+ var/mob/wearer = loc
+ if(istype(wearer))
+ for(var/new_trait in trait_or_traits)
+ REMOVE_CLOTHING_TRAIT(wearer, new_trait)
+
/obj/item/clothing/examine(mob/user)
. = ..()
switch (max_heat_protection_temperature)
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 19841c7d884e..0447f62aab9e 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -190,7 +190,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50)
/obj/item/clothing/gloves/color/captain/nt
- desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier, and armoured bracers. Swanky."
+ desc = "Regal blue gloves with gold trim and a fire and acid-resistant coating. Swanky."
name = "captain's gloves"
icon_state = "captainnt"
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 64fbf60dca9c..e326b55f58f3 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -23,6 +23,7 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
+ clothing_traits = list(TRAIT_PLANT_SAFE)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30)
/obj/item/clothing/gloves/combat
@@ -125,7 +126,7 @@
name = "explorer envirogloves"
icon_state = "explorerplasma"
-/obj/item/clothing/gloves/color/botanic_leather/plasmaman
+/obj/item/clothing/gloves/botanic_leather/plasmaman
name = "botany envirogloves"
desc = "Covers up those scandalous boney hands."
icon_state = "botanyplasma"
diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm
index 05b8c0e1a42c..544259603174 100644
--- a/code/modules/clothing/outfits/plasmaman.dm
+++ b/code/modules/clothing/outfits/plasmaman.dm
@@ -17,7 +17,7 @@
head = /obj/item/clothing/head/helmet/space/plasmaman/botany
uniform = /obj/item/clothing/under/plasmaman/botany
- gloves = /obj/item/clothing/gloves/color/botanic_leather/plasmaman
+ gloves = /obj/item/clothing/gloves/botanic_leather/plasmaman
/datum/outfit/plasmaman/curator
name = "Curator Plasmaman"
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 4de5192323ce..25788f4556ae 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -305,7 +305,6 @@
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining/heavy
custom_price = 4500
- slowdown = 0.5
/obj/item/clothing/head/helmet/space/hardsuit/mining/heavy
name = "heavy mining helmet"
@@ -387,13 +386,11 @@
if(on)
linkedsuit.name = initial(linkedsuit.name)
linkedsuit.desc = initial(linkedsuit.desc)
- linkedsuit.slowdown = 1
linkedsuit.clothing_flags |= STOPSPRESSUREDAMAGE
linkedsuit.cold_protection |= CHEST | GROIN | LEGS | FEET | ARMS | HANDS
else
linkedsuit.name += " (combat)"
linkedsuit.desc = linkedsuit.alt_desc
- linkedsuit.slowdown = linkedsuit.combat_slowdown
linkedsuit.clothing_flags &= ~STOPSPRESSUREDAMAGE
linkedsuit.cold_protection &= ~(CHEST | GROIN | LEGS | FEET | ARMS | HANDS)
if(linkedsuit.lightweight)
@@ -418,12 +415,12 @@
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi
jetpack = /obj/item/tank/jetpack/suit
supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION
- var/combat_slowdown = 0 //slowdown when in combat mode
+ slowdown = 0.5
var/lightweight = 0 //used for flags when toggling
//Ramzi Syndie suit
/obj/item/clothing/head/helmet/space/hardsuit/syndi/ramzi
- name = "rusted-red hardsuit helmet"
+ name = "rust-red hardsuit helmet"
desc = "A beat-up standardized dual-mode helmet derived from more advanced special operations helmets, its red rusted into a dirty brown. It is in EVA mode. Manufactured by Ramzi Clique."
alt_desc = "A beat-up standardized dual-mode helmet derived from more advanced special operations helmets, its red rusted into a dirty brown. It is in combat mode. Manufactured by Ramzi Clique."
icon_state = "hardsuit1-ramzi"
@@ -432,7 +429,7 @@
armor = list("melee" = 35, "bullet" = 25, "laser" = 20,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
/obj/item/clothing/suit/space/hardsuit/syndi/ramzi
- name = "rusted-red hardsuit"
+ name = "rust-red hardsuit"
desc = "A beat-up standardized dual-mode hardsuit derived from more advanced special operations hardsuits, its red rusted into a dirty brown. It is in EVA mode. Manufactured by Ramzi Clique."
alt_desc = "A beat-up standardized dual-mode hardsuit derived from more advanced special operations hardsuits, its red rusted into a dirty brown. It is in combat mode. Manufactured by Ramzi Clique."
icon_state = "hardsuit1-ramzi"
@@ -442,7 +439,7 @@
lightweight = 1
jetpack = null
armor = list("melee" = 35, "bullet" = 25, "laser" = 20,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
- combat_slowdown = 0.5
+ slowdown = 0.7
jetpack = null
//Elite Syndie suit
@@ -510,7 +507,6 @@
armor = list("melee" = 25, "bullet" = 25, "laser" = 35, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 65, "fire" = 75, "acid" = 40)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/cybersun/paramed
supports_variations = VOX_VARIATION
- combat_slowdown = 0.4
jetpack = null
/obj/item/clothing/head/helmet/space/hardsuit/syndi/cybersun/paramed
@@ -667,6 +663,7 @@
item_state = "sec_hardsuit"
armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
+ slowdown = 0.5
supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION
/obj/item/clothing/suit/space/hardsuit/security/Initialize()
@@ -922,7 +919,7 @@
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100)
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
- slowdown = 0
+ slowdown = 0.5
shield_state = "shield-red"
shield_on = "shield-red"
jetpack = /obj/item/tank/jetpack/suit
@@ -1203,7 +1200,7 @@
armor = list("melee" = 50, "bullet" = 45, "laser" = 40, "energy" = 30, "bomb" = 60, "bio" = 100, "rad" = 60, "fire" = 90, "acid" = 75) //intentionally the fucking strong, this is master chief-tier armor //is this really what you call the strong?? is this the best solgov has to offer??????
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/solgov
allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
- slowdown = 0
+ slowdown = 0.5
supports_variations = DIGITIGRADE_VARIATION
/obj/item/clothing/head/helmet/space/hardsuit/quixote
@@ -1227,7 +1224,7 @@
actions_types = list(/datum/action/item_action/toggle_helmet)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/quixote
jetpack = /obj/item/tank/jetpack/suit
- slowdown = 0
+ slowdown = 0.3
max_heat_protection_temperature = 20000
var/datum/action/innate/quixotejump/jump
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index a21e9f71afc4..87e0f1a2a429 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -341,7 +341,6 @@
seed.genes += disk.gene.Copy()
if(istype(disk.gene, /datum/plant_gene/reagent))
seed.reagents_from_genes()
- disk.gene.apply_vars(seed)
repaint_seed()
diff --git a/code/modules/hydroponics/genes/attack.dm b/code/modules/hydroponics/genes/attack.dm
new file mode 100644
index 000000000000..37dabf0c06a8
--- /dev/null
+++ b/code/modules/hydroponics/genes/attack.dm
@@ -0,0 +1,128 @@
+/// Traits that turn a plant into a weapon, giving them force and effects on attack.
+/datum/plant_gene/trait/attack
+ name = "On Attack Trait"
+ description = "It is a very dangerous weapon."
+ icon = "hand-fist"
+ /// The multiplier we apply to the potency to calculate force. Set to 0 to not affect the force.
+ var/force_multiplier = 0
+ /// If TRUE, our plant will degrade in force every hit until diappearing.
+ var/degrades_after_hit = FALSE
+ /// When we fully degrade, what degraded off of us?
+ var/degradation_noun = "leaves"
+
+/datum/plant_gene/trait/attack/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ if(force_multiplier)
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ our_plant.force = round((5 + our_seed.potency * force_multiplier), 1)
+ RegisterSignal(our_plant, COMSIG_ITEM_ATTACK, PROC_REF(on_plant_attack))
+ RegisterSignal(our_plant, COMSIG_ITEM_AFTERATTACK, PROC_REF(after_plant_attack))
+
+/// Signal proc for [COMSIG_ITEM_ATTACK] that allows for effects on attack
+/datum/plant_gene/trait/attack/proc/on_plant_attack(obj/item/source, mob/living/target, mob/living/user)
+ SIGNAL_HANDLER
+
+ INVOKE_ASYNC(src, PROC_REF(attack_effect), source, target, user)
+
+/*
+ * Effects done when we hit people with our plant, ON attack.
+ * Override on a per-plant basis.
+ *
+ * our_plant - our plant, that we're attacking with
+ * user - the person who is attacking with the plant
+ * target - the person who is attacked by the plant
+ */
+/datum/plant_gene/trait/attack/proc/attack_effect(obj/item/our_plant, mob/living/target, mob/living/user)
+ return
+
+/// Signal proc for [COMSIG_ITEM_AFTERATTACK] that allows for effects after an attack is done
+/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
+ SIGNAL_HANDLER
+
+ if(!proximity_flag)
+ return
+
+ if(!ismovable(target))
+ return
+
+ if(isobj(target))
+ var/obj/object_target = target
+ if(!(object_target.obj_flags & CAN_BE_HIT))
+ return .
+
+ INVOKE_ASYNC(src, PROC_REF(after_attack_effect), source, target, user)
+ return .
+
+/*
+ * Effects done when we hit people with our plant, AFTER the attack is done.
+ * Extend on a per-plant basis.
+ *
+ * our_plant - our plant, that we're attacking with
+ * user - the person who is attacking with the plant
+ * target - the atom which is attacked by the plant
+ */
+/datum/plant_gene/trait/attack/proc/after_attack_effect(obj/item/our_plant, atom/target, mob/living/user)
+ SHOULD_CALL_PARENT(TRUE)
+
+ if(!degrades_after_hit)
+ return
+
+ // We probably hit something or someone. Reduce our force
+ if(our_plant.force > 0)
+ our_plant.force -= rand(1, (our_plant.force / 3) + 1)
+ return
+
+ // When our force degrades to zero or below, we're all done
+ to_chat(user, span_warning("All the [degradation_noun] have fallen off [our_plant] from violent whacking!"))
+ qdel(our_plant)
+
+/// Novaflower's attack effects (sets people on fire) + degradation on attack
+/datum/plant_gene/trait/attack/novaflower_attack
+ name = "Heated Petals"
+ description = "Hitting with it may cause things to combust."
+ force_multiplier = 0.2
+ degrades_after_hit = TRUE
+ degradation_noun = "petals"
+
+/datum/plant_gene/trait/attack/novaflower_attack/attack_effect(obj/item/our_plant, mob/living/target, mob/living/user)
+ if(!istype(target))
+ return
+
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ to_chat(target, span_danger("You are lit on fire from the intense heat of [our_plant]!"))
+ target.adjust_fire_stacks(round(our_seed.potency / 20))
+ if(target.IgniteMob())
+ message_admins("[ADMIN_LOOKUPFLW(user)] set [ADMIN_LOOKUPFLW(target)] on fire with [our_plant] at [AREACOORD(user)]")
+ user.log_message("set [key_name(target)] on fire with [our_plant]", LOG_ATTACK)
+ target.log_message("was set on fire by [key_name(user)] with [our_plant].", LOG_ATTACK)
+
+ our_plant.investigate_log("was used by [key_name(user)] to burn [key_name(target)] at [AREACOORD(user)]", INVESTIGATE_BOTANY)
+
+/// Sunflower's attack effect (shows cute text)
+/datum/plant_gene/trait/attack/sunflower_attack
+ name = "Bright Petals"
+ description = "Makes others feel the power on hit."
+
+/datum/plant_gene/trait/attack/sunflower_attack/after_attack_effect(obj/item/our_plant, atom/target, mob/user, proximity_flag, click_parameters)
+ if(ismob(target))
+ var/mob/target_mob = target
+ user.visible_message("[user] smacks [target_mob] with [user.p_their()] [our_plant.name]! FLOWER POWER!", ignored_mobs = list(target_mob, user))
+ if(target_mob != user)
+ to_chat(target_mob, "[user] smacks you with [our_plant]!FLOWER POWER!")
+ to_chat(user, "Your [our_plant.name]'s FLOWER POWER strikes [target_mob]!")
+
+ return ..()
+
+/// Normal nettle's force + degradation on attack
+/datum/plant_gene/trait/attack/nettle_attack
+ name = "Sharpened Leaves"
+ force_multiplier = 0.2
+ degrades_after_hit = TRUE
+
+/// Deathnettle force + degradation on attack
+/datum/plant_gene/trait/attack/nettle_attack/death
+ name = "Aggressive Sharpened Leaves"
+ force_multiplier = 0.4
diff --git a/code/modules/hydroponics/genes/backfire.dm b/code/modules/hydroponics/genes/backfire.dm
new file mode 100644
index 000000000000..338b0fb17455
--- /dev/null
+++ b/code/modules/hydroponics/genes/backfire.dm
@@ -0,0 +1,163 @@
+/// Traits for plants with backfire effects. These are negative effects that occur when a plant is handled without gloves/unsafely.
+/datum/plant_gene/trait/backfire
+ name = "Backfire Trait"
+ icon = "mitten"
+ description = "Be careful when holding it without protection."
+ /// Whether our actions are cancelled when the backfire triggers.
+ var/cancel_action_on_backfire = FALSE
+ /// A list of extra traits to check to be considered safe.
+ var/list/traits_to_check
+ /// A list of extra genes to check to be considered safe.
+ var/list/genes_to_check
+
+/datum/plant_gene/trait/backfire/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+ if(genes_to_check)
+ genes_to_check = string_list(genes_to_check)
+ if(traits_to_check)
+ traits_to_check = string_list(traits_to_check)
+ our_plant.AddElement(/datum/element/plant_backfire, cancel_action_on_backfire, traits_to_check, genes_to_check)
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_BACKFIRE, PROC_REF(on_backfire))
+
+/// Signal proc for [COMSIG_PLANT_ON_BACKFIRE] that causes the backfire effect.
+/datum/plant_gene/trait/backfire/proc/on_backfire(obj/item/source, mob/living/carbon/user)
+ SIGNAL_HANDLER
+
+ INVOKE_ASYNC(src, PROC_REF(backfire_effect), source, user)
+
+/**
+ * The actual backfire effect on the user.
+ * Override with plant-specific effects.
+ */
+/datum/plant_gene/trait/backfire/proc/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ return
+
+/// Rose's prick on backfire
+/datum/plant_gene/trait/backfire/rose_thorns
+ name = "Rose Thorns"
+ description = "The stem has a lot of thorns."
+ traits_to_check = list(TRAIT_PIERCEIMMUNE)
+
+/datum/plant_gene/trait/backfire/rose_thorns/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ if(!our_seed.get_gene(/datum/plant_gene/trait/sticky) && prob(66))
+ to_chat(user, span_danger("[our_plant]'s thorns nearly prick your hand. Best be careful."))
+ return
+
+ to_chat(user, span_danger("[our_plant]'s thorns prick your hand. Ouch."))
+ our_plant.investigate_log("rose-pricked [key_name(user)] at [AREACOORD(user)]", INVESTIGATE_BOTANY)
+ var/obj/item/bodypart/affecting = user.get_active_hand()
+ affecting?.receive_damage(2)
+
+/// Novaflower's hand burn on backfire
+/datum/plant_gene/trait/backfire/novaflower_heat
+ name = "Burning Stem"
+ description = "The stem may burn your hand."
+ cancel_action_on_backfire = TRUE
+
+/datum/plant_gene/trait/backfire/novaflower_heat/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ to_chat(user, span_danger("[our_plant] singes your bare hand!"))
+ our_plant.investigate_log("self-burned [key_name(user)] for [our_plant.force] at [AREACOORD(user)]", INVESTIGATE_BOTANY)
+ var/obj/item/bodypart/affecting = user.get_active_hand()
+ return affecting?.receive_damage(0, our_plant.force)
+
+/// Normal Nettle hannd burn on backfire
+/datum/plant_gene/trait/backfire/nettle_burn
+ name = "Stinging Stem"
+ description = "The stem may sting your hand."
+
+/datum/plant_gene/trait/backfire/nettle_burn/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ to_chat(user, span_danger("[our_plant] burns your bare hand!"))
+ our_plant.investigate_log("self-burned [key_name(user)] for [our_plant.force] at [AREACOORD(user)]", INVESTIGATE_BOTANY)
+ var/obj/item/bodypart/affecting = user.get_active_hand()
+ return affecting?.receive_damage(0, our_plant.force)
+
+/// Deathnettle hand burn + stun on backfire
+/datum/plant_gene/trait/backfire/nettle_burn/death
+ name = "Aggressive Stinging Stem"
+ cancel_action_on_backfire = TRUE
+
+/datum/plant_gene/trait/backfire/nettle_burn/death/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ . = ..()
+ if(!. || prob(50))
+ return
+
+ user.Paralyze(10 SECONDS)
+ to_chat(user, span_userdanger("You are stunned by the powerful acids of [our_plant]!"))
+
+/*
+/// Ghost-Chili heating up on backfire
+/datum/plant_gene/trait/backfire/chili_heat
+ name = "Active Capsicum Glands"
+ description = "You may survive a cold winter with this in hand."
+ genes_to_check = list(/datum/plant_gene/trait/chem_heating)
+ /// The mob currently holding the chili.
+ var/datum/weakref/held_mob
+ /// The chili this gene is tied to, to track it for processing.
+ var/datum/weakref/our_chili
+
+/datum/plant_gene/trait/backfire/chili_heat/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ our_chili = WEAKREF(our_plant)
+ RegisterSignals(our_plant, list(COMSIG_QDELETING, COMSIG_ITEM_DROPPED), PROC_REF(stop_backfire_effect))
+
+/*
+ * Begin processing the trait on backfire.
+ *
+ * our_plant - our source plant, which is backfiring
+ * user - the mob holding our plant
+ */
+/datum/plant_gene/trait/backfire/chili_heat/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ held_mob = WEAKREF(user)
+ START_PROCESSING(SSobj, src)
+
+/*
+ * Stop processing the trait when we're dropped or deleted.
+ *
+ * our_plant - our source plant
+ */
+/datum/plant_gene/trait/backfire/chili_heat/proc/stop_backfire_effect(datum/source)
+ SIGNAL_HANDLER
+
+ held_mob = null
+ STOP_PROCESSING(SSobj, src)
+
+/*
+ * The processing of our trait. Heats up the mob ([held_mob]) currently holding the source plant ([our_chili]).
+ * Stops processing if we're no longer being held by [held mob].
+ */
+/datum/plant_gene/trait/backfire/chili_heat/process(seconds_per_tick)
+ var/mob/living/carbon/our_mob = held_mob?.resolve()
+ var/obj/item/our_plant = our_chili?.resolve()
+
+ // If our weakrefs don't resolve, or if our mob is not holding our plant, stop processing.
+ if(!our_mob || !our_plant || !our_mob.is_holding(our_plant))
+ stop_backfire_effect()
+ return
+
+ our_mob.adjust_bodytemperature(7.5 * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick)
+ if(SPT_PROB(5, seconds_per_tick))
+ to_chat(our_mob, span_warning("Your hand holding [our_plant] burns!"))
+
+/// Bluespace Tomato squashing on the user on backfire
+/datum/plant_gene/trait/backfire/bluespace
+ name = "Bluespace Volatility"
+ description = "You may be spaced out if you hold this unprotected."
+ cancel_action_on_backfire = TRUE
+ genes_to_check = list(/datum/plant_gene/trait/squash)
+
+/datum/plant_gene/trait/backfire/bluespace/backfire_effect(obj/item/our_plant, mob/living/carbon/user)
+ if(prob(50))
+ return
+
+ to_chat(user, span_danger("[our_plant] slips out of your hand!"))
+
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ var/datum/plant_gene/trait/squash/squash_gene = our_seed.get_gene(/datum/plant_gene/trait/squash)
+ squash_gene.squash_plant(our_plant, user)
+*/
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index ed58e86e16dc..4f2b2420ee55 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -44,8 +44,8 @@
dried_type = src.type
if(seed)
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_new(src, loc)
+ for(var/datum/plant_gene/trait/trait in seed.genes)
+ trait.on_new_plant(src, loc)
seed.prepare_result(src)
transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 //Makes the resulting produce's sprite larger or smaller based on potency!
add_juice()
@@ -110,15 +110,13 @@
user.visible_message("[user] starts splitting \the [src].", "You dig into \the [src] and start to split it...", "You hear the sound of a sharp object digging into some plant matter.")
if(do_after(user, 20, target = src))
to_chat(user, "You split apart the [src]! Sadly you put too much force and it's remains are unusable, but hey, you got your seeds!")
- seedify(src, 1, TRUE, FALSE, src, user)
- squash(user)
+ seedify(src, 1, TRUE, TRUE, src, user)
if(TOOL_WRENCH)
playsound(loc, 'sound/misc/splort.ogg', 50, TRUE, -1)
user.visible_message("[user] starts whacking \the [src].", "You start whacking \the [src]...", "You hear the sound of a plant being whacked violently.")
if(do_after(user, 17, target = src))
to_chat(user, "You smash [src]! Sadly there's nothing left of it other than the seeds and some junk.")
- seedify(src, 1, TRUE, FALSE, src, user)
- squash(user)
+ seedify(src, 1, TRUE, TRUE, src, user)
if(!slice_path)
if(O.get_sharpness())
playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1)
@@ -127,44 +125,11 @@
to_chat(user, "You slice apart the [src]! You went too far and the tiny remaining scraps are worthless!")
seedify(src, 1, TRUE, TRUE, src, user)
-// Various gene procs
-/obj/item/reagent_containers/food/snacks/grown/attack_self(mob/user)
- if(seed && seed.get_gene(/datum/plant_gene/trait/squash))
- squash(user)
- ..()
-
/obj/item/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..()) //was it caught by a mob?
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_throw_impact(src, hit_atom)
- if(seed.get_gene(/datum/plant_gene/trait/squash))
- squash(hit_atom)
-
-/obj/item/reagent_containers/food/snacks/grown/proc/squash(atom/target)
- var/turf/T = get_turf(target)
- forceMove(T)
- if(ispath(splat_type, /obj/effect/decal/cleanable/food/plant_smudge))
- if(filling_color)
- var/obj/O = new splat_type(T)
- O.color = filling_color
- O.name = "[name] smudge"
- else if(splat_type)
- new splat_type(T)
-
- if(trash)
- generate_trash(T)
-
- visible_message("[src] is squashed.","You hear a smack.")
- if(seed)
- for(var/datum/plant_gene/trait/trait in seed.genes)
- trait.on_squash(src, target)
-
- reagents.expose(T)
- for(var/A in T)
- reagents.expose(A)
-
- qdel(src)
/obj/item/reagent_containers/food/snacks/grown/On_Consume()
if(iscarbon(usr))
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index 820ecae005d8..9459a1f7a816 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -144,6 +144,7 @@
species = "sunflower"
plantname = "Sunflowers"
product = /obj/item/grown/sunflower
+ genes = list(/datum/plant_gene/trait/attack/sunflower_attack)
endurance = 20
production = 2
yield = 2
@@ -169,10 +170,6 @@
throw_speed = 1
throw_range = 3
-/obj/item/grown/sunflower/attack(mob/M, mob/user)
- to_chat(M, "[user] smacks you with a sunflower!FLOWER POWER!")
- to_chat(user, "Your sunflower's FLOWER POWER strikes [M]!")
-
// Moonflower
/obj/item/seeds/sunflower/moonflower
name = "pack of moonflower seeds"
@@ -211,11 +208,18 @@
icon_grow = "novaflower-grow"
icon_dead = "sunflower-dead"
product = /obj/item/grown/novaflower
+ genes = list(/datum/plant_gene/trait/backfire/novaflower_heat, /datum/plant_gene/trait/attack/novaflower_attack)
mutatelist = list()
reagents_add = list(/datum/reagent/consumable/condensedcapsaicin = 0.25, /datum/reagent/consumable/capsaicin = 0.3, /datum/reagent/consumable/nutriment = 0)
rarity = 20
research = PLANT_RESEARCH_TIER_3
+/obj/item/seeds/sunflower/novaflower/Initialize(mapload,nogenes)
+ . = ..()
+ if(!nogenes)
+ unset_mutability(/datum/plant_gene/trait/attack/novaflower_attack, PLANT_GENE_REMOVABLE)
+ unset_mutability(/datum/plant_gene/trait/backfire/novaflower_heat, PLANT_GENE_REMOVABLE)
+
/obj/item/grown/novaflower
seed = /obj/item/seeds/sunflower/novaflower
name = "novaflower"
@@ -232,33 +236,3 @@
throw_range = 3
attack_verb = list("roasted", "scorched", "burned")
grind_results = list(/datum/reagent/consumable/capsaicin = 0, /datum/reagent/consumable/condensedcapsaicin = 0)
-
-/obj/item/grown/novaflower/add_juice()
- ..()
- force = round((5 + seed.potency / 5), 1)
-
-/obj/item/grown/novaflower/attack(mob/living/carbon/M, mob/user)
- if(!..())
- return
- if(isliving(M))
- to_chat(M, "You are lit on fire from the intense heat of the [name]!")
- M.adjust_fire_stacks(seed.potency / 20)
- if(M.IgniteMob())
- message_admins("[ADMIN_LOOKUPFLW(user)] set [ADMIN_LOOKUPFLW(M)] on fire with [src] at [AREACOORD(user)]")
- log_game("[key_name(user)] set [key_name(M)] on fire with [src] at [AREACOORD(user)]")
-
-/obj/item/grown/novaflower/afterattack(atom/A as mob|obj, mob/user,proximity)
- . = ..()
- if(!proximity)
- return
- if(force > 0)
- force -= rand(1, (force / 3) + 1)
- else
- to_chat(usr, "All the petals have fallen off the [name] from violent whacking!")
- qdel(src)
-
-/obj/item/grown/novaflower/pickup(mob/living/carbon/human/user)
- ..()
- if(!user.gloves)
- to_chat(user, "The [name] burns your bare hand!")
- user.adjustFireLoss(rand(1, 5))
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index 17d43d0a31c5..c3488c43f789 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -220,7 +220,7 @@
endurance = 8
yield = 4
growthstages = 2
- genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory)
+ genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/carnivory)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
research = PLANT_RESEARCH_TIER_3
@@ -229,7 +229,7 @@
. = ..()
if(!nogenes)
unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
- unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
+ unset_mutability(/datum/plant_gene/trait/carnivory, PLANT_GENE_REMOVABLE)
/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
seed = /obj/item/seeds/chanter/jupitercup
diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm
index 277245138a54..f9633ade7661 100644
--- a/code/modules/hydroponics/grown/nettle.dm
+++ b/code/modules/hydroponics/grown/nettle.dm
@@ -9,10 +9,16 @@
endurance = 40 // tuff like a toiger
yield = 4
growthstages = 5
- genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy)
+ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/attack/nettle_attack, /datum/plant_gene/trait/backfire/nettle_burn)
mutatelist = list(/obj/item/seeds/nettle/death)
reagents_add = list(/datum/reagent/toxin/acid = 0.5)
+/obj/item/seeds/nettle/Initialize(mapload,nogenes)
+ . = ..()
+ if(!nogenes)
+ unset_mutability(/datum/plant_gene/trait/attack/nettle_attack, PLANT_GENE_REMOVABLE)
+ unset_mutability(/datum/plant_gene/trait/backfire/nettle_burn, PLANT_GENE_REMOVABLE)
+
/obj/item/seeds/nettle/death
name = "pack of death-nettle seeds"
desc = "These seeds grow into death-nettles."
@@ -23,12 +29,18 @@
endurance = 25
maturation = 8
yield = 2
- genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/stinging)
+ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/stinging, /datum/plant_gene/trait/attack/nettle_attack/death, /datum/plant_gene/trait/backfire/nettle_burn/death)
mutatelist = list()
reagents_add = list(/datum/reagent/toxin/acid/fluacid = 0.5, /datum/reagent/toxin/acid = 0.5)
rarity = 20
research = PLANT_RESEARCH_TIER_3
+/obj/item/seeds/nettle/death/Initialize(mapload,nogenes)
+ . = ..()
+ if(!nogenes)
+ unset_mutability(/datum/plant_gene/trait/attack/nettle_attack/death, PLANT_GENE_REMOVABLE)
+ unset_mutability(/datum/plant_gene/trait/backfire/nettle_burn/death, PLANT_GENE_REMOVABLE)
+
/obj/item/reagent_containers/food/snacks/grown/nettle // "snack"
seed = /obj/item/seeds/nettle
name = "nettle"
@@ -48,40 +60,6 @@
wine_power = 20
wine_flavor = "tingling itchiness" //WS edit: new wine flavors
-/obj/item/reagent_containers/food/snacks/grown/nettle/pickup(mob/living/user)
- ..()
- if(!iscarbon(user))
- return FALSE
- var/mob/living/carbon/C = user
- if(C.gloves)
- return FALSE
- if(HAS_TRAIT(C, TRAIT_PIERCEIMMUNE))
- return FALSE
- var/hit_zone = (C.held_index_to_dir(C.active_hand_index) == "l" ? "l_":"r_") + "arm"
- var/obj/item/bodypart/affecting = C.get_bodypart(hit_zone)
- if(affecting)
- if(affecting.receive_damage(0, force))
- C.update_damage_overlays()
- to_chat(C, "The nettle burns your bare hand!")
- return TRUE
-
-/obj/item/reagent_containers/food/snacks/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity)
- . = ..()
- if(!proximity)
- return
- if(force > 0)
- force -= rand(1, (force / 3) + 1) // When you whack someone with it, leaves fall off
- else
- to_chat(usr, "All the leaves have fallen off the nettle from violent whacking.")
- qdel(src)
-
-/obj/item/reagent_containers/food/snacks/grown/nettle/basic
- seed = /obj/item/seeds/nettle
-
-/obj/item/reagent_containers/food/snacks/grown/nettle/basic/add_juice()
- ..()
- force = round((5 + seed.potency / 5), 1)
-
/obj/item/reagent_containers/food/snacks/grown/nettle/death
seed = /obj/item/seeds/nettle/death
name = "deathnettle"
@@ -91,26 +69,3 @@
throwforce = 15
wine_power = 50
wine_flavor = "burning rage" //WS edit: new wine flavors
-
-/obj/item/reagent_containers/food/snacks/grown/nettle/death/add_juice()
- ..()
- force = round((5 + seed.potency / 2.5), 1)
-
-/obj/item/reagent_containers/food/snacks/grown/nettle/death/pickup(mob/living/carbon/user)
- if(..())
- if(prob(50))
- user.Paralyze(100)
- to_chat(user, "You are stunned by [src] as you try picking it up!")
-
-/obj/item/reagent_containers/food/snacks/grown/nettle/death/attack(mob/living/carbon/M, mob/user)
- if(!..())
- return
- if(isliving(M))
- to_chat(M, "You are stunned by the powerful acid of [src]!")
- log_combat(user, M, "attacked", src)
-
- M.adjust_blurriness(force/7)
- if(prob(20))
- M.Unconscious(force / 0.3)
- M.Paralyze(force / 0.75)
- M.drop_all_held_items()
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index f97596c348f2..ee76f02e02c8 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -23,8 +23,9 @@
pixel_y = base_pixel_y + rand(-5, 5)
if(seed)
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_new(src, newloc)
+ // Go through all traits in their genes and call on_new_plant from them.
+ for(var/datum/plant_gene/trait/trait in seed.genes)
+ trait.on_new_plant(src, newloc)
if(istype(src, seed.product)) // no adding reagents if it is just a trash item
seed.prepare_result(src)
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index bbfeaeeb5b5a..13faaf5f15a5 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -194,7 +194,7 @@
//Pests & Weeds//////////////////////////////////////////////////////////
if(pestlevel >= 8)
- if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ if(!myseed.get_gene(/datum/plant_gene/trait/carnivory))
adjustHealth(-2 / rating)
else
@@ -202,7 +202,7 @@
adjustPests(-1 / rating)
else if(pestlevel >= 4)
- if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ if(!myseed.get_gene(/datum/plant_gene/trait/carnivory))
adjustHealth(-1 / rating)
else
@@ -210,7 +210,7 @@
if(prob(50))
adjustPests(-1 / rating)
- else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/carnivory))
adjustHealth(-2 / rating)
if(prob(5))
adjustPests(-1 / rating)
@@ -269,10 +269,7 @@
update_appearance()
if(myseed && prob(5 * (11-myseed.production)))
- for(var/g in myseed.genes)
- if(istype(g, /datum/plant_gene/trait))
- var/datum/plant_gene/trait/selectedtrait = g
- selectedtrait.on_grow(src)
+ SEND_SIGNAL(myseed, COMSIG_SEED_ON_GROW, src)
return
/obj/machinery/hydroponics/update_appearance(updates)
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index a57934dc551d..d34490d2bd24 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -1,6 +1,8 @@
/datum/plant_gene
var/name
var/mutability_flags = PLANT_GENE_EXTRACTABLE | PLANT_GENE_REMOVABLE ///These flags tells the genemodder if we want the gene to be extractable, only removable or neither.
+ /// The font awesome icon name representing the gene in the seed extractor UI (Once i port that -Fallcon)
+ var/icon = "dna"
/datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name.
var/formatted_name
@@ -14,16 +16,39 @@
formatted_name += name
return formatted_name
-/datum/plant_gene/proc/can_add(obj/item/seeds/S)
- return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes
+/*
+ * Check if the seed can accept this plant gene.
+ *
+ * our_seed - the seed we're adding the gene to
+ *
+ * Returns TRUE if the seed can take the gene, and FALSE otherwise.
+ */
+/datum/plant_gene/proc/can_add(obj/item/seeds/our_seed)
+ SHOULD_CALL_PARENT(TRUE)
+ return TRUE
+/// Copies over vars and information about our current gene to a new gene and returns the new instance of gene.
/datum/plant_gene/proc/Copy()
- var/datum/plant_gene/G = new type
- G.mutability_flags = mutability_flags
- return G
-
-/datum/plant_gene/proc/apply_vars(obj/item/seeds/S) // currently used for fire resist, can prob. be further refactored
- return
+ var/datum/plant_gene/new_gene = new type
+ new_gene.mutability_flags = mutability_flags
+ return new_gene
+
+/*
+ * on_new_seed is called when seed genes are initialized on the /obj/seed.
+ *
+ * new_seed - the seed being created
+ */
+/datum/plant_gene/proc/on_new_seed(obj/item/seeds/new_seed)
+ return // Not implemented
+
+/*
+ * on_removed is called when the gene is removed from a seed.
+ * Also called when a seed is qdel'd (and all the genes are removed and deleted).
+ *
+ * old_seed - our seed, before being removed
+ */
+/datum/plant_gene/proc/on_removed(obj/item/seeds/old_seed)
+ return // Not implemented
// Core plant genes store 5 main variables: lifespan, endurance, production, yield, potency
/datum/plant_gene/core
@@ -171,28 +196,70 @@
// Various traits affecting the product.
/datum/plant_gene/trait
+ /// The rate at which this trait affects something. This can be anything really - why? I dunno.
var/rate = 0.05
var/examine_line = ""
- var/trait_id // must be set and equal for any two traits of the same type
+ /// Bonus lines displayed on examine.
+ var/description = ""
+ /// Flag - Traits that share an ID cannot be placed on the same plant.
+ var/trait_ids
+ /// Flag - Modifications made to the final product.
+ var/trait_flags
+ /// A blacklist of seeds that a trait cannot be attached to.
+ var/list/obj/item/seeds/seed_blacklist
/datum/plant_gene/trait/Copy()
var/datum/plant_gene/trait/G = ..()
G.rate = rate
return G
-/datum/plant_gene/trait/can_add(obj/item/seeds/S)
+/datum/plant_gene/trait/can_add(obj/item/seeds/source_seed)
if(!..())
return FALSE
- for(var/datum/plant_gene/trait/R in S.genes)
- if(trait_id && R.trait_id == trait_id)
+ for(var/obj/item/seeds/found_seed as anything in seed_blacklist)
+ if(istype(source_seed, found_seed))
return FALSE
- if(type == R.type)
+
+ for(var/datum/plant_gene/trait/trait in source_seed.genes)
+ if(trait_ids & trait.trait_ids)
+ return FALSE
+ if(type == trait.type)
return FALSE
+
return TRUE
-/datum/plant_gene/trait/proc/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc)
- return
+/*
+ * on_new_plant is called for every plant trait on an /obj/item/grown or /obj/item/reagent_containers/food/snacks/grown when initialized.
+ *
+ * our_plant - the source plant being created
+ * newloc - the loc of the plant
+ */
+/datum/plant_gene/trait/proc/on_new_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, newloc)
+ // Plants should always have seeds, but if a plant gene is somehow being instantiated on a plant with no seed, stop initializing genes
+ // (Plants hold their genes on their seeds, so we can't really add them to something that doesn't exist)
+ if(isnull(our_plant.get_plant_seed()))
+ stack_trace("[our_plant] ([our_plant.type]) has a nulled seed value while trying to initialize [src]!")
+ return FALSE
+
+ // Add on any bonus lines on examine
+ if(description)
+ RegisterSignal(our_plant, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
+ return TRUE
+
+/*
+ * on_new_seed is called when seed genes are initialized on the /obj/seed.
+ *
+ * new_seed - the seed being created
+ */
+/datum/plant_gene/trait/on_new_seed(obj/item/seeds/new_seed)
+ return TRUE
+
+/// Add on any unique examine text to the plant's examine text.
+/datum/plant_gene/trait/proc/examine(obj/item/reagent_containers/food/snacks/grown/our_plant, mob/examiner, list/examine_list)
+ SIGNAL_HANDLER
+
+ examine_list += span_info("[description]")
/datum/plant_gene/trait/proc/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
return
@@ -213,84 +280,173 @@
/datum/plant_gene/trait/proc/on_grow(obj/machinery/hydroponics/H)
return
+/// Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind.
/datum/plant_gene/trait/squash
- // Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind.
- // Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash.
- // For code, see grown.dm
name = "Liquid Contents"
- examine_line = "It has a lot of liquid contents inside."
+ icon = "droplet"
+ description = "It may burst open from the internal pressure on impact."
+ trait_ids = THROW_IMPACT_ID | REAGENT_TRANSFER_ID | ATTACK_SELF_ID
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
+
+// Register a signal that our plant can be squashed on add.
+/datum/plant_gene/trait/squash/on_new_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(squash_plant))
+ RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(squash_plant))
+ RegisterSignal(our_plant, COMSIG_ITEM_ATTACK_SELF, PROC_REF(squash_plant))
+
+/*
+ * Signal proc to squash the plant this trait belongs to, causing a smudge, exposing the target to reagents, and deleting it,
+ *
+ * Arguments
+ * our_plant - the plant this trait belongs to.
+ * target - the atom being hit by this squashed plant.
+ */
+/datum/plant_gene/trait/squash/proc/squash_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, atom/target)
+ SIGNAL_HANDLER
+
+ var/turf/our_turf = get_turf(target)
+ our_plant.forceMove(our_turf)
+ if(istype(our_plant))
+ if(ispath(our_plant.splat_type, /obj/effect/decal/cleanable/food/plant_smudge))
+ var/obj/plant_smudge = new our_plant.splat_type(our_turf)
+ plant_smudge.name = "[our_plant.name] smudge"
+ if(our_plant.filling_color)
+ plant_smudge.color = our_plant.filling_color
+ else if(our_plant.splat_type)
+ new our_plant.splat_type(our_turf)
+ else
+ var/obj/effect/decal/cleanable/food/plant_smudge/misc_smudge = new(our_turf)
+ misc_smudge.name = "[our_plant.name] smudge"
+ misc_smudge.color = "#82b900"
-/datum/plant_gene/trait/squash/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
- // Squash the plant on slip.
- G.squash(C)
+ our_plant.visible_message(span_warning("[our_plant] is squashed."),span_hear("You hear a smack."))
+ SEND_SIGNAL(our_plant, COMSIG_PLANT_ON_SQUASH, target)
+ our_plant.reagents?.expose(our_turf)
+ for(var/things in our_turf)
+ our_plant.reagents?.expose(things)
+
+ qdel(our_plant)
+
+/*
+ * Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery.
+ * Applies other trait effects (teleporting, etc) to the target by signal.
+ */
/datum/plant_gene/trait/slip
- // Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery.
- // Applies other trait effects (teleporting, etc) to the target by on_slip.
name = "Slippery Skin"
+ description = "Watch your step around this."
+ icon = "person-falling"
rate = 1.6
- examine_line = "It has a very slippery skin."
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
-/datum/plant_gene/trait/slip/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc)
- ..()
- if(istype(G) && ispath(G.trash, /obj/item/grown))
+/datum/plant_gene/trait/slip/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ var/obj/item/reagent_containers/food/snacks/grown/grown_plant = our_plant
+ if(istype(grown_plant) && ispath(grown_plant.trash, /obj/item/grown))
return
- var/obj/item/seeds/seed = G.seed
- var/stun_len = seed.potency * rate
- if(!istype(G, /obj/item/grown/bananapeel) && (!G.reagents || !G.reagents.has_reagent(/datum/reagent/lube)))
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ var/stun_len = our_seed.potency * rate
+
+ if(!istype(our_plant, /obj/item/grown/bananapeel) && (!our_plant.reagents || !our_plant.reagents.has_reagent(/datum/reagent/lube)))
stun_len /= 3
- G.AddComponent(/datum/component/slippery, min(stun_len,140), NONE, CALLBACK(src, PROC_REF(handle_slip), G))
+ our_plant.AddComponent(/datum/component/slippery, min(stun_len, 140), NONE, CALLBACK(src, PROC_REF(handle_slip), our_plant))
+
+/// On slip, sends a signal that our plant was slipped on out.
+/datum/plant_gene/trait/slip/proc/handle_slip(obj/item/reagent_containers/food/snacks/grown/our_plant, mob/slipped_target)
+ SEND_SIGNAL(our_plant, COMSIG_PLANT_ON_SLIP, slipped_target)
-/datum/plant_gene/trait/slip/proc/handle_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/M)
- for(var/datum/plant_gene/trait/T in G.seed.genes)
- T.on_slip(G, M)
+/*
+ * Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten.
+ * Generates sparks on squash.
+ * Small (potency * rate) chance to shock squish or slip target for (potency * rate) damage.
+ * Also affects plant batteries see capatative cell production datum
+ */
/datum/plant_gene/trait/cell_charge
- // Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten.
- // Generates sparks on squash.
- // Small (potency*rate*5) chance to shock squish or slip target for (potency*rate*5) damage.
- // Also affects plant batteries see capatative cell production datum
name = "Electrical Activity"
+ description = "It can electrocute on interaction or recharge batteries when eaten."
+ icon = "bolt"
rate = 0.2
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
-/datum/plant_gene/trait/cell_charge/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
- var/power = G.seed.potency*rate
- if(prob(power))
- C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES)
-
-/datum/plant_gene/trait/cell_charge/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
- if(iscarbon(target))
- var/mob/living/carbon/C = target
- var/power = G.seed.potency*rate
- if(prob(power))
- C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES)
-
-/datum/plant_gene/trait/cell_charge/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
- if(!G.reagents.total_volume)
- var/batteries_recharged = 0
- for(var/obj/item/stock_parts/cell/C in target.GetAllContents())
- var/newcharge = min(G.seed.potency*0.01*C.maxcharge, C.maxcharge)
- if(C.charge < newcharge)
- C.charge = newcharge
- if(isobj(C.loc))
- var/obj/O = C.loc
- O.update_appearance() //update power meters and such
- C.update_appearance()
- batteries_recharged = 1
- if(batteries_recharged)
- to_chat(target, "Your batteries are recharged!")
+/datum/plant_gene/trait/cell_charge/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ if(our_seed.get_gene(/datum/plant_gene/trait/squash))
+ // If we have the squash gene, let that handle slipping
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SQUASH, PROC_REF(zap_target))
+ else
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(zap_target))
+ RegisterSignal(our_plant, COMSIG_FOOD_EATEN, PROC_REF(recharge_cells))
+/*
+ * Zaps the target with a stunning shock.
+ *
+ * our_plant - our source plant, shocking the target
+ * target - the atom being zapped by our plant
+ */
+/datum/plant_gene/trait/cell_charge/proc/zap_target(obj/item/our_plant, atom/target)
+ SIGNAL_HANDLER
+ if(!iscarbon(target))
+ return
+
+ our_plant.investigate_log("zapped [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY)
+ var/mob/living/carbon/target_carbon = target
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ var/power = our_seed.potency * rate
+ if(prob(power))
+ target_carbon.electrocute_act(round(power), our_plant, 1, SHOCK_NOGLOVES)
+
+/*
+ * Recharges every cell the person is holding for a bit based on plant potency.
+ *
+ * our_plant - our source plant, that we consumed to charge the cells
+ * eater - the mob that bit the plant
+ * feeder - the mob that feed the eater the plant
+ */
+/datum/plant_gene/trait/cell_charge/proc/recharge_cells(obj/item/our_plant, mob/living/carbon/eater, mob/feeder)
+ SIGNAL_HANDLER
+
+ to_chat(eater, span_notice("You feel energized as you bite into [our_plant]."))
+ var/batteries_recharged = FALSE
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ for(var/obj/item/stock_parts/cell/found_cell in eater.get_contents())
+ var/newcharge = min(our_seed.potency * 0.01 * found_cell.maxcharge, found_cell.maxcharge)
+ if(found_cell.charge < newcharge)
+ found_cell.charge = newcharge
+ if(isobj(found_cell.loc))
+ var/obj/cell_location = found_cell.loc
+ cell_location.update_appearance() //update power meters and such
+ found_cell.update_appearance()
+ batteries_recharged = TRUE
+ if(batteries_recharged)
+ to_chat(eater, span_notice("Your batteries are recharged!"))
+
+/*
+ * Makes the plant glow. Makes the plant in tray glow, too.
+ * Adds (1.4 + potency * rate) light range and (potency * (rate + 0.01)) light_power to products.
+ */
/datum/plant_gene/trait/glow
- // Makes plant glow. Makes plant in tray glow too.
- // Adds 1 + potency*rate light range and potency*(rate + 0.01) light_power to products.
name = "Bioluminescence"
+ icon = "lightbulb"
rate = 0.03
- examine_line = "It emits a soft glow."
- trait_id = "glow"
+ description = "It emits a soft glow."
+ trait_ids = GLOW_ID
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
var/glow_color = "#C3E381"
/datum/plant_gene/trait/glow/proc/glow_range(obj/item/seeds/S)
@@ -299,15 +455,18 @@
/datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S)
return max(S.potency*(rate + 0.01), 0.1)
-/datum/plant_gene/trait/glow/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc)
+/datum/plant_gene/trait/glow/on_new_plant(obj/item/reagent_containers/food/snacks/grown/G, newloc)
. = ..()
G.light_system = MOVABLE_LIGHT
G.AddComponent(/datum/component/overlay_lighting, glow_range(G.seed), glow_power(G.seed), glow_color)
+/*
+ * Makes plant emit darkness. (Purple-ish shadows)
+ * Adds - (potency * (rate * 0.2)) light power to products.
+ */
/datum/plant_gene/trait/glow/shadow
- //makes plant emit slightly purple shadows
- //adds -potency*(rate*0.2) light power to products
name = "Shadow Emission"
+ icon = "lightbulb-o"
rate = 0.04
glow_color = "#AAD84B"
@@ -348,157 +507,359 @@
name = "Pink Bioluminescence"
glow_color = "#FFB3DA"
-
-
+/*
+ * Makes plant teleport people when squashed or slipped on.
+ * Teleport radius is roughly potency / 10.
+ */
/datum/plant_gene/trait/teleport
- // Makes plant teleport people when squashed or slipped on.
- // Teleport radius is calculated as max(round(potency*rate), 1)
name = "Bluespace Activity"
+ description = "It causes people to teleport on interaction."
+ icon = "right-left"
rate = 0.1
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
-/datum/plant_gene/trait/teleport/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
- if(isliving(target))
- var/teleport_radius = max(round(G.seed.potency / 10), 1)
- var/turf/T = get_turf(target)
- new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
- do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
+/datum/plant_gene/trait/teleport/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ if(our_seed.get_gene(/datum/plant_gene/trait/squash))
+ // If we have the squash gene, let that handle slipping
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SQUASH, PROC_REF(squash_teleport))
+ else
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(slip_teleport))
+
+/*
+ * When squashed, makes the target teleport.
+ *
+ * our_plant - our plant, being squashed, and teleporting the target
+ * target - the atom targeted by the squash
+ */
+/datum/plant_gene/trait/teleport/proc/squash_teleport(obj/item/our_plant, atom/target)
+ SIGNAL_HANDLER
+
+ if(!isliving(target))
+ return
-/datum/plant_gene/trait/teleport/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
- var/teleport_radius = max(round(G.seed.potency / 10), 1)
- var/turf/T = get_turf(C)
- to_chat(C, "You slip through spacetime!")
- do_teleport(C, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
+ our_plant.investigate_log("squash-teleported [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY)
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ var/teleport_radius = max(round(our_seed.potency / 10), 1)
+ var/turf/T = get_turf(target)
+ new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
+ do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
+
+/*
+ * When slipped on, makes the target teleport and either teleport the source again or delete it.
+ *
+ * our_plant - our plant being slipped on
+ * target - the carbon targeted that was slipped and was teleported
+ */
+/datum/plant_gene/trait/teleport/proc/slip_teleport(obj/item/our_plant, mob/living/carbon/target)
+ SIGNAL_HANDLER
+
+ our_plant.investigate_log("slip-teleported [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY)
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ var/teleport_radius = max(round(our_seed.potency / 10), 1)
+ var/turf/T = get_turf(target)
+ to_chat(target, span_warning("You slip through spacetime!"))
+ do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
if(prob(50))
- do_teleport(G, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
+ do_teleport(our_plant, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
else
new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
- qdel(G)
-
+ qdel(our_plant)
+/**
+ * A plant trait that causes the plant's capacity to double.
+ *
+ * When harvested, the plant's individual capacity is set to double it's default.
+ */
/datum/plant_gene/trait/maxchem
- // 2x to max reagents volume.
name = "Densified Chemicals"
+ description = "The reagent volume is doubled."
+ icon = "flask-vial"
rate = 2
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
-/datum/plant_gene/trait/maxchem/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc)
- ..()
- G.reagents.maximum_volume *= rate
+/datum/plant_gene/trait/maxchem/on_new_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+ our_plant.reagents?.maximum_volume *= rate
+
+/// Allows a plant to be harvested multiple times.
/datum/plant_gene/trait/repeated_harvest
name = "Perennial Growth"
-
-/datum/plant_gene/trait/repeated_harvest/can_add(obj/item/seeds/S)
- if(!..())
- return FALSE
- if(istype(S, /obj/item/seeds/replicapod))
- return FALSE
- return TRUE
-
+ description = "It may be harvested multiple times from the same plant."
+ icon = "cubes-stacked"
+ /// Don't allow replica pods to be multi harvested, please.
+ seed_blacklist = list(
+ /obj/item/seeds/replicapod,
+ )
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
+
+/*
+ * Allows a plant to be turned into a battery when cabling is applied.
+ * 100 potency plants are made into 2 mj batteries.
+ * Plants with electrical activity has their capacities massively increased (up to 40 mj at 100 potency)
+ */
/datum/plant_gene/trait/battery
name = "Capacitive Cell Production"
+ description = "It can work like a power cell when wired properly."
+ icon = "car-battery"
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
+ /// The number of cables needed to make a battery.
+ var/cables_needed_per_battery = 5
-/datum/plant_gene/trait/battery/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user)
- if(istype(I, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/C = I
- if(C.use(5))
- to_chat(user, "You add some cable to [G] and slide it inside the battery encasing.")
- var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc)
- pocell.icon_state = G.icon_state
- pocell.maxcharge = G.seed.potency * 20
-
- // The secret of potato supercells!
- var/datum/plant_gene/trait/cell_charge/CG = G.seed.get_gene(/datum/plant_gene/trait/cell_charge)
- if(CG) // Cell charge max is now 40MJ or otherwise known as 400KJ (Same as bluespace powercells)
- pocell.maxcharge *= CG.rate*100
- pocell.charge = pocell.maxcharge
- pocell.name = "[G.name] battery"
- pocell.desc = "A rechargeable plant-based power cell. This one has a rating of [DisplayEnergy(pocell.maxcharge)], and you should not swallow it."
-
- if(G.reagents.has_reagent(/datum/reagent/toxin/plasma, 2))
- pocell.rigged = TRUE
-
- qdel(G)
- else
- to_chat(user, "You need five lengths of cable to make a [G] battery!")
+/datum/plant_gene/trait/battery/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ RegisterSignal(our_plant, COMSIG_PARENT_ATTACKBY, PROC_REF(make_battery))
+
+/*
+ * When a plant with this gene is hit (attackby) with cables, we turn it into a battery.
+ *
+ * our_plant - our plant being hit
+ * hit_item - the item we're hitting the plant with
+ * user - the person hitting the plant with an item
+ */
+/datum/plant_gene/trait/battery/proc/make_battery(obj/item/our_plant, obj/item/hit_item, mob/user)
+ SIGNAL_HANDLER
+
+ if(!istype(hit_item, /obj/item/stack/cable_coil))
+ return
+
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ var/obj/item/stack/cable_coil/cabling = hit_item
+ if(!cabling.use(cables_needed_per_battery))
+ to_chat(user, span_warning("You need five lengths of cable to make a [our_plant] battery!"))
+ return
+ to_chat(user, span_notice("You add some cable to [our_plant] and slide it inside the battery encasing."))
+ var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc)
+ pocell.icon = our_plant.icon // Just in case the plant icons get spread out in different files eventually, this trait won't cause error sprites (also yay downstreams)
+ pocell.icon_state = our_plant.icon_state
+ pocell.maxcharge = our_seed.potency
+ // The secret of potato supercells!
+ var/datum/plant_gene/trait/cell_charge/electrical_gene = our_seed.get_gene(/datum/plant_gene/trait/cell_charge)
+ if(electrical_gene) // Cell charge max is now 40MJ or otherwise known as 400KJ (Same as bluespace power cells)
+ pocell.maxcharge *= (electrical_gene.rate * 100)
+
+ pocell.charge = pocell.maxcharge
+ pocell.name = "[our_plant.name] battery"
+ pocell.desc = "A rechargeable plant-based power cell. This one has a rating of [DisplayEnergy(pocell.maxcharge)], and you should not swallow it."
+
+ if(our_plant.reagents.has_reagent(/datum/reagent/toxin/plasma, 2))
+ pocell.rigged = TRUE
+
+ qdel(our_plant)
+
+/*
+ * Injects a number of chemicals from the plant when you throw it at someone or they slip on it.
+ * At 0 potency it can inject 1 unit of its chemicals, while at 100 potency it can inject 20 units.
+ */
/datum/plant_gene/trait/stinging
name = "Hypodermic Prickles"
+ description = "It stings, passing some reagents in the process."
+ icon = "syringe"
+ trait_ids = REAGENT_TRANSFER_ID
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
+
+/datum/plant_gene/trait/stinging/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(prickles_inject))
+ RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(prickles_inject))
+
+/*
+ * Injects a target with a number of reagents from our plant.
+ *
+ * our_plant - our plant that's injecting someone
+ * target - the atom being hit on thrown or slipping on our plant
+ */
+/datum/plant_gene/trait/stinging/proc/prickles_inject(obj/item/our_plant, atom/target)
+ SIGNAL_HANDLER
-/datum/plant_gene/trait/stinging/on_slip(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
- on_throw_impact(G, target)
+ if(!isliving(target) || !our_plant.reagents?.total_volume)
+ return
-/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
- if(isliving(target) && G.reagents && G.reagents.total_volume)
- var/mob/living/L = target
- if(L.reagents && L.can_inject(null, 0))
- var/injecting_amount = max(1, G.seed.potency*0.2) // Minimum of 1, max of 20
- G.reagents.trans_to(L, injecting_amount, method = INJECT)
- to_chat(target, "You are pricked by [G]!")
- log_combat(G, L, "pricked and attempted to inject reagents from [G] to [L]. Last touched by: [G.fingerprintslast].")
+ var/mob/living/living_target = target
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ if(living_target.reagents && living_target.can_inject())
+ var/injecting_amount = max(1, our_seed.potency * 0.2) // Minimum of 1, max of 20
+ our_plant.reagents.trans_to(living_target, injecting_amount, method = INJECT)
+ to_chat(target, span_danger("You are pricked by [our_plant]!"))
+ log_combat(our_plant, living_target, "pricked and attempted to inject reagents from [our_plant] to [living_target]. Last touched by: [our_plant.fingerprintslast].")
+ our_plant.investigate_log("pricked and injected [key_name(living_target)] and injected [injecting_amount] reagents at [AREACOORD(living_target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY)
+/// Explodes into reagent-filled smoke when squashed.
/datum/plant_gene/trait/smoke
name = "Gaseous Decomposition"
+ description = "It can be smashed to turn its Liquid Contents into smoke."
+ icon = "cloud"
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
-/datum/plant_gene/trait/smoke/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
- var/datum/effect_system/smoke_spread/chem/S = new
- var/splat_location = get_turf(target)
- var/smoke_amount = round(sqrt(G.seed.potency * 0.1), 1)
- S.attach(splat_location)
- S.set_up(G.reagents, smoke_amount, splat_location, 0)
- S.start()
- G.reagents.clear_reagents()
+/datum/plant_gene/trait/smoke/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ RegisterSignal(our_plant, COMSIG_PLANT_ON_SQUASH, PROC_REF(make_smoke))
-/datum/plant_gene/trait/fire_resistance // Lavaland
+/*
+ * Makes a cloud of reagent smoke.
+ *
+ * our_plant - our plant being squashed and smoked
+ * target - the atom the plant was squashed on
+ */
+/datum/plant_gene/trait/smoke/proc/make_smoke(obj/item/reagent_containers/food/snacks/grown/our_plant, atom/target)
+ SIGNAL_HANDLER
+
+ our_plant.investigate_log("made smoke at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY)
+ var/datum/effect_system/smoke_spread/chem/smoke = new
+ var/splat_location = get_turf(target)
+ var/smoke_amount = round(sqrt(our_plant.seed.potency * 0.1), 1)
+ smoke.attach(splat_location)
+ smoke.set_up(our_plant.reagents, smoke_amount, splat_location, 0)
+ smoke.start()
+ our_plant.reagents.clear_reagents()
+
+/// Makes the plant and its seeds fireproof. From lavaland plants.
+/datum/plant_gene/trait/fire_resistance
name = "Fire Resistance"
+ description = "Makes the seeds, plant and produce fireproof."
+ icon = "fire"
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
-/datum/plant_gene/trait/fire_resistance/apply_vars(obj/item/seeds/S)
- if(!(S.resistance_flags & FIRE_PROOF))
- S.resistance_flags |= FIRE_PROOF
+/datum/plant_gene/trait/fire_resistance/on_new_seed(obj/item/seeds/new_seed)
+ if(!(new_seed.resistance_flags & FIRE_PROOF))
+ new_seed.resistance_flags |= FIRE_PROOF
-/datum/plant_gene/trait/fire_resistance/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc)
- if(!(G.resistance_flags & FIRE_PROOF))
- G.resistance_flags |= FIRE_PROOF
+/datum/plant_gene/trait/fire_resistance/on_removed(obj/item/seeds/old_seed)
+ if(old_seed.resistance_flags & FIRE_PROOF)
+ old_seed.resistance_flags &= ~FIRE_PROOF
+
+/datum/plant_gene/trait/fire_resistance/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
-///Invasive spreading lets the plant jump to other trays, the spreadinhg plant won't replace plants of the same type.
+ if(!(our_plant.resistance_flags & FIRE_PROOF))
+ our_plant.resistance_flags |= FIRE_PROOF
+
+/// Invasive spreading lets the plant jump to other trays, and the spreading plant won't replace plants of the same type.
/datum/plant_gene/trait/invasive
name = "Invasive Spreading"
+ description = "It attempts to spread around if not contained."
+ icon = "virus"
+ mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE
+
+/datum/plant_gene/trait/invasive/on_new_seed(obj/item/seeds/new_seed)
+ RegisterSignal(new_seed, COMSIG_SEED_ON_GROW, PROC_REF(try_spread))
+
+/datum/plant_gene/trait/invasive/on_removed(obj/item/seeds/old_seed)
+ UnregisterSignal(old_seed, COMSIG_SEED_ON_GROW)
+
+/*
+ * Attempt to find an adjacent tray we can spread to.
+ *
+ * our_seed - our plant's seed, what spreads to other trays
+ * our_tray - the hydroponics tray we're currently in
+ */
+/datum/plant_gene/trait/invasive/proc/try_spread(obj/item/seeds/our_seed, obj/machinery/hydroponics/our_tray)
+ SIGNAL_HANDLER
+
+ if(prob(100 - (5 * (11 - our_seed.production))))
+ return
-/datum/plant_gene/trait/invasive/on_grow(obj/machinery/hydroponics/H)
for(var/step_dir in GLOB.alldirs)
- var/obj/machinery/hydroponics/HY = locate() in get_step(H, step_dir)
- if(HY && prob(15))
- if(HY.myseed) // check if there is something in the tray.
- if(HY.myseed.type == H.myseed.type && HY.dead != 0)
- continue //It should not destroy its owm kind.
- qdel(HY.myseed)
- HY.myseed = null
- HY.myseed = H.myseed.Copy()
- HY.age = 0
- HY.dead = 0
- HY.plant_health = HY.myseed.endurance
- HY.lastcycle = world.time
- HY.harvest = 0
- HY.weedlevel = 0 // Reset
- HY.pestlevel = 0 // Reset
- HY.update_appearance()
- HY.visible_message("The [H.myseed.plantname] spreads!")
-
-/datum/plant_gene/trait/plant_type // Parent type
+ var/obj/machinery/hydroponics/spread_tray = locate() in get_step(our_tray, step_dir)
+ if(spread_tray && prob(15))
+ if(!our_tray.Adjacent(spread_tray))
+ continue //Don't spread through things we can't go through.
+
+ spread_seed(spread_tray, our_tray)
+
+/*
+ * Actually spread the plant to the tray we found in try_spread.
+ *
+ * target_tray - the tray we're spreading to
+ * origin_tray - the tray we're currently in
+ */
+/datum/plant_gene/trait/invasive/proc/spread_seed(obj/machinery/hydroponics/target_tray, obj/machinery/hydroponics/origin_tray)
+ if(target_tray.myseed) // Check if there's another seed in the next tray.
+ if(target_tray.myseed.type == origin_tray.myseed.type && target_tray.dead != FALSE)
+ return FALSE // It should not destroy its own kind.
+ target_tray.visible_message(span_warning("The [target_tray.myseed.plantname] is overtaken by [origin_tray.myseed.plantname]!"))
+ QDEL_NULL(target_tray.myseed)
+ target_tray.myseed = origin_tray.myseed.Copy()
+ target_tray.age = 0
+ target_tray.plant_health = target_tray.myseed.endurance
+ target_tray.lastcycle = world.time
+ target_tray.weedlevel = 0
+ target_tray.pestlevel = 0
+ target_tray.visible_message(span_warning("The [origin_tray.myseed.plantname] spreads!"))
+ if(target_tray.myseed)
+ target_tray.name = "[initial(target_tray.name)] ([target_tray.myseed.plantname])"
+ else
+ target_tray.name = initial(target_tray.name)
+
+ return TRUE
+
+/// Makes the plant embed on thrown impact.
+/datum/plant_gene/trait/sticky
+ name = "Prickly Adhesion"
+ description = "It sticks to people when thrown, also passing reagents if stingy."
+ icon = "bandage"
+ trait_ids = THROW_IMPACT_ID
+
+/datum/plant_gene/trait/sticky/on_new_plant(obj/item/our_plant, newloc)
+ . = ..()
+ if(!.)
+ return
+
+ var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
+ if(our_seed.get_gene(/datum/plant_gene/trait/stinging))
+ our_plant.embedding = EMBED_POINTY
+ else
+ our_plant.embedding = EMBED_HARMLESS
+ our_plant.updateEmbedding()
+ our_plant.throwforce = (our_seed.potency/20)
+
+/datum/plant_gene/trait/carnivory
+ name = "Obligate Carnivory"
+ description = "Pests have positive effect on the plant health."
+ icon = "spider"
+
+/// Plant type traits. Incompatible with one another.
+/datum/plant_gene/trait/plant_type
name = "you shouldn't see this"
- trait_id = "plant_type"
+ trait_ids = PLANT_TYPE_ID
+ mutability_flags = PLANT_GENE_EXTRACTABLE
+/// Weeds don't get annoyed by weeds in their tray.
/datum/plant_gene/trait/plant_type/weed_hardy
name = "Weed Adaptation"
+ description = "It is a weed that needs no nutrients and doesn't suffer from other weeds."
+ icon = "seedling"
+/// Mushrooms need less light and have a minimum yield.
/datum/plant_gene/trait/plant_type/fungal_metabolism
name = "Fungal Vitality"
+ description = "It is a mushroom that needs no water, less light and can't be overtaken by weeds."
+ icon = "droplet-slash"
-/datum/plant_gene/trait/plant_type/crystal // WS edit - Crystals
- name = "Crystalline Growing Patterns"
-
+/// Currently unused and does nothing. Appears in strange seeds.
/datum/plant_gene/trait/plant_type/alien_properties
name ="?????"
+ icon = "reddit-alien"
-/datum/plant_gene/trait/plant_type/carnivory
- name = "Obligate Carnivory"
+/datum/plant_gene/trait/plant_type/crystal
+ name = "Crystalline Growing Patterns"
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index ad24dccff43d..65f47357899a 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -40,7 +40,7 @@
var/research = 0 // Defines "discovery value", which will give a one-time point payout if a seed is given to an R&D console. Seed discovery is determined on a ship-by-ship basis.
var/seed_flags = MUTATE_EARLY // Determines if a plant is allowed to mutate early at 30+ instability
-/obj/item/seeds/Initialize(mapload, nogenes = 0)
+/obj/item/seeds/Initialize(mapload, nogenes = FALSE)
. = ..()
pixel_x = base_pixel_y + rand(-8, 8)
pixel_y = base_pixel_x + rand(-8, 8)
@@ -66,10 +66,14 @@
genes += new /datum/plant_gene/core/potency(potency)
genes += new /datum/plant_gene/core/instability(instability)
- for(var/p in genes)
- if(ispath(p))
- genes -= p
- genes += new p
+ for(var/plant_gene in genes)
+ if(ispath(plant_gene))
+ genes -= plant_gene
+ genes += new plant_gene
+
+ // Go through all traits in their genes and call on_new_seed from them.
+ for(var/datum/plant_gene/trait/traits in genes)
+ traits.on_new_seed(src)
for(var/reag_id in reagents_add)
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
@@ -557,3 +561,21 @@
genes += P
else
qdel(P)
+
+/*
+ * Both `/item/food/grown` and `/item/grown` implement a seed variable which tracks
+ * plant statistics, genes, traits, etc. This proc gets the seed for either grown food or
+ * grown inedibles and returns it, or returns null if it's not a plant.
+ *
+ * Returns an `/obj/item/seeds` ref for grown foods or grown inedibles.
+ * - returned seed CAN be null in weird cases but in all applications it SHOULD NOT be.
+ * Returns null if it is not a plant.
+ */
+/obj/item/proc/get_plant_seed()
+ return null
+
+/obj/item/reagent_containers/food/snacks/grown/get_plant_seed()
+ return seed
+
+/obj/item/grown/get_plant_seed()
+ return seed
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index b6073d4c86a2..3e0bed238bec 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -135,6 +135,8 @@
nodamage = TRUE
damage = 0 //We're just here to mark people. This is still a melee weapon.
damage_type = BRUTE
+ wall_damage_flags = PROJECTILE_BONUS_DAMAGE_MINERALS
+ wall_damage_override = MINERAL_WALL_INTEGRITY
flag = "bomb"
range = 6
log_override = TRUE
@@ -152,7 +154,6 @@
if(ismineralturf(target_turf))
var/turf/closed/mineral/M = target_turf
new /obj/effect/temp_visual/kinetic_blast(M)
- M.gets_drilled(firer, TRUE)
..()
//outdated Nanotrasen prototype of the crusher. Incredibly heavy, but the blade was made at a premium. //to alter this I had to duplicate some code, big moment.
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index d38a3ce8b55b..a0548a2cb9f1 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -17,6 +17,7 @@
toolspeed = 0.5
usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
attack_verb = list("hit", "pierced", "sliced", "attacked")
+ wall_decon_damage = MINERAL_WALL_INTEGRITY
/obj/item/pickaxe/rusted
name = "rusty pickaxe"
@@ -24,6 +25,7 @@
attack_verb = list("ineffectively hit")
force = 1
throwforce = 1
+ wall_decon_damage = 50
/obj/item/pickaxe/mini
name = "compact pickaxe"
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index a2b48d9319b9..2af5515e47a7 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -933,6 +933,8 @@
range = 20
damage = 30
damage_type = BRUTE
+ wall_damage_flags = PROJECTILE_BONUS_DAMAGE_MINERALS
+ wall_damage_override = MINERAL_WALL_INTEGRITY
icon = 'icons/obj/projectiles.dmi'
icon_state = "spur_high"
var/skip = FALSE //this is the hackiest thing ive ever done but i dont know any other solution other than deparent the spur projectile
@@ -994,9 +996,6 @@
spawn(15)
target.overlays -= impact
playsound(loc, impact_sound, 30)
- if(istype(target,/turf/closed/mineral))
- var/turf/closed/mineral/M = target
- M.gets_drilled()
..()
/obj/item/ammo_casing/energy/spur/spur
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index cd588a89b9ce..b7c5b9877120 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -270,7 +270,7 @@
final_string += get_gender()
if(prefixed)
- final_string = "\A [final_string]"
+ final_string = "\improper [final_string]"
if(lowercase)
final_string = lowertext(final_string)
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 25e045064a44..cbaa988aa5a8 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -40,6 +40,45 @@
return s_store
return null
+/mob/living/carbon/human/get_slot_by_item(obj/item/looking_for)
+ if(looking_for == belt)
+ return ITEM_SLOT_BELT
+
+ if(looking_for == wear_id)
+ return ITEM_SLOT_ID
+
+ if(looking_for == ears)
+ return ITEM_SLOT_EARS
+
+ if(looking_for == glasses)
+ return ITEM_SLOT_EYES
+
+ if(looking_for == gloves)
+ return ITEM_SLOT_GLOVES
+
+ if(looking_for == head)
+ return ITEM_SLOT_HEAD
+
+ if(looking_for == shoes)
+ return ITEM_SLOT_FEET
+
+ if(looking_for == wear_suit)
+ return ITEM_SLOT_OCLOTHING
+
+ if(looking_for == w_uniform)
+ return ITEM_SLOT_ICLOTHING
+
+ if(looking_for == r_store)
+ return ITEM_SLOT_RPOCKET
+
+ if(looking_for == l_store)
+ return ITEM_SLOT_LPOCKET
+
+ if(looking_for == s_store)
+ return ITEM_SLOT_SUITSTORE
+
+ return ..()
+
/mob/living/carbon/human/proc/get_all_slots()
. = get_head_slots() | get_body_slots()
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 91169299afba..f8495f783e36 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -1,5 +1,5 @@
/datum/species/moth
- name = "\improper Mothperson"
+ name = "\improper Moth"
id = SPECIES_MOTH
default_color = "00FF00"
species_traits = list(LIPS, NOEYESPRITES, TRAIT_ANTENNAE, HAIR, EMOTE_OVERLAY)
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index daa645a662a8..d5ce34ca412f 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -4,7 +4,10 @@
id = SPECIES_POD
default_color = "59CE00"
species_traits = list(MUTCOLORS,EYECOLOR)
- inherent_traits = list(TRAIT_ALWAYS_CLEAN)
+ inherent_traits = list(
+ TRAIT_ALWAYS_CLEAN,
+ TRAIT_PLANT_SAFE,
+ )
inherent_factions = list("plants", "vines")
fixed_mut_color = "59CE00"
attack_verb = "slash"
diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm
index 29717fd9408b..7485c591809d 100644
--- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm
@@ -52,6 +52,18 @@
caliber = ".38"
max_ammo = 12
+/obj/item/ammo_box/magazine/internal/shot/winchester/absolution
+ name = "absolution internal magazine"
+ ammo_type = /obj/item/ammo_casing/a357
+ caliber = ".357"
+ max_ammo = 8
+
+/obj/item/ammo_box/magazine/internal/shot/winchester/conflagration
+ name = "conflagration internal magazine"
+ ammo_type = /obj/item/ammo_casing/shotgun/buckshot
+ caliber = "12ga"
+ max_ammo = 5
+
/obj/item/ammo_box/magazine/internal/shot/beacon
name = "beacon internal magazine"
ammo_type = /obj/item/ammo_casing/a4570
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 4b0e694d75e5..c5bfb5facbcf 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -691,8 +691,8 @@
. = ..()
if(!has_safety)
return
-
- if(src != user.get_active_held_item())
+ // only checks for first level storage e.g pockets, hands, suit storage, belts, nothing in containers
+ if(!in_contents_of(user))
return
if(isliving(user) && in_range(src, user))
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index 66d5ffcdfc8a..eb8ea3355fe9 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -640,6 +640,70 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq)
item_state = "flamingbolt_sawn"
mob_overlay_state = item_state
+/obj/item/gun/ballistic/shotgun/flamingarrow/absolution
+ name = "HP Absolution"
+ base_icon_state = "absolution"
+ icon_state = "absolution"
+ item_state = "absolution"
+ fire_sound = 'sound/weapons/gun/revolver/shot.ogg'
+ desc = "A large lever-action rifle with hand-stamped Hunter's Pride marks on the receiver and an 8 round ammunition capacity. More powerful than the Flaming Arrow, the Absolution is a popular pick for hunting larger fauna like bears and goliaths, especially when a bolt action's slower rate of fire would be a liability. Chambered in .357."
+ sawn_desc = "A large lever-action rifle, sawn down for portability. It looks much cooler, but you should probably be using a revolver..."
+ mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester/absolution
+
+/obj/item/gun/ballistic/shotgun/flamingarrow/absolution/sawoff(mob/user)
+ . = ..()
+ if(.)
+ var/obj/item/ammo_box/magazine/internal/tube = magazine
+ tube.max_ammo = 8
+
+ item_state = "illestren_sawn"
+ mob_overlay_state = item_state
+ weapon_weight = WEAPON_MEDIUM
+
+ wield_slowdown = 0.25
+ wield_delay = 0.2 SECONDS
+
+ spread = 4
+ spread_unwielded = 12
+
+ recoil = 0
+ recoil_unwielded = 3
+
+/obj/item/gun/ballistic/shotgun/flamingarrow/absolution/no_mag
+ spawnwithmagazine = FALSE
+
+/obj/item/gun/ballistic/shotgun/flamingarrow/conflagration
+ name = "HP Conflagration"
+ base_icon_state = "conflagration"
+ icon_state = "conflagration"
+ item_state = "conflagration"
+ fire_sound = 'sound/weapons/gun/shotgun/shot.ogg'
+ desc = "A lightweight lever-action shotgun with a 5 round ammunition capacity. The lever action allows it to be cycled quickly and acurrately. In theory, you could ever operate it one-handed. Chambered in 12g."
+ sawn_desc = "A lever action shotgun that's been sawed down for portability. The recoil makes it mostly useless outside of point-blank range, but it hits hard for its size and, more importantly, can be flipped around stylishly."
+ mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester/conflagration
+
+/obj/item/gun/ballistic/shotgun/flamingarrow/conflagration/sawoff(mob/user)
+ . = ..()
+ if(.)
+ var/obj/item/ammo_box/magazine/internal/tube = magazine
+ tube.max_ammo = 5
+
+ item_state = "beacon_factory_sawn"
+ mob_overlay_state = item_state
+ weapon_weight = WEAPON_MEDIUM
+
+ wield_slowdown = 0.25
+ wield_delay = 0.2 SECONDS
+
+ spread = 4
+ spread_unwielded = 12
+
+ recoil = 0
+ recoil_unwielded = 3
+
+/obj/item/gun/ballistic/shotgun/flamingarrow/conflagration/no_mag
+ spawnwithmagazine = FALSE
+
//Elephant Gun
/obj/item/gun/ballistic/shotgun/doublebarrel/twobore
name = "HP Huntsman"
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 2ca71649a6f7..5d0e8d54e4e2 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -192,6 +192,8 @@
icon_state = null
damage = 20
damage_type = BRUTE
+ wall_damage_flags = PROJECTILE_BONUS_DAMAGE_MINERALS
+ wall_damage_override = MINERAL_WALL_INTEGRITY
flag = "bomb"
range = 3
log_override = TRUE
@@ -235,8 +237,6 @@
for(var/obj/item/borg/upgrade/modkit/M in mods)
M.projectile_strike(src, target_turf, target, kinetic_gun)
if(ismineralturf(target_turf))
- var/turf/closed/mineral/M = target_turf
- M.gets_drilled(firer, TRUE)
if(iscarbon(firer))
var/mob/living/carbon/C = firer
var/skill_modifier = C?.mind.get_skill_modifier(/datum/skill/mining, SKILL_SPEED_MODIFIER)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 09de7690b5ea..c63c8358e2de 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -110,7 +110,7 @@
/obj/item/gun/energy/plasmacutter
name = "plasma cutter"
- desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off xenos! Or, you know, mine stuff."
+ desc = "An engineering tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off xenos! Or, you know, cut through walls."
icon_state = "plasmacutter"
item_state = "plasmacutter"
ammo_type = list(/obj/item/ammo_casing/energy/plasma)
@@ -123,6 +123,7 @@
heat = 3800
usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg')
tool_behaviour = TOOL_WELDER
+ wall_decon_damage = 200
toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders
internal_cell = TRUE //so you don't cheese through the need for plasma - WS EDIT
var/charge_weld = 25 //amount of charge used up to start action (multiplied by amount) and per progress_flash_divisor ticks of welding
@@ -169,6 +170,21 @@
return TRUE
+/obj/item/gun/energy/plasmacutter/attack(mob/living/carbon/human/target, mob/user)
+ if(!istype(target))
+ return ..()
+ var/obj/item/bodypart/attackedLimb = target.get_bodypart(check_zone(user.zone_selected))
+ if(!attackedLimb || IS_ORGANIC_LIMB(attackedLimb) || (user.a_intent == INTENT_HARM))
+ return ..()
+ if(!tool_start_check(user, amount = 1))
+ return TRUE
+ user.visible_message("[user] starts to fix some of the dents on [target]'s [parse_zone(attackedLimb.body_zone)].",
+ "You start fixing some of the dents on [target == user ? "your" : "[target]'s"] [parse_zone(attackedLimb.body_zone)].")
+ if(!use_tool(target, user, delay = (target == user ? 5 SECONDS : 0.5 SECONDS), amount = 1, volume = 25))
+ return TRUE
+ item_heal_robotic(target, user, brute_heal = 15, burn_heal = 0)
+ return TRUE
+
/obj/item/gun/energy/plasmacutter/use(amount)
return (!QDELETED(cell) && cell.use(amount ? amount * charge_weld : charge_weld))
@@ -187,6 +203,9 @@
force = 15
ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv)
+ wall_decon_damage = 200
+ toolspeed = 0.4
+
/obj/item/gun/energy/wormhole_projector
name = "bluespace wormhole projector"
desc = "A projector that emits high density quantum-coupled bluespace beams." //WS Edit - Any anomaly core for phazons
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 66adeb53ac59..ea640e1a7219 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -156,6 +156,10 @@
var/impact_effect_type //what type of impact effect to show when hitting something
var/log_override = FALSE //is this type spammed enough to not log? (KAs)
+ // if the projectile has the matching flags when hitting a wall, it deals it's override damage instead
+ var/wall_damage_flags = PROJECTILE_BONUS_DAMAGE_NONE
+ var/wall_damage_override = 0
+
///If defined, on hit we create an item of this type then call hitby() on the hit target with this, mainly used for embedding items (bullets) in targets
var/shrapnel_type
///If TRUE, hit mobs even if they're on the floor and not our target
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 3aada5ddcb41..c46a4c6cb2f9 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -133,6 +133,8 @@
name = "pulse"
icon_state = "u_laser"
damage = 40
+ wall_damage_flags = PROJECTILE_BONUS_DAMAGE_MINERALS | PROJECTILE_BONUS_DAMAGE_WALLS | PROJECTILE_BONUS_DAMAGE_WALLS
+ wall_damage_override = 200
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
light_color = LIGHT_COLOR_BLUE
tracer_type = /obj/effect/projectile/tracer/pulse
diff --git a/code/modules/projectiles/projectile/bullets/lmg.dm b/code/modules/projectiles/projectile/bullets/lmg.dm
index 79a9b2feb07c..71da70475dde 100644
--- a/code/modules/projectiles/projectile/bullets/lmg.dm
+++ b/code/modules/projectiles/projectile/bullets/lmg.dm
@@ -67,7 +67,7 @@
/obj/projectile/bullet/mm712x82/hp
name = "7.12x82mm hollow point bullet"
- damage = 45
+ damage = 40
armour_penetration = -20
/obj/projectile/bullet/incendiary/mm712x82
diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm
index 12a619d5fbc8..37af59c1de57 100644
--- a/code/modules/projectiles/projectile/bullets/pistol.dm
+++ b/code/modules/projectiles/projectile/bullets/pistol.dm
@@ -16,7 +16,7 @@
/obj/projectile/bullet/c9mm/hp
name = "9mm hollow point bullet"
- damage = 40
+ damage = 35
armour_penetration = -50
/obj/projectile/bullet/incendiary/c9mm
@@ -49,7 +49,7 @@
/obj/projectile/bullet/c10mm/hp
name = "10mm hollow point bullet"
- damage = 45
+ damage = 40
armour_penetration = -50
/obj/projectile/bullet/incendiary/c10mm
@@ -82,7 +82,7 @@
/obj/projectile/bullet/c45/hp
name = ".45 hollow point bullet"
- damage = 45
+ damage = 40
armour_penetration = -50
/obj/projectile/bullet/incendiary/c45
diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm
index 0c62fe5b3d4f..dede2ce0d7ce 100644
--- a/code/modules/projectiles/projectile/bullets/revolver.dm
+++ b/code/modules/projectiles/projectile/bullets/revolver.dm
@@ -6,7 +6,7 @@
/obj/projectile/bullet/a50AE/hp
name = ".50 AE hollow point bullet"
- damage = 60
+ damage = 55
armour_penetration = -50
// .38 (Colt Detective Special & Winchester)
@@ -110,7 +110,7 @@
/obj/projectile/bullet/a357/hp
name = ".357 hollow point bullet"
- damage = 50
+ damage = 45
armour_penetration = -50
ricochet_chance = 0 //mushroom on impact, no bounces
@@ -133,7 +133,7 @@
/obj/projectile/bullet/a4570/hp
name = ".45-70 hollow point bullet"
- damage = 60 //it's the pre-nerf .357 with less armor pen
+ damage = 55 //it's ALMOST the pre-nerf .357 with less armor pen
armour_penetration = -50
/obj/projectile/bullet/a4570/explosive //for extra oof
@@ -167,5 +167,5 @@
/obj/projectile/bullet/a44roum/hp
name = ".44 roumain bullet"
- damage = 45
+ damage = 40
armour_penetration = -20
diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm
index dddfb59d26e6..690f02d6b5c5 100644
--- a/code/modules/projectiles/projectile/bullets/rifle.dm
+++ b/code/modules/projectiles/projectile/bullets/rifle.dm
@@ -16,7 +16,7 @@
/obj/projectile/bullet/a8_50rhp
name = "8x50mmR bullet"
speed = 0.3
- damage = 55
+ damage = 49
armour_penetration = 0
// .300 Magnum (Smile Rifle)
diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm
index b398731cfd6c..d957ad924572 100644
--- a/code/modules/projectiles/projectile/special/plasma.dm
+++ b/code/modules/projectiles/projectile/special/plasma.dm
@@ -5,32 +5,21 @@
damage = 5
range = 4
dismemberment = 20
+ /// chance that the plasmablast ruins the ore
+ var/slag_chance = 33
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
- var/mine_range = 3 //mines this many additional tiles of rock
tracer_type = /obj/effect/projectile/tracer/plasma_cutter
muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter
impact_type = /obj/effect/projectile/impact/plasma_cutter
-/obj/projectile/plasma/on_hit(atom/target)
- . = ..()
- if(ismineralturf(target))
- var/turf/closed/mineral/M = target
- M.gets_drilled(firer, FALSE)
- if(mine_range)
- mine_range--
- range++
- if(range > 0)
- return BULLET_ACT_FORCE_PIERCE
-
/obj/projectile/plasma/adv
damage = 7
range = 5
- mine_range = 5
+ slag_chance = 20
/obj/projectile/plasma/adv/mech
damage = 10
range = 9
- mine_range = 3
/obj/projectile/plasma/turret
//Between normal and advanced for damage, made a beam so not the turret does not destroy glass
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 0e3e83ac287c..c2769bd88f85 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -295,7 +295,7 @@
display_name = "Basic Plasma Research"
description = "Research into the mysterious and dangerous substance, plasma."
prereq_ids = list("engineering")
- design_ids = list("mech_generator")
+ design_ids = list("mech_generator", "plasmacutter")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -304,7 +304,7 @@
display_name = "Advanced Plasma Research"
description = "Research on how to fully exploit the power of plasma."
prereq_ids = list("basic_plasma")
- design_ids = list("mech_plasma_cutter")
+ design_ids = list("mech_plasma_cutter","plasmacutter_adv")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -550,7 +550,7 @@
display_name = "Mining Technology"
description = "Better than Efficiency V."
prereq_ids = list("engineering", "basic_plasma")
- design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor", "cargoexpress", "plasmacutter", "mecha_kineticgun", "weatherradio")//e a r l y g a m e)
+ design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor", "cargoexpress", "mecha_kineticgun", "weatherradio")//e a r l y g a m e)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -559,7 +559,7 @@
display_name = "Advanced Mining Technology"
description = "Efficiency Level 127" //dumb mc references
prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma")
- design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv")
+ design_ids = list("drill_diamond", "jackhammer", "hypermod")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
// WS Edit Start - Yeet The BSM
diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
index 7a26946f0ddc..e9ca8f3d4093 100644
--- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -114,7 +114,7 @@
anchored = TRUE
locked = TRUE
breakout_time = 900
- cutting_tool = /obj/item/shovel
+ cutting_tool = TOOL_SHOVEL
var/lead_tomb = FALSE
var/first_open = FALSE
@@ -142,7 +142,7 @@
/obj/structure/closet/crate/grave/tool_interact(obj/item/S, mob/living/carbon/user)
if(user.a_intent == INTENT_HELP) //checks to attempt to dig the grave, must be done on help intent only.
if(!opened)
- if(istype(S,cutting_tool) && S.tool_behaviour == TOOL_SHOVEL)
+ if(S.tool_behaviour == cutting_tool)
to_chat(user, "You start start to dig open \the [src] with \the [S]...")
if (do_after(user,20, target = src))
opened = TRUE
@@ -164,7 +164,7 @@
return 1
else if((user.a_intent != INTENT_HELP) && opened) //checks to attempt to remove the grave entirely.
- if(istype(S,cutting_tool) && S.tool_behaviour == TOOL_SHOVEL)
+ if(S.tool_behaviour == cutting_tool)
to_chat(user, "You start to remove \the [src] with \the [S].")
if (do_after(user,15, target = src))
to_chat(user, "You remove \the [src] completely.")
diff --git a/html/changelogs/AutoChangeLog-pr-3063.yml b/html/changelogs/AutoChangeLog-pr-3063.yml
new file mode 100644
index 000000000000..f28b2678df07
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3063.yml
@@ -0,0 +1,6 @@
+author: FalloutFalcon, MrMelbert, Coiax
+changes:
+ - {code_imp: ported alot tg botany code along with gene desc and icons to be used
+ more soon}
+ - {refactor: moves most plant effects into genetics stuff}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3145.yml b/html/changelogs/AutoChangeLog-pr-3145.yml
new file mode 100644
index 000000000000..54b6ff43d1c4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3145.yml
@@ -0,0 +1,17 @@
+author: Gristlebee
+changes:
+ - {rscadd: Welders/Plasmacutters now deal damage to wall integrity to decon}
+ - {rscadd: Plasmacutters are now engineering tools and fit in toolbelts. They can
+ damage ores into slag if used to mine. They are now researched with plasma technology
+ and advanced plasma technology.}
+ - {rscadd: Plasmacutters to cargo for 1250}
+ - {rscadd: 'Adds plasmacutters to the Mudskipper, Riggs, Talos, Gecko, Heron, Osprey,
+ Ranger, Hyena, Komodo, Shetland and Twinkleshine'}
+ - {rscdel: Plasmacutters extra mining range}
+ - {bugfix: Plasmacutters can repair prosthetic limbs like welders}
+ - {code_imp: Moves damage behavior of concrete walls to closed turfs. Basic walls
+ are now repaired with a welder.}
+ - {code_imp: R-walls d-state tied to their integrity. R-walls can be deconstructed
+ with plasmacutters.}
+ - {code_imp: Crate decon checks for tool behavior rather than a istype check}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3326.yml b/html/changelogs/AutoChangeLog-pr-3326.yml
new file mode 100644
index 000000000000..6b00b63982de
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3326.yml
@@ -0,0 +1,4 @@
+author: zimon9
+changes:
+ - {rscadd: Adds a rubbershot box to the outpost market}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3334.yml b/html/changelogs/AutoChangeLog-pr-3334.yml
new file mode 100644
index 000000000000..c691d4edd3b2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3334.yml
@@ -0,0 +1,4 @@
+author: Apogee-dev
+changes:
+ - {balance: Reduced hollowpoint damage by 5 (and 8mm Hollowpoint by 6)}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3335.yml b/html/changelogs/AutoChangeLog-pr-3335.yml
new file mode 100644
index 000000000000..b4777b406644
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3335.yml
@@ -0,0 +1,5 @@
+author: Apogee-dev
+changes:
+ - {balance: Made security hardsuits faster and blood-red hardsuits slower}
+ - {balance: Normalized some weird hardsuit speed outliers}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3340.yml b/html/changelogs/AutoChangeLog-pr-3340.yml
new file mode 100644
index 000000000000..928a8e75574e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3340.yml
@@ -0,0 +1,4 @@
+author: Apogee-dev
+changes:
+ - {bugfix: NT captain gloves no longer lie about shockproofing}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3342.yml b/html/changelogs/AutoChangeLog-pr-3342.yml
new file mode 100644
index 000000000000..6bc579cb368b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3342.yml
@@ -0,0 +1,4 @@
+author: Gristlebee
+changes:
+ - {rscadd: Gun safeties can be toggled from 1st level storage slots.}
+delete-after: true
diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml
index 8d4c6d6e1443..a38a7c95fe2e 100644
--- a/html/changelogs/archive/2024-09.yml
+++ b/html/changelogs/archive/2024-09.yml
@@ -14,3 +14,19 @@
of creature burrows
zimon9:
- bugfix: fixed typepath for 10mm rubber rounds
+2024-09-07:
+ Martinpachu:
+ - rscadd: To-do once i get the proper names and all
+ Zevotech:
+ - bugfix: The "pulse carbine" in the sandplanet saloon has a sprite again
+ - tweak: Added some extra mobs to the sandplanet saloon to balance out the money
+ in it
+ meemofcourse:
+ - spellcheck: Human generic names (the ones that show up when you examine someone)
+ will be prefixed consistently
+2024-09-09:
+ Gristlebee:
+ - rscadd: Adds the Mauler, Spitter, and Pounder to the black market
+ ZephyrTFA:
+ - server: CDN fully operational again after noticing an incorrectly absolute relative
+ path
diff --git a/html/font-awesome/README.MD b/html/font-awesome/README.MD
index 7d693c36f031..ba9121311d40 100644
--- a/html/font-awesome/README.MD
+++ b/html/font-awesome/README.MD
@@ -1,6 +1,6 @@
Due to the fact browse_rsc can't create subdirectories, every time you update font-awesome you'll need to change relative webfont references in all.min.css
eg ../webfonts/fa-regular-400.ttf => fa-regular-400.ttf (or whatever you call it in asset datum)
-Second change is ripping out file types other than woff and eot(ie8) from the css
+Second change is ripping out file types other than ~~ woff and eot(ie8)~~ ttf from the css
-Finally, removing brand related css.
\ No newline at end of file
+Finally, removing brand related css.
diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css
index 5c4407984031..7a283f087ca9 100644
--- a/html/font-awesome/css/all.min.css
+++ b/html/font-awesome/css/all.min.css
@@ -1,4377 +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: 0.75em;
- vertical-align: -0.0667em;
-}
-.fa-xs {
- font-size: 0.75em;
-}
-.fa-sm {
- font-size: 0.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: 0.08em solid #eee;
- border-radius: 0.1em;
- padding: 0.2em 0.25em 0.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: 0.3em;
-}
-.fa.fa-pull-right,
-.fab.fa-pull-right,
-.fal.fa-pull-right,
-.far.fa-pull-right,
-.fas.fa-pull-right {
- margin-left: 0.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:"Font Awesome 6 Free";font-weight: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: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:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc( 2em*-1);position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border-radius:.1em;border:.08em solid #eee;padding:.2em .25em .15em}.fa-pull-left{float:left;margin-right:.3em}.fa-pull-right{float:right;margin-left:.3em}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(.28,.84,.42,1);animation-timing-function:cubic-bezier(.28,.84,.42,1)}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(.4,0,.6,1);animation-timing-function:cubic-bezier(.4,0,.6,1)}.fa-beat-fade,.fa-fade{-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(.4,0,.6,1);animation-timing-function:cubic-bezier(.4,0,.6,1)}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.fa-shake,.fa-spin{-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function: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:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:steps(8);animation-timing-function: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(1.25);transform:scale(1.25)}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(1.25);transform:scale(1.25)}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(1.1,.9) translateY(0);transform:scale(1.1,.9) translateY(0)}30%{-webkit-transform:scale(.9,1.1) translateY(-.5em);transform:scale(.9,1.1) translateY(-.5em)}50%{-webkit-transform:scale(1.05,.95) translateY(0);transform:scale(1.05,.95) translateY(0)}57%{-webkit-transform:scale(1) translateY(-.125em);transform:scale(1) translateY(-.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(1.1,.9) translateY(0);transform:scale(1.1,.9) translateY(0)}30%{-webkit-transform:scale(.9,1.1) translateY(-.5em);transform:scale(.9,1.1) translateY(-.5em)}50%{-webkit-transform:scale(1.05,.95) translateY(0);transform:scale(1.05,.95) translateY(0)}57%{-webkit-transform:scale(1) translateY(-.125em);transform:scale(1) translateY(-.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:.4}}@keyframes fa-fade{50%{opacity:.4}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:.4;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(1.125);transform:scale(1.125)}}@keyframes fa-beat-fade{0%,to{opacity:.4;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(1.125);transform:scale(1.125)}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(0,1,0,-180deg);transform:rotate3d(0,1,0,-180deg)}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(0,1,0,-180deg);transform:rotate3d(0,1,0,-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{-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-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(none);transform:rotate(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:auto}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#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 9316727d18d3..2f6252b52a14 100644
--- a/html/font-awesome/css/v4-shims.min.css
+++ b/html/font-awesome/css/v4-shims.min.css
@@ -1,1694 +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}
\ No newline at end of file
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 d62be2fad885..000000000000
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 000000000000..c5ac00957778
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 43b1a9ae49db..000000000000
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 c77baa8d46ab..000000000000
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 000000000000..43ba1cc7d94f
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 77c1786227f5..000000000000
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 000000000000..243bc25bd5ee
Binary files /dev/null and b/html/font-awesome/webfonts/fa-v4compatibility.ttf differ
diff --git a/icons/effects/concrete_damage.dmi b/icons/effects/wall_damage.dmi
similarity index 100%
rename from icons/effects/concrete_damage.dmi
rename to icons/effects/wall_damage.dmi
diff --git a/icons/obj/guns/manufacturer/hunterspride/48x32.dmi b/icons/obj/guns/manufacturer/hunterspride/48x32.dmi
index cdff0b09ea6e..70bbef00e1af 100644
Binary files a/icons/obj/guns/manufacturer/hunterspride/48x32.dmi and b/icons/obj/guns/manufacturer/hunterspride/48x32.dmi differ
diff --git a/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi b/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi
index 4fb5eca5c011..6471cef8b5eb 100644
Binary files a/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi and b/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi differ
diff --git a/icons/obj/guns/manufacturer/hunterspride/onmob.dmi b/icons/obj/guns/manufacturer/hunterspride/onmob.dmi
index 8911c8fbb68f..361899e3c523 100644
Binary files a/icons/obj/guns/manufacturer/hunterspride/onmob.dmi and b/icons/obj/guns/manufacturer/hunterspride/onmob.dmi differ
diff --git a/icons/obj/guns/manufacturer/hunterspride/righthand.dmi b/icons/obj/guns/manufacturer/hunterspride/righthand.dmi
index 043167735662..fbf4f7cf3fbf 100644
Binary files a/icons/obj/guns/manufacturer/hunterspride/righthand.dmi and b/icons/obj/guns/manufacturer/hunterspride/righthand.dmi differ
diff --git a/shiptest.dme b/shiptest.dme
index d21b8424953c..1bde14fb321f 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -43,6 +43,7 @@
#include "code\__DEFINES\chat.dm"
#include "code\__DEFINES\cinematics.dm"
#include "code\__DEFINES\cleaning.dm"
+#include "code\__DEFINES\clothing.dm"
#include "code\__DEFINES\colors.dm"
#include "code\__DEFINES\combat.dm"
#include "code\__DEFINES\configuration.dm"
@@ -168,6 +169,7 @@
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_clothing.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_food.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_grenade.dm"
+#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_hydroponic.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_implant.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_item.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_machine\signals_aquarium.dm"
@@ -669,6 +671,7 @@
#include "code\datums\elements\lazy_fishing_spot.dm"
#include "code\datums\elements\light_blocking.dm"
#include "code\datums\elements\mobappearance.dm"
+#include "code\datums\elements\plant_backfire.dm"
#include "code\datums\elements\renamemob.dm"
#include "code\datums\elements\selfknockback.dm"
#include "code\datums\elements\snail_crawl.dm"
@@ -1497,6 +1500,7 @@
#include "code\game\turfs\change_turf.dm"
#include "code\game\turfs\turf.dm"
#include "code\game\turfs\closed\_closed.dm"
+#include "code\game\turfs\closed\indestructible.dm"
#include "code\game\turfs\closed\minerals.dm"
#include "code\game\turfs\closed\walls.dm"
#include "code\game\turfs\closed\wall\conc_walls.dm"
@@ -2251,6 +2255,8 @@
#include "code\modules\hydroponics\beekeeping\beekeeper_suit.dm"
#include "code\modules\hydroponics\beekeeping\honey_frame.dm"
#include "code\modules\hydroponics\beekeeping\honeycomb.dm"
+#include "code\modules\hydroponics\genes\attack.dm"
+#include "code\modules\hydroponics\genes\backfire.dm"
#include "code\modules\hydroponics\grown\ambrosia.dm"
#include "code\modules\hydroponics\grown\apple.dm"
#include "code\modules\hydroponics\grown\banana.dm"