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"