diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index 6415f9e79293..739e427fc008 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
@@ -608,7 +608,7 @@
dir = 9
},
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/winter_biodome/living_quarters)
"fs" = (
@@ -896,7 +896,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/winter_biodome/living_quarters)
"lq" = (
@@ -952,7 +952,7 @@
"mD" = (
/obj/effect/turf_decal/solgov/wood/center,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/wood,
/area/ruin/unpowered/winter_biodome/living_quarters)
"mX" = (
@@ -1081,7 +1081,7 @@
},
/obj/effect/turf_decal/corner/opaque/solgovgold/diagonal,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/winter_biodome/engineering)
"qt" = (
@@ -1467,10 +1467,10 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/blood/gibs/up,
-/obj/structure/spawner/burrow/lava_planet,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 4
},
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/wood,
/area/ruin/unpowered/winter_biodome/entrance)
"Ar" = (
@@ -1925,7 +1925,7 @@
/turf/open/floor/wood,
/area/ruin/unpowered/winter_biodome/sauna)
"Lf" = (
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/grass/snow,
/area/ruin/unpowered/winter_biodome)
"Lt" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
index b71bfb250aee..9937cbeb46bb 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
@@ -542,7 +542,7 @@
/area/ruin/unpowered/buried_shrine)
"nq" = (
/obj/structure/stone_tile/surrounding,
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"nz" = (
@@ -930,7 +930,10 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"wM" = (
-/obj/structure/stone_tile/slab,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center,
/obj/structure/spawner/burrow/lava_planet,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
@@ -1648,6 +1651,7 @@
dir = 1
},
/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/buried_shrine)
"QR" = (
@@ -1864,7 +1868,7 @@
/obj/structure/stone_tile{
dir = 1
},
-/obj/structure/spawner/burrow/lava_planet,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
/area/ruin/unpowered/buried_shrine)
"Xr" = (
@@ -3928,7 +3932,7 @@ LJ
ta
NN
ta
-Xv
+wM
Ad
mM
Ad
@@ -4095,7 +4099,7 @@ ee
WZ
WZ
yz
-wM
+Ad
tL
WZ
Yh
diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
index 3d4735d64d02..c1d6af1cfba5 100644
--- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
+++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
@@ -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/configs/independent_beluga.json b/_maps/configs/independent_beluga.json
index 0449bc3a8cae..50f0591a41e9 100644
--- a/_maps/configs/independent_beluga.json
+++ b/_maps/configs/independent_beluga.json
@@ -1,8 +1,12 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Beluga-class Transport",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
- "namelists": ["CRUISE", "NATURAL"],
+ "namelists": [
+ "CRUISE",
+ "NATURAL"
+ ],
"map_short_name": "Beluga-class",
"map_path": "_maps/shuttles/independent/independent_beluga.dmm",
"description": "The Beluga-Class is a transport vessel for those with especially rich blood. Featuring a modest kitchen, hired Inteq security, and luxurious decoration, the Beluga is a first choice pick for many wealthy spacers trying to get from point A to B. The independent ship features several rooms for its guests and a well furnished meeting room for any corporate occassion.",
diff --git a/_maps/configs/independent_box.json b/_maps/configs/independent_box.json
index 14133f03f5bb..c944f29fc54b 100644
--- a/_maps/configs/independent_box.json
+++ b/_maps/configs/independent_box.json
@@ -12,6 +12,7 @@
"SPACE",
"NATURAL"
],
+ "faction": "/datum/faction/independent",
"prefix": "IMV",
"job_slots": {
"Chief Medical Officer": {
diff --git a/_maps/configs/independent_bubble.json b/_maps/configs/independent_bubble.json
index f63aca854e8b..33a8cf8c1815 100644
--- a/_maps/configs/independent_bubble.json
+++ b/_maps/configs/independent_bubble.json
@@ -12,6 +12,7 @@
"GENERAL",
"SPACE"
],
+ "faction": "/datum/faction/independent",
"prefix": "ISV",
"limit": 1,
"job_slots": {
diff --git a/_maps/configs/independent_dwayne.json b/_maps/configs/independent_dwayne.json
index 26027d6fb524..e770c725fc14 100644
--- a/_maps/configs/independent_dwayne.json
+++ b/_maps/configs/independent_dwayne.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Mark.II Dwayne-class Long Range Mining Transport",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/independent_junker.json b/_maps/configs/independent_junker.json
index bd7807a02bb4..92edb754984a 100644
--- a/_maps/configs/independent_junker.json
+++ b/_maps/configs/independent_junker.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Junker-class Salvaged Ship",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/independent_kilo.json b/_maps/configs/independent_kilo.json
index cab2eb292c51..a5a3881f23f2 100644
--- a/_maps/configs/independent_kilo.json
+++ b/_maps/configs/independent_kilo.json
@@ -5,6 +5,7 @@
"tags": [
"Mining"
],
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/independent_lagoon.json b/_maps/configs/independent_lagoon.json
index 313b4cd71d95..6a48dccd1e99 100644
--- a/_maps/configs/independent_lagoon.json
+++ b/_maps/configs/independent_lagoon.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Lagoon-class Cruise Ship",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"description": "An unusual sight in the relatively impoverished Frontier, the Lagoon-class is a large pleasure vessel dedicated to transporting its passengers to any number of exotic locales. Lagoons found on the Frontier tend to contain crews and passengers of a particularly daring – or foolhardy – character, willing to pay out the nose for a tour of some of the most dangerous regions in known space. Accordingly, Lagoons in these regions typically include a small but respectably equipped security contingent to protect (and, when necessary, rein in) the passengers, and come with a surprisingly powerful thermo-electric generator to move the ship’s prodigious bulk across vast expanses of space.",
"tags": [
diff --git a/_maps/configs/independent_mudskipper.json b/_maps/configs/independent_mudskipper.json
index 6119b39865d0..85f9c5f291a0 100644
--- a/_maps/configs/independent_mudskipper.json
+++ b/_maps/configs/independent_mudskipper.json
@@ -2,6 +2,7 @@
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Mudskipper-class Salvage Clipper",
"map_short_name": "Mudskipper-class",
+ "faction": "/datum/faction/independent",
"prefix": "ISV",
"description": "One of the cheapest (and yet, inexplicably popular) offerings from Miskilamo Spacefaring, the Mudskipper-class is a vessel purpose-built for enterprising scrappers and looters looking to salvage bombed-out ruins and harvest boatloads of materials. Featuring a diverse set of multipurpose rooms, a charitable supply of EVA/ruin raiding equipment, and a set of anti-radiation gear for dealing with industrial accidents, the Mudskipper-class just keeps on chuggin’!",
"tags": [
diff --git a/_maps/configs/independent_rigger.json b/_maps/configs/independent_rigger.json
index 9fce68833fa0..57f147867e29 100644
--- a/_maps/configs/independent_rigger.json
+++ b/_maps/configs/independent_rigger.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Riggs-class Sloop",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/independent_schmiedeberg.json b/_maps/configs/independent_schmiedeberg.json
index e9cffc680320..5b5f1bf36a4c 100644
--- a/_maps/configs/independent_schmiedeberg.json
+++ b/_maps/configs/independent_schmiedeberg.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Schmiedeberg-class Pharmacology Ship",
+ "faction": "/datum/faction/independent",
"prefix": "IMV",
"map_short_name": "Schmiedeberg-class",
"description": "Interested in pharmacological science, but tired of sitting in front of a chemistry dispenser and pushing buttons all day? Eager to combine the culinary arts with the narcotic ones? Hoping to combine all of these qualities with the most important activity of all: making fat stacks of dosh? Then the Schmiedeberg-class is for you! Host to a robust ghetto chemistry lab, a high-efficiency botanical set-up and a complete kitchen-and-storefront, the Schmiedeberg is perfect for back-alley chemists and botanists everywhere.",
diff --git a/_maps/configs/independent_shetland.json b/_maps/configs/independent_shetland.json
index de5873f80d75..a44478e49c74 100644
--- a/_maps/configs/independent_shetland.json
+++ b/_maps/configs/independent_shetland.json
@@ -1,5 +1,6 @@
{
"map_name": "Shetland-class Multipurpose Frigate",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/independent_sunskipper.json b/_maps/configs/independent_sunskipper.json
index ee17e126cc34..a87d2582f097 100644
--- a/_maps/configs/independent_sunskipper.json
+++ b/_maps/configs/independent_sunskipper.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Sunskipper-class Culinary Vessel",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": ["CRUISE", "NATURAL"],
"map_short_name": "Sunskipper-class",
diff --git a/_maps/configs/independent_tranquility.json b/_maps/configs/independent_tranquility.json
index 07236d5e4568..37ba6bc8b813 100644
--- a/_maps/configs/independent_tranquility.json
+++ b/_maps/configs/independent_tranquility.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Tranquility-class Flying Apartment Complex",
+ "faction": "/datum/faction/independent",
"prefix": "SV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/inteq_colossus.json b/_maps/configs/inteq_colossus.json
index 718ecb9f1295..973a80045e93 100644
--- a/_maps/configs/inteq_colossus.json
+++ b/_maps/configs/inteq_colossus.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Colossus-class Armored Frigate",
+ "faction": "/datum/faction/inteq",
"prefix": "IRMV",
"description": "The mainstay of Inteq’s mercenary fleet, the Colossus is a professionally-militarized freighter like most of Inteq’s ships, and is designed to operate independently for some time, serving IRMG’s interests and providing vital mercenary services wherever they are needed. Key features include a secure and well-stocked armory and ample crew space, as well as a spacious cargo bay, which crews often refurbish into additional recreational or training space.",
"tags": [
diff --git a/_maps/configs/inteq_hound.json b/_maps/configs/inteq_hound.json
index 3d3617263f61..f92f7d285f12 100644
--- a/_maps/configs/inteq_hound.json
+++ b/_maps/configs/inteq_hound.json
@@ -1,5 +1,6 @@
{
"map_name": "Hound-class Corvette",
+ "faction": "/datum/faction/inteq",
"prefix": "IRMV",
"namelists": [
"MYTHOLOGICAL",
diff --git a/_maps/configs/inteq_talos.json b/_maps/configs/inteq_talos.json
index 858255729809..b2d39c10f443 100644
--- a/_maps/configs/inteq_talos.json
+++ b/_maps/configs/inteq_talos.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Talos-class Command Clipper",
+ "faction": "/datum/faction/inteq",
"prefix": "IRMV",
"description": "The Talos is a command and support ship, and a rare example of a purpose-built Inteq ship. Outfitted with an abundance of construction and engineering equipment and a private bluespace communications suite capable of networking IRMG ships across any given system, Taloses are often the lynchpin of coordinated IRMG operations in a system, and offer construction and repair services as part of IRMG’s mercenary offerings. As Talos crews place a larger emphasis on support personnel, they tend to be less well-armed than other Inteq crews. One unusual feature of the Talos is its depressurized “wings” filled with redundant baffles, intended to provide extra durability in the case of impacts or weapons fire. They also double as auxiliary storage space and potential room for modification by their enterprising Artificer crews.",
"tags": [
diff --git a/_maps/configs/inteq_valor.json b/_maps/configs/inteq_valor.json
index 1a3c957cc7b9..c91d7838408f 100644
--- a/_maps/configs/inteq_valor.json
+++ b/_maps/configs/inteq_valor.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Valor-Class Field Care Cruiser",
+ "faction": "/datum/faction/inteq",
"prefix": "IRMV",
"description": "The Valor is the dedicated medical vessel of the Inteq fleet, suitable for treatment both for Inteq combat casualties, or paid treatment of outsiders. It's equipped with high-end medical equipment and a small ambulance for patient transport for this purpose.",
"tags": ["Medical", "Subshuttle"],
diff --git a/_maps/configs/inteq_vaquero.json b/_maps/configs/inteq_vaquero.json
index 459b7353d292..232562369a3d 100644
--- a/_maps/configs/inteq_vaquero.json
+++ b/_maps/configs/inteq_vaquero.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Vaquero-class Light Frigate",
+ "faction": "/datum/faction/inteq",
"prefix": "IRMV",
"description": "The Vaquero is a flexible and cheap military conversion of a light commercial freighter, widely used by Inteq Risk Management Group for picket, reconnaissance, and light escort duty, or for contracts that don't warrant a larger, more specialized ship. Unlike most Inteq ships, the Vaquero features basic medical, engineering, and military equipment all in one package, and its minimal crew requirements are an excellent fit for Vanguards with a smaller command and for training missions. Like its peers, it features a large cargo bay, which can be reconfigured as needed.",
"tags": [
diff --git a/_maps/configs/nanotrasen_delta.json b/_maps/configs/nanotrasen_delta.json
index 57e920f77d67..cf28abc50219 100644
--- a/_maps/configs/nanotrasen_delta.json
+++ b/_maps/configs/nanotrasen_delta.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Delta-class Frigate",
+ "faction": "/datum/faction/nt/ns_logi",
"prefix": "NSSV",
"namelists": [
"GENERAL",
diff --git a/_maps/configs/nanotrasen_gecko.json b/_maps/configs/nanotrasen_gecko.json
index 01568c3c1d53..c01e4d9b4801 100644
--- a/_maps/configs/nanotrasen_gecko.json
+++ b/_maps/configs/nanotrasen_gecko.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Gecko-class Salvage Runner",
+ "faction": "/datum/faction/nt",
"prefix": "NTSV",
"namelists": [
"NANOTRASEN",
diff --git a/_maps/configs/nanotrasen_heron.json b/_maps/configs/nanotrasen_heron.json
index 45264c827156..e8f798d1edab 100644
--- a/_maps/configs/nanotrasen_heron.json
+++ b/_maps/configs/nanotrasen_heron.json
@@ -1,7 +1,10 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "faction": "/datum/faction/nt",
"prefix": "NTSV",
- "namelists": ["WEAPONS"],
+ "namelists": [
+ "WEAPONS"
+ ],
"map_name": "Heron-Class Dreadnaught",
"map_short_name": "Heron-class",
"map_path": "_maps/shuttles/nanotrasen/nanotrasen_heron.dmm",
@@ -33,15 +36,15 @@
"outfit": "/datum/outfit/job/nanotrasen/security",
"slots": 1
},
- "ERT Officer":{
+ "ERT Officer": {
"outfit": "/datum/outfit/job/nanotrasen/security/ert",
"slots": 4
},
- "ERT Medical Officer":{
+ "ERT Medical Officer": {
"outfit": "/datum/outfit/job/nanotrasen/security/ert/med",
"slots": 1
},
- "ERT Engineering Officer":{
+ "ERT Engineering Officer": {
"outfit": "/datum/outfit/job/nanotrasen/security/ert/engi",
"slots": 1
},
@@ -53,20 +56,19 @@
"outfit": "/datum/outfit/job/nanotrasen/engineer",
"slots": 1
},
- "Chief Engineer":{
+ "Chief Engineer": {
"outfit": "/datum/outfit/job/nanotrasen/ce",
"officer": true,
"slots": 1
},
"Roboticist": {
- "outfit":"/datum/outfit/job/nanotrasen/roboticist",
+ "outfit": "/datum/outfit/job/nanotrasen/roboticist",
"slots": 1
},
- "Medical Doctor":{
+ "Medical Doctor": {
"outfit": "/datum/outfit/job/nanotrasen/doctor",
"slots": 1
},
-
"Atmospheric Technician": 1,
"Quartermaster": 1,
"Cargo Technician": 1,
diff --git a/_maps/configs/nanotrasen_meta.json b/_maps/configs/nanotrasen_meta.json
index b4287c3bca3b..207a6a89864b 100644
--- a/_maps/configs/nanotrasen_meta.json
+++ b/_maps/configs/nanotrasen_meta.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Meta-class Freighter",
+ "faction": "/datum/faction/nt",
"prefix": "NTSV",
"map_short_name": "Meta-class",
"description": "The Meta-class is a medium freight vessel designed for comfort and sustainability over long journeys of delivering cargo. Most, if not all of these ships are no longer under the direct management of the Company, leaving regulation and professionalism at the behest of individual captains. They can be found running independent contracts, delivering cargo, smuggling illicit goods, and generally trying to stay afloat ever since the collapse of Nanotrasen's operations in the frontier.",
diff --git a/_maps/configs/nanotrasen_mimir.json b/_maps/configs/nanotrasen_mimir.json
index db7d8b90d198..4f50f429e210 100644
--- a/_maps/configs/nanotrasen_mimir.json
+++ b/_maps/configs/nanotrasen_mimir.json
@@ -1,5 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "faction": "/datum/faction/nt",
"prefix": "NTSV",
"namelists": [
"NANOTRASEN",
diff --git a/_maps/configs/nanotrasen_osprey.json b/_maps/configs/nanotrasen_osprey.json
index 7e0804a7f203..473389fce14f 100644
--- a/_maps/configs/nanotrasen_osprey.json
+++ b/_maps/configs/nanotrasen_osprey.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Osprey-class Exploration Cruiser",
+ "faction": "/datum/faction/nt",
"prefix": "NTSV",
"namelists": [
"NANOTRASEN",
diff --git a/_maps/configs/nanotrasen_ranger.json b/_maps/configs/nanotrasen_ranger.json
index b4af3e797d39..d9c2e207e4d9 100644
--- a/_maps/configs/nanotrasen_ranger.json
+++ b/_maps/configs/nanotrasen_ranger.json
@@ -1,7 +1,8 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
- "prefix": "NTSV",
"map_name": "Ranger-class Aid Vessel",
+ "faction": "/datum/faction/nt",
+ "prefix": "NTSV",
"namelists": [
"NANOTRASEN",
"NATURAL_AGGRESSIVE",
diff --git a/_maps/configs/nanotrasen_skipper.json b/_maps/configs/nanotrasen_skipper.json
index 2f61c3afa601..a64c4c777342 100644
--- a/_maps/configs/nanotrasen_skipper.json
+++ b/_maps/configs/nanotrasen_skipper.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Skipper-class Heavy Cruiser",
+ "faction": "/datum/faction/nt",
"map_short_name": "Skipper-class",
"prefix": "NTSV",
"namelists": [
diff --git a/_maps/configs/pgf_crying_sun.json b/_maps/configs/pgf_crying_sun.json
index 23114c8aa274..7115072cb9fa 100644
--- a/_maps/configs/pgf_crying_sun.json
+++ b/_maps/configs/pgf_crying_sun.json
@@ -1,5 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "faction": "/datum/faction/pgf",
"prefix": "PGFN",
"map_name": "Crying Sun-class Light Frigate",
"namelists": [
diff --git a/_maps/configs/pirate_libertatia.json b/_maps/configs/pirate_libertatia.json
index 4ed426746512..9a77cc2c5dec 100644
--- a/_maps/configs/pirate_libertatia.json
+++ b/_maps/configs/pirate_libertatia.json
@@ -7,6 +7,7 @@
"tags": [
"Combat"
],
+ "faction": "/datum/faction/frontier",
"prefix": "ISV",
"namelists": [
"PIRATES",
diff --git a/_maps/configs/pirate_noderider.json b/_maps/configs/pirate_noderider.json
index 7863a9d96896..60ce1a8501a6 100644
--- a/_maps/configs/pirate_noderider.json
+++ b/_maps/configs/pirate_noderider.json
@@ -2,6 +2,7 @@
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Jupiter-class Stormrider",
"map_short_name": "Jupiter-class",
+ "faction": "/datum/faction/frontier",
"prefix": "ISV",
"namelists": [
"INSTALLATION",
diff --git a/_maps/configs/pirate_tortuga.json b/_maps/configs/pirate_tortuga.json
index 702185c02387..6543d349bad9 100644
--- a/_maps/configs/pirate_tortuga.json
+++ b/_maps/configs/pirate_tortuga.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Tortuga-class Converted Cargo Freighter",
+ "faction": "/datum/faction/frontier",
"prefix": "ISV",
"namelists": [
"PIRATES",
diff --git a/_maps/configs/solgov_chronicle.json b/_maps/configs/solgov_chronicle.json
index 9fe11023e376..b1b14f281938 100644
--- a/_maps/configs/solgov_chronicle.json
+++ b/_maps/configs/solgov_chronicle.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Chronicle-class Sensor Frigate",
+ "faction": "/datum/faction/solgov",
"prefix": "SCSV",
"namelists": [
"SOLGOV",
diff --git a/_maps/configs/solgov_inkwell.json b/_maps/configs/solgov_inkwell.json
index b7ae54a1b6b9..92c1f80075f3 100644
--- a/_maps/configs/solgov_inkwell.json
+++ b/_maps/configs/solgov_inkwell.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Inkwell-class Supply Freighter",
+ "faction": "/datum/faction/solgov",
"prefix": "SCSV",
"namelists": [
"SOLGOV",
diff --git a/_maps/configs/solgov_paracelsus.json b/_maps/configs/solgov_paracelsus.json
index a5eefc5296df..0e9695952e16 100644
--- a/_maps/configs/solgov_paracelsus.json
+++ b/_maps/configs/solgov_paracelsus.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Paracelsus-class Medical Corvette",
+ "faction": "/datum/faction/solgov",
"prefix": "SCSV",
"namelists": [
"SOLGOV",
diff --git a/_maps/configs/srm_elder.json b/_maps/configs/srm_elder.json
index 03caf7196183..6fffaff63e2b 100644
--- a/_maps/configs/srm_elder.json
+++ b/_maps/configs/srm_elder.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Elder-class Montagnes' Vessel",
+ "faction": "/datum/faction/srm",
"prefix": "SRSV",
"namelists": [
"SAINT-ROUMAIN",
diff --git a/_maps/configs/syndicate_cybersun_kansatsu.json b/_maps/configs/syndicate_cybersun_kansatsu.json
index a9c9fcb94349..013be2455640 100644
--- a/_maps/configs/syndicate_cybersun_kansatsu.json
+++ b/_maps/configs/syndicate_cybersun_kansatsu.json
@@ -1,5 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "faction": "/datum/faction/syndicate/cybersun",
"prefix": "CSSV",
"namelists": [
"CYBERSUN",
diff --git a/_maps/configs/syndicate_gorlex_hyena.json b/_maps/configs/syndicate_gorlex_hyena.json
index a835e00b1eba..df4c6485bb0f 100644
--- a/_maps/configs/syndicate_gorlex_hyena.json
+++ b/_maps/configs/syndicate_gorlex_hyena.json
@@ -1,5 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "faction": "/datum/faction/syndicate/ngr",
"prefix": "NGRV",
"namelists": [
"GORLEX",
diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json
index 2bc7a358b754..ca72d5b0eef5 100644
--- a/_maps/configs/syndicate_gorlex_komodo.json
+++ b/_maps/configs/syndicate_gorlex_komodo.json
@@ -1,4 +1,5 @@
{
+ "faction": "/datum/faction/syndicate",
"prefix": "ISV",
"namelists": [
"GORLEX",
diff --git a/_maps/configs/syndicate_litieguai.json b/_maps/configs/syndicate_litieguai.json
index 685a53187422..4680ebe932d6 100644
--- a/_maps/configs/syndicate_litieguai.json
+++ b/_maps/configs/syndicate_litieguai.json
@@ -1,6 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Li Tieguai-class Rescue Ship",
+ "faction": "/datum/faction/syndicate/cybersun",
"prefix": "CSSV",
"map_short_name": "Li Tieguai-class",
"description": "A small, nimble, and exceptionally well-built medical response vessel, the Li Tieguai is a recent addition to Cybersun’s fleet, forming a critical component of their Frontier stabilization program. Li Tieguais come equipped with high-end medical equipment, including a selection of Cybersun augments and prosthetics, as well as weaponry and armor sufficient to protect its personnel in the often-dangerous Frontier sectors, so that they can offer premium healthcare (at premium prices) in even the most dangerous of scenarios.",
diff --git a/_maps/configs/syndicate_twinkleshine.json b/_maps/configs/syndicate_twinkleshine.json
index ef84cca126f5..b1be2eb333d8 100644
--- a/_maps/configs/syndicate_twinkleshine.json
+++ b/_maps/configs/syndicate_twinkleshine.json
@@ -1,5 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
+ "faction": "/datum/faction/syndicate",
"prefix": "SSV",
"namelists": [
"GORLEX",
diff --git a/_maps/example_ship_config.json b/_maps/example_ship_config.json
index 0f4129fa3d5d..e5dbd47d61e2 100644
--- a/_maps/example_ship_config.json
+++ b/_maps/example_ship_config.json
@@ -2,6 +2,7 @@
"$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json",
"map_name": "Example-class Experimental Ship",
"map_short_name": "Test-class",
+ "faction": "/datum/faction/independent",
"prefix": "STSV",
"namelists": ["GENERAL", "SPACE", "MYTHOLOGICAL", "WEAPONS"],
"map_path": "_maps/shuttles/shiptest/null.dmm",
diff --git a/_maps/ship_config_schema.json b/_maps/ship_config_schema.json
index 4c29f272413d..1efa9eb95f2c 100644
--- a/_maps/ship_config_schema.json
+++ b/_maps/ship_config_schema.json
@@ -28,17 +28,17 @@
"type": "array",
"description": "A list of tags describing the ship's niche, converted into searchable strings."
},
+ "faction": {
+ "title": "Ship Faction Datum",
+ "type": [ "null", "string" ],
+ "description": "Default faction datum"
+ },
"prefix": {
"title": "Ship Default Prefix",
"type": [ "null", "string" ],
"description": "The prefix of the ship class, appended to randomly generated names when they're first purchased.",
"maxLength": 5
},
- "faction_name": {
- "title": "Faction Name",
- "type": [ "null", "string" ],
- "description": "A custom faction name for the ship class. If exluded or left blank, the ship will use the default faction name for the faction that matches the ship's prefix."
- },
"namelists": {
"title": "Namelists",
"type": "array",
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 fb12c10552b3..ad70de20744c 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 2fd220a56588..32a4fab17b31 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 11a938455ab5..db84005a2e5c 100644
--- a/_maps/shuttles/inteq/inteq_talos.dmm
+++ b/_maps/shuttles/inteq/inteq_talos.dmm
@@ -928,6 +928,7 @@
req_access_txt = "11";
req_one_access = null
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering)
"gm" = (
@@ -1348,6 +1349,7 @@
req_access_txt = "11";
req_one_access = null
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering)
"iM" = (
@@ -1645,6 +1647,7 @@
pixel_x = 20;
pixel_y = 11
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering)
"jZ" = (
@@ -6273,6 +6276,7 @@
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)
"Oq" = (
diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm
index dd7f482700a7..cec2b29c1059 100644
--- a/_maps/shuttles/inteq/inteq_valor.dmm
+++ b/_maps/shuttles/inteq/inteq_valor.dmm
@@ -539,11 +539,11 @@
},
/obj/effect/turf_decal/borderfloorwhite,
/obj/machinery/button/door{
+ dir = 1;
id = "valor_surgery";
name = "Privacy Shutters";
- pixel_y = 8;
- dir = 1;
- pixel_x = 8
+ pixel_x = 8;
+ pixel_y = 8
},
/turf/open/floor/plasteel/white,
/area/ship/medical)
@@ -640,10 +640,10 @@
/area/ship/hallway/port)
"fO" = (
/obj/structure/closet/secure_closet{
+ icon_door = "prisoner";
icon_state = "prisoner";
name = "shuttle pilot locker";
- req_access = list(3);
- icon_door = "prisoner"
+ req_access = list(3)
},
/obj/item/clothing/head/beret/sec/inteq,
/obj/item/clothing/head/soft/inteq,
@@ -1951,6 +1951,7 @@
},
/obj/effect/turf_decal/corner_techfloor_gray/full,
/obj/machinery/cell_charger,
+/obj/item/clothing/gloves/color/yellow,
/turf/open/floor/plating,
/area/ship/maintenance/port)
"sc" = (
@@ -2884,8 +2885,8 @@
pixel_y = 4
},
/obj/item/reagent_containers/syringe{
- pixel_y = -4;
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = -4
},
/turf/open/floor/plasteel/patterned/brushed,
/area/ship/medical)
@@ -4034,11 +4035,11 @@
/obj/machinery/airalarm/directional/east,
/obj/effect/turf_decal/borderfloorwhite,
/obj/machinery/button/door{
+ dir = 1;
id = "valor_surgery";
name = "Privacy Shutters";
- pixel_y = -23;
- dir = 1;
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = -23
},
/turf/open/floor/plasteel/white,
/area/ship/medical)
@@ -4532,8 +4533,8 @@
/obj/structure/table/glass,
/obj/machinery/computer/records/med/laptop{
dir = 8;
- pixel_y = 7;
- pixel_x = 3
+ pixel_x = 3;
+ pixel_y = 7
},
/turf/open/floor/plasteel/tech,
/area/ship/medical)
@@ -5124,8 +5125,8 @@
},
/obj/structure/table,
/obj/item/storage/toolbox/emergency/shuttle{
- pixel_y = 9;
- pixel_x = -1
+ pixel_x = -1;
+ pixel_y = 9
},
/obj/item/gps{
pixel_x = 6;
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 3565accb6065..2fc8a3c51bf3 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 979e8bc9d5c6..ef53d495e72a 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/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm
index 521031c2a605..9f8bb1a84d50 100644
--- a/_maps/shuttles/solgov/solgov_chronicle.dmm
+++ b/_maps/shuttles/solgov/solgov_chronicle.dmm
@@ -1,8 +1,8 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/obj/effect/turf_decal/siding/wood/corner{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 8
@@ -58,8 +58,8 @@
/area/ship/engineering/engine)
"aB" = (
/obj/effect/turf_decal/siding/wood{
- dir = 4;
- color = "#543C30"
+ color = "#543C30";
+ dir = 4
},
/turf/open/floor/wood/mahogany,
/area/ship/crew)
@@ -69,10 +69,10 @@
},
/obj/machinery/button/door{
dir = 8;
- pixel_x = 22;
- pixel_y = 10;
+ id = "sgc_airlock1";
name = "blast door control";
- id = "sgc_airlock1"
+ pixel_x = 22;
+ pixel_y = 10
},
/obj/structure/sign/warning/vacuum/external{
pixel_y = -22
@@ -130,8 +130,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_bridge";
- dir = 8
+ dir = 8;
+ id = "sgc_bridge"
},
/obj/structure/cable{
icon_state = "1-8"
@@ -214,11 +214,11 @@
},
/obj/machinery/light/small/directional/east,
/obj/machinery/button/door{
- pixel_y = 11;
- pixel_x = 22;
dir = 8;
+ id = "sgc_dorm";
name = "window shutter control";
- id = "sgc_dorm"
+ pixel_x = 22;
+ pixel_y = 11
},
/turf/open/floor/wood,
/area/ship/crew)
@@ -251,8 +251,8 @@
/area/ship/crew)
"bH" = (
/obj/structure/closet/secure_closet/captains{
- populate = 0;
- anchored = 1
+ anchored = 1;
+ populate = 0
},
/obj/item/clothing/under/solgov/formal/captain,
/obj/item/clothing/shoes/laceup,
@@ -304,9 +304,9 @@
/area/ship/engineering)
"cw" = (
/obj/docking_port/mobile{
+ dir = 2;
port_direction = 8;
- preferred_direction = 4;
- dir = 2
+ preferred_direction = 4
},
/turf/closed/wall/mineral/titanium,
/area/ship/crew)
@@ -398,11 +398,11 @@
dir = 1
},
/obj/machinery/button/door{
- pixel_y = -22;
- pixel_x = -9;
+ dir = 1;
id = "sgc_overseer";
name = "window shutter control";
- dir = 1
+ pixel_x = -9;
+ pixel_y = -22
},
/turf/open/floor/wood,
/area/ship/crew/crewtwo)
@@ -477,8 +477,8 @@
/obj/structure/table/wood/fancy/purple,
/obj/item/paper_bin,
/obj/item/desk_flag/solgov{
- pixel_y = 12;
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = 12
},
/obj/item/pen/solgov,
/obj/effect/turf_decal/spline/fancy/wood{
@@ -504,9 +504,9 @@
},
/obj/machinery/button/door{
dir = 4;
- pixel_y = -10;
+ id = "sgc_engine";
pixel_x = -22;
- id = "sgc_engine"
+ pixel_y = -10
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering/engine)
@@ -553,9 +553,9 @@
/area/ship/engineering/engine)
"fl" = (
/obj/structure/closet/secure_closet/miner{
+ anchored = 1;
name = "field engineer's locker";
- populate = 0;
- anchored = 1
+ populate = 0
},
/obj/item/pickaxe/drill/jackhammer,
/obj/item/storage/toolbox/mechanical,
@@ -609,9 +609,9 @@
dir = 1
},
/obj/machinery/computer/bookmanagement{
- pixel_y = 7;
+ dir = 8;
icon_state = "laptop";
- dir = 8
+ pixel_y = 7
},
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -766,8 +766,8 @@
pixel_y = -3
},
/obj/item/reagent_containers/food/snacks/grown/cabbage{
- pixel_y = 6;
- pixel_x = 9
+ pixel_x = 9;
+ pixel_y = 6
},
/turf/open/floor/wood/mahogany,
/area/ship/crew)
@@ -782,10 +782,10 @@
dir = 5
},
/obj/machinery/button/door{
- pixel_y = 23;
- pixel_x = 10;
id = "sgc_captain";
- name = "window shutter control"
+ name = "window shutter control";
+ pixel_x = 10;
+ pixel_y = 23
},
/turf/open/floor/wood,
/area/ship/crew/office)
@@ -799,8 +799,8 @@
/obj/machinery/firealarm/directional/north,
/obj/item/kirbyplants{
icon_state = "applebush";
- pixel_y = 16;
- pixel_x = 8
+ pixel_x = 8;
+ pixel_y = 16
},
/obj/item/kirbyplants{
icon_state = "plant-11";
@@ -836,9 +836,9 @@
"hx" = (
/obj/item/kirbyplants{
icon_state = "plant-11";
+ layer = 2.89;
pixel_x = -12;
- pixel_y = 19;
- layer = 2.89
+ pixel_y = 19
},
/obj/effect/turf_decal/spline/fancy/wood{
dir = 1
@@ -850,8 +850,8 @@
dir = 6
},
/obj/machinery/light_switch{
- pixel_y = 21;
- pixel_x = 8
+ pixel_x = 8;
+ pixel_y = 21
},
/turf/open/floor/wood,
/area/ship/crew/crewtwo)
@@ -911,8 +911,8 @@
"hU" = (
/obj/item/kirbyplants{
icon_state = "plant-06";
- pixel_y = 16;
- pixel_x = 16
+ pixel_x = 16;
+ pixel_y = 16
},
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 8
@@ -936,9 +936,9 @@
/area/ship/crew/crewtwo)
"id" = (
/obj/structure/closet/secure_closet/security{
- populate = 0;
+ anchored = 1;
name = "sonnensöldners's locker";
- anchored = 1
+ populate = 0
},
/obj/item/clothing/head/solgov/sonnensoldner,
/obj/structure/sign/poster/solgov/sonnensoldner{
@@ -996,10 +996,10 @@
dir = 10
},
/obj/machinery/button/door{
- pixel_y = 22;
- pixel_x = 9;
id = "sgc_engi";
- name = "window shutter control"
+ name = "window shutter control";
+ pixel_x = 9;
+ pixel_y = 22
},
/turf/open/floor/plasteel/white,
/area/ship/engineering)
@@ -1036,12 +1036,12 @@
"jd" = (
/obj/structure/table/wood,
/obj/structure/railing/wood{
- dir = 6;
- color = "#792f27"
+ color = "#792f27";
+ dir = 6
},
/obj/effect/turf_decal/siding/wood{
- dir = 4;
- color = "#543C30"
+ color = "#543C30";
+ dir = 4
},
/obj/item/reagent_containers/food/snacks/grown/cabbage{
pixel_y = 4
@@ -1057,11 +1057,11 @@
"jJ" = (
/obj/machinery/button/door{
dir = 4;
- pixel_y = -8;
- pixel_x = -22;
id = "sgc_airlock2";
- req_one_access = list(20,19);
- name = "blast door control"
+ name = "blast door control";
+ pixel_x = -22;
+ pixel_y = -8;
+ req_one_access = list(20,19)
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 10
@@ -1070,8 +1070,8 @@
dir = 10
},
/obj/machinery/light_switch{
- pixel_y = 21;
- pixel_x = 7
+ pixel_x = 7;
+ pixel_y = 21
},
/obj/machinery/light/small/directional/west{
pixel_y = 1
@@ -1138,8 +1138,8 @@
/obj/structure/table/wood/fancy/purple,
/obj/machinery/computer/records/sec/laptop{
dir = 8;
- pixel_y = 5;
- pixel_x = 4
+ pixel_x = 4;
+ pixel_y = 5
},
/obj/effect/turf_decal/spline/fancy/wood{
dir = 4
@@ -1163,8 +1163,8 @@
"kz" = (
/obj/machinery/telecomms/hub{
autolinkers = list("solgov","broadcasterA","receiverA","solgovPDA","SolHub");
- network = "SolNet";
- id = "Solgov Hub"
+ id = "Solgov Hub";
+ network = "SolNet"
},
/obj/structure/window/reinforced{
dir = 8
@@ -1273,8 +1273,8 @@
dir = 5
},
/obj/structure/sign/warning{
- pixel_y = 9;
- pixel_x = -23
+ pixel_x = -23;
+ pixel_y = 9
},
/obj/machinery/camera/autoname{
dir = 5
@@ -1558,9 +1558,9 @@
req_one_access = list(61,11)
},
/obj/machinery/telecomms/bus{
+ autolinkers = list("processor7","solgov");
id = "bus mainframe";
- network = "SolNet";
- autolinkers = list("processor7","solgov")
+ network = "SolNet"
},
/turf/open/floor/circuit,
/area/ship/engineering)
@@ -1704,8 +1704,8 @@
},
/obj/machinery/door/airlock/engineering{
dir = 4;
- req_access = list(11);
- name = "Equipment Room"
+ name = "Equipment Room";
+ req_access = list(11)
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -1888,9 +1888,9 @@
"sE" = (
/obj/machinery/advanced_airlock_controller{
pixel_y = 24;
- req_ship_access = 1;
req_access = null;
- req_one_access = list(1,48)
+ req_one_access = list(1,48);
+ req_ship_access = 1
},
/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer2{
dir = 4
@@ -1997,8 +1997,8 @@
},
/obj/machinery/telecomms/message_server{
autolinkers = list("solgovPDA");
- network = "SolNet";
- calibrating = 0
+ calibrating = 0;
+ network = "SolNet"
},
/obj/machinery/light/small/directional/east,
/turf/open/floor/circuit/red,
@@ -2034,8 +2034,8 @@
/area/ship/engineering)
"un" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
@@ -2161,8 +2161,8 @@
"vR" = (
/obj/machinery/door/window{
dir = 8;
- opacity = 1;
- name = "Tinted Interior Door"
+ name = "Tinted Interior Door";
+ opacity = 1
},
/obj/structure/cable{
icon_state = "1-4"
@@ -2201,8 +2201,8 @@
},
/obj/machinery/light/floor,
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = -29
+ pixel_x = -29;
+ pixel_y = 0
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/engine/hull,
@@ -2214,8 +2214,8 @@
/area/ship/cargo)
"wU" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2,
/turf/open/floor/wood,
@@ -2232,8 +2232,8 @@
"wW" = (
/obj/item/kirbyplants{
icon_state = "plant-11";
- pixel_x = 10;
- layer = 2.89
+ layer = 2.89;
+ pixel_x = 10
},
/obj/structure/table/wood/fancy/purple,
/obj/item/paper/crumpled,
@@ -2263,8 +2263,8 @@
/area/ship/engineering/engine)
"xt" = (
/obj/effect/turf_decal/siding/wood/corner{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/camera/autoname,
@@ -2326,8 +2326,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_captain";
- dir = 4
+ dir = 4;
+ id = "sgc_captain"
},
/obj/structure/cable{
icon_state = "0-2"
@@ -2364,8 +2364,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_bridge";
- dir = 8
+ dir = 8;
+ id = "sgc_bridge"
},
/obj/structure/cable{
icon_state = "2-8"
@@ -2411,8 +2411,8 @@
dir = 4
},
/obj/machinery/door/airlock{
- name = "Dorm";
- dir = 4
+ dir = 4;
+ name = "Dorm"
},
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -2454,12 +2454,12 @@
"yQ" = (
/obj/item/kirbyplants{
icon_state = "plant-17";
- pixel_y = 23;
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = 23
},
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/structure/extinguisher_cabinet/directional/west,
/turf/open/floor/wood,
@@ -2469,12 +2469,12 @@
req_access = null
},
/obj/structure/railing/wood{
- dir = 4;
- color = "#792f27"
+ color = "#792f27";
+ dir = 4
},
/obj/effect/turf_decal/siding/wood{
- dir = 4;
- color = "#543C30"
+ color = "#543C30";
+ dir = 4
},
/obj/item/reagent_containers/food/condiment/milk,
/obj/item/reagent_containers/food/condiment/milk,
@@ -2491,8 +2491,8 @@
dir = 8
},
/obj/machinery/door/poddoor{
- id = "sgc_engine";
- dir = 4
+ dir = 4;
+ id = "sgc_engine"
},
/obj/structure/cable{
icon_state = "0-8"
@@ -2533,9 +2533,9 @@
/obj/item/reagent_containers/food/condiment/saltshaker,
/obj/item/reagent_containers/food/condiment/saltshaker,
/obj/structure/closet/crate/secure/gear{
- populate = 0;
- name = "emergency sauerkraut supplies";
desc = "For emergency use only";
+ name = "emergency sauerkraut supplies";
+ populate = 0;
req_access = list(19)
},
/obj/item/reagent_containers/food/snacks/grown/cabbage,
@@ -2650,8 +2650,8 @@
},
/obj/machinery/light/small/directional/south,
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = -29
+ pixel_x = -29;
+ pixel_y = 0
},
/turf/open/floor/plasteel/tech,
/area/ship/security/armory)
@@ -2686,11 +2686,11 @@
/obj/item/pen/solgov,
/obj/item/clothing/suit/hazardvest/solgov,
/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/gloves/combat,
/obj/machinery/light/directional/west,
/obj/structure/sign/poster/solgov/random{
pixel_y = 30
},
+/obj/item/clothing/gloves/color/yellow,
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering)
"Au" = (
@@ -2708,8 +2708,8 @@
},
/obj/machinery/firealarm/directional/north,
/obj/machinery/light_switch{
- pixel_y = 21;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 21
},
/obj/item/clothing/under/solgov,
/obj/item/clothing/under/solgov,
@@ -2746,16 +2746,16 @@
},
/obj/machinery/button/door{
dir = 1;
- pixel_y = -22;
- pixel_x = 8;
id = "sgc_cargo";
- name = "blast door control"
+ name = "blast door control";
+ pixel_x = 8;
+ pixel_y = -22
},
/obj/machinery/button/shieldwallgen{
dir = 1;
- pixel_y = -20;
+ id = "sgc_cs";
pixel_x = -2;
- id = "sgc_cs"
+ pixel_y = -20
},
/turf/open/floor/plasteel,
/area/ship/cargo)
@@ -2791,8 +2791,8 @@
"AV" = (
/obj/machinery/telecomms/processor{
autolinkers = list("processor7");
- network = "SolNet";
- id = "Processor"
+ id = "Processor";
+ network = "SolNet"
},
/obj/structure/window/reinforced,
/obj/machinery/door/window/brigdoor/westleft{
@@ -2822,8 +2822,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4,
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/turf/open/floor/wood,
/area/ship/crew/crewtwo)
@@ -2838,8 +2838,8 @@
/area/ship/engineering/engine)
"Bs" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/turf/open/floor/wood,
/area/ship/bridge)
@@ -2859,8 +2859,8 @@
/area/ship/security/armory)
"BZ" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/structure/cable{
icon_state = "1-2"
@@ -2900,8 +2900,8 @@
/area/ship/crew/crewtwo)
"Cf" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -3056,8 +3056,8 @@
},
/obj/machinery/firealarm/directional/north,
/obj/machinery/light_switch{
- pixel_y = 22;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 22
},
/turf/open/floor/wood,
/area/ship/crew/office)
@@ -3152,14 +3152,14 @@
/area/ship/crew/dorm)
"EF" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/machinery/airalarm/directional/west,
/obj/item/kirbyplants{
icon_state = "applebush";
- pixel_y = 19;
- pixel_x = -8
+ pixel_x = -8;
+ pixel_y = 19
},
/turf/open/floor/wood,
/area/ship/crew/crewtwo)
@@ -3186,8 +3186,8 @@
},
/obj/item/kirbyplants{
icon_state = "plant-22";
- pixel_y = 11;
- pixel_x = -6
+ pixel_x = -6;
+ pixel_y = 11
},
/turf/open/floor/wood,
/area/ship/crew/office)
@@ -3204,31 +3204,31 @@
icon_state = "0-8"
},
/obj/machinery/light_switch{
- pixel_y = 22;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 22
},
/turf/open/floor/plasteel/white,
/area/ship/security/armory)
"Fh" = (
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = 28
+ pixel_x = 28;
+ pixel_y = 0
},
/turf/open/floor/plating,
/area/ship/external)
"Fl" = (
/obj/docking_port/stationary{
dir = 4;
- height = 15;
dwidth = 15;
+ height = 15;
width = 30
},
/turf/template_noop,
/area/template_noop)
"Fm" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 6
@@ -3249,8 +3249,8 @@
/area/ship/crew/crewtwo)
"FG" = (
/obj/structure/railing/wood{
- dir = 6;
- color = "#543C30"
+ color = "#543C30";
+ dir = 6
},
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/mug/tea{
@@ -3322,8 +3322,8 @@
dir = 1
},
/obj/structure/sign/warning/vacuum/external{
- pixel_y = 10;
- pixel_x = -30
+ pixel_x = -30;
+ pixel_y = 10
},
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -3396,8 +3396,8 @@
/area/ship/security/armory)
"Hb" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/effect/turf_decal/corner/opaque/solgovblue{
dir = 5
@@ -3454,8 +3454,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_overseer";
- dir = 4
+ dir = 4;
+ id = "sgc_overseer"
},
/obj/structure/cable,
/turf/open/floor/plating,
@@ -3479,8 +3479,8 @@
/area/ship/engineering)
"In" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,
/turf/open/floor/wood,
@@ -3667,8 +3667,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_captain";
- dir = 4
+ dir = 4;
+ id = "sgc_captain"
},
/obj/structure/cable{
icon_state = "0-8"
@@ -3774,8 +3774,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_captain";
- dir = 4
+ dir = 4;
+ id = "sgc_captain"
},
/obj/structure/cable,
/turf/open/floor/plating,
@@ -3823,8 +3823,8 @@
dir = 8
},
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/structure/railing/wood{
color = "#543C30";
@@ -4004,8 +4004,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_overseer";
- dir = 4
+ dir = 4;
+ id = "sgc_overseer"
},
/obj/structure/cable{
icon_state = "0-4"
@@ -4028,9 +4028,9 @@
dir = 4
},
/obj/structure/chair/plastic{
+ desc = "Welcome to the shower";
dir = 4;
- name = "shower chair";
- desc = "Welcome to the shower"
+ name = "shower chair"
},
/obj/machinery/light/small/directional/west,
/turf/open/floor/plasteel/freezer,
@@ -4071,8 +4071,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_bridge";
- dir = 4
+ dir = 4;
+ id = "sgc_bridge"
},
/obj/structure/cable{
icon_state = "0-8"
@@ -4131,8 +4131,8 @@
pixel_y = 25
},
/obj/effect/turf_decal/siding/wood/corner{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/structure/cable{
icon_state = "4-10"
@@ -4150,10 +4150,10 @@
dir = 8
},
/obj/machinery/button/door{
- pixel_y = 9;
- pixel_x = 6;
id = "sgc_bridge";
- name = "bridge window lockdown"
+ name = "bridge window lockdown";
+ pixel_x = 6;
+ pixel_y = 9
},
/obj/item/reagent_containers/glass/maunamug{
pixel_x = -3
@@ -4178,8 +4178,8 @@
},
/obj/machinery/light/floor,
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = -29
+ pixel_x = -29;
+ pixel_y = 0
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/engine/hull,
@@ -4356,8 +4356,8 @@
},
/obj/machinery/door/airlock/engineering{
dir = 4;
- req_access = list(11);
- name = "Engine Room"
+ name = "Engine Room";
+ req_access = list(11)
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -4406,8 +4406,8 @@
},
/obj/machinery/door/airlock/engineering{
dir = 4;
- req_access = list(11);
- name = "Engineering"
+ name = "Engineering";
+ req_access = list(11)
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -4436,9 +4436,9 @@
/obj/item/kitchen/knife,
/obj/machinery/newscaster/directional/north,
/obj/structure/sink{
- pixel_y = 20;
+ layer = 2.79;
pixel_x = -15;
- layer = 2.79
+ pixel_y = 20
},
/turf/open/floor/wood/mahogany,
/area/ship/crew)
@@ -4471,8 +4471,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_y = 22;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 22
},
/turf/open/floor/wood,
/area/ship/crew/crewtwo)
@@ -4485,8 +4485,8 @@
icon_state = "1-2"
},
/obj/item/reagent_containers/food/drinks/mug/tea{
- pixel_y = 3;
- pixel_x = -4
+ pixel_x = -4;
+ pixel_y = 3
},
/obj/item/reagent_containers/food/drinks/mug/tea{
pixel_x = 10
@@ -4521,7 +4521,7 @@
/obj/item/pen/solgov,
/obj/item/clothing/suit/hazardvest/solgov,
/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/gloves/combat,
+/obj/item/clothing/gloves/color/yellow,
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering)
"SH" = (
@@ -4536,8 +4536,8 @@
/area/ship/crew/dorm)
"SJ" = (
/obj/machinery/telecomms/receiver/preset_left{
- network = "SolNet";
- id = "Receiver"
+ id = "Receiver";
+ network = "SolNet"
},
/obj/structure/window/reinforced{
dir = 1
@@ -4667,11 +4667,11 @@
},
/obj/machinery/button/door{
dir = 8;
+ id = "sgc_piss";
+ name = "bathroom lock";
pixel_x = 22;
pixel_y = -9;
- id = "sgc_piss";
- specialfunctions = 3;
- name = "bathroom lock"
+ specialfunctions = 3
},
/obj/machinery/light/small/directional/east,
/turf/open/floor/plasteel/freezer,
@@ -4757,8 +4757,8 @@
"US" = (
/obj/structure/table/wood,
/obj/item/desk_flag/solgov{
- pixel_y = 2;
- pixel_x = 8
+ pixel_x = 8;
+ pixel_y = 2
},
/turf/open/floor/carpet/blue,
/area/ship/crew)
@@ -5026,8 +5026,8 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile/shuttle,
/obj/machinery/door/poddoor{
- id = "sgc_bridge";
- dir = 4
+ dir = 4;
+ id = "sgc_bridge"
},
/obj/structure/cable{
icon_state = "0-8"
@@ -5090,8 +5090,8 @@
},
/obj/machinery/door/airlock{
dir = 4;
- name = "Bathroom";
- id_tag = "sgc_piss"
+ id_tag = "sgc_piss";
+ name = "Bathroom"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -5132,8 +5132,8 @@
dir = 8
},
/obj/machinery/light_switch{
- pixel_y = 22;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 22
},
/turf/open/floor/plasteel,
/area/ship/cargo)
diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm
index c2983ea3f0ed..34c668600a31 100644
--- a/_maps/shuttles/solgov/solgov_inkwell.dmm
+++ b/_maps/shuttles/solgov/solgov_inkwell.dmm
@@ -117,10 +117,10 @@
dir = 8;
id = "sgi_captainbolt";
name = "bolt control";
+ normaldoorcontrol = 1;
pixel_x = 20;
pixel_y = 6;
- specialfunctions = 4;
- normaldoorcontrol = 1
+ specialfunctions = 4
},
/turf/open/floor/wood/walnut,
/area/ship/crew/dorm/dormtwo)
@@ -152,7 +152,7 @@
/obj/item/pen/solgov,
/obj/item/clothing/suit/hazardvest/solgov,
/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/gloves/combat,
+/obj/item/clothing/gloves/color/yellow,
/obj/effect/turf_decal/techfloor,
/obj/effect/turf_decal/industrial/outline/orange,
/obj/item/clothing/glasses/meson/prescription,
@@ -161,9 +161,9 @@
/area/ship/engineering)
"bu" = (
/obj/structure/closet/secure_closet/security{
- populate = 0;
+ anchored = 1;
name = "sonnensöldners's locker";
- anchored = 1
+ populate = 0
},
/obj/item/clothing/head/solgov/sonnensoldner,
/obj/item/radio{
@@ -220,8 +220,8 @@
/area/ship/crew/library)
"ce" = (
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = 28
+ pixel_x = 28;
+ pixel_y = 0
},
/turf/open/floor/engine/hull,
/area/ship/external/dark)
@@ -256,8 +256,8 @@
},
/obj/item/kirbyplants{
icon_state = "plant-22";
- pixel_y = 11;
- pixel_x = -6
+ pixel_x = -6;
+ pixel_y = 11
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 5
@@ -292,9 +292,9 @@
/area/ship/crew/toilet)
"cI" = (
/obj/structure/closet/secure_closet/security{
- populate = 0;
+ anchored = 1;
name = "sonnensöldners's locker";
- anchored = 1
+ populate = 0
},
/obj/item/clothing/head/solgov/sonnensoldner,
/obj/item/radio{
@@ -433,9 +433,9 @@
},
/obj/machinery/door/airlock/solgov{
dir = 4;
- req_one_access = list(20);
+ id_tag = "sgi_captainbolt";
name = "Captain's Quarters";
- id_tag = "sgi_captainbolt"
+ req_one_access = list(20)
},
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -482,10 +482,10 @@
},
/obj/machinery/button/door{
dir = 8;
- pixel_x = 22;
- pixel_y = 10;
+ id = "sgi_cafeteria";
name = "external shutters control";
- id = "sgi_cafeteria"
+ pixel_x = 22;
+ pixel_y = 10
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
@@ -551,9 +551,9 @@
},
/obj/machinery/button/shieldwallgen{
dir = 4;
- pixel_y = 2;
+ id = "sgi_holocargo1";
pixel_x = -18;
- id = "sgi_holocargo1"
+ pixel_y = 2
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/mono,
@@ -614,8 +614,8 @@
/area/ship/cargo)
"eq" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/structure/railing/corner/wood{
color = "#543C30"
@@ -664,9 +664,9 @@
dir = 4;
id = "sgi_bolt";
name = "bathroom lock";
+ normaldoorcontrol = 1;
pixel_x = -20;
pixel_y = 7;
- normaldoorcontrol = 1;
specialfunctions = 4
},
/turf/open/floor/plasteel/freezer,
@@ -1059,8 +1059,8 @@
"hm" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green{
- pixel_y = 7;
- pixel_x = 16
+ pixel_x = 16;
+ pixel_y = 7
},
/obj/item/paper_bin,
/obj/item/pen/solgov,
@@ -1308,11 +1308,11 @@
/obj/structure/table/wood,
/obj/structure/closet/wall/directional/east,
/obj/machinery/button/door{
- pixel_y = -21;
- pixel_x = -8;
dir = 1;
id = "sgi_dorms";
- name = "dorms shutters control"
+ name = "dorms shutters control";
+ pixel_x = -8;
+ pixel_y = -21
},
/obj/item/clothing/suit/hooded/wintercoat/solgov,
/obj/item/clothing/suit/hooded/wintercoat/solgov,
@@ -1717,8 +1717,8 @@
"li" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green{
- pixel_y = 7;
- pixel_x = 16
+ pixel_x = 16;
+ pixel_y = 7
},
/obj/item/folder/solgov,
/obj/machinery/light/directional/south,
@@ -1730,8 +1730,8 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/turretid/lethal{
- pixel_y = 0;
- pixel_x = -26
+ pixel_x = -26;
+ pixel_y = 0
},
/turf/open/floor/plasteel/stairs/wood/left{
dir = 1
@@ -1836,8 +1836,8 @@
"mf" = (
/obj/item/kirbyplants{
icon_state = "applebush";
- pixel_y = 2;
- pixel_x = -5
+ pixel_x = -5;
+ pixel_y = 2
},
/obj/machinery/light/directional/west,
/turf/open/floor/wood/birch,
@@ -1880,8 +1880,8 @@
/area/ship/hallway/starboard)
"mD" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood/walnut,
@@ -2153,8 +2153,8 @@
/area/ship/bridge)
"nV" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/structure/railing/wood{
color = "#543C30";
@@ -2213,8 +2213,8 @@
icon_state = "0-8"
},
/obj/machinery/door/poddoor{
- id = "sgi_engine";
- dir = 4
+ dir = 4;
+ id = "sgi_engine"
},
/obj/machinery/door/window/westright{
dir = 4
@@ -2373,8 +2373,8 @@
/area/ship/crew/dorm)
"pu" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 6
@@ -2399,8 +2399,8 @@
color = "#D5A66E"
},
/obj/structure/railing/wood{
- dir = 1;
- color = "#D5A66E"
+ color = "#D5A66E";
+ dir = 1
},
/obj/machinery/power/apc/auto_name/directional/east,
/obj/machinery/light_switch{
@@ -2534,10 +2534,10 @@
"qE" = (
/obj/structure/table/wood,
/obj/item/kitchen/knife/letter_opener{
- pixel_x = -13;
icon_state = "letter_opener_b";
- pixel_y = 4;
- name = "boxcutter"
+ name = "boxcutter";
+ pixel_x = -13;
+ pixel_y = 4
},
/obj/item/storage/box/shipping,
/obj/effect/turf_decal/spline/fancy/transparent/solgovblue{
@@ -2556,8 +2556,8 @@
"qM" = (
/obj/machinery/light/floor,
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = 28
+ pixel_x = 28;
+ pixel_y = 0
},
/turf/open/floor/engine/hull,
/area/ship/external/dark)
@@ -2593,8 +2593,8 @@
/area/ship/crew/cryo)
"rb" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/effect/turf_decal/box/corners,
/turf/open/floor/plasteel/mono,
@@ -2640,9 +2640,9 @@
/area/ship/cargo)
"rN" = (
/obj/structure/closet/secure_closet/miner{
+ anchored = 1;
name = "field engineer's locker";
- populate = 0;
- anchored = 1
+ populate = 0
},
/obj/item/pickaxe/drill/jackhammer,
/obj/item/storage/toolbox/mechanical,
@@ -2957,22 +2957,22 @@
/area/ship/cargo)
"ti" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/effect/turf_decal/siding/wood{
- dir = 4;
- color = "#543C30"
+ color = "#543C30";
+ dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 1
},
/obj/machinery/button/door{
- pixel_y = -21;
- pixel_x = -8;
dir = 1;
id = "sgi_captain";
- name = "external shutters control"
+ name = "external shutters control";
+ pixel_x = -8;
+ pixel_y = -21
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood/walnut,
@@ -2986,9 +2986,9 @@
/area/ship/crew/dorm/dormthree)
"tr" = (
/obj/structure/closet/secure_closet/miner{
+ anchored = 1;
name = "field engineer's locker";
- populate = 0;
- anchored = 1
+ populate = 0
},
/obj/item/pickaxe/drill/jackhammer,
/obj/item/storage/toolbox/mechanical,
@@ -3035,8 +3035,8 @@
dir = 8
},
/obj/machinery/door/poddoor{
- id = "sgi_engine";
- dir = 4
+ dir = 4;
+ id = "sgi_engine"
},
/obj/machinery/door/window/westright{
dir = 4
@@ -3085,8 +3085,8 @@
/obj/structure/table/wood,
/obj/item/radio/intercom/directional/east,
/obj/item/desk_flag/solgov{
- pixel_y = 12;
- pixel_x = -8
+ pixel_x = -8;
+ pixel_y = 12
},
/turf/open/floor/wood,
/area/ship/crew/canteen)
@@ -3344,14 +3344,14 @@
"vn" = (
/obj/item/kirbyplants{
icon_state = "plant-11";
+ layer = 2.89;
pixel_x = -12;
- pixel_y = 19;
- layer = 2.89
+ pixel_y = 19
},
/obj/item/kirbyplants{
icon_state = "plant-17";
- pixel_y = 3;
- pixel_x = -10
+ pixel_x = -10;
+ pixel_y = 3
},
/obj/structure/cable{
icon_state = "1-4"
@@ -3396,8 +3396,8 @@
/area/ship/hallway/starboard)
"vz" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#543C30"
+ color = "#543C30";
+ dir = 1
},
/obj/structure/railing/wood{
color = "#543C30"
@@ -3553,8 +3553,8 @@
/area/ship/cargo)
"wk" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/effect/turf_decal/siding/wood/corner{
color = "#543C30"
@@ -3584,9 +3584,9 @@
/obj/item/storage/backpack/satchel,
/obj/item/kitchen/knife/letter_opener,
/obj/structure/closet/secure_closet/quartermaster{
- populate = 0;
anchored = 1;
- name = "\proper logistics deck officer's locker"
+ name = "\proper logistics deck officer's locker";
+ populate = 0
},
/obj/item/clothing/suit/solgov/overcoat,
/obj/item/clothing/head/flatcap/solgov,
@@ -3631,9 +3631,9 @@
/area/ship/cargo)
"wB" = (
/obj/structure/closet/secure_closet/security{
- populate = 0;
+ anchored = 1;
name = "sonnensöldners's locker";
- anchored = 1
+ populate = 0
},
/obj/item/clothing/head/solgov/sonnensoldner,
/obj/item/radio{
@@ -3887,8 +3887,8 @@
/area/ship/bridge)
"yD" = (
/obj/effect/turf_decal/siding/wood{
- dir = 9;
- color = "#543C30"
+ color = "#543C30";
+ dir = 9
},
/obj/structure/chair/comfy/beige{
dir = 8
@@ -3989,8 +3989,8 @@
},
/obj/machinery/light/directional/south,
/obj/machinery/telecomms/relay{
- network = "SolNet";
- autolinkers = list("SolHub")
+ autolinkers = list("SolHub");
+ network = "SolNet"
},
/turf/open/floor/plasteel/tech,
/area/ship/maintenance/port)
@@ -4187,8 +4187,8 @@
/obj/structure/table/wood,
/obj/item/paper_bin,
/obj/item/desk_flag/solgov{
- pixel_y = 12;
- pixel_x = -8
+ pixel_x = -8;
+ pixel_y = 12
},
/obj/item/pen/solgov,
/turf/open/floor/carpet/blue,
@@ -4199,8 +4199,8 @@
},
/obj/item/kirbyplants{
icon_state = "plant-17";
- pixel_y = 3;
- pixel_x = -10
+ pixel_x = -10;
+ pixel_y = 3
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/sign/poster/solgov/random{
@@ -4226,9 +4226,9 @@
},
/obj/machinery/door/airlock/solgov{
dir = 4;
+ id_tag = "sgi_quartermaster";
name = "Logistics Deck Officer's Quarters";
- req_one_access = list(41);
- id_tag = "sgi_quartermaster"
+ req_one_access = list(41)
},
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -4256,8 +4256,8 @@
},
/obj/item/kirbyplants{
icon_state = "plant-22";
- pixel_y = 11;
- pixel_x = -6
+ pixel_x = -6;
+ pixel_y = 11
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/white,
@@ -4425,8 +4425,8 @@
/area/ship/hallway/starboard)
"BY" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 4
@@ -4538,8 +4538,8 @@
pixel_y = 4
},
/obj/item/stamp/solgov{
- pixel_y = 11;
- pixel_x = -6
+ pixel_x = -6;
+ pixel_y = 11
},
/obj/item/paper_bin{
pixel_x = -5;
@@ -4588,9 +4588,9 @@
},
/obj/machinery/button/shieldwallgen{
dir = 4;
- pixel_y = 2;
+ id = "sgi_holocargo2";
pixel_x = -18;
- id = "sgi_holocargo2"
+ pixel_y = 2
},
/turf/open/floor/plasteel/mono,
/area/ship/cargo)
@@ -5422,9 +5422,9 @@
/obj/structure/table/wood,
/obj/item/clipboard,
/obj/machinery/button/door{
- pixel_y = 23;
id = "sgi_office";
- name = "external shutters control"
+ name = "external shutters control";
+ pixel_y = 23
},
/turf/open/floor/carpet/blue,
/area/ship/crew/office)
@@ -5740,8 +5740,8 @@
/area/ship/cargo)
"KX" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/machinery/power/apc/auto_name/directional/south,
/obj/machinery/light_switch{
@@ -5955,10 +5955,10 @@
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,
/obj/machinery/button/door{
- pixel_y = 23;
id = "sgi_qm";
name = "logistics deck officer shutters control";
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = 23
},
/turf/open/floor/wood/birch,
/area/ship/crew/dorm/dormthree)
@@ -5970,8 +5970,8 @@
dir = 8
},
/obj/machinery/door/poddoor{
- id = "sgi_engine";
- dir = 4
+ dir = 4;
+ id = "sgi_engine"
},
/obj/machinery/door/window/westright{
dir = 4
@@ -6204,8 +6204,8 @@
"Or" = (
/obj/machinery/atmospherics/pipe/layer_manifold,
/obj/structure/sign/solgov_seal{
- pixel_y = 0;
- pixel_x = -1
+ pixel_x = -1;
+ pixel_y = 0
},
/turf/closed/wall/mineral/titanium,
/area/ship/hallway/starboard)
@@ -6222,9 +6222,9 @@
},
/obj/machinery/button/shieldwallgen{
dir = 4;
- pixel_y = -2;
+ id = "sgi_holocargo1";
pixel_x = -18;
- id = "sgi_holocargo1"
+ pixel_y = -2
},
/turf/open/floor/plasteel/mono,
/area/ship/cargo)
@@ -6239,17 +6239,17 @@
pixel_y = 8
},
/obj/item/desk_flag/solgov{
- pixel_y = 12;
- pixel_x = -8
+ pixel_x = -8;
+ pixel_y = 12
},
/obj/item/reagent_containers/food/drinks/mug/coco{
pixel_x = -7;
pixel_y = -2
},
/obj/machinery/button/door{
- pixel_y = 23;
id = "sgi_bridge";
- name = "external shutters control"
+ name = "external shutters control";
+ pixel_y = 23
},
/turf/open/floor/wood/maple,
/area/ship/bridge)
@@ -6396,11 +6396,11 @@
dir = 4
},
/obj/machinery/button/door{
- pixel_y = -23;
- pixel_x = -4;
dir = 1;
id = "sgi_engine";
- name = "engine blast door control"
+ name = "engine blast door control";
+ pixel_x = -4;
+ pixel_y = -23
},
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
@@ -6440,8 +6440,8 @@
dir = 8
},
/obj/effect/turf_decal/siding/wood/corner{
- dir = 4;
- color = "#D5A66E"
+ color = "#D5A66E";
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/effect/decal/cleanable/dirt/dust,
@@ -6602,8 +6602,8 @@
"Ru" = (
/obj/structure/table/wood/fancy/blue,
/obj/item/desk_flag/solgov{
- pixel_y = 12;
- pixel_x = -8
+ pixel_x = -8;
+ pixel_y = 12
},
/obj/item/binoculars,
/turf/open/floor/wood/walnut,
@@ -6675,7 +6675,7 @@
/obj/item/pen/solgov,
/obj/item/clothing/suit/hazardvest/solgov,
/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/gloves/combat,
+/obj/item/clothing/gloves/color/yellow,
/obj/effect/turf_decal/techfloor,
/obj/effect/turf_decal/industrial/outline/orange,
/obj/item/clothing/glasses/meson/prescription,
@@ -6863,9 +6863,9 @@
/area/ship/cargo)
"Td" = (
/obj/structure/closet/secure_closet/miner{
+ anchored = 1;
name = "field engineer's locker";
- populate = 0;
- anchored = 1
+ populate = 0
},
/obj/item/pickaxe/drill/jackhammer,
/obj/item/storage/toolbox/mechanical,
@@ -7093,13 +7093,13 @@
/area/ship/bridge)
"Vk" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#543C30"
+ color = "#543C30";
+ dir = 8
},
/obj/structure/dresser,
/obj/item/desk_flag/trans{
- pixel_y = 8;
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = 8
},
/turf/open/floor/wood/walnut,
/area/ship/crew/dorm)
@@ -7203,8 +7203,8 @@
},
/obj/machinery/door/airlock{
dir = 4;
- name = "Bathroom";
- id_tag = "sgi_bolt"
+ id_tag = "sgi_bolt";
+ name = "Bathroom"
},
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -7268,8 +7268,8 @@
color = "#D5A66E"
},
/obj/structure/railing/corner/wood{
- dir = 4;
- color = "#D5A66E"
+ color = "#D5A66E";
+ dir = 4
},
/obj/structure/cable{
icon_state = "1-4"
@@ -7298,9 +7298,9 @@
/obj/item/reagent_containers/food/condiment/saltshaker,
/obj/item/reagent_containers/food/condiment/saltshaker,
/obj/structure/closet/crate/secure/gear{
- populate = 0;
- name = "emergency sauerkraut supplies";
desc = "For emergency use only";
+ name = "emergency sauerkraut supplies";
+ populate = 0;
req_access = list(19)
},
/obj/item/reagent_containers/food/snacks/grown/cabbage,
@@ -7375,9 +7375,9 @@
},
/obj/machinery/button/shieldwallgen{
dir = 4;
- pixel_y = -2;
+ id = "sgi_holocargo2";
pixel_x = -18;
- id = "sgi_holocargo2"
+ pixel_y = -2
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/mono,
@@ -7476,10 +7476,10 @@
},
/obj/effect/turf_decal/corner/opaque/solgovblue,
/obj/machinery/button/door{
- pixel_y = 24;
- pixel_x = -4;
id = "sgi_engine";
- name = "engine blast door control"
+ name = "engine blast door control";
+ pixel_x = -4;
+ pixel_y = 24
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/atmospherics/pipe/simple/orange/visible{
@@ -7506,8 +7506,8 @@
"XZ" = (
/obj/docking_port/mobile{
can_move_docking_ports = 1;
- preferred_direction = 4;
- port_direction = 4
+ port_direction = 4;
+ preferred_direction = 4
},
/turf/closed/wall/mineral/titanium,
/area/ship/security/armory)
@@ -7620,11 +7620,11 @@
icon_state = "0-8"
},
/obj/machinery/button/door{
- pixel_y = -23;
- pixel_x = -8;
dir = 1;
id = "sgi_external";
- name = "blast door control"
+ name = "blast door control";
+ pixel_x = -8;
+ pixel_y = -23
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/white,
@@ -7689,8 +7689,8 @@
icon_state = "0-8"
},
/obj/machinery/door/poddoor{
- id = "sgi_engine";
- dir = 4
+ dir = 4;
+ id = "sgi_engine"
},
/obj/machinery/door/window/westright{
dir = 4
@@ -7751,8 +7751,8 @@
"ZB" = (
/obj/item/kirbyplants{
icon_state = "plant-17";
- pixel_y = 3;
- pixel_x = -10
+ pixel_x = -10;
+ pixel_y = 3
},
/obj/structure/cable{
icon_state = "1-2"
@@ -7820,10 +7820,10 @@
dir = 8;
id = "sgi_quartermaster";
name = "bolt control";
+ normaldoorcontrol = 1;
pixel_x = 20;
pixel_y = -6;
- specialfunctions = 4;
- normaldoorcontrol = 1
+ specialfunctions = 4
},
/turf/open/floor/wood/birch,
/area/ship/crew/dorm/dormthree)
diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm
index 21cb1fc6f84a..b8bac029b178 100644
--- a/_maps/shuttles/solgov/solgov_paracelsus.dmm
+++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm
@@ -193,8 +193,8 @@
/area/ship/hallway/port)
"cf" = (
/obj/effect/turf_decal/siding/wood{
- dir = 4;
- color = "#332521"
+ color = "#332521";
+ dir = 4
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood/ebony,
@@ -248,8 +248,8 @@
"cy" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#E3994E"
+ color = "#E3994E";
+ dir = 8
},
/obj/structure/cable{
icon_state = "2-8"
@@ -437,9 +437,9 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/door/airlock/medical{
+ id_tag = "sg_par_surgery_one";
name = "Surgery";
- req_one_access = list(5,69);
- id_tag = "sg_par_surgery_one"
+ req_one_access = list(5,69)
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel/dark,
@@ -583,8 +583,8 @@
dir = 8
},
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#792f27"
+ color = "#792f27";
+ dir = 1
},
/obj/structure/sign/poster/solgov/random{
pixel_y = 30
@@ -657,8 +657,8 @@
dir = 4
},
/obj/machinery/door/poddoor{
- id = "sg_par_cargo3";
- dir = 8
+ dir = 8;
+ id = "sg_par_cargo3"
},
/turf/open/floor/plasteel,
/area/ship/cargo)
@@ -687,8 +687,8 @@
"hd" = (
/obj/structure/sink/kitchen{
dir = 8;
- pixel_y = 8;
- pixel_x = 12
+ pixel_x = 12;
+ pixel_y = 8
},
/obj/effect/turf_decal/trimline/opaque/solgovblue/filled/line,
/obj/effect/turf_decal/borderfloorwhite{
@@ -708,10 +708,10 @@
dir = 8;
id = "sg_par_surgery_one";
name = "bolt control";
+ normaldoorcontrol = 1;
pixel_x = 20;
pixel_y = -5;
- specialfunctions = 4;
- normaldoorcontrol = 1
+ specialfunctions = 4
},
/turf/open/floor/plasteel/white,
/area/ship/medical/surgery)
@@ -1015,8 +1015,8 @@
/obj/docking_port/mobile{
dir = 4;
launch_status = 0;
- preferred_direction = 4;
- port_direction = 2
+ port_direction = 2;
+ preferred_direction = 4
},
/turf/closed/wall/mineral/titanium,
/area/ship/cargo)
@@ -1043,9 +1043,9 @@
"kF" = (
/obj/machinery/door/airlock/solgov{
dir = 4;
- req_one_access = list(20);
+ id_tag = "sg_par_bolt";
name = "Captain's Quarters";
- id_tag = "sg_par_bolt"
+ req_one_access = list(20)
},
/obj/effect/turf_decal/industrial/warning{
dir = 8
@@ -1150,10 +1150,10 @@
/area/ship/cargo)
"lu" = (
/obj/docking_port/stationary{
- width = 30;
- height = 15;
+ dir = 2;
dwidth = 15;
- dir = 2
+ height = 15;
+ width = 30
},
/turf/template_noop,
/area/template_noop)
@@ -1178,8 +1178,8 @@
"lJ" = (
/obj/structure/table/wood,
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#E3994E"
+ color = "#E3994E";
+ dir = 8
},
/obj/machinery/light/directional/north,
/obj/item/radio/intercom/table{
@@ -1243,8 +1243,8 @@
pixel_y = 7
},
/obj/item/desk_flag/trans{
- pixel_y = 2;
- pixel_x = 7
+ pixel_x = 7;
+ pixel_y = 2
},
/turf/open/floor/wood/ebony,
/area/ship/hallway/starboard)
@@ -1333,11 +1333,11 @@
/area/ship/cargo/office)
"nG" = (
/obj/machinery/button/door{
- pixel_y = -22;
- pixel_x = 7;
dir = 1;
id = "sg_par_office";
- name = "shutter control"
+ name = "shutter control";
+ pixel_x = 7;
+ pixel_y = -22
},
/obj/structure/chair/sofa/brown/left/directional/north,
/obj/machinery/airalarm/directional/west,
@@ -1358,8 +1358,8 @@
/area/ship/medical/surgery)
"op" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#332521"
+ color = "#332521";
+ dir = 8
},
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood/ebony,
@@ -1380,8 +1380,8 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/door/airlock/medical{
- name = "Surgery";
id_tag = "sg_par_surgery_two";
+ name = "Surgery";
req_one_access = list(5,69)
},
/turf/open/floor/plasteel/dark,
@@ -1397,8 +1397,8 @@
"ow" = (
/obj/structure/table,
/obj/item/defibrillator/loaded{
- pixel_y = 3;
- pixel_x = 3
+ pixel_x = 3;
+ pixel_y = 3
},
/obj/item/defibrillator/loaded,
/turf/open/floor/plasteel/mono/white,
@@ -1450,8 +1450,8 @@
/obj/item/bedsheet/solgov,
/obj/structure/curtain/cloth,
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#332521"
+ color = "#332521";
+ dir = 1
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light/small/directional/west,
@@ -1601,8 +1601,8 @@
/area/ship/cargo)
"qe" = (
/obj/machinery/door/airlock/medical/glass{
- name = "Treatment Center";
dir = 4;
+ name = "Treatment Center";
req_one_access = list(5,45)
},
/obj/effect/turf_decal/industrial/warning{
@@ -1692,24 +1692,24 @@
"qM" = (
/obj/structure/table/wood,
/obj/machinery/button/door{
- pixel_y = 8;
id = "sg_par_captain";
name = "captain privacy shutters control";
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = 8
},
/obj/machinery/button/door{
- pixel_y = 8;
id = "sg_par_bolt";
name = "captain door bolt control";
+ normaldoorcontrol = 1;
pixel_x = 6;
- specialfunctions = 4;
- normaldoorcontrol = 1
+ pixel_y = 8;
+ specialfunctions = 4
},
/obj/machinery/button/door{
- pixel_y = -2;
id = "sg_par_captain_window";
name = "captain privacy shutters control";
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = -2
},
/turf/open/floor/wood/yew,
/area/ship/crew)
@@ -1744,7 +1744,7 @@
name = "engineer's locker";
req_access = list(11)
},
-/obj/item/clothing/gloves/combat,
+/obj/item/clothing/gloves/color/yellow,
/obj/item/clothing/head/hardhat/solgov,
/obj/item/clothing/under/solgov/formal,
/obj/item/storage/toolbox/mechanical,
@@ -1775,9 +1775,9 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/door/airlock/medical{
+ id_tag = "sg_par_chem_bolt";
name = "Chemistry";
- req_one_access = list(5,10,45);
- id_tag = "sg_par_chem_bolt"
+ req_one_access = list(5,10,45)
},
/obj/effect/mapping_helpers/airlock/unres{
dir = 1
@@ -1901,18 +1901,18 @@
/area/ship/medical/surgery)
"sC" = (
/obj/machinery/button/door{
- pixel_y = -23;
- pixel_x = -8;
dir = 1;
id = "sg_par_cargo1";
- name = "cargo blast door control"
+ name = "cargo blast door control";
+ pixel_x = -8;
+ pixel_y = -23
},
/obj/machinery/button/door{
- pixel_y = -23;
- pixel_x = 6;
dir = 1;
id = "sg_par_cargo2";
- name = "cargo blast door control"
+ name = "cargo blast door control";
+ pixel_x = 6;
+ pixel_y = -23
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 4
@@ -2031,8 +2031,8 @@
},
/obj/machinery/light/directional/south,
/obj/machinery/telecomms/relay{
- network = "SolNet";
- autolinkers = list("SolHub")
+ autolinkers = list("SolHub");
+ network = "SolNet"
},
/turf/open/floor/wood/mahogany,
/area/ship/bridge)
@@ -2222,15 +2222,15 @@
"wi" = (
/obj/machinery/button/shieldwallgen{
dir = 1;
+ id = "sg_par_holocargo1";
pixel_x = -5;
- pixel_y = -21;
- id = "sg_par_holocargo1"
+ pixel_y = -21
},
/obj/machinery/button/shieldwallgen{
dir = 1;
+ id = "sg_par_holocargo2";
pixel_x = 5;
- pixel_y = -21;
- id = "sg_par_holocargo2"
+ pixel_y = -21
},
/obj/structure/railing/wood{
dir = 4
@@ -2245,8 +2245,8 @@
/area/ship/cargo/office)
"wk" = (
/obj/machinery/door/airlock/solgov{
- name = "Psychologist Office";
- id_tag = "sg_par_psychlock"
+ id_tag = "sg_par_psychlock";
+ name = "Psychologist Office"
},
/obj/effect/turf_decal/industrial/warning{
dir = 1
@@ -2482,8 +2482,8 @@
/obj/item/stamp/solgov,
/obj/item/clothing/suit/armor/solgov_trenchcoat,
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#792f27"
+ color = "#792f27";
+ dir = 1
},
/obj/machinery/light/directional/north,
/turf/open/floor/wood/mahogany,
@@ -2510,8 +2510,8 @@
"yw" = (
/obj/structure/table,
/obj/item/storage/belt/medical{
- pixel_y = 4;
- pixel_x = 2
+ pixel_x = 2;
+ pixel_y = 4
},
/obj/item/storage/belt/medical{
pixel_x = -2
@@ -2601,8 +2601,8 @@
"zc" = (
/obj/structure/table/wood,
/obj/item/desk_flag/solgov{
- pixel_y = 2;
- pixel_x = 7
+ pixel_x = 7;
+ pixel_y = 2
},
/obj/item/reagent_containers/food/drinks/mug/coco{
pixel_x = -6;
@@ -2685,8 +2685,8 @@
/obj/machinery/power/apc/auto_name/directional/west,
/obj/machinery/light_switch{
dir = 4;
- pixel_y = 12;
- pixel_x = -20
+ pixel_x = -20;
+ pixel_y = 12
},
/obj/machinery/button/door{
dir = 1;
@@ -2729,8 +2729,8 @@
dir = 4
},
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#792f27"
+ color = "#792f27";
+ dir = 1
},
/turf/open/floor/wood/mahogany,
/area/ship/bridge)
@@ -2832,8 +2832,8 @@
"BQ" = (
/obj/structure/sink/kitchen{
dir = 4;
- pixel_y = 16;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 16
},
/obj/effect/turf_decal/borderfloorwhite{
dir = 1
@@ -2898,8 +2898,8 @@
/area/ship/hallway/starboard)
"Cf" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#332521"
+ color = "#332521";
+ dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
@@ -2930,8 +2930,8 @@
/area/ship/cargo/office)
"Cp" = (
/obj/effect/turf_decal/siding/wood{
- dir = 1;
- color = "#E3994E"
+ color = "#E3994E";
+ dir = 1
},
/obj/structure/fluff/hedge/opaque,
/turf/open/floor/wood/yew,
@@ -3535,8 +3535,8 @@
"IO" = (
/obj/structure/table/wood,
/obj/machinery/reagentgrinder{
- pixel_y = 8;
- pixel_x = -7
+ pixel_x = -7;
+ pixel_y = 8
},
/obj/item/reagent_containers/food/condiment/saltshaker{
pixel_x = 4;
@@ -3895,10 +3895,10 @@
dir = 4;
id = "sg_par_chem_bolt";
name = "bolt control";
+ normaldoorcontrol = 1;
pixel_x = -20;
pixel_y = -6;
- specialfunctions = 4;
- normaldoorcontrol = 1
+ specialfunctions = 4
},
/obj/machinery/autolathe,
/turf/open/floor/plasteel/white,
@@ -3951,16 +3951,16 @@
dir = 4
},
/obj/machinery/button/door{
- pixel_y = 24;
+ id = "sg_par_exterior";
name = "external shutters control";
- id = "sg_par_exterior"
+ pixel_y = 24
},
/turf/open/floor/carpet/royalblue,
/area/ship/bridge)
"Mr" = (
/obj/effect/turf_decal/siding/wood/corner{
- dir = 1;
- color = "#E3994E"
+ color = "#E3994E";
+ dir = 1
},
/obj/structure/cable{
icon_state = "1-4"
@@ -4128,8 +4128,8 @@
/obj/machinery/power/apc/auto_name/directional/west,
/obj/machinery/light_switch{
dir = 4;
- pixel_y = 12;
- pixel_x = -20
+ pixel_x = -20;
+ pixel_y = 12
},
/obj/structure/cable{
icon_state = "0-4"
@@ -4181,8 +4181,8 @@
"OS" = (
/obj/structure/sink/kitchen{
dir = 4;
- pixel_y = 8;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 8
},
/obj/effect/turf_decal/trimline/opaque/solgovblue/filled/line,
/obj/effect/turf_decal/borderfloorwhite{
@@ -4202,10 +4202,10 @@
dir = 4;
id = "sg_par_surgery_two";
name = "bolt control";
+ normaldoorcontrol = 1;
pixel_x = -20;
pixel_y = -5;
- specialfunctions = 4;
- normaldoorcontrol = 1
+ specialfunctions = 4
},
/turf/open/floor/plasteel/white,
/area/ship/medical/surgery)
@@ -4267,8 +4267,8 @@
/area/ship/crew/crewtwo)
"Pg" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8;
- color = "#332521"
+ color = "#332521";
+ dir = 8
},
/obj/item/kirbyplants/random,
/turf/open/floor/wood/ebony,
@@ -4381,8 +4381,8 @@
dir = 8
},
/obj/machinery/door/poddoor{
- id = "sg_par_cargo3";
- dir = 8
+ dir = 8;
+ id = "sg_par_cargo3"
},
/turf/open/floor/plasteel,
/area/ship/cargo)
@@ -4506,11 +4506,11 @@
"Rs" = (
/obj/effect/turf_decal/techfloor,
/obj/machinery/button/door{
- pixel_y = -23;
- pixel_x = -4;
dir = 1;
id = "sg_par_engine";
- name = "Engine Blast Door Control"
+ name = "Engine Blast Door Control";
+ pixel_x = -4;
+ pixel_y = -23
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/power/terminal{
@@ -4659,10 +4659,10 @@
dir = 1
},
/obj/machinery/button/door{
- pixel_y = 24;
- pixel_x = -4;
id = "sg_par_engine";
- name = "engine blast door control"
+ name = "engine blast door control";
+ pixel_x = -4;
+ pixel_y = 24
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/power/terminal{
@@ -4821,8 +4821,8 @@
/area/ship/crew/toilet)
"Uc" = (
/obj/effect/turf_decal/siding/wood{
- dir = 4;
- color = "#332521"
+ color = "#332521";
+ dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 8
@@ -4898,8 +4898,8 @@
/area/ship/bridge)
"UO" = (
/obj/machinery/smartfridge/bloodbank/preloaded{
- pixel_y = 32;
- density = 0
+ density = 0;
+ pixel_y = 32
},
/obj/effect/turf_decal/trimline/opaque/solgovblue/filled/line{
dir = 1
@@ -4914,18 +4914,18 @@
"UV" = (
/obj/structure/curtain/cloth,
/obj/machinery/button/door{
- pixel_y = 24;
- pixel_x = -6;
id = "sg_par_psychlock";
name = "psychology office door bolt";
normaldoorcontrol = 1;
+ pixel_x = -6;
+ pixel_y = 24;
specialfunctions = 4
},
/obj/machinery/button/door{
- pixel_y = 24;
- pixel_x = 6;
id = "sg_par_psych";
- name = "psychology office privacy shutters"
+ name = "psychology office privacy shutters";
+ pixel_x = 6;
+ pixel_y = 24
},
/turf/open/floor/carpet/royalblue,
/area/ship/crew/office)
@@ -5162,12 +5162,12 @@
pixel_y = 15
},
/obj/item/cigbutt{
- pixel_y = 9;
- pixel_x = -11
+ pixel_x = -11;
+ pixel_y = 9
},
/obj/item/clothing/mask/cigarette/robust{
- pixel_y = 10;
- pixel_x = 8
+ pixel_x = 8;
+ pixel_y = 10
},
/turf/open/floor/plasteel/tech/techmaint,
/area/ship/maintenance/port)
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
index ae46dc0286f3..8003df0a5f51 100644
--- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
+++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
@@ -177,8 +177,8 @@
dir = 1
},
/obj/machinery/light_switch{
- pixel_y = 23;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 23
},
/turf/open/floor/plasteel/tech,
/area/ship/cargo)
@@ -899,6 +899,7 @@
/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)
"pu" = (
@@ -1027,12 +1028,13 @@
/obj/machinery/power/apc/auto_name/directional/south,
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -16;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = -16
},
/obj/item/clothing/under/syndicate/ngr,
/obj/item/clothing/suit/hazardvest/ngr,
/obj/item/clothing/head/hardhat/ngr,
+/obj/item/clothing/gloves/color/red/insulated,
/turf/open/floor/plasteel/tech/grid,
/area/ship/storage)
"rM" = (
@@ -1152,6 +1154,7 @@
/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)
"tI" = (
@@ -1268,8 +1271,8 @@
},
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -16;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = -16
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/maintenance/port)
@@ -1330,8 +1333,8 @@
"wP" = (
/obj/effect/turf_decal/industrial/outline,
/obj/structure/closet/crate{
- name = "desert equipment crate";
- desc = "A rectangular steel crate containing supplies to survive a desert environment more easily."
+ desc = "A rectangular steel crate containing supplies to survive a desert environment more easily.";
+ name = "desert equipment crate"
},
/obj/item/clothing/neck/shemagh/ngr,
/obj/item/clothing/neck/shemagh/ngr,
@@ -1752,8 +1755,8 @@
},
/obj/machinery/light/small/directional/north,
/obj/machinery/light_switch{
- pixel_y = 22;
- pixel_x = 7
+ pixel_x = 7;
+ pixel_y = 22
},
/turf/open/floor/plasteel/tech,
/area/ship/maintenance/starboard)
@@ -1852,8 +1855,8 @@
},
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -16;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = -16
},
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
@@ -1944,9 +1947,9 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/radio/intercom/directional/north,
/obj/machinery/light_switch{
+ dir = 4;
pixel_x = -20;
- pixel_y = 12;
- dir = 4
+ pixel_y = 12
},
/turf/open/floor/carpet/red,
/area/ship/crew)
@@ -2852,8 +2855,8 @@
/obj/effect/turf_decal/trimline/opaque/red/filled/corner,
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -16;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = -16
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
@@ -3131,8 +3134,8 @@
req_access = null
},
/obj/machinery/light_switch{
- pixel_y = 23;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 23
},
/turf/open/floor/mineral/plastitanium,
/area/ship/security/armory)
@@ -3159,10 +3162,10 @@
dir = 4
},
/obj/structure/rack,
-/obj/item/pickaxe/drill/jackhammer/old{
+/obj/item/gun/energy/plasmacutter{
pixel_y = 10
},
-/obj/item/pickaxe/drill/jackhammer/old,
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/tech/grid,
/area/ship/storage)
"Yv" = (
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
index 5cc11968ee7c..738ed9ddabec 100644
--- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
+++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
@@ -212,10 +212,10 @@
},
/obj/structure/bed/dogbed,
/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child{
- faction = list("neutral","playerSyndicate");
- name = "Goliath";
+ desc = "A little guy.";
environment_smash = 0;
- desc = "A little guy."
+ faction = list("neutral","playerSyndicate");
+ name = "Goliath"
},
/obj/effect/decal/cleanable/wrapping,
/turf/open/floor/plasteel/tech,
@@ -332,8 +332,8 @@
icon_state = "0-8"
},
/obj/machinery/light_switch{
- pixel_y = 21;
- pixel_x = 12
+ pixel_x = 12;
+ pixel_y = 21
},
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/mineral/plastitanium,
@@ -513,9 +513,9 @@
icon_state = "4-8"
},
/obj/machinery/light_switch{
- pixel_y = -23;
+ dir = 1;
pixel_x = 3;
- dir = 1
+ pixel_y = -23
},
/turf/open/floor/plasteel/stairs{
dir = 8
@@ -1175,6 +1175,8 @@
},
/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)
"ls" = (
@@ -1390,8 +1392,8 @@
},
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -23;
- pixel_x = 4
+ pixel_x = 4;
+ pixel_y = -23
},
/turf/open/floor/mineral/plastitanium,
/area/ship/hallway/aft)
@@ -1418,8 +1420,8 @@
},
/obj/machinery/button/shieldwallgen{
id = "komodo_port";
- pixel_y = 24;
- pixel_x = 6
+ pixel_x = 6;
+ pixel_y = 24
},
/obj/machinery/button/door{
id = "Artillery1shutter";
@@ -1699,8 +1701,8 @@
/obj/effect/turf_decal/industrial/fire,
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/trash/syndi_cakes{
- pixel_y = 6;
- pixel_x = 4
+ pixel_x = 4;
+ pixel_y = 6
},
/obj/item/t_scanner{
pixel_x = -2;
@@ -1846,16 +1848,16 @@
},
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -23;
- pixel_x = 4
+ pixel_x = 4;
+ pixel_y = -23
},
/turf/open/floor/mineral/plastitanium,
/area/ship/crew/canteen)
"rN" = (
/obj/structure/table/reinforced,
/obj/item/toy/figure/syndie{
- pixel_y = 5;
- pixel_x = -8
+ pixel_x = -8;
+ pixel_y = 5
},
/obj/machinery/light/directional/south,
/obj/machinery/fax/syndicate,
@@ -2201,8 +2203,8 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light_switch{
- pixel_y = 23;
- pixel_x = -6
+ pixel_x = -6;
+ pixel_y = 23
},
/obj/machinery/firealarm/directional/east{
pixel_y = -8
@@ -3597,8 +3599,8 @@
dir = 1;
id = "syndiewarship_armorybay";
name = "Weapon Hold";
- req_access_txt = "3";
- pixel_y = -26
+ pixel_y = -26;
+ req_access_txt = "3"
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -3655,8 +3657,8 @@
pixel_y = 16
},
/obj/structure/mirror{
- pixel_y = 30;
- layer = 2.8
+ layer = 2.8;
+ pixel_y = 30
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light/small/directional/west,
@@ -3862,8 +3864,8 @@
/area/ship/hallway/central)
"Lj" = (
/obj/item/scalpel{
- pixel_y = 6;
- pixel_x = 10
+ pixel_x = 10;
+ pixel_y = 6
},
/obj/structure/table/reinforced,
/obj/item/hemostat,
@@ -3983,8 +3985,8 @@
},
/obj/item/clothing/under/suit/waiter/syndicate,
/obj/machinery/vending/boozeomat/syndicate_access{
- pixel_x = 32;
- density = 0
+ density = 0;
+ pixel_x = 32
},
/turf/open/floor/mineral/plastitanium,
/area/ship/crew/canteen)
@@ -4131,8 +4133,8 @@
"ND" = (
/obj/structure/railing,
/obj/machinery/atmospherics/components/unary/tank/air{
- piping_layer = 2;
- dir = 8
+ dir = 8;
+ piping_layer = 2
},
/obj/effect/turf_decal/industrial/outline/yellow,
/obj/effect/decal/cleanable/greenglow,
@@ -5076,8 +5078,8 @@
dir = 8;
id = "warshipbridge";
name = "Bridge Window";
- pixel_y = -1;
- pixel_x = -2
+ pixel_x = -2;
+ pixel_y = -1
},
/obj/item/reagent_containers/food/drinks/mug{
pixel_x = -6;
@@ -5464,8 +5466,8 @@
},
/obj/machinery/light_switch{
dir = 1;
- pixel_y = -21;
- pixel_x = 6
+ pixel_x = 6;
+ pixel_y = -21
},
/obj/machinery/firealarm/directional/south{
pixel_x = -6
diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
index 03d56d7ad418..edcbecd120be 100644
--- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
+++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
@@ -4440,6 +4440,7 @@
/obj/item/clothing/head/hardhat/red{
name = "hard hat"
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/dark,
/area/ship/engineering)
"Af" = (
@@ -8917,6 +8918,7 @@
/obj/item/clothing/head/hardhat/red{
name = "hard hat"
},
+/obj/item/gun/energy/plasmacutter,
/turf/open/floor/plasteel/dark,
/area/ship/engineering)
"Zg" = (
diff --git a/check_regex.yaml b/check_regex.yaml
index 441f1e44d743..3b5e13a650e5 100644
--- a/check_regex.yaml
+++ b/check_regex.yaml
@@ -31,7 +31,7 @@ standards:
- exactly: [4, "/mob text paths", '"/mob']
- exactly: [43, "/obj text paths", '"/obj']
- exactly: [0, "/turf text paths", '"/turf']
- - exactly: [116, "text2path uses", "text2path"]
+ - exactly: [117, "text2path uses", "text2path"]
- exactly: [18, "world<< uses", 'world[ \t]*<<']
- exactly: [0, "world.log<< uses", 'world.log[ \t]*<<']
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/factions.dm b/code/__DEFINES/factions.dm
index 5eb0209dda4c..67ce47e166fc 100644
--- a/code/__DEFINES/factions.dm
+++ b/code/__DEFINES/factions.dm
@@ -12,3 +12,33 @@
#define FACTION_PLAYER_INTEQ "playerInteq"
#define FACTION_PLAYER_ROUMAIN "playerRoumain"
#define FACTION_PLAYER_GEZENA "playerGezena"
+
+#define FACTION_SYNDICATE "Syndicate"
+ #define FACTION_NGR "New Gorlex Republic"
+ #define FACTION_CYBERSUN "CyberSun"
+ #define FACTION_SUNS "Student-Union of Naturalistic Sciences"
+#define FACTION_SOLGOV "SolGov"
+#define FACTION_SRM "Saint-Roumain Militia"
+#define FACTION_INTEQ "Inteq Risk Management Group"
+#define FACTION_CLIP "CLIP Minutemen"
+#define FACTION_NT "Nanotrasen"
+ #define FACTION_NS_LOGI "N+S Logistics"
+ #define FACTION_VIGILITAS "Vigilitas Interstellar"
+#define FACTION_FRONTIER "Frontiersmen Fleet"
+#define FACTION_PGF "Pan-Gezenan Federation"
+#define FACTION_INDEPENDENT "Independent"
+
+#define PREFIX_SYNDICATE list("SEV", "SSV")
+ #define PREFIX_NGR list("NGRV")
+ #define PREFIX_CYBERSUN list("CSSV")
+ #define PREFIX_SUNS list("SUNS")
+#define PREFIX_SOLGOV list("SCSV")
+#define PREFIX_SRM list("SRSV")
+#define PREFIX_INTEQ list("IRMV")
+#define PREFIX_CLIP list("CMSV", "CMGSV")
+#define PREFIX_NT list("NTSV")
+ #define PREFIX_NS_LOGI list("NSSV")
+ #define PREFIX_VIGILITAS list("VISV")
+#define PREFIX_FRONTIER list("FFV")
+#define PREFIX_PGF list("PGF", "PGFMC", "PGFN")
+#define PREFIX_INDEPENDENT list("SV", "IMV", "ISV")
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/subsystems.dm b/code/__DEFINES/subsystems.dm
index 2d0888f4645a..868eae83cf34 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -122,6 +122,7 @@
#define INIT_ORDER_QUIRKS 60
#define INIT_ORDER_DATACORE 57 // Must come before SSticker so datacore reading things can access it
#define INIT_ORDER_TICKER 55
+#define INIT_ORDER_FACTION 53
#define INIT_ORDER_MAPPING 50
#define INIT_ORDER_TIMETRACK 47
#define INIT_ORDER_NETWORKS 45
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/__HELPERS/names.dm b/code/__HELPERS/names.dm
index edfbf9471c27..de002044a836 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -229,61 +229,3 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex)
. += "."
else
. += ", "
-
-#define FACTION_SYNDICATE "Syndicate"
- #define FACTION_NGR "New Gorlex Republic"
- #define FACTION_CYBERSUN "CyberSun"
- #define FACTION_SUNS "Student-Union of Naturalistic Sciences"
-#define FACTION_SOLGOV "SolGov"
-#define FACTION_SRM "Saint-Roumain Militia"
-#define FACTION_INTEQ "Inteq Risk Management Group"
-#define FACTION_CLIP "CLIP Minutemen"
-#define FACTION_NT "Nanotrasen"
- #define FACTION_NS_LOGI "N+S Logistics"
- #define FACTION_VIGILITAS "Vigilitas Interstellar"
-#define FACTION_FRONTIER "Frontiersmen Fleet"
-#define FACTION_PGF "Pan-Gezenan Federation"
-#define FACTION_INDEPENDENT "Independent"
-
-#define PREFIX_SYNDICATE list("SEV", "SSV")
- #define PREFIX_NGR list("NGRV")
- #define PREFIX_CYBERSUN list("CSSV")
- #define PREFIX_SUNS list("SUNS")
-#define PREFIX_SOLGOV list("SCSV")
-#define PREFIX_SRM list("SRSV")
-#define PREFIX_INTEQ list("IRMV")
-#define PREFIX_CLIP list("CMSV", "CMGSV")
-#define PREFIX_NT list("NTSV")
- #define PREFIX_NS_LOGI list("NSSV")
- #define PREFIX_VIGILITAS list("VISV")
-#define PREFIX_FRONTIER list("FFV")
-#define PREFIX_PGF list("PGF", "PGFMC", "PGFN")
-#define PREFIX_INDEPENDENT list("SV", "IMV", "ISV")
-
-/// List of all ship factions to their prefixes.
-GLOBAL_LIST_INIT(ship_faction_to_prefixes, list(
- FACTION_SYNDICATE = PREFIX_SYNDICATE,
- FACTION_NGR = PREFIX_NGR,
- FACTION_CYBERSUN = PREFIX_CYBERSUN,
- FACTION_SUNS = PREFIX_SUNS,
- FACTION_SOLGOV = PREFIX_SOLGOV,
- FACTION_SRM = PREFIX_SRM,
- FACTION_INTEQ = PREFIX_INTEQ,
- FACTION_CLIP = PREFIX_CLIP,
- FACTION_NT = PREFIX_NT,
- FACTION_NS_LOGI = PREFIX_NS_LOGI,
- FACTION_VIGILITAS = PREFIX_VIGILITAS,
- FACTION_FRONTIER = PREFIX_FRONTIER,
- FACTION_PGF = PREFIX_PGF,
- FACTION_INDEPENDENT = PREFIX_INDEPENDENT
-))
-
-/proc/ship_prefix_to_faction(prefix)
- for(var/faction in GLOB.ship_faction_to_prefixes)
- if(prefix in GLOB.ship_faction_to_prefixes[faction])
- return faction
- var/static/list/screamed = list()
- if(!(prefix in screamed))
- screamed += prefix
- stack_trace("attempted to get faction for unknown prefix [prefix]")
- return "?!ERR!?"
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/controllers/subsystem/faction.dm b/code/controllers/subsystem/faction.dm
new file mode 100644
index 000000000000..106fb4687b83
--- /dev/null
+++ b/code/controllers/subsystem/faction.dm
@@ -0,0 +1,32 @@
+SUBSYSTEM_DEF(factions)
+ name = "Faction"
+ init_order = INIT_ORDER_FACTION
+ flags = SS_NO_FIRE
+ var/list/datum/faction/factions = list()
+
+/datum/controller/subsystem/factions/Initialize(timeofday)
+ for(var/path in subtypesof(/datum/faction))
+ factions += new path()
+ return ..()
+
+/datum/controller/subsystem/factions/proc/ship_prefix_to_faction(prefix)
+ for(var/datum/faction/faction in factions)
+ if(prefix in faction.prefixes)
+ return faction
+ var/static/list/screamed = list()
+ if(!(prefix in screamed))
+ screamed += prefix
+ stack_trace("attempted to get faction for unknown prefix [prefix]")
+ return null
+
+/datum/controller/subsystem/factions/proc/ship_prefix_to_name(prefix)
+ var/datum/faction/faction = ship_prefix_to_faction(prefix)
+ if(faction)
+ return faction.name
+ return "?!ERR!?"
+
+/datum/controller/subsystem/factions/proc/faction_path_to_datum(path)
+ for(var/datum/faction/faction in factions)
+ if(faction.type == path)
+ return faction
+ stack_trace("we did not return any faction with path [path]")
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index a8f905e5fe25..3fecc68fbfe4 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -206,10 +206,12 @@ SUBSYSTEM_DEF(mapping)
if(istext(data["prefix"]))
S.prefix = data["prefix"]
- if(istext(data["faction_name"]))
- S.faction_name = data["faction_name"]
- else
- S.faction_name = ship_prefix_to_faction(S.prefix)
+
+ if(istext(data["faction"]))
+ S.faction_path = text2path(data["faction"])
+ if(S.faction_path)
+ S.faction_datum = SSfactions.faction_path_to_datum(S.faction_path)
+ S.faction_name = S.faction_datum.name
S.category = S.faction_name
diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index df5ae1319c2e..e7d0ebaace60 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -23,7 +23,6 @@
),
CAT_ROBOT = CAT_NONE,
CAT_MISC = CAT_NONE,
- CAT_PRIMAL = CAT_NONE,
CAT_FOOD = list(
CAT_BREAD,
CAT_BURGER,
diff --git a/code/datums/components/crafting/recipes/clothing.dm b/code/datums/components/crafting/recipes/clothing.dm
index 95b37502bcaf..e574337f9861 100644
--- a/code/datums/components/crafting/recipes/clothing.dm
+++ b/code/datums/components/crafting/recipes/clothing.dm
@@ -181,12 +181,45 @@
result = /obj/item/clothing/gloves/tackler/offbrand
category = CAT_CLOTHING
-/datum/crafting_recipe/scrap_armor
- name = "Scrap Armor"
- result = /obj/item/clothing/suit/armor/vest/scrap_armor
- time = 60
- reqs = list(
- /obj/item/stack/sheet/metal = 10,
- /obj/item/stack/cable_coil = 20,
- )
+/datum/crafting_recipe/bonearmlet
+ name = "Bone Armlet"
+ result = /obj/item/clothing/accessory/bonearmlet
+ time = 20
+ reqs = list(/obj/item/stack/sheet/bone = 2,
+ /obj/item/stack/sheet/sinew = 1)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/fangnecklace
+ name = "Wolf Fang Necklace"
+ result = /obj/item/clothing/neck/fangnecklace
+ time = 20
+ reqs = list(/obj/item/stack/sheet/sinew = 2,
+ /obj/item/mob_trophy/fang = 1)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/goliathcloak
+ name = "Goliath Cloak"
+ result = /obj/item/clothing/suit/hooded/cloak/goliath
+ time = 50
+ reqs = list(/obj/item/stack/sheet/leather = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/animalhide/goliath_hide = 2) //it takes 4 goliaths to make 1 cloak if the plates are skinned
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/hunterbelt
+ name = "Hunters Belt"
+ result = /obj/item/storage/belt/mining/primitive
+ time = 20
+ reqs = list(/obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/animalhide/goliath_hide = 2)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/polarbearcloak
+ name = "Polar Cloak"
+ result = /obj/item/clothing/suit/hooded/cloak/goliath/polar
+ time = 50
+ reqs = list(/obj/item/stack/sheet/leather = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 2)
+ blacklist = list(/obj/item/stack/sheet/animalhide/goliath_hide)
category = CAT_CLOTHING
diff --git a/code/datums/components/crafting/recipes/misc.dm b/code/datums/components/crafting/recipes/misc.dm
index 0ed4acb5be78..e76641789157 100644
--- a/code/datums/components/crafting/recipes/misc.dm
+++ b/code/datums/components/crafting/recipes/misc.dm
@@ -50,16 +50,6 @@
reqs = list(/obj/item/paper = 5)
category = CAT_MISC
-/datum/crafting_recipe/flashlight_eyes
- name = "Flashlight Eyes"
- result = /obj/item/organ/eyes/robotic/flashlight
- time = 10
- reqs = list(
- /obj/item/flashlight = 2,
- /obj/item/restraints/handcuffs/cable = 1
- )
- category = CAT_MISC
-
/datum/crafting_recipe/paperframes
name = "Paper Frames"
result = /obj/item/stack/sheet/paperframes/five
@@ -87,12 +77,6 @@
result = /obj/structure/curtain
category = CAT_MISC
-/datum/crafting_recipe/extendohand
- name = "Extendo-Hand"
- reqs = list(/obj/item/bodypart/r_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1)
- result = /obj/item/extendohand
- category = CAT_MISC
-
/datum/crafting_recipe/pressureplate
name = "Pressure Plate"
result = /obj/item/pressure_plate
@@ -104,23 +88,13 @@
category = CAT_MISC
/datum/crafting_recipe/rcl
- name = "Makeshift Rapid Pipe Cleaner Layer"
+ name = "Makeshift Rapid Cable Layer"
result = /obj/item/rcl/ghetto
time = 40
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH)
reqs = list(/obj/item/stack/sheet/metal = 15)
category = CAT_MISC
-/datum/crafting_recipe/guillotine
- name = "Guillotine"
- result = /obj/structure/guillotine
- time = 150 // Building a functioning guillotine takes time
- reqs = list(/obj/item/stack/sheet/plasteel = 3,
- /obj/item/stack/sheet/mineral/wood = 20,
- /obj/item/stack/cable_coil = 10)
- tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
- category = CAT_MISC
-
/datum/crafting_recipe/ghettojetpack
name = "Improvised Jetpack"
result = /obj/item/tank/jetpack/improvised
@@ -204,17 +178,49 @@
/obj/item/aquarium_kit = 1)
category = CAT_MISC
-/datum/crafting_recipe/mothplush
- name = "Moth Plushie"
- result = /obj/item/toy/plush/moth
- reqs = list(/obj/item/stack/sheet/animalhide/mothroach = 1,
- /obj/item/organ/heart = 1,
- /obj/item/stack/sheet/cotton/cloth = 3)
- category = CAT_MISC
-
/datum/crafting_recipe/candorupgrade
name = "Candor Upgrade"
result = /obj/item/gun/ballistic/automatic/pistol/candor/phenex
reqs = list(/obj/item/stack/sheet/mineral/hidden = 4,
/obj/item/gun/ballistic/automatic/pistol/candor = 1)
category = CAT_MISC
+
+/datum/crafting_recipe/bonfire
+ name = "Bonfire"
+ time = 60
+ reqs = list(/obj/item/grown/log = 5)
+ parts = list(/obj/item/grown/log = 5)
+ blacklist = list(/obj/item/grown/log/steel)
+ result = /obj/structure/bonfire
+ category = CAT_MISC
+
+/datum/crafting_recipe/distiller
+ name = "Distiller"
+ result = /obj/structure/fermenting_barrel/distiller
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 8, /obj/item/stack/sheet/metal = 5, /datum/reagent/srm_bacteria = 30)
+ time = 50
+ category = CAT_MISC
+
+/datum/crafting_recipe/charcoal_stylus
+ name = "Charcoal Stylus"
+ result = /obj/item/pen/charcoal
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 1, /datum/reagent/ash = 30)
+ time = 30
+ category = CAT_MISC
+
+/datum/crafting_recipe/mushroom_bowl
+ name = "Mushroom Bowl"
+ result = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
+ reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5)
+ time = 30
+ category = CAT_MISC
+
+/datum/crafting_recipe/chainsaw
+ name = "Chainsaw"
+ result = /obj/item/chainsaw
+ reqs = list(/obj/item/circular_saw = 1,
+ /obj/item/stack/cable_coil = 3,
+ /obj/item/stack/sheet/plasteel = 5)
+ tools = list(TOOL_WELDER)
+ time = 50
+ category = CAT_MISC
diff --git a/code/datums/components/crafting/recipes/robot.dm b/code/datums/components/crafting/recipes/robot.dm
index a5558682e86b..cab33ef5f796 100644
--- a/code/datums/components/crafting/recipes/robot.dm
+++ b/code/datums/components/crafting/recipes/robot.dm
@@ -55,16 +55,6 @@
time = 40
category = CAT_ROBOT
-/datum/crafting_recipe/honkbot
- name = "Honkbot"
- result = /mob/living/simple_animal/bot/honkbot
- reqs = list(/obj/item/storage/box/clown = 1,
- /obj/item/bodypart/r_arm/robot = 1,
- /obj/item/assembly/prox_sensor = 1,
- /obj/item/bikehorn/ = 1)
- time = 40
- category = CAT_ROBOT
-
/datum/crafting_recipe/Firebot
name = "Firebot"
result = /mob/living/simple_animal/bot/firebot
diff --git a/code/datums/components/crafting/recipes/tribal.dm b/code/datums/components/crafting/recipes/tribal.dm
deleted file mode 100644
index c831b85d7878..000000000000
--- a/code/datums/components/crafting/recipes/tribal.dm
+++ /dev/null
@@ -1,234 +0,0 @@
-/datum/crafting_recipe/bonearmlet
- name = "Bone Armlet"
- result = /obj/item/clothing/accessory/bonearmlet
- time = 20
- reqs = list(/obj/item/stack/sheet/bone = 2,
- /obj/item/stack/sheet/sinew = 1)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/fangnecklace
- name = "Wolf Fang Necklace"
- result = /obj/item/clothing/neck/fangnecklace
- time = 20
- reqs = list(/obj/item/stack/sheet/sinew = 2,
- /obj/item/mob_trophy/fang = 1)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/bonecodpiece
- name = "Skull Codpiece"
- result = /obj/item/clothing/accessory/skullcodpiece
- time = 20
- reqs = list(/obj/item/stack/sheet/bone = 2,
- /obj/item/mob_trophy/legion_skull = 1,
- /obj/item/stack/sheet/animalhide/goliath_hide = 1)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/skilt
- name = "Sinew Kilt"
- result = /obj/item/clothing/accessory/skilt
- time = 20
- reqs = list(/obj/item/stack/sheet/bone = 1,
- /obj/item/stack/sheet/sinew = 2)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/bracers
- name = "Bone Bracers"
- result = /obj/item/clothing/gloves/bracer
- time = 20
- reqs = list(/obj/item/stack/sheet/bone = 2,
- /obj/item/stack/sheet/sinew = 1)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/goliathcloak
- name = "Goliath Cloak"
- result = /obj/item/clothing/suit/hooded/cloak/goliath
- time = 50
- reqs = list(/obj/item/stack/sheet/leather = 2,
- /obj/item/stack/sheet/sinew = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 2) //it takes 4 goliaths to make 1 cloak if the plates are skinned
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/drakecloak
- name = "Ash Drake Armour"
- result = /obj/item/clothing/suit/hooded/cloak/drake
- time = 60
- reqs = list(/obj/item/stack/sheet/bone = 10,
- /obj/item/stack/sheet/sinew = 2,
- /obj/item/stack/sheet/animalhide/ashdrake = 5)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/bonespear
- name = "Bone Spear"
- result = /obj/item/spear/bonespear
- time = 30
- reqs = list(/obj/item/stack/sheet/bone = 4,
- /obj/item/stack/sheet/sinew = 1)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/boneaxe
- name = "Bone Axe"
- result = /obj/item/fireaxe/boneaxe
- time = 50
- reqs = list(/obj/item/stack/sheet/bone = 6,
- /obj/item/stack/sheet/sinew = 3)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/bonfire
- name = "Bonfire"
- time = 60
- reqs = list(/obj/item/grown/log = 5)
- parts = list(/obj/item/grown/log = 5)
- blacklist = list(/obj/item/grown/log/steel)
- result = /obj/structure/bonfire
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/headpike
- name = "Spike Head (Glass Spear)"
- time = 65
- reqs = list(/obj/item/spear = 1,
- /obj/item/bodypart/head = 1)
- parts = list(/obj/item/bodypart/head = 1,
- /obj/item/spear = 1)
- blacklist = list(/obj/item/spear/explosive, /obj/item/spear/bonespear)
- result = /obj/structure/headpike
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/headpikebone
- name = "Spike Head (Bone Spear)"
- time = 65
- reqs = list(/obj/item/spear/bonespear = 1,
- /obj/item/bodypart/head = 1)
- parts = list(/obj/item/bodypart/head = 1,
- /obj/item/spear/bonespear = 1)
- result = /obj/structure/headpike/bone
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/lasso
- name = "Bone Lasso"
- reqs = list(
- /obj/item/stack/sheet/bone = 1,
- /obj/item/stack/sheet/sinew = 5)
- result = /obj/item/key/lasso
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/heavybonearmor
- name = "Heavy Bone Armor"
- result = /obj/item/clothing/suit/hooded/cloak/bone
- time = 60
- reqs = list(/obj/item/stack/sheet/bone = 8,
- /obj/item/stack/sheet/sinew = 3)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/watcherbola
- name = "Watcher Bola"
- result = /obj/item/restraints/legcuffs/bola/watcher
- time = 30
- reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 2,
- /obj/item/restraints/handcuffs/cable/sinew = 1)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/goliathshield
- name = "Goliath shield"
- result = /obj/item/shield/riot/goliath
- time = 60
- reqs = list(/obj/item/stack/sheet/bone = 4,
- /obj/item/stack/sheet/animalhide/goliath_hide = 3)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/bonesword
- name = "Bone Sword"
- result = /obj/item/claymore/bone
- time = 40
- reqs = list(/obj/item/stack/sheet/bone = 3,
- /obj/item/stack/sheet/sinew = 2)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/hunterbelt
- name = "Hunters Belt"
- result = /obj/item/storage/belt/mining/primitive
- time = 20
- reqs = list(/obj/item/stack/sheet/sinew = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 2)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/quiver
- name = "Quiver"
- result = /obj/item/storage/bag/quiver/empty
- time = 80
- reqs = list(/obj/item/stack/sheet/leather = 3,
- /obj/item/stack/sheet/sinew = 4)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/bone_bow
- name = "Bone Bow"
- result = /obj/item/gun/ballistic/bow/ashen
- time = 200
- reqs = list(/obj/item/stack/sheet/bone = 8,
- /obj/item/stack/sheet/sinew = 4)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/polarbearcloak
- name = "Polar Cloak"
- result = /obj/item/clothing/suit/hooded/cloak/goliath/polar
- time = 50
- reqs = list(/obj/item/stack/sheet/leather = 2,
- /obj/item/stack/sheet/sinew = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 2)
- blacklist = list(/obj/item/stack/sheet/animalhide/goliath_hide)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/distiller
- name = "Distiller"
- result = /obj/structure/fermenting_barrel/distiller
- reqs = list(/obj/item/stack/sheet/mineral/wood = 8, /obj/item/stack/sheet/metal = 5, /datum/reagent/srm_bacteria = 30)
- time = 50
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/crystalamulet
- name = "Crystal Amulet"
- result = /obj/item/clothing/neck/crystal_amulet
- time = 4 SECONDS
- reqs = list(/obj/item/strange_crystal = 3)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/crystalspear
- name = "Crystal Spear"
- result = /obj/item/spear/crystal
- time = 4 SECONDS
- reqs = list(/obj/item/strange_crystal = 2)
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/mushroom_bowl
- name = "Mushroom Bowl"
- result = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
- reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5)
- time = 30
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/charcoal_stylus
- name = "Charcoal Stylus"
- result = /obj/item/pen/charcoal
- reqs = list(/obj/item/stack/sheet/mineral/wood = 1, /datum/reagent/ash = 30)
- time = 30
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/mushroom_mortar
- name = "Mushroom Mortar"
- result = /obj/item/reagent_containers/glass/mortar/mushroom
- reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5)
- time = 30
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/oar
- name = "Goliath Bone Oar"
- result = /obj/item/oar
- reqs = list(/obj/item/stack/sheet/bone = 2)
- time = 15
- category = CAT_PRIMAL
-
-/datum/crafting_recipe/boat
- name = "Goliath Hide Boat"
- result = /obj/vehicle/ridden/lavaboat
- reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3)
- time = 50
- category = CAT_PRIMAL
diff --git a/code/datums/components/crafting/recipes/weapon.dm b/code/datums/components/crafting/recipes/weapon.dm
index c1dde04b3650..65983b06df23 100644
--- a/code/datums/components/crafting/recipes/weapon.dm
+++ b/code/datums/components/crafting/recipes/weapon.dm
@@ -10,18 +10,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/lance
- name = "Explosive Lance (Grenade)"
- result = /obj/item/spear/explosive
- reqs = list(/obj/item/spear = 1,
- /obj/item/grenade = 1)
- blacklist = list(/obj/item/spear/bonespear)
- parts = list(/obj/item/spear = 1,
- /obj/item/grenade = 1)
- time = 15
- category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
-
/datum/crafting_recipe/strobeshield
name = "Strobe Shield"
result = /obj/item/shield/riot/flash
@@ -56,17 +44,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/teleprod
- name = "Teleprod"
- result = /obj/item/melee/baton/cattleprod/teleprod
- reqs = list(/obj/item/restraints/handcuffs/cable = 1,
- /obj/item/stack/rods = 1,
- /obj/item/assembly/igniter = 1,
- /obj/item/stack/ore/bluespace_crystal = 1)
- time = 40
- category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
-
/datum/crafting_recipe/bola
name = "Bola"
result = /obj/item/restraints/legcuffs/bola
@@ -76,16 +53,6 @@
category= CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/gonbola
- name = "Gonbola"
- result = /obj/item/restraints/legcuffs/bola/gonbola
- reqs = list(/obj/item/restraints/handcuffs/cable = 1,
- /obj/item/stack/sheet/metal = 6,
- /obj/item/stack/sheet/animalhide/gondola = 1)
- time = 40
- category= CAT_WEAPONRY
- subcategory = CAT_WEAPON
-
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
@@ -97,19 +64,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/flamethrower
- name = "Flamethrower"
- result = /obj/item/flamethrower
- reqs = list(/obj/item/weldingtool = 1,
- /obj/item/assembly/igniter = 1,
- /obj/item/stack/rods = 1)
- parts = list(/obj/item/assembly/igniter = 1,
- /obj/item/weldingtool = 1)
- tools = list(TOOL_SCREWDRIVER)
- time = 10
- category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
-
/datum/crafting_recipe/meteorslug
name = "Meteorslug Shell"
result = /obj/item/ammo_casing/shotgun/meteorslug
@@ -205,17 +159,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/chainsaw
- name = "Chainsaw"
- result = /obj/item/chainsaw
- reqs = list(/obj/item/circular_saw = 1,
- /obj/item/stack/cable_coil = 3,
- /obj/item/stack/sheet/plasteel = 5)
- tools = list(TOOL_WELDER)
- time = 50
- category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
-
/datum/crafting_recipe/spear
name = "Spear"
result = /obj/item/spear
@@ -253,7 +196,7 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/pipebow
+/*/datum/crafting_recipe/pipebow
name = "Pipe Bow"
result = /obj/item/gun/ballistic/bow/pipe
reqs = list(/obj/item/pipe = 5,
@@ -300,7 +243,7 @@
/obj/item/stack/tile/bronze = 1,
/obj/item/stack/sheet/silk = 1)
category = CAT_WEAPONRY
- subcategory = CAT_AMMO
+ subcategory = CAT_AMMO */
/datum/crafting_recipe/zip_pistol
name = "Zip Pistol"
@@ -315,3 +258,30 @@
time = 100
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/bonespear
+ name = "Bone Spear"
+ result = /obj/item/spear/bonespear
+ time = 30
+ reqs = list(/obj/item/stack/sheet/bone = 4,
+ /obj/item/stack/sheet/sinew = 1)
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/boneaxe
+ name = "Bone Axe"
+ result = /obj/item/fireaxe/boneaxe
+ time = 50
+ reqs = list(/obj/item/stack/sheet/bone = 6,
+ /obj/item/stack/sheet/sinew = 3)
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/bonesword
+ name = "Bone Sword"
+ result = /obj/item/claymore/bone
+ time = 40
+ reqs = list(/obj/item/stack/sheet/bone = 3,
+ /obj/item/stack/sheet/sinew = 2)
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
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/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index ab3a76d2ddff..d834a03b02a9 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -211,9 +211,9 @@
/obj/item/clothing/gloves/krav_maga/combatglovesplus
name = "combat gloves plus"
- desc = "These tactical gloves are fireproof and electrically insulated, and through the use of nanochip technology will teach you the martial art of krav maga."
+ desc = "These tactical gloves are fireproof, and through the use of nanochip technology will teach you the martial art of krav maga."
icon_state = "black"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.05
strip_delay = 80
cold_protection = HANDS
diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm
index 9539b2847774..8512753a22af 100644
--- a/code/datums/materials/meat.dm
+++ b/code/datums/materials/meat.dm
@@ -5,7 +5,6 @@
desc = "Meat"
color = rgb(214, 67, 67)
categories = list(MAT_CATEGORY_RIGID = TRUE)
- sheet_type = /obj/item/stack/sheet/meat
value_per_unit = 0.05
beauty_modifier = -0.3
strength_modifier = 0.7
@@ -13,22 +12,3 @@
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "meat"
-
-/datum/material/meat/on_removed(atom/source, amount, material_flags)
- . = ..()
- qdel(source.GetComponent(/datum/component/edible))
-
-/datum/material/meat/on_applied_obj(obj/O, amount, material_flags)
- . = ..()
- O.obj_flags |= UNIQUE_RENAME //So you can name it after the person its made from, a depressing comprimise.
- make_edible(O, amount, material_flags)
-
-/datum/material/meat/on_applied_turf(turf/T, amount, material_flags)
- . = ..()
- make_edible(T, amount, material_flags)
-
-/datum/material/meat/proc/make_edible(atom/source, amount, material_flags)
- var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT)
- var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT)
- source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, RAW | MEAT | GROSS, null, 30, list("Fleshy"))
-
diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm
deleted file mode 100644
index 62479d90e0d3..000000000000
--- a/code/datums/materials/pizza.dm
+++ /dev/null
@@ -1,31 +0,0 @@
-/datum/material/pizza
- name = "pizza"
- id = "pizza"
- desc = "~Jamme, jamme, n'coppa, jamme ja! Jamme, jamme, n'coppa jamme ja, funi-culi funi-cala funi-culi funi-cala!! Jamme jamme ja funiculi funicula!~"
- color = "#FF9F23"
- categories = list(MAT_CATEGORY_RIGID = TRUE)
- sheet_type = /obj/item/stack/sheet/pizza
- value_per_unit = 0.05
- beauty_modifier = 0.1
- strength_modifier = 0.7
- armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1)
- item_sound_override = 'sound/effects/meatslap.ogg'
- turf_sound_override = FOOTSTEP_MEAT
- texture_layer_icon_state = "pizza"
-
-/datum/material/pizza/on_removed(atom/source, amount, material_flags)
- . = ..()
- qdel(source.GetComponent(/datum/component/edible))
-
-/datum/material/pizza/on_applied_obj(obj/O, amount, material_flags)
- . = ..()
- make_edible(O, amount, material_flags)
-
-/datum/material/pizza/on_applied_turf(turf/T, amount, material_flags)
- . = ..()
- make_edible(T, amount, material_flags)
-
-/datum/material/pizza/proc/make_edible(atom/source, amount, material_flags)
- var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT)
- var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT)
- source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, GRAIN | MEAT | DAIRY | VEGETABLES, null, 30, list("crust", "tomato", "cheese", "meat"), filling_color = COLOR_YELLOW)
diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm
index 31a5e9165d3c..91a3fbe884c0 100644
--- a/code/datums/shuttles.dm
+++ b/code/datums/shuttles.dm
@@ -21,6 +21,8 @@
var/prefix = "ISV"
/// The full name of the ship's faction.
var/faction_name = "Independent"
+ var/faction_path = /datum/faction/independent
+ var/datum/faction/faction_datum
/// Whether or not players from other ships can open airlocks.
var/unique_ship_access = TRUE
/// Set by config JSON. If true, the template's ships' "default" spawn location (when bought by a player or loaded at roundstart)
diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm
deleted file mode 100644
index ec9f0f5ff5a3..000000000000
--- a/code/game/machinery/sheetifier.dm
+++ /dev/null
@@ -1,55 +0,0 @@
-/obj/machinery/sheetifier
- name = "Sheet-meister 2000"
- desc = "A very sheety machine"
- icon = 'icons/obj/machines/sheetifier.dmi'
- icon_state = "base_machine"
- density = TRUE
- use_power = IDLE_POWER_USE
- idle_power_usage = IDLE_DRAW_MINIMAL
- active_power_usage = ACTIVE_DRAW_LOW
- circuit = /obj/item/circuitboard/machine/sheetifier
- layer = BELOW_OBJ_LAYER
- var/busy_processing = FALSE
-
-/obj/machinery/sheetifier/Initialize()
- . = ..()
- AddComponent(/datum/component/material_container, list(/datum/material/meat), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/reagent_containers/food/snacks/meat/slab, CALLBACK(src, PROC_REF(CanInsertMaterials)), CALLBACK(src, PROC_REF(AfterInsertMaterials)))
-
-/obj/machinery/sheetifier/update_overlays()
- . = ..()
- if(machine_stat & (BROKEN|NOPOWER))
- return
- var/mutable_appearance/on_overlay = mutable_appearance(icon, "buttons_on")
- . += on_overlay
-
-/obj/machinery/sheetifier/update_icon_state()
- icon_state = "base_machine[busy_processing ? "_processing" : ""]"
- return ..()
-
-/obj/machinery/sheetifier/proc/CanInsertMaterials()
- return !busy_processing
-
-/obj/machinery/sheetifier/proc/AfterInsertMaterials(item_inserted, id_inserted, amount_inserted)
- busy_processing = TRUE
- update_appearance()
- var/datum/material/last_inserted_material = id_inserted
- var/mutable_appearance/processing_overlay = mutable_appearance(icon, "processing")
- processing_overlay.color = last_inserted_material.color
- flick_overlay_static(processing_overlay, src, 64)
- addtimer(CALLBACK(src, PROC_REF(finish_processing)), 64)
-
-/obj/machinery/sheetifier/proc/finish_processing()
- busy_processing = FALSE
- update_appearance()
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- materials.retrieve_all() //Returns all as sheets
-
-/obj/machinery/sheetifier/attackby(obj/item/I, mob/user, params)
- if(default_unfasten_wrench(user, I))
- return
- if(default_deconstruction_screwdriver(user, I))
- update_appearance()
- return
- if(default_deconstruction_crowbar(I))
- return
- return ..()
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/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index a74ed8c81b27..1d6a0d61c180 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -1392,16 +1392,6 @@
/obj/item/stock_parts/scanning_module = 2,
/obj/item/stock_parts/micro_laser = 2)
-//Misc
-/obj/item/circuitboard/machine/sheetifier
- name = "Sheet-meister 2000 (Machine Board)"
- icon_state = "supply"
- build_path = /obj/machinery/sheetifier
- req_components = list(
- /obj/item/stock_parts/manipulator = 2,
- /obj/item/stock_parts/matter_bin = 2)
- needs_anchored = FALSE
-
/obj/item/circuitboard/machine/abductor
name = "alien board (Report This)"
icon_state = "abductor_mod"
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 50da920b06f1..79b37d41e52c 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -446,10 +446,8 @@
name = "Cooking Desserts 101"
desc = "A cook book that teaches you some more of the newest desserts. AI approved, and a best seller on Honkplanet."
crafting_recipe_types = list(
- /datum/crafting_recipe/food/mimetart,
/datum/crafting_recipe/food/berrytart,
/datum/crafting_recipe/food/cocolavatart,
- /datum/crafting_recipe/food/clowncake,
/datum/crafting_recipe/food/vanillacake
)
icon_state = "cooking_learing_sweets"
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/religion.dm b/code/game/objects/items/religion.dm
index e2507dfb911b..704a388d97f1 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -232,7 +232,7 @@
name = "Plate Gauntlets"
icon_state = "crusader"
desc = "They're like gloves, but made of metal."
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index ead6b8aeb8f1..4443218e4385 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -519,10 +519,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
GLOBAL_LIST_INIT(bone_recipes, list( \
new /datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar/bone, 3), \
- new /datum/stack_recipe("bone armor", /obj/item/clothing/suit/armor/bone, 6), \
- new /datum/stack_recipe("skull helmet", /obj/item/clothing/head/helmet/skull, 4), \
- new /datum/stack_recipe("bone dagger", /obj/item/kitchen/knife/combat/bone, 2), \
- new /datum/stack_recipe("club", /obj/item/melee/baseball_bat/bone, 6)))
+ new /datum/stack_recipe("bone dagger", /obj/item/kitchen/knife/combat/bone, 2)))
/obj/item/stack/sheet/bone
name = "bones"
icon = 'icons/obj/mining.dmi'
@@ -608,41 +605,6 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
/obj/item/stack/sheet/paperframes/fifty
amount = 50
-/obj/item/stack/sheet/meat
- name = "meat sheets"
- desc = "Something's bloody meat compressed into a nice solid sheet."
- singular_name = "meat sheet"
- icon_state = "sheet-meat"
- material_flags = MATERIAL_COLOR
- custom_materials = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/meat
- material_type = /datum/material/meat
- material_modifier = 1 //None of that wussy stuff
-
-/obj/item/stack/sheet/meat/fifty
- amount = 50
-/obj/item/stack/sheet/meat/twenty
- amount = 20
-/obj/item/stack/sheet/meat/five
- amount = 5
-
-/obj/item/stack/sheet/pizza
- name = "pepperoni sheetzzas"
- desc = "It's a delicious pepperoni sheetzza!"
- singular_name = "pepperoni sheetzza"
- icon_state = "sheet-meat" //This needs a pizza sheet but we also i dont think anyone will ever make this.
- custom_materials = list(/datum/material/pizza = MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/pizza
- material_type = /datum/material/pizza
- material_modifier = 1
-
-/obj/item/stack/sheet/pizza/fifty
- amount = 50
-/obj/item/stack/sheet/pizza/twenty
- amount = 20
-/obj/item/stack/sheet/pizza/five
- amount = 5
-
/obj/item/stack/sheet/sandblock
name = "blocks of sand"
desc = "You're too old to be playing with sandcastles. Now you build... sandstations."
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index fbe1bbc73131..22f64d0a1a6c 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
@@ -680,7 +681,7 @@
/obj/item/storage/belt/bandolier
name = "bandolier"
- desc = "A bandolier for holding ammunition. Does not hold magazines"
+ desc = "A bandolier for holding ammunition. Does not hold magazines."
icon_state = "bandolier"
item_state = "bandolier"
@@ -694,6 +695,10 @@
/obj/item/ammo_casing
))
+/obj/item/storage/belt/bandolier/examine(mob/user)
+ . = ..()
+ . += span_notice("The bandolier can be directly loaded by clicking on it with an ammo box.")
+
/obj/item/storage/belt/fannypack
name = "fannypack"
desc = "A dorky fannypack for keeping small items in."
diff --git a/code/game/objects/items/storage/guncases.dm b/code/game/objects/items/storage/guncases.dm
index 77f6fe0ed651..232bf1421b3b 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/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 987aaa9933d5..296e6a65d202 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -177,7 +177,7 @@
new /obj/item/crowbar/syndie(src) //WS Begin - Cool Syndie Tools
new /obj/item/wirecutters/syndie(src)
new /obj/item/multitool/syndie(src) //WS End
- new /obj/item/clothing/gloves/combat(src)
+ new /obj/item/clothing/gloves/color/red/insulated(src)
/obj/item/storage/toolbox/syndicate/empty
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index c792af38486a..f953a3604367 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
@@ -96,8 +97,6 @@
/obj/item/weldingtool/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_SCREWDRIVER)
flamethrower_screwdriver(I, user)
- else if(istype(I, /obj/item/stack/rods))
- flamethrower_rods(I, user)
else
. = ..()
update_appearance()
@@ -281,24 +280,10 @@
to_chat(user, "You resecure [src] and close the fuel tank.")
reagents.flags &= ~(OPENCONTAINER)
else
- to_chat(user, "[src] can now be attached, modified, and refuelled.")
+ to_chat(user, "[src] can now be refuelled.")
reagents.flags |= OPENCONTAINER
add_fingerprint(user)
-/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
- if(!status)
- var/obj/item/stack/rods/R = I
- if (R.use(1))
- var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc)
- if(!remove_item_from_storage(F))
- user.transferItemToLoc(src, F, TRUE)
- F.weldtool = src
- add_fingerprint(user)
- to_chat(user, "You add a rod to a welder, starting to build a flamethrower.")
- user.put_in_hands(F)
- else
- to_chat(user, "You need one rod to start building a flamethrower!")
-
/obj/item/weldingtool/ignition_effect(atom/A, mob/user)
if(use_tool(A, user, 0, amount=1))
return "[user] casually lights [A] with [src], what a badass."
@@ -348,6 +333,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 +364,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 dcc5c56b93c2..c794eb040389 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
@@ -57,6 +57,17 @@
stock = 6
availability_prob = 0
+/datum/blackmarket_item/ammo/c299
+ name = "Eoehoma .299 Caseless Ammo Box"
+ desc = "This ammunition for the E-40 Hybrid Rifle is probably worth more than the people you're shooting it at."
+ item = /obj/item/ammo_box/c299
+
+ price_min = 300
+ price_max = 700
+ stock_min = 4
+ stock_max = 8
+ availability_prob = 0
+
/datum/blackmarket_item/ammo/saber_mag
name = "Saber 9mm SMG Magazines"
desc = "Magazines for use in the Saber 9mm SMG. No, they don't work as swords."
@@ -219,3 +230,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 5c6f83ad5734..d0db4253d77e 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
@@ -129,10 +129,10 @@
name = "E-40 Hybrid Assault Rifle"
desc = "A dual mode hybrid assault rifle made by the now defunct Eoehoma Firearms. Capable of firing both bullets AND lasers, for the discerning dealer in death. Chambered in Eoehoma .299 Caseless."
item = /obj/item/gun/ballistic/automatic/assault/e40
- pair_item = list(/datum/blackmarket_item/ammo/e40_mag)
+ pair_item = list(/datum/blackmarket_item/ammo/e40_mag, /datum/blackmarket_item/ammo/c299)
price_min = 7000
- price_max = 15000
+ price_max = 10000
stock_max = 2
availability_prob = 10
spawn_weighting = FALSE
@@ -304,6 +304,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.dm b/code/modules/cargo/packs.dm
index 8098ff6b5130..e6555fc58b6e 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -7,10 +7,15 @@
var/crate_name = "crate"
var/desc = ""//no desc by default
var/crate_type = /obj/structure/closet/crate
- // var/DropPodOnly = FALSE//only usable by the Bluespace Drop Pod via the express cargo console
var/admin_spawned = FALSE
var/small_item = FALSE //Small items can be grouped into a single crate.
+ var/faction
+ /* to be implmented
+ var/faction_discount = 15
+ var/faction_locked = FALSE
+ */
+
/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account)
var/obj/structure/closet/crate/C
if(paying_account)
diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm
index d790cbbdf650..d9c9b8425ffa 100644
--- a/code/modules/cargo/packs/ammo.dm
+++ b/code/modules/cargo/packs/ammo.dm
@@ -47,12 +47,14 @@
desc = "Contains a 5.56mm magazine for the Pistole C, containing twelve rounds."
contains = list(/obj/item/ammo_box/magazine/pistol556mm)
cost = 750
+ faction = FACTION_SOLGOV
/datum/supply_pack/ammo/fms_mag
name = "Ferromagnetic Slug Magazine Crate"
desc = "Contains a ferromagnetic slug magazine for the Model H pistol, containing ten rounds."
contains = list(/obj/item/ammo_box/magazine/modelh)
cost = 750
+ faction = FACTION_SOLGOV
/*
Shotgun ammo
@@ -76,6 +78,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/civilian.dm b/code/modules/cargo/packs/civilian.dm
index 154dce436ee7..0b1d7303ca44 100644
--- a/code/modules/cargo/packs/civilian.dm
+++ b/code/modules/cargo/packs/civilian.dm
@@ -86,6 +86,7 @@
contains = list(/obj/item/storage/box/fountainpens)
crate_name = "calligraphy crate"
crate_type = /obj/structure/closet/crate/wooden
+ faction = FACTION_SOLGOV
/datum/supply_pack/civilian/wrapping_paper
name = "Festive Wrapping Paper Crate"
diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm
index ed06391dfe98..01bfcc1dc756 100644
--- a/code/modules/cargo/packs/costumes_toys.dm
+++ b/code/modules/cargo/packs/costumes_toys.dm
@@ -127,17 +127,6 @@
crate_name = "exosuit pilot's suit crate"
crate_type = /obj/structure/closet/crate/wooden
-/datum/supply_pack/costumes_toys/wizard
- name = "Wizard Costume Crate"
- desc = "Pretend to join the Wizard Federation with this full wizard outfit! As required by interstellar law, the seller reminds potential buyers that the Wizard Federation is not real and cannot hurt you."
- cost = 2000
- contains = list(/obj/item/staff,
- /obj/item/clothing/suit/wizrobe/fake,
- /obj/item/clothing/shoes/sandal,
- /obj/item/clothing/head/wizard/fake)
- crate_name = "wizard costume crate"
- crate_type = /obj/structure/closet/crate/wooden
-
/datum/supply_pack/costumes_toys/formalwear
name = "Formalwear Crate"
desc = "You're gonna like the way you look, I guaranteed it. Contains an asston of fancy clothing."
@@ -170,6 +159,7 @@
/obj/item/lipstick/random)
crate_name = "formalwear crate"
crate_type = /obj/structure/closet/crate/wooden
+ faction = FACTION_SOLGOV
// this is technically armor but you aren't buying it for that. it's a joke pack so it goes here
/datum/supply_pack/costumes_toys/justiceinbound
diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm
index 6bf438f22867..f2b9d0ec09a7 100644
--- a/code/modules/cargo/packs/food.dm
+++ b/code/modules/cargo/packs/food.dm
@@ -16,6 +16,7 @@
/obj/item/storage/box/donkpockets/donkpockethonk)
crate_name = "donk pocket crate"
crate_type = /obj/structure/closet/crate/freezer
+ faction = FACTION_SYNDICATE
/datum/supply_pack/food/donkpockets/fill(obj/structure/closet/crate/C)
for(var/i in 1 to 3)
@@ -316,6 +317,3 @@
/obj/item/melee/flyswatter)
crate_name = "beekeeping starter crate"
crate_type = /obj/structure/closet/crate/hydroponics
-
-
-
diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm
index 8a9bd51ccbc5..fe8cb731f204 100644
--- a/code/modules/cargo/packs/gun.dm
+++ b/code/modules/cargo/packs/gun.dm
@@ -12,6 +12,7 @@
cost = 300
contains = list(/obj/item/storage/pistolcase/disposable)
crate_name = "disposable gun crate"
+ faction = FACTION_FRONTIER
/datum/supply_pack/gun/derringer
name = ".38 Derringer Crate"
@@ -19,42 +20,49 @@
cost = 350
contains = list(/obj/item/storage/pistolcase/derringer)
crate_name = "derringer crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/commanders
name = "Commander Pistol Crate"
desc = "Contains a modified Candor 'Commander' pistol, produced by Nanotrasen and chambered in 9mm."
cost = 750
contains = list(/obj/item/storage/pistolcase/commander)
+ faction = FACTION_NT
/datum/supply_pack/gun/makarovs
name = "Stechkin Pistol Crate"
desc = "Contains a concealable stechkin pistol, produced by Scarborough Arms and chambered in 10mm."
cost = 1000
contains = list(/obj/item/storage/pistolcase/stechkin)
+ faction = FACTION_SYNDICATE
/datum/supply_pack/gun/candors
name = "Candor Pistol Crate"
desc = "Contains a Candor pistol, the trusty sidearm of any spacer, produced by Hunter's Pride and chambered in .45 ACP."
cost = 1000
contains = list(/obj/item/storage/pistolcase/candor)
+ faction = FACTION_SRM
/datum/supply_pack/gun/pepperbox
name = "HP Firebrand Pepperbox Revolver Crate"
desc = "Contains a concealable pepperbox revolver manufactured by the Saint Roumain Militia, chambered in .357."
cost = 1250
contains = list(/obj/item/storage/pistolcase/firebrand)
+ faction = FACTION_SRM
/datum/supply_pack/gun/detrevolver
name = "Hunter's Pride Detective Revolver Crate"
desc = "Contains a concealable revolver favored by police departments around the sector, chambered in .38."
cost = 600
contains = list(/obj/item/storage/pistolcase/detective)
+ faction = FACTION_SRM
/datum/supply_pack/gun/shadowrevolver
name = "Shadow Revolver Crate"
desc = "Contains a concealable Shadow revolver, chambered in .44 Roumain."
cost = 1000
contains = list(/obj/item/storage/pistolcase/shadow)
+ faction = FACTION_SRM
/*
@@ -115,6 +123,14 @@
cost = 1000
contains = list(/obj/item/storage/guncase/doublebarrel)
crate_name = "shotguns crate"
+ faction = FACTION_SRM
+
+/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"
@@ -122,6 +138,7 @@
cost = 2000
contains = list(/obj/item/storage/guncase/hellfire)
crate_name = "shotgun crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/brimstone_shotgun
name = "Brimstone Shotgun Crate"
@@ -129,6 +146,7 @@
cost = 2000
contains = list(/obj/item/storage/guncase/brimstone)
crate_name = "shotgun crate"
+ faction = FACTION_SRM
/*
Rifles
@@ -140,6 +158,14 @@
cost = 750
contains = list(/obj/item/storage/guncase/winchester)
crate_name = "rifle crate"
+ faction = FACTION_SRM
+
+/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"
@@ -147,6 +173,7 @@
cost = 1250
contains = list(/obj/item/storage/guncase/illestren)
crate_name = "rifle crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/beacon
name = "Beacon Break Action Rifle Crate"
@@ -154,6 +181,7 @@
cost = 2250
contains = list(/obj/item/storage/guncase/beacon)
crate_name = "rifle crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/scout
name = "Scout Sniper Rifle Crate"
@@ -161,6 +189,7 @@
cost = 5500
contains = list(/obj/item/storage/guncase/scout)
crate_name = "rifle crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/cobra20
name = "Cobra-20 SMG Crate"
@@ -168,6 +197,7 @@
cost = 3000
contains = list(/obj/item/storage/guncase/cobra)
crate_name = "SMG crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/wt550
name = "WT-550 Auto Rifle Crate"
@@ -175,6 +205,7 @@
cost = 4000
contains = list(/obj/item/storage/guncase/wt550)
crate_name = "auto rifle crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/p16
name = "P16 Assault Rifle Crate"
@@ -182,6 +213,7 @@
cost = 5000
contains = list(/obj/item/storage/guncase/p16)
crate_name = "auto rifle crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/skm
name = "SKM-24 Rifle Crate"
@@ -189,6 +221,7 @@
cost = 5000
contains = list(/obj/item/storage/guncase/skm)
crate_name = "auto rifle crate"
+ faction = FACTION_SRM
/datum/supply_pack/gun/attachment/rail_light
name = "Tactical Rail Light Crate"
diff --git a/code/modules/cargo/packs/material.dm b/code/modules/cargo/packs/material.dm
index ee0f00e42d96..dc01a4dfdc75 100644
--- a/code/modules/cargo/packs/material.dm
+++ b/code/modules/cargo/packs/material.dm
@@ -1,5 +1,6 @@
/datum/supply_pack/material
group = "Materials & Sheets"
+ faction = FACTION_NS_LOGI
/*
Basic construction materials
diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm
index e0c76180bade..e0ca4f139258 100644
--- a/code/modules/cargo/packs/medical.dm
+++ b/code/modules/cargo/packs/medical.dm
@@ -132,6 +132,7 @@
/obj/item/reagent_containers/pill/neurine,
/obj/item/vending_refill/medical)
crate_name = "medical surplus crate"
+ faction = FACTION_SUNS
/datum/supply_pack/medical/surplus/fill(obj/structure/closet/crate/C)
for(var/i in 1 to 7)
@@ -159,6 +160,7 @@
/obj/item/reagent_containers/glass/bottle/mutagen)
crate_name = "virus crate"
crate_type = /obj/structure/closet/crate/medical
+ faction = FACTION_SUNS
/datum/supply_pack/medical/salglucanister
name = "Heavy-Duty Saline Canister"
diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm
index d2039b009c5c..28f15b583206 100644
--- a/code/modules/cargo/packs/sec_supply.dm
+++ b/code/modules/cargo/packs/sec_supply.dm
@@ -91,6 +91,7 @@
)
crate_name = "incendiary weapons crate"
crate_type = /obj/structure/closet/crate/secure/plasma
+ faction = FACTION_NGR
/*
Stamina / PVP weapons (intentionally overpriced due to odd balance position of stamina weapons)
diff --git a/code/modules/cargo/packs/spacesuit_armor.dm b/code/modules/cargo/packs/spacesuit_armor.dm
index 3ed4a64cab91..ba0e8d73c7be 100644
--- a/code/modules/cargo/packs/spacesuit_armor.dm
+++ b/code/modules/cargo/packs/spacesuit_armor.dm
@@ -29,6 +29,7 @@
contains = list(/obj/item/clothing/suit/space/hardsuit/mining/independent)
crate_name = "mining hardsuit crate"
crate_type = /obj/structure/closet/crate/secure/plasma
+ faction = FACTION_INDEPENDENT
/datum/supply_pack/spacesuit_armor/med_hardsuit
name = "Medical Hardsuit Crate"
@@ -37,6 +38,7 @@
contains = list(/obj/item/clothing/suit/space/hardsuit/medical)
crate_name = "medical hardsuit crate"
crate_type = /obj/structure/closet/crate/medical
+ faction = FACTION_NT
/datum/supply_pack/spacesuit_armor/mining_hardsuit_heavy
name = "Heavy Mining Hardsuit Crate"
@@ -46,6 +48,7 @@
/obj/item/clothing/shoes/bhop)
crate_name = "heavy mining hardsuit crate"
crate_type = /obj/structure/closet/crate/secure/plasma
+ faction = FACTION_NT
/datum/supply_pack/spacesuit_armor/sec_hardsuit_bundle
name = "Security Hardsuit Crate"
@@ -54,6 +57,7 @@
contains = list(/obj/item/clothing/suit/space/hardsuit/security/independent)
crate_name = "security hardsuit crate"
crate_type = /obj/structure/closet/crate/secure/gear
+ faction = FACTION_NT
/datum/supply_pack/spacesuit_armor/sci_hardsuit
name = "Science Hardsuit Crate"
@@ -62,6 +66,7 @@
contains = list(/obj/item/clothing/suit/space/hardsuit/rd)
crate_name = "science hardsuit crate"
crate_type = /obj/structure/closet/crate/secure/science
+ faction = FACTION_NT
/datum/supply_pack/spacesuit_armor/engi_spacesuit_bundle
name = "Engineering Space Suit Crate"
@@ -79,6 +84,7 @@
contains = list(/obj/item/clothing/suit/space/hardsuit/engine/atmos)
crate_name = "atmospherics hardsuit crate"
crate_type = /obj/structure/closet/crate/secure/engineering
+ faction = FACTION_NT
/datum/supply_pack/spacesuit_armor/swat
name = "SWAT Crate"
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/factions/gezena.dm b/code/modules/clothing/factions/gezena.dm
index eabc0fe752c4..3eea9ebec461 100644
--- a/code/modules/clothing/factions/gezena.dm
+++ b/code/modules/clothing/factions/gezena.dm
@@ -217,7 +217,7 @@
name = "\improper PGFN Captain's Ihuz-irra Gloves"
desc = "As the name, “ihuz-irra”, or “sure-grip”, suggests, the gloves employed by the PGF military are designed to ensure the highest possible grip is maintained while also providing protection from blisters in work environments. Bears the silver standard of a Gezenan captain."
icon_state = "captaingloves"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
//Boots
diff --git a/code/modules/clothing/factions/suns.dm b/code/modules/clothing/factions/suns.dm
index b005b85caa2e..bce8586c9139 100644
--- a/code/modules/clothing/factions/suns.dm
+++ b/code/modules/clothing/factions/suns.dm
@@ -466,10 +466,10 @@
/obj/item/clothing/gloves/suns/captain
name = "\improper SUNS captain's gloves"
- desc = "Fancy black gloves for trusted SUNS members. Sports a complex lining that prevents the wearer from being shocked."
+ desc = "Fancy black gloves for trusted SUNS members."
icon_state = "suns_captaingloves"
item_state = "suns_blackgloves"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index cbac3e0e8901..0447f62aab9e 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -177,10 +177,10 @@
icon_state = "brown"
/obj/item/clothing/gloves/color/captain
- desc = "Regal white gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier, and armoured bracers. Swanky."
+ desc = "Regal white gloves, with a nice gold trim, an integrated thermal barrier, and armoured bracers. Swanky."
name = "captain's gloves"
icon_state = "captain"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
@@ -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"
@@ -231,7 +231,7 @@
name = "infiltrator gloves"
desc = "Specialized combat gloves for carrying people around. Transfers tactical kidnapping knowledge into the user via nanochips."
icon_state = "infiltrator"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.3
resistance_flags = FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 9d8db3c035d8..e326b55f58f3 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -23,13 +23,14 @@
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
name = "combat gloves"
- desc = "These tactical gloves are fireproof and electrically insulated."
+ desc = "These tactical gloves are extra-durable, offering some fire and acid protection."
icon_state = "combat"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.05
strip_delay = 80
cold_protection = HANDS
@@ -42,12 +43,12 @@
/obj/item/clothing/gloves/combat/maid
name = "combat maid sleeves"
- desc = "These 'tactical' gloves and sleeves are fireproof and electrically insulated. Warm to boot."
+ desc = "These 'tactical' gloves and sleeves are fireproof and acid-resistant. Warm to boot."
icon_state = "syndimaid_arms"
/obj/item/clothing/gloves/combat/maid/inteq
name = "inteq combat maid sleeves"
- desc = "Tacticute and comfy, along with being both fireproof and electrically insulated."
+ desc = "Tacticute and comfy, along with being both fireproof and acid-resistant."
icon_state = "inteqmaid_arms"
/obj/item/clothing/gloves/bracer
@@ -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"
@@ -142,5 +143,5 @@
/obj/item/clothing/gloves/combat/wizard
name = "enchanted gloves"
- desc = "These gloves have been enchanted with a spell that makes them electrically insulated and fireproof."
+ desc = "These gloves have been enchanted with a spell that makes them fireproof and acid-resistant."
icon_state = "wizard"
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index 0ae7f48089e9..2667297dc358 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -67,7 +67,7 @@
name = "guerrilla gloves"
desc = "Superior quality combative gloves, good for performing tackle takedowns as well as absorbing electrical shocks."
icon_state = "combat"
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.05
/obj/item/clothing/gloves/tackler/rocket
diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm
index 4cec7ad56f8a..a66ee78c7239 100644
--- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm
+++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm
@@ -434,7 +434,7 @@
suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/engi
id = /obj/item/card/id/lpengie
belt = /obj/item/storage/belt/utility/full
- gloves = /obj/item/clothing/gloves/combat
+ gloves = /obj/item/clothing/gloves/color/yellow
glasses = /obj/item/clothing/glasses/welding
back = /obj/item/storage/backpack/ert/engineer
diff --git a/code/modules/clothing/outfits/factions/frontiersmen.dm b/code/modules/clothing/outfits/factions/frontiersmen.dm
index 7045f5182188..44d0c4920784 100644
--- a/code/modules/clothing/outfits/factions/frontiersmen.dm
+++ b/code/modules/clothing/outfits/factions/frontiersmen.dm
@@ -92,7 +92,7 @@
uniform = /obj/item/clothing/under/frontiersmen/officer
head = /obj/item/clothing/head/hardhat/frontier
shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
+ gloves = /obj/item/clothing/gloves/color/yellow
belt = /obj/item/storage/belt/utility/full
// Engineer
diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm
index f89d39a4d8d3..e9b783de9780 100644
--- a/code/modules/clothing/outfits/factions/independent.dm
+++ b/code/modules/clothing/outfits/factions/independent.dm
@@ -350,7 +350,7 @@
head = /obj/item/clothing/head/soft/black
shoes = /obj/item/clothing/shoes/combat
l_pocket = /obj/item/kitchen/knife/combat/survival
- gloves = /obj/item/clothing/gloves/combat
+ gloves = /obj/item/clothing/gloves/color/red/insulated
implants = list(/obj/item/implant/radio)
diff --git a/code/modules/clothing/outfits/factions/inteq.dm b/code/modules/clothing/outfits/factions/inteq.dm
index 6ad58203e2e6..16d1456361be 100644
--- a/code/modules/clothing/outfits/factions/inteq.dm
+++ b/code/modules/clothing/outfits/factions/inteq.dm
@@ -91,7 +91,7 @@
mask = /obj/item/clothing/mask/gas/sechailer/balaclava/inteq
dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq
shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
+ gloves = /obj/item/clothing/gloves/color/yellow
belt = /obj/item/storage/belt/utility/full
id = /obj/item/card/id/silver
diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm
index 8a04a0fb76f8..2301855c6809 100644
--- a/code/modules/clothing/outfits/factions/minutemen.dm
+++ b/code/modules/clothing/outfits/factions/minutemen.dm
@@ -93,6 +93,7 @@
head = /obj/item/clothing/head/hardhat/white
ears = /obj/item/radio/headset/clip
uniform = /obj/item/clothing/under/clip
+ gloves = /obj/item/clothing/gloves/color/yellow
alt_uniform = null
suit = /obj/item/clothing/suit/toggle/lawyer/clip
alt_suit = null
diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm
index 639839d1b65a..4f854da97f03 100644
--- a/code/modules/clothing/outfits/factions/syndicate.dm
+++ b/code/modules/clothing/outfits/factions/syndicate.dm
@@ -444,7 +444,7 @@
shoes =/obj/item/clothing/shoes/laceup
ears = /obj/item/radio/headset/syndicate/alt/captain
id = /obj/item/card/id/syndicate_command/captain_id
- gloves = /obj/item/clothing/gloves/combat
+ gloves = /obj/item/clothing/gloves/color/yellow
/datum/outfit/job/syndicate/ce/ngr
name = "Syndicate - Foreman (New Gorlex Republic)"
@@ -456,7 +456,7 @@
suit = /obj/item/clothing/suit/ngr
alt_suit = null
shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
+ gloves = /obj/item/clothing/gloves/color/red/insulated
//Chief Medical Officer
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 3c54e44cf035..25788f4556ae 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -105,7 +105,7 @@
max_integrity = 300
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
var/obj/item/clothing/head/helmet/space/hardsuit/helmet
actions_types = list(/datum/action/item_action/toggle_helmet)
var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit
@@ -207,6 +207,7 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_state = "hardsuit-engineering"
item_state = "eng_hardsuit"
+ siemens_coefficient = 0
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75)
supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine
@@ -304,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"
@@ -386,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)
@@ -417,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"
@@ -431,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"
@@ -441,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
@@ -509,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
@@ -666,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()
@@ -921,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
@@ -1065,6 +1063,7 @@
icon_state = "space-independent-eng"
item_state = "space-independent-eng"
desc = "A civilian space suit designed for construction and salvage in hazardous, low-pressure environments. Has shielding against radiation and heat and abundant storage.
Though they lack the physical protection of more expensive hardsuits, this type of suit is extremely common wherever construction and salvage work must be done in open space."
+ siemens_coefficient = 0
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/exo/large
resistance_flags = FIRE_PROOF
@@ -1201,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
@@ -1225,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/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index e5a98c7215e5..e2a405176c21 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -164,6 +164,7 @@
icon_state = "syndicate-black-engie"
item_state = "syndicate-black"
desc = "A space suit made of high-grade ballistic fabric with thermal and radiation shielding. More compact than a normal space suit while amost matching powered hardsuits for protection. Almost."
+ siemens_coefficient = 0
armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 40, "bomb" = 20, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75)
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
resistance_flags = FIRE_PROOF
diff --git a/code/modules/faction/faction_datum.dm b/code/modules/faction/faction_datum.dm
new file mode 100644
index 000000000000..450ee9688953
--- /dev/null
+++ b/code/modules/faction/faction_datum.dm
@@ -0,0 +1,62 @@
+/datum/faction
+ var/name
+ var/parent_faction
+ var/list/prefixes
+
+/datum/faction/syndicate
+ name = FACTION_SYNDICATE
+ parent_faction = /datum/faction/syndicate
+ prefixes = list("SEV", "SSV")
+
+/datum/faction/syndicate/ngr
+ name = FACTION_NGR
+ prefixes = list("NGRV")
+
+/datum/faction/syndicate/cybersun
+ name = FACTION_CYBERSUN
+ prefixes = list("CSSV")
+
+/datum/faction/syndicate/suns
+ name = FACTION_SUNS
+ prefixes = list("SUNS")
+
+/datum/faction/solgov
+ name = FACTION_SOLGOV
+ prefixes = list("SCSV")
+
+/datum/faction/srm
+ name = FACTION_SRM
+ prefixes = list("SRSV")
+
+/datum/faction/inteq
+ name = FACTION_INTEQ
+ prefixes = list("IRMV")
+
+/datum/faction/clip
+ name = FACTION_CLIP
+ prefixes = list("CMSV", "CMGSV")
+
+/datum/faction/nt
+ name = FACTION_NT
+ parent_faction = /datum/faction/nt
+ prefixes = list("NTSV")
+
+/datum/faction/nt/ns_logi
+ name = FACTION_NS_LOGI
+ prefixes = list("NSSV")
+
+/datum/faction/nt/vigilitas
+ name = FACTION_VIGILITAS
+ prefixes = list("VISV")
+
+/datum/faction/frontier
+ name = FACTION_FRONTIER
+ prefixes = list("FFV")
+
+/datum/faction/pgf
+ name = FACTION_PGF
+ prefixes = list("PGF", "PGFMC", "PGFN")
+
+/datum/faction/independent
+ name = FACTION_INDEPENDENT
+ prefixes = list("SV", "IMV", "ISV")
diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm
index 9b8e949b06e6..5129911cd311 100644
--- a/code/modules/food_and_drinks/food/snacks_pizza.dm
+++ b/code/modules/food_and_drinks/food/snacks_pizza.dm
@@ -215,14 +215,3 @@
icon_state = "pizzamargheritaslice"
filling_color = "#FFFFFF"
foodtype = GRAIN | VEGETABLES
-
-/obj/item/reagent_containers/food/snacks/pizzaslice/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/kitchen/rollingpin))
- if(!isturf(loc))
- to_chat(user, "You need to put [src] on a surface to roll it out!")
- return
- new /obj/item/stack/sheet/pizza(loc)
- to_chat(user, "You smoosh [src] into a cheesy sheet.")
- qdel(src)
- return
- return ..()
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
index 0dec69a393f5..751f6017eb90 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
@@ -64,17 +64,6 @@
result = /obj/item/food/bread/creamcheese
subcategory = CAT_BREAD
-/datum/crafting_recipe/food/mimanabread
- name = "Mimana bread"
- reqs = list(
- /datum/reagent/consumable/soymilk = 5,
- /obj/item/food/bread/plain = 1,
- /obj/item/reagent_containers/food/snacks/tofu = 3,
- /obj/item/reagent_containers/food/snacks/grown/banana/mime = 1
- )
- result = /obj/item/food/bread/mimana
- subcategory = CAT_BREAD
-
/datum/crafting_recipe/food/garlicbread
name = "Garlic Bread"
time = 40
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
index 38ea04421827..4f5838909486 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
@@ -91,34 +91,6 @@
result = /obj/item/reagent_containers/food/snacks/burger/tofu
subcategory = CAT_BURGER
-/datum/crafting_recipe/food/ghostburger
- name = "Ghost burger"
- reqs = list(
- /obj/item/ectoplasm = 1,
- /datum/reagent/consumable/sodiumchloride = 2,
- /obj/item/reagent_containers/food/snacks/bun = 1
- )
- result = /obj/item/reagent_containers/food/snacks/burger/ghost
- subcategory = CAT_BURGER
-
-/datum/crafting_recipe/food/clownburger
- name = "Clown burger"
- reqs = list(
- /obj/item/clothing/mask/gas/clown_hat = 1,
- /obj/item/reagent_containers/food/snacks/bun = 1
- )
- result = /obj/item/reagent_containers/food/snacks/burger/clown
- subcategory = CAT_BURGER
-
-/datum/crafting_recipe/food/mimeburger
- name = "Mime burger"
- reqs = list(
- /obj/item/clothing/mask/gas/mime = 1,
- /obj/item/reagent_containers/food/snacks/bun = 1
- )
- result = /obj/item/reagent_containers/food/snacks/burger/mime
- subcategory = CAT_BURGER
-
/datum/crafting_recipe/food/redburger
name = "Red burger"
reqs = list(
@@ -199,24 +171,6 @@
result = /obj/item/reagent_containers/food/snacks/burger/white
subcategory = CAT_BURGER
-/datum/crafting_recipe/food/spellburger
- name = "Spell burger"
- reqs = list(
- /obj/item/clothing/head/wizard/fake = 1,
- /obj/item/reagent_containers/food/snacks/bun = 1
- )
- result = /obj/item/reagent_containers/food/snacks/burger/spell
- subcategory = CAT_BURGER
-
-/datum/crafting_recipe/food/spellburger2
- name = "Spell burger"
- reqs = list(
- /obj/item/clothing/head/wizard = 1,
- /obj/item/reagent_containers/food/snacks/bun = 1
- )
- result = /obj/item/reagent_containers/food/snacks/burger/spell
- subcategory = CAT_BURGER
-
/datum/crafting_recipe/food/bigbiteburger
name = "Big bite burger"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index 7a3a4c6837b5..c79d4cea8474 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -96,15 +96,6 @@
result = /obj/item/food/cake/brain
subcategory = CAT_CAKE
-/datum/crafting_recipe/food/slimecake
- name = "Slime cake"
- reqs = list(
- /obj/item/slime_extract = 1,
- /obj/item/food/cake/plain = 1
- )
- result = /obj/item/food/cake/slimecake
- subcategory = CAT_CAKE
-
/datum/crafting_recipe/food/pumpkinspicecake
name = "Pumpkin spice cake"
reqs = list(
@@ -114,10 +105,10 @@
result = /obj/item/food/cake/pumpkinspice
subcategory = CAT_CAKE
-/datum/crafting_recipe/food/holycake
+/datum/crafting_recipe/food/angelcake
name = "Angel food cake"
reqs = list(
- /datum/reagent/water/holywater = 15,
+ /datum/reagent/consumable/cream = 25,
/obj/item/food/cake/plain = 1
)
result = /obj/item/food/cake/holy_cake
@@ -142,7 +133,7 @@
subcategory = CAT_CAKE
/datum/crafting_recipe/food/bscccake
- name = "blackberry and strawberry chocolate cake"
+ name = "Blackberry and Strawberry Chocolate cake"
reqs = list(
/obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/chocolatebar = 2,
@@ -152,7 +143,7 @@
subcategory = CAT_CAKE
/datum/crafting_recipe/food/bscvcake
- name = "blackberry and strawberry vanilla cake"
+ name = "Blackberry and Strawberry Vanilla cake"
reqs = list(
/obj/item/food/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/berries = 5
@@ -160,19 +151,8 @@
result = /obj/item/food/cake/bsvc
subcategory = CAT_CAKE
-/datum/crafting_recipe/food/clowncake
- name = "clown cake"
- always_availible = FALSE
- reqs = list(
- /obj/item/food/cake/plain = 1,
- /obj/item/reagent_containers/food/snacks/sundae = 2,
- /obj/item/reagent_containers/food/snacks/grown/banana = 5
- )
- result = /obj/item/food/cake/clown_cake
- subcategory = CAT_CAKE
-
/datum/crafting_recipe/food/vanillacake
- name = "vanilla cake"
+ name = "Vanilla cake"
always_availible = FALSE
reqs = list(
/obj/item/food/cake/plain = 1,
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
index 96c67eca7a9e..2032a33bd46d 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
@@ -86,28 +86,6 @@
////////////////////// Non-alcoholic recipes ///////////////////
-/datum/crafting_recipe/holybottle
- name = "Holy Water Flask"
- time = 30
- reqs = list(
- /obj/item/reagent_containers/food/drinks/bottle = 1,
- /datum/reagent/water/holywater = 100
- )
- result = /obj/item/reagent_containers/food/drinks/bottle/holywater
- category = CAT_DRINK
-
-//flask of unholy water is a beaker for some reason, I will try making it a bottle and add it here once the antag freeze is over. t. kryson
-
-/datum/crafting_recipe/nothingbottle
- name = "Nothing Bottle"
- time = 30
- reqs = list(
- /obj/item/reagent_containers/food/drinks/bottle = 1,
- /datum/reagent/consumable/nothing = 100
- )
- result = /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing
- category = CAT_DRINK
-
/datum/crafting_recipe/smallcarton
name = "Small Carton"
result = /obj/item/reagent_containers/food/drinks/sillycup/smallcarton
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
index edca42fda076..dbe7f1149631 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
@@ -44,18 +44,6 @@
result = /obj/item/reagent_containers/food/snacks/sundae
subcategory = CAT_ICE
-/datum/crafting_recipe/food/honkdae
- name ="Honkdae"
- reqs = list(
- /datum/reagent/consumable/cream = 5,
- /obj/item/clothing/mask/gas/clown_hat = 1,
- /obj/item/reagent_containers/food/snacks/grown/cherries = 1,
- /obj/item/reagent_containers/food/snacks/grown/banana = 2,
- /obj/item/reagent_containers/food/snacks/icecream = 1
- )
- result = /obj/item/reagent_containers/food/snacks/honkdae
- subcategory = CAT_ICE
-
/datum/crafting_recipe/food/cornuto
name = "Cornuto"
reqs = list(
@@ -182,28 +170,8 @@
result = /obj/item/reagent_containers/food/snacks/snowcones/fruitsalad
subcategory = CAT_ICE
-/datum/crafting_recipe/food/mime_sc
- name = "Mime snowcone"
- reqs = list(
- /obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/consumable/ice = 15,
- /datum/reagent/consumable/nothing = 5
- )
- result = /obj/item/reagent_containers/food/snacks/snowcones/mime
- subcategory = CAT_ICE
-
-/datum/crafting_recipe/food/clown_sc
- name = "Clown snowcone"
- reqs = list(
- /obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/consumable/ice = 15,
- /datum/reagent/consumable/laughter = 5
- )
- result = /obj/item/reagent_containers/food/snacks/snowcones/clown
- subcategory = CAT_ICE
-
/datum/crafting_recipe/food/soda_sc
- name = "Space Cola snowcone"
+ name = "Master Cola snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
/datum/reagent/consumable/ice = 15,
@@ -213,7 +181,7 @@
subcategory = CAT_ICE
/datum/crafting_recipe/food/spacemountainwind_sc
- name = "Space Mountain Wind snowcone"
+ name = "Comet Trail snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
/datum/reagent/consumable/ice = 15,
@@ -223,7 +191,7 @@
subcategory = CAT_ICE
/datum/crafting_recipe/food/pwrgame_sc
- name = "Pwrgame snowcone"
+ name = "Pacfuel snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
/datum/reagent/consumable/ice = 15,
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
index 72f2046a3b84..ade14f27241e 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
@@ -242,15 +242,6 @@
result = /obj/item/reagent_containers/food/snacks/bbqribs
subcategory = CAT_MEAT
-/datum/crafting_recipe/food/meatclown
- name = "Meat Clown"
- reqs = list(
- /obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
- /obj/item/reagent_containers/food/snacks/grown/banana = 1
- )
- result = /obj/item/reagent_containers/food/snacks/meatclown
- subcategory = CAT_MEAT
-
/datum/crafting_recipe/food/gumbo
name = "Black eyed gumbo"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index a1c1297647c3..3de7c3c3d75d 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -370,17 +370,6 @@
result = /obj/item/reagent_containers/food/snacks/donkpocket/pizza
subcategory = CAT_PASTRY
-/datum/crafting_recipe/food/donkpocket/honk
- time = 15
- name = "Honk-Pocket"
- reqs = list(
- /obj/item/reagent_containers/food/snacks/pastrybase = 1,
- /obj/item/reagent_containers/food/snacks/grown/banana = 1,
- /datum/reagent/consumable/sugar = 3
- )
- result = /obj/item/reagent_containers/food/snacks/donkpocket/honk
- subcategory = CAT_PASTRY
-
/datum/crafting_recipe/food/donkpocket/berry
time = 15
name = "Berry-pocket"
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
index 83e923f53fbf..5c9bcc56cc7d 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
@@ -130,18 +130,6 @@
result = /obj/item/reagent_containers/food/snacks/pie/grapetart
subcategory = CAT_PIE
-/datum/crafting_recipe/food/mimetart
- name = "Mime tart"
- always_availible = FALSE
- reqs = list(
- /datum/reagent/consumable/milk = 5,
- /datum/reagent/consumable/sugar = 5,
- /obj/item/reagent_containers/food/snacks/pie/plain = 1,
- /datum/reagent/consumable/nothing = 5
- )
- result = /obj/item/reagent_containers/food/snacks/pie/mimetart
- subcategory = CAT_PIE
-
/datum/crafting_recipe/food/berrytart
name = "Berry tart"
always_availible = FALSE
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
index 73ccc0f37897..778c639a074e 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
@@ -34,19 +34,6 @@
result = /obj/item/reagent_containers/food/snacks/salad/validsalad
subcategory = CAT_SALAD
-/datum/crafting_recipe/food/monkeysdelight
- name = "Monkeys delight"
- reqs = list(
- /datum/reagent/consumable/flour = 5,
- /datum/reagent/consumable/sodiumchloride = 1,
- /datum/reagent/consumable/blackpepper = 1,
- /obj/item/reagent_containers/glass/bowl = 1,
- /obj/item/reagent_containers/food/snacks/monkeycube = 1,
- /obj/item/reagent_containers/food/snacks/grown/banana = 1
- )
- result = /obj/item/reagent_containers/food/snacks/soup/monkeysdelight
- subcategory = CAT_SALAD
-
/datum/crafting_recipe/food/oatmeal
name = "Oatmeal"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
index d0558f94fdb5..daf98f0444a4 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
@@ -146,17 +146,6 @@
result = /obj/item/reagent_containers/food/snacks/soup/slime
subcategory = CAT_SOUP
-/datum/crafting_recipe/food/clownstears
- name = "Clowns tears"
- reqs = list(
- /datum/reagent/water = 10,
- /obj/item/reagent_containers/glass/bowl = 1,
- /obj/item/reagent_containers/food/snacks/grown/banana = 1,
- /obj/item/stack/sheet/mineral/hidden/hellstone = 1
- )
- result = /obj/item/reagent_containers/food/snacks/soup/clownstears
- subcategory = CAT_SOUP
-
/datum/crafting_recipe/food/mysterysoup
name = "Mystery soup"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm
index 2ad56d0ce62b..f123ced2ffc5 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm
@@ -29,15 +29,6 @@
result = /obj/item/food/spaghetti/meatballspaghetti
subcategory = CAT_SPAGHETTI
-/datum/crafting_recipe/food/spesslaw
- name = "Spesslaw"
- reqs = list(
- /obj/item/food/spaghetti/boiledspaghetti = 1,
- /obj/item/reagent_containers/food/snacks/meatball = 4
- )
- result = /obj/item/food/spaghetti/spesslaw
- subcategory = CAT_SPAGHETTI
-
/datum/crafting_recipe/food/beefnoodle
name = "Beef noodle"
reqs = list(
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/jobs/access.dm b/code/modules/jobs/access.dm
index d11bb6177e14..1d13660682f6 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -186,7 +186,7 @@
ACCESS_MECH_MINING, ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY, ACCESS_MECH_MEDICAL,
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_PHARMACY, ACCESS_RC_ANNOUNCE,
ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING, ACCESS_SOLGOV
- ) //WS Edit - SolGov Rep
+ )
/proc/get_all_centcom_access()
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN)
@@ -377,13 +377,10 @@
return "Science Exosuit Access"
if(ACCESS_MECH_ENGINE)
return "Engineering Exosuit Access"
-
-//WS Begin
if(ACCESS_CLONING)
return "Cloning Room"
if(ACCESS_SOLGOV)
return "SolGov Office"
-//WS End
/proc/get_centcom_access_desc(A)
switch(A)
@@ -412,8 +409,5 @@
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic", "Prisoner", "Psychologist", //WS Edit - Brig Phys / SolGov Rep
"Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "SolGov Representative") //WS Edit - Brig Phys / SolGov Rep
-/proc/get_all_job_icons() //For all existing HUD icons
- return get_all_jobs() + list("Emergency Response Team Commander", "Security Response Officer", "Engineering Response Officer", "Medical Response Officer", "Entertainment Response Officer", "Religious Response Officer", "Janitorial Response Officer", "Death Commando")
-
/proc/get_all_centcom_jobs()
return list("Central Command","VIP Guest","Custodian","Thunderdome Overseer","CentCom Official","Medical Officer","Research Officer","Special Ops Officer","Admiral","CentCom Commander","CentCom Bartender","Private Security Force")
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 46c20dd02e1b..038d69dff370 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -147,10 +147,10 @@
/obj/item/clothing/gloves/explorer/old
name = "prototype exploration gauntlets"
- desc = "Thick-fingered gloves with a heavy layer of armor plating, meant to stop all but the most brutal of stovetop-touching accidents in the field. This premium pre-run prototype comes with an added layer of electrical insulation."
+ desc = "Thick-fingered gloves with a heavy layer of armor plating, meant to stop all but the most brutal of stovetop-touching accidents in the field."
icon_state = "explorerold"
armor = list("melee" = 25, "bullet" = 10, "laser" = 15, "energy" = 15, "bomb" = 65, "bio" = 100, "rad" = 75, "fire" = 75, "acid" = 75)
- siemens_coefficient = 0
+ siemens_coefficient = 0.5
permeability_coefficient = 0.05
/obj/item/clothing/suit/hooded/survivor
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/dead/new_player/ship_select.dm b/code/modules/mob/dead/new_player/ship_select.dm
index fe88abdf3399..e130f6e404ce 100644
--- a/code/modules/mob/dead/new_player/ship_select.dm
+++ b/code/modules/mob/dead/new_player/ship_select.dm
@@ -166,7 +166,7 @@
continue
var/list/ship_data = list(
"name" = T.name,
- "faction" = ship_prefix_to_faction(T.prefix),
+ "faction" = T.faction_name,
"desc" = T.description,
"tags" = T.tags,
"crewCount" = length(T.job_slots),
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/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm
index ec972c9848f6..5499867bd76d 100644
--- a/code/modules/overmap/ships/controlled_ship_datum.dm
+++ b/code/modules/overmap/ships/controlled_ship_datum.dm
@@ -71,6 +71,7 @@
var/list/blacklisted = list()
var/datum/data_library/ship_record
+ var/datum/faction/faction_datum
/datum/overmap/ship/controlled/Rename(new_name, force = FALSE)
var/oldname = name
@@ -113,6 +114,7 @@
refresh_engines()
ship_record = SSdatacore.create_library(src)
ship_account = new(name, source_template.starting_funds)
+ faction_datum = source_template.faction_datum
#ifdef UNIT_TESTS
Rename("[source_template]", TRUE)
diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm
index 786005aa5ca1..cd38ed9f490f 100644
--- a/code/modules/projectiles/ammunition/ballistic/rifle.dm
+++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm
@@ -85,8 +85,8 @@
bullet_per_box = 20
/obj/item/ammo_casing/caseless/c299
- name = ".229 Eoehoma caseless bullet casing"
- desc = "A .229 Eoehoma caseless bullet casing."
+ name = ".299 Eoehoma caseless bullet casing"
+ desc = "A .299 Eoehoma caseless bullet casing."
icon_state = "caseless"
caliber = ".299 caseless"
projectile_type = /obj/projectile/bullet/c299
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index 3b1bdbc6eb1c..7f92dfad16a6 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
@@ -125,6 +125,26 @@
to_chat(user, "You load [num_loaded] cartridge\s into \the [src]!")
return num_loaded
+/obj/item/ammo_box/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ var/num_loaded = 0
+ var/obj/item/storage/belt/bandolier/to_load
+ if(istype(target,/obj/item/storage/belt/bandolier))
+ to_load = target
+ var/datum/component/storage/storage_to_load = to_load.GetComponent(/datum/component/storage)
+ for(var/obj/item/ammo_casing/casing_to_insert in stored_ammo)
+ if(!((to_load.contents.len >= storage_to_load.get_max_volume()) || do_after(user, 0.5 SECONDS, src)))
+ break
+ if(!storage_to_load.can_be_inserted(casing_to_insert,TRUE,user))
+ break
+ storage_to_load.handle_item_insertion(casing_to_insert,TRUE,user)
+ stored_ammo -= casing_to_insert
+ playsound(get_turf(src), 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE)
+ num_loaded++
+ update_ammo_count()
+ if(num_loaded)
+ to_chat(user, "You load [num_loaded] cartridge\s into \the [to_load]!")
+ return
/obj/item/ammo_box/attack_self(mob/user)
var/obj/item/ammo_casing/A = get_round()
if(!A)
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
index e8e5c59c9c65..5eb82be63279 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -292,7 +292,7 @@
name = "ammo box (10mm rubbershot)"
desc = "A box of 10mm rubbershot ammo, designed to disable targets without causing serious damage."
icon_state = "10mmbox-rubbershot"
- ammo_type = /obj/item/ammo_casing/c9mm/rubber
+ ammo_type = /obj/item/ammo_casing/c10mm/rubber
/obj/item/ammo_box/c10mm/ap
name = "ammo box (10mm armor-piercing)"
@@ -519,3 +519,11 @@
icon_state = "a44roum-hp"
ammo_type = /obj/item/ammo_casing/a44roum/hp
max_ammo = 50
+
+/obj/item/ammo_box/c299
+ name = "ammo box (.299 Eoehoma caseless)"
+ desc = "A box of .299 Eoehoma caseless, for use with the E-40 hybrid assault rifle."
+ icon_state = "299box"
+ ammo_type = /obj/item/ammo_casing/caseless/c299
+ max_ammo = 120
+ w_class = WEIGHT_CLASS_NORMAL // This is a lot of ammo
diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm
index 781641a6eef1..6065450a0e0f 100644
--- a/code/modules/projectiles/boxes_magazines/external/rifle.dm
+++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm
@@ -119,7 +119,7 @@
multiple_sprites = AMMO_BOX_FULL_EMPTY
/obj/item/ammo_box/magazine/e40
- name = "E-40 magazine (.229 Eoehoma caseless)"
+ name = "E-40 magazine (.299 Eoehoma caseless)"
icon_state = "e40_mag-1"
base_icon_state = "e40_mag"
ammo_type = /obj/item/ammo_casing/caseless/c299
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 023f6212e06f..30cf1d848a80 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -689,8 +689,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/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm
index bdabf0a5bda9..3342d60e2113 100644
--- a/code/modules/projectiles/guns/ballistic/assault.dm
+++ b/code/modules/projectiles/guns/ballistic/assault.dm
@@ -141,7 +141,7 @@
/obj/item/gun/ballistic/automatic/assault/e40
name = "\improper E-40 Hybrid Rifle"
- desc = "A Hybrid Assault Rifle, best known for being having a dual ballistic/laser system along with an advanced ammo counter. Once an icon for bounty hunters, age has broken most down, so these end up in collector's hands or as shoddy Frontiersmen laser SMG conversions when in their inheritted stockpiles. But if one were to find one in working condition, it would be just as formidable as back then. Chambered in .229 Eoehoma caseless, and uses energy for lasers."
+ desc = "A Hybrid Assault Rifle, best known for being having a dual ballistic/laser system along with an advanced ammo counter. Once an icon for bounty hunters, age has broken most down, so these end up in collector's hands or as shoddy Frontiersmen laser SMG conversions when in their inheritted stockpiles. But if one were to find one in working condition, it would be just as formidable as back then. Chambered in .299 Eoehoma caseless, and uses energy for lasers."
icon = 'icons/obj/guns/manufacturer/eoehoma/48x32.dmi'
lefthand_file = 'icons/obj/guns/manufacturer/eoehoma/lefthand.dmi'
righthand_file = 'icons/obj/guns/manufacturer/eoehoma/righthand.dmi'
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index f63328035959..0889396f5b8f 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -692,6 +692,70 @@ EMPTY_GUN_HELPER(shotgun/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 a04fc2995c26..ba8a09b78569 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 0ea5a8557c8d..995240829b28 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)
@@ -69,7 +69,7 @@
// .299 Eoehoma Caseless (E-40)
/obj/projectile/bullet/c299
- name = ".229 Eoehoma caseless bullet"
+ name = ".299 Eoehoma caseless bullet"
damage = 20
armour_penetration = 10
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/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index 5f79bbbf12e5..fdfe0f7f7341 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -604,13 +604,6 @@
category = list ("Medical Machinery")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-/datum/design/board/sheetifier
- name = "Sheetifier"
- desc = "This machine turns weird things into sheets."
- id = "sheetifier"
- build_path = /obj/item/circuitboard/machine/sheetifier
- category = list ("Misc. Machinery")
-
/datum/design/board/shieldwallgen
name = "Machine Design (Shield Wall Generator)"
desc = "A shield generator commonly used in xenobiology research."
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 31a7c508eecd..81f6938dd8c2 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -193,7 +193,7 @@
display_name = "Advanced Engineering"
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
prereq_ids = list("engineering", "emp_basic")
- design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "rcd_loaded", "rpd_loaded", "sheetifier")
+ design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "rcd_loaded", "rpd_loaded")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -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/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index ce89f62761db..710b99b888e5 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -586,7 +586,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/stealthy_weapons/combatglovesplus
name = "Combat Gloves Plus"
- desc = "A pair of gloves that are fireproof and electrically insulated, however unlike the regular Combat Gloves these use nanotechnology \
+ desc = "A pair of gloves that are fireproof and acid-resistant, however unlike the regular Combat Gloves these use nanotechnology \
to teach the martial art of krav maga to the wearer."
item = /obj/item/clothing/gloves/krav_maga/combatglovesplus
cost = 5
diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml
new file mode 100644
index 000000000000..ec4e60a8effb
--- /dev/null
+++ b/html/changelogs/archive/2024-09.yml
@@ -0,0 +1,71 @@
+2024-09-04:
+ generalthrax:
+ - balance: E-40 is now slightly less expensive
+2024-09-05:
+ Apogee-dev:
+ - balance: Removed electrical insulation from all gloves except insulated gloves
+ - balance: Removed siemens coefficient from hardsuits, except for engi atmos and
+ CE
+ - balance: Added siemens coefficient to engineer space suits
+ - balance: Replaced combat gloves with insulated gloves for some factions' engineer
+ lockers
+ Zevotech:
+ - bugfix: winter biodome and buried shrine ruins no longer have an egregious amount
+ 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
+2024-09-10:
+ Apogee-dev:
+ - balance: Made security hardsuits faster and blood-red hardsuits slower
+ - balance: Normalized some weird hardsuit speed outliers
+ - bugfix: NT captain gloves no longer lie about shockproofing
+ - balance: Reduced hollowpoint damage by 5 (and 8mm Hollowpoint by 6)
+ FalloutFalcon, MrMelbert, Coiax:
+ - 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
+ Gristlebee:
+ - rscadd: Bandolier auto-loading and examine hint
+ - 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
+ - rscadd: Gun safeties can be toggled from 1st level storage slots.
+ zimon9:
+ - rscadd: Adds a rubbershot box to the outpost market
+2024-09-11:
+ FalloutFalcon:
+ - rscdel: Removed sheetz. Feel free to send me threats for this crime!
+ - rscadd: Added faction datums, this will be cool soon!
+ Sadhorizon:
+ - rscdel: Removed a lot of cruft from the loadout.
+ - rscdel: Removed flamethrower slapcrafting.
+ - rscdel: Removed the Tribal crafting tab (some items were moved to other tabs).
+ - rscdel: Removed bone club, skull helmet and bone armor from the bone construction
+ menu.
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 ed252c636106..b0b549f72234 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"
@@ -169,6 +170,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"
@@ -341,6 +343,7 @@
#include "code\controllers\subsystem\economy.dm"
#include "code\controllers\subsystem\events.dm"
#include "code\controllers\subsystem\explosions.dm"
+#include "code\controllers\subsystem\faction.dm"
#include "code\controllers\subsystem\fire_burning.dm"
#include "code\controllers\subsystem\garbage.dm"
#include "code\controllers\subsystem\icon_smooth.dm"
@@ -572,7 +575,6 @@
#include "code\datums\components\crafting\recipes\drink.dm"
#include "code\datums\components\crafting\recipes\misc.dm"
#include "code\datums\components\crafting\recipes\robot.dm"
-#include "code\datums\components\crafting\recipes\tribal.dm"
#include "code\datums\components\crafting\recipes\weapon.dm"
#include "code\datums\components\fantasy\_fantasy.dm"
#include "code\datums\components\fantasy\affix.dm"
@@ -670,6 +672,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"
@@ -735,7 +738,6 @@
#include "code\datums\materials\_material.dm"
#include "code\datums\materials\basemats.dm"
#include "code\datums\materials\meat.dm"
-#include "code\datums\materials\pizza.dm"
#include "code\datums\mood_events\_mood_event.dm"
#include "code\datums\mood_events\beauty_events.dm"
#include "code\datums\mood_events\drink_events.dm"
@@ -935,7 +937,6 @@
#include "code\game\machinery\requests_console.dm"
#include "code\game\machinery\roulette_machine.dm"
#include "code\game\machinery\scan_gate.dm"
-#include "code\game\machinery\sheetifier.dm"
#include "code\game\machinery\shieldgen.dm"
#include "code\game\machinery\sleeper.dm"
#include "code\game\machinery\slotmachine.dm"
@@ -1498,6 +1499,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"
@@ -2161,6 +2163,7 @@
#include "code\modules\events\wizard\rpgloot.dm"
#include "code\modules\events\wizard\shuffle.dm"
#include "code\modules\events\wizard\summons.dm"
+#include "code\modules\faction\faction_datum.dm"
#include "code\modules\fishing\bait.dm"
#include "code\modules\fishing\fish_catalog.dm"
#include "code\modules\fishing\fishing_equipment.dm"
@@ -2256,6 +2259,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"