diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index 47f8b1df9941f..cc65d4b637215 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -112,10 +112,7 @@ jobs:
matrix:
arg: [
"BASIC_TESTS",
- "CREATE_AND_DESTROY_TEST",
- "PLANET_GEN_TEST",
- "RUIN_PLACEMENT_TEST",
- "SHIP_PLACEMENT_TEST"
+ "THE_TEST_THAT_FAILS"
]
uses: ./.github/workflows/run_integration_tests.yml
with:
diff --git a/.github/workflows/rerun_flaky_tests.yml b/.github/workflows/rerun_flaky_tests.yml
new file mode 100644
index 0000000000000..3035040dfb758
--- /dev/null
+++ b/.github/workflows/rerun_flaky_tests.yml
@@ -0,0 +1,31 @@
+name: Rerun/Report Flaky Tests
+on:
+ workflow_run:
+ workflows: [Checks]
+ types:
+ - completed
+jobs:
+ rerun_flaky_tests:
+ runs-on: ubuntu-latest
+ if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.run_attempt == 1 }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ - name: Rerun flaky tests
+ uses: actions/github-script@v6
+ with:
+ script: |
+ const { rerunFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js')
+ await rerunFlakyTests({ github, context })
+ report_flaky_tests:
+ runs-on: ubuntu-latest
+ if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.run_attempt == 2 }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ - name: Report flaky tests
+ uses: actions/github-script@v6
+ with:
+ script: |
+ const { reportFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js')
+ await reportFlakyTests({ github, context })
diff --git a/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm b/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm
index 12fdf42c7d447..9fc8444c5dd36 100644
--- a/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm
+++ b/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm
@@ -193,7 +193,7 @@
pixel_x = 6;
pixel_y = -6
},
-/obj/item/gun/ballistic/automatic/pistol/syndicate/no_mag{
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag{
name = "bible gun";
pixel_x = -7;
pixel_y = -8;
@@ -3198,8 +3198,8 @@
/obj/structure/closet/wardrobe/chaplain_black{
populate = 0
},
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/obj/structure/spacevine{
name = "vines"
},
diff --git a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm
index f5214804dbbd5..77c280d07e90a 100644
--- a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm
+++ b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm
@@ -5613,9 +5613,9 @@
/obj/structure/closet,
/obj/item/clothing/suit/armor/ngr/captain,
/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/turf/open/floor/wood{
icon_state = "wood-broken2"
},
@@ -5787,9 +5787,9 @@
/area/overmap_encounter/planetoid/jungle/explored)
"Nh" = (
/obj/structure/filingcabinet,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/turf/open/floor/mineral/plastitanium,
/area/ruin/jungle/starport/tower)
"Nj" = (
diff --git a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm
index fce0a7d6904d0..75b7e390c5403 100644
--- a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm
+++ b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm
@@ -3173,7 +3173,7 @@
/obj/structure/closet/cabinet,
/obj/item/hatchet/wooden,
/obj/item/ammo_box/a357,
-/obj/item/gun/ballistic/revolver/syndicate,
+/obj/item/gun/ballistic/revolver/viper,
/turf/open/floor/wood,
/area/ship/bridge)
"VM" = (
diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm
index ce83713f82bbc..3d00a493af055 100644
--- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm
+++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm
@@ -1108,7 +1108,7 @@
"Il" = (
/obj/effect/decal/cleanable/cobweb,
/obj/structure/rack,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
/turf/open/floor/plating,
/area/ruin/jungle/syndifort)
"Iv" = (
@@ -1220,8 +1220,8 @@
/obj/structure/rack,
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light/small/directional/south,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/turf/open/floor/plating,
/area/ruin/jungle/syndifort)
"My" = (
@@ -1593,9 +1593,9 @@
/area/ruin/jungle/syndifort)
"WG" = (
/obj/structure/closet/crate/secure/weapon,
-/obj/item/gun/ballistic/automatic/smg/c20r,
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
+/obj/item/gun/ballistic/automatic/smg/cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
/turf/open/floor/plating,
/area/ruin/jungle/syndifort/jerry)
"WT" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm
index ee1a8c17aad63..444f4ec52509e 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm
@@ -1115,10 +1115,10 @@
/turf/open/floor/plating,
/area/ruin/unpowered/listening_post)
"te" = (
-/obj/item/gun/ballistic/automatic/smg/c20r{
+/obj/item/gun/ballistic/automatic/smg/cobra{
spawnwithmagazine = 0
},
-/obj/item/ammo_box/magazine/smgm45{
+/obj/item/ammo_box/magazine/m45_cobra{
start_empty = 1
},
/obj/structure/guncloset,
@@ -2345,8 +2345,8 @@
/area/ruin/unpowered/listening_post)
"TM" = (
/obj/structure/closet/cabinet,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/effect/turf_decal/siding/wood{
dir = 6
},
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index 6415f9e79293c..739e427fc008f 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 b71bfb250aeeb..9937cbeb46bb8 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/LavaRuins/lavaland_surface_wrecked_factory.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm
index 0064e874017d8..2c84843cf776e 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm
@@ -4360,7 +4360,7 @@
/area/ruin/lavaland/factory/adminstrative)
"RC" = (
/obj/effect/turf_decal/siding/white,
-/obj/item/ammo_box/magazine/m10mm{
+/obj/item/ammo_box/magazine/m10mm_ringneck{
start_empty = 1
},
/obj/item/ammo_casing/c10mm{
@@ -5013,7 +5013,7 @@
/obj/effect/mob_spawn/human/corpse/syndicatesoldier,
/obj/effect/decal/cleanable/blood/old,
/obj/effect/turf_decal/siding/white,
-/obj/item/ammo_box/magazine/m10mm{
+/obj/item/ammo_box/magazine/m10mm_ringneck{
start_empty = 1
},
/turf/open/floor/concrete/pavement/lava,
diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm
index df70f94b314bf..d05a8c37f0719 100644
--- a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm
+++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm
@@ -587,12 +587,12 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/ammo_box/magazine/pistolm9mm{
+/obj/item/ammo_box/magazine/m9mm_rattlesnake{
pixel_y = 6;
pixel_x = 12;
layer = 3.1
},
-/obj/item/ammo_box/magazine/pistolm9mm{
+/obj/item/ammo_box/magazine/m9mm_rattlesnake{
pixel_y = 6;
pixel_x = 6;
start_empty = 1;
diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
index 8a79949e34b1c..a86efe2e97449 100644
--- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
+++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm
@@ -250,21 +250,6 @@
},
/turf/open/floor/plating,
/area/ruin/powered)
-"ga" = (
-/obj/structure/table/wood/reinforced,
-/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot{
- pixel_x = 5;
- pixel_y = 7
- },
-/obj/item/ammo_box/foambox/riot{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/powered)
"gp" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/cable{
@@ -1871,6 +1856,21 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating/rust,
/area/ruin/powered)
+"RC" = (
+/obj/structure/table/wood/reinforced,
+/obj/item/gun/ballistic/automatic/toy{
+ pixel_x = 5;
+ pixel_y = 7
+ },
+/obj/item/ammo_box/foambox/riot{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/powered)
"RM" = (
/obj/effect/spawner/structure/window/hollow/reinforced,
/turf/open/floor/plating,
@@ -2968,7 +2968,7 @@ RU
bO
cv
oc
-ga
+RC
Tl
ko
kU
@@ -3367,7 +3367,7 @@ of
IA
ro
ro
-hJ
+bf
Ew
LT
hi
@@ -3446,7 +3446,7 @@ je
kC
nq
qm
-hJ
+bf
tw
tC
vK
diff --git a/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm b/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm
index f5040429ad76e..342b1422b80f0 100644
--- a/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm
+++ b/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm
@@ -2000,9 +2000,9 @@
/obj/structure/closet/crate/secure/gear{
req_one_access_txt = "53"
},
-/obj/item/ammo_box/magazine/tec9,
-/obj/item/ammo_box/magazine/tec9,
-/obj/item/gun/ballistic/automatic/pistol/tec9,
+/obj/item/ammo_box/magazine/m9mm_rattlesnake,
+/obj/item/ammo_box/magazine/m9mm_rattlesnake,
+/obj/item/storage/pistolcase/ringneck,
/turf/open/floor/plasteel/mono/dark,
/area/ruin/rockplanet/shippingdocksecure)
"rK" = (
diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm
index d4c307df25d72..219fc7a6b6b62 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/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm
index 1c1d689c267a0..a2cb21cd1c1ca 100644
--- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm
+++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm
@@ -601,8 +601,8 @@
/area/ruin/space/has_grav/corporatemine/crewquarters)
"nN" = (
/obj/structure/closet/cabinet,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/obj/item/clothing/under/syndicate/donk,
/obj/item/clothing/suit/hazardvest/donk/qm,
/obj/item/reagent_containers/food/snacks/donkpocket,
@@ -2035,10 +2035,6 @@
/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
-"TO" = (
-/obj/structure/spawner/burrow/asteroid,
-/turf/open/floor/plating/asteroid/airless,
-/area/ruin/space)
"TR" = (
/obj/effect/decal/cleanable/blood/tracks{
dir = 8
@@ -2803,7 +2799,7 @@ Al
Al
Al
VM
-TO
+Iv
Al
Al
Al
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm
index b90bfbe776bd3..aa5797d05a956 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm
@@ -754,7 +754,7 @@
dir = 8
},
/obj/item/paper,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/ruin/powered)
diff --git a/_maps/configs/independent_beluga.json b/_maps/configs/independent_beluga.json
index 0449bc3a8caec..50f0591a41e9b 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 14133f03f5bb8..c944f29fc54bf 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 f63aca854e8bb..33a8cf8c1815a 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 26027d6fb5244..e770c725fc14c 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 bd7807a02bb42..92edb754984a6 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 cab2eb292c51a..a5a3881f23f2c 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 313b4cd71d95a..6a48dccd1e990 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 6119b39865d03..85f9c5f291a09 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 9fce68833fa0f..57f147867e29f 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 e9cffc6803208..5b5f1bf36a4c8 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 de5873f80d755..a44478e49c749 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 ee17e126cc342..a87d2582f097a 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 07236d5e45680..37ba6bc8b8135 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 718ecb9f12958..973a80045e93b 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 3d3617263f61a..f92f7d285f12d 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 858255729809d..b2d39c10f443c 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 1a3c957cc7b98..c91d7838408fe 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 459b7353d2920..232562369a3df 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 57e920f77d67e..cf28abc50219a 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 01568c3c1d539..c01e4d9b4801c 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 45264c8271565..e8f798d1edabd 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 b4287c3bca3b6..207a6a89864b4 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 db7d8b90d198b..4f50f429e210e 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 7e0804a7f2036..473389fce14ff 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 b4af3e797d39a..d9c2e207e4d96 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 2f61c3afa6015..a64c4c777342d 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 23114c8aa274e..7115072cb9fa9 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 4ed426746512e..9a77cc2c5dec2 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 7863a9d96896d..60ce1a8501a6a 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 702185c023871..6543d349bad98 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 9fe11023e376e..b1b14f2819382 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 b7ae54a1b6b92..92c1f80075f33 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 a5eefc5296df9..0e9695952e160 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 03caf71961838..6fffaff63e2b3 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 a9c9fcb943490..013be2455640c 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 a835e00b1ebae..df4c6485bb0fd 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 2bc7a358b7547..ca72d5b0eef5f 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 685a531874223..4680ebe932d6d 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 ef84cca126f54..b1be2eb333d8f 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 0f4129fa3d5d3..e5dbd47d61e23 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/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index de0cba96be2ff..13e075e9884d3 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -6986,8 +6986,8 @@
/area/centcom/evac)
"cIS" = (
/obj/structure/rack,
-/obj/item/gun/ballistic/shotgun/bulldog/inteq,
-/obj/item/gun/ballistic/shotgun/bulldog/inteq{
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq,
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq{
pixel_x = -5;
pixel_y = -5
},
diff --git a/_maps/ship_config_schema.json b/_maps/ship_config_schema.json
index 4c29f272413de..1efa9eb95f2cc 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 d7a3341b89273..618a40d3996fb 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 632337fab2636..15265d30016be 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 459bfebcd48fb..0481bd2506fab 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 ddad109a06fb3..1babd6a9b0013 100644
--- a/_maps/shuttles/inteq/inteq_talos.dmm
+++ b/_maps/shuttles/inteq/inteq_talos.dmm
@@ -654,6 +654,34 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/engineering/engine)
+"es" = (
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/clothing/head/soft/inteq,
+/obj/item/clothing/head/hardhat,
+/obj/item/clothing/shoes/combat,
+/obj/item/storage/belt/utility/full,
+/obj/effect/turf_decal/techfloor{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 8
+ },
+/obj/item/clothing/glasses/meson,
+/obj/item/radio/intercom/directional/east,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "eng_secure";
+ name = "artificer's locker";
+ req_access_txt = "11";
+ req_one_access = null
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"eu" = (
/obj/machinery/cryopod{
dir = 4
@@ -903,33 +931,6 @@
},
/turf/open/floor/plasteel/grimy,
/area/ship/crew)
-"gk" = (
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/clothing/head/soft/inteq,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/shoes/combat,
-/obj/item/storage/belt/utility/full,
-/obj/effect/turf_decal/techfloor{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 8
- },
-/obj/item/clothing/glasses/meson,
-/obj/item/radio/intercom/directional/east,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "eng_secure";
- name = "artificer's locker";
- req_access_txt = "11";
- req_one_access = null
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"gm" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt/dust,
@@ -1323,33 +1324,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/engineering)
-"iE" = (
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/clothing/head/soft/inteq,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/shoes/combat,
-/obj/structure/railing,
-/obj/item/storage/belt/utility/full,
-/obj/effect/turf_decal/techfloor{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 8
- },
-/obj/item/clothing/glasses/meson,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "eng_secure";
- name = "artificer's locker";
- req_access_txt = "11";
- req_one_access = null
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"iM" = (
/obj/effect/turf_decal/industrial/warning{
dir = 4
@@ -1611,42 +1585,6 @@
/obj/structure/sign/warning/securearea,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/engineering)
-"jY" = (
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/clothing/head/soft/inteq,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/shoes/combat,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "eng_secure";
- name = "artificer's locker";
- req_access_txt = "11";
- req_one_access = null
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/machinery/light/directional/north,
-/obj/item/storage/belt/utility/full,
-/obj/effect/turf_decal/techfloor{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 8
- },
-/obj/item/clothing/glasses/meson,
-/obj/machinery/light_switch{
- dir = 8;
- pixel_x = 20;
- pixel_y = 11
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering)
"jZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -3102,38 +3040,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/hallway/port)
-"sM" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/official/ion_carbine{
- pixel_x = -32
- },
-/obj/item/ammo_box/magazine/m12g/small{
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/item/ammo_box/magazine/m12g/small{
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/item/ammo_box/magazine/m12g/small{
- pixel_x = -5
- },
-/obj/item/ammo_box/magazine/m12g/small{
- pixel_x = -5
- },
-/obj/item/ammo_box/magazine/co9mm{
- pixel_x = 5
- },
-/obj/item/ammo_box/magazine/co9mm{
- pixel_x = -5
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/security/armory)
"sN" = (
/obj/effect/turf_decal/industrial/warning{
dir = 8
@@ -3413,23 +3319,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel/grimy,
/area/ship/crew)
-"ug" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/siding/thinplating/dark,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/retro/lasergun_new{
- pixel_x = -32
- },
-/obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{
- pixel_x = -8;
- pixel_y = 8
- },
-/obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{
- pixel_x = -12
- },
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/security/armory)
"ul" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 1
@@ -4937,6 +4826,43 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/crew/canteen)
+"EQ" = (
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/clothing/head/soft/inteq,
+/obj/item/clothing/head/hardhat,
+/obj/item/clothing/shoes/combat,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "eng_secure";
+ name = "artificer's locker";
+ req_access_txt = "11";
+ req_one_access = null
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/machinery/light/directional/north,
+/obj/item/storage/belt/utility/full,
+/obj/effect/turf_decal/techfloor{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 8
+ },
+/obj/item/clothing/glasses/meson,
+/obj/machinery/light_switch{
+ dir = 8;
+ pixel_x = 20;
+ pixel_y = 11
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"Fe" = (
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{
dir = 8
@@ -5341,6 +5267,23 @@
"Hq" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/security/armory)
+"Hv" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/siding/thinplating/dark,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/retro/lasergun_new{
+ pixel_x = -32
+ },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{
+ pixel_x = -8;
+ pixel_y = 8
+ },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{
+ pixel_x = -12
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/security/armory)
"HB" = (
/obj/machinery/suit_storage_unit/inherit/industrial,
/obj/item/clothing/suit/space/hardsuit/engine,
@@ -6244,37 +6187,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/storage)
-"Ok" = (
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "ce";
- name = "honorable artificer's locker";
- req_access_txt = "56"
- },
-/obj/item/clothing/under/syndicate/inteq/artificer,
-/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
-/obj/item/storage/backpack/industrial,
-/obj/item/clothing/suit/toggle/industrial,
-/obj/item/clothing/head/hardhat/white,
-/obj/item/clothing/head/beret/sec/inteq,
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/mask/gas/sechailer/balaclava/inteq,
-/obj/item/clothing/gloves/combat,
-/obj/item/megaphone/cargo{
- name = "engineering megaphone"
- },
-/obj/item/stamp/ce{
- name = "honorable artificer's rubber stamp"
- },
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/welding,
-/obj/item/pipe_dispenser,
-/obj/item/storage/belt/utility/chief{
- name = "honorable artificer's toolbelt"
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/engineering/communications)
"Oq" = (
/obj/effect/turf_decal/corner/opaque/yellow{
dir = 1
@@ -6304,6 +6216,34 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4,
/turf/open/floor/plasteel/tech,
/area/ship/engineering)
+"OJ" = (
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/clothing/head/soft/inteq,
+/obj/item/clothing/head/hardhat,
+/obj/item/clothing/shoes/combat,
+/obj/structure/railing,
+/obj/item/storage/belt/utility/full,
+/obj/effect/turf_decal/techfloor{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 8
+ },
+/obj/item/clothing/glasses/meson,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "eng_secure";
+ name = "artificer's locker";
+ req_access_txt = "11";
+ req_one_access = null
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering)
"OK" = (
/obj/machinery/cryopod{
dir = 8
@@ -6561,6 +6501,38 @@
},
/turf/open/floor/engine/air,
/area/ship/engineering/engine)
+"QP" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/official/ion_carbine{
+ pixel_x = -32
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = -5
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog{
+ pixel_x = -5
+ },
+/obj/item/ammo_box/magazine/co9mm{
+ pixel_x = 5
+ },
+/obj/item/ammo_box/magazine/co9mm{
+ pixel_x = -5
+ },
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/security/armory)
"QR" = (
/obj/effect/turf_decal/corner/opaque/yellow,
/obj/effect/turf_decal/corner/opaque/brown{
@@ -7809,6 +7781,38 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering/communications)
+"ZA" = (
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "ce";
+ name = "honorable artificer's locker";
+ req_access_txt = "56"
+ },
+/obj/item/clothing/under/syndicate/inteq/artificer,
+/obj/item/clothing/under/syndicate/inteq/skirt/artificer,
+/obj/item/storage/backpack/industrial,
+/obj/item/clothing/suit/toggle/industrial,
+/obj/item/clothing/head/hardhat/white,
+/obj/item/clothing/head/beret/sec/inteq,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/mask/gas/sechailer/balaclava/inteq,
+/obj/item/clothing/gloves/combat,
+/obj/item/megaphone/cargo{
+ name = "engineering megaphone"
+ },
+/obj/item/stamp/ce{
+ name = "honorable artificer's rubber stamp"
+ },
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/welding,
+/obj/item/pipe_dispenser,
+/obj/item/storage/belt/utility/chief{
+ name = "honorable artificer's toolbelt"
+ },
+/obj/machinery/airalarm/directional/west,
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/engineering/communications)
"ZB" = (
/obj/machinery/firealarm/directional/west,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -8049,7 +8053,7 @@ ZU
eC
Zu
SK
-Ok
+ZA
vp
HB
MS
@@ -8153,9 +8157,9 @@ aD
MC
zR
vp
-jY
-gk
-iE
+EQ
+es
+OJ
Xn
gP
qh
@@ -8576,9 +8580,9 @@ hT
sq
Rg
Hq
-sM
+QP
bI
-ug
+Hv
Hq
sw
sw
diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm
index 0b41578dd31bc..c405c803521a4 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/med_data/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/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm
index 9e8f7d6c81f58..7caded95d6ff2 100644
--- a/_maps/shuttles/inteq/inteq_vaquero.dmm
+++ b/_maps/shuttles/inteq/inteq_vaquero.dmm
@@ -244,11 +244,11 @@
req_access_txt = "3"
},
/obj/machinery/light/small/directional/north,
-/obj/item/ammo_box/magazine/m12g/small{
+/obj/item/ammo_box/magazine/m12g_bulldog{
pixel_x = -5;
pixel_y = -5
},
-/obj/item/ammo_box/magazine/m12g/small{
+/obj/item/ammo_box/magazine/m12g_bulldog{
pixel_x = 5
},
/obj/item/ammo_box/magazine/co9mm{
@@ -263,10 +263,7 @@
/obj/item/ammo_box/magazine/co9mm{
pixel_x = -5
},
-/obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{
- pixel_x = -4;
- pixel_y = 5;
- },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag,
/obj/item/gun/ballistic/automatic/pistol/commander/inteq,
/obj/item/gun/ballistic/automatic/pistol/commander/inteq{
pixel_y = -5
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm
index 351f188e33691..2cb4e641cd53c 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 e72766239a4f9..96bd414525c0c 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 0c860abb9e20c..564cf0733f9fe 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 342ffb8fa928b..d2ccfdcfe910b 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 b234552b67c67..19730904ab412 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/secure_data/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 14bce5a912e11..d89314c2f769d 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 87d7a39790f00..b235794d6cd4d 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/subshuttles/frontiersmen_brawler.dmm b/_maps/shuttles/subshuttles/frontiersmen_brawler.dmm
index d9c361701213c..20fe92d380f75 100644
--- a/_maps/shuttles/subshuttles/frontiersmen_brawler.dmm
+++ b/_maps/shuttles/subshuttles/frontiersmen_brawler.dmm
@@ -370,7 +370,9 @@
/obj/structure/window/reinforced{
dir = 1
},
-/obj/machinery/power/smes/shuttle/precharged,
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 2
+ },
/obj/structure/cable,
/turf/open/floor/plasteel/tech/grid,
/area/ship/bridge)
diff --git a/_maps/shuttles/subshuttles/independent_kunai.dmm b/_maps/shuttles/subshuttles/independent_kunai.dmm
index e1975d0a1737f..1cd4e42355e57 100644
--- a/_maps/shuttles/subshuttles/independent_kunai.dmm
+++ b/_maps/shuttles/subshuttles/independent_kunai.dmm
@@ -260,7 +260,9 @@
dir = 1
},
/obj/structure/cable,
-/obj/machinery/power/smes/shuttle/precharged,
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 1
+ },
/obj/machinery/door/poddoor/shutters{
id = "polengine";
name = "Engine Shutters"
@@ -278,7 +280,9 @@
dir = 1
},
/obj/structure/cable,
-/obj/machinery/power/smes/shuttle/precharged,
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 2
+ },
/obj/machinery/door/poddoor/shutters{
id = "polengine"
},
diff --git a/_maps/shuttles/subshuttles/inteq_anvil.dmm b/_maps/shuttles/subshuttles/inteq_anvil.dmm
index 5e591774e2594..4a4c4073ced17 100644
--- a/_maps/shuttles/subshuttles/inteq_anvil.dmm
+++ b/_maps/shuttles/subshuttles/inteq_anvil.dmm
@@ -67,7 +67,9 @@
/turf/open/floor/plasteel/mono/dark,
/area/ship/bridge)
"g" = (
-/obj/machinery/power/smes/shuttle/precharged,
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 2
+ },
/obj/structure/cable,
/obj/structure/window/reinforced{
dir = 1
diff --git a/_maps/shuttles/subshuttles/inteq_haste.dmm b/_maps/shuttles/subshuttles/inteq_haste.dmm
index 25324d952a5eb..177dcd41bc5cc 100644
--- a/_maps/shuttles/subshuttles/inteq_haste.dmm
+++ b/_maps/shuttles/subshuttles/inteq_haste.dmm
@@ -121,7 +121,9 @@
/obj/structure/cable/yellow{
icon_state = "0-4"
},
-/obj/machinery/power/smes/shuttle/precharged,
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 2
+ },
/turf/open/floor/plasteel/tech,
/area/ship/bridge)
"K" = (
diff --git a/_maps/shuttles/subshuttles/syndicate_runner.dmm b/_maps/shuttles/subshuttles/syndicate_runner.dmm
index 69430bf09157c..d7f64a0d43ee7 100644
--- a/_maps/shuttles/subshuttles/syndicate_runner.dmm
+++ b/_maps/shuttles/subshuttles/syndicate_runner.dmm
@@ -1,6 +1,8 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
-/obj/machinery/power/smes/shuttle/precharged,
+/obj/machinery/power/smes/shuttle/precharged{
+ dir = 2
+ },
/obj/structure/window/reinforced{
dir = 4
},
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
index ae46dc0286f32..3649eed505b27 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)
@@ -880,27 +880,6 @@
},
/turf/open/floor/plating,
/area/ship/maintenance/starboard)
-"pt" = (
-/obj/effect/turf_decal/industrial/outline,
-/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/accessory/armband/cargo,
-/obj/item/storage/belt/mining,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/machinery/light/small/directional/north,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "mining";
- name = "wrecker's locker";
- req_access = list(48)
- },
-/obj/machinery/firealarm/directional/east,
-/obj/effect/turf_decal/industrial/outline,
-/obj/item/clothing/under/syndicate/ngr/jumpsuit,
-/obj/item/clothing/suit/hazardvest/ngr,
-/obj/item/clothing/head/hardhat/ngr,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/storage)
"pu" = (
/obj/structure/bed,
/obj/item/bedsheet/black,
@@ -1027,12 +1006,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" = (
@@ -1135,25 +1115,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/maintenance/port)
-"tx" = (
-/obj/effect/turf_decal/industrial/outline,
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "mining";
- name = "wrecker's locker";
- req_access = list(48)
- },
-/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/accessory/armband/cargo,
-/obj/item/storage/belt/mining,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/machinery/airalarm/directional/north,
-/obj/item/clothing/under/syndicate/ngr/jumpsuit,
-/obj/item/clothing/suit/hazardvest/ngr,
-/obj/item/clothing/head/hardhat/ngr,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/storage)
"tI" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -1268,8 +1229,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 +1291,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,
@@ -1429,6 +1390,19 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
+"yH" = (
+/obj/effect/turf_decal/industrial/outline,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/item/gun/energy/plasmacutter{
+ pixel_y = 10
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/storage)
"yM" = (
/obj/item/lighter{
pixel_x = -8;
@@ -1637,32 +1611,6 @@
},
/turf/open/floor/plating,
/area/ship/storage)
-"Bv" = (
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "warden";
- name = "foreman's locker";
- req_access = list(56)
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/gloves/combat,
-/obj/item/storage/belt/utility/chief{
- name = "\improper Foreman's toolbelt"
- },
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/item/storage/toolbox/syndicate,
-/obj/item/wrench/combat,
-/obj/item/clothing/accessory/holster,
-/obj/item/grenade/chem_grenade/metalfoam,
-/obj/machinery/airalarm/directional/west,
-/obj/item/clothing/suit/ngr,
-/obj/item/clothing/head/hardhat/ngr/foreman,
-/obj/item/tank/jetpack/suit,
-/obj/item/storage/pistolcase/stechkin,
-/turf/open/floor/carpet/red,
-/area/ship/cargo/office)
"BB" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/corner_techfloor_grid{
@@ -1752,8 +1700,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 +1800,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 +1892,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)
@@ -1971,6 +1919,26 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/plasteel/tech/grid,
/area/ship/maintenance/port)
+"GM" = (
+/obj/effect/turf_decal/industrial/outline,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "mining";
+ name = "wrecker's locker";
+ req_access = list(48)
+ },
+/obj/item/clothing/shoes/workboots/mining,
+/obj/item/clothing/accessory/armband/cargo,
+/obj/item/storage/belt/mining,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/welding,
+/obj/machinery/airalarm/directional/north,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
+/obj/item/pickaxe/drill,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/storage)
"GV" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/crew/dorm)
@@ -2495,6 +2463,32 @@
},
/turf/closed/wall/mineral/plastitanium,
/area/ship/bridge)
+"QG" = (
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "warden";
+ name = "foreman's locker";
+ req_access = list(56)
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/ngr/officer,
+/obj/item/clothing/gloves/combat,
+/obj/item/storage/belt/utility/chief{
+ name = "\improper Foreman's toolbelt"
+ },
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/welding,
+/obj/item/storage/toolbox/syndicate,
+/obj/item/wrench/combat,
+/obj/item/clothing/accessory/holster,
+/obj/item/grenade/chem_grenade/metalfoam,
+/obj/machinery/airalarm/directional/west,
+/obj/item/clothing/suit/ngr,
+/obj/item/clothing/head/hardhat/ngr/foreman,
+/obj/item/tank/jetpack/suit,
+/obj/item/storage/pistolcase/ringneck,
+/turf/open/floor/carpet/red,
+/area/ship/cargo/office)
"QW" = (
/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium,
/obj/machinery/door/poddoor/shutters{
@@ -2852,8 +2846,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)
@@ -3038,6 +3032,28 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/cargo/office)
+"Xv" = (
+/obj/effect/turf_decal/industrial/outline,
+/obj/item/clothing/shoes/workboots/mining,
+/obj/item/clothing/accessory/armband/cargo,
+/obj/item/storage/belt/mining,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/welding,
+/obj/machinery/light/small/directional/north,
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "mining";
+ name = "wrecker's locker";
+ req_access = list(48)
+ },
+/obj/machinery/firealarm/directional/east,
+/obj/effect/turf_decal/industrial/outline,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
+/obj/item/pickaxe/drill,
+/turf/open/floor/plasteel/tech/grid,
+/area/ship/storage)
"Xz" = (
/obj/machinery/power/shuttle/engine/fueled/plasma{
dir = 4
@@ -3131,8 +3147,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)
@@ -3152,19 +3168,6 @@
/obj/structure/closet/emcloset/wall/directional/north,
/turf/open/floor/plasteel/tech,
/area/ship/hallway/central)
-"Yc" = (
-/obj/effect/turf_decal/industrial/outline,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/obj/structure/rack,
-/obj/item/pickaxe/drill/jackhammer/old{
- pixel_y = 10
- },
-/obj/item/pickaxe/drill/jackhammer/old,
-/turf/open/floor/plasteel/tech/grid,
-/area/ship/storage)
"Yv" = (
/obj/machinery/nuclearbomb/beer{
desc = "An evidently-decommissioned nuclear warhead. Sloppy paint on the casing declares 'VICTORY OVER NANOTRASEN,' followed by a badly-smudged date of 25-something. A drink tap has been drilled directly into the metal.";
@@ -3384,7 +3387,7 @@ iT
XO
VX
iL
-Yc
+yH
Sm
Sa
sE
@@ -3423,7 +3426,7 @@ KH
Ic
vG
iT
-tx
+GM
dh
Oy
KX
@@ -3444,7 +3447,7 @@ uq
La
Gw
iT
-pt
+Xv
qO
xx
rF
@@ -3598,7 +3601,7 @@ bN
Zn
fL
KW
-Bv
+QG
QW
nn
Zb
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm
index 987b372d217a7..d218dc5581b18 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
@@ -960,6 +960,25 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/aft)
+"jy" = (
+/obj/effect/turf_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/toolbox/ammo/c10mm,
+/obj/structure/closet/secure_closet/wall/directional/west{
+ icon_state = "sec_wall";
+ name = "Ammo Locker";
+ req_access_txt = "1"
+ },
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ship/security/armory)
"jA" = (
/obj/machinery/door/poddoor/shutters{
dir = 8;
@@ -1082,6 +1101,26 @@
/obj/structure/table/reinforced,
/turf/open/floor/circuit/green/off,
/area/ship/maintenance/starboard)
+"kw" = (
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "hos";
+ name = "captain's locker";
+ req_access_txt = "20"
+ },
+/obj/item/clothing/gloves/krav_maga/combatglovesplus,
+/obj/item/clothing/glasses/thermal/eyepatch,
+/obj/item/gun/ballistic/revolver/viper,
+/obj/item/clothing/under/syndicate/sniper,
+/obj/item/ammo_box/a357,
+/obj/item/ammo_box/a357,
+/obj/item/radio/headset/syndicate/alt/leader,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/under/syndicate/hardliners/officer,
+/obj/item/clothing/suit/toggle/armor/vest/hardliners,
+/obj/item/clothing/head/hardliners/peaked,
+/turf/open/floor/carpet/black,
+/area/ship/bridge)
"kD" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/crew/canteen)
@@ -1153,30 +1192,6 @@
},
/turf/open/floor/circuit/green/off,
/area/ship/maintenance/starboard)
-"lr" = (
-/obj/structure/closet/wall/orange/directional/south{
- name = "Engineering locker"
- },
-/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/head/welding,
-/obj/item/clothing/head/hardhat/red,
-/obj/item/clothing/head/hardhat/weldhat/orange{
- pixel_x = 7;
- pixel_y = 2
- },
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/storage/belt/utility/full/engi,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "engine fuel pump"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/item/clothing/under/syndicate/hardliners,
-/obj/item/clothing/suit/hazardvest/hardliners,
-/turf/open/floor/plasteel/tech,
-/area/ship/engineering)
"ls" = (
/obj/structure/railing/corner,
/obj/effect/turf_decal/steeldecal/steel_decals_central4,
@@ -1390,8 +1405,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 +1433,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 +1714,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;
@@ -1773,6 +1788,20 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"qP" = (
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/gun/ballistic/automatic/pistol/ringneck{
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/industrial/fire{
+ dir = 8
+ },
+/obj/structure/guncloset,
+/obj/structure/railing,
+/obj/item/gun/ballistic/automatic/smg/cobra,
+/obj/machinery/light/directional/east,
+/turf/open/floor/pod/dark,
+/area/ship/security/armory)
"qZ" = (
/obj/structure/chair/comfy/grey/directional/east,
/obj/effect/decal/cleanable/dirt/dust,
@@ -1846,16 +1875,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,
@@ -1994,25 +2023,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
-"sX" = (
-/obj/effect/turf_decal/industrial/warning{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/storage/toolbox/ammo/c10mm,
-/obj/structure/closet/secure_closet/wall/directional/west{
- icon_state = "sec_wall";
- name = "Ammo Locker";
- req_access_txt = "1"
- },
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
-/turf/open/floor/mineral/plastitanium/red,
-/area/ship/security/armory)
"sY" = (
/obj/effect/turf_decal/corner_techfloor_grid{
dir = 6
@@ -2201,8 +2211,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
@@ -2725,20 +2735,6 @@
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ship/engineering)
-"yH" = (
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
-/obj/item/gun/ballistic/automatic/pistol/syndicate{
- pixel_y = 3
- },
-/obj/effect/turf_decal/industrial/fire{
- dir = 8
- },
-/obj/structure/guncloset,
-/obj/structure/railing,
-/obj/item/gun/ballistic/automatic/smg/c20r,
-/obj/machinery/light/directional/east,
-/turf/open/floor/pod/dark,
-/area/ship/security/armory)
"yJ" = (
/obj/structure/frame/machine,
/obj/structure/grille/broken,
@@ -2872,32 +2868,6 @@
},
/turf/open/floor/plating,
/area/ship/bridge)
-"AL" = (
-/obj/effect/turf_decal/borderfloor{
- dir = 1
- },
-/obj/item/gun/ballistic/automatic/pistol/syndicate{
- pixel_y = 3
- },
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/c10mm,
-/obj/item/clothing/gloves/tackler/combat/insulated,
-/obj/structure/closet/secure_closet/wall/directional/west{
- icon_state = "sec_wall";
- name = "Sergeant's Locker";
- req_access_txt = "58"
- },
-/obj/item/melee/classic_baton/telescopic,
-/obj/item/clothing/suit/armor/vest/blueshirt,
-/obj/item/clothing/accessory/holster,
-/obj/item/clothing/shoes/combat,
-/obj/item/radio/headset/syndicate,
-/obj/item/clothing/under/syndicate/hardliners/officer,
-/obj/item/clothing/suit/armor/hardliners/sergeant,
-/obj/item/clothing/head/hardliners/peaked,
-/turf/open/floor/plasteel/dark,
-/area/ship/bridge)
"AS" = (
/obj/effect/turf_decal/industrial/warning,
/obj/effect/decal/cleanable/dirt,
@@ -3116,26 +3086,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/cargo)
-"Ek" = (
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "hos";
- name = "captain's locker";
- req_access_txt = "20"
- },
-/obj/item/clothing/gloves/krav_maga/combatglovesplus,
-/obj/item/clothing/glasses/thermal/eyepatch,
-/obj/item/gun/ballistic/revolver/syndicate,
-/obj/item/clothing/under/syndicate/sniper,
-/obj/item/ammo_box/a357,
-/obj/item/ammo_box/a357,
-/obj/item/radio/headset/syndicate/alt/leader,
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/under/syndicate/hardliners/officer,
-/obj/item/clothing/suit/toggle/armor/vest/hardliners,
-/obj/item/clothing/head/hardliners/peaked,
-/turf/open/floor/carpet/black,
-/area/ship/bridge)
"El" = (
/obj/structure/filingcabinet,
/obj/item/folder/documents/syndicate/red,
@@ -3597,8 +3547,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 +3605,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,
@@ -3804,6 +3754,32 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/hallway/central)
+"KK" = (
+/obj/structure/closet/wall/orange/directional/south{
+ name = "Engineering locker"
+ },
+/obj/item/clothing/shoes/workboots,
+/obj/item/clothing/head/welding,
+/obj/item/clothing/head/hardhat/red,
+/obj/item/clothing/head/hardhat/weldhat/orange{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/storage/belt/utility/full/engi,
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "engine fuel pump"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/item/clothing/under/syndicate/hardliners,
+/obj/item/clothing/suit/hazardvest/hardliners,
+/obj/item/gun/energy/plasmacutter,
+/obj/item/clothing/gloves/color/red/insulated,
+/turf/open/floor/plasteel/tech,
+/area/ship/engineering)
"KL" = (
/obj/structure/table/reinforced{
color = "#c1b6a5"
@@ -3862,8 +3838,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 +3959,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 +4107,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 +5052,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;
@@ -5349,6 +5325,32 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/ship/bridge)
+"YY" = (
+/obj/effect/turf_decal/borderfloor{
+ dir = 1
+ },
+/obj/item/gun/ballistic/automatic/pistol/ringneck{
+ pixel_y = 3
+ },
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/c10mm,
+/obj/item/clothing/gloves/tackler/combat/insulated,
+/obj/structure/closet/secure_closet/wall/directional/west{
+ icon_state = "sec_wall";
+ name = "Sergeant's Locker";
+ req_access_txt = "58"
+ },
+/obj/item/melee/classic_baton/telescopic,
+/obj/item/clothing/suit/armor/vest/blueshirt,
+/obj/item/clothing/accessory/holster,
+/obj/item/clothing/shoes/combat,
+/obj/item/radio/headset/syndicate,
+/obj/item/clothing/under/syndicate/hardliners/officer,
+/obj/item/clothing/suit/armor/hardliners/sergeant,
+/obj/item/clothing/head/hardliners/peaked,
+/turf/open/floor/plasteel/dark,
+/area/ship/bridge)
"Zb" = (
/obj/structure/railing{
dir = 4
@@ -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
@@ -5628,7 +5630,7 @@ wG
yb
YR
nA
-lr
+KK
hY
"}
(6,1,1) = {"
@@ -5826,7 +5828,7 @@ kh
gE
ue
vp
-sX
+jy
Ni
km
tf
@@ -5865,7 +5867,7 @@ jv
VR
gE
gE
-yH
+qP
VU
MV
eY
@@ -6183,7 +6185,7 @@ wR
ae
GS
tC
-Ek
+kw
RK
tC
yd
@@ -6263,7 +6265,7 @@ It
dG
WR
ub
-AL
+YY
jn
tC
dc
diff --git a/_maps/shuttles/syndicate/syndicate_litieguai.dmm b/_maps/shuttles/syndicate/syndicate_litieguai.dmm
index 09ad85bc606f9..2b12f177f57ed 100644
--- a/_maps/shuttles/syndicate/syndicate_litieguai.dmm
+++ b/_maps/shuttles/syndicate/syndicate_litieguai.dmm
@@ -1032,15 +1032,15 @@
name = "firearms locker";
req_access_txt = "5"
},
-/obj/item/ammo_box/magazine/m10mm/rubber,
-/obj/item/ammo_box/magazine/m10mm/rubber,
-/obj/item/ammo_box/magazine/m10mm/rubber,
-/obj/item/ammo_box/magazine/m10mm/ap,
-/obj/item/ammo_box/magazine/m10mm/ap,
-/obj/item/ammo_box/magazine/m10mm/ap,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/machinery/light/small/directional/east,
/turf/open/floor/plasteel/tech,
/area/ship/crew)
@@ -1500,7 +1500,7 @@
/obj/item/gun/syringe,
/obj/item/reagent_containers/glass/bottle/sodium_thiopental,
/obj/item/clothing/glasses/hud/health/night,
-/obj/item/gun/ballistic/automatic/pistol/syndicate,
+/obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/item/clothing/gloves/color/latex/nitrile/evil,
/obj/item/clothing/suit/toggle/labcoat/raincoat,
/obj/item/clothing/shoes/combat,
@@ -2849,7 +2849,7 @@
name = "captain's closet";
req_access_txt = "20"
},
-/obj/item/gun/ballistic/revolver/syndicate,
+/obj/item/gun/ballistic/revolver/viper,
/obj/item/clothing/suit/armor/vest/capcarapace/cybersun,
/obj/item/clothing/shoes/combat,
/obj/item/clothing/head/HoS/cybersun,
diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
index 7d738e1057b10..bca4d457916a1 100644
--- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
+++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
@@ -83,47 +83,6 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ship/bridge)
-"aD" = (
-/obj/structure/sign/poster/contraband/m90{
- icon_state = "poster-m90";
- pixel_x = -32
- },
-/obj/effect/turf_decal/spline/fancy/opaque/black{
- dir = 8
- },
-/obj/effect/turf_decal/spline/fancy/opaque/syndiered{
- dir = 9
- },
-/obj/structure/closet/secure_closet{
- anchored = 1;
- icon_state = "syndicate";
- name = "lieutenant locker";
- req_access = list(3,150)
- },
-/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/suit/armor/ngr/captain,
-/obj/item/clothing/head/ngr/peaked,
-/obj/item/clothing/shoes/combat,
-/obj/item/megaphone/sec{
- name = "syndicate megaphone"
- },
-/obj/item/storage/pistolcase/stechkin,
-/obj/item/clothing/head/HoS/beret/syndicate,
-/obj/item/radio/headset/syndicate/alt/leader,
-/obj/item/clothing/gloves/krav_maga/combatglovesplus,
-/obj/item/ammo_box/magazine/m10mm/ap,
-/obj/item/ammo_box/magazine/m10mm/ap,
-/obj/item/clothing/suit/armor/hos/trenchcoat,
-/obj/machinery/button/door{
- pixel_x = 9;
- pixel_y = 25;
- id = "twinkle_armory";
- name = "Armory Access";
- req_access = list(3,150)
- },
-/obj/item/ammo_box/c10mm,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"aE" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -132,6 +91,33 @@
},
/turf/open/floor/plating,
/area/ship/engineering/atmospherics)
+"aF" = (
+/obj/structure/rack,
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag{
+ pixel_y = -3;
+ pixel_x = 2
+ },
+/obj/machinery/light/directional/north,
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_x = -8;
+ pixel_y = -4
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_y = -7
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_y = -9;
+ pixel_x = -10
+ },
+/obj/item/ammo_box/magazine/m12g_bulldog/drum{
+ pixel_y = -12
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"aG" = (
/obj/structure/closet/secure_closet/wall/directional/east,
/obj/item/kitchen/knife,
@@ -898,31 +884,6 @@
"fH" = (
/turf/open/floor/engine,
/area/ship/engineering/engine)
-"fJ" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/syndicate/no_mag,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
- },
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/machinery/light/directional/east,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"fK" = (
/obj/machinery/light/directional/south,
/turf/open/floor/mineral/plastitanium/red,
@@ -1195,6 +1156,30 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/tech,
/area/ship/hallway/port)
+"hh" = (
+/obj/structure/closet/secure_closet/engineering_personal{
+ req_access = list(150,10);
+ populate = 0
+ },
+/obj/effect/turf_decal/corner/opaque/orange{
+ dir = 10
+ },
+/obj/machinery/light/directional/south,
+/obj/item/clothing/shoes/magboots/syndie,
+/obj/item/clothing/head/helmet/space/syndicate/black/engie,
+/obj/item/clothing/suit/space/syndicate/black/engie,
+/obj/item/pipe_dispenser,
+/obj/item/storage/belt/utility/syndicate,
+/obj/item/clothing/under/syndicate/gec,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/head/hardhat/red{
+ name = "hard hat"
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
"hr" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -1218,6 +1203,33 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/bridge)
+"hB" = (
+/obj/effect/turf_decal/corner/opaque/orange/three_quarters{
+ dir = 1
+ },
+/obj/item/clothing/under/syndicate/gec,
+/obj/item/clothing/shoes/magboots/syndie,
+/obj/item/clothing/head/helmet/space/syndicate/black/engie,
+/obj/item/clothing/suit/space/syndicate/black/engie,
+/obj/structure/closet/secure_closet/engineering_personal{
+ req_access = list(150,10);
+ populate = 0
+ },
+/obj/item/pipe_dispenser,
+/obj/structure/sign/poster/contraband/gec{
+ pixel_y = -32
+ },
+/obj/item/storage/belt/utility/syndicate,
+/obj/item/clothing/under/syndicate/gec,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/head/hardhat/red{
+ name = "hard hat"
+ },
+/obj/item/gun/energy/plasmacutter,
+/turf/open/floor/plasteel/dark,
+/area/ship/engineering)
"hN" = (
/obj/effect/turf_decal/corner/opaque/orange{
dir = 5
@@ -1807,28 +1819,17 @@
/obj/item/ammo_box/a357,
/turf/open/floor/carpet/nanoweave/red,
/area/ship/crew/dorm/dormtwo)
-"ky" = (
-/obj/machinery/portable_atmospherics/canister/toxins,
-/obj/machinery/light/directional/east,
-/turf/open/floor/pod/dark,
-/area/ship/engineering/atmospherics)
-"kE" = (
-/obj/effect/turf_decal/syndicateemblem/top/right,
-/obj/effect/turf_decal/spline/fancy/opaque/black{
- dir = 8
+"kr" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
},
-/turf/open/floor/mineral/plastitanium/red,
-/area/ship/bridge)
-"kF" = (
-/obj/machinery/holopad/emergency/command,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/crew/office)
-"kH" = (
/obj/item/clothing/suit/armor/vest/syndie,
/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/syndicate/no_mag,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
/obj/item/storage/belt/security/webbing{
name = "syndicate webbing";
desc = "Unique and versatile chest rig, can hold syndicate gear."
@@ -1838,18 +1839,27 @@
},
/obj/item/clothing/shoes/combat,
/obj/item/clothing/gloves/color/black,
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/machinery/light/directional/east,
-/obj/item/clothing/head/soft/black,
-/obj/item/clothing/glasses/sunglasses,
+/obj/machinery/light/directional/west,
/obj/item/flashlight/seclite,
/obj/item/kitchen/knife/combat,
/turf/open/floor/mineral/plastitanium,
/area/ship/security)
+"ky" = (
+/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/light/directional/east,
+/turf/open/floor/pod/dark,
+/area/ship/engineering/atmospherics)
+"kE" = (
+/obj/effect/turf_decal/syndicateemblem/top/right,
+/obj/effect/turf_decal/spline/fancy/opaque/black{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/ship/bridge)
+"kF" = (
+/obj/machinery/holopad/emergency/command,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/crew/office)
"kJ" = (
/obj/item/tank/internals/plasma/full,
/obj/structure/cable{
@@ -2079,6 +2089,33 @@
},
/turf/open/floor/wood,
/area/ship/crew/canteen)
+"lZ" = (
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/machinery/light/directional/east,
+/obj/item/clothing/head/soft/black,
+/obj/item/clothing/glasses/sunglasses,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"ma" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -2758,31 +2795,6 @@
},
/turf/open/floor/plasteel/tech/grid,
/area/ship/engineering/atmospherics)
-"pN" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/syndicate/no_mag,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
- },
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/machinery/light/directional/west,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
"pO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 8
@@ -3286,6 +3298,32 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/plasteel/tech,
/area/ship/engineering/atmospherics)
+"sU" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/machinery/light/directional/east,
+/obj/item/clothing/head/beret/black,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"sW" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 8
@@ -3293,6 +3331,32 @@
/obj/effect/turf_decal/industrial/outline,
/turf/open/floor/plasteel/mono/dark,
/area/ship/engineering/engine)
+"sX" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "explosives locker"
+ },
+/obj/item/storage/backpack/duffelbag/syndie/c4{
+ pixel_x = -1;
+ pixel_y = -10
+ },
+/obj/item/gun/ballistic/rocketlauncher/mako{
+ pixel_y = 6;
+ pixel_x = -3
+ },
+/obj/item/ammo_casing/caseless/rocket/hedp,
+/obj/item/ammo_casing/caseless/rocket/hedp,
+/obj/item/ammo_casing/caseless/rocket{
+ pixel_x = -6;
+ pixel_y = -3
+ },
+/obj/item/ammo_casing/caseless/rocket{
+ pixel_x = -6;
+ pixel_y = -3
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"sY" = (
/obj/machinery/computer/atmos_control/tank/nitrogen_tank{
dir = 8
@@ -3504,11 +3568,30 @@
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{
dir = 1
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 8
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ship/medical)
+"uM" = (
+/obj/structure/rack,
+/obj/machinery/camera/autoname{
+ dir = 6
+ },
+/obj/item/ammo_box/magazine/sniper_rounds{
+ pixel_x = 9;
+ pixel_y = 4
+ },
+/obj/item/ammo_box/magazine/sniper_rounds{
+ pixel_x = 6;
+ pixel_y = 1
},
-/turf/open/floor/plasteel/dark,
-/area/ship/medical)
+/obj/item/gun/ballistic/automatic/marksman/taipan/no_mag{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"uP" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible,
/obj/structure/sign/poster/contraband/atmosia_independence{
@@ -4416,32 +4499,6 @@
rad_insulation = 0
},
/area/ship/medical)
-"zZ" = (
-/obj/effect/turf_decal/corner/opaque/orange/three_quarters{
- dir = 1
- },
-/obj/item/clothing/under/syndicate/gec,
-/obj/item/clothing/shoes/magboots/syndie,
-/obj/item/clothing/head/helmet/space/syndicate/black/engie,
-/obj/item/clothing/suit/space/syndicate/black/engie,
-/obj/structure/closet/secure_closet/engineering_personal{
- req_access = list(150,10);
- populate = 0
- },
-/obj/item/pipe_dispenser,
-/obj/structure/sign/poster/contraband/gec{
- pixel_y = -32
- },
-/obj/item/storage/belt/utility/syndicate,
-/obj/item/clothing/under/syndicate/gec,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/head/hardhat/red{
- name = "hard hat"
- },
-/turf/open/floor/plasteel/dark,
-/area/ship/engineering)
"Af" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{
dir = 8
@@ -4633,51 +4690,6 @@
rad_insulation = 0
},
/area/ship/security)
-"Bn" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "operative's locker"
- },
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/gun/ballistic/automatic/pistol/syndicate/no_mag,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/ammo_box/magazine/m10mm,
-/obj/item/storage/belt/security/webbing{
- name = "syndicate webbing";
- desc = "Unique and versatile chest rig, can hold syndicate gear."
- },
-/obj/item/radio/headset/syndicate/alt{
- keyslot = null
- },
-/obj/item/clothing/shoes/combat,
-/obj/item/clothing/gloves/color/black,
-/obj/machinery/light/directional/east,
-/obj/item/clothing/head/beret/black,
-/obj/item/flashlight/seclite,
-/obj/item/kitchen/knife/combat,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security)
-"Bq" = (
-/obj/structure/rack,
-/obj/machinery/camera/autoname{
- dir = 6
- },
-/obj/item/ammo_box/magazine/sniper_rounds{
- pixel_x = 9;
- pixel_y = 4
- },
-/obj/item/ammo_box/magazine/sniper_rounds{
- pixel_x = 6;
- pixel_y = 1
- },
-/obj/item/gun/ballistic/automatic/marksman/sniper_rifle/no_mag{
- pixel_x = -3;
- pixel_y = 6
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"Bs" = (
/obj/effect/turf_decal/industrial/warning{
dir = 1
@@ -5031,6 +5043,29 @@
},
/turf/open/floor/plasteel/dark,
/area/ship/medical)
+"Dj" = (
+/obj/structure/rack,
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_x = 10;
+ pixel_y = -1
+ },
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_x = 4
+ },
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_y = -3;
+ pixel_x = 7
+ },
+/obj/item/ammo_box/magazine/m556_42_hydra/small{
+ pixel_y = -2
+ },
+/obj/item/gun/ballistic/automatic/assault/hydra/dmr/no_mag{
+ pixel_x = -7;
+ pixel_y = 4
+ },
+/obj/item/gun/ballistic/automatic/assault/hydra/dmr/no_mag,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"Dk" = (
/obj/effect/turf_decal/corner/opaque/orange{
dir = 5
@@ -5606,29 +5641,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/security)
-"Gm" = (
-/obj/structure/rack,
-/obj/item/ammo_box/magazine/ebr{
- pixel_x = 10;
- pixel_y = -1
- },
-/obj/item/ammo_box/magazine/ebr{
- pixel_x = 4
- },
-/obj/item/ammo_box/magazine/ebr{
- pixel_y = -3;
- pixel_x = 7
- },
-/obj/item/ammo_box/magazine/ebr{
- pixel_y = -2
- },
-/obj/item/gun/ballistic/automatic/marksman/ebr/no_mag{
- pixel_x = -7;
- pixel_y = 4
- },
-/obj/item/gun/ballistic/automatic/marksman/ebr/no_mag,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"Gn" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
dir = 1;
@@ -7097,6 +7109,31 @@
/obj/structure/catwalk/over/plated_catwalk/dark,
/turf/open/floor/plating,
/area/ship/hallway/starboard)
+"Pf" = (
+/obj/structure/closet/secure_closet/security{
+ populate = 0;
+ icon_state = "syndicate";
+ name = "operative's locker"
+ },
+/obj/item/clothing/suit/armor/vest/syndie,
+/obj/item/clothing/head/helmet/operator,
+/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/storage/belt/security/webbing{
+ name = "syndicate webbing";
+ desc = "Unique and versatile chest rig, can hold syndicate gear."
+ },
+/obj/item/radio/headset/syndicate/alt{
+ keyslot = null
+ },
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/gloves/color/black,
+/obj/machinery/light/directional/east,
+/obj/item/flashlight/seclite,
+/obj/item/kitchen/knife/combat,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"Pn" = (
/obj/machinery/light/small/directional/east,
/obj/effect/turf_decal/trimline/opaque/syndiered/warning,
@@ -7493,33 +7530,6 @@
},
/turf/open/floor/plasteel/tech,
/area/ship/hallway/aft)
-"Rv" = (
-/obj/structure/rack,
-/obj/item/gun/ballistic/shotgun/bulldog/no_mag{
- pixel_x = -7;
- pixel_y = 7
- },
-/obj/item/gun/ballistic/shotgun/bulldog/no_mag{
- pixel_y = -3;
- pixel_x = 2
- },
-/obj/machinery/light/directional/north,
-/obj/item/ammo_box/magazine/m12g{
- pixel_x = -8;
- pixel_y = -4
- },
-/obj/item/ammo_box/magazine/m12g{
- pixel_y = -7
- },
-/obj/item/ammo_box/magazine/m12g{
- pixel_y = -9;
- pixel_x = -10
- },
-/obj/item/ammo_box/magazine/m12g{
- pixel_y = -12
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"Ry" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -7568,6 +7578,27 @@
},
/turf/open/floor/circuit/red,
/area/ship/engineering/communications)
+"RF" = (
+/obj/structure/rack,
+/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
+ pixel_x = 2;
+ pixel_y = 8
+ },
+/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
+ pixel_y = 3
+ },
+/obj/item/gun/ballistic/automatic/smg/cobra/no_mag{
+ pixel_y = -2;
+ pixel_x = 3
+ },
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/obj/item/ammo_box/magazine/m45_cobra,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security/armory)
"RG" = (
/obj/effect/turf_decal/corner/opaque/orange{
dir = 5
@@ -8041,32 +8072,6 @@
"Um" = (
/turf/open/floor/pod/dark,
/area/ship/cargo)
-"Up" = (
-/obj/structure/closet/secure_closet/security{
- populate = 0;
- icon_state = "syndicate";
- name = "explosives locker"
- },
-/obj/item/storage/backpack/duffelbag/syndie/c4{
- pixel_x = -1;
- pixel_y = -10
- },
-/obj/item/gun/ballistic/rocketlauncher{
- pixel_y = 6;
- pixel_x = -3
- },
-/obj/item/ammo_casing/caseless/rocket/hedp,
-/obj/item/ammo_casing/caseless/rocket/hedp,
-/obj/item/ammo_casing/caseless/rocket{
- pixel_x = -6;
- pixel_y = -3
- },
-/obj/item/ammo_casing/caseless/rocket{
- pixel_x = -6;
- pixel_y = -3
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"Uu" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2,
/obj/effect/turf_decal/corner/opaque/orange/full,
@@ -8812,6 +8817,47 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ship/bridge)
+"YI" = (
+/obj/structure/sign/poster/contraband/m90{
+ icon_state = "poster-m90";
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/spline/fancy/opaque/black{
+ dir = 8
+ },
+/obj/effect/turf_decal/spline/fancy/opaque/syndiered{
+ dir = 9
+ },
+/obj/structure/closet/secure_closet{
+ anchored = 1;
+ icon_state = "syndicate";
+ name = "lieutenant locker";
+ req_access = list(3,150)
+ },
+/obj/item/clothing/under/syndicate/ngr/officer,
+/obj/item/clothing/suit/armor/ngr/captain,
+/obj/item/clothing/head/ngr/peaked,
+/obj/item/clothing/shoes/combat,
+/obj/item/megaphone/sec{
+ name = "syndicate megaphone"
+ },
+/obj/item/storage/pistolcase/ringneck,
+/obj/item/clothing/head/HoS/beret/syndicate,
+/obj/item/radio/headset/syndicate/alt/leader,
+/obj/item/clothing/gloves/krav_maga/combatglovesplus,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/ammo_box/magazine/m10mm_ringneck,
+/obj/item/clothing/suit/armor/hos/trenchcoat,
+/obj/machinery/button/door{
+ pixel_x = 9;
+ pixel_y = 25;
+ id = "twinkle_armory";
+ name = "Armory Access";
+ req_access = list(3,150)
+ },
+/obj/item/ammo_box/c10mm,
+/turf/open/floor/mineral/plastitanium,
+/area/ship/security)
"YJ" = (
/obj/effect/turf_decal/trimline/opaque/syndiered/filled/line,
/obj/machinery/iv_drip,
@@ -8830,27 +8876,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/engine,
/area/ship/engineering/engine)
-"YO" = (
-/obj/structure/rack,
-/obj/item/gun/ballistic/automatic/smg/c20r/no_mag{
- pixel_x = 2;
- pixel_y = 8
- },
-/obj/item/gun/ballistic/automatic/smg/c20r/no_mag{
- pixel_y = 3
- },
-/obj/item/gun/ballistic/automatic/smg/c20r/no_mag{
- pixel_y = -2;
- pixel_x = 3
- },
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
-/obj/item/ammo_box/magazine/smgm45,
-/turf/open/floor/mineral/plastitanium,
-/area/ship/security/armory)
"YR" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/brigdoor/eastleft,
@@ -8896,29 +8921,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ship/bridge)
-"Zc" = (
-/obj/structure/closet/secure_closet/engineering_personal{
- req_access = list(150,10);
- populate = 0
- },
-/obj/effect/turf_decal/corner/opaque/orange{
- dir = 10
- },
-/obj/machinery/light/directional/south,
-/obj/item/clothing/shoes/magboots/syndie,
-/obj/item/clothing/head/helmet/space/syndicate/black/engie,
-/obj/item/clothing/suit/space/syndicate/black/engie,
-/obj/item/pipe_dispenser,
-/obj/item/storage/belt/utility/syndicate,
-/obj/item/clothing/under/syndicate/gec,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/head/hardhat/red{
- name = "hard hat"
- },
-/turf/open/floor/plasteel/dark,
-/area/ship/engineering)
"Zg" = (
/obj/effect/turf_decal/industrial/warning{
dir = 6
@@ -9482,7 +9484,7 @@ ZX
Qd
bM
zH
-zZ
+hB
ZX
hN
IT
@@ -9517,7 +9519,7 @@ ZX
fz
zK
qK
-Zc
+hh
ZX
RG
BV
@@ -9674,7 +9676,7 @@ xo
pc
TT
PL
-Gm
+Dj
Si
Sg
PL
@@ -9744,7 +9746,7 @@ oX
PN
ec
PL
-YO
+RF
ji
wg
Uc
@@ -9779,14 +9781,14 @@ ea
BG
tY
PL
-Rv
+aF
jx
TC
on
ep
sd
da
-kH
+lZ
Bj
"}
(22,1,1) = {"
@@ -9814,9 +9816,9 @@ sO
AK
Pe
PL
-Bq
+uM
Fr
-Up
+sX
PL
Tt
sd
@@ -9856,7 +9858,7 @@ PL
BL
EG
da
-pN
+kr
Bj
"}
(24,1,1) = {"
@@ -9884,7 +9886,7 @@ sO
QC
Cq
Bj
-aD
+YI
nt
oc
Eh
@@ -9961,7 +9963,7 @@ Bj
Tt
sd
da
-fJ
+Pf
Bj
"}
(27,1,1) = {"
@@ -10031,7 +10033,7 @@ Pa
At
sd
da
-pN
+kr
Bj
"}
(29,1,1) = {"
@@ -10136,7 +10138,7 @@ GD
Nj
eN
da
-Bn
+sU
Bj
"}
(32,1,1) = {"
diff --git a/check_regex.yaml b/check_regex.yaml
index 441f1e44d7438..3b5e13a650e58 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 4780f819f5559..4abffb067dd2e 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 0000000000000..4906c6bdd4fdb
--- /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 0000000000000..32fbb4867b2df
--- /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 5eb0209dda4cf..67ce47e166fc0 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/guns.dm b/code/__DEFINES/guns.dm
index 01cfa1e5bd5c7..b98da0bc1d183 100644
--- a/code/__DEFINES/guns.dm
+++ b/code/__DEFINES/guns.dm
@@ -69,6 +69,11 @@
#define MANUFACTURER_PGF "the Etherbor Industries emblem"
#define MANUFACTURER_IMPORT "Lanchester Import Co."
+// Misfire chances if the gun's safety is off
+#define GUN_NO_SAFETY_MALFUNCTION_CHANCE_LOW 100
+#define GUN_NO_SAFETY_MALFUNCTION_CHANCE_MEDIUM 100
+#define GUN_NO_SAFETY_MALFUNCTION_CHANCE_HIGH 100
+
/////////////////
// ATTACHMENTS //
/////////////////
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index a89965da7becc..02e6853338d7c 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 61038b17c1ecc..db31a4b5552d4 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 36aa57e486251..54874bc9e16b1 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -121,6 +121,7 @@
#define INIT_ORDER_JOBS 65
#define INIT_ORDER_QUIRKS 60
#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 7b687330d71a1..c97fa62ffc5d0 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 571bade19ef2b..30db6fc98f33e 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 6f4ec205448c2..d78667dbfb4b9 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 a155e570df4ff..d87596cf828c6 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 0000000000000..106fb4687b835
--- /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 a8f905e5fe252..3fecc68fbfe49 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 df5ae1319c2e0..e7d0ebaace60c 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 95b37502bcaf4..e574337f98613 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 0ed4acb5be78f..e766417891572 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 a5558682e86b9..cab33ef5f7962 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 c831b85d78786..0000000000000
--- 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 c1dde04b3650d..65983b06df231 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/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 32a74c843b017..1a23a5c4830c6 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -143,7 +143,7 @@
original_parent = parent
. = ..()
can_hold = typecacheof(list(
- /obj/item/gun/ballistic/automatic/pistol/syndicate,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/item/gun/ballistic/revolver,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
diff --git a/code/datums/elements/plant_backfire.dm b/code/datums/elements/plant_backfire.dm
new file mode 100644
index 0000000000000..47cd1de51fe98
--- /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 ab3a76d2ddffb..d834a03b02a99 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 9539b28477749..8512753a22af1 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 62479d90e0d38..0000000000000
--- 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 31a5e9165d3c1..91a3fbe884c0a 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/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 02b96c1b81de5..17e2208cdebe2 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -49,6 +49,7 @@
. = ..()
if(!.)
return
+ owner.trip_with_gun("knockdown")
ADD_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id))
/datum/status_effect/incapacitating/knockdown/on_remove()
@@ -79,6 +80,7 @@
. = ..()
if(!.)
return
+ owner.trip_with_gun("paralyze")
ADD_TRAIT(owner, TRAIT_INCAPACITATED, TRAIT_STATUS_EFFECT(id))
ADD_TRAIT(owner, TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id))
ADD_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id))
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 85ab6ee64a146..675d5e7e5407f 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -118,7 +118,7 @@
ears = /obj/item/radio/headset/syndicate/alt
l_pocket = /obj/item/modular_computer/tablet/nukeops
id = /obj/item/card/id/syndicate
- belt = /obj/item/gun/ballistic/automatic/pistol/syndicate
+ belt = /obj/item/gun/ballistic/automatic/pistol/ringneck
backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\
/obj/item/kitchen/knife/combat/survival)
@@ -165,10 +165,10 @@
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
internals_slot = ITEM_SLOT_RPOCKET
belt = /obj/item/storage/belt/military
- r_hand = /obj/item/gun/ballistic/shotgun/bulldog
+ r_hand = /obj/item/gun/ballistic/shotgun/automatic/bulldog
backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\
/obj/item/tank/jetpack/oxygen/harness=1,\
- /obj/item/gun/ballistic/automatic/pistol/syndicate=1,\
+ /obj/item/gun/ballistic/automatic/pistol/ringneck=1,\
/obj/item/kitchen/knife/combat/survival)
diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm
deleted file mode 100644
index ec9f0f5ff5a35..0000000000000
--- 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 6283cd2786457..e99d24e3f558f 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/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index 4177d89579651..267e6bb24f4e7 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -387,8 +387,8 @@
icon_state = "poster_dday" // human sprite by quin
/obj/structure/sign/poster/contraband/stechkin
- name = "Stechkin Pistol"
- desc = "A poster advertising the Scarborough Arms Stechkin conealable pistol. It has a silencer attached, showing off the stealth capablities, while also looking badass as all hell."
+ name = "Ringneck Pistol"
+ desc = "A poster advertising the Scarborough Arms Ringneck conealable pistol. It has a silencer attached, showing off the stealth capablities, while also looking badass as all hell."
icon_state = "poster_stechkin"
/obj/structure/sign/poster/contraband/energy_swords
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 8eadf9c62a2c9..3257122746339 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -50,14 +50,14 @@
lootdoubles = FALSE
loot = list(
- /obj/item/gun/ballistic/automatic/pistol/syndicate = 8,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck = 8,
/obj/item/gun/ballistic/shotgun/automatic/combat = 5,
/obj/item/gun/ballistic/automatic/pistol/deagle,
/obj/item/gun/ballistic/revolver/mateba
)
/obj/effect/spawner/lootdrop/armory_contraband/metastation
- loot = list(/obj/item/gun/ballistic/automatic/pistol/syndicate = 5,
+ loot = list(/obj/item/gun/ballistic/automatic/pistol/ringneck = 5,
/obj/item/gun/ballistic/shotgun/automatic/combat = 5,
/obj/item/gun/ballistic/automatic/pistol/deagle,
/obj/item/storage/box/syndie_kit/throwing_weapons = 3,
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 45d83621b431a..376d1ba16d11a 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/attachments/stock.dm b/code/game/objects/items/attachments/stock.dm
index 98ecbf18eaa8e..c28700af6b640 100644
--- a/code/game/objects/items/attachments/stock.dm
+++ b/code/game/objects/items/attachments/stock.dm
@@ -42,3 +42,7 @@
/obj/item/attachment/foldable_stock/spitter
icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi'
icon_state = "spitter_stock"
+
+/obj/item/attachment/foldable_stock/sidewinder
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ icon_state = "sidewinder_stock"
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index a74ed8c81b273..1d6a0d61c1809 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 50da920b06f1e..79b37d41e52c7 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 f3f891bad11d4..c4cafbc8fdb96 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 e2507dfb911b4..704a388d97f1b 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 ead6b8aeb8f11..4443218e43858 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/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 125b10a10043d..0076de0b81557 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -581,17 +581,17 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
for(var/i in 1 to 6)
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g/slug(src)
- new /obj/item/ammo_box/magazine/m12g/slug(src)
- new /obj/item/ammo_box/magazine/m12g/dragon(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum/slug(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum/slug(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum/dragon(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg
desc = "A large duffel bag, packed to the brim with C-20r magazines."
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
for(var/i in 1 to 9)
- new /obj/item/ammo_box/magazine/smgm45(src)
+ new /obj/item/ammo_box/magazine/m45_cobra(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
@@ -621,18 +621,18 @@
desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor."
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/gun/ballistic/automatic/smg/c20r(src)
+ new /obj/item/ammo_box/magazine/m45_cobra(src)
+ new /obj/item/ammo_box/magazine/m45_cobra(src)
+ new /obj/item/gun/ballistic/automatic/smg/cobra(src)
new /obj/item/attachment/silencer(src)
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses."
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
- new /obj/item/gun/ballistic/shotgun/bulldog(src)
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g(src)
+ new /obj/item/gun/ballistic/shotgun/automatic/bulldog(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
@@ -641,7 +641,7 @@
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
new /obj/item/storage/firstaid/tactical(src)
- new /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot(src)
+ new /obj/item/gun/ballistic/automatic/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
@@ -651,7 +651,7 @@
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
new /obj/item/storage/box/syndie_kit/chemical(src)
new /obj/item/gun/syringe/syndicate(src)
- new /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot(src)
+ new /obj/item/gun/ballistic/automatic/toy(src)
new /obj/item/storage/box/syringes(src)
new /obj/item/ammo_box/foambox/riot(src)
new /obj/item/grenade/chem_grenade/bioterrorfoam(src)
@@ -672,9 +672,9 @@
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/watertank/op(src)
new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src)
- new /obj/item/gun/ballistic/automatic/pistol/APS(src)
- new /obj/item/ammo_box/magazine/pistolm9mm(src)
- new /obj/item/ammo_box/magazine/pistolm9mm(src)
+ new /obj/item/gun/ballistic/automatic/pistol/rattlesnake(src)
+ new /obj/item/ammo_box/magazine/m9mm_rattlesnake(src)
+ new /obj/item/ammo_box/magazine/m9mm_rattlesnake(src)
new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src)
new /obj/item/reagent_containers/hypospray/medipen/stimulants(src)
new /obj/item/grenade/syndieminibomb(src)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index fbe1bbc73131c..fb56a7a15886d 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
@@ -324,7 +325,7 @@
/obj/item/storage/belt/security/webbing/bulldog/PopulateContents()
. = ..()
for(var/i in 1 to 3)
- new /obj/item/ammo_box/magazine/m12g(src)
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src)
/obj/item/storage/belt/mining
name = "explorer's webbing"
@@ -356,6 +357,7 @@
/obj/item/clothing/gloves,
/obj/item/resonator,
/obj/item/mining_scanner,
+ /obj/item/pinpointer/mineral,
/obj/item/pickaxe,
/obj/item/shovel,
/obj/item/stack/sheet/animalhide,
@@ -480,12 +482,12 @@
/obj/item/storage/belt/military/c20r/PopulateContents()
. = ..()
for(var/i in 1 to 4)
- new /obj/item/ammo_box/magazine/smgm45(src)
+ new /obj/item/ammo_box/magazine/m45_cobra(src)
/obj/item/storage/belt/military/assault/m90/PopulateContents()
. = ..()
for(var/i in 1 to 4)
- new /obj/item/ammo_box/magazine/m556(src)
+ new /obj/item/ammo_box/magazine/m556_42_hydra(src)
/obj/item/storage/belt/military/snack
name = "tactical snack rig"
@@ -680,7 +682,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 +696,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/briefcase.dm b/code/game/objects/items/storage/briefcase.dm
index 64a3a11cf3277..dfc65846bd117 100644
--- a/code/game/objects/items/storage/briefcase.dm
+++ b/code/game/objects/items/storage/briefcase.dm
@@ -42,7 +42,7 @@
/obj/item/storage/briefcase/sniperbundle/PopulateContents()
..() // in case you need any paperwork done after your rampage
- new /obj/item/gun/ballistic/automatic/marksman/sniper_rifle(src)
+ new /obj/item/gun/ballistic/automatic/marksman/taipan(src)
new /obj/item/clothing/neck/tie/red(src)
new /obj/item/clothing/under/syndicate/sniper(src)
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
diff --git a/code/game/objects/items/storage/guncases.dm b/code/game/objects/items/storage/guncases.dm
index 77f6fe0ed6515..8fe256f2b6c26 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)
@@ -52,11 +61,17 @@
new /obj/item/ammo_box/a300/empty(src)
new /obj/item/ammo_box/a300/empty(src)
+/obj/item/storage/guncase/boomslang
+/obj/item/storage/guncase/boomslang/PopulateContents()
+ new /obj/item/gun/ballistic/automatic/marksman/boomslang/indie/no_mag(src)
+ new /obj/item/ammo_box/magazine/boomslang/short/empty(src)
+ new /obj/item/ammo_box/magazine/boomslang/short/empty(src)
+
/obj/item/storage/guncase/cobra
/obj/item/storage/guncase/cobra/PopulateContents()
- new /obj/item/gun/ballistic/automatic/smg/c20r/cobra/no_mag(src)
- new /obj/item/ammo_box/magazine/smgm45/empty(src)
- new /obj/item/ammo_box/magazine/smgm45/empty(src)
+ new /obj/item/gun/ballistic/automatic/smg/cobra/indie/no_mag(src)
+ new /obj/item/ammo_box/magazine/m45_cobra/empty(src)
+ new /obj/item/ammo_box/magazine/m45_cobra/empty(src)
/obj/item/storage/guncase/hellfire
/obj/item/storage/guncase/hellfire/PopulateContents()
@@ -114,11 +129,11 @@
new /obj/item/ammo_box/magazine/modelh/empty(src)
new /obj/item/ammo_box/magazine/modelh/empty(src)
-/obj/item/storage/pistolcase/stechkin
-/obj/item/storage/pistolcase/stechkin/PopulateContents()
- new /obj/item/gun/ballistic/automatic/pistol/syndicate/no_mag(src)
- new /obj/item/ammo_box/magazine/m10mm/empty(src)
- new /obj/item/ammo_box/magazine/m10mm/empty(src)
+/obj/item/storage/pistolcase/ringneck
+/obj/item/storage/pistolcase/ringneck/PopulateContents()
+ new /obj/item/gun/ballistic/automatic/pistol/ringneck/indie/no_mag(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck/empty(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck/empty(src)
/obj/item/storage/pistolcase/candor
/obj/item/storage/pistolcase/candor/PopulateContents()
@@ -136,6 +151,10 @@
/obj/item/storage/pistolcase/shadow/PopulateContents()
new /obj/item/gun/ballistic/revolver/shadow/no_mag(src)
+/obj/item/storage/pistolcase/viper
+/obj/item/storage/pistolcase/viper/PopulateContents()
+ new /obj/item/gun/ballistic/revolver/viper/indie/no_mag(src)
+
/obj/item/storage/pistolcase/commander
/obj/item/storage/pistolcase/commander/PopulateContents()
new /obj/item/gun/ballistic/automatic/pistol/commander/no_mag(src)
@@ -152,7 +171,7 @@
/obj/item/storage/pistolcase/a357
/obj/item/storage/pistolcase/a357/PopulateContents()
- new /obj/item/gun/ballistic/revolver/syndicate/no_mag(src)
+ new /obj/item/gun/ballistic/revolver/viper/no_mag(src)
new /obj/item/ammo_box/a357/empty(src)
new /obj/item/ammo_box/a357/empty(src)
diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm
index 9000d5e4dbd0d..251cc9e06b1ac 100644
--- a/code/game/objects/items/storage/holsters.dm
+++ b/code/game/objects/items/storage/holsters.dm
@@ -24,7 +24,7 @@
STR.max_items = 1
STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.set_holdable(list(
- /obj/item/gun/ballistic/automatic/pistol/syndicate,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/item/gun/ballistic/revolver,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
@@ -90,7 +90,7 @@
STR.max_items = 2
STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.set_holdable(list(
- /obj/item/gun/ballistic/automatic/pistol/syndicate,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/item/gun/ballistic/revolver,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm
index 238e39ce9318e..422ff52b15b0c 100644
--- a/code/game/objects/items/storage/secure.dm
+++ b/code/game/objects/items/storage/secure.dm
@@ -200,9 +200,9 @@
/obj/item/storage/secure/safe/intel/stechkin/PopulateContents()
. = ..()
- new /obj/item/gun/ballistic/automatic/pistol/syndicate(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/gun/ballistic/automatic/pistol/ringneck(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck(src)
/obj/item/storage/secure/safe/suns
name = "Captain's Secure Safe"
diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm
index c2619eef4c148..f0e5665b446b9 100644
--- a/code/game/objects/items/storage/storage.dm
+++ b/code/game/objects/items/storage/storage.dm
@@ -28,6 +28,12 @@
if(EXPLODE_LIGHT)
SSexplosions.lowobj += A
+/obj/item/storage/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+ . = ..()
+ for(var/obj/item/gun/at_risk in get_all_contents())
+ if(at_risk.safety == FALSE && prob(GUN_NO_SAFETY_MALFUNCTION_CHANCE_HIGH))
+ at_risk.discharge("is hits the ground hard")
+
/obj/item/storage/canStrip(mob/who)
. = ..()
if(!. && rummage_if_nodrop)
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 987aaa9933d5a..f2d0becadb540 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
@@ -299,7 +299,7 @@
/obj/item/clothing/gloves/color/latex/nitrile/infiltrator,
/obj/item/clothing/mask/infiltrator,
/obj/item/clothing/shoes/combat/sneakboots,
- /obj/item/gun/ballistic/automatic/pistol/syndicate,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box
))
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index f34aae9e6f82e..4bb91fe95726b 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -38,7 +38,7 @@
new /obj/item/jammer(src)
if("guns")
- new /obj/item/gun/ballistic/revolver/syndicate(src)
+ new /obj/item/gun/ballistic/revolver/viper(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/card/emag(src)
@@ -99,7 +99,7 @@
new /obj/item/storage/box/syndie_kit/emp(src)
if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks
- new /obj/item/gun/ballistic/automatic/marksman/sniper_rifle(src) // 12 tc
+ new /obj/item/gun/ballistic/automatic/marksman/taipan(src) // 12 tc
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/clothing/gloves/color/latex/nitrile(src)
@@ -108,10 +108,10 @@
if("metaops")
new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc
- new /obj/item/gun/ballistic/shotgun/bulldog(src) // 8 tc
+ new /obj/item/gun/ballistic/shotgun/automatic/bulldog(src) // 8 tc
new /obj/item/implanter/explosive(src) // 2 tc
- new /obj/item/ammo_box/magazine/m12g(src) // 2 tc
- new /obj/item/ammo_box/magazine/m12g(src) // 2 tc
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src) // 2 tc
+ new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src) // 2 tc
new /obj/item/grenade/c4 (src) // 1 tc
new /obj/item/grenade/c4 (src) // 1 tc
new /obj/item/card/emag(src) // 6 tc
@@ -119,10 +119,10 @@
/obj/item/storage/box/syndicate/bundle_B/PopulateContents()
switch (pickweight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "bee" = 1, "mr_freeze" = 2, "made_man"= 1)))
if("bond")
- new /obj/item/gun/ballistic/automatic/pistol/syndicate(src)
+ new /obj/item/gun/ballistic/automatic/pistol/ringneck(src)
new /obj/item/attachment/silencer(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck(src)
new /obj/item/clothing/under/chameleon(src)
new /obj/item/card/id/syndicate(src)
new /obj/item/reagent_containers/hypospray/medipen/stimulants(src)
@@ -306,7 +306,7 @@
/obj/item/storage/box/syndie_kit/imp_radio,
/obj/item/storage/box/syndie_kit/imp_uplink,
/obj/item/clothing/gloves/krav_maga/combatglovesplus,
- /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot,
+ /obj/item/gun/ballistic/automatic/toy,
/obj/item/reagent_containers/hypospray/medipen/stimulants,
/obj/item/storage/box/syndie_kit/imp_freedom,
/obj/item/toy/eightball/haunted
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index c792af38486ab..f953a36043674 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 714129498e4c4..7731bf48d2ffa 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 a5d7531b0aa8f..7135b3d199a2d 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/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index fc0aae860782a..23c5e83e3c57e 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -12,7 +12,7 @@
new /obj/item/clothing/under/syndicate/skirt(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/radio/headset/syndicate(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck(src)
new /obj/item/storage/belt/military(src)
new /obj/item/crowbar/syndie(src)
new /obj/item/clothing/glasses/night(src)
@@ -23,7 +23,7 @@
/obj/structure/closet/syndicate/nuclear/PopulateContents()
for(var/i in 1 to 5)
- new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm_ringneck(src)
new /obj/item/storage/box/flashbangs(src)
new /obj/item/storage/box/teargas(src)
new /obj/item/storage/backpack/duffelbag/syndie/med(src)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 6463282eb6dfd..6a3cae5bbd724 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/objects/structures/salvaging.dm b/code/game/objects/structures/salvaging.dm
index d373f8eb94a97..8d5ee571e2e0e 100644
--- a/code/game/objects/structures/salvaging.dm
+++ b/code/game/objects/structures/salvaging.dm
@@ -683,7 +683,7 @@
/obj/effect/spawner/lootdrop/destructive_anal_loot //what do people usually put in these things anayways
loot = list(
/obj/item/storage/toolbox/syndicate/empty = 650,
- /obj/item/gun/ballistic/automatic/pistol/syndicate = 500,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck = 500,
/obj/item/camera_bug = 500,
/obj/item/clothing/gloves/combat = 200,
/obj/item/clothing/head/chameleon = 200,
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index 2b7d93ae2590d..dc410d027504e 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 0000000000000..5c3b554c98dd8
--- /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 33fcf315fc525..0d9b3205cc278 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 6f0487ff39b74..aa5845b1144b9 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 53dbb9479f3b3..04d4bc7895d6a 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 7fbcab55504a7..b674e25fc8f89 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 1bd8f6783fd5b..ed2f0141eaff5 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 f93faeb8297da..bed648ff592b2 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/admin/topic.dm b/code/modules/admin/topic.dm
index d175830609421..927120f94a9d1 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1973,7 +1973,7 @@
if(response.body == "[]")
dat += "
0 bans detected for [ckey]"
else
- bans = json_decode(response["body"])
+ bans = json_decode(response.body)
//Ignore bans from non-whitelisted sources, if a whitelist exists
var/list/valid_sources
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index 83abc98ed9906..771cc021906ee 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/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index f2dbb91f3f0fb..3c4537caabab2 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -513,7 +513,7 @@
/obj/item/organ/brain/alien = 17,
/obj/item/dualsaber = 15,
/obj/item/organ/heart/demon = 7,
- /obj/item/gun/ballistic/automatic/smg/c20r = 16,
+ /obj/item/gun/ballistic/automatic/smg/cobra = 16,
/obj/item/uplink/old = 2,
/obj/item/book/granter/spell/charge = 12,
/obj/item/grenade/clusterbuster/spawner_manhacks = 15,
@@ -579,7 +579,7 @@
uniform = /obj/item/clothing/under/syndicate/coldres
shoes = /obj/item/clothing/shoes/combat/coldres
ears = /obj/item/radio/headset/syndicate/alt
- r_pocket = /obj/item/gun/ballistic/automatic/pistol/syndicate
+ r_pocket = /obj/item/gun/ballistic/automatic/pistol/ringneck
id = /obj/item/card/id/syndicate
implants = list(/obj/item/implant/exile)
diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm
index efe429b86b732..f0131d830cd01 100644
--- a/code/modules/awaymissions/mission_code/spacebattle.dm
+++ b/code/modules/awaymissions/mission_code/spacebattle.dm
@@ -43,7 +43,7 @@
/mob/living/simple_animal/hostile/human/syndicate/ranged/spacebattle
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier,
- /obj/item/gun/ballistic/automatic/smg/c20r,
+ /obj/item/gun/ballistic/automatic/smg/cobra,
/obj/item/shield/energy)
/mob/living/simple_animal/hostile/human/syndicate/melee/spacebattle
diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm
index 063966c86d634..52c2a964cec42 100644
--- a/code/modules/awaymissions/mission_code/stationCollision.dm
+++ b/code/modules/awaymissions/mission_code/stationCollision.dm
@@ -46,9 +46,9 @@
// projectile_type = "/obj/projectile/practice"
//Syndicate sub-machine guns.
-/obj/item/gun/ballistic/automatic/smg/c20r/sc_c20r
+/obj/item/gun/ballistic/automatic/smg/cobra/sc_c20r
-/obj/item/gun/ballistic/automatic/smg/c20r/sc_c20r/Initialize()
+/obj/item/gun/ballistic/automatic/smg/cobra/sc_c20r/Initialize()
. = ..()
for(var/ammo in magazine.stored_ammo)
if(prob(95)) //95% chance
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
index dcc5c56b93c23..a420b3d4cd90f 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm
@@ -17,7 +17,7 @@
/datum/blackmarket_item/ammo/himehabu_mag
name = "Himehabu Magazines"
desc = "Compact 10 round .22 LR magazines for use in the Himehabu pistol."
- item = /obj/item/ammo_box/magazine/m22lr
+ item = /obj/item/ammo_box/magazine/m22lr_himehabu
price_min = 100
price_max = 200
@@ -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."
@@ -110,17 +121,6 @@
stock_max = 5
availability_prob = 0
-/datum/blackmarket_item/ammo/tec_mag
- name = "TEC-9 AP Magazine"
- desc = "A 20 round magazine of AP ammo for the TEC-9 machine pistol."
- item = /obj/item/ammo_box/magazine/tec9
-
- price_min = 500
- price_max = 1000
- stock_min = 3
- stock_max = 5
- availability_prob = 0
-
/datum/blackmarket_item/ammo/polymer_clip
name = "7.62 Stripper Clip"
desc = "A 5 round stripper clip of 7.62x40mm CLIP."
@@ -219,3 +219,34 @@
stock_max = 5
availability_prob = 0
+/datum/blackmarket_item/ammo/mauler_mag
+ name = "Mauler Magazine"
+ desc = "A 12 round 9mm magazine for the Mauler Machine Pistol."
+ item = /obj/item/ammo_box/magazine/m9mm_mauler
+ price_min = 250
+ price_max = 750
+ stock_min = 3
+ stock_max = 5
+ availability_prob = 0
+
+/datum/blackmarket_item/ammo/spitter_mag
+ name = "Spitter Magazine"
+ desc = "A 30 round 9mm magazine for the Spitter submachine gun."
+ item = /obj/item/ammo_box/magazine/spitter_9mm
+
+ price_min = 250
+ price_max = 750
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 0
+
+/datum/blackmarket_item/ammo/pounder_mag
+ name = "Pounder Pan Magazine"
+ desc = "A 50 round pan magazine for the Pounder submachine gun. Heavy enough to double as an emergency melee weapon to beat off your enemies in a pinch."
+ item = /obj/item/ammo_box/magazine/c22lr_pounder_pan
+
+ price_min = 400
+ price_max = 750
+ stock = 2
+ availability_prob = 0
+
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
index 5c6f83ad57344..eb16758b103b1 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
@@ -283,17 +283,6 @@
stock = 2
availability_prob = 25
-/datum/blackmarket_item/weapon/tec
- name = "TEC-9 Machine Pistol"
- desc = "Hallelujah! It's raining lead! This 9mm machine pistol is capable of spitting out bullets at rapid pace."
- item = /obj/item/gun/ballistic/automatic/pistol/tec9
- pair_item = list(/datum/blackmarket_item/ammo/tec_mag)
-
- price_min = 1500
- price_max = 2750
- stock = 2
- availability_prob = 35
-
/datum/blackmarket_item/weapon/syringe_gun
name = "Dart Pistol"
desc = "A compact dart pistol, for clandestine poisoining from a distance."
@@ -304,6 +293,40 @@
stock = 2
availability_prob = 30
+/datum/blackmarket_item/weapon/mauler
+ name = "Mauler Machine Pistol"
+ desc = "This gun's got teeth! Twelve 9mm teeth to be exact. Hardly a full smile, and you'll be losing the rest pretty quick with this thing's rate of fire."
+ item = /obj/item/gun/ballistic/automatic/pistol/mauler
+ pair_item = list(/datum/blackmarket_item/ammo/mauler_mag)
+
+ price_min = 1000
+ price_max = 2000
+ stock_max = 3
+ availability_prob = 50
+
+/datum/blackmarket_item/weapon/spitter
+ name = "Spitter Submachine Gun"
+ desc = "The aptly named Spitter won't be hitting anything outside of spitting distance. Anything in that range on the otherhand? Let's just say the bereaved will be wanting a closed casket funeral. Chambered in 9mm."
+ item = /obj/item/gun/ballistic/automatic/pistol/spitter
+ pair_item = list(/datum/blackmarket_item/ammo/spitter_mag)
+
+ price_min = 1500
+ price_max = 2250
+ stock_min = 1
+ stock_max = 2
+ availability_prob = 30
+
+/datum/blackmarket_item/weapon/pounder
+ name = "Pounder Submachine Gun"
+ desc = "There's a certain quality to quantity. With a massive 50 round capacity, this .22lr submachine is capable of laying down an jawdropping amount of fire."
+ item = /obj/item/gun/ballistic/automatic/smg/pounder
+ pair_item = list(/datum/blackmarket_item/ammo/pounder_mag,/datum/blackmarket_item/ammo/himehabu_box)
+
+ price_min = 1500
+ price_max = 2000
+ stock = 1
+ availability_prob = 35
+
/datum/blackmarket_item/weapon/polymer
name = "Polymer Survivor Rifle"
desc = "A slapdash rifle held together by spite, dreams and a good helping of duct tape. Chambered in 7.62x40mm CLIP."
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 8098ff6b5130a..e6555fc58b6e7 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 d790cbbdf650c..6fa0b54966c1d 100644
--- a/code/modules/cargo/packs/ammo.dm
+++ b/code/modules/cargo/packs/ammo.dm
@@ -31,9 +31,9 @@
cost = 250
/datum/supply_pack/ammo/m10mm_mag
- name = "10mm Stechkin Magazine Crate"
- desc = "Contains a 10mm magazine for the stechkin pistol, containing eight rounds."
- contains = list(/obj/item/ammo_box/magazine/m10mm)
+ name = "10mm ringneck Magazine Crate"
+ desc = "Contains a 10mm magazine for the ringneck pistol, containing ten rounds."
+ contains = list(/obj/item/ammo_box/magazine/m10mm_ringneck)
cost = 500
/datum/supply_pack/ammo/a357_mag
@@ -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
*/
@@ -125,7 +133,7 @@
name = ".45 Cobra Ammo Crate"
desc = "Contains a .45 magazine for the Cobra-20, containing 24 rounds."
cost = 750
- contains = list(/obj/item/ammo_box/magazine/smgm45)
+ contains = list(/obj/item/ammo_box/magazine/m45_cobra)
/*
Rifle ammo
@@ -152,7 +160,7 @@
/datum/supply_pack/ammo/ebr_ammo
name = "M514 EBR .308 Magazine Crate"
desc = "Contains a .308 magazine for the M514 EBR rifle, containing ten rounds."
- contains = list(/obj/item/ammo_box/magazine/ebr)
+ contains = list(/obj/item/ammo_box/magazine/m556_42_hydra/small)
cost = 1000
/datum/supply_pack/ammo/skm_ammo
@@ -163,10 +171,16 @@
/datum/supply_pack/ammo/p16_ammo
name = "P-16 5.56mm Magazine Crate"
- desc = "Contains a 5.56mm magazine for the P-16 rifle, containing thirty rounds."
+ desc = "Contains a 5.56mm magazine for the P-16 rifle, containing thirty rounds. Notably, these are also compatable with the CM-82 rifle."
contains = list(/obj/item/ammo_box/magazine/p16)
cost = 1000
+/datum/supply_pack/ammo/boomslang_ammo
+ name = "Boomslang-90 Magazine Crate"
+ desc = "Contains a 6.5 CLIP magazine for the Boomslang-90 rifle, containing five rounds."
+ contains = list(/obj/item/ammo_box/magazine/boomslang/short)
+ cost = 1000
+
/datum/supply_pack/ammo/a762_ammo_box
name = "7.62x40mm CLIP Ammo Box Crate"
desc = "Contains a one hundred and twenty-round 7.62x40mm CLIP box for the SKM rifles."
@@ -174,9 +188,9 @@
cost = 500
/datum/supply_pack/ammo/a556_ammo_box
- name = "5.56x39mm CLIP Ammo Box Crate"
- desc = "Contains a one hundred and twenty-round 5.56x39mm CLIP box for most newer rifles."
- contains = list(/obj/item/ammo_box/a556_39)
+ name = "5.56x42mm CLIP Ammo Box Crate"
+ desc = "Contains a one hundred and twenty-round 5.56x42mm CLIP box for most newer rifles."
+ contains = list(/obj/item/ammo_box/a556_42)
cost = 450
/datum/supply_pack/ammo/a357_ammo_box
@@ -199,7 +213,7 @@
/datum/supply_pack/ammo/c10mm_ammo_box
name = "10mm Ammo Box Crate"
- desc = "Contains a fifty-round 10mm box for pistols and SMGs like the Stechkin or the SkM-44(k)."
+ desc = "Contains a fifty-round 10mm box for pistols and SMGs like the Ringneck or the SkM-44(k)."
contains = list(/obj/item/ammo_box/c10mm)
cost = 250
@@ -311,6 +325,12 @@
contains = list(/obj/item/stock_parts/cell/gun/kalix)
cost = 600
+/datum/supply_pack/ammo/c57x39mm_boxcrate
+ name = "5.7x39mm Ammo Box Crate"
+ desc = "Contains a fifty-round 5.7x39mm box for PDWs such as the Sidewinder."
+ contains = list(/obj/item/ammo_box/c57x39mm_box)
+ cost = 250
+
/datum/supply_pack/ammo/c46x30mm_boxcrate
name = "4.6x30mm Ammo Box Crate"
desc = "Contains a fifty-round 4.6x30mm box for PDWs such as the WT-550."
@@ -333,7 +353,14 @@
name = ".300 Ammo Box Crate"
desc = "Contains a twenty-round .300 Magnum ammo box for sniper rifles such as the HP Scout."
contains = list(/obj/item/ammo_box/a300_box)
- cost = 500
+ cost = 400
+
+/datum/supply_pack/ammo/a65clip_box
+ name = "6.5x57mm CLIP Ammo Box Crate"
+ desc = "Contains a twenty-round 6.5x57mm CLIP ammo box for various sniper rifles such as the CM-F90 and the Boomslang series."
+ contains = list(/obj/item/ammo_box/a65clip_box)
+ cost = 400
+
/datum/supply_pack/ammo/a4570_box
name = ".45-70 Ammo Box Crate"
diff --git a/code/modules/cargo/packs/civilian.dm b/code/modules/cargo/packs/civilian.dm
index 154dce436ee78..0b1d7303ca443 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 ed06391dfe98e..01bfcc1dc7567 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/exploration.dm b/code/modules/cargo/packs/exploration.dm
index 504b3b4bdbb1e..e88cf65a39316 100644
--- a/code/modules/cargo/packs/exploration.dm
+++ b/code/modules/cargo/packs/exploration.dm
@@ -8,13 +8,13 @@
/datum/supply_pack/exploration/lava
name = "Lava Exploration Kit"
- desc = "Contains two pickaxes, 60 lavaproof rods, and goggles to protect eyes from the heat"
- cost = 1500
+ desc = "Contains two pickaxes, 60 lavaproof rods, two pocket extinguishers and goggles to protect yourself from the heat."
+ cost = 500
contains = list(
/obj/item/pickaxe/mini,
/obj/item/pickaxe/mini,
- /obj/item/clothing/glasses/heat,
- /obj/item/clothing/glasses/heat,
+ /obj/item/extinguisher/mini,
+ /obj/item/extinguisher/mini,
/obj/item/clothing/glasses/heat,
/obj/item/clothing/glasses/heat,
/obj/item/stack/rods/lava/thirty,
@@ -22,34 +22,45 @@
)
crate_name = "Lava Exploration Kit"
+/datum/supply_pack/exploration/lavaproof_ords
+ name ="Lavaproof Rods Crate"
+ desc = "Contains 60 lavaproof rods for safely traversing molten pits."
+ cost = 200
+ contains = list(
+ /obj/item/stack/rods/lava/thirty,
+ /obj/item/stack/rods/lava/thirty,
+ )
+ crate_name = "Lavaproof Rod Crate"
+
/datum/supply_pack/exploration/ice
name = "Ice Exploration Kit"
- desc = "Contains two pickaxes, winter clothes, and goggles to protect eyes from the cold"
- cost = 1500
+ desc = "Contains two pickaxes, 2 sets of winter clothes and ice hiking boots, along with goggles to protect eyes from the cold."
+ cost = 500
contains = list(
/obj/item/pickaxe/mini,
/obj/item/pickaxe/mini,
/obj/item/clothing/glasses/cold,
/obj/item/clothing/glasses/cold,
- /obj/item/clothing/glasses/cold,
- /obj/item/clothing/glasses/cold,
- /obj/item/clothing/shoes/winterboots,
- /obj/item/clothing/shoes/winterboots,
- /obj/item/clothing/shoes/winterboots,
- /obj/item/clothing/shoes/winterboots,
+ /obj/item/clothing/suit/hooded/wintercoat,
+ /obj/item/clothing/suit/hooded/wintercoat,
+ /obj/item/clothing/shoes/winterboots/ice_boots,
+ /obj/item/clothing/shoes/winterboots/ice_boots,
)
crate_name = "Ice Exploration Kit"
/datum/supply_pack/exploration/jungle
name = "Jungle Exploration Kit"
- desc = "Contains hatchets, picks, and antivenom, great for dense jungles!"
- cost = 750
+ desc = "Contains a hatchets, two picks and lanterns, plus antivenom pills, great for dense jungles!"
+ cost = 500
contains = list(
/obj/item/pickaxe/mini,
/obj/item/pickaxe/mini,
+ /obj/item/flashlight/lantern,
+ /obj/item/flashlight/lantern,
/obj/item/storage/pill_bottle/charcoal,
/obj/item/storage/pill_bottle/charcoal,
/obj/item/hatchet,
+ /obj/item/hatchet,
)
crate_name = "Jungle Exploration Kit"
@@ -76,16 +87,45 @@
crate_name = "Beach Kit"
/*
- Heavy Duty Exploration Gear
+ General Exploration Gear
*/
/datum/supply_pack/exploration/capsules
- name = "Bluespace Shelter Capsules"
- desc = "A trio of Bluespace Shelter Capsules, for instant shelter in rough situations."
- cost = 3000
+ name = "Bluespace Shelter Capsule"
+ desc = "Contains a Bluespace Shelter Capsule, for instant shelter in rough situations."
+ cost = 500
+ contains = list(
+ /obj/item/survivalcapsule
+ )
+
+/datum/supply_pack/exploration/binocular
+ name = "Binoculars"
+ desc = "One pair of binoculars for surveying terrain."
+ cost = 200
+ contains = list(
+ /obj/item/binoculars
+ )
+
+/datum/supply_pack/exploration/anom_neutralizer
+ name = "Anomaly Neutralizer"
+ desc = "A single use anomaly neutralizer for stabalizing hazardous anomalies."
+ cost = 250
+ contains = list(
+ /obj/item/anomaly_neutralizer
+ )
+
+/datum/supply_pack/exploration/mineral_scanner
+ name = "Underground Mineral Scanner"
+ desc = "Contains an underground mineral scanner for locating veins of ore beneath the earth. Deep core laser drill for extracting said ores not included."
+ cost = 250
contains = list(
- /obj/item/survivalcapsule,
- /obj/item/survivalcapsule,
- /obj/item/survivalcapsule,
+ /obj/item/pinpointer/mineral
)
+/datum/supply_pack/exploration/gps
+ name = "GPS"
+ desc = "Contains a GPS device, useful for finding lost things and not getting lost yourself."
+ cost = 100
+ contains = list(
+ /obj/item/gps
+ )
diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm
index 6bf438f228679..f2b9d0ec09a73 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 8a9bd51ccbc53..4074f76194d34 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,43 +20,55 @@
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."
+/datum/supply_pack/gun/ringneck
+ name = "Ringneck Pistol Crate"
+ desc = "Contains a civillian variant of the Ringneck pistol, produced by Scarborough Arms and chambered in 10mm."
cost = 1000
- contains = list(/obj/item/storage/pistolcase/stechkin)
+ contains = list(/obj/item/storage/pistolcase/ringneck)
+ 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
+/datum/supply_pack/gun/viperrevolver
+ name = "Viper-23 Revolver Crate"
+ desc = "Contains a a civillian variant of the Viper revolver, chambered in .357 magnum."
+ cost = 2500
+ contains = list(/obj/item/storage/pistolcase/viper)
/*
Energy
@@ -115,6 +128,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 +143,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 +151,7 @@
cost = 2000
contains = list(/obj/item/storage/guncase/brimstone)
crate_name = "shotgun crate"
+ faction = FACTION_SRM
/*
Rifles
@@ -140,6 +163,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 +178,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,20 +186,30 @@
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"
desc = "Contains a traditional scoped rifle to hunt wildlife and big game from a respectful distance. Chambered in powerful .300 Magnum."
- cost = 5500
+ cost = 4000
contains = list(/obj/item/storage/guncase/scout)
crate_name = "rifle crate"
+ faction = FACTION_SRM
+
+/datum/supply_pack/gun/boomslang90
+ name = "Boomslang-90 Rifle Crate"
+ desc = "Contains a civillian variant of the Boomslang Sniper rifle- modified with a 2x scope, rather than a sniper scope. Chambered in the powerful 6.5x57mm CLIP."
+ cost = 5000
+ contains = list(/obj/item/storage/guncase/boomslang)
+ crate_name = "rifle crate"
/datum/supply_pack/gun/cobra20
name = "Cobra-20 SMG Crate"
- desc = "Contains a .45 submachine gun, manufactured by Scaraborough Arms and chambered in .45"
+ desc = "Contains a civillian variant of the Cobra SMG, manufactured by Scaraborough Arms and chambered in .45"
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 +217,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 +225,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 +233,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 ee0f00e42d965..dc01a4dfdc759 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 e0c76180bade1..e0ca4f1392585 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 d2039b009c5ca..28f15b5832069 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 3ed4a64cab919..ba0e8d73c7be5 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 6b43448a5d81e..25ed4aaab554f 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 166f437dc3af7..a6bb804995880 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 eabc0fe752c46..3eea9ebec4613 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 b005b85caa2ee..bce8586c91399 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 cbac3e0e8901d..0447f62aab9e3 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 9d8db3c035d82..e326b55f58f30 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 0ae7f48089e92..2667297dc358d 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 4cec7ad56f8a7..a66ee78c72391 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/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm
index 29da95448ee4e..f2dadc4e0d95b 100644
--- a/code/modules/clothing/outfits/ert/syndicate_ert.dm
+++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm
@@ -4,7 +4,7 @@
job_icon = "securityofficer"
suit = /obj/item/clothing/suit/armor/vest/syndie
- suit_store = /obj/item/gun/ballistic/automatic/smg/c20r
+ suit_store = /obj/item/gun/ballistic/automatic/smg/cobra
shoes = /obj/item/clothing/shoes/combat
ears = /obj/item/radio/headset/syndicate/alt
gloves = /obj/item/clothing/gloves/color/black
@@ -27,7 +27,7 @@
head = /obj/item/clothing/head/HoS/beret/syndicate
ears = /obj/item/radio/headset/syndicate/captain
- backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol/syndicate=1, /obj/item/ammo_box/magazine/m10mm=2, /obj/item/radio=1)
+ backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol/ringneck=1, /obj/item/ammo_box/magazine/m10mm_ringneck=2, /obj/item/radio=1)
// gorlex loyalist/2nd battlegroup
@@ -39,12 +39,12 @@
suit = /obj/item/clothing/suit/armor/vest/bulletproof
belt = /obj/item/storage/belt/military/assault/m90
back = /obj/item/storage/backpack/security
- suit_store = /obj/item/gun/ballistic/automatic/smg/m90
+ suit_store = /obj/item/gun/ballistic/automatic/assault/hydra
/datum/outfit/job/syndicate/ert/gorlex/pointman
name = "ERT - New Gorlex Republic Pointman"
- suit_store = /obj/item/gun/ballistic/shotgun/bulldog
+ suit_store = /obj/item/gun/ballistic/shotgun/automatic/bulldog
belt = /obj/item/storage/belt/security/webbing/bulldog
/datum/outfit/job/syndicate/ert/gorlex/medic
@@ -58,11 +58,11 @@
belt = /obj/item/storage/belt/medical/webbing/paramedic
glasses = /obj/item/clothing/glasses/hud/health/sunglasses
gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil
- suit_store = /obj/item/gun/ballistic/automatic/pistol/syndicate
+ suit_store = /obj/item/gun/ballistic/automatic/pistol/ringneck
l_pocket = /obj/item/radio
- backpack_contents = list(/obj/item/ammo_box/magazine/m10mm=2, /obj/item/storage/firstaid/medical=1, /obj/item/defibrillator/compact/combat/loaded=1)
+ backpack_contents = list(/obj/item/ammo_box/magazine/m10mm_ringneck=2, /obj/item/storage/firstaid/medical=1, /obj/item/defibrillator/compact/combat/loaded=1)
/datum/outfit/job/syndicate/ert/gorlex/sniper
name = "ERT - New Gorlex Republic Sniper"
@@ -73,7 +73,7 @@
gloves = /obj/item/clothing/gloves/fingerless
suit = /obj/item/clothing/suit/armor/vest
belt = /obj/item/storage/belt/security
- suit_store = /obj/item/gun/ballistic/automatic/marksman/sniper_rifle
+ suit_store = /obj/item/gun/ballistic/automatic/marksman/taipan
r_pocket = /obj/item/kitchen/knife/combat/survival
l_pocket = /obj/item/binoculars
@@ -103,7 +103,7 @@
uniform = /obj/item/clothing/under/syndicate/combat
belt = /obj/item/storage/belt/military/c20r
suit = /obj/item/clothing/suit/space/hardsuit/syndi/cybersun
- suit_store = /obj/item/gun/ballistic/automatic/smg/c20r
+ suit_store = /obj/item/gun/ballistic/automatic/smg/cobra
ears = /obj/item/radio/headset/syndicate/alt
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
diff --git a/code/modules/clothing/outfits/factions/frontiersmen.dm b/code/modules/clothing/outfits/factions/frontiersmen.dm
index 7045f51821885..44d0c49207844 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 f89d39a4d8d3c..e9b783de9780f 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 6ad58203e2e6e..16d1456361be5 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 8a04a0fb76f84..2301855c68092 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 639839d1b65a8..269b476ccd91f 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
@@ -583,7 +583,7 @@
suit = /obj/item/clothing/suit/armor/hardliners/sergeant
id = /obj/item/card/id/syndicate_command/crew_id
shoes = /obj/item/clothing/shoes/combat
- suit_store = /obj/item/gun/ballistic/automatic/pistol/syndicate
+ suit_store = /obj/item/gun/ballistic/automatic/pistol/ringneck
/datum/outfit/job/syndicate/hos/ngr
name = "Syndicate - Lieutenant (New Gorlex Republic)"
@@ -594,7 +594,7 @@
suit = /obj/item/clothing/suit/armor/ngr/lieutenant
id = /obj/item/card/id/syndicate_command/crew_id
shoes = /obj/item/clothing/shoes/combat
- suit_store = /obj/item/gun/ballistic/automatic/pistol/syndicate
+ suit_store = /obj/item/gun/ballistic/automatic/pistol/ringneck
/datum/outfit/job/syndicate/hos/twink
diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm
index 05b8c0e1a42c3..544259603174b 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 3c54e44cf0351..25788f4556ae2 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 e5a98c7215e5b..e2a405176c21d 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/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 2283e6a45b079..82b4b663a66b0 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -206,10 +206,10 @@
head = /obj/item/clothing/head/helmet/space/syndicate/surplus
mask = /obj/item/clothing/mask/breath
shoes = /obj/item/clothing/shoes/laceup
- r_hand = /obj/item/gun/ballistic/automatic/marksman/ebr
+ r_hand = /obj/item/gun/ballistic/automatic/assault/hydra/dmr
gloves = null
l_pocket = /obj/item/pinpointer/nuke/syndicate
- r_pocket = /obj/item/ammo_box/magazine/ebr
+ r_pocket = /obj/item/ammo_box/magazine/m556_42_hydra/small
belt = null
back = /obj/item/tank/jetpack/oxygen/harness
backpack_contents = null
diff --git a/code/modules/faction/faction_datum.dm b/code/modules/faction/faction_datum.dm
new file mode 100644
index 0000000000000..450ee96889538
--- /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 9b8e949b06e64..5129911cd3111 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 0dec69a393f5a..751f6017eb907 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 38ea044218270..4f58389094865 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 7a3a4c6837b51..c79d4cea8474d 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 96c67eca7a9e6..2032a33bd46dc 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 edca42fda0761..dbe7f1149631a 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 72f2046a3b84d..ade14f27241e3 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 a1c1297647c31..3de7c3c3d75db 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 83e923f53fbfa..5c9bcc56cc7d5 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 73ccc0f378971..778c639a074e4 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_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
index b8cefcb9bd801..121f15fa972fb 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
@@ -61,5 +61,5 @@
/obj/item/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/reagent_containers/food/snacks/blt
- category = CAT_SANDWICH
+ subcategory = CAT_SANDWICH
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 d0558f94fdb5e..daf98f0444a45 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 2ad56d0ce62b7..f123ced2ffc5b 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 a21e9f71afc43..87e0f1a2a4297 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 0000000000000..37dabf0c06a8c
--- /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 0000000000000..338b0fb17455f
--- /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 ed58e86e16dc5..4f2b2420ee559 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 820ecae005d8e..9459a1f7a816b 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/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 73a322ce81ae2..be34ef0ec4257 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -163,7 +163,7 @@
name = "gatfruit"
desc = "It smells like burning."
icon_state = "gatfruit"
- trash = /obj/item/gun/ballistic/revolver/syndicate
+ trash = /obj/item/gun/ballistic/revolver/viper
bitesize_mod = 2
foodtype = FRUIT
tastes = list("gunpowder" = 1)
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index 17d43d0a31c5a..c3488c43f7890 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 277245138a541..f9633ade76613 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 f97596c348f2d..ee76f02e02c85 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 bbfeaeeb5b5a9..13faaf5f15a56 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 a57934dc551db..d34490d2bd24e 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 ad24dccff43d6..65f47357899a1 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 d11bb6177e149..1d13660682f66 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/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm
index 60c8ab9672b42..1c9393a49c949 100644
--- a/code/modules/jobs/job_types/janitor.dm
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -22,5 +22,5 @@
/datum/outfit/job/janitor/pre_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
if(GARBAGEDAY in SSevents.holidays)
- l_pocket = /obj/item/gun/ballistic/revolver/syndicate
+ l_pocket = /obj/item/gun/ballistic/revolver/viper
r_pocket = /obj/item/ammo_box/a357
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index d86cfebf11972..21bfb509e6fb3 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -229,7 +229,7 @@
new /obj/item/gun/ballistic/shotgun/toy(src)
new /obj/item/gun/ballistic/automatic/toy/pistol(src)
new /obj/item/gun/ballistic/automatic/toy(src)
- new /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy(src)
+ new /obj/item/gun/ballistic/automatic/toy(src)
new /obj/item/ammo_box/foambox(src)
if(98)
for(var/i in 1 to 3)
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 46c20dd02e1b1..3b390da342513 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -11,7 +11,7 @@
heat_protection = CHEST|GROIN|LEGS|ARMS
hoodtype = /obj/item/clothing/head/hooded/explorer
armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/pinpointer/mineral, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
resistance_flags = FIRE_PROOF
supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION
@@ -65,7 +65,7 @@
resistance_flags = FIRE_PROOF | LAVA_PROOF
slowdown = 0
armor = list("melee" = 70, "bullet" = 40, "laser" = 30, "energy" = 45, "bomb" = 70, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/pinpointer/mineral, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
/obj/item/clothing/suit/space/hostile_environment/Initialize()
. = ..()
@@ -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
@@ -167,7 +167,7 @@
heat_protection = CHEST|GROIN|LEGS|ARMS
hoodtype = /obj/item/clothing/head/hooded/survivor_hood
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/pinpointer/mineral, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
resistance_flags = FIRE_PROOF
supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index b6073d4c86a20..3e0bed238bec3 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/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm
index 7c62a915f65e9..4def7dbe5dde9 100644
--- a/code/modules/mining/equipment/mineral_scanner.dm
+++ b/code/modules/mining/equipment/mineral_scanner.dm
@@ -126,6 +126,7 @@
/obj/item/pinpointer/mineral/examine(mob/user)
. = ..()
. += "It is currently set to [scanmode ? "scan underground" : "scan the surface"]."
+ . += span_notice("You can use the scanner on an vein on harm intent to mark them as sites of no interest, causing them to no longer show up on scans.")
/obj/item/pinpointer/mineral/AltClick(mob/user) //switching modes
..()
@@ -204,7 +205,7 @@
var/located_dist
var/obj/structure/located_vein
for(var/obj/structure/vein/I in GLOB.ore_veins)
- if(I.z == 0 || I.virtual_z() != here.virtual_z())
+ if(I.z == 0 || I.virtual_z() != here.virtual_z() || I.detectable == FALSE)
continue
if(located_vein)
var/new_dist = get_dist(here, get_turf(I))
@@ -223,6 +224,16 @@
if(!proximity || !istype(O,/obj/structure/vein))
return
playsound(src, 'sound/effects/fastbeep.ogg', 10)
+ if(user.a_intent == INTENT_HARM)
+ if(O.detectable == TRUE)
+ to_chat(user,span_notice("You blacklist the vein from the scanner's telemetry, and will no longer be detected as a site of interest to the scanner."))
+ O.detectable = FALSE
+ return
+ else
+ to_chat(user,span_notice("You mark vein into the scanner's telemetry, allowing it be located by underground scans."))
+ O.detectable = TRUE
+ return
+
if(O.vein_contents.len > 0)
to_chat(user, "Class [O.vein_class] ore vein with [O.mining_charges] possible ore lodes found.")
for(var/re in O.vein_contents)
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index d38a3ce8b55b8..a0548a2cb9f1f 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/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index b1a31e21a5caf..2a38ae896e76a 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -314,7 +314,7 @@
/obj/item/energy_katana,
/obj/item/hierophant_club,
/obj/item/gun/energy/minigun,
- /obj/item/gun/ballistic/automatic/hmg/l6_saw,
+ /obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended,
/obj/item/stack/telecrystal/twenty,
/obj/item/nuke_core,
/obj/item/phylactery,
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index a2b48d9319b9a..2af5515e47a7a 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/mining/ore_veins.dm b/code/modules/mining/ore_veins.dm
index 32b1ffeab8d5b..16f6afa8da0cb 100644
--- a/code/modules/mining/ore_veins.dm
+++ b/code/modules/mining/ore_veins.dm
@@ -10,6 +10,8 @@ GLOBAL_LIST_EMPTY(ore_veins)
move_resist = INFINITY
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ //Whether the mining scanner is able to locate this vein.
+ var/detectable = TRUE
var/mining_charges = 6
//Classification of the quality of possible ores within a vein
//Used to determine difficulty & ore amounts
@@ -75,6 +77,11 @@ GLOBAL_LIST_EMPTY(ore_veins)
ore_list.Remove(picked)
GLOB.ore_veins += src
+/obj/structure/vein/examine(mob/user)
+ . = ..()
+ if(!detectable)
+ . += span_notice("This vein has been marked as a site of no interest, and will not show up on deep core scans.")
+
/obj/structure/vein/Destroy()
GLOB.ore_veins -= src
return ..()
@@ -105,6 +112,7 @@ GLOBAL_LIST_EMPTY(ore_veins)
/obj/structure/vein/proc/toggle_spawning()
spawning_started = SEND_SIGNAL(src, COMSIG_SPAWNER_TOGGLE_SPAWNING, spawning_started)
+
//
// Planetary and Class Subtypes
// The current set of subtypes are heavily subject to future balancing and reworking as the balance of them is tested more
diff --git a/code/modules/mob/dead/new_player/ship_select.dm b/code/modules/mob/dead/new_player/ship_select.dm
index fe88abdf3399a..e130f6e404ce1 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/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 5330ee1841f69..62174120a60f8 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -648,14 +648,12 @@
REMOVE_TRAIT(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT)
/mob/living/carbon/bullet_act(obj/projectile/P, def_zone, piercing_hit = FALSE)
- var/mob/living/carbon/human/current_user = src //is this a good idea? who can say?
var/armor = run_armor_check(def_zone, P.flag, P.armour_penetration, silent = TRUE)
var/on_hit_state = P.on_hit(src, armor, piercing_hit)
if(!P.nodamage && on_hit_state != BULLET_ACT_BLOCK && !QDELETED(src)) //QDELETED literally just for the instagib rifle. Yeah.
apply_damage(P.damage, P.damage_type, def_zone, armor, sharpness = TRUE)
if(P.damage-armor >= 15 && P.damage_type == BRUTE && (!armor || prob(40) || P.damage-armor >= 25))
spray_blood(get_dir(P.starting,src), (P.damage-armor)/5)
- var/obj/item/bodypart/targeted_bodypart = null
bleed((P.damage-armor)/2)
recoil_camera(src, clamp((P.damage-armor)/4,0.5,10), clamp((P.damage-armor)/4,0.5,10), P.damage/8, P.Angle)
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index cd588a89b9ce9..b7c5b9877120c 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 25e045064a44f..cbaa988aa5a85 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 91169299afba2..f8495f783e36f 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 daa645a662a86..d5ce34ca412f3 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/mob/living/simple_animal/hostile/human/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm
index 968e1f7b55ff7..ba5f75ffb2493 100644
--- a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm
+++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm
@@ -28,18 +28,18 @@
icon_state = "frontiersmanranged"
icon_living = "frontiersmanranged"
loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged,
- /obj/item/gun/ballistic/revolver/syndicate)
+ /obj/item/gun/ballistic/revolver/shadow)
ranged = 1
retreat_distance = 5
minimum_distance = 5
- projectilesound = 'sound/weapons/gun/revolver/shot.ogg'
- casingtype = /obj/item/ammo_casing/a357
+ projectilesound = 'sound/weapons/gun/revolver/cattleman.ogg'
+ casingtype = /obj/item/ammo_casing/a44roum
/mob/living/simple_animal/hostile/human/frontier/ranged/internals
icon_state = "frontiersmanranged_mask"
icon_living = "frontiersmanranged_mask"
loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged,
- /obj/item/gun/ballistic/revolver/syndicate,
+ /obj/item/gun/ballistic/revolver/shadow,
/obj/item/clothing/mask/gas/sechailer,
/obj/item/tank/internals/emergency_oxygen/engi)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
@@ -198,16 +198,17 @@
icon_living = "frontiersmanofficer"
maxHealth = 65
health = 65
- rapid = 3
+ rapid = 4
+ projectilesound = 'sound/weapons/gun/pistol/mauler.ogg'
casingtype = /obj/item/ammo_casing/c9mm
loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer,
- /obj/item/gun/ballistic/automatic/pistol/APS)
+ /obj/item/gun/ballistic/automatic/pistol/mauler)
/mob/living/simple_animal/hostile/human/frontier/ranged/officer/internals
icon_state = "frontiersmanofficer_mask"
icon_living = "frontiersmanofficer_mask"
loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer,
- /obj/item/gun/ballistic/automatic/pistol/APS,
+ /obj/item/gun/ballistic/automatic/pistol/mauler,
/obj/item/clothing/mask/gas,
/obj/item/tank/internals/emergency_oxygen/engi)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm
index 437333f15284c..f0c70edc30373 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm
@@ -46,8 +46,8 @@
belt = pickweight(list(
/obj/item/gun/ballistic/automatic/pistol/candor = 2,
/obj/item/gun/ballistic/automatic/pistol/commander = 1,
- /obj/item/gun/ballistic/automatic/pistol/syndicate = 1,
- /obj/item/gun/ballistic/revolver/syndicate = 1,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck = 1,
+ /obj/item/gun/ballistic/revolver/viper = 1,
/obj/item/gun/ballistic/revolver/firebrand = 1,
)
)
diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm
index ec4b786290274..5d851e52f4fd3 100644
--- a/code/modules/overmap/ships/controlled_ship_datum.dm
+++ b/code/modules/overmap/ships/controlled_ship_datum.dm
@@ -70,6 +70,8 @@
///Stations the ship has been blacklisted from landing at, associative station = reason
var/list/blacklisted = list()
+ var/datum/faction/faction_datum
+
/datum/overmap/ship/controlled/Rename(new_name, force = FALSE)
var/oldname = name
if(!..() || (!COOLDOWN_FINISHED(src, rename_cooldown) && !force))
@@ -110,6 +112,7 @@
refresh_engines()
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/power/lighting.dm b/code/modules/power/lighting.dm
index 530b3b8703fc7..662bdbecc5728 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -937,6 +937,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28)
layer = 2.5
light_type = /obj/item/light/bulb
fitting = "bulb"
+ no_emergency = TRUE
#undef LIGHT_DRAIN_TIME //WS Edit -- Ethereal Charge Scaling
#undef LIGHT_POWER_GAIN //WS Edit -- Ethereal Charge Scaling
diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm
index 93fa4208d571a..bdc5254f13c96 100644
--- a/code/modules/projectiles/ammunition/_firing.dm
+++ b/code/modules/projectiles/ammunition/_firing.dm
@@ -1,7 +1,7 @@
-/obj/item/ammo_casing/proc/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
+/obj/item/ammo_casing/proc/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from, misfire = FALSE)
distro += variance
var/targloc = get_turf(target)
- ready_proj(target, user, quiet, zone_override, fired_from)
+ ready_proj(target, user, quiet, zone_override, fired_from, misfire)
if(pellets == 1)
if(distro) //We have to spread a pixel-precision bullet. throw_proj was called before so angles should exist by now...
if(randomspread)
@@ -15,19 +15,20 @@
return FALSE
AddComponent(/datum/component/pellet_cloud, projectile_type, pellets)
SEND_SIGNAL(src, COMSIG_PELLET_CLOUD_INIT, target, user, fired_from, randomspread, spread, zone_override, params, distro)
+ if(user)
+ if(click_cooldown_override)
+ user.changeNext_move(click_cooldown_override)
- if(click_cooldown_override)
- user.changeNext_move(click_cooldown_override)
-
- user.newtonian_move(get_dir(target, user))
+ user.newtonian_move(get_dir(target, user))
update_appearance()
return TRUE
-/obj/item/ammo_casing/proc/ready_proj(atom/target, mob/living/user, quiet, zone_override = "", atom/fired_from)
+/obj/item/ammo_casing/proc/ready_proj(atom/target, mob/living/user, quiet, zone_override = "", atom/fired_from, misfire = FALSE)
if (!BB)
return
BB.original = target
BB.firer = user
+ BB.misfire = misfire
BB.fired_from = fired_from
if (zone_override)
BB.def_zone = zone_override
@@ -45,7 +46,11 @@
qdel(reagents)
/obj/item/ammo_casing/proc/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread)
- var/turf/curloc = get_turf(user)
+ var/turf/curloc
+ if(user)
+ curloc = get_turf(user)
+ else
+ curloc = get_turf(src)
if (!istype(targloc) || !istype(curloc) || !BB)
return FALSE
@@ -60,7 +65,10 @@
if(target) //if the target is right on our location we'll skip the travelling code in the proj's fire()
direct_target = target
if(!direct_target)
- BB.preparePixelProjectile(target, user, params, spread)
+ if(user)
+ BB.preparePixelProjectile(target, user, params, spread)
+ else
+ BB.preparePixelProjectile(target, curloc, params, spread)
BB.fire(null, direct_target)
BB = null
return TRUE
diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm
index 0f37b5426d2db..e8cb64a673d20 100644
--- a/code/modules/projectiles/ammunition/ballistic/pistol.dm
+++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm
@@ -1,4 +1,4 @@
-// 10mm (Stechkin)
+// 10mm (Ringneck)
/obj/item/ammo_casing/c10mm
name = "10mm bullet casing"
diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm
index 786005aa5ca17..9f71e29738480 100644
--- a/code/modules/projectiles/ammunition/ballistic/rifle.dm
+++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm
@@ -36,14 +36,14 @@
projectile_type = /obj/projectile/bullet/a300
bullet_per_box = 20
-// 5.56x39mm (M-90gl Carbine & P-16)
+// 5.56x42mm CLIP (CM82, Hydra variants)
-/obj/item/ammo_casing/a556_39
- name = "5.56x39mm CLIP bullet casing"
- desc = "A 5.56x39mm CLIP bullet casing."
+/obj/item/ammo_casing/a556_42
+ name = "5.56x42mm CLIP bullet casing"
+ desc = "A 5.56x42mm CLIP bullet casing."
icon_state = "rifle-brass"
- caliber = "5.56x45mm"
- projectile_type = /obj/projectile/bullet/a556_45
+ caliber = "5.56x42mm"
+ projectile_type = /obj/projectile/bullet/a556_42
bullet_per_box = 80
// 5.45x39mm (SKM-24v)
@@ -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/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm
index 74bb35b1ec2ed..39086b8cc66f8 100644
--- a/code/modules/projectiles/ammunition/ballistic/smg.dm
+++ b/code/modules/projectiles/ammunition/ballistic/smg.dm
@@ -1,3 +1,13 @@
+// 5.7x39mm (Asp and Sidewinder)
+
+/obj/item/ammo_casing/c57x39mm
+ name = "5.7x39mm bullet casing"
+ desc = "A 5.7x39mm bullet casing."
+ icon_state = "rifle-steel"
+ caliber = "5.7x39mm"
+ projectile_type = /obj/projectile/bullet/c57x39mm
+ bullet_per_box = 50
+
// 4.6x30mm (WT-550 Automatic Rifle & SKM-24v)
/obj/item/ammo_casing/c46x30mm
diff --git a/code/modules/projectiles/ammunition/energy/lmg.dm b/code/modules/projectiles/ammunition/energy/lmg.dm
index 434b29a1d3f23..632fb35785cda 100644
--- a/code/modules/projectiles/ammunition/energy/lmg.dm
+++ b/code/modules/projectiles/ammunition/energy/lmg.dm
@@ -15,13 +15,13 @@
/obj/item/ammo_casing/energy/csour
projectile_type = /obj/projectile/bullet/csour
select_name = "sour"
- fire_sound = 'sound/weapons/gun/shotgun/shot_old.ogg'
+ fire_sound = 'sound/weapons/gun/shotgun/shot.ogg'
e_cost = 50
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect
/obj/item/ammo_casing/energy/csweet
projectile_type = /obj/projectile/bullet/csweet
select_name = "sweet"
- fire_sound = 'sound/weapons/gun/sniper/shot_old.ogg'
+ fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
e_cost = 70
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index 3b1bdbc6eb1cc..7f92dfad16a65 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 e8e5c59c9c65e..3ed25c0cac2a4 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -2,12 +2,12 @@
/obj/item/ammo_box/a357
name = "speed loader (.357)"
- desc = "A 7-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor."
- icon_state = "speedloader_357-7"
+ desc = "A 6-round speed loader for quickly reloading .357 revolvers. These rounds do good damage with average performance against armor."
+ icon_state = "speedloader_357-6"
base_icon_state = "speedloader_357"
ammo_type = /obj/item/ammo_casing/a357
caliber = ".357"
- max_ammo = 7
+ max_ammo = 6
multiple_sprites = AMMO_BOX_PER_BULLET
item_flags = NO_MAT_REDEMPTION
w_class = WEIGHT_CLASS_TINY
@@ -18,12 +18,12 @@
/obj/item/ammo_box/a357/match
name = "speed loader (.357 match)"
- desc = "A 7-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets."
+ desc = "A 6-round speed loader for quickly reloading .357 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets."
ammo_type = /obj/item/ammo_casing/a357/match
/obj/item/ammo_box/a357/hp
name = "speed loader (.357 hollow point)"
- desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones."
+ desc = "A 6-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones."
ammo_type = /obj/item/ammo_casing/a357/hp
/obj/item/ammo_box/a357_box
@@ -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)"
@@ -398,10 +398,10 @@
/obj/item/ammo_box/a762_40/inteq
icon_state = "a762_40box_big_inteq"
-/obj/item/ammo_box/a556_39
- name = "ammo box (5.56x39mm CLIP)"
- icon_state = "a556_39box_big"
- ammo_type = /obj/item/ammo_casing/a556_39
+/obj/item/ammo_box/a556_42
+ name = "ammo box (5.56x42mm CLIP)"
+ icon_state = "a556_42box_big"
+ ammo_type = /obj/item/ammo_casing/a556_42
max_ammo = 120
w_class = WEIGHT_CLASS_NORMAL
@@ -450,6 +450,14 @@
/obj/item/ammo_box/a44roum_speedloader/empty
start_empty = TRUE
+/obj/item/ammo_box/c57x39mm_box
+ name = "ammo box (5.7x39mm)"
+ desc = "A box of standard 5.7x39mm ammo."
+ icon_state = "57x39mmbox"
+ ammo_type = /obj/item/ammo_casing/c57x39mm
+ max_ammo = 50
+
+
/obj/item/ammo_box/c46x30mm_box
name = "ammo box (4.6x30mm)"
desc = "A box of standard 4.6x30mm ammo."
@@ -499,6 +507,16 @@
ammo_type = /obj/item/ammo_casing/a300
max_ammo = 20
+/obj/item/ammo_box/a65clip_box
+ name = "ammo box (6.5x57mm CLIP)"
+ desc = "A box of standard 6.5x57mm CLIP ammo."
+ icon_state = "65box"
+ ammo_type = /obj/item/ammo_casing/a65clip
+ max_ammo = 20
+
+/obj/item/ammo_box/a65clip_box/syndicate
+ icon_state = "65box_sa"
+
/obj/item/ammo_box/a44roum
name = "ammo box (.44 roumain)"
desc = "A box of standard .44 roumain ammo."
@@ -519,3 +537,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/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm
index fdf1b7985b290..e69de29bb2d1d 100644
--- a/code/modules/projectiles/boxes_magazines/external/lmg.dm
+++ b/code/modules/projectiles/boxes_magazines/external/lmg.dm
@@ -1,33 +0,0 @@
-/obj/item/ammo_box/magazine/mm712x82
- name = "box magazine (7.12x82mm)"
- desc = "A 50-round box magazine for the L6 SAW machine gun. These rounds do moderate damage with significant armor penetration."
- icon_state = "a762-100"
- base_icon_state = "a762"
- ammo_type = /obj/item/ammo_casing/mm712x82
- caliber = "7.12x82mm"
- max_ammo = 100
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/ammo_box/magazine/mm712x82/hollow
- name = "box magazine (7.12x82mm HP)"
- desc = "A 50-round box magazine for the L6 SAW machine gun. These hollow point rounds do incredible damage against soft targets, but struggle against armored ones."
- ammo_type = /obj/item/ammo_casing/mm712x82/hp
-
-/obj/item/ammo_box/magazine/mm712x82/ap
- name = "box magazine (7.12x82mm AP)"
- desc = "A 50-round box magazine for the L6 SAW machine gun. These armor-piercing rounds are nearly perfect at piercing protective equipment."
- ammo_type = /obj/item/ammo_casing/mm712x82/ap
-
-/obj/item/ammo_box/magazine/mm712x82/inc
- name = "box magazine (7.12x82mm incendiary)"
- desc = "A 50-round box magazine for the L6 SAW machine gun. These incendiary rounds deal mediocre damage, but leave flaming trails which set targets ablaze."
- ammo_type = /obj/item/ammo_casing/mm712x82/inc
-
-/obj/item/ammo_box/magazine/mm712x82/match
- name = "box magazine (7.12x82mm match)"
- desc = "A 50-round box magazine for the L6 SAW machine gun. These match rounds travel quicker with incredible armor penetration. Can also ricochet off targets."
- ammo_type = /obj/item/ammo_casing/mm712x82/match
-
-/obj/item/ammo_box/magazine/mm712x82/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state]-[round(ammo_count(), 20)]"
diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm
index 8a1792485715e..90d2c7e4546e0 100644
--- a/code/modules/projectiles/boxes_magazines/external/pistol.dm
+++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm
@@ -1,36 +1,3 @@
-/obj/item/ammo_box/magazine/m10mm
- name = "pistol magazine (10mm)"
- desc = "An 8-round single-stack magazine for the stechkin pistol. These rounds do moderate damage, but struggle against armor."
- icon_state = "stechkin_mag-1"
- base_icon_state = "stechkin_mag"
- ammo_type = /obj/item/ammo_casing/c10mm
- caliber = "10mm"
- max_ammo = 8
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
-/obj/item/ammo_box/magazine/m10mm/empty
- start_empty = TRUE
-
-/obj/item/ammo_box/magazine/m10mm/inc
- name = "pistol magazine (10mm incendiary)"
- desc = "An 8-round single-stack magazine for the stechkin pistol. These incendiary rounds deal mediocre damage, but leave flaming trails which set targets ablaze."
- ammo_type = /obj/item/ammo_casing/c10mm/inc
-
-/obj/item/ammo_box/magazine/m10mm/hp
- name = "pistol magazine (10mm HP)"
- desc = "An 8-round single-stack magazine for the stechkin pistol. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones."
- ammo_type = /obj/item/ammo_casing/c10mm/hp
-
-/obj/item/ammo_box/magazine/m10mm/ap
- name = "pistol magazine (10mm AP)"
- desc = "An 8-round single-stack magazine for the stechkin pistol. These armor-piercing rounds are okay at piercing protective equipment, but lose some stopping power."
- ammo_type = /obj/item/ammo_casing/c10mm/ap
-
-/obj/item/ammo_box/magazine/m10mm/rubber
- name = "pistol magazine (10mm rubber)"
- desc = "An 8-round handgun magazine for the stechkin pistol. These rubber rounds trade lethality for a heavy impact which can incapacitate targets. Performs even worse against armor."
- ammo_type = /obj/item/ammo_casing/c10mm/rubber
-
/obj/item/ammo_box/magazine/m45
name = "pistol magazine (.45)"
desc = "An 8-round single-stack magazine for the Candor pistol. These rounds do moderate damage, but struggle against armor."
@@ -127,16 +94,6 @@
. = ..()
icon_state = "[base_icon_state]-[ammo_count() == 1 ? 1 : round(ammo_count(),2)]"
-/obj/item/ammo_box/magazine/pistolm9mm
- name = "large pistol magazine (9mm)"
- desc = "A long, 15-round double-stack magazine designed for the stechkin APS pistol. These rounds do okay damage, but struggle against armor."
- icon_state = "stechkin_mag-1"
- base_icon_state = "stechkin_mag"
- ammo_type = /obj/item/ammo_casing/c9mm
- caliber = "9mm"
- max_ammo = 15
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
/obj/item/ammo_box/magazine/m50
name = "handgun magazine (.50 AE)"
desc = "An oversized, 7-round handgun magazine for the Desert Eagle handgun. These rounds do significant damage with average performance against armor."
@@ -165,14 +122,3 @@
caliber = "9mm"
max_ammo = 4
custom_materials = list(/datum/material/iron = 20000)
-
-/obj/item/ammo_box/magazine/m22lr
- name = "pistol magazine (.22 LR)"
- desc = "A single-stack handgun magazine designed to chamber .22 LR. It's rather tiny, all things considered."
- icon_state = "himehabu_mag-10"
- base_icon_state = "himehabu_mag"
- ammo_type = /obj/item/ammo_casing/c22lr
- caliber = "22lr"
- max_ammo = 10
- w_class = WEIGHT_CLASS_TINY
- multiple_sprites = AMMO_BOX_PER_BULLET
diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm
index 781641a6eef1c..ad15e7ecea2aa 100644
--- a/code/modules/projectiles/boxes_magazines/external/rifle.dm
+++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm
@@ -1,4 +1,4 @@
-/obj/item/ammo_box/magazine/m10mm/rifle
+/obj/item/ammo_box/magazine/m10mm_ringneck/rifle
name = "rifle magazine (10mm)"
desc = "A well-worn, 10-round magazine for the surplus rifle. These rounds do moderate damage, but struggle against armor."
icon_state = "75-8"
@@ -7,17 +7,17 @@
caliber = "10mm"
max_ammo = 10
-/obj/item/ammo_box/magazine/m10mm/rifle/update_icon_state()
+/obj/item/ammo_box/magazine/m10mm_ringneck/rifle/update_icon_state()
. = ..()
icon_state = "[base_icon_state]-[ammo_count() ? "8" : "0"]"
-/obj/item/ammo_box/magazine/m556
- name = "toploader magazine (5.56x45mm)"
+/obj/item/ammo_box/magazine/m556_42_hydra
+ name = "toploader magazine (5.56x42mm)"
desc = "An advanced, 30-round toploading magazine for the M-90gl Carbine. These rounds do moderate damage with good armor penetration."
icon_state = "5.56m-1"
base_icon_state = "5.56m"
- ammo_type = /obj/item/ammo_casing/a556_39
- caliber = "5.56x45mm"
+ ammo_type = /obj/item/ammo_casing/a556_42
+ caliber = "5.56x42mm"
max_ammo = 30
multiple_sprites = AMMO_BOX_FULL_EMPTY
@@ -73,18 +73,6 @@
max_ammo = 75
w_class = WEIGHT_CLASS_NORMAL
-/obj/item/ammo_box/magazine/ebr
- name = "battle rifle magazine (.308)"
- desc = "A small, 10-round steel magazine for the M514 EBR. These rounds do good damage with significant armor penetration."
- icon_state = "ebr_mag"
- ammo_type = /obj/item/ammo_casing/a308
- caliber = ".308"
- max_ammo = 10
-
-/obj/item/ammo_box/magazine/ebr/update_icon_state()
- . = ..()
- icon_state = "ebr_mag-[!!ammo_count()]"
-
/obj/item/ammo_box/magazine/f4_308
name = "\improper F4 Magazine (.308)"
desc = "A standard 10-round magazine for F4 platform DMRs. These rounds do good damage with significant armor penetration."
@@ -96,12 +84,12 @@
multiple_sprites = AMMO_BOX_FULL_EMPTY
/obj/item/ammo_box/magazine/p16 //repath to /obj/item/ammo_box/magazine/generic_556 sometime
- name = "assault rifle magazine (5.56x45mm)"
- desc = "A simple, 30-round magazine for 5.56x45mm assault rifles. These rounds do moderate damage with good armor penetration."
+ name = "assault rifle magazine (5.56x42mm CLIP)"
+ desc = "A simple, 30-round magazine for 5.56x42mm CLIP assault rifles. These rounds do moderate damage with good armor penetration."
icon_state = "p16_mag-1"
base_icon_state = "p16_mag"
- ammo_type = /obj/item/ammo_casing/a556_39
- caliber = "5.56x45mm"
+ ammo_type = /obj/item/ammo_casing/a556_42
+ caliber = "5.56x42mm"
max_ammo = 30
multiple_sprites = AMMO_BOX_FULL_EMPTY
@@ -109,17 +97,17 @@
start_empty = TRUE
/obj/item/ammo_box/magazine/swiss
- name = "\improper Swiss Cheese Magazine (5.56x45mm)"
+ name = "\improper Swiss Cheese Magazine (5.56x42mm CLIP)"
desc = "A deft, 30-round magazine for the Swiss Cheese assault rifle. These rounds do moderate damage with good armor penetration."
icon_state = "swissmag-1"
base_icon_state = "swissmag"
- ammo_type = /obj/item/ammo_casing/a556_39
- caliber = "5.56x45mm"
+ ammo_type = /obj/item/ammo_casing/a556_42
+ caliber = "5.56x42mm"
max_ammo = 30
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/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm
index b45051fd26445..9803b0feb084e 100644
--- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm
+++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm
@@ -1,42 +1,3 @@
-/obj/item/ammo_box/magazine/m12g
- name = "shotgun drum magazine (12g buckshot)"
- desc = "A bulky 8-round drum designed for the Bulldog shotgun and it's derivatives."
- icon_state = "bulldog_drum-1"
- base_icon_state = "bulldog_drum"
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
- caliber = "12ga"
- max_ammo = 8
- w_class = WEIGHT_CLASS_NORMAL
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
-/obj/item/ammo_box/magazine/m12g/stun
- name = "shotgun drum magazine (12g taser slugs)"
- ammo_type = /obj/item/ammo_casing/shotgun/stunslug
-
-/obj/item/ammo_box/magazine/m12g/slug
- name = "shotgun drum magazine (12g slugs)"
- ammo_type = /obj/item/ammo_casing/shotgun
-
-/obj/item/ammo_box/magazine/m12g/dragon
- name = "shotgun drum magazine (12g dragon's breath)"
- ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath
-
-/obj/item/ammo_box/magazine/m12g/bioterror
- name = "shotgun drum magazine (12g bioterror)"
- ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror
-
-/obj/item/ammo_box/magazine/m12g/meteor
- name = "shotgun drum magazine (12g meteor slugs)"
- ammo_type = /obj/item/ammo_casing/shotgun/meteorslug
-
-/obj/item/ammo_box/magazine/m12g/small //shouldnt this be the parrent intsead of the drum
- name = "shotgun box magazine (12g buckshot)"
- desc = "A single-stack, 6-round box magazine for the Bulldog shotgun and it's derivatives."
- icon_state = "bulldog_mag-1"
- base_icon_state = "bulldog_mag"
- max_ammo = 6
- w_class = WEIGHT_CLASS_SMALL //Smaller, holds less
-
/obj/item/ammo_box/magazine/cm15_12g
name = "CM-15 magazine (12g buckshot)"
desc = "An almost straight, 8-round magazine designed for the CM-15 shotgun."
diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm
index ca1355bab3a05..fdd4ab2d2b45f 100644
--- a/code/modules/projectiles/boxes_magazines/external/smg.dm
+++ b/code/modules/projectiles/boxes_magazines/external/smg.dm
@@ -74,7 +74,7 @@
desc = "A 24-round magazine for the SkM-44(k). These rubber rounds trade lethality for a heavy impact which can incapacitate targets. Performs even worse against armor."
ammo_type = /obj/item/ammo_casing/c10mm/rubber
-/obj/item/ammo_box/magazine/smgm45
+/obj/item/ammo_box/magazine/m45_cobra
name = "SMG magazine (.45)"
desc = "A 24-round magazine for .45 submachine guns. These rounds do moderate damage, but struggle against armor."
icon_state = "c20r45-24"
@@ -83,11 +83,11 @@
caliber = ".45"
max_ammo = 24
-/obj/item/ammo_box/magazine/smgm45/update_icon_state() //This is stupid (whenever ammo is spent, it updates the icon path)
+/obj/item/ammo_box/magazine/m45_cobra/update_icon_state() //This is stupid (whenever ammo is spent, it updates the icon path)
. = ..()
icon_state = "c20r45-[round(ammo_count(),2)]"
-/obj/item/ammo_box/magazine/smgm45/empty
+/obj/item/ammo_box/magazine/m45_cobra/empty
start_empty = TRUE
/obj/item/ammo_box/magazine/c45_firestorm_mag
@@ -107,17 +107,10 @@
name = "pan magazine (.45)"
desc = "A bulky, 50-round pan magazine for the toploading Firestorm submachine gun. These rounds struggle against armor, but with this many you could cut anyone down regardless."
icon_state = "firestorm_pan"
+ base_icon_state = "firestorm_pan"
max_ammo = 50
w_class = WEIGHT_CLASS_NORMAL
/obj/item/ammo_box/magazine/c45_firestorm_mag/pan/update_icon_state() //Causes the mag to NOT inherit the parent's update_icon oooh the misery
. = ..()
icon_state = "firestorm_pan"
-
-/obj/item/ammo_box/magazine/tec9
- name = "machine pistol magazine (9mm AP)"
- desc = "A sizable 20-round magazine for the TEC-9 machine pistol. These armor-piercing rounds are okay at piercing protective equipment, but lose some stopping power.."
- icon_state = "tec_mag"
- ammo_type = /obj/item/ammo_casing/c9mm/ap
- caliber = "9mm"
- max_ammo = 20
diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm
index 608faa67a9747..c3cbecfcc48c1 100644
--- a/code/modules/projectiles/boxes_magazines/external/toy.dm
+++ b/code/modules/projectiles/boxes_magazines/external/toy.dm
@@ -21,46 +21,10 @@
/obj/item/ammo_box/magazine/toy/pistol
name = "foam force pistol magazine"
desc = "A toy pistol magazine designed to fit harmless foam darts."
- icon_state = "stechkin_mag-1"
- base_icon_state = "stechkin_mag"
+ icon_state = "toy_magazine-1"
+ base_icon_state = "toy_magazine"
max_ammo = 8
multiple_sprites = AMMO_BOX_FULL_EMPTY
/obj/item/ammo_box/magazine/toy/pistol/riot
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
-
-/obj/item/ammo_box/magazine/toy/smgm45
- name = "donksoft SMG magazine"
- desc = "A toy submachine gun magazine designed to fit harmless foam darts."
- icon_state = "c20r45-toy"
- base_icon_state = "c20r45"
- caliber = "foam_force"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 20
-
-/obj/item/ammo_box/magazine/toy/smgm45/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state]-[round(ammo_count(), 2)]"
-
-/obj/item/ammo_box/magazine/toy/smgm45/riot
- icon_state = "c20r45-riot"
- desc = "A toy submachine gun magazine designed to fit legally-harmless riot control darts."
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
-
-/obj/item/ammo_box/magazine/toy/m762
- name = "donksoft box magazine"
- desc = "A huge toy LMG magazine designed to fit vast quantities of harmless foam darts."
- icon_state = "a762-100"
- base_icon_state = "a762"
- caliber = "foam_force"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 50
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/ammo_box/magazine/toy/m762/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state]-[round(ammo_count(), 10)]"
-
-/obj/item/ammo_box/magazine/toy/m762/riot
- desc = "A huge toy LMG magazine designed to fit vast quantities of legally-harmless riot control darts."
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
index 658eef2d781cf..a4282a40a9e29 100644
--- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
@@ -2,7 +2,7 @@
name = "revolver cylinder"
ammo_type = /obj/item/ammo_casing/a357
caliber = ".357"
- max_ammo = 7
+ max_ammo = 6
instant_load = TRUE
/obj/item/ammo_box/magazine/internal/cylinder/get_round(keep = FALSE, counter_clockwise = FALSE)
diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm
index 29717fd9408b0..7485c591809df 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 023f6212e06f7..f97dc5a5ce86c 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -56,7 +56,7 @@
//BALLISTIC
///Compatible magazines with the gun
- var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info
+ var/mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck //Removes the need for max_ammo and caliber info
///Whether the gun alarms when empty or not.
var/empty_alarm = FALSE
///Do we eject the magazine upon runing out of ammo?
@@ -232,6 +232,8 @@
var/empty_indicator = FALSE
///Whether the sprite has a visible magazine or not
var/show_magazine_on_sprite = FALSE
+ ///Do we show how much ammo is left on the sprite? In increments of 20.
+ var/show_ammo_capacity_on_magazine_sprite = FALSE
///Whether the sprite has a visible ammo display or not
var/show_magazine_on_sprite_ammo = FALSE
///Whether the gun supports multiple special mag types
@@ -689,8 +691,8 @@
. = ..()
if(!has_safety)
return
-
- if(src != user.get_active_held_item())
+ // only checks for first level storage e.g pockets, hands, suit storage, belts, nothing in containers
+ if(!in_contents_of(user))
return
if(isliving(user) && in_range(src, user))
@@ -726,6 +728,11 @@
if(zoomed)
zoom(user, user.dir)
+/obj/item/gun/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+ . = ..()
+ if(prob(GUN_NO_SAFETY_MALFUNCTION_CHANCE_HIGH))
+ discharge("hits the ground hard")
+
/obj/item/gun/update_overlays()
. = ..()
if(ismob(loc) && has_safety)
@@ -945,6 +952,49 @@
flash_loc.vis_contents -= muzzle_flash
muzzle_flash.applied = FALSE
+// for guns firing on their own without a user
+/obj/item/gun/proc/discharge(cause, seek_chance = 10)
+ var/target
+ if(!safety)
+ // someone is very unlucky and about to be shot
+ if(prob(seek_chance))
+ for(var/mob/living/target_mob in range(6, get_turf(src)))
+ if(!isInSight(src, target_mob))
+ continue
+ target = target_mob
+ break
+ if(!target)
+ var/fire_dir = pick(GLOB.alldirs)
+ target = get_ranged_target_turf(get_turf(src),fire_dir,6)
+ if(!chambered || !chambered.BB)
+ visible_message(span_danger("\The [src] [cause ? "[cause], suddenly going off" : "suddenly goes off"] without its safteies on! Luckily it wasn't live."))
+ playsound(src, dry_fire_sound, 30, TRUE)
+ else
+ visible_message(span_danger("\The [src] [cause ? "[cause], suddenly going off" : "suddenly goes off"] without its safeties on!"))
+ unsafe_shot(target)
+
+/obj/item/gun/proc/unsafe_shot(target)
+ if(chambered)
+ chambered.fire_casing(target,null, null, null, suppressed, ran_zone(BODY_ZONE_CHEST, 50), 0, src,TRUE)
+ playsound(src, fire_sound, 100, TRUE)
+
+/mob/living/proc/trip_with_gun(cause)
+ var/mob/living/carbon/human/human_holder
+ if(ishuman(src))
+ human_holder = src
+ for(var/obj/item/gun/at_risk in get_all_contents())
+ var/chance_to_fire = GUN_NO_SAFETY_MALFUNCTION_CHANCE_MEDIUM
+ var/did_fire = FALSE
+ if(human_holder)
+ // gun is less likely to go off in a holster
+ if(at_risk == human_holder.s_store)
+ chance_to_fire = GUN_NO_SAFETY_MALFUNCTION_CHANCE_LOW
+ if(at_risk.safety == FALSE && prob(chance_to_fire))
+ if(at_risk.process_fire(src,src,FALSE, null, pick(BODY_ZONE_L_LEG,BODY_ZONE_R_LEG)) == TRUE)
+ log_combat(src,src,"misfired",at_risk,"caused by [cause]")
+ visible_message(span_danger("\The [at_risk.name]'s trigger gets caught as [src] falls, suddenly going off into [src]'s leg without its safties on!"), span_danger("\The [at_risk.name]'s trigger gets caught on something as you fall, suddenly going off into your leg without its safeties on!"))
+ emote("scream")
+
//I need to refactor this into an attachment
/datum/action/toggle_scope_zoom
name = "Toggle Scope"
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 1790ba25a8582..0288813fd0895 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -59,13 +59,14 @@
. += "[icon_state]_bolt[bolt_locked ? "_locked" : ""]"
if (bolt_type == BOLT_TYPE_OPEN && bolt_locked)
. += "[icon_state]_bolt"
- if (magazine)
+ if (show_magazine_on_sprite && magazine)
if (unique_mag_sprites_for_variants)
. += "[icon_state]_mag_[magazine.base_icon_state]"
if (!magazine.ammo_count())
- . += "[icon_state]_mag_empty"
+ . += "[icon_state]_mag_[magazine.base_icon_state]_empty"
else
. += "[icon_state]_mag"
+ if(show_ammo_capacity_on_magazine_sprite)
var/capacity_number = 0
switch(get_ammo() / magazine.max_ammo)
if(0.2 to 0.39)
@@ -76,9 +77,11 @@
capacity_number = 60
if(0.8 to 0.99)
capacity_number = 80
- if(1.0)
+ if(1.0 to 2.0) //to catch the chambered round
capacity_number = 100
- if (capacity_number)
+ if (capacity_number && unique_mag_sprites_for_variants)
+ . += "[icon_state]_mag_[magazine.base_icon_state]_[capacity_number]"
+ else if (capacity_number)
. += "[icon_state]_mag_[capacity_number]"
if(!chambered && empty_indicator)
. += "[icon_state]_empty"
@@ -373,3 +376,8 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
if(AC.BB)
process_fire(user, user, FALSE)
. = TRUE
+
+/obj/item/gun/ballistic/unsafe_shot(target, empty_chamber = TRUE)
+ . = ..()
+ process_chamber(empty_chamber,TRUE)
+
diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm
index bdabf0a5bda9b..42cb637a557f0 100644
--- a/code/modules/projectiles/guns/ballistic/assault.dm
+++ b/code/modules/projectiles/guns/ballistic/assault.dm
@@ -1,4 +1,6 @@
/obj/item/gun/ballistic/automatic/assault
+ show_magazine_on_sprite = TRUE
+
gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
default_firemode = FIREMODE_SEMIAUTO
wield_delay = 0.8 SECONDS
@@ -141,7 +143,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/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index 769ea9e7f57ee..6b1e30296d577 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -29,7 +29,7 @@
icon_state = "surplus"
item_state = "moistnugget"
weapon_weight = WEAPON_HEAVY
- mag_type = /obj/item/ammo_box/magazine/m10mm/rifle
+ mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck/rifle
fire_delay = 0.5 SECONDS
burst_size = 1
w_class = WEIGHT_CLASS_HUGE
diff --git a/code/modules/projectiles/guns/ballistic/hmg.dm b/code/modules/projectiles/guns/ballistic/hmg.dm
index ccf21a2c7c0e8..780b24dc80fbd 100644
--- a/code/modules/projectiles/guns/ballistic/hmg.dm
+++ b/code/modules/projectiles/guns/ballistic/hmg.dm
@@ -128,75 +128,6 @@
if(has_bipod)
. += "[base_icon_state || initial(icon_state)][bipod_deployed ? "_deployed" : "_undeployed"]"
-
-// L6 SAW //
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw
- name = "\improper L6 SAW"
- desc = "A heavy machine gun, designated 'L6 SAW'. Chambered in 7.12x82mm."
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
- icon_state = "l6"
- item_state = "l6closedmag"
- base_icon_state = "l6"
-
- mag_type = /obj/item/ammo_box/magazine/mm712x82
- spread = 7
-
- fire_delay = 0.1 SECONDS
-
- bolt_type = BOLT_TYPE_OPEN
- show_magazine_on_sprite = TRUE
- show_magazine_on_sprite_ammo = TRUE
- tac_reloads = FALSE
- fire_sound = 'sound/weapons/gun/l6/shot.ogg'
- rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg'
- suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
- manufacturer = MANUFACTURER_SCARBOROUGH
- var/cover_open = FALSE
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/examine(mob/user)
- . = ..()
- . += "alt + click to [cover_open ? "close" : "open"] the dust cover."
- if(cover_open && magazine)
- . += "It seems like you could use an empty hand to remove the magazine."
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/AltClick(mob/user)
- cover_open = !cover_open
- to_chat(user, "You [cover_open ? "open" : "close"] [src]'s cover.")
- playsound(user, 'sound/weapons/gun/l6/l6_door.ogg', 60, TRUE)
- update_appearance()
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/update_overlays()
- . = ..()
- . += "l6_door_[cover_open ? "open" : "closed"]"
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)
- if(cover_open)
- to_chat(user, "[src]'s cover is open! Close it before firing!")
- return
- else
- . = ..()
- update_appearance()
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/attack_hand(mob/user)
- if (loc != user)
- ..()
- return
- if (!cover_open)
- to_chat(user, "[src]'s cover is closed! Open it before trying to remove the magazine!")
- return
- ..()
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/attackby(obj/item/A, mob/user, params)
- if(!cover_open && istype(A, mag_type))
- to_chat(user, "[src]'s dust cover prevents a magazine from being fit.")
- return
- ..()
-
/obj/item/gun/ballistic/automatic/hmg/solar //This thing fires a 5.56 equivalent, that's an LMG, not an HMG, get out
name = "\improper Solar"
desc = "A TerraGov LMG-169 designed in 169 FS, nicknamed 'Solar.' A inscription reads: 'PROPERTY OF TERRAGOV', with 'TERRAGOV' poorly scribbled out, and replaced by 'SOLAR ARMORIES'. Chambered in 4.73×33mm caseless ammunition."
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index f18f97cd0f4fc..e3e821c72db1d 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -44,11 +44,6 @@
name = "\improper PML-9"
desc = "A reusable rocket-propelled grenade launcher. The words \"NT this way\" and an arrow have been written near the barrel."
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
icon_state = "rocketlauncher"
item_state = "rocketlauncher"
mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher
@@ -66,6 +61,9 @@
tac_reloads = FALSE
manufacturer = MANUFACTURER_SCARBOROUGH
+ valid_attachments = list()
+ slot_available = list()
+
/obj/item/gun/ballistic/rocketlauncher/afterattack()
. = ..()
magazine.get_round(FALSE) //Hack to clear the mag after it's fired
diff --git a/code/modules/projectiles/guns/ballistic/marksman.dm b/code/modules/projectiles/guns/ballistic/marksman.dm
index 0759de4f70e14..9d63e66bcab7e 100644
--- a/code/modules/projectiles/guns/ballistic/marksman.dm
+++ b/code/modules/projectiles/guns/ballistic/marksman.dm
@@ -1,66 +1,8 @@
/obj/item/gun/ballistic/automatic/marksman
+ show_magazine_on_sprite = TRUE
+
burst_size = 1
zoomable = TRUE //this var as true without setting anything else produces a 2x zoom
wield_slowdown = 2
wield_delay = 1 SECONDS
-
-// SNIPER //
-
-/obj/item/gun/ballistic/automatic/marksman/sniper_rifle
- name = "sniper rifle"
- desc = "An anti-material rifle chambered in .50 BMG with a scope mounted on it. Its prodigious bulk requires both hands to use."
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
- icon_state = "sniper"
- item_state = "sniper"
- fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
- fire_sound_volume = 90
- vary_fire_sound = FALSE
- load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
- rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
- suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
- weapon_weight = WEAPON_HEAVY
- mag_type = /obj/item/ammo_box/magazine/sniper_rounds
- w_class = WEIGHT_CLASS_BULKY
- zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you.
- zoom_out_amt = 5
- slot_flags = ITEM_SLOT_BACK
- actions_types = list()
- show_magazine_on_sprite = TRUE
- manufacturer = MANUFACTURER_SCARBOROUGH
-
- spread = -5
- spread_unwielded = 40
- recoil = 5
- recoil_unwielded = 50
-
- wield_delay = 1.3 SECONDS
-
-EMPTY_GUN_HELPER(automatic/marksman/sniper_rifle)
-
-/obj/item/gun/ballistic/automatic/marksman/ebr //fuck this gun, its getting wiped soon enough
- name = "\improper M514 EBR"
- desc = "A reliable, high-powered battle rifle often found in the hands of Syndicate personnel and remnants, chambered in .308. Effective against personnel and armor alike."
-
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
- icon_state = "ebr"
- item_state = "ebr"
- zoomable = TRUE
- show_magazine_on_sprite = TRUE
- weapon_weight = WEAPON_MEDIUM
- w_class = WEIGHT_CLASS_BULKY
- mag_type = /obj/item/ammo_box/magazine/ebr
- fire_sound = 'sound/weapons/gun/rifle/shot_alt2.ogg'
- manufacturer = MANUFACTURER_SCARBOROUGH
-
- wield_slowdown = 2
- spread = -4
-
-EMPTY_GUN_HELPER(automatic/marksman/ebr)
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index b2416462da39a..e81b57d43f37f 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -7,7 +7,7 @@
weapon_weight = WEAPON_LIGHT
pickup_sound = 'sound/items/handling/gun_pickup.ogg'
- recoil = 0.5 // apogee wants bloom, this is a placeholder until then to simulate the same concept.
+ //recoil = 0.5 // apogee wants bloom, this is a placeholder until then to simulate the same concept. //UPDATE ive changed my mind on this, however i would
recoil_unwielded = 3
recoil_backtime_multiplier = 1
@@ -19,42 +19,6 @@
muzzleflash_iconstate = "muzzle_flash_light"
-/obj/item/gun/ballistic/automatic/pistol/syndicate
- name = "Stechkin"
- desc = "A small, easily concealable 10mm handgun that bears Scarborough Arms stamps. Has a threaded barrel for suppressors."
- icon_state = "pistol"
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/m10mm
- fire_sound = 'sound/weapons/gun/pistol/shot.ogg'
- dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg'
- suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg'
-
- load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
- load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
- eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
- eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
-
- rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg'
- lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
- bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
-
- manufacturer = MANUFACTURER_SCARBOROUGH
-
- spread = 6 //becuase its compact, spread is slightly worse
- spread_unwielded = 9
- recoil_unwielded = 2
-
-EMPTY_GUN_HELPER(automatic/pistol/syndicate)
-
-/obj/item/gun/ballistic/automatic/pistol/syndicate/suns
- desc = "A small, easily concealable 10mm handgun that bears Scarborough Arms stamps. It is painted in the colors of SUNS."
- icon_state = "pistol_suns"
-
/obj/item/gun/ballistic/automatic/pistol/candor
name = "\improper Candor"
desc = "A classic semi-automatic handgun, widely popular throughout the Frontier. An engraving on the slide marks it as a product of Hunter's Pride. Chambered in .45."
@@ -69,7 +33,7 @@ EMPTY_GUN_HELPER(automatic/pistol/syndicate)
fire_sound = 'sound/weapons/gun/pistol/candor.ogg'
rack_sound = 'sound/weapons/gun/pistol/candor_cocked.ogg'
lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg'
- bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg'
+ bolt_drop_sound = 'sound/weapons/gun/pistol/candor_cocked.ogg'
manufacturer = MANUFACTURER_HUNTERSPRIDE
load_sound = 'sound/weapons/gun/pistol/candor_reload.ogg'
load_empty_sound = 'sound/weapons/gun/pistol/candor_reload.ogg'
@@ -109,7 +73,7 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory)
fire_sound = 'sound/weapons/gun/pistol/deagle.ogg'
rack_sound = 'sound/weapons/gun/pistol/rack.ogg'
lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg'
- bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg'
+ bolt_drop_sound = 'sound/weapons/gun/pistol/rack.ogg'
manufacturer = MANUFACTURER_NONE
load_sound = 'sound/weapons/gun/pistol/deagle_reload.ogg'
load_empty_sound = 'sound/weapons/gun/pistol/deagle_reload.ogg'
@@ -133,37 +97,6 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory)
icon_state = "deaglecamo"
item_state = "deagleg"
-/obj/item/gun/ballistic/automatic/pistol/APS
- name = "stechkin APS pistol"
- desc = "A burst-fire machine pistol based on the stechkin model. Utilizes specialized 9mm magazines."
- icon_state = "aps"
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
-
- mag_type = /obj/item/ammo_box/magazine/pistolm9mm
-
- fire_sound = 'sound/weapons/gun/pistol/shot.ogg'
- dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg'
- suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg'
-
- load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
- load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
- eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
- eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
-
- rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg'
- lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
- bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
-
- burst_size = 3
- burst_delay = 0.1 SECONDS
- fire_delay = 0.4 SECONDS
- gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST)
- default_firemode = FIREMODE_SEMIAUTO
-
/obj/item/gun/ballistic/automatic/pistol/commander
name = "\improper Commander"
desc = "A classic handgun in a tasteful black and stainless steel color scheme. An enamel Nanotrasen logo is set into the grips. Chambered in 9mm."
@@ -176,7 +109,7 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory)
w_class = WEIGHT_CLASS_NORMAL
mag_type = /obj/item/ammo_box/magazine/co9mm
manufacturer = MANUFACTURER_NANOTRASEN
- fire_sound = 'sound/weapons/gun/pistol/commander.ogg'
+ fire_sound = 'sound/weapons/gun/pistol/rattlesnake.ogg'
load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
@@ -274,7 +207,6 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq)
mob_overlay_icon = 'icons/obj/guns/manufacturer/solararmories/onmob.dmi'
weapon_weight = WEAPON_LIGHT
- w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/pistol556mm
fire_sound = 'sound/weapons/gun/pistol/pistolec.ogg'
manufacturer = MANUFACTURER_SOLARARMORIES
@@ -292,28 +224,6 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq)
/obj/item/gun/ballistic/automatic/pistol/solgov/old
icon_state = "pistole-c-old"
-/obj/item/gun/ballistic/automatic/pistol/tec9 //fucking kill this gun already my god
- name = "\improper TEC-9 machine pistol"
- desc = "A crude machine pistol designed to vomit 9mm ammunition at a truly eye-watering rate of fire."
- icon_state = "tec9"
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
- fire_delay = 0.15 SECONDS
- weapon_weight = WEAPON_LIGHT
- w_class = WEIGHT_CLASS_NORMAL
- mag_type = /obj/item/ammo_box/magazine/tec9
- show_magazine_on_sprite = TRUE
- load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
- load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
- eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
- eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
-
- gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
- default_firemode = FIREMODE_SEMIAUTO
-
/obj/item/gun/ballistic/automatic/pistol/disposable
name = "disposable gun"
desc = "An exceedingly flimsy plastic gun that is extremely cheap to produce. You get what you pay for."
@@ -393,31 +303,3 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq)
/obj/item/gun/ballistic/derringer/no_mag
spawnwithmagazine = FALSE
-/obj/item/gun/ballistic/automatic/pistol/himehabu
- name = "\improper Himehabu"
- desc = "A very small .22 LR pistol. The long awaited successor to the Stechkin; It has become a favorite among syndicate spies. Chambered in .22 LR."
- icon_state = "himehabu"
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
-
- w_class = WEIGHT_CLASS_TINY
- mag_type = /obj/item/ammo_box/magazine/m22lr
- fire_sound = 'sound/weapons/gun/pistol/himehabu.ogg'
-
- load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
- load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
- eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
- eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
-
- rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg'
- lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
- bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
-
- recoil = -2
- recoil_unwielded = -2
- spread_unwielded = 0
- wield_slowdown = 0
-
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 6a2e30c9cddb7..e0e389ce7f4a2 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -25,6 +25,9 @@
var/spin_delay = 10
var/recent_spin = 0
manufacturer = MANUFACTURER_SCARBOROUGH
+
+ valid_attachments = list()
+ slot_available = list()
fire_delay = 0.4 SECONDS
spread_unwielded = 15
recoil = 0.5
@@ -452,15 +455,6 @@
playsound(src, 'sound/items/handling/ammobox_pickup.ogg', 20, FALSE)
return
-/obj/item/gun/ballistic/revolver/syndicate //mystery tool that we can use later
- name = "\improper syndicate revolver"
- desc = "A weighty revolver with a Scarborough Arms logo engraved on the barrel. Uses .357 ammo." //usually used by syndicates
- icon_state = "revolver"
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
-
/obj/item/gun/ballistic/revolver/detective
name = "\improper HP Detective Special"
desc = "A small law enforcement firearm. Originally commissioned by Nanotrasen for their Private Investigation division, it has become extremely popular among independent civilians as a cheap, compact sidearm. Uses .38 Special rounds."
@@ -541,7 +535,7 @@ EMPTY_GUN_HELPER(revolver/detective)
/obj/item/gun/ballistic/revolver/detective/no_mag
spawnwithmagazine = FALSE
-/obj/item/gun/ballistic/revolver/syndicate/no_mag
+/obj/item/gun/ballistic/revolver/viper/no_mag
spawnwithmagazine = FALSE
/obj/item/gun/ballistic/revolver/no_mag
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index f633280359598..eb8ea3355fe9d 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -135,10 +135,7 @@
recoil_unwielded = 4
wield_delay = 0.65 SECONDS
manufacturer = MANUFACTURER_NANOTRASEN
-
-/obj/item/gun/ballistic/shotgun/automatic/shoot_live_shot(mob/living/user)
- ..()
- rack()
+ semi_auto = TRUE
//im not sure what to do with the combat shotgun, as it's functionally the same as the semi auto shotguns except it automattically racks instead of being semi-auto
@@ -209,65 +206,16 @@
return
rack()
-// Bulldog shotgun //
-
-/obj/item/gun/ballistic/shotgun/bulldog //TODO: REPATH TO LIKE /obj/item/gun/ballistic/shotgun/automatic/bulldog
- name = "\improper Bulldog Shotgun"
- desc = "A semi-automatic, magazine-fed shotgun designed for combat in tight quarters, manufactured by Scarborough Arms. A historical favorite of various Syndicate factions, especially the Gorlex Marauders."
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
- icon_state = "bulldog"
- item_state = "bulldog"
-
- weapon_weight = WEAPON_MEDIUM
- mag_type = /obj/item/ammo_box/magazine/m12g
- burst_size = 1
- fire_delay = 0.4 SECONDS // this NEEDS the old delay.
- fire_sound = 'sound/weapons/gun/shotgun/bulldog.ogg'
- show_magazine_on_sprite = TRUE
- empty_indicator = TRUE
- empty_alarm = TRUE
- unique_mag_sprites_for_variants = TRUE
- semi_auto = TRUE
- internal_magazine = FALSE
- casing_ejector = TRUE
- tac_reloads = TRUE
- pickup_sound = 'sound/items/handling/rifle_pickup.ogg'
- manufacturer = MANUFACTURER_SCARBOROUGH
-
- load_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
- load_empty_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
- eject_sound = 'sound/weapons/gun/rifle/ar_unload.ogg'
- eject_empty_sound = 'sound/weapons/gun/rifle/ar_unload.ogg'
-
- rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg'
-
- spread = 4
- spread_unwielded = 16
- recoil = 1
- recoil_unwielded = 4
- wield_slowdown = 0.6
- wield_delay = 0.65 SECONDS
-
-EMPTY_GUN_HELPER(shotgun/bulldog)
-
-/obj/item/gun/ballistic/shotgun/bulldog/inteq
+/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq
name = "\improper Mastiff Shotgun"
desc = "A variation of the Bulldog, seized from Syndicate armories by deserting troopers then modified to IRMG's standards."
- icon_state = "bulldog-inteq"
- item_state = "bulldog-inteq"
- mag_type = /obj/item/ammo_box/magazine/m12g
+ icon_state = "bulldog_inteq"
+ item_state = "bulldog_inteq"
+ mag_type = /obj/item/ammo_box/magazine/m12g_bulldog
manufacturer = MANUFACTURER_INTEQ
-EMPTY_GUN_HELPER(shotgun/bulldog/inteq)
+EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq)
-/obj/item/gun/ballistic/shotgun/bulldog/suns
- name = "\improper Bulldog-C Shotgun"
- desc = "A variation of the Bulldog manufactured by Scarborough Arms for SUNS. Its shorter barrel is intended to provide additional maneuverability in personal defense scenarios."
- icon_state = "bulldog_suns"
- item_state = "bulldog_suns"
/////////////////////////////
// DOUBLE BARRELED SHOTGUN //
@@ -692,6 +640,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/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm
index d43e324cfacd8..266c9059046a2 100644
--- a/code/modules/projectiles/guns/ballistic/smg.dm
+++ b/code/modules/projectiles/guns/ballistic/smg.dm
@@ -1,4 +1,6 @@
/obj/item/gun/ballistic/automatic/smg
+ show_magazine_on_sprite = TRUE
+
burst_size = 2
actions_types = list()
fire_delay = 0.13 SECONDS
@@ -22,42 +24,6 @@
gunslinger_recoil_bonus = 2
gunslinger_spread_bonus = 16
-/obj/item/gun/ballistic/automatic/smg/c20r
- name = "\improper C-20r SMG"
- desc = "A bullpup .45 SMG designated 'C-20r.' Its buttstamp reads 'Scarborough Arms - Per falcis, per pravitas.'"
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
- icon_state = "c20r"
- item_state = "c20r"
-
- mag_type = /obj/item/ammo_box/magazine/smgm45
- show_magazine_on_sprite = TRUE
- show_magazine_on_sprite_ammo = TRUE
- empty_indicator = TRUE
- manufacturer = MANUFACTURER_SCARBOROUGH
-
-EMPTY_GUN_HELPER(automatic/smg/c20r)
-
-/obj/item/gun/ballistic/automatic/smg/c20r/Initialize()
- . = ..()
- update_appearance()
-
-/obj/item/gun/ballistic/automatic/smg/c20r/cobra
- name = "\improper Cobra 20"
- desc = "An older model of SMG manufactured by Scarborough Arms, a predecessor to the military C-20 series. Chambered in .45. "
- icon_state = "cobra20"
- item_state = "cobra20"
-
-/obj/item/gun/ballistic/automatic/smg/c20r/cobra/no_mag
- spawnwithmagazine = FALSE
-
-/obj/item/gun/ballistic/automatic/smg/c20r/suns
- desc = "A bullpup .45 SMG designated 'C-20r.' Its buttstamp reads 'Scarborough Arms - Per falcis, per pravitas.' This one is painted in SUNS' colors."
- icon_state = "c20r_suns"
- item_state = "c20r_suns"
-
/obj/item/gun/ballistic/automatic/smg/wt550
name = "\improper WT-550 Automatic Rifle"
desc = "An outdated PDW, used centuries ago by Nanotrasen security elements. Uses 4.6x30mm rounds."
@@ -93,87 +59,6 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
weapon_weight = WEAPON_LIGHT
fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg'
-/obj/item/gun/ballistic/automatic/smg/m90
- name = "\improper M-90gl Carbine"
- desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
- icon_state = "m90"
- item_state = "m90"
-
- mag_type = /obj/item/ammo_box/magazine/m556
- gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "underbarrel grenade launcher")
- gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_OTHER)
- default_firemode = FIREMODE_SEMIAUTO
- var/obj/item/gun/ballistic/revolver/grenadelauncher/secondary
- show_magazine_on_sprite = TRUE
- empty_indicator = TRUE
- fire_sound = 'sound/weapons/gun/rifle/shot_alt.ogg'
- manufacturer = MANUFACTURER_SCARBOROUGH
-
- burst_size = 3
- burst_delay = 0.1 SECONDS
- fire_delay = 0.2 SECONDS
- spread = 1
- spread_unwielded = 8
- wield_slowdown = 0.4
-
-/obj/item/gun/ballistic/automatic/smg/m90/Initialize()
- . = ..()
- secondary = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
- RegisterSignal(secondary, COMSIG_ATOM_UPDATE_ICON, PROC_REF(secondary_update_icon))
- update_appearance()
-
-/obj/item/gun/ballistic/automatic/smg/m90/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
- return secondary.pre_fire(target, user, message, params, zone_override, bonus_spread)
-
-/obj/item/gun/ballistic/automatic/smg/m90/can_shoot()
- var/current_firemode = gun_firemodes[firemode_index]
- if(current_firemode != FIREMODE_OTHER)
- return ..()
- return secondary.can_shoot()
-
-/obj/item/gun/ballistic/automatic/smg/m90/afterattack(atom/target, mob/living/user, flag, params)
- var/current_firemode = gun_firemodes[firemode_index]
- if(current_firemode != FIREMODE_OTHER)
- return ..()
- return secondary.afterattack(target, user, flag, params)
-
-/obj/item/gun/ballistic/automatic/smg/m90/attackby(obj/item/attack_obj, mob/user, params)
- if(istype(attack_obj, secondary.magazine.ammo_type))
- secondary.unique_action()
- return secondary.attackby(attack_obj, user, params)
- return ..()
-
-
-/obj/item/gun/ballistic/automatic/smg/m90/can_shoot()
- var/current_firemode = gun_firemodes[firemode_index]
- if(current_firemode != FIREMODE_OTHER)
- return ..()
- return secondary.can_shoot()
-
-/obj/item/gun/ballistic/automatic/smg/m90/on_wield(obj/item/source, mob/user)
- wielded = TRUE
- secondary.wielded = TRUE
- INVOKE_ASYNC(src, .proc.do_wield, user)
-
-/obj/item/gun/ballistic/automatic/smg/m90/do_wield(mob/user)
- . = ..()
- secondary.wielded_fully = wielded_fully
-
-/// triggered on unwield of two handed item
-/obj/item/gun/ballistic/automatic/smg/m90/on_unwield(obj/item/source, mob/user)
- . = ..()
- secondary.wielded_fully = FALSE
- secondary.wielded = FALSE
-
-
-/obj/item/gun/ballistic/automatic/smg/m90/proc/secondary_update_icon()
- update_appearance()
- SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
-
/obj/item/gun/ballistic/automatic/smg/firestorm //weapon designed by Apogee-dev
name = "HP Firestorm"
@@ -287,7 +172,7 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg'
spread = 7
- recoil_unwielded = 10
+ spread_unwielded = 10
recoil = 0
recoil_unwielded = 4
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
index 135a1b2d06b00..43a9415671d65 100644
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ b/code/modules/projectiles/guns/ballistic/toy.dm
@@ -1,8 +1,14 @@
/obj/item/gun/ballistic/automatic/toy
name = "foam force SMG"
desc = "A prototype three-round burst toy submachine gun. Ages 8 and up."
- icon_state = "saber"
- item_state = "gun"
+
+ icon = 'icons/obj/guns/manufacturer/toys/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/toys/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/toys/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/toys/onmob.dmi'
+
+ icon_state = "toysmg"
+ item_state = "toysmg"
mag_type = /obj/item/ammo_box/magazine/toy/smg
fire_sound = 'sound/items/syringeproj.ogg'
force = 0
@@ -14,18 +20,13 @@
recoil = -10 //its a toy...
recoil_unwielded = -10
-/obj/item/gun/ballistic/automatic/toy/update_overlays()
- . = ..()
- . += "[icon_state]_toy"
/obj/item/gun/ballistic/automatic/toy/pistol
name = "foam force pistol"
desc = "A small, easily concealable toy handgun. Ages 8 and up."
- icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
- lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
- righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
- mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
- icon_state = "pistol" // WS edit - Fix various startup runtimes
+
+ icon_state = "toypistol"
+ item_state = "toypistol"
bolt_type = BOLT_TYPE_LOCKING
w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/toy/pistol
@@ -46,7 +47,15 @@
/obj/item/gun/ballistic/shotgun/toy
name = "foam force shotgun"
desc = "A toy shotgun with wood furniture and a four-shell capacity underneath. Ages 8 and up."
- icon_state = "shotgun"
+
+ icon = 'icons/obj/guns/manufacturer/toys/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/toys/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/toys/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/toys/onmob.dmi'
+
+ icon_state = "toyshotgun"
+ item_state = "toyshotgun"
+
force = 0
throwforce = 0
mag_type = /obj/item/ammo_box/magazine/internal/shot/toy
@@ -57,10 +66,6 @@
recoil = -10 //its a toy...
recoil_unwielded = -10
-/obj/item/gun/ballistic/shotgun/toy/update_overlays()
- . = ..()
- . += "[icon_state]_toy"
-
/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0, from_firing = TRUE, chamber_next_round = TRUE, atom/shooter)
. = ..()
if(chambered && !chambered.BB)
@@ -69,7 +74,6 @@
/obj/item/gun/ballistic/shotgun/toy/crossbow
name = "foam force crossbow"
desc = "A weapon favored by many overactive children. Ages 8 and up."
- icon = 'icons/obj/toy.dmi'
icon_state = "foamcrossbow"
item_state = "crossbow"
mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow
@@ -79,39 +83,3 @@
manufacturer = MANUFACTURER_DONKCO
recoil = -10 //its a toy...
recoil_unwielded = -10
-
-/obj/item/gun/ballistic/automatic/smg/c20r/toy
- name = "donksoft SMG"
- desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up."
- item_flags = NONE
- mag_type = /obj/item/ammo_box/magazine/toy/smgm45
- fire_sound = 'sound/items/syringeproj.ogg'
- casing_ejector = FALSE
- manufacturer = MANUFACTURER_DONKCO
- recoil = -10 //its a toy...
- recoil_unwielded = -10
-
-/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot
- mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot
-
-/obj/item/gun/ballistic/automatic/smg/c20r/toy/update_overlays()
- . = ..()
- . += "[icon_state]_toy"
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy
- name = "donksoft LMG"
- desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up."
- fire_sound = 'sound/items/syringeproj.ogg'
- item_flags = NONE
- mag_type = /obj/item/ammo_box/magazine/toy/m762
- casing_ejector = FALSE
- manufacturer = MANUFACTURER_DONKCO
- recoil = -10 //its a toy...
- recoil_unwielded = -10
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot
- mag_type = /obj/item/ammo_box/magazine/toy/m762/riot
-
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/update_overlays()
- . = ..()
- . += "[icon_state]_toy"
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index abe3e3fd7b43d..aaf37d4c95563 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -39,6 +39,8 @@
/obj/item/gun/energy/emp_act(severity)
. = ..()
if(!(. & EMP_PROTECT_CONTENTS))
+ if(prob(GUN_NO_SAFETY_MALFUNCTION_CHANCE_HIGH))
+ discharge("malfunctions from the EMP")
cell.use(round(cell.charge / severity))
chambered = null //we empty the chamber
recharge_newshot() //and try to charge a new shot
@@ -323,3 +325,7 @@
. += "\The [name] has [round(cell.charge/shot.e_cost)] shots remaining on [shot.select_name] mode."
else
. += span_notice("\The [name] doesn't seem to have a cell!")
+
+/obj/item/gun/energy/unsafe_shot(target)
+ . = ..()
+ process_chamber()
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 2ca71649a6f7c..5d0e8d54e4e2f 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 09de7690b5eaa..c63c8358e2de4 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/guns/manufacturer/scarborough/ballistics.dm b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm
new file mode 100644
index 0000000000000..18239e94dd7ee
--- /dev/null
+++ b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm
@@ -0,0 +1,1084 @@
+//########### PISTOLS ###########//
+/obj/item/gun/ballistic/automatic/pistol/ringneck
+ name = "PC-76 \"Ringneck\""
+ desc = "A compact handgun used by most Syndicate-affiliated groups. Small enough to conceal in most pockets, making it popular for covert elements and simply as a compact defensive weapon. Chambered in 10mm."
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+ icon_state = "ringneck"
+ item_state = "sa_generic"
+
+ w_class = WEIGHT_CLASS_SMALL
+ mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck
+
+ fire_sound = 'sound/weapons/gun/pistol/shot.ogg'
+ dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg'
+ suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg'
+
+ load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
+ load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
+ eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
+ eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
+
+ rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg'
+ lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
+ bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
+
+ manufacturer = MANUFACTURER_SCARBOROUGH
+ show_magazine_on_sprite = TRUE
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 27,
+ "y" = 23,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 16,
+ "y" = 25,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 21,
+ "y" = 19,
+ )
+ )
+
+
+ spread = 6 //becuase its compact, spread is slightly worse
+ spread_unwielded = 9
+ recoil_unwielded = 2
+
+EMPTY_GUN_HELPER(automatic/pistol/ringneck)
+
+/obj/item/gun/ballistic/automatic/pistol/ringneck/indie
+ name = "Ringneck-76"
+ desc = "A service handgun popular among law enforcement, mercenaries, and independent spacers with discerning tastes. Chambered in 10mm."
+
+ icon_state = "ringneck76"
+ item_state = "sa_indie"
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ spread = 5 //this one is normal sized, thus in theory its better, in theory at least
+ spread_unwielded = 7
+ recoil_unwielded = 3
+
+EMPTY_GUN_HELPER(automatic/pistol/ringneck/indie)
+
+
+/obj/item/ammo_box/magazine/m10mm_ringneck
+ name = "Ringneck pistol magazine (10mm)"
+ desc = "An 10-round magazine for the Ringneck pistol. These rounds do moderate damage, but struggle against armor."
+ icon_state = "ringneck_mag-1"
+ base_icon_state = "ringneck_mag"
+ ammo_type = /obj/item/ammo_casing/c10mm
+ caliber = "10mm"
+ max_ammo = 10
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+/obj/item/ammo_box/magazine/m10mm_ringneck/empty
+ start_empty = TRUE
+
+/obj/item/gun/ballistic/automatic/pistol/asp
+ name = "BC-81 \"Asp\""
+ desc = "An armor-piercing combat handgun once used by Syndicate strike teams, now primarily used by descendants of the Gorlex Marauders. Chambered in 5.7mm."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+ icon_state = "asp"
+ item_state = "sa_generic"
+
+ mag_type = /obj/item/ammo_box/magazine/m57_39_asp
+
+ fire_sound = 'sound/weapons/gun/pistol/asp.ogg'
+
+ load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
+ load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
+ eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
+ eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
+
+ rack_sound = 'sound/weapons/gun/pistol/rack.ogg'
+ lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
+ bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
+
+ manufacturer = MANUFACTURER_SCARBOROUGH
+ show_magazine_on_sprite = TRUE
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 32,
+ "y" = 23,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 15,
+ "y" = 26,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 23,
+ "y" = 19,
+ )
+ )
+
+EMPTY_GUN_HELPER(automatic/pistol/asp)
+
+/obj/item/ammo_box/magazine/m57_39_asp
+ name = "Asp magazine (5.7x39mm)"
+ desc = "A 12-round, double-stack magazine for the Asp pistol. These rounds do okay damage with average performance against armor."
+ icon_state = "asp_mag-12"
+ base_icon_state = "asp_mag"
+ ammo_type = /obj/item/ammo_casing/c57x39mm
+ caliber = "5.7x39mm"
+ max_ammo = 12
+
+/obj/item/ammo_box/magazine/m57_39_asp/update_icon_state()
+ . = ..()
+ if(ammo_count() == 12)
+ icon_state = "[base_icon_state]-12"
+ else if(ammo_count() >= 10)
+ icon_state = "[base_icon_state]-10"
+ else if(ammo_count() >= 5)
+ icon_state = "[base_icon_state]-5"
+ else if(ammo_count() >= 1)
+ icon_state = "[base_icon_state]-1"
+ else
+ icon_state = "[base_icon_state]-0"
+
+
+/obj/item/gun/ballistic/revolver/viper
+ name = "R-23 \"Viper\""
+ desc = "An imposing revolver used by officers and certain agents of Syndicate member factions during the ICW, still favored by captains and high-ranking officers of the former Syndicate. Chambered in .357 Magnum."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+
+ icon_state = "viper"
+ item_state = "sa_generic"
+
+ fire_sound = 'sound/weapons/gun/revolver/viper.ogg'
+ rack_sound = 'sound/weapons/gun/revolver/viper_prime.ogg'
+ load_sound = 'sound/weapons/gun/revolver/load_bullet.ogg'
+ eject_sound = 'sound/weapons/gun/revolver/empty.ogg'
+
+ dry_fire_sound = 'sound/weapons/gun/revolver/dry_fire.ogg'
+
+ fire_delay = 0.5 SECONDS
+
+ semi_auto = TRUE //double action
+ safety_wording = "safety"
+
+EMPTY_GUN_HELPER(revolver/viper)
+
+/obj/item/gun/ballistic/revolver/viper/indie
+ name = "Viper-23"
+ desc = "A powerful bull-barrel revolver. Very popular among mercenaries and the occasional well-to-do spacer or pirate for its flashy appearance and powerful cartridge. Chambered in .357 Magnum."
+
+ icon_state = "viper23"
+ item_state = "viper23"
+
+ semi_auto = FALSE //not double action
+ safety_wording = "hammer"
+
+/obj/item/gun/ballistic/revolver/viper/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/ammo_hud/revolver)
+
+EMPTY_GUN_HELPER(revolver/viper/indie)
+
+/obj/item/gun/ballistic/automatic/pistol/rattlesnake
+ name = "MP-84 \"Rattlesnake\""
+ desc = "A machine pistol, once used by Syndicate infiltrators and special forces during the ICW. Still used by specialists in former Syndicate factions. Chambered in 9mm."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+
+ icon_state = "rattlesnake"
+ item_state = "rattlesnake"
+
+ mag_type = /obj/item/ammo_box/magazine/m9mm_rattlesnake
+
+ fire_sound = 'sound/weapons/gun/pistol/rattlesnake.ogg'
+ dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg'
+ suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg'
+
+ load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
+ load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
+ eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
+ eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
+
+ rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg'
+ lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
+ bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
+
+ show_magazine_on_sprite = TRUE
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 40,
+ "y" = 26,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 14,
+ "y" = 29,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 22,
+ "y" = 21,
+ )
+ )
+
+ burst_size = 3
+ burst_delay = 0.1 SECONDS
+ fire_delay = 0.4 SECONDS
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST)
+ default_firemode = FIREMODE_SEMIAUTO
+
+EMPTY_GUN_HELPER(automatic/pistol/rattlesnake)
+
+/obj/item/gun/ballistic/automatic/pistol/rattlesnake/inteq
+ name = "MP-84m Kingsnake"
+ desc = "A machine pistol obtained from Syndicate stockpiles and lightly modified to Inteq standards. Generally issued only to specialists. Chambered in 9mm."
+
+ icon_state = "rattlesnake_inteq"
+ item_state = "rattlesnake_inteq"
+
+/obj/item/ammo_box/magazine/m9mm_rattlesnake
+ name = "Rattlesnake magazine (9mm)"
+ desc = "A long, 18-round double-stack magazine designed for the Rattlesnake machine pistol. These rounds do okay damage, but struggle against armor."
+ icon_state = "rattlesnake_mag_18"
+ base_icon_state = "rattlesnake_mag"
+ ammo_type = /obj/item/ammo_casing/c9mm
+ caliber = "9mm"
+ max_ammo = 18
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+/obj/item/ammo_box/magazine/m9mm_rattlesnake/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state]_[ammo_count() == 1 ? 1 : round(ammo_count(),3)]"
+
+/obj/item/gun/ballistic/automatic/pistol/himehabu
+ name = "PC-81 \"Himehabu\""
+ desc = "An astonishingly compact machine pistol firing ultra-light projectiles, designed to be as small and concealable as possible while remaining a credible threat at very close range. Armor penetration is practically non-existent. Chambered in .22."
+
+ icon_state = "himehabu"
+ item_state = "sa_generic"
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+
+
+ w_class = WEIGHT_CLASS_TINY
+ mag_type = /obj/item/ammo_box/magazine/m22lr_himehabu
+ fire_sound = 'sound/weapons/gun/pistol/himehabu.ogg'
+
+ load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
+ load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg'
+ eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
+ eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg'
+
+ rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg'
+ lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg'
+ bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg'
+
+ show_magazine_on_sprite = TRUE
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 28,
+ "y" = 22,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 12,
+ "y" = 25,
+ )
+ )
+
+ recoil = -2
+ recoil_unwielded = -2
+ spread_unwielded = 0
+ wield_slowdown = 0
+
+EMPTY_GUN_HELPER(automatic/pistol/himehabu)
+
+/obj/item/ammo_box/magazine/m22lr_himehabu
+ name = "pistol magazine (.22 LR)"
+ desc = "A single-stack handgun magazine designed to chamber .22 LR. It's rather tiny, all things considered."
+ icon_state = "himehabu_mag-10"
+ base_icon_state = "himehabu_mag"
+ ammo_type = /obj/item/ammo_casing/c22lr
+ caliber = "22lr"
+ max_ammo = 10
+ w_class = WEIGHT_CLASS_TINY
+ multiple_sprites = AMMO_BOX_PER_BULLET
+
+//########### SMGS ###########//
+
+
+/obj/item/gun/ballistic/automatic/smg/cobra
+ name = "C-20r \"Cobra\""
+ desc = "A bullpup submachine gun, heavily used by Syndicate strike teams during the ICW. Still sees widespread use by the descendants of the Gorlex Marauders. Chambered in .45."
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+ icon_state = "cobra"
+ item_state = "cobra"
+
+ mag_type = /obj/item/ammo_box/magazine/m45_cobra
+
+ fire_sound = 'sound/weapons/gun/smg/cobra.ogg'
+
+ load_sound = 'sound/weapons/gun/smg/cm5_reload.ogg'
+ load_empty_sound = 'sound/weapons/gun/smg/cm5_reload.ogg'
+ eject_sound = 'sound/weapons/gun/smg/cm5_unload.ogg'
+ eject_empty_sound = 'sound/weapons/gun/smg/cm5_unload.ogg'
+
+ show_magazine_on_sprite = TRUE
+ show_magazine_on_sprite_ammo = TRUE
+ show_ammo_capacity_on_magazine_sprite = TRUE
+ manufacturer = MANUFACTURER_SCARBOROUGH
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 27,
+ "y" = 23,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 38,
+ "y" = 18,
+ )
+ )
+
+EMPTY_GUN_HELPER(automatic/smg/cobra)
+
+/obj/item/gun/ballistic/automatic/smg/cobra/indie
+ name = "Cobra-20"
+ desc = "An older model of submachine gun manufactured by Scarborough Arms and marketed to mercenaries, law enforcement, and independent militia. Only became popular after the end of the ICW. Chambered in .45."
+ icon_state = "cobra20"
+ item_state = "cobra20"
+
+EMPTY_GUN_HELPER(automatic/smg/cobra/indie)
+
+
+/obj/item/ammo_box/magazine/m45_cobra
+
+/obj/item/ammo_box/magazine/m45_cobra
+ name = "Cobra magazine (.45)"
+ desc = "A 28-round magazine for the Cobra submachine gun. These rounds do moderate damage, but struggle against armor."
+ icon_state = "cobra_mag-28"
+ base_icon_state = "cobra_mag"
+ ammo_type = /obj/item/ammo_casing/c45
+ caliber = ".45"
+ max_ammo = 28
+
+/obj/item/ammo_box/magazine/m45_cobra/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state]-[round(ammo_count(),2)]"
+
+/obj/item/ammo_box/magazine/m45_cobra/empty
+ start_empty = TRUE
+
+/obj/item/gun/ballistic/automatic/smg/sidewinder
+ name = "CDW-81 \"Sidewinder\""
+ desc = "An armor-piercing, compact personal defense weapon, introduced late into the Inter-Corporate War as an improvement over the C-20r when fighting armored personnel. Issued only in small numbers, and used today by specialists of former Syndicate factions. Chambered in 5.7mm."
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+ icon_state = "sidewinder"
+ item_state = "sidewinder"
+
+ mag_type = /obj/item/ammo_box/magazine/m57_39_sidewinder
+
+ fire_sound = 'sound/weapons/gun/smg/sidewinder.ogg'
+
+ load_sound = 'sound/weapons/gun/smg/sidewinder_reload.ogg'
+ load_empty_sound = 'sound/weapons/gun/smg/sidewinder_reload.ogg'
+ eject_sound = 'sound/weapons/gun/smg/sidewinder_unload.ogg'
+ eject_empty_sound = 'sound/weapons/gun/smg/sidewinder_unload.ogg'
+
+ rack_sound = 'sound/weapons/gun/smg/sidewinder_cocked.ogg'
+
+ weapon_weight = WEAPON_MEDIUM
+ w_class = WEIGHT_CLASS_NORMAL
+
+ show_magazine_on_sprite = TRUE
+ show_magazine_on_sprite_ammo = TRUE
+ show_ammo_capacity_on_magazine_sprite = TRUE
+ manufacturer = MANUFACTURER_SCARBOROUGH
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/foldable_stock/sidewinder
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_RAIL = 1,
+ ATTACHMENT_SLOT_STOCK = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 44,
+ "y" = 18,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 35,
+ "y" = 17,
+ ),
+ ATTACHMENT_SLOT_STOCK = list(
+ "x" = 17,
+ "y" = 18,
+ )
+ )
+
+ spread = 7
+ spread_unwielded = 10
+
+ recoil = 0
+ recoil_unwielded = 4
+
+ default_attachments = list(/obj/item/attachment/foldable_stock/sidewinder)
+
+
+EMPTY_GUN_HELPER(automatic/smg/sidewinder)
+
+/obj/item/ammo_box/magazine/m57_39_sidewinder
+ name = "Sidewinder magazine (5.7x39mm)"
+ desc = "A 30-round magazine for the Cobra submachine gun. These rounds do okay damage with average performance against armor."
+ icon_state = "sidewinder_mag-1"
+ base_icon_state = "sidewinder_mag"
+ ammo_type = /obj/item/ammo_casing/c57x39mm
+ caliber = "5.7x39mm"
+ max_ammo = 30
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+//########### MARKSMAN ###########//
+/obj/item/gun/ballistic/automatic/marksman/boomslang
+ name = "MSR-90 \"Boomslang\""
+ desc = "A bullpup semi-automatic sniper rifle with a high-magnification scope. Compact and capable of rapid follow-up fire without sacrificing power. Used by Syndicate support units and infiltrators during the ICW. Chambered in 6.5mm CLIP."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+
+ icon_state = "boomslang"
+ item_state = "boomslang"
+
+ fire_sound = 'sound/weapons/gun/sniper/cmf90.ogg'
+
+ mag_type = /obj/item/ammo_box/magazine/boomslang
+ w_class = WEIGHT_CLASS_BULKY
+
+ fire_delay = 1 SECONDS
+
+ show_magazine_on_sprite = TRUE
+ unique_mag_sprites_for_variants = TRUE
+ show_ammo_capacity_on_magazine_sprite = TRUE
+ manufacturer = MANUFACTURER_SCARBOROUGH
+ spread = -5
+ spread_unwielded = 35
+ recoil = 4
+ recoil_unwielded = 10
+ wield_slowdown = 1
+ wield_delay = 1.3 SECONDS
+
+ zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you.
+ zoom_out_amt = 5
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 48,
+ "y" = 19,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 28,
+ "y" = 10,
+ )
+ )
+
+EMPTY_GUN_HELPER(automatic/marksman/boomslang)
+
+/obj/item/gun/ballistic/automatic/marksman/boomslang/indie
+ name = "Boomslang-90"
+ desc = "A modern semi-automatic hunting rifle. Its relative portability and fast follow-up potential compared to other weapons in its class have made it very popular with well-to-do hunters and the occasional law enforcement agency or mercenary. Chambered in 6.5mm CLIP."
+
+ icon_state = "boomslang90"
+ item_state = "boomslang90"
+
+ zoom_amt = 3 //Long range, enough to see in front of you, but no tiles behind you.
+ zoom_out_amt = 0
+
+EMPTY_GUN_HELPER(automatic/marksman/boomslang/indie)
+
+/obj/item/ammo_box/magazine/boomslang
+ name = "\improper Boomslang Magazine (6.5x57mm CLIP)"
+ desc = "A large 10-round box magazine for Boomslang sniper rifles. These rounds deal amazing damage and bypass half of their protective equipment, though it isn't a high enough caliber to pierce armored vehicles."
+ base_icon_state = "boomslang"
+ icon_state = "boomslang-10"
+ ammo_type = /obj/item/ammo_casing/a65clip
+ caliber = "6.5CLIP"
+ max_ammo = 10
+ multiple_sprites = AMMO_BOX_PER_BULLET
+
+/obj/item/ammo_box/magazine/boomslang/short
+ name = "\improper Boomslang Magazine (6.5x57mm CLIP)"
+ desc = "A 5-round box magazine for Boomslang sniper rifles. These rounds deal amazing damage and bypass half of their protective equipment, though it isn't a high enough caliber to pierce armored vehicles."
+ base_icon_state = "boomslang_short"
+ icon_state = "boomslang_short-5"
+ ammo_type = /obj/item/ammo_casing/a65clip
+ caliber = "6.5CLIP"
+ max_ammo = 5
+ multiple_sprites = AMMO_BOX_PER_BULLET
+
+/obj/item/ammo_box/magazine/boomslang/short/empty
+ start_empty = TRUE
+
+/obj/item/gun/ballistic/automatic/marksman/taipan
+ name = "AMR-83 \"Taipan\""
+ desc = "A monstrous semi-automatic anti-materiel rifle, surprisingly short for its class. Designed to destroy mechs, light vehicles, and equipment, but more than capable of obliterating regular personnel. Chambered in .50 BMG."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+
+ icon_state = "taipan"
+ item_state = "taipan"
+ fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
+ fire_sound_volume = 90
+ vary_fire_sound = FALSE
+ load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
+ rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
+ suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
+ weapon_weight = WEAPON_HEAVY
+ mag_type = /obj/item/ammo_box/magazine/sniper_rounds
+ w_class = WEIGHT_CLASS_BULKY
+ zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you.
+ zoom_out_amt = 5
+ slot_flags = ITEM_SLOT_BACK
+ actions_types = list()
+ show_magazine_on_sprite = TRUE
+ manufacturer = MANUFACTURER_SCARBOROUGH
+
+ show_ammo_capacity_on_magazine_sprite = TRUE
+
+ spread = -5
+ spread_unwielded = 40
+ recoil = 5
+ recoil_unwielded = 50
+
+ wield_delay = 1.3 SECONDS
+
+ valid_attachments = list()
+ slot_available = list()
+
+EMPTY_GUN_HELPER(automatic/marksman/taipan)
+
+
+//########### RIFLES ###########//
+/obj/item/gun/ballistic/automatic/assault/hydra
+ name = "SMR-80 \"Hydra\""
+ desc = "Scarborough Arms' premier modular assault rifle platform. This is the basic configuration, optimized for light weight and handiness. A very well-regarded, if expensive and rare, assault rifle. Chambered in 5.56mm CLIP."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+ icon_state = "hydra"
+ item_state = "hydra"
+
+ mag_type = /obj/item/ammo_box/magazine/m556_42_hydra
+ gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "underbarrel grenade launcher")
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ //gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_OTHER)
+ default_firemode = FIREMODE_SEMIAUTO
+ show_magazine_on_sprite = FALSE //we do this to avoid making the same of every sprite, see below
+
+ load_sound = 'sound/weapons/gun/rifle/m16_reload.ogg'
+ load_empty_sound = 'sound/weapons/gun/rifle/m16_reload.ogg'
+ eject_sound = 'sound/weapons/gun/rifle/m16_unload.ogg'
+ eject_empty_sound = 'sound/weapons/gun/rifle/m16_unload.ogg'
+
+ fire_sound = 'sound/weapons/gun/rifle/hydra.ogg'
+ manufacturer = MANUFACTURER_SCARBOROUGH
+
+ weapon_weight = WEAPON_MEDIUM
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = ITEM_SLOT_BACK
+
+ burst_size = 2
+ burst_delay = 0.1 SECONDS
+ fire_delay = 0.18 SECONDS
+ spread = 1
+ spread_unwielded = 8
+ wield_slowdown = 0.4
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 42,
+ "y" = 17,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 21,
+ "y" = 24,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 30,
+ "y" = 15,
+ )
+ )
+
+EMPTY_GUN_HELPER(automatic/assault/hydra)
+
+//we hard code "hydra", why? because if not, i would need to duplicate the extended/short magazine sprites like 3 fucking times for every variant with a different icon state. this eases the spriting burden
+/obj/item/gun/ballistic/automatic/assault/hydra/update_overlays()
+ . = ..()
+ if (magazine)
+ . += "hydra_mag_[magazine.base_icon_state]"
+ var/capacity_number = 0
+ switch(get_ammo() / magazine.max_ammo)
+ if(0.2 to 0.39)
+ capacity_number = 20
+ if(0.4 to 0.59)
+ capacity_number = 40
+ if(0.6 to 0.79)
+ capacity_number = 60
+ if(0.8 to 0.99)
+ capacity_number = 80
+ if(1.0 to 2.0) //to catch the chambered round
+ capacity_number = 100
+ if (capacity_number)
+ . += "hydra_mag_[magazine.base_icon_state]_[capacity_number]"
+
+
+/obj/item/gun/ballistic/automatic/assault/hydra/lmg
+ name = "SAW-80 \"Hydra\""
+ desc = "Scarborough Arms' premier modular assault rifle platform. This example is configured as a support weapon, with heavier components for sustained firing and a large muzzle brake. Chambered in 5.56mm CLIP."
+
+ icon_state = "hydra_lmg"
+ item_state = "hydra_lmg"
+
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_FULLAUTO
+
+ burst_delay = 0.08 SECONDS
+ fire_delay = 0.08 SECONDS
+ spread = 6
+ spread_unwielded = 20
+ wield_slowdown = 0.85 //better than the lmgs since it doesnt have a bipod, still not ideal
+ wield_delay = 0.9 SECONDS //ditto
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ /obj/item/attachment/laser_sight,
+ /obj/item/attachment/rail_light,
+ /obj/item/attachment/bayonet
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ ATTACHMENT_SLOT_RAIL = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 48,
+ "y" = 19,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 21,
+ "y" = 24,
+ ),
+ ATTACHMENT_SLOT_RAIL = list(
+ "x" = 30,
+ "y" = 15,
+ )
+ )
+
+/obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended
+ spawnwithmagazine = FALSE //so we spawn with the short magaine
+
+/obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended/Initialize()
+ . = ..()
+ magazine = new /obj/item/ammo_box/magazine/m556_42_hydra/extended(src)
+ chamber_round()
+
+/obj/item/gun/ballistic/automatic/assault/hydra/lmg/casket_mag
+ spawnwithmagazine = FALSE //so we spawn with the short magaine
+
+/obj/item/gun/ballistic/automatic/assault/hydra/lmg/casket_mag/Initialize()
+ . = ..()
+ magazine = new /obj/item/ammo_box/magazine/m556_42_hydra/casket(src)
+ chamber_round()
+
+/obj/item/gun/ballistic/automatic/assault/hydra/dmr
+ name = "SBR-80 \"Hydra\""
+ desc = "Scarborough Arms' premier modular assault rifle platform. This example is configured as a marksman rifle, with an extended barrel and medium-zoom scope. Its lightweight cartridge is compensated for with a 2-round burst action. Chambered in 5.56mm CLIP."
+
+ icon_state = "hydra_dmr"
+ item_state = "hydra_dmr"
+
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST)
+ default_firemode = FIREMODE_SEMIAUTO
+
+ spread = 0
+ spread_unwielded = 12
+ wield_slowdown = 0.8 //dmrrrr
+ wield_delay = 0.85 SECONDS //above
+ spawnwithmagazine = FALSE //so we spawn with the short magaine
+ zoomable = TRUE
+
+EMPTY_GUN_HELPER(automatic/assault/hydra/dmr)
+
+/obj/item/gun/ballistic/automatic/assault/hydra/dmr/Initialize()
+ . = ..()
+ magazine = new /obj/item/ammo_box/magazine/m556_42_hydra/small(src)
+ chamber_round()
+
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl
+ name = "SMR-80 \"Hydra\""
+ desc = "Scarborough Arms' premier modular assault rifle platform. This is the basic configuration, optimized for light weight and handiness. A very well-regarded, if expensive and rare, assault rifle. This one has an underslung grenade launcher attached. Chambered in 5.56x42mm CLIP."
+
+ icon_state = "hydra_gl"
+ item_state = "hydra_gl"
+
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO, FIREMODE_OTHER)
+
+ var/obj/item/gun/ballistic/revolver/grenadelauncher/secondary
+
+ slot_available = list( //no rail slot
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1,
+ )
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/Initialize()
+ . = ..()
+ secondary = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
+ RegisterSignal(secondary, COMSIG_ATOM_UPDATE_ICON, PROC_REF(secondary_update_icon))
+ update_appearance()
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
+ return secondary.pre_fire(target, user, message, params, zone_override, bonus_spread)
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/can_shoot()
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
+ return ..()
+ return secondary.can_shoot()
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/afterattack(atom/target, mob/living/user, flag, params)
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
+ return ..()
+ return secondary.afterattack(target, user, flag, params)
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/attackby(obj/item/attack_obj, mob/user, params)
+ if(istype(attack_obj, secondary.magazine.ammo_type))
+ secondary.unique_action()
+ return secondary.attackby(attack_obj, user, params)
+ return ..()
+
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/can_shoot()
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
+ return ..()
+ return secondary.can_shoot()
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/on_wield(obj/item/source, mob/user)
+ wielded = TRUE
+ secondary.wielded = TRUE
+ INVOKE_ASYNC(src, .proc.do_wield, user)
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/do_wield(mob/user)
+ . = ..()
+ secondary.wielded_fully = wielded_fully
+
+/// triggered on unwield of two handed item
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/on_unwield(obj/item/source, mob/user)
+ . = ..()
+ secondary.wielded_fully = FALSE
+ secondary.wielded = FALSE
+
+
+/obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/proc/secondary_update_icon()
+ update_appearance()
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
+
+
+/obj/item/ammo_box/magazine/m556_42_hydra
+ name = "Hydra assault rifle magazine (5.56x42mm CLIP)"
+ desc = "A simple, 30-round magazine for the Hydra platform of 5.56x42mm CLIP assault rifles. These rounds do moderate damage with good armor penetration."
+ icon_state = "hydra_mag-30"
+ base_icon_state = "hydra_mag"
+ ammo_type = /obj/item/ammo_casing/a556_42
+ caliber = "5.56x42mm"
+ max_ammo = 30
+
+/obj/item/ammo_box/magazine/m556_42_hydra/update_icon_state()
+ . = ..()
+ if(multiple_sprites == AMMO_BOX_FULL_EMPTY)
+ return
+ icon_state = "[base_icon_state]-[ammo_count() == 1 ? 1 : round(ammo_count(),5)]"
+
+/obj/item/ammo_box/magazine/m556_42_hydra/small
+ name = "Short Hydra assault rifle magazine (5.56x42mm CLIP)"
+ desc = "A short, 20-round magazine for the Hydra platform of 5.56x42mm CLIP assault rifles; intended for the DMR variant. These rounds do moderate damage with good armor penetration."
+ icon_state = "hydra_small_mag-20"
+ base_icon_state = "hydra_small_mag"
+ max_ammo = 20
+
+/obj/item/ammo_box/magazine/m556_42_hydra/extended
+ name = "extended Hydra assault rifle magazine (5.56x42mm CLIP)"
+ desc = "A bulkier, 60-round magazine for the Hydra platform of 5.56x42mm CLIP assault rifles. These rounds do moderate damage with good armor penetration."
+ icon_state = "hydra_extended_mag-1"
+ base_icon_state = "hydra_extended_mag"
+ max_ammo = 60
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+/obj/item/ammo_box/magazine/m556_42_hydra/casket
+ name = "casket Hydra assault rifle magazine (5.56x42mm CLIP)"
+ desc = "A very long and bulky 100-round magazine for the Hydra platform of 5.56x42mm CLIP assault rifles. These rounds do moderate damage with good armor penetration."
+ icon_state = "hydra_casket_mag-1"
+ base_icon_state = "hydra_casket_mag"
+ max_ammo = 100
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+ w_class = WEIGHT_CLASS_NORMAL
+
+//########### MISC ###########//
+// Bulldog shotgun //
+
+/obj/item/gun/ballistic/shotgun/automatic/bulldog
+ name = "SG-60r \"Bulldog\""
+ desc = "A bullpup combat shotgun usually seen with a characteristic drum magazine. Wildly popular among Syndicate strike teams during the ICW, although it proved less useful against military-grade equipment. Still popular among former Syndicate factions, especially the Ramzi Clique pirates. Chambered in 12g."
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+ icon_state = "bulldog"
+ item_state = "bulldog"
+
+ weapon_weight = WEAPON_MEDIUM
+ mag_type = /obj/item/ammo_box/magazine/m12g_bulldog
+ fire_delay = 0.4 SECONDS // this NEEDS the old delay.
+ fire_sound = 'sound/weapons/gun/shotgun/bulldog.ogg'
+ show_magazine_on_sprite = TRUE
+// empty_indicator = TRUE
+ empty_alarm = TRUE
+ unique_mag_sprites_for_variants = TRUE
+ show_ammo_capacity_on_magazine_sprite = TRUE
+ internal_magazine = FALSE
+ casing_ejector = TRUE
+ tac_reloads = TRUE
+ pickup_sound = 'sound/items/handling/rifle_pickup.ogg'
+ manufacturer = MANUFACTURER_SCARBOROUGH
+
+ load_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
+ load_empty_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
+ eject_sound = 'sound/weapons/gun/rifle/ar_unload.ogg'
+ eject_empty_sound = 'sound/weapons/gun/rifle/ar_unload.ogg'
+
+ rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg'
+
+ spread = 4
+ spread_unwielded = 16
+ recoil = 1
+ recoil_unwielded = 4
+ wield_slowdown = 0.6
+ wield_delay = 0.65 SECONDS
+
+ valid_attachments = list(
+ /obj/item/attachment/silencer,
+ )
+ slot_available = list(
+ ATTACHMENT_SLOT_MUZZLE = 1,
+ ATTACHMENT_SLOT_SCOPE = 1
+ )
+ slot_offsets = list(
+ ATTACHMENT_SLOT_MUZZLE = list(
+ "x" = 44,
+ "y" = 19,
+ ),
+ ATTACHMENT_SLOT_SCOPE = list(
+ "x" = 25,
+ "y" = 24,
+ )
+ )
+
+EMPTY_GUN_HELPER(shotgun/automatic/bulldog)
+
+/obj/item/ammo_box/magazine/m12g_bulldog
+ name = "shotgun box magazine (12g buckshot)"
+ desc = "A single-stack, 8-round box magazine for the Bulldog shotgun and it's derivatives."
+ icon_state = "bulldog_mag-1"
+ base_icon_state = "bulldog_mag"
+ ammo_type = /obj/item/ammo_casing/shotgun/buckshot
+ caliber = "12ga"
+ max_ammo = 8
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+/obj/item/ammo_box/magazine/m12g_bulldog/drum
+ name = "shotgun drum magazine (12g buckshot)"
+ desc = "A bulky 12-round drum designed for the Bulldog shotgun and it's derivatives."
+ icon_state = "bulldog_drum-1"
+ base_icon_state = "bulldog_drum"
+ ammo_type = /obj/item/ammo_casing/shotgun/buckshot
+ caliber = "12ga"
+ max_ammo = 12
+ w_class = WEIGHT_CLASS_NORMAL
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+/obj/item/ammo_box/magazine/m12g_bulldog/drum/stun
+ name = "shotgun drum magazine (12g taser slugs)"
+ ammo_type = /obj/item/ammo_casing/shotgun/stunslug
+
+/obj/item/ammo_box/magazine/m12g_bulldog/drum/slug
+ name = "shotgun drum magazine (12g slugs)"
+ ammo_type = /obj/item/ammo_casing/shotgun
+
+/obj/item/ammo_box/magazine/m12g_bulldog/drum/dragon
+ name = "shotgun drum magazine (12g dragon's breath)"
+ ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath
+
+/obj/item/ammo_box/magazine/m12g_bulldog/drum/bioterror
+ name = "shotgun drum magazine (12g bioterror)"
+ ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror
+
+/obj/item/ammo_box/magazine/m12g_bulldog/drum/meteor
+ name = "shotgun drum magazine (12g meteor slugs)"
+ ammo_type = /obj/item/ammo_casing/shotgun/meteorslug
+
+
+EMPTY_GUN_HELPER(shotgun/bulldog)
+
+
+/obj/item/gun/ballistic/rocketlauncher/mako
+ name = "RR-86 \"Mako\""
+ desc = "A large, four-tube rocket launcher, the Mako fires (relatively) small rockets filled with incendiary compound, designed to cause fires and deny enemy movement. Capable of causing significant damage to exosuits on impact, as well."
+
+ icon = 'icons/obj/guns/manufacturer/scarborough/48x32.dmi'
+ lefthand_file = 'icons/obj/guns/manufacturer/scarborough/lefthand.dmi'
+ righthand_file = 'icons/obj/guns/manufacturer/scarborough/righthand.dmi'
+ mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi'
+
+ icon_state = "mako"
+ item_state = "mako"
+ mag_type = /obj/item/ammo_box/magazine/internal/mako
+ fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg'
+ load_sound = 'sound/weapons/gun/general/rocket_load.ogg'
+ w_class = WEIGHT_CLASS_BULKY
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+ burst_size = 1
+ fire_delay = 0.4 SECONDS
+ casing_ejector = FALSE
+ weapon_weight = WEAPON_HEAVY
+ bolt_type = BOLT_TYPE_NO_BOLT
+ internal_magazine = TRUE
+ cartridge_wording = "rocket"
+ empty_indicator = TRUE
+ tac_reloads = FALSE
+ manufacturer = MANUFACTURER_SCARBOROUGH
+
+
+/obj/item/ammo_box/magazine/internal/mako
+ name = "mako internal magazine"
+ ammo_type = /obj/item/ammo_casing/caseless/rocket/a70mm
+ caliber = "70mm"
+ max_ammo = 4
+
+/obj/item/ammo_casing/caseless/rocket/a70mm
+ name = "\improper M-KO-9HE"
+ desc = "An 70mm High Explosive rocket. Fire at mech and pray."
+ icon_state = "srm-8"
+ caliber = "70mm"
+ projectile_type = /obj/projectile/bullet/a84mm_he
+ auto_rotate = FALSE
+
+/obj/item/ammo_casing/caseless/rocket/a70mm/hedp
+ name = "\improper M-KO-9HEDP"
+ desc = "An 84mm High Explosive Dual Purpose rocket. Pointy end toward armor."
+ caliber = "70mm"
+ icon_state = "84mm-hedp"
+ projectile_type = /obj/projectile/bullet/a84mm
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 66adeb53ac59f..2cccb02224ed3 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -24,6 +24,8 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/def_zone = "" //Aiming at
var/atom/movable/firer = null//Who shot it
+ // if the projectile was the result of a misfire. For logging.
+ var/misfire = FALSE
var/atom/fired_from = null // the atom that the projectile was fired from (gun, turret)
var/suppressed = FALSE //Attack message
var/yo = null
@@ -156,6 +158,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
@@ -280,7 +286,9 @@
for(var/datum/reagent/R in reagents.reagent_list)
reagent_note += "[R.name] ([num2text(R.volume)])"
- if(ismob(firer))
+ if(misfire)
+ L.log_message("has been hit by a misfired [src] from \a [fired_from] last touched by [fired_from.fingerprintslast]", LOG_ATTACK, color = "orange")
+ else if(ismob(firer))
log_combat(firer, L, "shot", src, reagent_note)
else
L.log_message("has been shot by [firer] with [src]", LOG_ATTACK, color="orange")
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 3aada5ddcb415..c46a4c6cb2f9d 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 79a9b2feb07cb..71da70475dde9 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 a04fc2995c265..37af59c1de57f 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
@@ -31,7 +31,7 @@
armour_penetration = -40
stamina = 30
-// 10mm (Stechkin & SkM-44(k))
+// 10mm (Ringneck & SkM-44(k))
/obj/projectile/bullet/c10mm
name = "10mm bullet"
@@ -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 0c62fe5b3d4ff..dede2ce0d7ce5 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 0ea5a8557c8d5..690f02d6b5c5e 100644
--- a/code/modules/projectiles/projectile/bullets/rifle.dm
+++ b/code/modules/projectiles/projectile/bullets/rifle.dm
@@ -1,7 +1,7 @@
-// 5.56mm (M-90gl Carbine & P-16)
+// 5.56x42mm CLIP (CM82, Hydra variants)
-/obj/projectile/bullet/a556_45
- name = "5.56x45mm bullet"
+/obj/projectile/bullet/a556_42
+ name = "5.56x42mm CLIP bullet"
damage = 25
armour_penetration = 20
@@ -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/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm
index fb5e2a53ce657..9b11c74e4c1d4 100644
--- a/code/modules/projectiles/projectile/bullets/smg.dm
+++ b/code/modules/projectiles/projectile/bullets/smg.dm
@@ -1,3 +1,9 @@
+// 5.7x39mm (Asp and Sidewinder)
+
+/obj/projectile/bullet/c57x39mm
+ name = "5.7x39mm bullet"
+ damage = 20
+
// 4.6x30mm (WT-550 Automatic Rifle & NT-SVG)
/obj/projectile/bullet/c46x30mm
diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm
index b398731cfd6c3..d957ad9245727 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/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm
index 0680c62279fdc..ede0e69b3ea9e 100644
--- a/code/modules/projectiles/projectile/special/rocket.dm
+++ b/code/modules/projectiles/projectile/special/rocket.dm
@@ -38,10 +38,7 @@
/obj/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0)
..()
- if(!isliving(target)) //if the target isn't alive, so is a wall or something
- explosion(target, 0, 1, 2, 4)
- else
- explosion(target, 0, 0, 2, 4)
+ explosion(target, 0, 1, 2, 4)
return BULLET_ACT_HIT
/obj/projectile/bullet/a84mm_br
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index b59f4358c76a6..ad27b15207a81 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1374,26 +1374,18 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(1 to 5)
M.Dizzy(10)
M.set_drugginess(30)
- if(prob(10))
- M.emote(pick("twitch","giggle"))
if(5 to 10)
M.Jitter(20)
M.Dizzy(20)
M.set_drugginess(45)
- if(prob(20))
- M.emote(pick("twitch","giggle"))
if (10 to 200)
M.Jitter(40)
M.Dizzy(40)
M.set_drugginess(60)
- if(prob(30))
- M.emote(pick("twitch","giggle"))
if(200 to INFINITY)
M.Jitter(60)
M.Dizzy(60)
M.set_drugginess(75)
- if(prob(40))
- M.emote(pick("twitch","giggle"))
if(prob(30))
M.adjustToxLoss(2, 0)
. = 1
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index b776a285b3466..a62dfc53b63bb 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -21,8 +21,6 @@
if(!HAS_TRAIT(M, TRAIT_IMMOBILIZED))
if(prob(10))
step(M, pick(GLOB.cardinals))
- if(prob(7))
- M.emote(pick("twitch","drool","moan","giggle"))
..()
/datum/reagent/drug/space_drugs/overdose_start(mob/living/M)
@@ -166,7 +164,7 @@
/datum/reagent/drug/methamphetamine
name = "Methamphetamine"
- description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
+ description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will become dizzy, lose motor control and eventually suffer heavy toxin damage."
reagent_state = LIQUID
color = "#FAFAFA"
overdose_threshold = 20
@@ -194,8 +192,6 @@
M.adjustStaminaLoss(-2, 0)
M.Jitter(2)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1,4))
- if(prob(5))
- M.emote(pick("twitch", "shiver"))
..()
. = 1
@@ -203,8 +199,6 @@
if(!HAS_TRAIT(M, TRAIT_IMMOBILIZED) && !ismovable(M.loc))
for(var/i in 1 to 4)
step(M, pick(GLOB.cardinals))
- if(prob(20))
- M.emote("laugh")
if(prob(33))
M.visible_message("[M]'s hands flip out and flail everywhere!")
M.drop_all_held_items()
@@ -215,15 +209,11 @@
/datum/reagent/drug/methamphetamine/addiction_act_stage1(mob/living/M)
M.Jitter(5)
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage2(mob/living/M)
M.Jitter(10)
M.Dizzy(10)
- if(prob(30))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage3(mob/living/M)
@@ -232,8 +222,6 @@
step(M, pick(GLOB.cardinals))
M.Jitter(15)
M.Dizzy(15)
- if(prob(40))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage4(mob/living/carbon/human/M)
@@ -243,8 +231,6 @@
M.Jitter(20)
M.Dizzy(20)
M.adjustToxLoss(5, 0)
- if(prob(50))
- M.emote(pick("twitch","drool","moan"))
..()
. = 1
@@ -293,8 +279,6 @@
if(!HAS_TRAIT(M, TRAIT_IMMOBILIZED) && !ismovable(M.loc))
for(var/i in 1 to 8)
step(M, pick(GLOB.cardinals))
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
if(prob(33))
M.drop_all_held_items()
..()
@@ -306,8 +290,6 @@
step(M, pick(GLOB.cardinals))
M.Jitter(5)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M)
@@ -318,8 +300,6 @@
M.Jitter(10)
M.Dizzy(10)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(30))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M)
@@ -330,8 +310,6 @@
M.Jitter(15)
M.Dizzy(15)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(40))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M)
@@ -343,8 +321,6 @@
M.Dizzy(50)
M.adjustToxLoss(5, 0)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(50))
- M.emote(pick("twitch","drool","moan"))
..()
. = 1
@@ -398,13 +374,10 @@
var/reaction = rand(1,3)
switch(reaction)
if(1)
- M.emote("laugh")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "happiness_drug", /datum/mood_event/happiness_drug_good_od)
if(2)
- M.emote("sway")
M.Dizzy(25)
if(3)
- M.emote("frown")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "happiness_drug", /datum/mood_event/happiness_drug_bad_od)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5)
..()
@@ -414,32 +387,24 @@
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
mood.setSanity(min(mood.sanity, SANITY_DISTURBED))
M.Jitter(5)
- if(prob(20))
- M.emote(pick("twitch","laugh","frown"))
..()
/datum/reagent/drug/happiness/addiction_act_stage2(mob/living/M)
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
mood.setSanity(min(mood.sanity, SANITY_UNSTABLE))
M.Jitter(10)
- if(prob(30))
- M.emote(pick("twitch","laugh","frown"))
..()
/datum/reagent/drug/happiness/addiction_act_stage3(mob/living/M)
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
mood.setSanity(min(mood.sanity, SANITY_CRAZY))
M.Jitter(15)
- if(prob(40))
- M.emote(pick("twitch","laugh","frown"))
..()
/datum/reagent/drug/happiness/addiction_act_stage4(mob/living/carbon/human/M)
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
mood.setSanity(SANITY_INSANE)
M.Jitter(20)
- if(prob(50))
- M.emote(pick("twitch","laugh","frown"))
..()
. = 1
@@ -477,8 +442,6 @@
M.Jitter(5)
if(prob(5))
M.drop_all_held_items()
- if(prob(15))
- M.emote(pick("twitch","drool"))
if(prob(20))
M.losebreath++
M.adjustStaminaLoss(4, 0)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index b78fd6aa81980..abdaf511691d9 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -339,20 +339,14 @@
if(1 to 5)
M.Dizzy(5)
M.set_drugginess(30)
- if(prob(10))
- M.emote(pick("twitch","giggle"))
if(5 to 10)
M.Jitter(10)
M.Dizzy(10)
M.set_drugginess(35)
- if(prob(20))
- M.emote(pick("twitch","giggle"))
if (10 to INFINITY)
M.Jitter(20)
M.Dizzy(20)
M.set_drugginess(40)
- if(prob(30))
- M.emote(pick("twitch","giggle"))
..()
/datum/reagent/consumable/garlic //NOTE: having garlic in your blood stops vampires from biting you.
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index d42fc60057f11..6460cd423f780 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -259,7 +259,6 @@
M.adjustFireLoss(-reac_volume)
if(show_message)
to_chat(M, "You feel your burns healing! It stings like hell!")
- M.emote("scream")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
..()
@@ -313,7 +312,6 @@
M.adjustBruteLoss(-reac_volume)
if(show_message)
to_chat(M, "You feel your bruises healing! It stings like hell!")
- M.emote("scream")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
..()
@@ -1539,7 +1537,6 @@
M.losebreath++
if(prob(20))
to_chat(M, "You have a sudden fit!")
- M.emote("moan")
M.Paralyze(20) // you should be in a bad spot at this point unless epipen has been used
if(81)
to_chat(M, "You feel too exhausted to continue!") // at this point you will eventually die unless you get charcoal
@@ -1751,7 +1748,6 @@
M.adjustFireLoss(reac_volume)
if(show_message)
to_chat(M, "You feel your skin bubble and burn as your flesh knits itself together!")
- M.emote("scream")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
..()
@@ -1786,7 +1782,6 @@
M.adjustBruteLoss(reac_volume)
if(show_message)
to_chat(M, "You feel your flesh tear as your skin rapidly regenerates!")
- M.emote("scream")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
..()
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index fdfeeb1cda9cc..56d248e1d4477 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -516,12 +516,6 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
taste_description = "bitterness"
-/datum/reagent/serotrotium/on_mob_life(mob/living/carbon/M)
- if(ishuman(M))
- if(prob(7))
- M.emote(pick("twitch","drool","moan","gasp"))
- ..()
-
/datum/reagent/oxygen
name = "Oxygen"
description = "A colorless, odorless gas. Grows on trees but is still pretty valuable."
@@ -597,8 +591,6 @@
/datum/reagent/mercury/on_mob_life(mob/living/carbon/M)
if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && !isspaceturf(M.loc))
step(M, pick(GLOB.cardinals))
- if(prob(5))
- M.emote(pick("twitch","drool","moan"))
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
..()
@@ -762,8 +754,6 @@
/datum/reagent/lithium/on_mob_life(mob/living/carbon/M)
if(!HAS_TRAIT(M, TRAIT_IMMOBILIZED) && !isspaceturf(M.loc))
step(M, pick(GLOB.cardinals))
- if(prob(5))
- M.emote(pick("twitch","drool","moan"))
..()
/datum/reagent/lithium/dip_object(obj/item/I, mob/user, obj/item/reagent_containers/H)
@@ -1036,8 +1026,6 @@
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2*REM)
if(prob(50))
M.drowsyness = max(M.drowsyness, 3)
- if(prob(10))
- M.emote("drool")
..()
/datum/reagent/nanomachines
diff --git a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm
index be5e2ce35f9a5..9f907a33b022a 100644
--- a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm
@@ -35,7 +35,6 @@
M.Jitter(3 * reac_volume)
M.Dizzy(2 * reac_volume)
M.set_drugginess(3 * reac_volume)
- M.emote(pick("twitch","giggle"))
return ..()
/datum/reagent/consumable/ethanol/trickwine/ice_wine
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index 5f79bbbf12e5d..fdfe0f7f73413 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/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index c444336adde54..2a8f390e9e368 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -258,13 +258,13 @@
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-/datum/design/stechkinammo
- name = "Stechkin magazine (10mm)"
- desc = "A single stack Stechkin magazine, designed to chamber 10mm and fit into the Syndicate's Stechkin sidearms."
- id = "stechkinammo"
+/datum/design/ringneckammo
+ name = "Ringneck magazine (10mm)"
+ desc = "A single stack Ringneck magazine, designed to chamber 10mm and fit into Scarborough Arm's Ringneck series of sidearms."
+ id = "ringneckammo"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 15000)
- build_path = /obj/item/ammo_box/magazine/m10mm
+ build_path = /obj/item/ammo_box/magazine/m10mm_ringneck
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 31a7c508eecd8..5ad8c1915c970 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -19,7 +19,7 @@
// Security Stuff
"sec_rshot", "sec_beanbag_slug", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "buckshot_shell", "beanbag_slug", "rubber_shot",
//Handgun Ammo (Security)
- "commanderammo", "stechkinammo", "candorammo", "m9cammo", "c9mm", "c10mm", "c45", "c556mmHITP", "rubbershot9mm", "rubbershot10mm", "rubbershot45", "rubbershot556mmHITP",
+ "commanderammo", "ringneckammo", "candorammo", "m9cammo", "c9mm", "c10mm", "c45", "c556mmHITP", "rubbershot9mm", "rubbershot10mm", "rubbershot45", "rubbershot556mmHITP",
// Construction Materials
"rglass", "plasteel", "plastitanium", "plasmaglass", "plasmareinforcedglass", "titaniumglass", "plastitaniumglass",
// You People Are Animals
@@ -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 7a26946f0ddc4..e9ca8f3d40939 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/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index f4d68520c8798..6cb9f73045854 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -291,6 +291,7 @@ All ShuttleMove procs go here
/************************************Item move procs************************************/
+
/obj/item/storage/pod/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation)
. = ..()
// If the pod was launched, the storage will always open. The reserved_level check
@@ -299,6 +300,11 @@ All ShuttleMove procs go here
if (oldT && !is_reserved_level(oldT))
unlocked = TRUE
+/obj/item/gun/lateShuttleMove(turf/oldT, list/movement_force, move_dir)
+ . = ..()
+ if(prob(GUN_NO_SAFETY_MALFUNCTION_CHANCE_MEDIUM))
+ discharge("is thrown around by the force of the take off")
+
/************************************Mob move procs************************************/
/mob/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock, list/obj/docking_port/mobile/towed_shuttles)
diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm
index d1f0c920dac8a..633aa8dc4f25c 100644
--- a/code/modules/spells/spell_types/rightandwrong.dm
+++ b/code/modules/spells/spell_types/rightandwrong.dm
@@ -9,12 +9,12 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/energy/e_gun,
/obj/item/gun/energy/e_gun/advtaser,
/obj/item/gun/energy/laser,
- /obj/item/gun/ballistic/revolver/syndicate,
+ /obj/item/gun/ballistic/revolver/viper,
/obj/item/gun/ballistic/revolver/detective,
/obj/item/gun/ballistic/automatic/pistol/deagle/camo,
/obj/item/gun/ballistic/automatic/gyropistol,
/obj/item/gun/energy/pulse,
- /obj/item/gun/ballistic/automatic/pistol/syndicate,
+ /obj/item/gun/ballistic/automatic/pistol/ringneck,
/obj/item/gun/ballistic/shotgun/doublebarrel,
/obj/item/gun/ballistic/shotgun,
/obj/item/gun/ballistic/shotgun/automatic/combat,
@@ -26,9 +26,9 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/energy/kinetic_accelerator/crossbow/large,
/obj/item/gun/energy/e_gun/nuclear,
/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/proto,
- /obj/item/gun/ballistic/automatic/smg/c20r,
- /obj/item/gun/ballistic/automatic/hmg/l6_saw,
- /obj/item/gun/ballistic/automatic/smg/m90,
+ /obj/item/gun/ballistic/automatic/smg/cobra,
+ /obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended,
+ /obj/item/gun/ballistic/automatic/assault/hydra,
/obj/item/gun/energy/alien,
/obj/item/gun/energy/e_gun/dragnet,
/obj/item/gun/energy/e_gun/turret,
@@ -39,10 +39,10 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/energy/plasmacutter/adv,
/obj/item/gun/energy/wormhole_projector,
/obj/item/gun/ballistic/automatic/smg/wt550,
- /obj/item/gun/ballistic/shotgun/bulldog,
+ /obj/item/gun/ballistic/shotgun/automatic/bulldog,
/obj/item/gun/ballistic/revolver/grenadelauncher,
/obj/item/gun/ballistic/revolver/golden,
- /obj/item/gun/ballistic/automatic/marksman/sniper_rifle,
+ /obj/item/gun/ballistic/automatic/marksman/taipan,
/obj/item/gun/ballistic/rocketlauncher,
/obj/item/gun/medbeam,
/obj/item/gun/energy/laser/scatter,
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 4b4e10edd7ac9..8651725e34f1b 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -130,6 +130,10 @@
#include "ship_outpost_placement.dm"
#endif //SHIP_PLACEMENT_TEST
+#ifdef THE_TEST_THAT_FAILS
+#include "fail_test.dm"
+#endif
+
#include "unit_test.dm"
#undef TEST_ASSERT
diff --git a/code/modules/unit_tests/fail_test.dm b/code/modules/unit_tests/fail_test.dm
new file mode 100644
index 0000000000000..233517a930814
--- /dev/null
+++ b/code/modules/unit_tests/fail_test.dm
@@ -0,0 +1,3 @@
+/datum/unit_test/fail_test/Run()
+ if(prob(50))
+ TEST_FAIL("This fails half of the time i think.")
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index ce89f62761db0..d26226e3ea837 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -325,7 +325,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "84mm Rocket Propelled Grenade Launcher"
desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \
Guaranteed to send your target out with a bang or your money back!"
- item = /obj/item/gun/ballistic/rocketlauncher
+ item = /obj/item/gun/ballistic/rocketlauncher/mako
cost = 8
surplus = 30
include_modes = list(/datum/game_mode/nuclear)
@@ -387,7 +387,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Bulldog Shotgun"
desc = "A fully-loaded semi-automatic drum-fed shotgun. Compatible with all 12g rounds. Designed for close \
quarter anti-personnel engagements."
- item = /obj/item/gun/ballistic/shotgun/bulldog
+ item = /obj/item/gun/ballistic/shotgun/automatic/bulldog
cost = 8
surplus = 40
include_modes = list(/datum/game_mode/nuclear)
@@ -396,7 +396,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "C-20r Submachine Gun"
desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \
24-round magazine and is compatible with suppressors."
- item = /obj/item/gun/ballistic/automatic/smg/c20r
+ item = /obj/item/gun/ballistic/automatic/smg/cobra
cost = 10
surplus = 40
include_modes = list(/datum/game_mode/nuclear)
@@ -459,7 +459,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "L6 Squad Automatic Weapon"
desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \
This deadly weapon has a massive 50-round magazine of devastating 7.12x82mm ammunition."
- item = /obj/item/gun/ballistic/automatic/hmg/l6_saw
+ item = /obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended
cost = 18
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
@@ -468,7 +468,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "M-90gl Carbine"
desc = "A fully-loaded, specialized three-round burst carbine that fires 5.56mm ammunition from a 30 round magazine \
with a toggleable 40mm underbarrel grenade launcher."
- item = /obj/item/gun/ballistic/automatic/smg/m90
+ item = /obj/item/gun/ballistic/automatic/assault/hydra
cost = 18
surplus = 50
include_modes = list(/datum/game_mode/nuclear)
@@ -485,7 +485,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/sniper
name = "Sniper Rifle"
desc = "Ranged fury, Syndicate style. Guaranteed to cause shock and awe or your TC back!"
- item = /obj/item/gun/ballistic/automatic/marksman/sniper_rifle
+ item = /obj/item/gun/ballistic/automatic/marksman/taipan
cost = 16
surplus = 25
include_modes = list(/datum/game_mode/nuclear)
@@ -494,7 +494,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Stechkin Pistol"
desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \
with suppressors."
- item = /obj/item/gun/ballistic/automatic/pistol/syndicate
+ item = /obj/item/gun/ballistic/automatic/pistol/ringneck
cost = 7
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -508,7 +508,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/revolver
name = "Syndicate Revolver"
desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
- item = /obj/item/gun/ballistic/revolver/syndicate
+ item = /obj/item/gun/ballistic/revolver/viper
cost = 13
surplus = 50
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -516,7 +516,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous/foamsmg
name = "Toy Submachine Gun"
desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine."
- item = /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot
+ item = /obj/item/gun/ballistic/automatic/toy
cost = 5
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
@@ -525,7 +525,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Toy Machine Gun"
desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \
riot grade darts, that can briefly incapacitate someone in just one volley."
- item = /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot
+ item = /obj/item/gun/ballistic/automatic/toy
cost = 10
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
@@ -565,28 +565,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 5
limited_stock = 1
-/datum/uplink_item/dangerous/tec9
- name = "TEC9 Machine Pistol"
- desc = "A powerful machine pistol sporting a high rate of fire and armor-piercing rounds."
- item = /obj/item/gun/ballistic/automatic/pistol/tec9
- cost = 12
- surplus = 20
-
-/datum/uplink_item/dangerous/ebr
- name = "M514 EBR"
- desc = "A cheap rifle with high stopping power and low capacity."
- item = /obj/item/gun/ballistic/automatic/marksman/ebr
- cost = 8
- surplus = 20
- include_modes = list(/datum/game_mode/nuclear)
-
// Stealthy Weapons
/datum/uplink_item/stealthy_weapons
category = "Stealthy Weapons"
/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
@@ -726,7 +711,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/ammo/pistol
name = "10mm Handgun Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol."
- item = /obj/item/ammo_box/magazine/m10mm
+ item = /obj/item/ammo_box/magazine/m10mm_ringneck
cost = 1
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -734,7 +719,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "10mm Armour Piercing Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \
These rounds are less effective at injuring the target but penetrate protective gear."
- item = /obj/item/ammo_box/magazine/m10mm/ap
+ item = /obj/item/ammo_box/magazine/m10mm_ringneck
cost = 2
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -742,7 +727,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "10mm Hollow Point Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \
These rounds are more damaging but ineffective against armour."
- item = /obj/item/ammo_box/magazine/m10mm/hp
+ item = /obj/item/ammo_box/magazine/m10mm_ringneck
cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -750,7 +735,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "10mm Incendiary Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \
Loaded with incendiary rounds which inflict little damage, but ignite the target."
- item = /obj/item/ammo_box/magazine/m10mm/inc
+ item = /obj/item/ammo_box/magazine/m10mm_ringneck
cost = 2
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -767,13 +752,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/ammo/shotgun/buck
name = "12g Buckshot Drum"
desc = "An additional 8-round buckshot magazine for use with the Bulldog shotgun. Front towards enemy."
- item = /obj/item/ammo_box/magazine/m12g
+ item = /obj/item/ammo_box/magazine/m12g_bulldog/drum
/datum/uplink_item/ammo/shotgun/dragon
name = "12g Dragon's Breath Drum"
desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. \
'I'm a fire starter, twisted fire starter!'"
- item = /obj/item/ammo_box/magazine/m12g/dragon
+ item = /obj/item/ammo_box/magazine/m12g_bulldog/drum/dragon
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/shotgun/meteor
@@ -782,7 +767,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
An alternative 8-round meteorslug magazine for use in the Bulldog shotgun.
Great for blasting airlocks off their frames and knocking down enemies.
"}
- item = /obj/item/ammo_box/magazine/m12g/meteor
+ item = /obj/item/ammo_box/magazine/m12g_bulldog/drum/meteor
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/shotgun/slug
@@ -790,7 +775,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \
Now 8 times less likely to shoot your pals."
cost = 3
- item = /obj/item/ammo_box/magazine/m12g/slug
+ item = /obj/item/ammo_box/magazine/m12g_bulldog/drum/slug
/datum/uplink_item/ammo/revolver
name = ".357 Speed Loader"
@@ -819,7 +804,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/ammo/smg
name = ".45 SMG Magazine"
desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun."
- item = /obj/item/ammo_box/magazine/smgm45
+ item = /obj/item/ammo_box/magazine/m45_cobra
cost = 3
include_modes = list(/datum/game_mode/nuclear)
@@ -849,7 +834,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "5.56mm Toploader Magazine"
desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl carbine. \
These bullets pack less punch than 7.12x82mm rounds, but they still offer more power than .45 ammo."
- item = /obj/item/ammo_box/magazine/m556
+ item = /obj/item/ammo_box/magazine/m556_42_hydra
cost = 4
include_modes = list(/datum/game_mode/nuclear)
@@ -858,38 +843,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
-/datum/uplink_item/ammo/machinegun/basic
- name = "7.12x82mm Box Magazine"
- desc = "A 50-round magazine of 7.12x82mm ammunition for use with the L6 SAW. \
- By the time you need to use this, you'll already be standing on a pile of corpses."
- item = /obj/item/ammo_box/magazine/mm712x82
-
-/datum/uplink_item/ammo/machinegun/ap
- name = "7.12x82mm (Armor Penetrating) Box Magazine"
- desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; equipped with special properties \
- to puncture even the most durable armor."
- item = /obj/item/ammo_box/magazine/mm712x82/ap
- cost = 9
-
-/datum/uplink_item/ammo/machinegun/hollow
- name = "7.12x82mm (hollow point) Box Magazine"
- desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; equipped with hollow point tips to help \
- with the unarmored masses of crew."
- item = /obj/item/ammo_box/magazine/mm712x82/hollow
-
-/datum/uplink_item/ammo/machinegun/incen
- name = "7.12x82mm (Incendiary) Box Magazine"
- desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; tipped with a special flammable \
- mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn."
- item = /obj/item/ammo_box/magazine/mm712x82/inc
-
-/datum/uplink_item/ammo/machinegun/match
- name = "7.12x82mm (Match) Box Magazine"
- desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; you didn't know there was a demand for match grade \
- precision bullet hose ammo, but these rounds are finely tuned and perfect for ricocheting off walls all fancy-like."
- item = /obj/item/ammo_box/magazine/mm712x82/match
- cost = 10
-
/datum/uplink_item/ammo/rocket
include_modes = list(/datum/game_mode/nuclear)
@@ -909,7 +862,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/ammo/pistolaps
name = "9mm Handgun Magazine"
desc = "An additional 15-round 9mm magazine, compatible with the Stechkin APS pistol, found in the Spetsnaz Pyro bundle."
- item = /obj/item/ammo_box/magazine/pistolm9mm
+ item = /obj/item/ammo_box/magazine/m9mm_rattlesnake
cost = 2
include_modes = list(/datum/game_mode/nuclear)
@@ -953,14 +906,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/ammo/tec9
name = "TEC9 Magazine"
desc = "An additional 20 round 9mm magazine for the TEC9."
- item = /obj/item/ammo_box/magazine/tec9
+ item = /obj/item/ammo_box/magazine/m9mm_rattlesnake
cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/ammo/ebr
name = "M2514 EBR Magazine"
desc = "An additional 10 round .308 magazine for the EBR."
- item = /obj/item/ammo_box/magazine/ebr
+ item = /obj/item/ammo_box/magazine/m556_42_hydra/small
cost = 2
include_modes = list(/datum/game_mode/nuclear)
diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm
index 911a190703f44..06069e4db7640 100644
--- a/code/modules/vending/liberation_toy.dm
+++ b/code/modules/vending/liberation_toy.dm
@@ -17,8 +17,6 @@
/obj/item/clothing/head/syndicatefake = 5) //OPS IN DORMS oh wait it's just an assistant
contraband = list(
/obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting!
- /obj/item/gun/ballistic/automatic/smg/c20r/toy = 10,
- /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 10,
/obj/item/ammo_box/foambox/riot = 20,
/obj/item/toy/katana = 10,
/obj/item/dualsaber/toy = 5,
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index 670904a5735d1..37a51b27bb89e 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -119,20 +119,20 @@
/obj/item/restraints/handcuffs = 3,
/obj/item/assembly/flash/handheld = 2,
/obj/item/flashlight/seclite = 2,
- /obj/item/ammo_box/magazine/m10mm = 3,
- /obj/item/ammo_box/magazine/smgm45 = 3,
+ /obj/item/ammo_box/magazine/m10mm_ringneck = 3,
+ /obj/item/ammo_box/magazine/m45_cobra = 3,
/obj/item/ammo_box/magazine/sniper_rounds = 3,
- /obj/item/ammo_box/magazine/m556 = 2,
- /obj/item/ammo_box/magazine/m12g = 3,
- /obj/item/ammo_box/magazine/ebr = 5,
+ /obj/item/ammo_box/magazine/m556_42_hydra = 2,
+ /obj/item/ammo_box/magazine/m12g_bulldog/drum = 3,
+ /obj/item/ammo_box/magazine/m556_42_hydra/small = 5,
/obj/item/grenade/c4 = 1,
/obj/item/grenade/frag = 1,
)
voucher_items = list(
- "M-90gl Carbine" = /obj/item/gun/ballistic/automatic/smg/m90,
- "sniper rifle" = /obj/item/gun/ballistic/automatic/marksman/sniper_rifle,
- "C-20r SMG" = /obj/item/gun/ballistic/automatic/smg/c20r,
- "Bulldog Shotgun" = /obj/item/gun/ballistic/shotgun/bulldog)
+ "M-90gl Carbine" = /obj/item/gun/ballistic/automatic/assault/hydra,
+ "sniper rifle" = /obj/item/gun/ballistic/automatic/marksman/taipan,
+ "C-20r SMG" = /obj/item/gun/ballistic/automatic/smg/cobra,
+ "Bulldog Shotgun" = /obj/item/gun/ballistic/shotgun/automatic/bulldog)
/obj/machinery/vending/security/marine/nanotrasen
icon_state = "nt-marine"
diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm
index a5092cf7373fe..08af917aa86ac 100644
--- a/code/modules/vending/toys.dm
+++ b/code/modules/vending/toys.dm
@@ -18,8 +18,6 @@
/obj/item/clothing/suit/syndicatefake = 5,
/obj/item/clothing/head/syndicatefake = 5,
/obj/item/gun/ballistic/shotgun/toy/crossbow = 10,
- /obj/item/gun/ballistic/automatic/smg/c20r/toy = 5,
- /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 5,
/obj/item/toy/katana = 10,
/obj/item/dualsaber/toy = 5)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
diff --git a/html/changelogs/AutoChangeLog-pr-3312.yml b/html/changelogs/AutoChangeLog-pr-3312.yml
new file mode 100644
index 0000000000000..287478974fbfe
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3312.yml
@@ -0,0 +1,5 @@
+author: Gristlebee
+changes:
+ - {rscadd: Unsaftied guns can go off on their own.}
+ - {code_imp: Changes ammo casing firing code so it's able to work without a user.}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3355.yml b/html/changelogs/AutoChangeLog-pr-3355.yml
new file mode 100644
index 0000000000000..d0f89b671aaa1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3355.yml
@@ -0,0 +1,4 @@
+author: Zevotech
+changes:
+ - {bugfix: Certain Subshuttle engine prechargers have now been correctly rotated.}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3356.yml b/html/changelogs/AutoChangeLog-pr-3356.yml
new file mode 100644
index 0000000000000..35b9605de5a64
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3356.yml
@@ -0,0 +1,4 @@
+author: FalloutFalcon
+changes:
+ - {rscdel: Removed useless vars}
+delete-after: true
diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml
new file mode 100644
index 0000000000000..26c6706451e23
--- /dev/null
+++ b/html/changelogs/archive/2024-09.yml
@@ -0,0 +1,92 @@
+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.
+2024-09-13:
+ retlaw34, rye-rice, Apogee-dev, generalthrax, Tamamitsune, Nitha(emotional support):
+ - rscadd: Scarborough Arms for every syndicate faction
+ - rscadd: New sounds for the commander
+ - balance: scout's price has been reduced slightly
+ - rscdel: Donksoft toy guns
+ - bugfix: You can no longer attach shit to revolvers
+2024-09-14:
+ FalloutFalcon:
+ - bugfix: no emergency for floor lights untill someone adds a sprite for them!
+ Gristlebee:
+ - rscadd: Adds binocs, lavaproof rods, gps, deep core mining scanner, anomaly neutralizer
+ to exploration cargo
+ - rscadd: You can hit veins with a deep core scanner on harm intent to stop it tracking,
+ and hit it again to readd it.
+ - rscadd: Deep core scanner fits in explorer webbing and explorer suits.
+ - balance: Outpost Cargo exploration tab
+ MemeSnorfer:
+ - rscdel: Removed forced emotes from most reagents.
+ ToasterBiome:
+ - bugfix: Centcom Ban DB is now accessible again through PP
diff --git a/html/font-awesome/README.MD b/html/font-awesome/README.MD
index 7d693c36f031d..ba9121311d401 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 5c44079840311..7a283f087ca9d 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 9316727d18d37..2f6252b52a144 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 d62be2fad885f..0000000000000
Binary files a/html/font-awesome/webfonts/fa-regular-400.eot and /dev/null differ
diff --git a/html/font-awesome/webfonts/fa-regular-400.ttf b/html/font-awesome/webfonts/fa-regular-400.ttf
new file mode 100644
index 0000000000000..c5ac00957778d
Binary files /dev/null and b/html/font-awesome/webfonts/fa-regular-400.ttf differ
diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff
deleted file mode 100644
index 43b1a9ae49db0..0000000000000
Binary files a/html/font-awesome/webfonts/fa-regular-400.woff and /dev/null differ
diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot
deleted file mode 100644
index c77baa8d46ab4..0000000000000
Binary files a/html/font-awesome/webfonts/fa-solid-900.eot and /dev/null differ
diff --git a/html/font-awesome/webfonts/fa-solid-900.ttf b/html/font-awesome/webfonts/fa-solid-900.ttf
new file mode 100644
index 0000000000000..43ba1cc7d94f6
Binary files /dev/null and b/html/font-awesome/webfonts/fa-solid-900.ttf differ
diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff
deleted file mode 100644
index 77c1786227f53..0000000000000
Binary files a/html/font-awesome/webfonts/fa-solid-900.woff and /dev/null differ
diff --git a/html/font-awesome/webfonts/fa-v4compatibility.ttf b/html/font-awesome/webfonts/fa-v4compatibility.ttf
new file mode 100644
index 0000000000000..243bc25bd5ee1
Binary files /dev/null and b/html/font-awesome/webfonts/fa-v4compatibility.ttf differ
diff --git a/icons/effects/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/ammo.dmi b/icons/obj/ammo.dmi
index 0a8910ae02bd5..403b198c179bc 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/guns/manufacturer/hunterspride/48x32.dmi b/icons/obj/guns/manufacturer/hunterspride/48x32.dmi
index cdff0b09ea6e3..70bbef00e1af1 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 4fb5eca5c0116..6471cef8b5ebd 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 8911c8fbb68f4..361899e3c5235 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 043167735662d..fbf4f7cf3fbf8 100644
Binary files a/icons/obj/guns/manufacturer/hunterspride/righthand.dmi and b/icons/obj/guns/manufacturer/hunterspride/righthand.dmi differ
diff --git a/icons/obj/guns/manufacturer/scarborough/48x32.dmi b/icons/obj/guns/manufacturer/scarborough/48x32.dmi
index 361448b49a359..87d4d44caeb18 100644
Binary files a/icons/obj/guns/manufacturer/scarborough/48x32.dmi and b/icons/obj/guns/manufacturer/scarborough/48x32.dmi differ
diff --git a/icons/obj/guns/manufacturer/scarborough/lefthand.dmi b/icons/obj/guns/manufacturer/scarborough/lefthand.dmi
index 8d184d907db63..50cf4e8f04702 100644
Binary files a/icons/obj/guns/manufacturer/scarborough/lefthand.dmi and b/icons/obj/guns/manufacturer/scarborough/lefthand.dmi differ
diff --git a/icons/obj/guns/manufacturer/scarborough/onmob.dmi b/icons/obj/guns/manufacturer/scarborough/onmob.dmi
index 5127ecfed566b..bc0e8e0d7c620 100644
Binary files a/icons/obj/guns/manufacturer/scarborough/onmob.dmi and b/icons/obj/guns/manufacturer/scarborough/onmob.dmi differ
diff --git a/icons/obj/guns/manufacturer/scarborough/righthand.dmi b/icons/obj/guns/manufacturer/scarborough/righthand.dmi
index 5dbfb0acfc252..bfa740f26549e 100644
Binary files a/icons/obj/guns/manufacturer/scarborough/righthand.dmi and b/icons/obj/guns/manufacturer/scarborough/righthand.dmi differ
diff --git a/icons/obj/guns/manufacturer/toys/48x32.dmi b/icons/obj/guns/manufacturer/toys/48x32.dmi
new file mode 100644
index 0000000000000..80ddcbad3c509
Binary files /dev/null and b/icons/obj/guns/manufacturer/toys/48x32.dmi differ
diff --git a/icons/obj/guns/manufacturer/toys/lefthand.dmi b/icons/obj/guns/manufacturer/toys/lefthand.dmi
new file mode 100644
index 0000000000000..097eda46280ec
Binary files /dev/null and b/icons/obj/guns/manufacturer/toys/lefthand.dmi differ
diff --git a/icons/obj/guns/manufacturer/toys/onmob.dmi b/icons/obj/guns/manufacturer/toys/onmob.dmi
new file mode 100644
index 0000000000000..4a5a4ba7b32a4
Binary files /dev/null and b/icons/obj/guns/manufacturer/toys/onmob.dmi differ
diff --git a/icons/obj/guns/manufacturer/toys/righthand.dmi b/icons/obj/guns/manufacturer/toys/righthand.dmi
new file mode 100644
index 0000000000000..0a9759f4eea18
Binary files /dev/null and b/icons/obj/guns/manufacturer/toys/righthand.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index ab051d8a21bbe..13ee4f9bfb1f8 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 0894fa0a466a1..2b95535dcb7b1 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/shiptest.dme b/shiptest.dme
index 55ad11a800d56..3e17763008730 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -43,6 +43,7 @@
#include "code\__DEFINES\chat.dm"
#include "code\__DEFINES\cinematics.dm"
#include "code\__DEFINES\cleaning.dm"
+#include "code\__DEFINES\clothing.dm"
#include "code\__DEFINES\colors.dm"
#include "code\__DEFINES\combat.dm"
#include "code\__DEFINES\configuration.dm"
@@ -168,6 +169,7 @@
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_clothing.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_food.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_grenade.dm"
+#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_hydroponic.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_implant.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_item\signals_item.dm"
#include "code\__DEFINES\dcs\signals\signals_obj\signals_machine\signals_aquarium.dm"
@@ -339,6 +341,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"
@@ -571,7 +574,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"
@@ -669,6 +671,7 @@
#include "code\datums\elements\lazy_fishing_spot.dm"
#include "code\datums\elements\light_blocking.dm"
#include "code\datums\elements\mobappearance.dm"
+#include "code\datums\elements\plant_backfire.dm"
#include "code\datums\elements\renamemob.dm"
#include "code\datums\elements\selfknockback.dm"
#include "code\datums\elements\snail_crawl.dm"
@@ -734,7 +737,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"
@@ -934,7 +936,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"
@@ -1497,6 +1498,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"
@@ -2156,6 +2158,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"
@@ -2251,6 +2254,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"
@@ -3052,7 +3057,6 @@
#include "code\modules\projectiles\boxes_magazines\generic_ammo_box.dm"
#include "code\modules\projectiles\boxes_magazines\external\gauss.dm"
#include "code\modules\projectiles\boxes_magazines\external\grenade.dm"
-#include "code\modules\projectiles\boxes_magazines\external\lmg.dm"
#include "code\modules\projectiles\boxes_magazines\external\pistol.dm"
#include "code\modules\projectiles\boxes_magazines\external\rechargable.dm"
#include "code\modules\projectiles\boxes_magazines\external\rifle.dm"
@@ -3099,6 +3103,7 @@
#include "code\modules\projectiles\guns\manufacturer\clip_lanchester\lasers.dm"
#include "code\modules\projectiles\guns\manufacturer\etherbor\energy_gunsword.dm"
#include "code\modules\projectiles\guns\manufacturer\frontier_import\ballistics.dm"
+#include "code\modules\projectiles\guns\manufacturer\scarborough\ballistics.dm"
#include "code\modules\projectiles\guns\misc\beam_rifle.dm"
#include "code\modules\projectiles\guns\misc\blastcannon.dm"
#include "code\modules\projectiles\guns\misc\bow.dm"
diff --git a/sound/weapons/gun/l6/shot_old.ogg b/sound/weapons/gun/l6/shot_old.ogg
deleted file mode 100644
index e6c1a9abe9580..0000000000000
Binary files a/sound/weapons/gun/l6/shot_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/pistol/asp.ogg b/sound/weapons/gun/pistol/asp.ogg
new file mode 100644
index 0000000000000..ca7edcb67c8ee
Binary files /dev/null and b/sound/weapons/gun/pistol/asp.ogg differ
diff --git a/sound/weapons/gun/pistol/rattlesnake.ogg b/sound/weapons/gun/pistol/rattlesnake.ogg
new file mode 100644
index 0000000000000..34e0412f823d0
Binary files /dev/null and b/sound/weapons/gun/pistol/rattlesnake.ogg differ
diff --git a/sound/weapons/gun/pistol/shot_alt_old.ogg b/sound/weapons/gun/pistol/shot_alt_old.ogg
deleted file mode 100644
index 583c3f36034d3..0000000000000
Binary files a/sound/weapons/gun/pistol/shot_alt_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/pistol/shot_old.ogg b/sound/weapons/gun/pistol/shot_old.ogg
deleted file mode 100644
index fcf8ad62346b9..0000000000000
Binary files a/sound/weapons/gun/pistol/shot_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/revolver/shot.ogg b/sound/weapons/gun/revolver/shot.ogg
index d02d1c750c24d..91e480bd152ac 100644
Binary files a/sound/weapons/gun/revolver/shot.ogg and b/sound/weapons/gun/revolver/shot.ogg differ
diff --git a/sound/weapons/gun/revolver/shot_alt_old.ogg b/sound/weapons/gun/revolver/shot_alt_old.ogg
deleted file mode 100644
index fcd3b99ff80c8..0000000000000
Binary files a/sound/weapons/gun/revolver/shot_alt_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/revolver/shot_old.ogg b/sound/weapons/gun/revolver/shot_old.ogg
deleted file mode 100644
index 6c574829732ec..0000000000000
Binary files a/sound/weapons/gun/revolver/shot_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/revolver/shot_old_new.ogg b/sound/weapons/gun/revolver/shot_old_new.ogg
deleted file mode 100644
index 91e480bd152ac..0000000000000
Binary files a/sound/weapons/gun/revolver/shot_old_new.ogg and /dev/null differ
diff --git a/sound/weapons/gun/revolver/viper.ogg b/sound/weapons/gun/revolver/viper.ogg
new file mode 100644
index 0000000000000..8132d556869cc
Binary files /dev/null and b/sound/weapons/gun/revolver/viper.ogg differ
diff --git a/sound/weapons/gun/revolver/viper_prime.ogg b/sound/weapons/gun/revolver/viper_prime.ogg
new file mode 100644
index 0000000000000..54ad25134ad82
Binary files /dev/null and b/sound/weapons/gun/revolver/viper_prime.ogg differ
diff --git a/sound/weapons/gun/rifle/hydra.ogg b/sound/weapons/gun/rifle/hydra.ogg
new file mode 100644
index 0000000000000..180a4082cac8d
Binary files /dev/null and b/sound/weapons/gun/rifle/hydra.ogg differ
diff --git a/sound/weapons/gun/rifle/shot_old.ogg b/sound/weapons/gun/rifle/shot_old.ogg
deleted file mode 100644
index acdb447ca8fdb..0000000000000
Binary files a/sound/weapons/gun/rifle/shot_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/shotgun/shot_alt_old.ogg b/sound/weapons/gun/shotgun/shot_alt_old.ogg
deleted file mode 100644
index 48bea46d5cb7d..0000000000000
Binary files a/sound/weapons/gun/shotgun/shot_alt_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/shotgun/shot_old.ogg b/sound/weapons/gun/shotgun/shot_old.ogg
deleted file mode 100644
index e999bb9bb7f74..0000000000000
Binary files a/sound/weapons/gun/shotgun/shot_old.ogg and /dev/null differ
diff --git a/sound/weapons/gun/smg/cm5_reload.ogg b/sound/weapons/gun/smg/cm5_reload.ogg
new file mode 100644
index 0000000000000..2a108e9e60ec8
Binary files /dev/null and b/sound/weapons/gun/smg/cm5_reload.ogg differ
diff --git a/sound/weapons/gun/smg/cm5_unload.ogg b/sound/weapons/gun/smg/cm5_unload.ogg
new file mode 100644
index 0000000000000..e4d3ef42db387
Binary files /dev/null and b/sound/weapons/gun/smg/cm5_unload.ogg differ
diff --git a/sound/weapons/gun/smg/cobra.ogg b/sound/weapons/gun/smg/cobra.ogg
new file mode 100644
index 0000000000000..314fce64c4f5d
Binary files /dev/null and b/sound/weapons/gun/smg/cobra.ogg differ
diff --git a/sound/weapons/gun/smg/sidewinder.ogg b/sound/weapons/gun/smg/sidewinder.ogg
new file mode 100644
index 0000000000000..202d9ae5a81d5
Binary files /dev/null and b/sound/weapons/gun/smg/sidewinder.ogg differ
diff --git a/sound/weapons/gun/smg/sidewinder_cocked.ogg b/sound/weapons/gun/smg/sidewinder_cocked.ogg
new file mode 100644
index 0000000000000..d5f7df2fc8677
Binary files /dev/null and b/sound/weapons/gun/smg/sidewinder_cocked.ogg differ
diff --git a/sound/weapons/gun/smg/sidewinder_reload.ogg b/sound/weapons/gun/smg/sidewinder_reload.ogg
new file mode 100644
index 0000000000000..11f8982beedd5
Binary files /dev/null and b/sound/weapons/gun/smg/sidewinder_reload.ogg differ
diff --git a/sound/weapons/gun/smg/sidewinder_unload.ogg b/sound/weapons/gun/smg/sidewinder_unload.ogg
new file mode 100644
index 0000000000000..2d959bc0f42f6
Binary files /dev/null and b/sound/weapons/gun/smg/sidewinder_unload.ogg differ
diff --git a/sound/weapons/gun/sniper/shot_old.ogg b/sound/weapons/gun/sniper/shot_old.ogg
deleted file mode 100644
index 4c23868da15dd..0000000000000
Binary files a/sound/weapons/gun/sniper/shot_old.ogg and /dev/null differ
diff --git a/tgui/package.json b/tgui/package.json
index 2c5059e3626cc..169af0aeafc7d 100644
--- a/tgui/package.json
+++ b/tgui/package.json
@@ -56,7 +56,7 @@
"terser-webpack-plugin": "^5.1.4",
"typescript": "^4.9.4",
"url-loader": "^4.1.1",
- "webpack": "^5.75.0",
+ "webpack": "^5.94.0",
"webpack-bundle-analyzer": "^4.4.2",
"webpack-cli": "^4.7.2"
}
diff --git a/tgui/yarn.lock b/tgui/yarn.lock
index dcda23e174b22..bdf58e1678040 100644
--- a/tgui/yarn.lock
+++ b/tgui/yarn.lock
@@ -1763,6 +1763,17 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/gen-mapping@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "@jridgewell/gen-mapping@npm:0.3.5"
+ dependencies:
+ "@jridgewell/set-array": ^1.2.1
+ "@jridgewell/sourcemap-codec": ^1.4.10
+ "@jridgewell/trace-mapping": ^0.3.24
+ checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52
+ languageName: node
+ linkType: hard
+
"@jridgewell/resolve-uri@npm:3.1.0":
version: 3.1.0
resolution: "@jridgewell/resolve-uri@npm:3.1.0"
@@ -1784,6 +1795,13 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/set-array@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@jridgewell/set-array@npm:1.2.1"
+ checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
+ languageName: node
+ linkType: hard
+
"@jridgewell/source-map@npm:^0.3.2":
version: 0.3.2
resolution: "@jridgewell/source-map@npm:0.3.2"
@@ -1794,6 +1812,16 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/source-map@npm:^0.3.3":
+ version: 0.3.6
+ resolution: "@jridgewell/source-map@npm:0.3.6"
+ dependencies:
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
+ checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30
+ languageName: node
+ linkType: hard
+
"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10":
version: 1.4.14
resolution: "@jridgewell/sourcemap-codec@npm:1.4.14"
@@ -1818,6 +1846,16 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+ version: 0.3.25
+ resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+ dependencies:
+ "@jridgewell/resolve-uri": ^3.1.0
+ "@jridgewell/sourcemap-codec": ^1.4.14
+ checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34
+ languageName: node
+ linkType: hard
+
"@jridgewell/trace-mapping@npm:^0.3.9":
version: 0.3.17
resolution: "@jridgewell/trace-mapping@npm:0.3.17"
@@ -1979,6 +2017,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/estree@npm:^1.0.5":
+ version: 1.0.5
+ resolution: "@types/estree@npm:1.0.5"
+ checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a
+ languageName: node
+ linkType: hard
+
"@types/graceful-fs@npm:^4.1.2":
version: 4.1.5
resolution: "@types/graceful-fs@npm:4.1.5"
@@ -2198,6 +2243,16 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/ast@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/helper-numbers": 1.11.6
+ "@webassemblyjs/helper-wasm-bytecode": 1.11.6
+ checksum: 31bcc64147236bd7b1b6d29d1f419c1f5845c785e1e42dc9e3f8ca2e05a029e9393a271b84f3a5bff2a32d35f51ff59e2181a6e5f953fe88576acd6750506202
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/floating-point-hex-parser@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1"
@@ -2205,6 +2260,13 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/floating-point-hex-parser@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6"
+ checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/helper-api-error@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/helper-api-error@npm:1.11.1"
@@ -2212,6 +2274,13 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/helper-api-error@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/helper-api-error@npm:1.11.6"
+ checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/helper-buffer@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/helper-buffer@npm:1.11.1"
@@ -2219,6 +2288,13 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/helper-buffer@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/helper-buffer@npm:1.12.1"
+ checksum: c3ffb723024130308db608e86e2bdccd4868bbb62dffb0a9a1530606496f79c87f8565bd8e02805ce64912b71f1a70ee5fb00307258b0c082c3abf961d097eca
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/helper-numbers@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/helper-numbers@npm:1.11.1"
@@ -2230,6 +2306,17 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/helper-numbers@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/helper-numbers@npm:1.11.6"
+ dependencies:
+ "@webassemblyjs/floating-point-hex-parser": 1.11.6
+ "@webassemblyjs/helper-api-error": 1.11.6
+ "@xtuc/long": 4.2.2
+ checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1"
@@ -2237,6 +2324,13 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6"
+ checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/helper-wasm-section@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1"
@@ -2249,6 +2343,18 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/helper-wasm-section@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": 1.12.1
+ "@webassemblyjs/helper-buffer": 1.12.1
+ "@webassemblyjs/helper-wasm-bytecode": 1.11.6
+ "@webassemblyjs/wasm-gen": 1.12.1
+ checksum: c19810cdd2c90ff574139b6d8c0dda254d42d168a9e5b3d353d1bc085f1d7164ccd1b3c05592a45a939c47f7e403dc8d03572bb686642f06a3d02932f6f0bc8f
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/ieee754@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/ieee754@npm:1.11.1"
@@ -2258,6 +2364,15 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/ieee754@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/ieee754@npm:1.11.6"
+ dependencies:
+ "@xtuc/ieee754": ^1.2.0
+ checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/leb128@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/leb128@npm:1.11.1"
@@ -2267,6 +2382,15 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/leb128@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/leb128@npm:1.11.6"
+ dependencies:
+ "@xtuc/long": 4.2.2
+ checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/utf8@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/utf8@npm:1.11.1"
@@ -2274,6 +2398,13 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/utf8@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/utf8@npm:1.11.6"
+ checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/wasm-edit@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/wasm-edit@npm:1.11.1"
@@ -2290,6 +2421,22 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/wasm-edit@npm:^1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-edit@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": 1.12.1
+ "@webassemblyjs/helper-buffer": 1.12.1
+ "@webassemblyjs/helper-wasm-bytecode": 1.11.6
+ "@webassemblyjs/helper-wasm-section": 1.12.1
+ "@webassemblyjs/wasm-gen": 1.12.1
+ "@webassemblyjs/wasm-opt": 1.12.1
+ "@webassemblyjs/wasm-parser": 1.12.1
+ "@webassemblyjs/wast-printer": 1.12.1
+ checksum: ae23642303f030af888d30c4ef37b08dfec7eab6851a9575a616e65d1219f880d9223913a39056dd654e49049d76e97555b285d1f7e56935047abf578cce0692
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/wasm-gen@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/wasm-gen@npm:1.11.1"
@@ -2303,6 +2450,19 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/wasm-gen@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-gen@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": 1.12.1
+ "@webassemblyjs/helper-wasm-bytecode": 1.11.6
+ "@webassemblyjs/ieee754": 1.11.6
+ "@webassemblyjs/leb128": 1.11.6
+ "@webassemblyjs/utf8": 1.11.6
+ checksum: 5787626bb7f0b033044471ddd00ce0c9fe1ee4584e8b73e232051e3a4c99ba1a102700d75337151c8b6055bae77eefa4548960c610a5e4a504e356bd872138ff
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/wasm-opt@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/wasm-opt@npm:1.11.1"
@@ -2315,6 +2475,18 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/wasm-opt@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-opt@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": 1.12.1
+ "@webassemblyjs/helper-buffer": 1.12.1
+ "@webassemblyjs/wasm-gen": 1.12.1
+ "@webassemblyjs/wasm-parser": 1.12.1
+ checksum: 0e8fa8a0645304a1e18ff40d3db5a2e9233ebaa169b19fcc651d6fc9fe2cac0ce092ddee927318015ae735d9cd9c5d97c0cafb6a51dcd2932ac73587b62df991
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/wasm-parser@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/wasm-parser@npm:1.11.1"
@@ -2329,6 +2501,20 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-parser@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": 1.12.1
+ "@webassemblyjs/helper-api-error": 1.11.6
+ "@webassemblyjs/helper-wasm-bytecode": 1.11.6
+ "@webassemblyjs/ieee754": 1.11.6
+ "@webassemblyjs/leb128": 1.11.6
+ "@webassemblyjs/utf8": 1.11.6
+ checksum: 176015de3551ac068cd4505d837414f258d9ade7442bd71efb1232fa26c9f6d7d4e11a5c816caeed389943f409af7ebff6899289a992d7a70343cb47009d21a8
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/wast-printer@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/wast-printer@npm:1.11.1"
@@ -2339,6 +2525,16 @@ __metadata:
languageName: node
linkType: hard
+"@webassemblyjs/wast-printer@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wast-printer@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": 1.12.1
+ "@xtuc/long": 4.2.2
+ checksum: 2974b5dda8d769145ba0efd886ea94a601e61fb37114c14f9a9a7606afc23456799af652ac3052f284909bd42edc3665a76bc9b50f95f0794c053a8a1757b713
+ languageName: node
+ linkType: hard
+
"@webpack-cli/configtest@npm:^1.0.4":
version: 1.0.4
resolution: "@webpack-cli/configtest@npm:1.0.4"
@@ -2426,6 +2622,15 @@ __metadata:
languageName: node
linkType: hard
+"acorn-import-attributes@npm:^1.9.5":
+ version: 1.9.5
+ resolution: "acorn-import-attributes@npm:1.9.5"
+ peerDependencies:
+ acorn: ^8
+ checksum: 1c0c49b6a244503964ae46ae850baccf306e84caf99bc2010ed6103c69a423987b07b520a6c619f075d215388bd4923eccac995886a54309eda049ab78a4be95
+ languageName: node
+ linkType: hard
+
"acorn-jsx@npm:^5.3.1":
version: 5.3.1
resolution: "acorn-jsx@npm:5.3.1"
@@ -2467,6 +2672,15 @@ __metadata:
languageName: node
linkType: hard
+"acorn@npm:^8.8.2":
+ version: 8.12.1
+ resolution: "acorn@npm:8.12.1"
+ bin:
+ acorn: bin/acorn
+ checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07
+ languageName: node
+ linkType: hard
+
"agent-base@npm:6, agent-base@npm:^6.0.2":
version: 6.0.2
resolution: "agent-base@npm:6.0.2"
@@ -2954,7 +3168,7 @@ __metadata:
languageName: node
linkType: hard
-"braces@npm:^3.0.1, braces@npm:~3.0.2":
+"braces@npm:^3.0.3, braces@npm:~3.0.2":
version: 3.0.3
resolution: "braces@npm:3.0.3"
dependencies:
@@ -2985,6 +3199,20 @@ __metadata:
languageName: node
linkType: hard
+"browserslist@npm:^4.21.10":
+ version: 4.23.3
+ resolution: "browserslist@npm:4.23.3"
+ dependencies:
+ caniuse-lite: ^1.0.30001646
+ electron-to-chromium: ^1.5.4
+ node-releases: ^2.0.18
+ update-browserslist-db: ^1.1.0
+ bin:
+ browserslist: cli.js
+ checksum: 7906064f9970aeb941310b2fcb8b4ace4a1b50aa657c986677c6f1553a8cabcc94ee9c5922f715baffbedaa0e6cf0831b6fed7b059dde6873a4bfadcbe069c7e
+ languageName: node
+ linkType: hard
+
"bser@npm:2.1.1":
version: 2.1.1
resolution: "bser@npm:2.1.1"
@@ -3083,6 +3311,13 @@ __metadata:
languageName: node
linkType: hard
+"caniuse-lite@npm:^1.0.30001646":
+ version: 1.0.30001653
+ resolution: "caniuse-lite@npm:1.0.30001653"
+ checksum: 289cf06c26a46f3e6460ccd5feffa788ab0ab35d306898c48120c65cfb11959bfa560e9f739393769b4fd01150c69b0747ad3ad5ec3abf3dfafd66df3c59254e
+ languageName: node
+ linkType: hard
+
"capital-case@npm:^1.0.4":
version: 1.0.4
resolution: "capital-case@npm:1.0.4"
@@ -3723,6 +3958,13 @@ __metadata:
languageName: node
linkType: hard
+"electron-to-chromium@npm:^1.5.4":
+ version: 1.5.13
+ resolution: "electron-to-chromium@npm:1.5.13"
+ checksum: f18ac84dd3bf9a200654a6a9292b9ec4bced0cf9bd26cec9941b775f4470c581c9d043e70b37a124d9752dcc0f47fc96613d52b2defd8e59632852730cb418b9
+ languageName: node
+ linkType: hard
+
"emittery@npm:^0.8.1":
version: 0.8.1
resolution: "emittery@npm:0.8.1"
@@ -3777,6 +4019,16 @@ __metadata:
languageName: node
linkType: hard
+"enhanced-resolve@npm:^5.17.1":
+ version: 5.17.1
+ resolution: "enhanced-resolve@npm:5.17.1"
+ dependencies:
+ graceful-fs: ^4.2.4
+ tapable: ^2.2.0
+ checksum: 4bc38cf1cea96456f97503db7280394177d1bc46f8f87c267297d04f795ac5efa81e48115a2f5b6273c781027b5b6bfc5f62b54df629e4d25fa7001a86624f59
+ languageName: node
+ linkType: hard
+
"enquirer@npm:^2.3.5":
version: 2.3.6
resolution: "enquirer@npm:2.3.6"
@@ -3848,6 +4100,13 @@ __metadata:
languageName: node
linkType: hard
+"es-module-lexer@npm:^1.2.1":
+ version: 1.5.4
+ resolution: "es-module-lexer@npm:1.5.4"
+ checksum: a0cf04fb92d052647ac7d818d1913b98d3d3d0f5b9d88f0eafb993436e4c3e2c958599db68839d57f2dfa281fdf0f60e18d448eb78fc292c33c0f25635b6854f
+ languageName: node
+ linkType: hard
+
"es-to-primitive@npm:^1.2.1":
version: 1.2.1
resolution: "es-to-primitive@npm:1.2.1"
@@ -3911,6 +4170,13 @@ __metadata:
languageName: node
linkType: hard
+"escalade@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "escalade@npm:3.1.2"
+ checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02
+ languageName: node
+ linkType: hard
+
"escape-html@npm:~1.0.3":
version: 1.0.3
resolution: "escape-html@npm:1.0.3"
@@ -4799,6 +5065,13 @@ __metadata:
languageName: node
linkType: hard
+"graceful-fs@npm:^4.2.11":
+ version: 4.2.11
+ resolution: "graceful-fs@npm:4.2.11"
+ checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
+ languageName: node
+ linkType: hard
+
"gzip-size@npm:^6.0.0":
version: 6.0.0
resolution: "gzip-size@npm:6.0.0"
@@ -5988,6 +6261,17 @@ __metadata:
languageName: node
linkType: hard
+"jest-worker@npm:^27.4.5":
+ version: 27.5.1
+ resolution: "jest-worker@npm:27.5.1"
+ dependencies:
+ "@types/node": "*"
+ merge-stream: ^2.0.0
+ supports-color: ^8.0.0
+ checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980
+ languageName: node
+ linkType: hard
+
"jest@npm:^27.0.6":
version: 27.0.6
resolution: "jest@npm:27.0.6"
@@ -6447,12 +6731,12 @@ __metadata:
linkType: hard
"micromatch@npm:^4.0.4":
- version: 4.0.4
- resolution: "micromatch@npm:4.0.4"
+ version: 4.0.8
+ resolution: "micromatch@npm:4.0.8"
dependencies:
- braces: ^3.0.1
- picomatch: ^2.2.3
- checksum: ef3d1c88e79e0a68b0e94a03137676f3324ac18a908c245a9e5936f838079fcc108ac7170a5fadc265a9c2596963462e402841406bda1a4bb7b68805601d631c
+ braces: ^3.0.3
+ picomatch: ^2.3.1
+ checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
languageName: node
linkType: hard
@@ -6759,6 +7043,13 @@ __metadata:
languageName: node
linkType: hard
+"node-releases@npm:^2.0.18":
+ version: 2.0.18
+ resolution: "node-releases@npm:2.0.18"
+ checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3
+ languageName: node
+ linkType: hard
+
"nopt@npm:^5.0.0":
version: 5.0.0
resolution: "nopt@npm:5.0.0"
@@ -7120,6 +7411,13 @@ __metadata:
languageName: node
linkType: hard
+"picocolors@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "picocolors@npm:1.0.1"
+ checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5
+ languageName: node
+ linkType: hard
+
"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3":
version: 2.3.0
resolution: "picomatch@npm:2.3.0"
@@ -7127,6 +7425,13 @@ __metadata:
languageName: node
linkType: hard
+"picomatch@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "picomatch@npm:2.3.1"
+ checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
+ languageName: node
+ linkType: hard
+
"pino-std-serializers@npm:^3.1.0":
version: 3.2.0
resolution: "pino-std-serializers@npm:3.2.0"
@@ -7835,6 +8140,17 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0":
+ version: 3.3.0
+ resolution: "schema-utils@npm:3.3.0"
+ dependencies:
+ "@types/json-schema": ^7.0.8
+ ajv: ^6.12.5
+ ajv-keywords: ^3.5.2
+ checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0
+ languageName: node
+ linkType: hard
+
"secure-json-parse@npm:^2.0.0":
version: 2.4.0
resolution: "secure-json-parse@npm:2.4.0"
@@ -7919,6 +8235,15 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"serialize-javascript@npm:^6.0.1":
+ version: 6.0.2
+ resolution: "serialize-javascript@npm:6.0.2"
+ dependencies:
+ randombytes: ^2.1.0
+ checksum: c4839c6206c1d143c0f80763997a361310305751171dd95e4b57efee69b8f6edd8960a0b7fbfc45042aadff98b206d55428aee0dc276efe54f100899c7fa8ab7
+ languageName: node
+ linkType: hard
+
"set-blocking@npm:~2.0.0":
version: 2.0.0
resolution: "set-blocking@npm:2.0.0"
@@ -8520,6 +8845,28 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"terser-webpack-plugin@npm:^5.3.10":
+ version: 5.3.10
+ resolution: "terser-webpack-plugin@npm:5.3.10"
+ dependencies:
+ "@jridgewell/trace-mapping": ^0.3.20
+ jest-worker: ^27.4.5
+ schema-utils: ^3.1.1
+ serialize-javascript: ^6.0.1
+ terser: ^5.26.0
+ peerDependencies:
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ "@swc/core":
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ checksum: bd6e7596cf815f3353e2a53e79cbdec959a1b0276f5e5d4e63e9d7c3c5bb5306df567729da287d1c7b39d79093e56863c569c42c6c24cc34c76aa313bd2cbcea
+ languageName: node
+ linkType: hard
+
"terser@npm:^5.14.2, terser@npm:^5.7.0":
version: 5.15.1
resolution: "terser@npm:5.15.1"
@@ -8534,6 +8881,20 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"terser@npm:^5.26.0":
+ version: 5.31.6
+ resolution: "terser@npm:5.31.6"
+ dependencies:
+ "@jridgewell/source-map": ^0.3.3
+ acorn: ^8.8.2
+ commander: ^2.20.0
+ source-map-support: ~0.5.20
+ bin:
+ terser: bin/terser
+ checksum: 60d3faf39c9ad7acc891e17888bbd206e0b777f442649cf49873a5fa317b8b8a17179a46970d884d5f93e8addde0206193ed1e2e4f1ccb1cafb167f7d1ddee96
+ languageName: node
+ linkType: hard
+
"test-exclude@npm:^6.0.0":
version: 6.0.0
resolution: "test-exclude@npm:6.0.0"
@@ -8662,7 +9023,7 @@ resolve@^2.0.0-next.3:
terser-webpack-plugin: ^5.1.4
typescript: ^4.9.4
url-loader: ^4.1.1
- webpack: ^5.75.0
+ webpack: ^5.94.0
webpack-bundle-analyzer: ^4.4.2
webpack-cli: ^4.7.2
languageName: unknown
@@ -9052,6 +9413,20 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"update-browserslist-db@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "update-browserslist-db@npm:1.1.0"
+ dependencies:
+ escalade: ^3.1.2
+ picocolors: ^1.0.1
+ peerDependencies:
+ browserslist: ">= 4.21.0"
+ bin:
+ update-browserslist-db: cli.js
+ checksum: 7b74694d96f0c360f01b702e72353dc5a49df4fe6663d3ee4e5c628f061576cddf56af35a3a886238c01dd3d8f231b7a86a8ceaa31e7a9220ae31c1c1238e562
+ languageName: node
+ linkType: hard
+
"upper-case-first@npm:^2.0.2":
version: 2.0.2
resolution: "upper-case-first@npm:2.0.2"
@@ -9190,6 +9565,16 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"watchpack@npm:^2.4.1":
+ version: 2.4.2
+ resolution: "watchpack@npm:2.4.2"
+ dependencies:
+ glob-to-regexp: ^0.4.1
+ graceful-fs: ^4.1.2
+ checksum: 92d9d52ce3d16fd83ed6994d1dd66a4d146998882f4c362d37adfea9ab77748a5b4d1e0c65fa104797928b2d40f635efa8f9b925a6265428a69f1e1852ca3441
+ languageName: node
+ linkType: hard
+
"webidl-conversions@npm:^5.0.0":
version: 5.0.0
resolution: "webidl-conversions@npm:5.0.0"
@@ -9284,7 +9669,7 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
-"webpack@npm:^5, webpack@npm:^5.75.0":
+"webpack@npm:^5":
version: 5.75.0
resolution: "webpack@npm:5.75.0"
dependencies:
@@ -9321,6 +9706,42 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"webpack@npm:^5.94.0":
+ version: 5.94.0
+ resolution: "webpack@npm:5.94.0"
+ dependencies:
+ "@types/estree": ^1.0.5
+ "@webassemblyjs/ast": ^1.12.1
+ "@webassemblyjs/wasm-edit": ^1.12.1
+ "@webassemblyjs/wasm-parser": ^1.12.1
+ acorn: ^8.7.1
+ acorn-import-attributes: ^1.9.5
+ browserslist: ^4.21.10
+ chrome-trace-event: ^1.0.2
+ enhanced-resolve: ^5.17.1
+ es-module-lexer: ^1.2.1
+ eslint-scope: 5.1.1
+ events: ^3.2.0
+ glob-to-regexp: ^0.4.1
+ graceful-fs: ^4.2.11
+ json-parse-even-better-errors: ^2.3.1
+ loader-runner: ^4.2.0
+ mime-types: ^2.1.27
+ neo-async: ^2.6.2
+ schema-utils: ^3.2.0
+ tapable: ^2.1.1
+ terser-webpack-plugin: ^5.3.10
+ watchpack: ^2.4.1
+ webpack-sources: ^3.2.3
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ bin:
+ webpack: bin/webpack.js
+ checksum: 6a3d667be304a69cd6dcb8d676bc29f47642c0d389af514cfcd646eaaa809961bc6989fc4b2621a717dfc461130f29c6e20006d62a32e012dafaa9517813a4e6
+ languageName: node
+ linkType: hard
+
"whatwg-encoding@npm:^1.0.5":
version: 1.0.5
resolution: "whatwg-encoding@npm:1.0.5"
diff --git a/tools/pull_request_hooks/flakyTestPayloads/chat_client.txt b/tools/pull_request_hooks/flakyTestPayloads/chat_client.txt
new file mode 100644
index 0000000000000..c39a060ffcf20
--- /dev/null
+++ b/tools/pull_request_hooks/flakyTestPayloads/chat_client.txt
@@ -0,0 +1,2404 @@
+2022-10-27T05:35:28.0256243Z Requested labels: ubuntu-20.04
+2022-10-27T05:35:28.0256293Z Job defined at: tgstation/tgstation/.github/workflows/ci_suite.yml@refs/pull/70831/merge
+2022-10-27T05:35:28.0256314Z Waiting for a runner to pick up this job...
+2022-10-27T05:35:28.3806920Z Job is waiting for a hosted runner to come online.
+2022-10-27T05:35:31.1835589Z Job is about to start running on the hosted runner: GitHub Actions 7 (hosted)
+2022-10-27T05:35:33.6191945Z Current runner version: '2.298.2'
+2022-10-27T05:35:33.6223671Z ##[group]Operating System
+2022-10-27T05:35:33.6224296Z Ubuntu
+2022-10-27T05:35:33.6224585Z 20.04.5
+2022-10-27T05:35:33.6225034Z LTS
+2022-10-27T05:35:33.6225416Z ##[endgroup]
+2022-10-27T05:35:33.6225743Z ##[group]Runner Image
+2022-10-27T05:35:33.6226159Z Image: ubuntu-20.04
+2022-10-27T05:35:33.6226592Z Version: 20221018.2
+2022-10-27T05:35:33.6227149Z Included Software: https://github.com/actions/runner-images/blob/ubuntu20/20221018.2/images/linux/Ubuntu2004-Readme.md
+2022-10-27T05:35:33.6227911Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu20%2F20221018.2
+2022-10-27T05:35:33.6228438Z ##[endgroup]
+2022-10-27T05:35:33.6228792Z ##[group]Runner Image Provisioner
+2022-10-27T05:35:33.6229236Z 2.0.91.1
+2022-10-27T05:35:33.6229586Z ##[endgroup]
+2022-10-27T05:35:33.6230675Z ##[group]GITHUB_TOKEN Permissions
+2022-10-27T05:35:33.6231448Z Actions: read
+2022-10-27T05:35:33.6231805Z Checks: read
+2022-10-27T05:35:33.6232342Z Contents: read
+2022-10-27T05:35:33.6232738Z Deployments: read
+2022-10-27T05:35:33.6233144Z Discussions: read
+2022-10-27T05:35:33.6233560Z Issues: read
+2022-10-27T05:35:33.6233904Z Metadata: read
+2022-10-27T05:35:33.6234279Z Packages: read
+2022-10-27T05:35:33.6234661Z Pages: read
+2022-10-27T05:35:33.6234985Z PullRequests: read
+2022-10-27T05:35:33.6235438Z RepositoryProjects: read
+2022-10-27T05:35:33.6235864Z SecurityEvents: read
+2022-10-27T05:35:33.6236198Z Statuses: read
+2022-10-27T05:35:33.6236580Z ##[endgroup]
+2022-10-27T05:35:33.6240880Z Secret source: None
+2022-10-27T05:35:33.6241441Z Prepare workflow directory
+2022-10-27T05:35:33.7582606Z Prepare all required actions
+2022-10-27T05:35:33.7797278Z Getting action download info
+2022-10-27T05:35:33.9844802Z Download action repository 'actions/checkout@v3' (SHA:93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8)
+2022-10-27T05:35:34.3746562Z Download action repository 'actions/cache@v3' (SHA:1c73980b09e7aea7201f325a7aa3ad00beddcdda)
+2022-10-27T05:35:34.6080813Z Download action repository 'actions/upload-artifact@v3' (SHA:83fd05a356d7e2593de66fc9913b3002723633cb)
+2022-10-27T05:35:34.9999481Z ##[group]Checking docker version
+2022-10-27T05:35:35.0019606Z ##[command]/usr/bin/docker version --format '{{.Server.APIVersion}}'
+2022-10-27T05:35:35.2352575Z '1.41'
+2022-10-27T05:35:35.2364837Z Docker daemon API version: '1.41'
+2022-10-27T05:35:35.2365438Z ##[command]/usr/bin/docker version --format '{{.Client.APIVersion}}'
+2022-10-27T05:35:35.2671237Z '1.41'
+2022-10-27T05:35:35.2683601Z Docker client API version: '1.41'
+2022-10-27T05:35:35.2690466Z ##[endgroup]
+2022-10-27T05:35:35.2694627Z ##[group]Clean up resources from previous jobs
+2022-10-27T05:35:35.2703798Z ##[command]/usr/bin/docker ps --all --quiet --no-trunc --filter "label=8d5581"
+2022-10-27T05:35:35.2966781Z ##[command]/usr/bin/docker network prune --force --filter "label=8d5581"
+2022-10-27T05:35:35.3198095Z ##[endgroup]
+2022-10-27T05:35:35.3198489Z ##[group]Create local container network
+2022-10-27T05:35:35.3210740Z ##[command]/usr/bin/docker network create --label 8d5581 github_network_552f961a7b154fc6bdcc0db4d38d15af
+2022-10-27T05:35:35.4083033Z 726620eda353dcb8922d8b386f90140e986ff1b865fb24546959f0eebb92fc89
+2022-10-27T05:35:35.4104308Z ##[endgroup]
+2022-10-27T05:35:35.4209182Z ##[group]Starting mysql service container
+2022-10-27T05:35:35.4233087Z ##[command]/usr/bin/docker pull mysql:latest
+2022-10-27T05:35:35.6809700Z latest: Pulling from library/mysql
+2022-10-27T05:35:35.7627837Z 50cbc88660a5: Pulling fs layer
+2022-10-27T05:35:35.7629087Z 92ca853f7184: Pulling fs layer
+2022-10-27T05:35:35.7629970Z 9a2047696230: Pulling fs layer
+2022-10-27T05:35:35.7630738Z fe3fea56f9fb: Pulling fs layer
+2022-10-27T05:35:35.7631515Z b058249d3104: Pulling fs layer
+2022-10-27T05:35:35.7632382Z 9d5014a20163: Pulling fs layer
+2022-10-27T05:35:35.7633458Z 906aa7388ee2: Pulling fs layer
+2022-10-27T05:35:35.7634120Z 86b5e2150967: Pulling fs layer
+2022-10-27T05:35:35.7634859Z fe3fea56f9fb: Waiting
+2022-10-27T05:35:35.7635207Z b058249d3104: Waiting
+2022-10-27T05:35:35.7635923Z 9d5014a20163: Waiting
+2022-10-27T05:35:35.7636723Z 906aa7388ee2: Waiting
+2022-10-27T05:35:35.7637442Z 86b5e2150967: Waiting
+2022-10-27T05:35:35.7638169Z 7c6b15dcdf4e: Pulling fs layer
+2022-10-27T05:35:35.7638928Z 21de4337b977: Pulling fs layer
+2022-10-27T05:35:35.7639714Z 35dab154f2ae: Pulling fs layer
+2022-10-27T05:35:35.7640485Z 7c6b15dcdf4e: Waiting
+2022-10-27T05:35:35.7641283Z 21de4337b977: Waiting
+2022-10-27T05:35:35.7642059Z 35dab154f2ae: Waiting
+2022-10-27T05:35:35.8359746Z 92ca853f7184: Verifying Checksum
+2022-10-27T05:35:35.8446985Z 92ca853f7184: Download complete
+2022-10-27T05:35:35.8481029Z 9a2047696230: Verifying Checksum
+2022-10-27T05:35:35.8488372Z 9a2047696230: Download complete
+2022-10-27T05:35:35.8926817Z b058249d3104: Verifying Checksum
+2022-10-27T05:35:35.8928354Z b058249d3104: Download complete
+2022-10-27T05:35:35.9459390Z 9d5014a20163: Verifying Checksum
+2022-10-27T05:35:35.9459781Z 9d5014a20163: Download complete
+2022-10-27T05:35:35.9501999Z fe3fea56f9fb: Verifying Checksum
+2022-10-27T05:35:35.9502607Z fe3fea56f9fb: Download complete
+2022-10-27T05:35:36.0227385Z 86b5e2150967: Verifying Checksum
+2022-10-27T05:35:36.0228073Z 86b5e2150967: Download complete
+2022-10-27T05:35:36.2107823Z 50cbc88660a5: Verifying Checksum
+2022-10-27T05:35:36.2144152Z 50cbc88660a5: Download complete
+2022-10-27T05:35:36.4134563Z 21de4337b977: Verifying Checksum
+2022-10-27T05:35:36.4134997Z 21de4337b977: Download complete
+2022-10-27T05:35:36.5421142Z 35dab154f2ae: Verifying Checksum
+2022-10-27T05:35:36.5422039Z 35dab154f2ae: Download complete
+2022-10-27T05:35:36.5644620Z 906aa7388ee2: Verifying Checksum
+2022-10-27T05:35:36.5645584Z 906aa7388ee2: Download complete
+2022-10-27T05:35:36.7764339Z 7c6b15dcdf4e: Verifying Checksum
+2022-10-27T05:35:36.7764814Z 7c6b15dcdf4e: Download complete
+2022-10-27T05:35:38.1046566Z 50cbc88660a5: Pull complete
+2022-10-27T05:35:39.3355767Z 92ca853f7184: Pull complete
+2022-10-27T05:35:39.4582128Z 9a2047696230: Pull complete
+2022-10-27T05:35:39.7344329Z fe3fea56f9fb: Pull complete
+2022-10-27T05:35:39.8044862Z b058249d3104: Pull complete
+2022-10-27T05:35:39.8779415Z 9d5014a20163: Pull complete
+2022-10-27T05:35:42.0306333Z 906aa7388ee2: Pull complete
+2022-10-27T05:35:42.0993787Z 86b5e2150967: Pull complete
+2022-10-27T05:35:46.6099584Z 7c6b15dcdf4e: Pull complete
+2022-10-27T05:35:46.6805432Z 21de4337b977: Pull complete
+2022-10-27T05:35:46.7395254Z 35dab154f2ae: Pull complete
+2022-10-27T05:35:46.7446735Z Digest: sha256:06314a7a220f6043436cfd72fd9c7f174fd58ef69fe4b788625fa53be4ab66aa
+2022-10-27T05:35:46.7469861Z Status: Downloaded newer image for mysql:latest
+2022-10-27T05:35:46.7485796Z docker.io/library/mysql:latest
+2022-10-27T05:35:46.7631416Z ##[command]/usr/bin/docker create --name bdaac24feb7948af9ae1cfcb2f1e5f3f_mysqllatest_e0031a --label 8d5581 --network github_network_552f961a7b154fc6bdcc0db4d38d15af --network-alias mysql -p 3306 --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 -e "MYSQL_ROOT_PASSWORD=root" -e GITHUB_ACTIONS=true -e CI=true mysql:latest
+2022-10-27T05:35:46.8132286Z b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:46.8159678Z ##[command]/usr/bin/docker start b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:47.2490003Z b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:47.2513985Z ##[command]/usr/bin/docker ps --all --filter id=b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
+2022-10-27T05:35:47.2830396Z b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc Up Less than a second (health: starting)
+2022-10-27T05:35:47.2856701Z ##[command]/usr/bin/docker port b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:47.3113114Z 3306/tcp -> 0.0.0.0:49153
+2022-10-27T05:35:47.3115902Z 3306/tcp -> :::49153
+2022-10-27T05:35:47.3221941Z ##[endgroup]
+2022-10-27T05:35:47.3222347Z ##[group]Waiting for all services to be ready
+2022-10-27T05:35:47.3271402Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:47.3554944Z starting
+2022-10-27T05:35:47.3594143Z mysql service is starting, waiting 2 seconds before checking again.
+2022-10-27T05:35:49.3593961Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:49.3867220Z starting
+2022-10-27T05:35:49.3886611Z mysql service is starting, waiting 4 seconds before checking again.
+2022-10-27T05:35:53.5602510Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:35:53.5864042Z starting
+2022-10-27T05:35:53.5910238Z mysql service is starting, waiting 7 seconds before checking again.
+2022-10-27T05:36:01.0993571Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:36:01.1232744Z starting
+2022-10-27T05:36:01.1235024Z mysql service is starting, waiting 14 seconds before checking again.
+2022-10-27T05:36:15.3399109Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:36:15.3647356Z healthy
+2022-10-27T05:36:15.3666176Z mysql service is healthy.
+2022-10-27T05:36:15.3666682Z ##[endgroup]
+2022-10-27T05:36:15.4114536Z ##[group]Run actions/checkout@v3
+2022-10-27T05:36:15.4114858Z with:
+2022-10-27T05:36:15.4115122Z repository: tgstation/tgstation
+2022-10-27T05:36:15.4115678Z token: ***
+2022-10-27T05:36:15.4115920Z ssh-strict: true
+2022-10-27T05:36:15.4116197Z persist-credentials: true
+2022-10-27T05:36:15.4116449Z clean: true
+2022-10-27T05:36:15.4116701Z fetch-depth: 1
+2022-10-27T05:36:15.4116934Z lfs: false
+2022-10-27T05:36:15.4117152Z submodules: false
+2022-10-27T05:36:15.4117416Z set-safe-directory: true
+2022-10-27T05:36:15.4117683Z ##[endgroup]
+2022-10-27T05:36:15.7895271Z Syncing repository: tgstation/tgstation
+2022-10-27T05:36:15.7897134Z ##[group]Getting Git version info
+2022-10-27T05:36:15.7897764Z Working directory is '/home/runner/work/tgstation/tgstation'
+2022-10-27T05:36:15.7898346Z [command]/usr/bin/git version
+2022-10-27T05:36:15.8070209Z git version 2.38.1
+2022-10-27T05:36:15.8107380Z ##[endgroup]
+2022-10-27T05:36:15.8130065Z Temporarily overriding HOME='/home/runner/work/_temp/d9a17a0a-ad0c-43af-a749-41248c6e4a98' before making global git config changes
+2022-10-27T05:36:15.8135001Z Adding repository directory to the temporary git global config as a safe directory
+2022-10-27T05:36:15.8140556Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2022-10-27T05:36:15.8198130Z Deleting the contents of '/home/runner/work/tgstation/tgstation'
+2022-10-27T05:36:15.8204575Z ##[group]Initializing the repository
+2022-10-27T05:36:15.8209016Z [command]/usr/bin/git init /home/runner/work/tgstation/tgstation
+2022-10-27T05:36:15.8312384Z hint: Using 'master' as the name for the initial branch. This default branch name
+2022-10-27T05:36:15.8313365Z hint: is subject to change. To configure the initial branch name to use in all
+2022-10-27T05:36:15.8313842Z hint: of your new repositories, which will suppress this warning, call:
+2022-10-27T05:36:15.8314167Z hint:
+2022-10-27T05:36:15.8314756Z hint: git config --global init.defaultBranch
+2022-10-27T05:36:15.8315053Z hint:
+2022-10-27T05:36:15.8315481Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
+2022-10-27T05:36:15.8316041Z hint: 'development'. The just-created branch can be renamed via this command:
+2022-10-27T05:36:15.8316354Z hint:
+2022-10-27T05:36:15.8316650Z hint: git branch -m
+2022-10-27T05:36:15.8337002Z Initialized empty Git repository in /home/runner/work/tgstation/tgstation/.git/
+2022-10-27T05:36:15.8348424Z [command]/usr/bin/git remote add origin https://github.com/tgstation/tgstation
+2022-10-27T05:36:15.8408157Z ##[endgroup]
+2022-10-27T05:36:15.8408999Z ##[group]Disabling automatic garbage collection
+2022-10-27T05:36:15.8415169Z [command]/usr/bin/git config --local gc.auto 0
+2022-10-27T05:36:15.8455049Z ##[endgroup]
+2022-10-27T05:36:15.8456729Z ##[group]Setting up auth
+2022-10-27T05:36:15.8467019Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2022-10-27T05:36:15.8512305Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
+2022-10-27T05:36:15.8992303Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2022-10-27T05:36:15.9034687Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
+2022-10-27T05:36:15.9317710Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
+2022-10-27T05:36:15.9381545Z ##[endgroup]
+2022-10-27T05:36:15.9383025Z ##[group]Fetching the repository
+2022-10-27T05:36:15.9392584Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +deb5c38b8299183d179ee993b8c40179d42cff9b:refs/remotes/pull/70831/merge
+2022-10-27T05:36:16.3561666Z remote: Enumerating objects: 12549, done.
+2022-10-27T05:36:16.3568675Z remote: Counting objects: 0% (1/12549)
+2022-10-27T05:36:16.3571032Z remote: Counting objects: 1% (126/12549)
+2022-10-27T05:36:16.3576947Z remote: Counting objects: 2% (251/12549)
+2022-10-27T05:36:16.3590550Z remote: Counting objects: 3% (377/12549)
+2022-10-27T05:36:16.3591870Z remote: Counting objects: 4% (502/12549)
+2022-10-27T05:36:16.3629704Z remote: Counting objects: 5% (628/12549)
+2022-10-27T05:36:16.3630882Z remote: Counting objects: 6% (753/12549)
+2022-10-27T05:36:16.3633986Z remote: Counting objects: 7% (879/12549)
+2022-10-27T05:36:16.3662523Z remote: Counting objects: 8% (1004/12549)
+2022-10-27T05:36:16.3663123Z remote: Counting objects: 9% (1130/12549)
+2022-10-27T05:36:16.3664088Z remote: Counting objects: 10% (1255/12549)
+2022-10-27T05:36:16.3664584Z remote: Counting objects: 11% (1381/12549)
+2022-10-27T05:36:16.3665108Z remote: Counting objects: 12% (1506/12549)
+2022-10-27T05:36:16.3665639Z remote: Counting objects: 13% (1632/12549)
+2022-10-27T05:36:16.3666161Z remote: Counting objects: 14% (1757/12549)
+2022-10-27T05:36:16.3666781Z remote: Counting objects: 15% (1883/12549)
+2022-10-27T05:36:16.3667203Z remote: Counting objects: 16% (2008/12549)
+2022-10-27T05:36:16.3667759Z remote: Counting objects: 17% (2134/12549)
+2022-10-27T05:36:16.3668424Z remote: Counting objects: 18% (2259/12549)
+2022-10-27T05:36:16.3668772Z remote: Counting objects: 19% (2385/12549)
+2022-10-27T05:36:16.3686549Z remote: Counting objects: 20% (2510/12549)
+2022-10-27T05:36:16.3687142Z remote: Counting objects: 21% (2636/12549)
+2022-10-27T05:36:16.3693091Z remote: Counting objects: 22% (2761/12549)
+2022-10-27T05:36:16.3695805Z remote: Counting objects: 23% (2887/12549)
+2022-10-27T05:36:16.3696270Z remote: Counting objects: 24% (3012/12549)
+2022-10-27T05:36:16.3696611Z remote: Counting objects: 25% (3138/12549)
+2022-10-27T05:36:16.3696933Z remote: Counting objects: 26% (3263/12549)
+2022-10-27T05:36:16.3697238Z remote: Counting objects: 27% (3389/12549)
+2022-10-27T05:36:16.3697557Z remote: Counting objects: 28% (3514/12549)
+2022-10-27T05:36:16.3700568Z remote: Counting objects: 29% (3640/12549)
+2022-10-27T05:36:16.3701206Z remote: Counting objects: 30% (3765/12549)
+2022-10-27T05:36:16.3701530Z remote: Counting objects: 31% (3891/12549)
+2022-10-27T05:36:16.3702027Z remote: Counting objects: 32% (4016/12549)
+2022-10-27T05:36:16.3704376Z remote: Counting objects: 33% (4142/12549)
+2022-10-27T05:36:16.3705536Z remote: Counting objects: 34% (4267/12549)
+2022-10-27T05:36:16.3706001Z remote: Counting objects: 35% (4393/12549)
+2022-10-27T05:36:16.3706528Z remote: Counting objects: 36% (4518/12549)
+2022-10-27T05:36:16.3707049Z remote: Counting objects: 37% (4644/12549)
+2022-10-27T05:36:16.3707535Z remote: Counting objects: 38% (4769/12549)
+2022-10-27T05:36:16.3707879Z remote: Counting objects: 39% (4895/12549)
+2022-10-27T05:36:16.3708856Z remote: Counting objects: 40% (5020/12549)
+2022-10-27T05:36:16.3714163Z remote: Counting objects: 41% (5146/12549)
+2022-10-27T05:36:16.3716186Z remote: Counting objects: 42% (5271/12549)
+2022-10-27T05:36:16.3720394Z remote: Counting objects: 43% (5397/12549)
+2022-10-27T05:36:16.3725239Z remote: Counting objects: 44% (5522/12549)
+2022-10-27T05:36:16.3727509Z remote: Counting objects: 45% (5648/12549)
+2022-10-27T05:36:16.3728407Z remote: Counting objects: 46% (5773/12549)
+2022-10-27T05:36:16.3733411Z remote: Counting objects: 47% (5899/12549)
+2022-10-27T05:36:16.3734826Z remote: Counting objects: 48% (6024/12549)
+2022-10-27T05:36:16.3736029Z remote: Counting objects: 49% (6150/12549)
+2022-10-27T05:36:16.3736752Z remote: Counting objects: 50% (6275/12549)
+2022-10-27T05:36:16.3737119Z remote: Counting objects: 51% (6400/12549)
+2022-10-27T05:36:16.3740552Z remote: Counting objects: 52% (6526/12549)
+2022-10-27T05:36:16.3741109Z remote: Counting objects: 53% (6651/12549)
+2022-10-27T05:36:16.3742348Z remote: Counting objects: 54% (6777/12549)
+2022-10-27T05:36:16.3745824Z remote: Counting objects: 55% (6902/12549)
+2022-10-27T05:36:16.3746239Z remote: Counting objects: 56% (7028/12549)
+2022-10-27T05:36:16.3748976Z remote: Counting objects: 57% (7153/12549)
+2022-10-27T05:36:16.3752389Z remote: Counting objects: 58% (7279/12549)
+2022-10-27T05:36:16.3753090Z remote: Counting objects: 59% (7404/12549)
+2022-10-27T05:36:16.3753587Z remote: Counting objects: 60% (7530/12549)
+2022-10-27T05:36:16.3753969Z remote: Counting objects: 61% (7655/12549)
+2022-10-27T05:36:16.3755897Z remote: Counting objects: 62% (7781/12549)
+2022-10-27T05:36:16.3758566Z remote: Counting objects: 63% (7906/12549)
+2022-10-27T05:36:16.3760370Z remote: Counting objects: 64% (8032/12549)
+2022-10-27T05:36:16.3763888Z remote: Counting objects: 65% (8157/12549)
+2022-10-27T05:36:16.3765292Z remote: Counting objects: 66% (8283/12549)
+2022-10-27T05:36:16.3765656Z remote: Counting objects: 67% (8408/12549)
+2022-10-27T05:36:16.3767729Z remote: Counting objects: 68% (8534/12549)
+2022-10-27T05:36:16.3769245Z remote: Counting objects: 69% (8659/12549)
+2022-10-27T05:36:16.3772503Z remote: Counting objects: 70% (8785/12549)
+2022-10-27T05:36:16.3773802Z remote: Counting objects: 71% (8910/12549)
+2022-10-27T05:36:16.3774655Z remote: Counting objects: 72% (9036/12549)
+2022-10-27T05:36:16.3775188Z remote: Counting objects: 73% (9161/12549)
+2022-10-27T05:36:16.3778186Z remote: Counting objects: 74% (9287/12549)
+2022-10-27T05:36:16.3778933Z remote: Counting objects: 75% (9412/12549)
+2022-10-27T05:36:16.3780943Z remote: Counting objects: 76% (9538/12549)
+2022-10-27T05:36:16.3781397Z remote: Counting objects: 77% (9663/12549)
+2022-10-27T05:36:16.3782023Z remote: Counting objects: 78% (9789/12549)
+2022-10-27T05:36:16.3782511Z remote: Counting objects: 79% (9914/12549)
+2022-10-27T05:36:16.3784693Z remote: Counting objects: 80% (10040/12549)
+2022-10-27T05:36:16.3785644Z remote: Counting objects: 81% (10165/12549)
+2022-10-27T05:36:16.3786373Z remote: Counting objects: 82% (10291/12549)
+2022-10-27T05:36:16.3787171Z remote: Counting objects: 83% (10416/12549)
+2022-10-27T05:36:16.3788291Z remote: Counting objects: 84% (10542/12549)
+2022-10-27T05:36:16.3789701Z remote: Counting objects: 85% (10667/12549)
+2022-10-27T05:36:16.3791529Z remote: Counting objects: 86% (10793/12549)
+2022-10-27T05:36:16.3792061Z remote: Counting objects: 87% (10918/12549)
+2022-10-27T05:36:16.3792440Z remote: Counting objects: 88% (11044/12549)
+2022-10-27T05:36:16.3792863Z remote: Counting objects: 89% (11169/12549)
+2022-10-27T05:36:16.3793298Z remote: Counting objects: 90% (11295/12549)
+2022-10-27T05:36:16.3795291Z remote: Counting objects: 91% (11420/12549)
+2022-10-27T05:36:16.3796533Z remote: Counting objects: 92% (11546/12549)
+2022-10-27T05:36:16.3804544Z remote: Counting objects: 93% (11671/12549)
+2022-10-27T05:36:16.3804980Z remote: Counting objects: 94% (11797/12549)
+2022-10-27T05:36:16.3809019Z remote: Counting objects: 95% (11922/12549)
+2022-10-27T05:36:16.3812297Z remote: Counting objects: 96% (12048/12549)
+2022-10-27T05:36:16.3812832Z remote: Counting objects: 97% (12173/12549)
+2022-10-27T05:36:16.3813378Z remote: Counting objects: 98% (12299/12549)
+2022-10-27T05:36:16.3822622Z remote: Counting objects: 99% (12424/12549)
+2022-10-27T05:36:16.3823331Z remote: Counting objects: 100% (12549/12549)
+2022-10-27T05:36:16.3823824Z remote: Counting objects: 100% (12549/12549), done.
+2022-10-27T05:36:16.4028339Z remote: Compressing objects: 0% (1/10965)
+2022-10-27T05:36:16.4147149Z remote: Compressing objects: 1% (110/10965)
+2022-10-27T05:36:16.4301715Z remote: Compressing objects: 2% (220/10965)
+2022-10-27T05:36:16.4468059Z remote: Compressing objects: 3% (329/10965)
+2022-10-27T05:36:16.4473482Z remote: Compressing objects: 4% (439/10965)
+2022-10-27T05:36:16.4543661Z remote: Compressing objects: 5% (549/10965)
+2022-10-27T05:36:16.4673953Z remote: Compressing objects: 6% (658/10965)
+2022-10-27T05:36:16.4966036Z remote: Compressing objects: 7% (768/10965)
+2022-10-27T05:36:16.5309645Z remote: Compressing objects: 8% (878/10965)
+2022-10-27T05:36:16.5681068Z remote: Compressing objects: 9% (987/10965)
+2022-10-27T05:36:16.6184895Z remote: Compressing objects: 10% (1097/10965)
+2022-10-27T05:36:17.1107044Z remote: Compressing objects: 11% (1207/10965)
+2022-10-27T05:36:17.2060689Z remote: Compressing objects: 12% (1316/10965)
+2022-10-27T05:36:17.3922950Z remote: Compressing objects: 13% (1426/10965)
+2022-10-27T05:36:17.3936933Z remote: Compressing objects: 13% (1501/10965)
+2022-10-27T05:36:17.4040840Z remote: Compressing objects: 14% (1536/10965)
+2022-10-27T05:36:17.4460571Z remote: Compressing objects: 15% (1645/10965)
+2022-10-27T05:36:17.4619358Z remote: Compressing objects: 16% (1755/10965)
+2022-10-27T05:36:17.4790041Z remote: Compressing objects: 17% (1865/10965)
+2022-10-27T05:36:17.4934830Z remote: Compressing objects: 18% (1974/10965)
+2022-10-27T05:36:17.5257200Z remote: Compressing objects: 19% (2084/10965)
+2022-10-27T05:36:17.5516516Z remote: Compressing objects: 20% (2193/10965)
+2022-10-27T05:36:17.5561317Z remote: Compressing objects: 21% (2303/10965)
+2022-10-27T05:36:17.5795622Z remote: Compressing objects: 22% (2413/10965)
+2022-10-27T05:36:17.6401406Z remote: Compressing objects: 23% (2522/10965)
+2022-10-27T05:36:17.6654061Z remote: Compressing objects: 24% (2632/10965)
+2022-10-27T05:36:17.6828486Z remote: Compressing objects: 25% (2742/10965)
+2022-10-27T05:36:17.7044480Z remote: Compressing objects: 26% (2851/10965)
+2022-10-27T05:36:17.7222440Z remote: Compressing objects: 27% (2961/10965)
+2022-10-27T05:36:17.7713784Z remote: Compressing objects: 28% (3071/10965)
+2022-10-27T05:36:17.7980639Z remote: Compressing objects: 29% (3180/10965)
+2022-10-27T05:36:17.8260312Z remote: Compressing objects: 30% (3290/10965)
+2022-10-27T05:36:17.8653550Z remote: Compressing objects: 31% (3400/10965)
+2022-10-27T05:36:17.8786759Z remote: Compressing objects: 32% (3509/10965)
+2022-10-27T05:36:17.9127781Z remote: Compressing objects: 33% (3619/10965)
+2022-10-27T05:36:17.9521720Z remote: Compressing objects: 34% (3729/10965)
+2022-10-27T05:36:17.9910080Z remote: Compressing objects: 35% (3838/10965)
+2022-10-27T05:36:18.0204335Z remote: Compressing objects: 36% (3948/10965)
+2022-10-27T05:36:18.0597196Z remote: Compressing objects: 37% (4058/10965)
+2022-10-27T05:36:18.0964696Z remote: Compressing objects: 38% (4167/10965)
+2022-10-27T05:36:18.1358555Z remote: Compressing objects: 39% (4277/10965)
+2022-10-27T05:36:18.1549596Z remote: Compressing objects: 40% (4386/10965)
+2022-10-27T05:36:18.1861724Z remote: Compressing objects: 41% (4496/10965)
+2022-10-27T05:36:18.2100005Z remote: Compressing objects: 42% (4606/10965)
+2022-10-27T05:36:18.2479949Z remote: Compressing objects: 43% (4715/10965)
+2022-10-27T05:36:18.2787209Z remote: Compressing objects: 44% (4825/10965)
+2022-10-27T05:36:18.3002217Z remote: Compressing objects: 45% (4935/10965)
+2022-10-27T05:36:18.3304059Z remote: Compressing objects: 46% (5044/10965)
+2022-10-27T05:36:18.3627827Z remote: Compressing objects: 47% (5154/10965)
+2022-10-27T05:36:18.3769101Z remote: Compressing objects: 48% (5264/10965)
+2022-10-27T05:36:18.3833369Z remote: Compressing objects: 49% (5373/10965)
+2022-10-27T05:36:18.4021233Z remote: Compressing objects: 49% (5403/10965)
+2022-10-27T05:36:18.4232973Z remote: Compressing objects: 50% (5483/10965)
+2022-10-27T05:36:18.4496802Z remote: Compressing objects: 51% (5593/10965)
+2022-10-27T05:36:18.4760000Z remote: Compressing objects: 52% (5702/10965)
+2022-10-27T05:36:18.5061635Z remote: Compressing objects: 53% (5812/10965)
+2022-10-27T05:36:18.5273446Z remote: Compressing objects: 54% (5922/10965)
+2022-10-27T05:36:18.5546118Z remote: Compressing objects: 55% (6031/10965)
+2022-10-27T05:36:18.5809381Z remote: Compressing objects: 56% (6141/10965)
+2022-10-27T05:36:18.6147456Z remote: Compressing objects: 57% (6251/10965)
+2022-10-27T05:36:18.6311320Z remote: Compressing objects: 58% (6360/10965)
+2022-10-27T05:36:18.6614446Z remote: Compressing objects: 59% (6470/10965)
+2022-10-27T05:36:18.6930160Z remote: Compressing objects: 60% (6579/10965)
+2022-10-27T05:36:18.7250175Z remote: Compressing objects: 61% (6689/10965)
+2022-10-27T05:36:18.7426580Z remote: Compressing objects: 62% (6799/10965)
+2022-10-27T05:36:18.7654931Z remote: Compressing objects: 63% (6908/10965)
+2022-10-27T05:36:18.8010761Z remote: Compressing objects: 64% (7018/10965)
+2022-10-27T05:36:18.8152846Z remote: Compressing objects: 65% (7128/10965)
+2022-10-27T05:36:18.8473982Z remote: Compressing objects: 66% (7237/10965)
+2022-10-27T05:36:18.8539428Z remote: Compressing objects: 67% (7347/10965)
+2022-10-27T05:36:18.8540163Z remote: Compressing objects: 68% (7457/10965)
+2022-10-27T05:36:18.8621595Z remote: Compressing objects: 69% (7566/10965)
+2022-10-27T05:36:18.8622122Z remote: Compressing objects: 70% (7676/10965)
+2022-10-27T05:36:18.8625855Z remote: Compressing objects: 71% (7786/10965)
+2022-10-27T05:36:18.8626847Z remote: Compressing objects: 72% (7895/10965)
+2022-10-27T05:36:18.8627930Z remote: Compressing objects: 73% (8005/10965)
+2022-10-27T05:36:18.8629224Z remote: Compressing objects: 74% (8115/10965)
+2022-10-27T05:36:18.8630011Z remote: Compressing objects: 75% (8224/10965)
+2022-10-27T05:36:18.8630611Z remote: Compressing objects: 76% (8334/10965)
+2022-10-27T05:36:18.8658429Z remote: Compressing objects: 77% (8444/10965)
+2022-10-27T05:36:18.8659128Z remote: Compressing objects: 78% (8553/10965)
+2022-10-27T05:36:18.8659555Z remote: Compressing objects: 79% (8663/10965)
+2022-10-27T05:36:18.8688825Z remote: Compressing objects: 80% (8772/10965)
+2022-10-27T05:36:18.8779984Z remote: Compressing objects: 81% (8882/10965)
+2022-10-27T05:36:18.8780591Z remote: Compressing objects: 82% (8992/10965)
+2022-10-27T05:36:18.8839685Z remote: Compressing objects: 83% (9101/10965)
+2022-10-27T05:36:18.8906377Z remote: Compressing objects: 84% (9211/10965)
+2022-10-27T05:36:18.8909267Z remote: Compressing objects: 85% (9321/10965)
+2022-10-27T05:36:18.8909956Z remote: Compressing objects: 86% (9430/10965)
+2022-10-27T05:36:18.8910536Z remote: Compressing objects: 87% (9540/10965)
+2022-10-27T05:36:18.8911145Z remote: Compressing objects: 88% (9650/10965)
+2022-10-27T05:36:18.8911776Z remote: Compressing objects: 89% (9759/10965)
+2022-10-27T05:36:18.8951128Z remote: Compressing objects: 90% (9869/10965)
+2022-10-27T05:36:18.9127733Z remote: Compressing objects: 91% (9979/10965)
+2022-10-27T05:36:18.9128171Z remote: Compressing objects: 92% (10088/10965)
+2022-10-27T05:36:18.9128609Z remote: Compressing objects: 93% (10198/10965)
+2022-10-27T05:36:18.9133927Z remote: Compressing objects: 94% (10308/10965)
+2022-10-27T05:36:18.9152257Z remote: Compressing objects: 95% (10417/10965)
+2022-10-27T05:36:18.9166692Z remote: Compressing objects: 96% (10527/10965)
+2022-10-27T05:36:18.9178013Z remote: Compressing objects: 97% (10637/10965)
+2022-10-27T05:36:18.9188202Z remote: Compressing objects: 98% (10746/10965)
+2022-10-27T05:36:18.9202595Z remote: Compressing objects: 99% (10856/10965)
+2022-10-27T05:36:18.9203422Z remote: Compressing objects: 100% (10965/10965)
+2022-10-27T05:36:18.9204293Z remote: Compressing objects: 100% (10965/10965), done.
+2022-10-27T05:36:18.9643118Z Receiving objects: 0% (1/12549)
+2022-10-27T05:36:19.5343020Z Receiving objects: 1% (126/12549)
+2022-10-27T05:36:19.5547619Z Receiving objects: 2% (251/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.6802499Z Receiving objects: 3% (377/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.6848774Z Receiving objects: 4% (502/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.6918314Z Receiving objects: 5% (628/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7013063Z Receiving objects: 6% (753/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7286047Z Receiving objects: 7% (879/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7436763Z Receiving objects: 8% (1004/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7550028Z Receiving objects: 9% (1130/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7787460Z Receiving objects: 10% (1255/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7893592Z Receiving objects: 11% (1381/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7964417Z Receiving objects: 12% (1506/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.7972529Z Receiving objects: 13% (1632/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.8080879Z Receiving objects: 14% (1757/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.8345622Z Receiving objects: 15% (1883/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.8638441Z Receiving objects: 16% (2008/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.8936447Z Receiving objects: 17% (2134/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.9178154Z Receiving objects: 18% (2259/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.9260786Z Receiving objects: 19% (2385/12549), 1.75 MiB | 3.48 MiB/s
+2022-10-27T05:36:19.9393291Z Receiving objects: 19% (2435/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:19.9632368Z Receiving objects: 20% (2510/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:19.9921544Z Receiving objects: 21% (2636/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.0107217Z Receiving objects: 22% (2761/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.0369762Z Receiving objects: 23% (2887/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.0569122Z Receiving objects: 24% (3012/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.0723597Z Receiving objects: 25% (3138/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.0869934Z Receiving objects: 26% (3263/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.1140123Z Receiving objects: 27% (3389/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.1316832Z Receiving objects: 28% (3514/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.1426255Z Receiving objects: 29% (3640/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.1574856Z Receiving objects: 30% (3765/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.1690424Z Receiving objects: 31% (3891/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.1856759Z Receiving objects: 32% (4016/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.2003719Z Receiving objects: 33% (4142/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.2128451Z Receiving objects: 34% (4267/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.2373132Z Receiving objects: 35% (4393/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.2632141Z Receiving objects: 36% (4518/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.2939431Z Receiving objects: 37% (4644/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.3274915Z Receiving objects: 38% (4769/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.3458463Z Receiving objects: 39% (4895/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.3681513Z Receiving objects: 40% (5020/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.3843488Z Receiving objects: 41% (5146/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.4250181Z Receiving objects: 42% (5271/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.4536213Z Receiving objects: 43% (5397/12549), 5.83 MiB | 5.83 MiB/s
+2022-10-27T05:36:20.4617089Z Receiving objects: 44% (5522/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.4783619Z Receiving objects: 45% (5648/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.4859599Z Receiving objects: 46% (5773/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.4931650Z Receiving objects: 47% (5899/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.5106605Z Receiving objects: 48% (6024/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.5200970Z Receiving objects: 49% (6150/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.5422557Z Receiving objects: 50% (6275/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:20.6547058Z Receiving objects: 51% (6400/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:21.0443771Z Receiving objects: 52% (6526/12549), 10.95 MiB | 7.30 MiB/s
+2022-10-27T05:36:21.1817778Z Receiving objects: 52% (6647/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.2302284Z Receiving objects: 53% (6651/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.2489598Z Receiving objects: 54% (6777/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.3284868Z Receiving objects: 55% (6902/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.3646886Z Receiving objects: 56% (7028/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.3983650Z Receiving objects: 57% (7153/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.4349926Z Receiving objects: 58% (7279/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.4697848Z Receiving objects: 59% (7404/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.4885011Z Receiving objects: 60% (7530/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.5194540Z Receiving objects: 61% (7655/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.9296042Z Receiving objects: 62% (7781/12549), 28.68 MiB | 13.54 MiB/s
+2022-10-27T05:36:21.9417402Z Receiving objects: 62% (7892/12549), 52.44 MiB | 18.21 MiB/s
+2022-10-27T05:36:22.2486679Z Receiving objects: 63% (7906/12549), 52.44 MiB | 18.21 MiB/s
+2022-10-27T05:36:22.6090348Z Receiving objects: 64% (8032/12549), 52.44 MiB | 18.21 MiB/s
+2022-10-27T05:36:22.6661080Z Receiving objects: 65% (8157/12549), 75.07 MiB | 22.21 MiB/s
+2022-10-27T05:36:22.7208247Z Receiving objects: 66% (8283/12549), 75.07 MiB | 22.21 MiB/s
+2022-10-27T05:36:22.7863776Z Receiving objects: 67% (8408/12549), 75.07 MiB | 22.21 MiB/s
+2022-10-27T05:36:22.8373169Z Receiving objects: 68% (8534/12549), 75.07 MiB | 22.21 MiB/s
+2022-10-27T05:36:22.8956416Z Receiving objects: 69% (8659/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:22.9260929Z Receiving objects: 70% (8785/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:22.9590581Z Receiving objects: 70% (8837/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.0657790Z Receiving objects: 71% (8910/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.0903691Z Receiving objects: 72% (9036/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.0992227Z Receiving objects: 73% (9161/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.1133106Z Receiving objects: 74% (9287/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.1304261Z Receiving objects: 75% (9412/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.1587550Z Receiving objects: 76% (9538/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.2736992Z Receiving objects: 77% (9663/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.2740076Z Receiving objects: 78% (9789/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.2994632Z Receiving objects: 79% (9914/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.3419146Z Receiving objects: 80% (10040/12549), 101.16 MiB | 26.07 MiB/s
+2022-10-27T05:36:23.3507115Z Receiving objects: 81% (10165/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.3603382Z Receiving objects: 82% (10291/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.3686272Z Receiving objects: 83% (10416/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.3750488Z Receiving objects: 84% (10542/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.3820341Z Receiving objects: 85% (10667/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.3895988Z Receiving objects: 86% (10793/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.3970448Z Receiving objects: 87% (10918/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.4142134Z Receiving objects: 88% (11044/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.4796088Z Receiving objects: 89% (11169/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5287511Z Receiving objects: 90% (11295/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5336228Z Receiving objects: 91% (11420/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5378046Z Receiving objects: 92% (11546/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5440975Z Receiving objects: 93% (11671/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5509602Z Receiving objects: 94% (11797/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5572754Z Receiving objects: 95% (11922/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5615446Z Receiving objects: 96% (12048/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5654171Z Receiving objects: 97% (12173/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5827062Z Receiving objects: 98% (12299/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5872285Z Receiving objects: 99% (12424/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5873322Z remote: Total 12549 (delta 1601), reused 7183 (delta 1450), pack-reused 0
+2022-10-27T05:36:23.5902379Z Receiving objects: 100% (12549/12549), 126.98 MiB | 28.99 MiB/s
+2022-10-27T05:36:23.5903011Z Receiving objects: 100% (12549/12549), 139.13 MiB | 29.83 MiB/s, done.
+2022-10-27T05:36:23.5950353Z Resolving deltas: 0% (0/1601)
+2022-10-27T05:36:23.6009625Z Resolving deltas: 1% (17/1601)
+2022-10-27T05:36:23.6040033Z Resolving deltas: 2% (33/1601)
+2022-10-27T05:36:23.6057851Z Resolving deltas: 3% (49/1601)
+2022-10-27T05:36:23.6072426Z Resolving deltas: 4% (65/1601)
+2022-10-27T05:36:23.6083467Z Resolving deltas: 5% (81/1601)
+2022-10-27T05:36:23.6093371Z Resolving deltas: 6% (97/1601)
+2022-10-27T05:36:23.6106250Z Resolving deltas: 7% (113/1601)
+2022-10-27T05:36:23.6119016Z Resolving deltas: 8% (129/1601)
+2022-10-27T05:36:23.6129503Z Resolving deltas: 9% (145/1601)
+2022-10-27T05:36:23.6155198Z Resolving deltas: 10% (161/1601)
+2022-10-27T05:36:23.6353928Z Resolving deltas: 11% (177/1601)
+2022-10-27T05:36:23.6373203Z Resolving deltas: 12% (193/1601)
+2022-10-27T05:36:23.6378714Z Resolving deltas: 13% (209/1601)
+2022-10-27T05:36:23.6386654Z Resolving deltas: 14% (225/1601)
+2022-10-27T05:36:23.6389141Z Resolving deltas: 15% (241/1601)
+2022-10-27T05:36:23.6389674Z Resolving deltas: 16% (257/1601)
+2022-10-27T05:36:23.6392302Z Resolving deltas: 17% (273/1601)
+2022-10-27T05:36:23.6392861Z Resolving deltas: 18% (289/1601)
+2022-10-27T05:36:23.6394168Z Resolving deltas: 19% (305/1601)
+2022-10-27T05:36:23.6394627Z Resolving deltas: 20% (321/1601)
+2022-10-27T05:36:23.6395739Z Resolving deltas: 21% (337/1601)
+2022-10-27T05:36:23.6397738Z Resolving deltas: 22% (353/1601)
+2022-10-27T05:36:23.6418913Z Resolving deltas: 23% (369/1601)
+2022-10-27T05:36:23.6431860Z Resolving deltas: 24% (385/1601)
+2022-10-27T05:36:23.6445159Z Resolving deltas: 25% (401/1601)
+2022-10-27T05:36:23.6470106Z Resolving deltas: 26% (417/1601)
+2022-10-27T05:36:23.6478765Z Resolving deltas: 27% (433/1601)
+2022-10-27T05:36:23.6488812Z Resolving deltas: 28% (449/1601)
+2022-10-27T05:36:23.6536619Z Resolving deltas: 29% (465/1601)
+2022-10-27T05:36:23.6642121Z Resolving deltas: 30% (481/1601)
+2022-10-27T05:36:23.6649990Z Resolving deltas: 31% (497/1601)
+2022-10-27T05:36:23.6667237Z Resolving deltas: 32% (513/1601)
+2022-10-27T05:36:23.6686758Z Resolving deltas: 33% (529/1601)
+2022-10-27T05:36:23.6707887Z Resolving deltas: 34% (545/1601)
+2022-10-27T05:36:23.6725136Z Resolving deltas: 35% (561/1601)
+2022-10-27T05:36:23.6748072Z Resolving deltas: 36% (577/1601)
+2022-10-27T05:36:23.6779790Z Resolving deltas: 37% (593/1601)
+2022-10-27T05:36:23.6799195Z Resolving deltas: 38% (609/1601)
+2022-10-27T05:36:23.6806737Z Resolving deltas: 39% (625/1601)
+2022-10-27T05:36:23.6807261Z Resolving deltas: 40% (641/1601)
+2022-10-27T05:36:23.6808652Z Resolving deltas: 41% (657/1601)
+2022-10-27T05:36:23.6809133Z Resolving deltas: 42% (673/1601)
+2022-10-27T05:36:23.6810413Z Resolving deltas: 43% (689/1601)
+2022-10-27T05:36:23.6810931Z Resolving deltas: 44% (705/1601)
+2022-10-27T05:36:23.6813160Z Resolving deltas: 45% (721/1601)
+2022-10-27T05:36:23.6813648Z Resolving deltas: 46% (737/1601)
+2022-10-27T05:36:23.6815230Z Resolving deltas: 47% (753/1601)
+2022-10-27T05:36:23.6815825Z Resolving deltas: 48% (769/1601)
+2022-10-27T05:36:23.6816545Z Resolving deltas: 49% (785/1601)
+2022-10-27T05:36:23.6816996Z Resolving deltas: 50% (801/1601)
+2022-10-27T05:36:23.6820662Z Resolving deltas: 51% (817/1601)
+2022-10-27T05:36:23.6826869Z Resolving deltas: 52% (833/1601)
+2022-10-27T05:36:23.6834350Z Resolving deltas: 53% (849/1601)
+2022-10-27T05:36:23.6838690Z Resolving deltas: 54% (865/1601)
+2022-10-27T05:36:23.6901937Z Resolving deltas: 55% (881/1601)
+2022-10-27T05:36:23.6910273Z Resolving deltas: 56% (897/1601)
+2022-10-27T05:36:23.6914911Z Resolving deltas: 57% (913/1601)
+2022-10-27T05:36:23.6919959Z Resolving deltas: 58% (929/1601)
+2022-10-27T05:36:23.6925039Z Resolving deltas: 59% (945/1601)
+2022-10-27T05:36:23.6930423Z Resolving deltas: 60% (961/1601)
+2022-10-27T05:36:23.6936636Z Resolving deltas: 61% (977/1601)
+2022-10-27T05:36:23.6940948Z Resolving deltas: 62% (993/1601)
+2022-10-27T05:36:23.6945203Z Resolving deltas: 63% (1009/1601)
+2022-10-27T05:36:23.6950455Z Resolving deltas: 64% (1025/1601)
+2022-10-27T05:36:23.6955894Z Resolving deltas: 65% (1041/1601)
+2022-10-27T05:36:23.6963475Z Resolving deltas: 66% (1057/1601)
+2022-10-27T05:36:23.6971175Z Resolving deltas: 67% (1073/1601)
+2022-10-27T05:36:23.6976635Z Resolving deltas: 68% (1089/1601)
+2022-10-27T05:36:23.6981312Z Resolving deltas: 69% (1105/1601)
+2022-10-27T05:36:23.6985904Z Resolving deltas: 70% (1121/1601)
+2022-10-27T05:36:23.6992594Z Resolving deltas: 71% (1137/1601)
+2022-10-27T05:36:23.6998192Z Resolving deltas: 72% (1153/1601)
+2022-10-27T05:36:23.7007380Z Resolving deltas: 73% (1169/1601)
+2022-10-27T05:36:23.7011828Z Resolving deltas: 74% (1185/1601)
+2022-10-27T05:36:23.7017464Z Resolving deltas: 75% (1201/1601)
+2022-10-27T05:36:23.7022072Z Resolving deltas: 76% (1217/1601)
+2022-10-27T05:36:23.7028804Z Resolving deltas: 77% (1233/1601)
+2022-10-27T05:36:23.7036183Z Resolving deltas: 78% (1249/1601)
+2022-10-27T05:36:23.7045495Z Resolving deltas: 79% (1265/1601)
+2022-10-27T05:36:23.7053133Z Resolving deltas: 80% (1281/1601)
+2022-10-27T05:36:23.7060580Z Resolving deltas: 81% (1297/1601)
+2022-10-27T05:36:23.7068147Z Resolving deltas: 82% (1313/1601)
+2022-10-27T05:36:23.7076976Z Resolving deltas: 83% (1329/1601)
+2022-10-27T05:36:23.7086492Z Resolving deltas: 84% (1345/1601)
+2022-10-27T05:36:23.7095647Z Resolving deltas: 85% (1361/1601)
+2022-10-27T05:36:23.7105602Z Resolving deltas: 86% (1377/1601)
+2022-10-27T05:36:23.7115126Z Resolving deltas: 87% (1393/1601)
+2022-10-27T05:36:23.7126091Z Resolving deltas: 88% (1409/1601)
+2022-10-27T05:36:23.7140284Z Resolving deltas: 89% (1425/1601)
+2022-10-27T05:36:23.7152944Z Resolving deltas: 90% (1441/1601)
+2022-10-27T05:36:23.7166471Z Resolving deltas: 91% (1457/1601)
+2022-10-27T05:36:23.7182235Z Resolving deltas: 92% (1473/1601)
+2022-10-27T05:36:23.7193741Z Resolving deltas: 93% (1489/1601)
+2022-10-27T05:36:23.7200908Z Resolving deltas: 94% (1505/1601)
+2022-10-27T05:36:23.7206009Z Resolving deltas: 95% (1521/1601)
+2022-10-27T05:36:23.7217441Z Resolving deltas: 96% (1537/1601)
+2022-10-27T05:36:23.7227139Z Resolving deltas: 97% (1553/1601)
+2022-10-27T05:36:23.7232360Z Resolving deltas: 98% (1569/1601)
+2022-10-27T05:36:23.7237277Z Resolving deltas: 99% (1585/1601)
+2022-10-27T05:36:23.7260045Z Resolving deltas: 100% (1601/1601)
+2022-10-27T05:36:23.7260585Z Resolving deltas: 100% (1601/1601), done.
+2022-10-27T05:36:24.1836658Z From https://github.com/tgstation/tgstation
+2022-10-27T05:36:24.1841998Z * [new ref] deb5c38b8299183d179ee993b8c40179d42cff9b -> pull/70831/merge
+2022-10-27T05:36:24.1863576Z ##[endgroup]
+2022-10-27T05:36:24.1864401Z ##[group]Determining the checkout info
+2022-10-27T05:36:24.1865502Z ##[endgroup]
+2022-10-27T05:36:24.1866142Z ##[group]Checking out the ref
+2022-10-27T05:36:24.1881799Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/70831/merge
+2022-10-27T05:36:25.2712079Z Updating files: 63% (7341/11578)
+2022-10-27T05:36:25.2955103Z Updating files: 64% (7410/11578)
+2022-10-27T05:36:25.3182103Z Updating files: 65% (7526/11578)
+2022-10-27T05:36:25.3457683Z Updating files: 66% (7642/11578)
+2022-10-27T05:36:25.3634985Z Updating files: 67% (7758/11578)
+2022-10-27T05:36:25.3911682Z Updating files: 68% (7874/11578)
+2022-10-27T05:36:25.4140426Z Updating files: 69% (7989/11578)
+2022-10-27T05:36:25.4605828Z Updating files: 70% (8105/11578)
+2022-10-27T05:36:25.4694230Z Updating files: 71% (8221/11578)
+2022-10-27T05:36:25.4797031Z Updating files: 72% (8337/11578)
+2022-10-27T05:36:25.4884154Z Updating files: 73% (8452/11578)
+2022-10-27T05:36:25.4964143Z Updating files: 74% (8568/11578)
+2022-10-27T05:36:25.5012437Z Updating files: 75% (8684/11578)
+2022-10-27T05:36:25.5524946Z Updating files: 76% (8800/11578)
+2022-10-27T05:36:25.5631017Z Updating files: 77% (8916/11578)
+2022-10-27T05:36:25.5661878Z Updating files: 78% (9031/11578)
+2022-10-27T05:36:25.5900449Z Updating files: 79% (9147/11578)
+2022-10-27T05:36:25.5995293Z Updating files: 80% (9263/11578)
+2022-10-27T05:36:25.6065920Z Updating files: 81% (9379/11578)
+2022-10-27T05:36:25.6129511Z Updating files: 82% (9494/11578)
+2022-10-27T05:36:25.6183947Z Updating files: 83% (9610/11578)
+2022-10-27T05:36:25.6242865Z Updating files: 84% (9726/11578)
+2022-10-27T05:36:25.6304255Z Updating files: 85% (9842/11578)
+2022-10-27T05:36:25.6362317Z Updating files: 86% (9958/11578)
+2022-10-27T05:36:25.6419669Z Updating files: 87% (10073/11578)
+2022-10-27T05:36:25.6513754Z Updating files: 88% (10189/11578)
+2022-10-27T05:36:25.6719291Z Updating files: 89% (10305/11578)
+2022-10-27T05:36:25.6854029Z Updating files: 90% (10421/11578)
+2022-10-27T05:36:25.7114915Z Updating files: 91% (10536/11578)
+2022-10-27T05:36:25.7172492Z Updating files: 92% (10652/11578)
+2022-10-27T05:36:25.7239118Z Updating files: 93% (10768/11578)
+2022-10-27T05:36:25.7311506Z Updating files: 94% (10884/11578)
+2022-10-27T05:36:25.7377728Z Updating files: 95% (11000/11578)
+2022-10-27T05:36:25.7429645Z Updating files: 96% (11115/11578)
+2022-10-27T05:36:25.7489697Z Updating files: 97% (11231/11578)
+2022-10-27T05:36:25.7601389Z Updating files: 98% (11347/11578)
+2022-10-27T05:36:25.7673788Z Updating files: 99% (11463/11578)
+2022-10-27T05:36:25.7674090Z Updating files: 100% (11578/11578)
+2022-10-27T05:36:25.7675326Z Updating files: 100% (11578/11578), done.
+2022-10-27T05:36:25.7839712Z Note: switching to 'refs/remotes/pull/70831/merge'.
+2022-10-27T05:36:25.7840374Z
+2022-10-27T05:36:25.7841364Z You are in 'detached HEAD' state. You can look around, make experimental
+2022-10-27T05:36:25.7842184Z changes and commit them, and you can discard any commits you make in this
+2022-10-27T05:36:25.7842925Z state without impacting any branches by switching back to a branch.
+2022-10-27T05:36:25.7843345Z
+2022-10-27T05:36:25.7843670Z If you want to create a new branch to retain commits you create, you may
+2022-10-27T05:36:25.7844575Z do so (now or later) by using -c with the switch command. Example:
+2022-10-27T05:36:25.7844969Z
+2022-10-27T05:36:25.7845632Z git switch -c
+2022-10-27T05:36:25.7845974Z
+2022-10-27T05:36:25.7846184Z Or undo this operation with:
+2022-10-27T05:36:25.7846473Z
+2022-10-27T05:36:25.7846644Z git switch -
+2022-10-27T05:36:25.7846900Z
+2022-10-27T05:36:25.7847288Z Turn off this advice by setting config variable advice.detachedHead to false
+2022-10-27T05:36:25.7847742Z
+2022-10-27T05:36:25.7848217Z HEAD is now at deb5c38 Merge 9618404f9ee7f23400ea062d5dacb13fda53ca75 into 8bb8ca9d67375d0bd58ceacbc6346f9e92fef872
+2022-10-27T05:36:25.7902871Z ##[endgroup]
+2022-10-27T05:36:25.7967741Z [command]/usr/bin/git log -1 --format='%H'
+2022-10-27T05:36:25.8007456Z 'deb5c38b8299183d179ee993b8c40179d42cff9b'
+2022-10-27T05:36:25.8392860Z ##[group]Run actions/cache@v3
+2022-10-27T05:36:25.8393138Z with:
+2022-10-27T05:36:25.8393346Z path: ~/BYOND
+2022-10-27T05:36:25.8393591Z key: Linux-byond-
+2022-10-27T05:36:25.8393834Z ##[endgroup]
+2022-10-27T05:36:26.3683068Z Received 4090426 of 4090426 (100.0%), 27.9 MBs/sec
+2022-10-27T05:36:26.3684533Z Cache Size: ~4 MB (4090426 B)
+2022-10-27T05:36:26.3746779Z [command]/usr/bin/tar --use-compress-program unzstd -xf /home/runner/work/_temp/937f79f1-ebfc-47b7-917c-b2d972625200/cache.tzst -P -C /home/runner/work/tgstation/tgstation
+2022-10-27T05:36:26.4280190Z Cache restored successfully
+2022-10-27T05:36:26.4546771Z Cache restored from key: Linux-byond-
+2022-10-27T05:36:26.4726864Z ##[group]Run sudo systemctl start mysql
+2022-10-27T05:36:26.4727297Z [36;1msudo systemctl start mysql[0m
+2022-10-27T05:36:26.4727646Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci;'[0m
+2022-10-27T05:36:26.4728040Z [36;1mmysql -u root -proot tg_ci < SQL/tgstation_schema.sql[0m
+2022-10-27T05:36:26.4728458Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;'[0m
+2022-10-27T05:36:26.4728905Z [36;1mmysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql[0m
+2022-10-27T05:36:26.4792977Z shell: /usr/bin/bash -e {0}
+2022-10-27T05:36:26.4793288Z ##[endgroup]
+2022-10-27T05:36:27.7358559Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-10-27T05:36:27.7519454Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-10-27T05:36:28.2899746Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-10-27T05:36:28.2998385Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-10-27T05:36:28.8181912Z ##[group]Run sudo dpkg --add-architecture i386
+2022-10-27T05:36:28.8182331Z [36;1msudo dpkg --add-architecture i386[0m
+2022-10-27T05:36:28.8182655Z [36;1msudo apt update || true[0m
+2022-10-27T05:36:28.8183020Z [36;1msudo apt install -o APT::Immediate-Configure=false libssl1.1:i386[0m
+2022-10-27T05:36:28.8183412Z [36;1mbash tools/ci/install_rust_g.sh[0m
+2022-10-27T05:36:28.8240260Z shell: /usr/bin/bash -e {0}
+2022-10-27T05:36:28.8240552Z ##[endgroup]
+2022-10-27T05:36:28.9970393Z
+2022-10-27T05:36:28.9971552Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+2022-10-27T05:36:28.9972082Z
+2022-10-27T05:36:29.1160704Z Hit:1 http://azure.archive.ubuntu.com/ubuntu focal InRelease
+2022-10-27T05:36:29.1162032Z Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
+2022-10-27T05:36:29.1173928Z Get:3 http://azure.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
+2022-10-27T05:36:29.1237735Z Get:4 http://azure.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
+2022-10-27T05:36:29.1254316Z Get:5 https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease [10.5 kB]
+2022-10-27T05:36:29.3429595Z Hit:6 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal InRelease
+2022-10-27T05:36:29.3928104Z Get:7 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2196 kB]
+2022-10-27T05:36:29.4661370Z Get:8 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 Packages [745 kB]
+2022-10-27T05:36:29.4777864Z Get:9 http://azure.archive.ubuntu.com/ubuntu focal-updates/main Translation-en [385 kB]
+2022-10-27T05:36:29.4885520Z Get:10 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [16.0 kB]
+2022-10-27T05:36:29.4922985Z Get:11 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [1381 kB]
+2022-10-27T05:36:29.5179949Z Get:12 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted i386 Packages [26.6 kB]
+2022-10-27T05:36:29.5181037Z Get:13 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted Translation-en [196 kB]
+2022-10-27T05:36:29.5217775Z Get:14 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted amd64 c-n-f Metadata [600 B]
+2022-10-27T05:36:29.5261778Z Get:15 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe i386 Packages [697 kB]
+2022-10-27T05:36:29.5395090Z Get:16 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [972 kB]
+2022-10-27T05:36:29.6000339Z Get:17 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [221 kB]
+2022-10-27T05:36:29.6049853Z Get:18 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [21.8 kB]
+2022-10-27T05:36:29.6070146Z Get:19 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [29.9 kB]
+2022-10-27T05:36:29.6088570Z Get:20 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse i386 Packages [9820 B]
+2022-10-27T05:36:29.6106647Z Get:21 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse Translation-en [7940 B]
+2022-10-27T05:36:29.6123231Z Get:22 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 c-n-f Metadata [664 B]
+2022-10-27T05:36:29.6149675Z Get:23 http://azure.archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [45.7 kB]
+2022-10-27T05:36:29.6174434Z Get:24 http://azure.archive.ubuntu.com/ubuntu focal-backports/main i386 Packages [36.1 kB]
+2022-10-27T05:36:29.6192255Z Get:25 http://azure.archive.ubuntu.com/ubuntu focal-backports/main amd64 c-n-f Metadata [1420 B]
+2022-10-27T05:36:29.6212125Z Get:26 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe i386 Packages [13.5 kB]
+2022-10-27T05:36:29.6231501Z Get:27 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [23.9 kB]
+2022-10-27T05:36:29.6249547Z Get:28 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [860 B]
+2022-10-27T05:36:29.6279478Z Get:29 https://packages.microsoft.com/ubuntu/20.04/prod focal/main armhf Packages [28.4 kB]
+2022-10-27T05:36:29.6299516Z Get:30 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages [200 kB]
+2022-10-27T05:36:29.6330517Z Get:31 https://packages.microsoft.com/ubuntu/20.04/prod focal/main arm64 Packages [40.0 kB]
+2022-10-27T05:36:29.7542573Z Get:32 http://azure.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [1821 kB]
+2022-10-27T05:36:29.7753589Z Get:33 http://azure.archive.ubuntu.com/ubuntu focal-security/main i386 Packages [514 kB]
+2022-10-27T05:36:29.8302849Z Get:34 http://azure.archive.ubuntu.com/ubuntu focal-security/main Translation-en [301 kB]
+2022-10-27T05:36:29.8323140Z Get:35 http://azure.archive.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [11.2 kB]
+2022-10-27T05:36:29.8354364Z Get:36 http://azure.archive.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1289 kB]
+2022-10-27T05:36:29.8541844Z Get:37 http://azure.archive.ubuntu.com/ubuntu focal-security/restricted Translation-en [183 kB]
+2022-10-27T05:36:29.8606075Z Get:38 http://azure.archive.ubuntu.com/ubuntu focal-security/universe i386 Packages [566 kB]
+2022-10-27T05:36:29.8700343Z Get:39 http://azure.archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [743 kB]
+2022-10-27T05:36:29.8786533Z Get:40 http://azure.archive.ubuntu.com/ubuntu focal-security/universe Translation-en [137 kB]
+2022-10-27T05:36:29.8822497Z Get:41 http://azure.archive.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [15.3 kB]
+2022-10-27T05:36:30.0852283Z Get:42 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 Packages [15.2 kB]
+2022-10-27T05:36:40.2623192Z Fetched 13.2 MB in 3s (4825 kB/s)
+2022-10-27T05:36:41.6081931Z Reading package lists...
+2022-10-27T05:36:41.8619438Z Building dependency tree...
+2022-10-27T05:36:41.8635085Z Reading state information...
+2022-10-27T05:36:41.9709754Z 40 packages can be upgraded. Run 'apt list --upgradable' to see them.
+2022-10-27T05:36:41.9833939Z
+2022-10-27T05:36:41.9834743Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+2022-10-27T05:36:41.9835161Z
+2022-10-27T05:36:42.0520184Z Reading package lists...
+2022-10-27T05:36:42.3196647Z Building dependency tree...
+2022-10-27T05:36:42.3215128Z Reading state information...
+2022-10-27T05:36:42.5269417Z The following additional packages will be installed:
+2022-10-27T05:36:42.5270751Z gcc-11-base:i386 libc6:i386 libcrypt1:i386 libgcc-s1 libgcc-s1:i386
+2022-10-27T05:36:42.5273717Z libidn2-0:i386 libunistring2:i386
+2022-10-27T05:36:42.5281075Z Suggested packages:
+2022-10-27T05:36:42.5281649Z glibc-doc:i386 locales:i386
+2022-10-27T05:36:42.6054870Z The following NEW packages will be installed:
+2022-10-27T05:36:42.6060238Z gcc-11-base:i386 libc6:i386 libcrypt1:i386 libgcc-s1:i386 libidn2-0:i386
+2022-10-27T05:36:42.6065188Z libssl1.1:i386 libunistring2:i386
+2022-10-27T05:36:42.6071434Z The following packages will be upgraded:
+2022-10-27T05:36:42.6077741Z libgcc-s1
+2022-10-27T05:36:42.6524605Z 1 upgraded, 7 newly installed, 0 to remove and 39 not upgraded.
+2022-10-27T05:36:42.7316437Z Need to get 4528 kB of archives.
+2022-10-27T05:36:42.7317772Z After this operation, 19.3 MB of additional disk space will be used.
+2022-10-27T05:36:42.7318985Z Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libcrypt1 i386 1:4.4.10-10ubuntu4 [90.9 kB]
+2022-10-27T05:36:42.7516533Z Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 libc6 i386 2.31-0ubuntu9.9 [2580 kB]
+2022-10-27T05:36:42.8180039Z Get:3 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libunistring2 i386 0.9.10-2 [377 kB]
+2022-10-27T05:36:42.8382506Z Get:4 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libidn2-0 i386 2.2.0-2 [51.4 kB]
+2022-10-27T05:36:42.8544550Z Get:5 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 libssl1.1 i386 1.1.1f-1ubuntu2.16 [1318 kB]
+2022-10-27T05:36:42.8714868Z Get:6 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 gcc-11-base i386 11.1.0-1ubuntu1~20.04 [19.0 kB]
+2022-10-27T05:36:43.1118432Z Get:7 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main amd64 libgcc-s1 amd64 11.1.0-1ubuntu1~20.04 [42.1 kB]
+2022-10-27T05:36:43.3528563Z Get:8 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 libgcc-s1 i386 11.1.0-1ubuntu1~20.04 [50.0 kB]
+2022-10-27T05:36:43.9483382Z Preconfiguring packages ...
+2022-10-27T05:36:44.0566590Z Fetched 4528 kB in 1s (5511 kB/s)
+2022-10-27T05:36:44.0950557Z Selecting previously unselected package gcc-11-base:i386.
+2022-10-27T05:36:44.1257600Z (Reading database ...
+2022-10-27T05:36:44.1257941Z (Reading database ... 5%
+2022-10-27T05:36:44.1258207Z (Reading database ... 10%
+2022-10-27T05:36:44.1258475Z (Reading database ... 15%
+2022-10-27T05:36:44.1260572Z (Reading database ... 20%
+2022-10-27T05:36:44.1261165Z (Reading database ... 25%
+2022-10-27T05:36:44.1261680Z (Reading database ... 30%
+2022-10-27T05:36:44.1261936Z (Reading database ... 35%
+2022-10-27T05:36:44.1262196Z (Reading database ... 40%
+2022-10-27T05:36:44.1262482Z (Reading database ... 45%
+2022-10-27T05:36:44.1267425Z (Reading database ... 50%
+2022-10-27T05:36:44.1661119Z (Reading database ... 55%
+2022-10-27T05:36:44.2102408Z (Reading database ... 60%
+2022-10-27T05:36:44.2442960Z (Reading database ... 65%
+2022-10-27T05:36:44.3240866Z (Reading database ... 70%
+2022-10-27T05:36:44.4296824Z (Reading database ... 75%
+2022-10-27T05:36:44.5004841Z (Reading database ... 80%
+2022-10-27T05:36:44.5658810Z (Reading database ... 85%
+2022-10-27T05:36:44.6401590Z (Reading database ... 90%
+2022-10-27T05:36:44.7577336Z (Reading database ... 95%
+2022-10-27T05:36:44.7577685Z (Reading database ... 100%
+2022-10-27T05:36:44.7578335Z (Reading database ... 242030 files and directories currently installed.)
+2022-10-27T05:36:44.7691053Z Preparing to unpack .../0-gcc-11-base_11.1.0-1ubuntu1~20.04_i386.deb ...
+2022-10-27T05:36:44.7764075Z Unpacking gcc-11-base:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-10-27T05:36:44.8625179Z Preparing to unpack .../1-libgcc-s1_11.1.0-1ubuntu1~20.04_amd64.deb ...
+2022-10-27T05:36:44.8693479Z Unpacking libgcc-s1:amd64 (11.1.0-1ubuntu1~20.04) over (10.3.0-1ubuntu1~20.04) ...
+2022-10-27T05:36:44.9142991Z Selecting previously unselected package libgcc-s1:i386.
+2022-10-27T05:36:44.9390148Z Preparing to unpack .../2-libgcc-s1_11.1.0-1ubuntu1~20.04_i386.deb ...
+2022-10-27T05:36:44.9401962Z Unpacking libgcc-s1:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-10-27T05:36:44.9820851Z Selecting previously unselected package libcrypt1:i386.
+2022-10-27T05:36:45.0046331Z Preparing to unpack .../3-libcrypt1_1%3a4.4.10-10ubuntu4_i386.deb ...
+2022-10-27T05:36:45.0084974Z Unpacking libcrypt1:i386 (1:4.4.10-10ubuntu4) ...
+2022-10-27T05:36:45.0740528Z Selecting previously unselected package libc6:i386.
+2022-10-27T05:36:45.1001786Z Preparing to unpack .../4-libc6_2.31-0ubuntu9.9_i386.deb ...
+2022-10-27T05:36:45.2548577Z Unpacking libc6:i386 (2.31-0ubuntu9.9) ...
+2022-10-27T05:36:45.5789406Z Replacing files in old package libc6-i386 (2.31-0ubuntu9.9) ...
+2022-10-27T05:36:45.6171109Z Selecting previously unselected package libunistring2:i386.
+2022-10-27T05:36:45.6439642Z Preparing to unpack .../5-libunistring2_0.9.10-2_i386.deb ...
+2022-10-27T05:36:45.6457939Z Unpacking libunistring2:i386 (0.9.10-2) ...
+2022-10-27T05:36:45.7367630Z Selecting previously unselected package libidn2-0:i386.
+2022-10-27T05:36:45.7631354Z Preparing to unpack .../6-libidn2-0_2.2.0-2_i386.deb ...
+2022-10-27T05:36:45.7646777Z Unpacking libidn2-0:i386 (2.2.0-2) ...
+2022-10-27T05:36:45.8312915Z Selecting previously unselected package libssl1.1:i386.
+2022-10-27T05:36:45.8579345Z Preparing to unpack .../7-libssl1.1_1.1.1f-1ubuntu2.16_i386.deb ...
+2022-10-27T05:36:45.8593568Z Unpacking libssl1.1:i386 (1.1.1f-1ubuntu2.16) ...
+2022-10-27T05:36:46.0508711Z Setting up gcc-11-base:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-10-27T05:36:46.0569280Z Setting up libgcc-s1:amd64 (11.1.0-1ubuntu1~20.04) ...
+2022-10-27T05:36:46.0623686Z Setting up libgcc-s1:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-10-27T05:36:46.0684045Z Setting up libcrypt1:i386 (1:4.4.10-10ubuntu4) ...
+2022-10-27T05:36:46.0722619Z Setting up libc6:i386 (2.31-0ubuntu9.9) ...
+2022-10-27T05:36:46.3144297Z Setting up libssl1.1:i386 (1.1.1f-1ubuntu2.16) ...
+2022-10-27T05:36:46.4510680Z Setting up libunistring2:i386 (0.9.10-2) ...
+2022-10-27T05:36:46.4557850Z Setting up libidn2-0:i386 (2.2.0-2) ...
+2022-10-27T05:36:46.4635629Z Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
+2022-10-27T05:36:49.2567467Z 2022-10-27 05:36:49 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/127494547/e00cfb90-5ecf-4a55-a41c-c1e4899def3b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221027%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221027T053639Z&X-Amz-Expires=300&X-Amz-Signature=ad13811b53df08aab94680ba4bde27d347cafd7f9230584b43dd2d8d4a61a8be&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=127494547&response-content-disposition=attachment%3B%20filename%3Dlibrust_g.so&response-content-type=application%2Foctet-stream [10822488/10822488] -> "/home/runner/.byond/bin/librust_g.so" [1]
+2022-10-27T05:36:49.2675883Z linux-gate.so.1 (0xf7ef1000)
+2022-10-27T05:36:49.2679615Z libssl.so.1.1 => /lib/i386-linux-gnu/libssl.so.1.1 (0xf7735000)
+2022-10-27T05:36:49.2681965Z libcrypto.so.1.1 => /lib/i386-linux-gnu/libcrypto.so.1.1 (0xf747d000)
+2022-10-27T05:36:49.2682327Z libz.so.1 => /lib32/libz.so.1 (0xf745f000)
+2022-10-27T05:36:49.2682794Z libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7440000)
+2022-10-27T05:36:49.2683314Z libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf741d000)
+2022-10-27T05:36:49.2683950Z libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7318000)
+2022-10-27T05:36:49.2684513Z libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7312000)
+2022-10-27T05:36:49.2685065Z libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7123000)
+2022-10-27T05:36:49.2685549Z /lib/ld-linux.so.2 (0xf7ef3000)
+2022-10-27T05:36:49.2720426Z ##[group]Run bash tools/ci/install_auxlua.sh
+2022-10-27T05:36:49.2720821Z [36;1mbash tools/ci/install_auxlua.sh[0m
+2022-10-27T05:36:49.2778014Z shell: /usr/bin/bash -e {0}
+2022-10-27T05:36:49.2778299Z ##[endgroup]
+2022-10-27T05:36:49.3631078Z 2022-10-27 05:36:49 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/473295481/bb55dc2f-8248-4032-ad66-b80cb61a84f3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221027%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221027T053639Z&X-Amz-Expires=300&X-Amz-Signature=04365004cef88fe3f1f8b45d89cffc1436482991f928c534963ff890dbc7d62d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=473295481&response-content-disposition=attachment%3B%20filename%3Dlibauxlua.so&response-content-type=application%2Foctet-stream [5781068/5781068] -> "/home/runner/.byond/bin/libauxlua.so" [1]
+2022-10-27T05:36:49.3764506Z linux-gate.so.1 (0xf7f4d000)
+2022-10-27T05:36:49.3765376Z libstdc++.so.6 => /lib32/libstdc++.so.6 (0xf7b46000)
+2022-10-27T05:36:49.3769032Z libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7b27000)
+2022-10-27T05:36:49.3769816Z libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7b04000)
+2022-10-27T05:36:49.3772336Z libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf79ff000)
+2022-10-27T05:36:49.3773288Z libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf79f9000)
+2022-10-27T05:36:49.3773950Z libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf780a000)
+2022-10-27T05:36:49.3774971Z /lib/ld-linux.so.2 (0xf7f4f000)
+2022-10-27T05:36:49.3802076Z ##[group]Run bash tools/ci/install_byond.sh
+2022-10-27T05:36:49.3802456Z [36;1mbash tools/ci/install_byond.sh[0m
+2022-10-27T05:36:49.3802798Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2022-10-27T05:36:49.3803186Z [36;1mtools/build/build --ci dm -DCIBUILDING -DANSICOLORS[0m
+2022-10-27T05:36:49.3873455Z shell: /usr/bin/bash -e {0}
+2022-10-27T05:36:49.3873887Z ##[endgroup]
+2022-10-27T05:36:49.4001691Z Setting up BYOND.
+2022-10-27T05:36:49.4159362Z % Total % Received % Xferd Average Speed Time Time Time Current
+2022-10-27T05:36:49.4160632Z Dload Upload Total Spent Left Speed
+2022-10-27T05:36:49.4160890Z
+2022-10-27T05:36:49.5018021Z 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
+2022-10-27T05:36:49.5019163Z 100 4021k 100 4021k 0 0 46.1M 0 --:--:-- --:--:-- --:--:-- 46.1M
+2022-10-27T05:36:49.5066653Z Archive: byond.zip
+2022-10-27T05:36:49.5067255Z creating: byond/
+2022-10-27T05:36:49.5068302Z creating: byond/key/
+2022-10-27T05:36:49.5068798Z creating: byond/web/
+2022-10-27T05:36:49.5070185Z inflating: byond/web/child.dms
+2022-10-27T05:36:49.5071730Z inflating: byond/web/button.dms
+2022-10-27T05:36:49.5073932Z inflating: byond/web/input.dms
+2022-10-27T05:36:49.5074416Z inflating: byond/web/text.dms
+2022-10-27T05:36:49.5198750Z inflating: byond/web/webclient.dart.js
+2022-10-27T05:36:49.5199410Z inflating: byond/web/verbmenu.dms
+2022-10-27T05:36:49.5200216Z inflating: byond/web/defaultSkin.dms
+2022-10-27T05:36:49.5201953Z inflating: byond/web/hotbar.dms
+2022-10-27T05:36:49.5203581Z inflating: byond/web/label.dms
+2022-10-27T05:36:49.5204889Z inflating: byond/web/alert.dms
+2022-10-27T05:36:49.5206329Z inflating: byond/web/message.dms
+2022-10-27T05:36:49.5207259Z inflating: byond/web/drag.png
+2022-10-27T05:36:49.5208742Z inflating: byond/web/map.dms
+2022-10-27T05:36:49.5210398Z inflating: byond/web/splashlogo.png
+2022-10-27T05:36:49.5210926Z inflating: byond/web/drop.png
+2022-10-27T05:36:49.5332544Z inflating: byond/web/ext.js
+2022-10-27T05:36:49.5333175Z inflating: byond/web/file.dms
+2022-10-27T05:36:49.5334369Z inflating: byond/web/grid.dms
+2022-10-27T05:36:49.5336323Z inflating: byond/web/bar.dms
+2022-10-27T05:36:49.5339986Z inflating: byond/web/dpad.dms
+2022-10-27T05:36:49.5341094Z inflating: byond/web/output.dms
+2022-10-27T05:36:49.5343046Z inflating: byond/web/tab.dms
+2022-10-27T05:36:49.5345100Z inflating: byond/web/info.dms
+2022-10-27T05:36:49.5346744Z inflating: byond/web/color.dms
+2022-10-27T05:36:49.5347953Z inflating: byond/web/gamepad.dms
+2022-10-27T05:36:49.5349805Z inflating: byond/web/browser.dms
+2022-10-27T05:36:49.5350264Z inflating: byond/web/status.dms
+2022-10-27T05:36:49.5351241Z inflating: byond/web/any.dms
+2022-10-27T05:36:49.5352302Z inflating: byond/web/pane.dms
+2022-10-27T05:36:49.5354423Z inflating: byond/web/pop.dms
+2022-10-27T05:36:49.5355613Z inflating: byond/license.txt
+2022-10-27T05:36:49.5357084Z inflating: byond/legal.txt
+2022-10-27T05:36:49.5358519Z inflating: byond/Makefile
+2022-10-27T05:36:49.5358970Z creating: byond/man/
+2022-10-27T05:36:49.5359627Z creating: byond/man/man6/
+2022-10-27T05:36:49.5361148Z inflating: byond/man/man6/DreamDaemon.6
+2022-10-27T05:36:49.5361949Z inflating: byond/man/man6/DreamMaker.6
+2022-10-27T05:36:49.5362715Z creating: byond/lib/
+2022-10-27T05:36:49.5362992Z creating: byond/host/
+2022-10-27T05:36:49.5365318Z inflating: byond/host/readme.html
+2022-10-27T05:36:49.5366506Z inflating: byond/host/readme-unix.txt
+2022-10-27T05:36:49.5366902Z creating: byond/host/home/
+2022-10-27T05:36:49.5367533Z creating: byond/host/home/root/
+2022-10-27T05:36:49.5367822Z creating: byond/host/home/root/byond/
+2022-10-27T05:36:49.5368496Z creating: byond/host/home/root/byond/tools/
+2022-10-27T05:36:49.5369225Z creating: byond/host/home/root/byond/tools/root/
+2022-10-27T05:36:49.5374569Z inflating: byond/host/home/root/byond/tools/root/root.dmb
+2022-10-27T05:36:49.5375251Z creating: byond/host/shared/
+2022-10-27T05:36:49.5375559Z creating: byond/host/shared/byond/
+2022-10-27T05:36:49.5376268Z creating: byond/host/shared/byond/tools/
+2022-10-27T05:36:49.5376595Z creating: byond/host/shared/byond/tools/ftp/
+2022-10-27T05:36:49.5379616Z inflating: byond/host/shared/byond/tools/ftp/ftp.dmb
+2022-10-27T05:36:49.5380174Z creating: byond/host/shared/byond/tools/admin/
+2022-10-27T05:36:49.5386313Z inflating: byond/host/shared/byond/tools/admin/admin.dmb
+2022-10-27T05:36:49.5386945Z creating: byond/host/shared-web/
+2022-10-27T05:36:49.5387681Z creating: byond/host/shared-web/web/
+2022-10-27T05:36:49.5388584Z creating: byond/host/shared-web/web/tools/
+2022-10-27T05:36:49.5389008Z creating: byond/host/shared-web/web/tools/admin/
+2022-10-27T05:36:49.5394728Z inflating: byond/host/shared-web/web/tools/admin/index.dmb
+2022-10-27T05:36:49.5403477Z inflating: byond/host/host.dmb
+2022-10-27T05:36:49.5403779Z inflating: byond/host/host.start
+2022-10-27T05:36:49.5405103Z inflating: byond/host/hostconf.orig
+2022-10-27T05:36:49.5406328Z inflating: byond/host/hostconf.txt
+2022-10-27T05:36:49.5407507Z inflating: byond/readme.txt
+2022-10-27T05:36:49.5407795Z creating: byond/bin/
+2022-10-27T05:36:49.5408558Z inflating: byond/bin/byondexec
+2022-10-27T05:36:49.5411293Z inflating: byond/bin/DreamDownload
+2022-10-27T05:36:49.6175092Z inflating: byond/bin/libbyond.so
+2022-10-27T05:36:49.6348503Z inflating: byond/bin/libext.so
+2022-10-27T05:36:49.6351968Z inflating: byond/bin/DreamDaemon
+2022-10-27T05:36:49.6355363Z inflating: byond/bin/DreamMaker
+2022-10-27T05:36:49.6355666Z creating: byond/cfg/
+2022-10-27T05:36:49.6356545Z inflating: byond/cfg/release.txt
+2022-10-27T05:36:49.6621069Z ***************************
+2022-10-27T05:36:49.6621919Z Now run the following command:
+2022-10-27T05:36:49.6629708Z
+2022-10-27T05:36:49.6640241Z source /home/runner/BYOND/byond/bin/byondsetup
+2022-10-27T05:36:49.6652476Z
+2022-10-27T05:36:49.6657262Z If it generates errors, your shell is not compatible with 'sh', so you will
+2022-10-27T05:36:49.6663166Z have to edit byondsetup and make it work with your shell. If the script works, you should be able to run DreamDaemon.
+2022-10-27T05:36:49.6673259Z
+2022-10-27T05:36:49.6679431Z IMPORTANT: once you have the script working, you must add the above line
+2022-10-27T05:36:49.6685348Z to your startup script. The name of your startup script depends on the
+2022-10-27T05:36:49.6691552Z shell you use. Typical ones are .profile or .bash_profile.
+2022-10-27T05:36:49.6701933Z
+2022-10-27T05:36:49.6708492Z Once everything is working, you can find out more about the software
+2022-10-27T05:36:49.6714992Z by doing 'man DreamDaemon'. A host server has also been included
+2022-10-27T05:36:49.6720470Z so edit host/hostconf.txt and boot up your world server!
+2022-10-27T05:36:49.6726217Z ***************************
+2022-10-27T05:36:49.7622481Z Using system-wide Node v16.18.0
+2022-10-27T05:36:49.9527326Z :: Juke Build version 0.8.1
+2022-10-27T05:36:50.2530342Z => Starting 'dm'
+2022-10-27T05:36:50.2555016Z :: Using defines: CBT, CIBUILDING, ANSICOLORS
+2022-10-27T05:36:50.3319179Z DM compiler version 514.1588
+2022-10-27T05:36:50.3319810Z loading tgstation.m.dme
+2022-10-27T05:36:59.9636752Z loading interface/skin.dmf
+2022-10-27T05:37:57.7759644Z loading map_files/generic/CentCom.dmm
+2022-10-27T05:37:58.7594328Z saving tgstation.m.dmb (DEBUG mode)
+2022-10-27T05:37:59.9601921Z tgstation.m.dmb - 0 errors, 0 warnings (10/27/22 5:37 am)
+2022-10-27T05:37:59.9602721Z Total time: 1:09
+2022-10-27T05:38:00.9791168Z => Finished 'dm' in 70.727s
+2022-10-27T05:38:00.9795780Z => Done in 71.025s
+2022-10-27T05:38:00.9907775Z ##[group]Run source $HOME/BYOND/byond/bin/byondsetup
+2022-10-27T05:38:00.9908333Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2022-10-27T05:38:00.9908714Z [36;1mbash tools/ci/run_server.sh metastation[0m
+2022-10-27T05:38:00.9968243Z shell: /usr/bin/bash -e {0}
+2022-10-27T05:38:00.9968682Z ##[endgroup]
+2022-10-27T05:38:01.0105430Z Testing metastation
+2022-10-27T05:38:01.2543112Z cp: cannot stat 'tgui/packages/tgfont/dist/*': No such file or directory
+2022-10-27T05:38:01.2724951Z Thu Oct 27 05:38:01 2022
+2022-10-27T05:38:01.2725544Z World opened on network port 42427.
+2022-10-27T05:38:01.2726492Z Welcome BYOND! (5.0 Public Version 514.1588)
+2022-10-27T05:38:23.7107759Z 864 global variables
+2022-10-27T05:38:24.4933392Z World loaded at 05:38:24!
+2022-10-27T05:38:24.5429202Z Running /tg/ revision:
+2022-10-27T05:38:24.5429682Z No commit information
+2022-10-27T05:38:24.5512784Z Loading config file config.txt...
+2022-10-27T05:38:24.5516700Z Loading config file maps.txt...
+2022-10-27T05:38:24.5547604Z Unable to locate admins backup file.
+2022-10-27T05:38:25.5745156Z Initialized Title Screen subsystem within 0.01 seconds!
+2022-10-27T05:38:25.5745917Z Initialized Server Tasks subsystem within 0 seconds!
+2022-10-27T05:38:25.5746607Z Initialized Input subsystem within 0 seconds!
+2022-10-27T05:38:25.5814387Z Initialized Profiler subsystem within 0 seconds!
+2022-10-27T05:38:25.5814809Z Initialized Database subsystem within 0 seconds!
+2022-10-27T05:38:25.5816091Z Initialized Blackbox subsystem within 0 seconds!
+2022-10-27T05:38:25.5819066Z Initialized Sounds subsystem within 0 seconds!
+2022-10-27T05:38:25.6001394Z Initialized Instruments subsystem within 0.02 seconds!
+2022-10-27T05:38:25.9816971Z Initialized Greyscale subsystem within 0.38 seconds!
+2022-10-27T05:38:25.9817528Z Initialized Vis contents overlays subsystem within 0 seconds!
+2022-10-27T05:38:25.9818032Z Initialized Security Level subsystem within 0 seconds!
+2022-10-27T05:38:25.9848043Z Initialized Station subsystem within 0 seconds!
+2022-10-27T05:38:25.9865647Z Initialized Quirks subsystem within 0 seconds!
+2022-10-27T05:38:26.0034062Z Initialized Reagents subsystem within 0.02 seconds!
+2022-10-27T05:38:26.0038506Z Initialized Events subsystem within 0 seconds!
+2022-10-27T05:38:26.0098384Z Initialized IDs and Access subsystem within 0.01 seconds!
+2022-10-27T05:38:26.0098867Z Initialized Jobs subsystem within 0 seconds!
+2022-10-27T05:38:26.0099897Z Initialized AI movement subsystem within 0 seconds!
+2022-10-27T05:38:26.0126533Z Initialized Ticker subsystem within 0 seconds!
+2022-10-27T05:38:26.0128286Z Initialized AI Controller Ticker subsystem within 0 seconds!
+2022-10-27T05:38:26.0134279Z Initialized AI Behavior Ticker subsystem within 0 seconds!
+2022-10-27T05:38:26.0287435Z Initialized Trading Card Game subsystem within 0.02 seconds!
+2022-10-27T05:38:26.0290443Z Loading MetaStation...
+2022-10-27T05:38:27.6774174Z Loaded Station in 1.6s!
+2022-10-27T05:38:28.4727719Z Loaded Lavaland in 0.7s!
+2022-10-27T05:38:29.4722711Z Ruin loader finished with 0 left to spend.
+2022-10-27T05:38:29.5285012Z Ruin loader finished with 0 left to spend.
+2022-10-27T05:38:29.9352644Z Cave Generator finished in 0.4s!
+2022-10-27T05:38:29.9775541Z Cave Generator finished in 0s!
+2022-10-27T05:38:31.0315436Z Initialized Mapping subsystem within 5 seconds!
+2022-10-27T05:38:55.0060672Z The BYOND hub reports that port 42427 is not reachable.
+2022-10-27T05:38:57.9364779Z Initialized Early Assets subsystem within 26.9 seconds!
+2022-10-27T05:38:57.9769589Z Initialized Research subsystem within 0.04 seconds!
+2022-10-27T05:38:57.9771028Z Initialized Time Tracking subsystem within 0 seconds!
+2022-10-27T05:38:58.0098137Z Initialized Networks subsystem within 0.03 seconds!
+2022-10-27T05:38:58.0343859Z Initialized Spatial Grid subsystem within 0.02 seconds!
+2022-10-27T05:38:58.0348414Z Initialized Economy subsystem within 0 seconds!
+2022-10-27T05:38:58.0355826Z Initialized Restaurant subsystem within 0 seconds!
+2022-10-27T05:39:34.2891379Z ## NOTICE: morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!
+2022-10-27T05:39:36.5387306Z Initialized Atoms subsystem within 38.5 seconds!
+2022-10-27T05:39:36.5532145Z Initialized Language subsystem within 0.01 seconds!
+2022-10-27T05:39:36.6439410Z Initialized Machines subsystem within 0.09 seconds!
+2022-10-27T05:39:36.6445388Z Initialized Skills subsystem within 0 seconds!
+2022-10-27T05:39:36.6446275Z Initialized Addiction subsystem within 0 seconds!
+2022-10-27T05:39:36.6458190Z Initialized Blackmarket subsystem within 0 seconds!
+2022-10-27T05:39:36.6461637Z Initialized Disease subsystem within 0 seconds!
+2022-10-27T05:39:36.6462460Z Initialized Fluid subsystem within 0 seconds!
+2022-10-27T05:39:36.6463706Z Initialized Smoke subsystem within 0 seconds!
+2022-10-27T05:39:36.6464484Z Initialized Foam subsystem within 0 seconds!
+2022-10-27T05:39:36.6465284Z Initialized Lag Switch subsystem within 0 seconds!
+2022-10-27T05:39:36.6685670Z Initialized Library Loading subsystem within 0.02 seconds!
+2022-10-27T05:39:37.0988919Z Initialized Lua Scripting subsystem within 0.43 seconds!
+2022-10-27T05:39:37.0994800Z Initialized Night Shift subsystem within 0 seconds!
+2022-10-27T05:39:37.0996305Z Initialized Sun subsystem within 0 seconds!
+2022-10-27T05:39:37.1013421Z Initialized Traitor subsystem within 0 seconds!
+2022-10-27T05:39:37.1246657Z Initialized Wardrobe subsystem within 0.02 seconds!
+2022-10-27T05:39:37.1247676Z Initialized Weather subsystem within 0 seconds!
+2022-10-27T05:39:37.1248899Z Initialized Wiremod Composite Templates subsystem within 0 seconds!
+2022-10-27T05:39:42.0567267Z Initialized Atmospherics subsystem within 4.93 seconds!
+2022-10-27T05:39:42.0584101Z Initialized Persistence subsystem within 0 seconds!
+2022-10-27T05:39:42.0589723Z Initialized Persistent Paintings subsystem within 0 seconds!
+2022-10-27T05:39:42.0594808Z Initialized Vote subsystem within 0 seconds!
+2022-10-27T05:39:47.1134557Z Initialized Assets subsystem within 5.05 seconds!
+2022-10-27T05:39:49.3480025Z Initialized Icon Smoothing subsystem within 2.23 seconds!
+2022-10-27T05:39:49.3521346Z Initialized XKeyScore subsystem within 0 seconds!
+2022-10-27T05:39:49.3626428Z Initialized PRISM subsystem within 0.01 seconds!
+2022-10-27T05:39:55.3669508Z Initialized Lighting subsystem within 6 seconds!
+2022-10-27T05:39:58.4861231Z Initialized Shuttle subsystem within 3.12 seconds!
+2022-10-27T05:39:58.4910808Z Initialized Pathfinder subsystem within 0 seconds!
+2022-10-27T05:39:58.4911217Z Initialized Ban Cache subsystem within 0 seconds!
+2022-10-27T05:39:58.4911595Z Initialized Init Profiler subsystem within 0 seconds!
+2022-10-27T05:39:58.4911947Z Initialized Chat subsystem within 0 seconds!
+2022-10-27T05:39:58.4912316Z Initializations complete within 92.9 seconds!
+2022-10-27T05:39:58.4984843Z Game start took 0s
+2022-10-27T05:40:09.8744558Z ##[group]/datum/unit_test/log_mapping
+2022-10-27T05:40:09.8745146Z
+2022-10-27T05:40:09.8836529Z [1;32mPASS[0m /datum/unit_test/log_mapping 0s
+2022-10-27T05:40:09.8837396Z ##[endgroup]
+2022-10-27T05:40:09.9419200Z ##[group]/datum/unit_test/ablative_hood_hud
+2022-10-27T05:40:09.9756122Z
+2022-10-27T05:40:09.9757240Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud 0s
+2022-10-27T05:40:09.9767210Z ##[endgroup]
+2022-10-27T05:40:09.9978386Z ##[group]/datum/unit_test/ablative_hood_hud_with_helmet
+2022-10-27T05:40:10.0279756Z
+2022-10-27T05:40:10.0281576Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud_with_helmet 0.1s
+2022-10-27T05:40:10.0283498Z ##[endgroup]
+2022-10-27T05:40:10.0512431Z ##[group]/datum/unit_test/achievements
+2022-10-27T05:40:10.0640195Z
+2022-10-27T05:40:10.0641287Z [1;32mPASS[0m /datum/unit_test/achievements 0s
+2022-10-27T05:40:10.0642374Z ##[endgroup]
+2022-10-27T05:40:10.1012868Z ##[group]/datum/unit_test/anchored_mobs
+2022-10-27T05:40:10.1014527Z
+2022-10-27T05:40:10.1015639Z [1;32mPASS[0m /datum/unit_test/anchored_mobs 0s
+2022-10-27T05:40:10.1016975Z ##[endgroup]
+2022-10-27T05:40:10.1197243Z ##[group]/datum/unit_test/anonymous_themes
+2022-10-27T05:40:10.2699684Z
+2022-10-27T05:40:10.2701913Z [1;32mPASS[0m /datum/unit_test/anonymous_themes 0.1s
+2022-10-27T05:40:10.2703812Z ##[endgroup]
+2022-10-27T05:40:10.5198272Z ##[group]/datum/unit_test/autowiki
+2022-10-27T05:40:11.9708692Z
+2022-10-27T05:40:11.9710297Z [1;32mPASS[0m /datum/unit_test/autowiki 1.4s
+2022-10-27T05:40:11.9712149Z ##[endgroup]
+2022-10-27T05:40:13.4185291Z ##[group]/datum/unit_test/autowiki_include_template
+2022-10-27T05:40:13.4186047Z
+2022-10-27T05:40:13.4187111Z [1;32mPASS[0m /datum/unit_test/autowiki_include_template 0s
+2022-10-27T05:40:13.4188008Z ##[endgroup]
+2022-10-27T05:40:13.4380400Z ##[group]/datum/unit_test/barsigns_icon
+2022-10-27T05:40:13.4634689Z
+2022-10-27T05:40:13.4639775Z [1;32mPASS[0m /datum/unit_test/barsigns_icon 0s
+2022-10-27T05:40:13.4640487Z ##[endgroup]
+2022-10-27T05:40:13.4808870Z ##[group]/datum/unit_test/barsigns_name
+2022-10-27T05:40:13.4809440Z
+2022-10-27T05:40:13.4810053Z [1;32mPASS[0m /datum/unit_test/barsigns_name 0s
+2022-10-27T05:40:13.4814000Z ##[endgroup]
+2022-10-27T05:40:13.4979736Z ##[group]/datum/unit_test/bespoke_id
+2022-10-27T05:40:13.4980383Z
+2022-10-27T05:40:13.4980997Z [1;32mPASS[0m /datum/unit_test/bespoke_id 0s
+2022-10-27T05:40:13.5028459Z ##[endgroup]
+2022-10-27T05:40:13.8488485Z ##[group]/datum/unit_test/binary_insert
+2022-10-27T05:40:13.8488743Z
+2022-10-27T05:40:13.8489222Z [1;32mPASS[0m /datum/unit_test/binary_insert 0s
+2022-10-27T05:40:13.8489803Z ##[endgroup]
+2022-10-27T05:40:13.8653347Z ##[group]/datum/unit_test/bloody_footprints
+2022-10-27T05:40:13.9003909Z
+2022-10-27T05:40:13.9004930Z [1;32mPASS[0m /datum/unit_test/bloody_footprints 0s
+2022-10-27T05:40:13.9006088Z ##[endgroup]
+2022-10-27T05:40:13.9232999Z ##[group]/datum/unit_test/breath_sanity
+2022-10-27T05:40:13.9712567Z
+2022-10-27T05:40:13.9713383Z [1;32mPASS[0m /datum/unit_test/breath_sanity 0s
+2022-10-27T05:40:13.9714142Z ##[endgroup]
+2022-10-27T05:40:14.2982711Z ##[group]/datum/unit_test/breath_sanity_plasmamen
+2022-10-27T05:40:14.3520354Z
+2022-10-27T05:40:14.3521354Z [1;32mPASS[0m /datum/unit_test/breath_sanity_plasmamen 0.1s
+2022-10-27T05:40:14.3522294Z ##[endgroup]
+2022-10-27T05:40:14.3742846Z ##[group]/datum/unit_test/breath_sanity_ashwalker
+2022-10-27T05:40:14.4444122Z
+2022-10-27T05:40:14.4444950Z [1;32mPASS[0m /datum/unit_test/breath_sanity_ashwalker 0.1s
+2022-10-27T05:40:14.4445682Z ##[endgroup]
+2022-10-27T05:40:14.7716503Z ##[group]/datum/unit_test/cable_powernets
+2022-10-27T05:40:14.7716741Z
+2022-10-27T05:40:14.7717211Z [1;32mPASS[0m /datum/unit_test/cable_powernets 0s
+2022-10-27T05:40:14.7718214Z ##[endgroup]
+2022-10-27T05:40:14.7883699Z ##[group]/datum/unit_test/card_mismatch
+2022-10-27T05:40:14.7925710Z
+2022-10-27T05:40:14.7926265Z [1;32mPASS[0m /datum/unit_test/card_mismatch 0s
+2022-10-27T05:40:14.7926794Z ##[endgroup]
+2022-10-27T05:40:14.8965612Z ##[group]/datum/unit_test/chain_pull_through_space
+2022-10-27T05:40:14.8993553Z
+2022-10-27T05:40:14.8994184Z [1;32mPASS[0m /datum/unit_test/chain_pull_through_space 0s
+2022-10-27T05:40:14.8994797Z ##[endgroup]
+2022-10-27T05:40:15.0324540Z ##[group]/datum/unit_test/chat_filter_sanity
+2022-10-27T05:40:15.0326737Z
+2022-10-27T05:40:15.0327622Z [1;32mPASS[0m /datum/unit_test/chat_filter_sanity 0s
+2022-10-27T05:40:15.0328606Z ##[endgroup]
+2022-10-27T05:40:15.0495255Z ##[group]/datum/unit_test/circuit_component_category
+2022-10-27T05:40:15.0495800Z
+2022-10-27T05:40:15.0496375Z [1;32mPASS[0m /datum/unit_test/circuit_component_category 0s
+2022-10-27T05:40:15.0497189Z ##[endgroup]
+2022-10-27T05:40:15.0662040Z ##[group]/datum/unit_test/closets
+2022-10-27T05:40:16.7548466Z
+2022-10-27T05:40:16.7550247Z [1;32mPASS[0m /datum/unit_test/closets 1.7s
+2022-10-27T05:40:16.7551113Z ##[endgroup]
+2022-10-27T05:40:19.6808172Z ##[group]/datum/unit_test/harm_punch
+2022-10-27T05:40:19.7377314Z
+2022-10-27T05:40:19.7378123Z [1;32mPASS[0m /datum/unit_test/harm_punch 0.1s
+2022-10-27T05:40:19.7379056Z ##[endgroup]
+2022-10-27T05:40:19.7662222Z ##[group]/datum/unit_test/harm_melee
+2022-10-27T05:40:19.8341843Z
+2022-10-27T05:40:19.8342972Z [1;32mPASS[0m /datum/unit_test/harm_melee 0.1s
+2022-10-27T05:40:19.8343692Z ##[endgroup]
+2022-10-27T05:40:19.9635264Z ##[group]/datum/unit_test/harm_different_damage
+2022-10-27T05:40:20.0266779Z
+2022-10-27T05:40:20.0267726Z [1;32mPASS[0m /datum/unit_test/harm_different_damage 0.1s
+2022-10-27T05:40:20.0268642Z ##[endgroup]
+2022-10-27T05:40:20.0557189Z ##[group]/datum/unit_test/attack_chain
+2022-10-27T05:40:20.1137150Z
+2022-10-27T05:40:20.1138187Z [1;32mPASS[0m /datum/unit_test/attack_chain 0.1s
+2022-10-27T05:40:20.1139596Z ##[endgroup]
+2022-10-27T05:40:20.5189211Z ##[group]/datum/unit_test/disarm
+2022-10-27T05:40:20.5901636Z
+2022-10-27T05:40:20.5902409Z [1;32mPASS[0m /datum/unit_test/disarm 0s
+2022-10-27T05:40:20.5903484Z ##[endgroup]
+2022-10-27T05:40:20.6186577Z ##[group]/datum/unit_test/component_duping
+2022-10-27T05:40:20.6186976Z
+2022-10-27T05:40:20.6187696Z [1;32mPASS[0m /datum/unit_test/component_duping 0s
+2022-10-27T05:40:20.6188587Z ##[endgroup]
+2022-10-27T05:40:20.6351095Z ##[group]/datum/unit_test/confusion_symptom
+2022-10-27T05:40:20.6638729Z
+2022-10-27T05:40:20.6639511Z [1;32mPASS[0m /datum/unit_test/confusion_symptom 0s
+2022-10-27T05:40:20.6640205Z ##[endgroup]
+2022-10-27T05:40:20.9863951Z ##[group]/datum/unit_test/connect_loc_basic
+2022-10-27T05:40:20.9868536Z
+2022-10-27T05:40:20.9869090Z [1;32mPASS[0m /datum/unit_test/connect_loc_basic 0s
+2022-10-27T05:40:20.9869728Z ##[endgroup]
+2022-10-27T05:40:21.0030927Z ##[group]/datum/unit_test/connect_loc_change_turf
+2022-10-27T05:40:21.0038393Z
+2022-10-27T05:40:21.0038866Z [1;32mPASS[0m /datum/unit_test/connect_loc_change_turf 0s
+2022-10-27T05:40:21.0039436Z ##[endgroup]
+2022-10-27T05:40:21.0207944Z ##[group]/datum/unit_test/connect_loc_multiple_on_turf
+2022-10-27T05:40:21.0212290Z
+2022-10-27T05:40:21.0212902Z [1;32mPASS[0m /datum/unit_test/connect_loc_multiple_on_turf 0s
+2022-10-27T05:40:21.0213675Z ##[endgroup]
+2022-10-27T05:40:21.0384862Z ##[group]/datum/unit_test/crayon_naming
+2022-10-27T05:40:21.0442694Z
+2022-10-27T05:40:21.0443459Z [1;32mPASS[0m /datum/unit_test/crayon_naming 0s
+2022-10-27T05:40:21.0444098Z ##[endgroup]
+2022-10-27T05:40:21.0612637Z ##[group]/datum/unit_test/dcs_get_id_from_arguments
+2022-10-27T05:40:21.0613739Z
+2022-10-27T05:40:21.0614288Z [1;32mPASS[0m /datum/unit_test/dcs_get_id_from_arguments 0s
+2022-10-27T05:40:21.0615542Z ##[endgroup]
+2022-10-27T05:40:21.3899788Z ##[group]/datum/unit_test/designs
+2022-10-27T05:40:21.3953573Z
+2022-10-27T05:40:21.3954536Z [1;32mPASS[0m /datum/unit_test/designs 0s
+2022-10-27T05:40:21.3955578Z ##[endgroup]
+2022-10-27T05:40:21.4124000Z ##[group]/datum/unit_test/dummy_spawn_species
+2022-10-27T05:40:21.8463274Z
+2022-10-27T05:40:21.8464399Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_species 0.4s
+2022-10-27T05:40:21.8465523Z ##[endgroup]
+2022-10-27T05:40:22.2717242Z ##[group]/datum/unit_test/dummy_spawn_outfit
+2022-10-27T05:40:22.2939848Z Job type /datum/job/ai could not be retrieved from SSjob
+2022-10-27T05:40:22.6546726Z
+2022-10-27T05:40:22.6548196Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_outfit 0.4s
+2022-10-27T05:40:22.6549521Z ##[endgroup]
+2022-10-27T05:40:23.0435828Z ##[group]/datum/unit_test/dynamic_roundstart_ruleset_sanity
+2022-10-27T05:40:23.0436113Z
+2022-10-27T05:40:23.0436663Z [1;32mPASS[0m /datum/unit_test/dynamic_roundstart_ruleset_sanity 0s
+2022-10-27T05:40:23.0437218Z ##[endgroup]
+2022-10-27T05:40:23.0606191Z ##[group]/datum/unit_test/dynamic_unique_antag_flags
+2022-10-27T05:40:23.0606463Z
+2022-10-27T05:40:23.0606957Z [1;32mPASS[0m /datum/unit_test/dynamic_unique_antag_flags 0s
+2022-10-27T05:40:23.0607492Z ##[endgroup]
+2022-10-27T05:40:23.0772590Z ##[group]/datum/unit_test/egg_glands
+2022-10-27T05:40:23.1272833Z
+2022-10-27T05:40:23.1273679Z [1;32mPASS[0m /datum/unit_test/egg_glands 0.1s
+2022-10-27T05:40:23.1274499Z ##[endgroup]
+2022-10-27T05:40:23.1948246Z ##[group]/datum/unit_test/emoting
+2022-10-27T05:40:23.2276434Z
+2022-10-27T05:40:23.2277491Z [1;32mPASS[0m /datum/unit_test/emoting 0.1s
+2022-10-27T05:40:23.2278590Z ##[endgroup]
+2022-10-27T05:40:23.2495055Z ##[group]/datum/unit_test/food_edibility_check
+2022-10-27T05:40:24.5133005Z
+2022-10-27T05:40:24.5133747Z [1;32mPASS[0m /datum/unit_test/food_edibility_check 1.3s
+2022-10-27T05:40:24.5134589Z ##[endgroup]
+2022-10-27T05:40:25.7459424Z ##[group]/datum/unit_test/atmospheric_gas_transfer
+2022-10-27T05:40:25.7464252Z
+2022-10-27T05:40:25.7465453Z [1;32mPASS[0m /datum/unit_test/atmospheric_gas_transfer 0s
+2022-10-27T05:40:25.7466947Z ##[endgroup]
+2022-10-27T05:40:25.7637838Z ##[group]/datum/unit_test/get_turf_pixel
+2022-10-27T05:40:25.7652899Z
+2022-10-27T05:40:25.7653755Z [1;32mPASS[0m /datum/unit_test/get_turf_pixel 0s
+2022-10-27T05:40:25.7654716Z ##[endgroup]
+2022-10-27T05:40:25.7832528Z ##[group]/datum/unit_test/greyscale_item_icon_states
+2022-10-27T05:40:25.7897718Z
+2022-10-27T05:40:25.7898714Z [1;32mPASS[0m /datum/unit_test/greyscale_item_icon_states 0s
+2022-10-27T05:40:25.7901777Z ##[endgroup]
+2022-10-27T05:40:25.8065921Z ##[group]/datum/unit_test/greyscale_color_count
+2022-10-27T05:40:25.8212040Z
+2022-10-27T05:40:25.8213076Z [1;32mPASS[0m /datum/unit_test/greyscale_color_count 0s
+2022-10-27T05:40:25.8213890Z ##[endgroup]
+2022-10-27T05:40:25.9569835Z ##[group]/datum/unit_test/hallucination_icons
+2022-10-27T05:40:26.2007450Z
+2022-10-27T05:40:26.2008257Z [1;32mPASS[0m /datum/unit_test/hallucination_icons 0.3s
+2022-10-27T05:40:26.2008960Z ##[endgroup]
+2022-10-27T05:40:26.4177405Z ##[group]/datum/unit_test/heretic_knowledge
+2022-10-27T05:40:26.4221118Z
+2022-10-27T05:40:26.4222209Z [1;32mPASS[0m /datum/unit_test/heretic_knowledge 0s
+2022-10-27T05:40:26.4225335Z ##[endgroup]
+2022-10-27T05:40:26.4398954Z ##[group]/datum/unit_test/heretic_main_paths
+2022-10-27T05:40:26.4399640Z
+2022-10-27T05:40:26.4402394Z [1;32mPASS[0m /datum/unit_test/heretic_main_paths 0s
+2022-10-27T05:40:26.4403358Z ##[endgroup]
+2022-10-27T05:40:26.4569635Z ##[group]/datum/unit_test/heretic_rituals
+2022-10-27T05:40:26.5341269Z
+2022-10-27T05:40:26.5342957Z [1;32mPASS[0m /datum/unit_test/heretic_rituals 0.1s
+2022-10-27T05:40:26.5344455Z ##[endgroup]
+2022-10-27T05:40:26.6072760Z ##[group]/datum/unit_test/hanukkah_2123
+2022-10-27T05:40:26.6074182Z
+2022-10-27T05:40:26.6075388Z [1;32mPASS[0m /datum/unit_test/hanukkah_2123 0s
+2022-10-27T05:40:26.6076994Z ##[endgroup]
+2022-10-27T05:40:26.6266212Z ##[group]/datum/unit_test/ramadan_2165
+2022-10-27T05:40:26.6266979Z
+2022-10-27T05:40:26.6268854Z [1;32mPASS[0m /datum/unit_test/ramadan_2165 0s
+2022-10-27T05:40:26.6275155Z ##[endgroup]
+2022-10-27T05:40:26.6571207Z ##[group]/datum/unit_test/thanksgiving_2020
+2022-10-27T05:40:26.6572398Z
+2022-10-27T05:40:26.6573397Z [1;32mPASS[0m /datum/unit_test/thanksgiving_2020 0s
+2022-10-27T05:40:26.6574531Z ##[endgroup]
+2022-10-27T05:40:26.6735186Z ##[group]/datum/unit_test/mother_3683
+2022-10-27T05:40:26.6735666Z
+2022-10-27T05:40:26.6736248Z [1;32mPASS[0m /datum/unit_test/mother_3683 0s
+2022-10-27T05:40:26.6739224Z ##[endgroup]
+2022-10-27T05:40:26.8572827Z ##[group]/datum/unit_test/hello_2020
+2022-10-27T05:40:26.8573482Z
+2022-10-27T05:40:26.8574272Z [1;32mPASS[0m /datum/unit_test/hello_2020 0s
+2022-10-27T05:40:26.8577076Z ##[endgroup]
+2022-10-27T05:40:26.8749478Z ##[group]/datum/unit_test/new_year_1983
+2022-10-27T05:40:26.8750152Z
+2022-10-27T05:40:26.8750832Z [1;32mPASS[0m /datum/unit_test/new_year_1983 0s
+2022-10-27T05:40:26.8751724Z ##[endgroup]
+2022-10-27T05:40:26.8919557Z ##[group]/datum/unit_test/moth_week_2020
+2022-10-27T05:40:26.8951500Z
+2022-10-27T05:40:26.8952208Z [1;32mPASS[0m /datum/unit_test/moth_week_2020 0s
+2022-10-27T05:40:26.8952956Z ##[endgroup]
+2022-10-27T05:40:27.3122958Z ##[group]/datum/unit_test/human_through_recycler
+2022-10-27T05:40:27.3539454Z
+2022-10-27T05:40:27.3544496Z [1;32mPASS[0m /datum/unit_test/human_through_recycler 0s
+2022-10-27T05:40:27.3549227Z ##[endgroup]
+2022-10-27T05:40:27.3779548Z ##[group]/datum/unit_test/hydroponics_extractor_storage
+2022-10-27T05:40:27.4123276Z
+2022-10-27T05:40:27.4124500Z [1;32mPASS[0m /datum/unit_test/hydroponics_extractor_storage 0.1s
+2022-10-27T05:40:27.4125704Z ##[endgroup]
+2022-10-27T05:40:27.4385047Z ##[group]/datum/unit_test/hydroponics_harvest
+2022-10-27T05:40:27.5046209Z
+2022-10-27T05:40:27.5047429Z [1;32mPASS[0m /datum/unit_test/hydroponics_harvest 0.1s
+2022-10-27T05:40:27.5048344Z ##[endgroup]
+2022-10-27T05:40:27.5784276Z ##[group]/datum/unit_test/hydroponics_self_mutation
+2022-10-27T05:40:27.6261832Z
+2022-10-27T05:40:27.6263089Z [1;32mPASS[0m /datum/unit_test/hydroponics_self_mutation 0.1s
+2022-10-27T05:40:27.6264003Z ##[endgroup]
+2022-10-27T05:40:27.9431720Z ##[group]/datum/unit_test/hydroponics_validate_genes
+2022-10-27T05:40:27.9933945Z
+2022-10-27T05:40:27.9935126Z [1;32mPASS[0m /datum/unit_test/hydroponics_validate_genes 0s
+2022-10-27T05:40:27.9936883Z ##[endgroup]
+2022-10-27T05:40:28.0105063Z ##[group]/datum/unit_test/defined_inhand_icon_states
+2022-10-27T05:40:29.0888247Z Notice - Possible inhand icon matches found. It is best to be explicit with inhand sprite values.
+2022-10-27T05:40:29.0889307Z /obj/item/clothing/accessory/pride does not have an inhand_icon_state value - Possible matching sprites for "pride" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-10-27T05:40:29.0890499Z /obj/item/clothing/suit/caution does not have an inhand_icon_state value - Possible matching sprites for "caution" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-10-27T05:40:29.0891626Z /obj/item/clothing/under/suit/sl does not have an inhand_icon_state value - Possible matching sprites for "sl_suit" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-10-27T05:40:29.0892733Z /obj/item/clothing/head/collectable/paper does not have an inhand_icon_state value - Possible matching sprites for "paper" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2022-10-27T05:40:29.0893862Z /obj/item/clothing/head/mod does not have an inhand_icon_state value - Possible matching sprites for "helmet" found in: 'icons/mob/inhands/clothing/hats_lefthand.dmi' & 'icons/mob/inhands/clothing/hats_righthand.dmi'
+2022-10-27T05:40:29.0894922Z /obj/item/clothing/mask/animal/small/fox does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2022-10-27T05:40:29.0895960Z /obj/item/clothing/mask/animal/small/fox/cursed does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2022-10-27T05:40:29.0897110Z /obj/item/clothing/glasses/hud/health/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudmed" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-10-27T05:40:29.0898326Z /obj/item/clothing/glasses/hud/security/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudsec" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-10-27T05:40:29.0899739Z /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun does not have an inhand_icon_state value - Possible matching sprites for "syringegun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-10-27T05:40:29.0900919Z /obj/item/mecha_parts/mecha_equipment/generator does not have an inhand_icon_state value - Possible matching sprites for "tesla" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-10-27T05:40:29.0902057Z /obj/item/storage/bag/ore does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-10-27T05:40:29.0903498Z /obj/item/storage/bag/ore/cyborg does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-10-27T05:40:29.0904633Z /obj/item/implant/emp does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-10-27T05:40:29.0906583Z /obj/item/implant/uplink does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0927867Z /obj/item/implant/uplink/precharged does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0929023Z /obj/item/implant/uplink/starting does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0930125Z /obj/item/melee/energy/blade does not have an inhand_icon_state value - Possible matching sprites for "blade" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-10-27T05:40:29.0931206Z /obj/item/fireaxe does not have an inhand_icon_state value - Possible matching sprites for "fireaxe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-10-27T05:40:29.0932453Z /obj/item/fireaxe/boneaxe does not have an inhand_icon_state value - Possible matching sprites for "bone_axe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-10-27T05:40:29.0933868Z /obj/item/fireaxe/metal_h2_axe does not have an inhand_icon_state value - Possible matching sprites for "metalh2_axe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-10-27T05:40:29.0934999Z /obj/item/reagent_containers/cup/soda_cans/cola does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0936156Z /obj/item/reagent_containers/cup/soda_cans/tonic does not have an inhand_icon_state value - Possible matching sprites for "tonic" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0937331Z /obj/item/reagent_containers/cup/soda_cans/sodawater does not have an inhand_icon_state value - Possible matching sprites for "sodawater" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0938692Z /obj/item/reagent_containers/cup/soda_cans/lemon_lime does not have an inhand_icon_state value - Possible matching sprites for "lemon-lime" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0939881Z /obj/item/reagent_containers/cup/soda_cans/space_up does not have an inhand_icon_state value - Possible matching sprites for "space-up" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0941048Z /obj/item/reagent_containers/cup/soda_cans/starkist does not have an inhand_icon_state value - Possible matching sprites for "starkist" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0942649Z /obj/item/reagent_containers/cup/soda_cans/space_mountain_wind does not have an inhand_icon_state value - Possible matching sprites for "space_mountain_wind" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0943894Z /obj/item/reagent_containers/cup/soda_cans/thirteenloko does not have an inhand_icon_state value - Possible matching sprites for "thirteen_loko" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0945078Z /obj/item/reagent_containers/cup/soda_cans/dr_gibb does not have an inhand_icon_state value - Possible matching sprites for "dr_gibb" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0946292Z /obj/item/reagent_containers/cup/soda_cans/pwr_game does not have an inhand_icon_state value - Possible matching sprites for "purple_can" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0947466Z /obj/item/reagent_containers/cup/glass/coffee does not have an inhand_icon_state value - Possible matching sprites for "coffee" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.0948548Z /obj/item/reagent_containers/chem_pack does not have an inhand_icon_state value - Possible matching sprites for "chempack" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-10-27T05:40:29.0949572Z /obj/item/sbeacondrop does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0950564Z /obj/item/sbeacondrop/bomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0951871Z /obj/item/sbeacondrop/emp does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0952969Z /obj/item/sbeacondrop/powersink does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0954060Z /obj/item/sbeacondrop/clownbomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0955292Z /obj/item/stack/medical/bruise_pack does not have an inhand_icon_state value - Possible matching sprites for "brutepack" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.0957053Z /obj/item/stack/medical/ointment does not have an inhand_icon_state value - Possible matching sprites for "ointment" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.0958265Z /obj/item/minespawner does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.0959349Z /obj/item/organ/internal/heart/gland/blood does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.0960438Z /obj/item/organ/internal/heart/gland/egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.0962120Z /obj/item/organ/internal/heart/gland/quantum does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-10-27T05:40:29.0963372Z /obj/item/organ/internal/heart/gland/trauma does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-10-27T05:40:29.0964517Z /obj/item/boxcutter does not have an inhand_icon_state value - Possible matching sprites for "boxcutter" found in: 'icons/mob/inhands/equipment/boxcutter_lefthand.dmi' & 'icons/mob/inhands/equipment/boxcutter_righthand.dmi'
+2022-10-27T05:40:29.0965764Z /obj/item/pushbroom does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-10-27T05:40:29.0966976Z /obj/item/pushbroom/cyborg does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-10-27T05:40:29.0968278Z /obj/item/chainsaw does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
+2022-10-27T05:40:29.0969434Z /obj/item/chainsaw/doomslayer does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
+2022-10-27T05:40:29.0976727Z /obj/item/toy/talking/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2022-10-27T05:40:29.0977819Z /obj/item/toy/figure/chef does not have an inhand_icon_state value - Possible matching sprites for "chef" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-10-27T05:40:29.0979042Z /obj/item/toy/figure/clown does not have an inhand_icon_state value - Possible matching sprites for "clown" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-10-27T05:40:29.0980133Z /obj/item/toy/figure/janitor does not have an inhand_icon_state value - Possible matching sprites for "janitor" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-10-27T05:40:29.0981181Z /obj/item/food/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.0982369Z /obj/item/food/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.0983404Z /obj/item/kitchen/fork does not have an inhand_icon_state value - Possible matching sprites for "fork" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-10-27T05:40:29.0984486Z /obj/item/kitchen/spoon does not have an inhand_icon_state value - Possible matching sprites for "spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-10-27T05:40:29.0985620Z /obj/item/kitchen/spoon/plastic does not have an inhand_icon_state value - Possible matching sprites for "plastic_spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-10-27T05:40:29.0986842Z /obj/item/book/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2022-10-27T05:40:29.0988013Z /obj/item/pitchfork does not have an inhand_icon_state value - Possible matching sprites for "pitchfork0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-10-27T05:40:29.0989036Z /obj/item/construction/rcd does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0990051Z /obj/item/construction/rcd/borg does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0991149Z /obj/item/construction/rcd/loaded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0994310Z /obj/item/construction/rcd/loaded/upgraded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0995737Z /obj/item/construction/rcd/internal does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0996853Z /obj/item/construction/rld does not have an inhand_icon_state value - Possible matching sprites for "rld-5" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0997956Z /obj/item/construction/rld/mini does not have an inhand_icon_state value - Possible matching sprites for "rld-5" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.0999039Z /obj/item/rcd_ammo does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.1000123Z /obj/item/rcd_ammo/large does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.1001211Z /obj/item/godstaff does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-10-27T05:40:29.1002492Z /obj/item/godstaff/red does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-10-27T05:40:29.1003600Z /obj/item/godstaff/blue does not have an inhand_icon_state value - Possible matching sprites for "godstaff-blue" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-10-27T05:40:29.1004679Z /obj/item/pipe_dispenser does not have an inhand_icon_state value - Possible matching sprites for "rpd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.1005898Z /obj/item/singularityhammer does not have an inhand_icon_state value - Possible matching sprites for "singularity_hammer0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-10-27T05:40:29.1006926Z /obj/item/mjollnir does not have an inhand_icon_state value - Possible matching sprites for "mjollnir0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-10-27T05:40:29.1008099Z /obj/item/spear does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-10-27T05:40:29.1009143Z /obj/item/spear/explosive does not have an inhand_icon_state value - Possible matching sprites for "spearbomb0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-10-27T05:40:29.1010190Z /obj/item/spear/grey_tide does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-10-27T05:40:29.1011309Z /obj/item/spear/bonespear does not have an inhand_icon_state value - Possible matching sprites for "bone_spear0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-10-27T05:40:29.1012517Z /obj/item/spear/bamboospear does not have an inhand_icon_state value - Possible matching sprites for "bamboo_spear0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-10-27T05:40:29.1014120Z /obj/item/trash/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.1015524Z /obj/item/trash/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.1016580Z /obj/item/trash/can does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.1017625Z /obj/item/trash/can/food does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-10-27T05:40:29.1018877Z /obj/item/highfrequencyblade does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-10-27T05:40:29.1020043Z /obj/item/highfrequencyblade/wizard does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-10-27T05:40:29.1021168Z /obj/item/borg/sight/meson does not have an inhand_icon_state value - Possible matching sprites for "meson" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-10-27T05:40:29.1022472Z /obj/item/ammo_casing/magic/hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-10-27T05:40:29.1023582Z /obj/item/ammo_casing/magic/hook/bounty does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-10-27T05:40:29.1024655Z /obj/item/harmalarm does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_lefthand.dmi' & 'icons/mob/inhands/items/megaphone_righthand.dmi'
+2022-10-27T05:40:29.1025757Z /obj/item/abductor_machine_beacon does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.1027058Z /obj/item/abductor_machine_beacon/chem_dispenser does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.1028202Z /obj/item/grown/carbon_rose does not have an inhand_icon_state value - Possible matching sprites for "carbonrose" found in: 'icons/mob/inhands/weapons/plants_righthand.dmi' & 'icons/mob/inhands/weapons/plants_lefthand.dmi'
+2022-10-27T05:40:29.1029346Z /obj/item/paint_palette does not have an inhand_icon_state value - Possible matching sprites for "palette" found in: 'icons/mob/inhands/equipment/palette_righthand.dmi' & 'icons/mob/inhands/equipment/palette_lefthand.dmi'
+2022-10-27T05:40:29.1030413Z /obj/item/surprise_egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-10-27T05:40:29.1031719Z /obj/item/experi_scanner does not have an inhand_icon_state value - Possible matching sprites for "experiscanner" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.1032793Z /obj/item/fishing_hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-10-27T05:40:29.1033871Z /obj/item/cursed_katana does not have an inhand_icon_state value - Possible matching sprites for "cursed_katana" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-10-27T05:40:29.1035004Z /obj/item/guardiancreator/tech does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.1036195Z /obj/item/guardiancreator/tech/choose does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.1037390Z /obj/item/guardiancreator/tech/choose/traitor does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.1038610Z /obj/item/guardiancreator/tech/choose/dextrous does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.1039744Z /obj/item/mod/module/welding does not have an inhand_icon_state value - Possible matching sprites for "welding" found in: 'icons/mob/inhands/clothing/masks_lefthand.dmi' & 'icons/mob/inhands/clothing/masks_righthand.dmi'
+2022-10-27T05:40:29.1040839Z /obj/item/mod/module/mister does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2022-10-27T05:40:29.1042176Z /obj/item/mod/module/mister/atmos does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2022-10-27T05:40:29.1043317Z /obj/item/mod/module/jetpack does not have an inhand_icon_state value - Possible matching sprites for "jetpack" found in: 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi' & 'icons/mob/inhands/equipment/jetpacks_righthand.dmi'
+2022-10-27T05:40:29.1044435Z /obj/item/mod/module/flashlight does not have an inhand_icon_state value - Possible matching sprites for "flashlight" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-10-27T05:40:29.1045556Z /obj/item/mod/module/stamp does not have an inhand_icon_state value - Possible matching sprites for "stamp" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2022-10-27T05:40:29.1046616Z /obj/item/mod/module/holster does not have an inhand_icon_state value - Possible matching sprites for "holster" found in: 'icons/mob/inhands/equipment/belt_lefthand.dmi' & 'icons/mob/inhands/equipment/belt_righthand.dmi'
+2022-10-27T05:40:29.1047731Z /obj/item/mod/module/megaphone does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_lefthand.dmi' & 'icons/mob/inhands/items/megaphone_righthand.dmi'
+2022-10-27T05:40:29.1049097Z /obj/item/mod/module/drill does not have an inhand_icon_state value - Possible matching sprites for "drill" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-10-27T05:40:29.1050391Z /obj/item/mod/module/tem does not have an inhand_icon_state value - Possible matching sprites for "chronogun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-10-27T05:40:29.1051631Z /obj/item/bonesetter does not have an inhand_icon_state value - Possible matching sprites for "bonesetter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.1052751Z /obj/item/blood_filter does not have an inhand_icon_state value - Possible matching sprites for "bloodfilter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-10-27T05:40:29.1055555Z /obj/item/mecha_ammo/flashbang does not have an inhand_icon_state value - Possible matching sprites for "flashbang" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-10-27T05:40:29.1056050Z
+2022-10-27T05:40:29.1056364Z [1;32mPASS[0m /datum/unit_test/defined_inhand_icon_states 1s
+2022-10-27T05:40:29.1057048Z ##[endgroup]
+2022-10-27T05:40:30.3200151Z ##[group]/datum/unit_test/keybinding_init
+2022-10-27T05:40:30.3200418Z
+2022-10-27T05:40:30.3201050Z [1;32mPASS[0m /datum/unit_test/keybinding_init 0s
+2022-10-27T05:40:30.3201648Z ##[endgroup]
+2022-10-27T05:40:30.3369516Z ##[group]/datum/unit_test/knockoff_component
+2022-10-27T05:40:30.3974289Z
+2022-10-27T05:40:30.3975134Z [1;32mPASS[0m /datum/unit_test/knockoff_component 0s
+2022-10-27T05:40:30.3975848Z ##[endgroup]
+2022-10-27T05:40:30.4758006Z ##[group]/datum/unit_test/limbsanity
+2022-10-27T05:40:30.5511170Z
+2022-10-27T05:40:30.5512056Z [1;32mPASS[0m /datum/unit_test/limbsanity 0.1s
+2022-10-27T05:40:30.5513064Z ##[endgroup]
+2022-10-27T05:40:30.5683011Z ##[group]/datum/unit_test/load_map_security
+2022-10-27T05:40:30.5686279Z map directory not in whitelist: data/load_map_security_temp for map runtimestation
+2022-10-27T05:40:30.5686559Z
+2022-10-27T05:40:30.5687309Z [1;32mPASS[0m /datum/unit_test/load_map_security 0s
+2022-10-27T05:40:30.5688206Z ##[endgroup]
+2022-10-27T05:40:30.5865089Z ##[group]/datum/unit_test/machine_disassembly
+2022-10-27T05:40:30.5895192Z
+2022-10-27T05:40:30.5895755Z [1;32mPASS[0m /datum/unit_test/machine_disassembly 0s
+2022-10-27T05:40:30.5896331Z ##[endgroup]
+2022-10-27T05:40:30.6183397Z ##[group]/datum/unit_test/mecha_damage
+2022-10-27T05:40:30.6691654Z
+2022-10-27T05:40:30.6692724Z [1;32mPASS[0m /datum/unit_test/mecha_damage 0s
+2022-10-27T05:40:30.6693811Z ##[endgroup]
+2022-10-27T05:40:30.7005279Z ##[group]/datum/unit_test/test_human_base
+2022-10-27T05:40:30.7905422Z
+2022-10-27T05:40:30.7906225Z [1;32mPASS[0m /datum/unit_test/test_human_base 0s
+2022-10-27T05:40:30.7906953Z ##[endgroup]
+2022-10-27T05:40:30.8626902Z ##[group]/datum/unit_test/test_human_bone
+2022-10-27T05:40:30.9519120Z
+2022-10-27T05:40:30.9520211Z [1;32mPASS[0m /datum/unit_test/test_human_bone 0.1s
+2022-10-27T05:40:30.9521496Z ##[endgroup]
+2022-10-27T05:40:31.2736006Z ##[group]/datum/unit_test/merge_type
+2022-10-27T05:40:31.2741500Z
+2022-10-27T05:40:31.2744034Z [1;32mPASS[0m /datum/unit_test/merge_type 0s
+2022-10-27T05:40:31.2745007Z ##[endgroup]
+2022-10-27T05:40:31.2940088Z ##[group]/datum/unit_test/metabolization
+2022-10-27T05:40:31.5116749Z
+2022-10-27T05:40:31.5119088Z [1;32mPASS[0m /datum/unit_test/metabolization 0.3s
+2022-10-27T05:40:31.5120552Z ##[endgroup]
+2022-10-27T05:40:31.8707226Z ##[group]/datum/unit_test/on_mob_end_metabolize
+2022-10-27T05:40:31.9025163Z
+2022-10-27T05:40:31.9025867Z [1;32mPASS[0m /datum/unit_test/on_mob_end_metabolize 0.1s
+2022-10-27T05:40:31.9026521Z ##[endgroup]
+2022-10-27T05:40:32.5850525Z ##[group]/datum/unit_test/addictions
+2022-10-27T05:40:32.6747518Z
+2022-10-27T05:40:32.6749097Z [1;32mPASS[0m /datum/unit_test/addictions 0.1s
+2022-10-27T05:40:32.6749790Z ##[endgroup]
+2022-10-27T05:40:32.8122227Z ##[group]/datum/unit_test/actions_moved_on_mind_transfer
+2022-10-27T05:40:32.8435426Z
+2022-10-27T05:40:32.8437029Z [1;32mPASS[0m /datum/unit_test/actions_moved_on_mind_transfer 0s
+2022-10-27T05:40:32.8438267Z ##[endgroup]
+2022-10-27T05:40:32.8685143Z ##[group]/datum/unit_test/mob_faction
+2022-10-27T05:40:37.0355455Z
+2022-10-27T05:40:37.0357124Z [1;32mPASS[0m /datum/unit_test/mob_faction 4.2s
+2022-10-27T05:40:37.0358437Z ##[endgroup]
+2022-10-27T05:40:46.3276946Z ##[group]/datum/unit_test/mob_spawn
+2022-10-27T05:40:46.3478047Z
+2022-10-27T05:40:46.3479094Z [1;32mPASS[0m /datum/unit_test/mob_spawn 0s
+2022-10-27T05:40:46.3480121Z ##[endgroup]
+2022-10-27T05:40:46.5088900Z ##[group]/datum/unit_test/modsuit_checks
+2022-10-27T05:40:46.7422166Z
+2022-10-27T05:40:46.7424741Z [1;32mPASS[0m /datum/unit_test/modsuit_checks 0.2s
+2022-10-27T05:40:46.7426303Z ##[endgroup]
+2022-10-27T05:40:46.9639966Z ##[group]/datum/unit_test/modular_map_loader
+2022-10-27T05:40:46.9645920Z
+2022-10-27T05:40:46.9647042Z [1;32mPASS[0m /datum/unit_test/modular_map_loader 0s
+2022-10-27T05:40:46.9648824Z ##[endgroup]
+2022-10-27T05:40:46.9857078Z ##[group]/datum/unit_test/mouse_bite_cable
+2022-10-27T05:40:46.9906436Z
+2022-10-27T05:40:46.9907445Z [1;32mPASS[0m /datum/unit_test/mouse_bite_cable 0s
+2022-10-27T05:40:46.9908580Z ##[endgroup]
+2022-10-27T05:40:47.0104524Z ##[group]/datum/unit_test/novaflower_burn
+2022-10-27T05:40:47.0691141Z
+2022-10-27T05:40:47.0692760Z [1;32mPASS[0m /datum/unit_test/novaflower_burn 0s
+2022-10-27T05:40:47.0694697Z ##[endgroup]
+2022-10-27T05:40:47.4496213Z ##[group]/datum/unit_test/ntnetwork
+2022-10-27T05:40:47.4517846Z
+2022-10-27T05:40:47.4518703Z [1;32mPASS[0m /datum/unit_test/ntnetwork 0s
+2022-10-27T05:40:47.4519832Z ##[endgroup]
+2022-10-27T05:40:47.4710883Z ##[group]/datum/unit_test/nuke_cinematic
+2022-10-27T05:40:51.6544361Z
+2022-10-27T05:40:51.6546808Z [1;32mPASS[0m /datum/unit_test/nuke_cinematic 4.2s
+2022-10-27T05:40:51.6548322Z ##[endgroup]
+2022-10-27T05:40:51.9750957Z ##[group]/datum/unit_test/objectives_category
+2022-10-27T05:40:51.9754837Z
+2022-10-27T05:40:51.9758911Z [1;32mPASS[0m /datum/unit_test/objectives_category 0s
+2022-10-27T05:40:51.9762185Z ##[endgroup]
+2022-10-27T05:40:51.9966795Z ##[group]/datum/unit_test/operating_table
+2022-10-27T05:40:52.0501605Z
+2022-10-27T05:40:52.0502705Z [1;32mPASS[0m /datum/unit_test/operating_table 0.1s
+2022-10-27T05:40:52.0503789Z ##[endgroup]
+2022-10-27T05:40:52.1317881Z ##[group]/datum/unit_test/outfit_sanity
+2022-10-27T05:41:01.7976872Z
+2022-10-27T05:41:01.7979182Z [1;32mPASS[0m /datum/unit_test/outfit_sanity 9.6s
+2022-10-27T05:41:01.7980122Z ##[endgroup]
+2022-10-27T05:41:11.4243742Z ##[group]/datum/unit_test/paintings
+2022-10-27T05:41:11.4598558Z
+2022-10-27T05:41:11.4599629Z [1;32mPASS[0m /datum/unit_test/paintings 0s
+2022-10-27T05:41:11.4600448Z ##[endgroup]
+2022-10-27T05:41:11.4792755Z ##[group]/datum/unit_test/pills
+2022-10-27T05:41:11.5083505Z
+2022-10-27T05:41:11.5084511Z [1;32mPASS[0m /datum/unit_test/pills 0.1s
+2022-10-27T05:41:11.5085321Z ##[endgroup]
+2022-10-27T05:41:11.5601428Z ##[group]/datum/unit_test/plane_double_transform
+2022-10-27T05:41:11.5919033Z
+2022-10-27T05:41:11.5921018Z [1;32mPASS[0m /datum/unit_test/plane_double_transform 0s
+2022-10-27T05:41:11.5922301Z ##[endgroup]
+2022-10-27T05:41:11.6221465Z ##[group]/datum/unit_test/plane_dupe_detector
+2022-10-27T05:41:11.6222004Z
+2022-10-27T05:41:11.6222655Z [1;32mPASS[0m /datum/unit_test/plane_dupe_detector 0s
+2022-10-27T05:41:11.6223293Z ##[endgroup]
+2022-10-27T05:41:11.6426244Z ##[group]/datum/unit_test/plantgrowth
+2022-10-27T05:41:11.6982938Z
+2022-10-27T05:41:11.6984405Z [1;32mPASS[0m /datum/unit_test/plantgrowth 0s
+2022-10-27T05:41:11.6985721Z ##[endgroup]
+2022-10-27T05:41:11.7325573Z ##[group]/datum/unit_test/preference_species
+2022-10-27T05:41:11.7325819Z
+2022-10-27T05:41:11.7328286Z [1;32mPASS[0m /datum/unit_test/preference_species 0s
+2022-10-27T05:41:11.7329335Z ##[endgroup]
+2022-10-27T05:41:11.7520773Z ##[group]/datum/unit_test/preferences_implement_everything
+2022-10-27T05:41:18.7582701Z
+2022-10-27T05:41:18.7583967Z [1;32mPASS[0m /datum/unit_test/preferences_implement_everything 7s
+2022-10-27T05:41:18.7674142Z ##[endgroup]
+2022-10-27T05:41:25.7837961Z ##[group]/datum/unit_test/preferences_valid_savefile_key
+2022-10-27T05:41:25.7840087Z
+2022-10-27T05:41:25.7841504Z [1;32mPASS[0m /datum/unit_test/preferences_valid_savefile_key 0s
+2022-10-27T05:41:25.7842504Z ##[endgroup]
+2022-10-27T05:41:25.8045081Z ##[group]/datum/unit_test/preferences_valid_main_feature_name
+2022-10-27T05:41:25.8046166Z
+2022-10-27T05:41:25.8047192Z [1;32mPASS[0m /datum/unit_test/preferences_valid_main_feature_name 0s
+2022-10-27T05:41:25.8049437Z ##[endgroup]
+2022-10-27T05:41:25.8233566Z ##[group]/datum/unit_test/projectile_movetypes
+2022-10-27T05:41:25.8234187Z
+2022-10-27T05:41:25.8235057Z [1;32mPASS[0m /datum/unit_test/projectile_movetypes 0s
+2022-10-27T05:41:25.8238602Z ##[endgroup]
+2022-10-27T05:41:25.8422043Z ##[group]/datum/unit_test/gun_go_bang
+2022-10-27T05:41:25.9103045Z
+2022-10-27T05:41:25.9104017Z [1;32mPASS[0m /datum/unit_test/gun_go_bang 0.1s
+2022-10-27T05:41:25.9105102Z ##[endgroup]
+2022-10-27T05:41:25.9957966Z ##[group]/datum/unit_test/quirk_icons
+2022-10-27T05:41:25.9958970Z
+2022-10-27T05:41:25.9960876Z [1;32mPASS[0m /datum/unit_test/quirk_icons 0s
+2022-10-27T05:41:25.9961959Z ##[endgroup]
+2022-10-27T05:41:26.0166772Z ##[group]/datum/unit_test/range_return
+2022-10-27T05:41:26.0167357Z
+2022-10-27T05:41:26.0167980Z [1;32mPASS[0m /datum/unit_test/range_return 0s
+2022-10-27T05:41:26.0222740Z ##[endgroup]
+2022-10-27T05:41:26.0353132Z ##[group]/datum/unit_test/frame_stacking
+2022-10-27T05:41:26.0914496Z
+2022-10-27T05:41:26.0915254Z [1;32mPASS[0m /datum/unit_test/frame_stacking 0s
+2022-10-27T05:41:26.0916011Z ##[endgroup]
+2022-10-27T05:41:26.1694918Z ##[group]/datum/unit_test/reagent_id_typos
+2022-10-27T05:41:26.1727233Z
+2022-10-27T05:41:26.1728009Z [1;32mPASS[0m /datum/unit_test/reagent_id_typos 0s
+2022-10-27T05:41:26.1728685Z ##[endgroup]
+2022-10-27T05:41:26.1920271Z ##[group]/datum/unit_test/reagent_mob_expose
+2022-10-27T05:41:26.2268321Z
+2022-10-27T05:41:26.2269120Z [1;32mPASS[0m /datum/unit_test/reagent_mob_expose 0.1s
+2022-10-27T05:41:26.2269829Z ##[endgroup]
+2022-10-27T05:41:26.2549234Z ##[group]/datum/unit_test/reagent_mob_procs
+2022-10-27T05:41:26.2827770Z
+2022-10-27T05:41:26.2828618Z [1;32mPASS[0m /datum/unit_test/reagent_mob_procs 0s
+2022-10-27T05:41:26.2829318Z ##[endgroup]
+2022-10-27T05:41:26.3078178Z ##[group]/datum/unit_test/reagent_names
+2022-10-27T05:41:27.1646047Z
+2022-10-27T05:41:27.1647510Z [1;32mPASS[0m /datum/unit_test/reagent_names 0.8s
+2022-10-27T05:41:27.1649181Z ##[endgroup]
+2022-10-27T05:41:27.9838180Z ##[group]/datum/unit_test/reagent_recipe_collisions
+2022-10-27T05:41:28.4462173Z
+2022-10-27T05:41:28.4463469Z [1;32mPASS[0m /datum/unit_test/reagent_recipe_collisions 0.5s
+2022-10-27T05:41:28.4464601Z ##[endgroup]
+2022-10-27T05:41:28.8661632Z ##[group]/datum/unit_test/reagent_transfer
+2022-10-27T05:41:28.8670725Z
+2022-10-27T05:41:28.8671943Z [1;32mPASS[0m /datum/unit_test/reagent_transfer 0s
+2022-10-27T05:41:28.8673335Z ##[endgroup]
+2022-10-27T05:41:28.8888500Z ##[group]/datum/unit_test/stop_drop_and_roll
+2022-10-27T05:41:28.9156826Z
+2022-10-27T05:41:28.9160888Z [1;32mPASS[0m /datum/unit_test/stop_drop_and_roll 0.1s
+2022-10-27T05:41:28.9162086Z ##[endgroup]
+2022-10-27T05:41:28.9403341Z ##[group]/datum/unit_test/container_resist
+2022-10-27T05:41:28.9744033Z
+2022-10-27T05:41:28.9746221Z [1;32mPASS[0m /datum/unit_test/container_resist 0s
+2022-10-27T05:41:28.9748317Z ##[endgroup]
+2022-10-27T05:41:29.0027065Z ##[group]/datum/unit_test/get_message_mods
+2022-10-27T05:41:29.0268010Z
+2022-10-27T05:41:29.0269082Z [1;32mPASS[0m /datum/unit_test/get_message_mods 0s
+2022-10-27T05:41:29.0270222Z ##[endgroup]
+2022-10-27T05:41:29.0513097Z ##[group]/datum/unit_test/say_signal
+2022-10-27T05:41:29.0526010Z
+2022-10-27T05:41:29.0526949Z [1;32mPASS[0m /datum/unit_test/say_signal 0s
+2022-10-27T05:41:29.0528292Z ##[endgroup]
+2022-10-27T05:41:29.0718244Z ##[group]/datum/unit_test/screenshot_antag_icons
+2022-10-27T05:41:29.0735578Z screenshot_antag_icons_fugitive was put in data/screenshots_new
+2022-10-27T05:41:29.0746540Z screenshot_antag_icons_loneoperative was put in data/screenshots_new
+2022-10-27T05:41:29.1154449Z screenshot_antag_icons_sentiencepotionspawn was put in data/screenshots_new
+2022-10-27T05:41:29.1168816Z screenshot_antag_icons_traitor was put in data/screenshots_new
+2022-10-27T05:41:29.1651315Z screenshot_antag_icons_malfai was put in data/screenshots_new
+2022-10-27T05:41:29.1695591Z screenshot_antag_icons_bloodbrother was put in data/screenshots_new
+2022-10-27T05:41:29.1703594Z screenshot_antag_icons_changeling was put in data/screenshots_new
+2022-10-27T05:41:29.1768645Z screenshot_antag_icons_heretic was put in data/screenshots_new
+2022-10-27T05:41:29.1779481Z screenshot_antag_icons_wizard was put in data/screenshots_new
+2022-10-27T05:41:29.1818096Z screenshot_antag_icons_cultist was put in data/screenshots_new
+2022-10-27T05:41:29.1834393Z screenshot_antag_icons_operative was put in data/screenshots_new
+2022-10-27T05:41:29.1849934Z screenshot_antag_icons_clownoperative was put in data/screenshots_new
+2022-10-27T05:41:29.1867009Z screenshot_antag_icons_headrevolutionary was put in data/screenshots_new
+2022-10-27T05:41:29.1869714Z screenshot_antag_icons_syndicateinfiltrator was put in data/screenshots_new
+2022-10-27T05:41:29.1870566Z screenshot_antag_icons_provocateur was put in data/screenshots_new
+2022-10-27T05:41:29.1871844Z screenshot_antag_icons_hereticsmuggler was put in data/screenshots_new
+2022-10-27T05:41:29.1872299Z screenshot_antag_icons_wizardmidround was put in data/screenshots_new
+2022-10-27T05:41:29.1874172Z screenshot_antag_icons_operativemidround was put in data/screenshots_new
+2022-10-27T05:41:29.2627121Z screenshot_antag_icons_blob was put in data/screenshots_new
+2022-10-27T05:41:29.2749190Z screenshot_antag_icons_xenomorph was put in data/screenshots_new
+2022-10-27T05:41:29.2756569Z screenshot_antag_icons_nightmare was put in data/screenshots_new
+2022-10-27T05:41:29.2840326Z screenshot_antag_icons_spacedragon was put in data/screenshots_new
+2022-10-27T05:41:29.2847600Z screenshot_antag_icons_abductor was put in data/screenshots_new
+2022-10-27T05:41:29.2854366Z screenshot_antag_icons_spaceninja was put in data/screenshots_new
+2022-10-27T05:41:29.3137655Z screenshot_antag_icons_revenant was put in data/screenshots_new
+2022-10-27T05:41:29.3161866Z screenshot_antag_icons_sentientdisease was put in data/screenshots_new
+2022-10-27T05:41:29.3163321Z screenshot_antag_icons_syndicatesleeperagent was put in data/screenshots_new
+2022-10-27T05:41:29.3355078Z screenshot_antag_icons_blobinfection was put in data/screenshots_new
+2022-10-27T05:41:29.3368910Z screenshot_antag_icons_obsessed was put in data/screenshots_new
+2022-10-27T05:41:29.3372287Z screenshot_antag_icons_malfaimidround was put in data/screenshots_new
+2022-10-27T05:41:29.3372581Z
+2022-10-27T05:41:29.3373097Z [1;32mPASS[0m /datum/unit_test/screenshot_antag_icons 0.3s
+2022-10-27T05:41:29.3373772Z ##[endgroup]
+2022-10-27T05:41:29.6066997Z ##[group]/datum/unit_test/screenshot_basic
+2022-10-27T05:41:29.6075525Z screenshot_basic_red was put in data/screenshots_new
+2022-10-27T05:41:29.6078638Z
+2022-10-27T05:41:29.6082196Z [1;32mPASS[0m /datum/unit_test/screenshot_basic 0s
+2022-10-27T05:41:29.6085438Z ##[endgroup]
+2022-10-27T05:41:29.6308021Z ##[group]/datum/unit_test/screenshot_humanoids
+2022-10-27T05:41:30.3591652Z screenshot_humanoids__datum_species_lizard was put in data/screenshots_new
+2022-10-27T05:41:31.2589662Z screenshot_humanoids__datum_species_moth was put in data/screenshots_new
+2022-10-27T05:41:31.9323705Z screenshot_humanoids__datum_species_shadow was put in data/screenshots_new
+2022-10-27T05:41:32.1651600Z screenshot_humanoids__datum_species_shadow_nightmare was put in data/screenshots_new
+2022-10-27T05:41:32.8142370Z screenshot_humanoids__datum_species_abductor was put in data/screenshots_new
+2022-10-27T05:41:33.4104949Z screenshot_humanoids__datum_species_android was put in data/screenshots_new
+2022-10-27T05:41:34.0306787Z screenshot_humanoids__datum_species_dullahan was put in data/screenshots_new
+2022-10-27T05:41:34.6399759Z screenshot_humanoids__datum_species_ethereal was put in data/screenshots_new
+2022-10-27T05:41:35.3333622Z screenshot_humanoids__datum_species_human was put in data/screenshots_new
+2022-10-27T05:41:36.1586851Z screenshot_humanoids__datum_species_human_felinid was put in data/screenshots_new
+2022-10-27T05:41:36.9430568Z screenshot_humanoids__datum_species_human_krokodil_addict was put in data/screenshots_new
+2022-10-27T05:41:37.7067338Z screenshot_humanoids__datum_species_fly was put in data/screenshots_new
+2022-10-27T05:41:38.3488088Z screenshot_humanoids__datum_species_golem was put in data/screenshots_new
+2022-10-27T05:41:38.9816576Z screenshot_humanoids__datum_species_golem_adamantine was put in data/screenshots_new
+2022-10-27T05:41:39.6179037Z screenshot_humanoids__datum_species_golem_plasma was put in data/screenshots_new
+2022-10-27T05:41:40.2518127Z screenshot_humanoids__datum_species_golem_diamond was put in data/screenshots_new
+2022-10-27T05:41:40.9179988Z screenshot_humanoids__datum_species_golem_gold was put in data/screenshots_new
+2022-10-27T05:41:41.5666452Z screenshot_humanoids__datum_species_golem_silver was put in data/screenshots_new
+2022-10-27T05:41:42.2085418Z screenshot_humanoids__datum_species_golem_plasteel was put in data/screenshots_new
+2022-10-27T05:41:42.7916566Z screenshot_humanoids__datum_species_golem_titanium was put in data/screenshots_new
+2022-10-27T05:41:43.4311508Z screenshot_humanoids__datum_species_golem_plastitanium was put in data/screenshots_new
+2022-10-27T05:41:44.0632010Z screenshot_humanoids__datum_species_golem_alloy was put in data/screenshots_new
+2022-10-27T05:41:44.7023401Z screenshot_humanoids__datum_species_golem_wood was put in data/screenshots_new
+2022-10-27T05:41:45.3273391Z screenshot_humanoids__datum_species_golem_uranium was put in data/screenshots_new
+2022-10-27T05:41:45.9609338Z screenshot_humanoids__datum_species_golem_sand was put in data/screenshots_new
+2022-10-27T05:41:46.5998181Z screenshot_humanoids__datum_species_golem_glass was put in data/screenshots_new
+2022-10-27T05:41:47.2316624Z screenshot_humanoids__datum_species_golem_bluespace was put in data/screenshots_new
+2022-10-27T05:41:47.8414848Z screenshot_humanoids__datum_species_golem_bananium was put in data/screenshots_new
+2022-10-27T05:41:48.3268058Z screenshot_humanoids__datum_species_golem_runic was put in data/screenshots_new
+2022-10-27T05:41:49.0158232Z screenshot_humanoids__datum_species_golem_cloth was put in data/screenshots_new
+2022-10-27T05:41:49.5977864Z screenshot_humanoids__datum_species_golem_plastic was put in data/screenshots_new
+2022-10-27T05:41:50.2331785Z screenshot_humanoids__datum_species_golem_bronze was put in data/screenshots_new
+2022-10-27T05:41:50.7727391Z screenshot_humanoids__datum_species_golem_cardboard was put in data/screenshots_new
+2022-10-27T05:41:51.4241290Z screenshot_humanoids__datum_species_golem_leather was put in data/screenshots_new
+2022-10-27T05:41:51.9263638Z screenshot_humanoids__datum_species_golem_durathread was put in data/screenshots_new
+2022-10-27T05:41:52.4187080Z screenshot_humanoids__datum_species_golem_bone was put in data/screenshots_new
+2022-10-27T05:41:52.9144290Z screenshot_humanoids__datum_species_golem_snow was put in data/screenshots_new
+2022-10-27T05:41:53.5567094Z screenshot_humanoids__datum_species_golem_mhydrogen was put in data/screenshots_new
+2022-10-27T05:41:54.2523403Z screenshot_humanoids__datum_species_jelly was put in data/screenshots_new
+2022-10-27T05:41:54.9494868Z screenshot_humanoids__datum_species_jelly_slime was put in data/screenshots_new
+2022-10-27T05:41:55.6574845Z screenshot_humanoids__datum_species_jelly_luminescent was put in data/screenshots_new
+2022-10-27T05:41:56.3636662Z screenshot_humanoids__datum_species_jelly_stargazer was put in data/screenshots_new
+2022-10-27T05:41:56.9807853Z screenshot_humanoids__datum_species_lizard_ashwalker was put in data/screenshots_new
+2022-10-27T05:41:57.6172458Z screenshot_humanoids__datum_species_lizard_silverscale was put in data/screenshots_new
+2022-10-27T05:41:57.7952429Z screenshot_humanoids__datum_species_monkey was put in data/screenshots_new
+2022-10-27T05:41:58.3429906Z screenshot_humanoids__datum_species_mush was put in data/screenshots_new
+2022-10-27T05:41:58.9291358Z screenshot_humanoids__datum_species_plasmaman was put in data/screenshots_new
+2022-10-27T05:41:59.6393043Z screenshot_humanoids__datum_species_pod was put in data/screenshots_new
+2022-10-27T05:42:00.3004709Z screenshot_humanoids__datum_species_skeleton was put in data/screenshots_new
+2022-10-27T05:42:01.0488511Z screenshot_humanoids__datum_species_snail was put in data/screenshots_new
+2022-10-27T05:42:01.7655604Z screenshot_humanoids__datum_species_vampire was put in data/screenshots_new
+2022-10-27T05:42:02.5637759Z screenshot_humanoids__datum_species_zombie was put in data/screenshots_new
+2022-10-27T05:42:03.4341531Z screenshot_humanoids__datum_species_zombie_infectious was put in data/screenshots_new
+2022-10-27T05:42:03.4342475Z
+2022-10-27T05:42:03.4433344Z [1;32mPASS[0m /datum/unit_test/screenshot_humanoids 33.8s
+2022-10-27T05:42:03.4434057Z ##[endgroup]
+2022-10-27T05:42:38.0137819Z ##[group]/datum/unit_test/screenshot_saturnx
+2022-10-27T05:42:38.2805908Z screenshot_saturnx_invisibility was put in data/screenshots_new
+2022-10-27T05:42:38.2806525Z
+2022-10-27T05:42:38.2807422Z [1;32mPASS[0m /datum/unit_test/screenshot_saturnx 0.2s
+2022-10-27T05:42:38.2808381Z ##[endgroup]
+2022-10-27T05:42:38.5125108Z ##[group]/datum/unit_test/security_officer_roundstart_distribution
+2022-10-27T05:42:38.6313313Z
+2022-10-27T05:42:38.6314073Z [1;32mPASS[0m /datum/unit_test/security_officer_roundstart_distribution 0.1s
+2022-10-27T05:42:38.6314848Z ##[endgroup]
+2022-10-27T05:42:38.7844382Z ##[group]/datum/unit_test/security_officer_latejoin_distribution
+2022-10-27T05:42:39.3108839Z
+2022-10-27T05:42:39.3109578Z [1;32mPASS[0m /datum/unit_test/security_officer_latejoin_distribution 0.5s
+2022-10-27T05:42:39.3110392Z ##[endgroup]
+2022-10-27T05:42:39.8689626Z ##[group]/datum/unit_test/security_levels
+2022-10-27T05:42:39.8691007Z
+2022-10-27T05:42:39.8692358Z [1;32mPASS[0m /datum/unit_test/security_levels 0s
+2022-10-27T05:42:39.8694155Z ##[endgroup]
+2022-10-27T05:42:39.8954646Z ##[group]/datum/unit_test/servingtray
+2022-10-27T05:42:39.9246160Z
+2022-10-27T05:42:39.9246828Z [1;32mPASS[0m /datum/unit_test/servingtray 0.1s
+2022-10-27T05:42:39.9247596Z ##[endgroup]
+2022-10-27T05:42:39.9527510Z ##[group]/datum/unit_test/simple_animal_freeze
+2022-10-27T05:42:39.9538858Z
+2022-10-27T05:42:39.9539579Z [1;32mPASS[0m /datum/unit_test/simple_animal_freeze 0s
+2022-10-27T05:42:39.9540575Z ##[endgroup]
+2022-10-27T05:42:39.9737208Z ##[group]/datum/unit_test/siunit
+2022-10-27T05:42:39.9737877Z
+2022-10-27T05:42:39.9739067Z [1;32mPASS[0m /datum/unit_test/siunit 0s
+2022-10-27T05:42:39.9739970Z ##[endgroup]
+2022-10-27T05:42:40.0059889Z ##[group]/datum/unit_test/slips
+2022-10-27T05:42:40.0605319Z
+2022-10-27T05:42:40.0606405Z [1;32mPASS[0m /datum/unit_test/slips 0s
+2022-10-27T05:42:40.0608008Z ##[endgroup]
+2022-10-27T05:42:40.1167017Z ##[group]/datum/unit_test/spawn_humans
+2022-10-27T05:42:45.1906375Z
+2022-10-27T05:42:45.1907903Z [1;32mPASS[0m /datum/unit_test/spawn_humans 5s
+2022-10-27T05:42:45.1910749Z ##[endgroup]
+2022-10-27T05:42:45.2427283Z ##[group]/datum/unit_test/spawn_mobs
+2022-10-27T05:42:45.3357801Z
+2022-10-27T05:42:45.3359033Z [1;32mPASS[0m /datum/unit_test/spawn_mobs 0.1s
+2022-10-27T05:42:45.3361725Z ##[endgroup]
+2022-10-27T05:42:45.5043702Z ##[group]/datum/unit_test/species_change_clothing
+2022-10-27T05:42:45.6048589Z
+2022-10-27T05:42:45.6049694Z [1;32mPASS[0m /datum/unit_test/species_change_clothing 0.1s
+2022-10-27T05:42:45.6051771Z ##[endgroup]
+2022-10-27T05:42:45.6837595Z ##[group]/datum/unit_test/species_change_organs
+2022-10-27T05:42:45.7545977Z
+2022-10-27T05:42:45.7546831Z [1;32mPASS[0m /datum/unit_test/species_change_organs 0.1s
+2022-10-27T05:42:45.7547563Z ##[endgroup]
+2022-10-27T05:42:45.7836582Z ##[group]/datum/unit_test/species_config_sanity
+2022-10-27T05:42:45.7840840Z
+2022-10-27T05:42:45.7842768Z [1;32mPASS[0m /datum/unit_test/species_config_sanity 0s
+2022-10-27T05:42:45.7844337Z ##[endgroup]
+2022-10-27T05:42:45.8022187Z ##[group]/datum/unit_test/species_unique_id
+2022-10-27T05:42:45.8022866Z
+2022-10-27T05:42:45.8075321Z [1;32mPASS[0m /datum/unit_test/species_unique_id 0s
+2022-10-27T05:42:45.8076400Z ##[endgroup]
+2022-10-27T05:42:45.8351362Z ##[group]/datum/unit_test/species_whitelist_check
+2022-10-27T05:42:45.8351724Z
+2022-10-27T05:42:45.8352365Z [1;32mPASS[0m /datum/unit_test/species_whitelist_check 0s
+2022-10-27T05:42:45.8353142Z ##[endgroup]
+2022-10-27T05:42:45.8533484Z ##[group]/datum/unit_test/spell_invocations
+2022-10-27T05:42:45.8533768Z
+2022-10-27T05:42:45.8534255Z [1;32mPASS[0m /datum/unit_test/spell_invocations 0s
+2022-10-27T05:42:45.8534811Z ##[endgroup]
+2022-10-27T05:42:45.8839364Z ##[group]/datum/unit_test/mind_swap_spell
+2022-10-27T05:42:45.9396663Z
+2022-10-27T05:42:45.9397306Z [1;32mPASS[0m /datum/unit_test/mind_swap_spell 0.1s
+2022-10-27T05:42:45.9397999Z ##[endgroup]
+2022-10-27T05:42:45.9707938Z ##[group]/datum/unit_test/spell_names
+2022-10-27T05:42:45.9708233Z
+2022-10-27T05:42:45.9708764Z [1;32mPASS[0m /datum/unit_test/spell_names 0s
+2022-10-27T05:42:45.9709443Z ##[endgroup]
+2022-10-27T05:42:45.9892272Z ##[group]/datum/unit_test/shapeshift_spell_validity
+2022-10-27T05:42:45.9896681Z
+2022-10-27T05:42:45.9897201Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell_validity 0s
+2022-10-27T05:42:45.9897727Z ##[endgroup]
+2022-10-27T05:42:46.0425278Z ##[group]/datum/unit_test/shapeshift_spell
+2022-10-27T05:42:46.3445398Z
+2022-10-27T05:42:46.3446335Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell 0.3s
+2022-10-27T05:42:46.3447239Z ##[endgroup]
+2022-10-27T05:42:46.8200052Z ##[group]/datum/unit_test/shapeshift_holoparasites
+2022-10-27T05:42:46.8537455Z
+2022-10-27T05:42:46.8539870Z [1;32mPASS[0m /datum/unit_test/shapeshift_holoparasites 0s
+2022-10-27T05:42:46.8541451Z ##[endgroup]
+2022-10-27T05:42:46.9292759Z ##[group]/datum/unit_test/spritesheets
+2022-10-27T05:42:50.5944827Z
+2022-10-27T05:42:50.5945740Z [1;32mPASS[0m /datum/unit_test/spritesheets 3.6s
+2022-10-27T05:42:50.5946612Z ##[endgroup]
+2022-10-27T05:42:57.1137055Z ##[group]/datum/unit_test/stack_singular_name
+2022-10-27T05:42:57.1142555Z
+2022-10-27T05:42:57.1145224Z [1;32mPASS[0m /datum/unit_test/stack_singular_name 0s
+2022-10-27T05:42:57.1147574Z ##[endgroup]
+2022-10-27T05:42:57.1358739Z ##[group]/datum/unit_test/stomach
+2022-10-27T05:42:57.1694838Z
+2022-10-27T05:42:57.1695603Z [1;32mPASS[0m /datum/unit_test/stomach 0s
+2022-10-27T05:42:57.1696272Z ##[endgroup]
+2022-10-27T05:42:57.1961163Z ##[group]/datum/unit_test/strip_menu_ui_status
+2022-10-27T05:42:57.2480737Z
+2022-10-27T05:42:57.2481561Z [1;32mPASS[0m /datum/unit_test/strip_menu_ui_status 0.1s
+2022-10-27T05:42:57.2483682Z ##[endgroup]
+2022-10-27T05:42:57.3124509Z ##[group]/datum/unit_test/subsystem_init
+2022-10-27T05:42:57.3124738Z
+2022-10-27T05:42:57.3127230Z [1;32mPASS[0m /datum/unit_test/subsystem_init 0s
+2022-10-27T05:42:57.3128294Z ##[endgroup]
+2022-10-27T05:42:57.3335312Z ##[group]/datum/unit_test/suit_storage_icons
+2022-10-27T05:42:59.0884928Z 1 - /obj/item/ammo_casing/shotgun using invalid worn_icon_state, "shell"
+2022-10-27T05:42:59.1022656Z 2 - /obj/item/gun/ballistic/shotgun/hook using invalid icon_state, "hookshotgun"
+2022-10-27T05:42:59.1167874Z 3 - /obj/item/gun/ballistic/automatic/surplus using invalid icon_state, "surplus"
+2022-10-27T05:42:59.1313544Z 4 - /obj/item/gun/energy/beam_rifle using invalid icon_state, "esniper"
+2022-10-27T05:42:59.1335197Z 5 - /obj/item/gun/energy/lasercannon using invalid icon_state, "lasercannon"
+2022-10-27T05:42:59.1363131Z 6 - /obj/item/gun/energy/ionrifle using invalid icon_state, "ionrifle"
+2022-10-27T05:42:59.1364702Z 7 - /obj/item/gun/energy/ionrifle/carbine using invalid icon_state, "ioncarbine"
+2022-10-27T05:42:59.1507295Z 8 - /obj/item/tome using invalid icon_state, "tome"
+2022-10-27T05:42:59.1546690Z 9 - /obj/item/melee/sickly_blade/void using invalid icon_state, "void_blade"
+2022-10-27T05:42:59.1558801Z 10 - /obj/item/nullrod/staff using invalid icon_state, "godstaff-red"
+2022-10-27T05:42:59.1561300Z 11 - /obj/item/nullrod/staff/blue using invalid icon_state, "godstaff-blue"
+2022-10-27T05:42:59.1647859Z 12 - /obj/item/nullrod/tribal_knife using invalid icon_state, "crysknife"
+2022-10-27T05:42:59.1657290Z 13 - /obj/item/nullrod/spear using invalid icon_state, "ratvarian_spear"
+2022-10-27T05:42:59.1666968Z 14 - /obj/item/candle using invalid icon_state, "candle1"
+2022-10-27T05:42:59.2050751Z 15 - /obj/item/toy/eightball using invalid icon_state, "eightball"
+2022-10-27T05:42:59.2053756Z 16 - /obj/item/toy/mecha using invalid icon_state, "fivestarstoy"
+2022-10-27T05:42:59.2055847Z 17 - /obj/item/toy/mecha/ripley using invalid icon_state, "ripleytoy"
+2022-10-27T05:42:59.2058896Z 18 - /obj/item/toy/mecha/ripleymkii using invalid icon_state, "ripleymkiitoy"
+2022-10-27T05:42:59.2061681Z 19 - /obj/item/toy/mecha/hauler using invalid icon_state, "haulertoy"
+2022-10-27T05:42:59.2064463Z 20 - /obj/item/toy/mecha/clarke using invalid icon_state, "clarketoy"
+2022-10-27T05:42:59.2067351Z 21 - /obj/item/toy/mecha/odysseus using invalid icon_state, "odysseustoy"
+2022-10-27T05:42:59.2069885Z 22 - /obj/item/toy/mecha/gygax using invalid icon_state, "gygaxtoy"
+2022-10-27T05:42:59.2072424Z 23 - /obj/item/toy/mecha/durand using invalid icon_state, "durandtoy"
+2022-10-27T05:42:59.2075046Z 24 - /obj/item/toy/mecha/savannahivanov using invalid icon_state, "savannahivanovtoy"
+2022-10-27T05:42:59.2077536Z 25 - /obj/item/toy/mecha/phazon using invalid icon_state, "phazontoy"
+2022-10-27T05:42:59.2080032Z 26 - /obj/item/toy/mecha/honk using invalid icon_state, "honktoy"
+2022-10-27T05:42:59.2083569Z 27 - /obj/item/toy/mecha/darkgygax using invalid icon_state, "darkgygaxtoy"
+2022-10-27T05:42:59.2085844Z 28 - /obj/item/toy/mecha/mauler using invalid icon_state, "maulertoy"
+2022-10-27T05:42:59.2088536Z 29 - /obj/item/toy/mecha/darkhonk using invalid icon_state, "darkhonktoy"
+2022-10-27T05:42:59.2091361Z 30 - /obj/item/toy/mecha/deathripley using invalid icon_state, "deathripleytoy"
+2022-10-27T05:42:59.2094603Z 31 - /obj/item/toy/mecha/reticence using invalid icon_state, "reticencetoy"
+2022-10-27T05:42:59.2096993Z 32 - /obj/item/toy/mecha/marauder using invalid icon_state, "maraudertoy"
+2022-10-27T05:42:59.2099775Z 33 - /obj/item/toy/mecha/seraph using invalid icon_state, "seraphtoy"
+2022-10-27T05:42:59.2102793Z 34 - /obj/item/toy/mecha/firefighter using invalid icon_state, "firefightertoy"
+2022-10-27T05:42:59.2105424Z 35 - /obj/item/toy/waterballoon using invalid icon_state, "waterballoon-e"
+2022-10-27T05:42:59.2107991Z 36 - /obj/item/toy/balloon using invalid icon_state, "balloon"
+2022-10-27T05:42:59.2111052Z 37 - /obj/item/toy/balloon/corgi using invalid icon_state, "corgi"
+2022-10-27T05:42:59.2113846Z 38 - /obj/item/toy/balloon/syndicate using invalid icon_state, "syndballoon"
+2022-10-27T05:42:59.2116990Z 39 - /obj/item/toy/balloon/arrest using invalid icon_state, "arrestballoon"
+2022-10-27T05:42:59.2119545Z 40 - /obj/item/toy/captainsaid using invalid icon_state, "captainsaid_off"
+2022-10-27T05:42:59.2122005Z 41 - /obj/item/toy/spinningtoy using invalid icon_state, "singularity_s1"
+2022-10-27T05:42:59.2127416Z 42 - /obj/item/toy/ammo/gun using invalid icon_state, "357OLD-7"
+2022-10-27T05:42:59.2130032Z 43 - /obj/item/toy/sword using invalid icon_state, "e_sword"
+2022-10-27T05:42:59.2132828Z 44 - /obj/item/toy/foamblade using invalid icon_state, "foamblade"
+2022-10-27T05:42:59.2135633Z 45 - /obj/item/toy/windup_toolbox using invalid icon_state, "green"
+2022-10-27T05:42:59.2141209Z 46 - /obj/item/toy/snappop using invalid icon_state, "snappop"
+2022-10-27T05:42:59.2144552Z 47 - /obj/item/toy/talking using invalid icon_state, "owlprize"
+2022-10-27T05:42:59.2146583Z 48 - /obj/item/toy/talking/ai using invalid icon_state, "AI"
+2022-10-27T05:42:59.2149175Z 49 - /obj/item/toy/talking/codex_gigas using invalid icon_state, "demonomicon"
+2022-10-27T05:42:59.2151786Z 50 - /obj/item/toy/talking/griffin using invalid icon_state, "griffinprize"
+2022-10-27T05:42:59.2155964Z 51 - /obj/item/toy/nuke using invalid icon_state, "nuketoyidle"
+2022-10-27T05:42:59.2157504Z 52 - /obj/item/toy/minimeteor using invalid icon_state, "minimeteor"
+2022-10-27T05:42:59.2160224Z 53 - /obj/item/toy/redbutton using invalid icon_state, "bigred"
+2022-10-27T05:42:59.2163069Z 54 - /obj/item/toy/snowball using invalid icon_state, "snowball"
+2022-10-27T05:42:59.2165858Z 55 - /obj/item/toy/beach_ball using invalid icon_state, "ball"
+2022-10-27T05:42:59.2168809Z 56 - /obj/item/toy/beach_ball/baseball using invalid icon_state, "baseball"
+2022-10-27T05:42:59.2171419Z 57 - /obj/item/toy/beach_ball/holoball using invalid icon_state, "basketball"
+2022-10-27T05:42:59.2174156Z 58 - /obj/item/toy/beach_ball/holoball/dodgeball using invalid icon_state, "dodgeball"
+2022-10-27T05:42:59.2182197Z 59 - /obj/item/toy/toy_xeno using invalid icon_state, "toy_xeno"
+2022-10-27T05:42:59.2185181Z 60 - /obj/item/toy/cattoy using invalid icon_state, "toy_mouse"
+2022-10-27T05:42:59.2187605Z 61 - /obj/item/toy/figure using invalid icon_state, "nuketoy"
+2022-10-27T05:42:59.2190489Z 62 - /obj/item/toy/figure/cmo using invalid icon_state, "cmo"
+2022-10-27T05:42:59.2193253Z 63 - /obj/item/toy/figure/assistant using invalid icon_state, "assistant"
+2022-10-27T05:42:59.2196041Z 64 - /obj/item/toy/figure/atmos using invalid icon_state, "atmos"
+2022-10-27T05:42:59.2198863Z 65 - /obj/item/toy/figure/bartender using invalid icon_state, "bartender"
+2022-10-27T05:42:59.2201614Z 66 - /obj/item/toy/figure/borg using invalid icon_state, "borg"
+2022-10-27T05:42:59.2204442Z 67 - /obj/item/toy/figure/botanist using invalid icon_state, "botanist"
+2022-10-27T05:42:59.2207240Z 68 - /obj/item/toy/figure/captain using invalid icon_state, "captain"
+2022-10-27T05:42:59.2210113Z 69 - /obj/item/toy/figure/cargotech using invalid icon_state, "cargotech"
+2022-10-27T05:42:59.2212868Z 70 - /obj/item/toy/figure/ce using invalid icon_state, "ce"
+2022-10-27T05:42:59.2215699Z 71 - /obj/item/toy/figure/chaplain using invalid icon_state, "chaplain"
+2022-10-27T05:42:59.2218625Z 72 - /obj/item/toy/figure/chef using invalid icon_state, "chef"
+2022-10-27T05:42:59.2221486Z 73 - /obj/item/toy/figure/chemist using invalid icon_state, "chemist"
+2022-10-27T05:42:59.2224313Z 74 - /obj/item/toy/figure/clown using invalid icon_state, "clown"
+2022-10-27T05:42:59.2227123Z 75 - /obj/item/toy/figure/ian using invalid icon_state, "ian"
+2022-10-27T05:42:59.2229950Z 76 - /obj/item/toy/figure/detective using invalid icon_state, "detective"
+2022-10-27T05:42:59.2232724Z 77 - /obj/item/toy/figure/dsquad using invalid icon_state, "dsquad"
+2022-10-27T05:42:59.2236741Z 78 - /obj/item/toy/figure/engineer using invalid icon_state, "engineer"
+2022-10-27T05:42:59.2239402Z 79 - /obj/item/toy/figure/geneticist using invalid icon_state, "geneticist"
+2022-10-27T05:42:59.2242217Z 80 - /obj/item/toy/figure/hop using invalid icon_state, "hop"
+2022-10-27T05:42:59.2245674Z 81 - /obj/item/toy/figure/hos using invalid icon_state, "hos"
+2022-10-27T05:42:59.2247841Z 82 - /obj/item/toy/figure/qm using invalid icon_state, "qm"
+2022-10-27T05:42:59.2250699Z 83 - /obj/item/toy/figure/janitor using invalid icon_state, "janitor"
+2022-10-27T05:42:59.2253421Z 84 - /obj/item/toy/figure/lawyer using invalid icon_state, "lawyer"
+2022-10-27T05:42:59.2256926Z 85 - /obj/item/toy/figure/curator using invalid icon_state, "curator"
+2022-10-27T05:42:59.2260176Z 86 - /obj/item/toy/figure/md using invalid icon_state, "md"
+2022-10-27T05:42:59.2262399Z 87 - /obj/item/toy/figure/paramedic using invalid icon_state, "paramedic"
+2022-10-27T05:42:59.2265225Z 88 - /obj/item/toy/figure/psychologist using invalid icon_state, "psychologist"
+2022-10-27T05:42:59.2268046Z 89 - /obj/item/toy/figure/prisoner using invalid icon_state, "prisoner"
+2022-10-27T05:42:59.2270732Z 90 - /obj/item/toy/figure/mime using invalid icon_state, "mime"
+2022-10-27T05:42:59.2273548Z 91 - /obj/item/toy/figure/miner using invalid icon_state, "miner"
+2022-10-27T05:42:59.2276353Z 92 - /obj/item/toy/figure/ninja using invalid icon_state, "ninja"
+2022-10-27T05:42:59.2279783Z 93 - /obj/item/toy/figure/wizard using invalid icon_state, "wizard"
+2022-10-27T05:42:59.2281951Z 94 - /obj/item/toy/figure/rd using invalid icon_state, "rd"
+2022-10-27T05:42:59.2284816Z 95 - /obj/item/toy/figure/roboticist using invalid icon_state, "roboticist"
+2022-10-27T05:42:59.2287567Z 96 - /obj/item/toy/figure/scientist using invalid icon_state, "scientist"
+2022-10-27T05:42:59.2290280Z 97 - /obj/item/toy/figure/syndie using invalid icon_state, "syndie"
+2022-10-27T05:42:59.2293161Z 98 - /obj/item/toy/figure/secofficer using invalid icon_state, "secofficer"
+2022-10-27T05:42:59.2295983Z 99 - /obj/item/toy/figure/virologist using invalid icon_state, "virologist"
+2022-10-27T05:42:59.2298894Z 100 - /obj/item/toy/figure/warden using invalid icon_state, "warden"
+2022-10-27T05:42:59.2301934Z 101 - /obj/item/toy/dummy using invalid icon_state, "puppet"
+2022-10-27T05:42:59.2304886Z 102 - /obj/item/toy/seashell using invalid icon_state, "shell1"
+2022-10-27T05:42:59.2307528Z 103 - /obj/item/toy/brokenradio using invalid icon_state, "broken_radio"
+2022-10-27T05:42:59.2310163Z 104 - /obj/item/toy/braintoy using invalid icon_state, "brain-old"
+2022-10-27T05:42:59.2315630Z 105 - /obj/item/toy/reality_pierce using invalid icon_state, "pierced_illusion"
+2022-10-27T05:42:59.2318230Z 106 - /obj/item/toy/foamfinger using invalid icon_state, "foamfinger"
+2022-10-27T05:42:59.2320978Z 107 - /obj/item/toy/intento using invalid icon_state, "blank"
+2022-10-27T05:42:59.2380048Z 108 - /obj/item/toy/sprayoncan using invalid icon_state, "sprayoncan"
+2022-10-27T05:42:59.2380659Z 109 - /obj/item/toy/xmas_cracker using invalid icon_state, "cracker"
+2022-10-27T05:42:59.2381172Z 110 - /obj/item/cultivator/rake using invalid icon_state, "rake"
+2022-10-27T05:42:59.2381690Z 111 - /obj/item/hatchet/wooden using invalid icon_state, "woodhatchet"
+2022-10-27T05:42:59.2382240Z 112 - /obj/item/hatchet/cutterblade using invalid icon_state, "cutterblade"
+2022-10-27T05:42:59.3124390Z 113 - /obj/item/reagent_containers/hypospray/medipen using invalid worn_icon_state, "medipen"
+2022-10-27T05:42:59.3278187Z 114 - /obj/item/storage/pill_bottle using invalid icon_state, "pill_canister"
+2022-10-27T05:42:59.3287606Z 115 - /obj/item/analyzer/ranged using invalid icon_state, "analyzerranged"
+2022-10-27T05:42:59.3880589Z 116 - /obj/item/organ/internal/regenerative_core/legion using invalid icon_state, "legion_soul"
+2022-10-27T05:42:59.3891926Z 117 - /obj/item/spear/bamboospear using invalid icon_state, "bamboo_spear0"
+2022-10-27T05:42:59.3936485Z 118 - /obj/item/abductor/gizmo using invalid icon_state, "gizmo_scan"
+2022-10-27T05:42:59.3938721Z 119 - /obj/item/abductor/silencer using invalid icon_state, "silencer"
+2022-10-27T05:42:59.3939330Z 120 - /obj/item/abductor/mind_device using invalid icon_state, "mind_device_message"
+2022-10-27T05:42:59.3955530Z 121 - /obj/item/claymore/cutlass using invalid worn_icon_state, "cutlass"
+2022-10-27T05:42:59.3960287Z 122 - /obj/item/claymore/highlander/robot using invalid icon_state, "claymore_cyborg"
+2022-10-27T05:42:59.3963042Z 123 - /obj/item/banner using invalid icon_state, "banner"
+2022-10-27T05:42:59.3966004Z 124 - /obj/item/banner/security using invalid icon_state, "banner_security"
+2022-10-27T05:42:59.3968500Z 125 - /obj/item/banner/medical using invalid icon_state, "banner_medical"
+2022-10-27T05:42:59.3971572Z 126 - /obj/item/banner/science using invalid icon_state, "banner_science"
+2022-10-27T05:42:59.3974330Z 127 - /obj/item/banner/cargo using invalid icon_state, "banner_cargo"
+2022-10-27T05:42:59.3977163Z 128 - /obj/item/banner/engineering using invalid icon_state, "banner_engineering"
+2022-10-27T05:42:59.3980201Z 129 - /obj/item/banner/red using invalid icon_state, "banner-red"
+2022-10-27T05:42:59.3983133Z 130 - /obj/item/banner/blue using invalid icon_state, "banner-blue"
+2022-10-27T05:42:59.4023342Z 131 - /obj/item/gun/magic/staff using invalid icon_state, "staff"
+2022-10-27T05:42:59.4025602Z 132 - /obj/item/gun/magic/staff/change using invalid icon_state, "staffofchange"
+2022-10-27T05:42:59.4028458Z 133 - /obj/item/gun/magic/staff/animate using invalid icon_state, "staffofanimation"
+2022-10-27T05:42:59.4031283Z 134 - /obj/item/gun/magic/staff/healing using invalid icon_state, "staffofhealing"
+2022-10-27T05:42:59.4034153Z 135 - /obj/item/gun/magic/staff/chaos using invalid icon_state, "staffofchaos"
+2022-10-27T05:42:59.4036955Z 136 - /obj/item/gun/magic/staff/door using invalid icon_state, "staffofdoor"
+2022-10-27T05:42:59.4039732Z 137 - /obj/item/gun/magic/staff/honk using invalid icon_state, "honker"
+2022-10-27T05:42:59.4045070Z 138 - /obj/item/gun/magic/staff/locker using invalid worn_icon_state, "lockerstaff"
+2022-10-27T05:42:59.4047723Z 139 - /obj/item/gun/magic/staff/flying using invalid worn_icon_state, "flightstaff"
+2022-10-27T05:42:59.4050532Z 140 - /obj/item/gun/magic/staff/babel using invalid worn_icon_state, "babelstaff"
+2022-10-27T05:42:59.4053458Z 141 - /obj/item/gun/magic/staff/necropotence using invalid worn_icon_state, "necrostaff"
+2022-10-27T05:42:59.4056307Z 142 - /obj/item/gun/magic/staff/wipe using invalid worn_icon_state, "wipestaff"
+2022-10-27T05:42:59.4075733Z 143 - /obj/item/melee/energy/sword/pirate using invalid icon_state, "e_cutlass"
+2022-10-27T05:42:59.4078221Z 144 - /obj/item/clothing/glasses/eyepatch using invalid icon_state, "eyepatch"
+2022-10-27T05:42:59.4083656Z 145 - /obj/item/melee/energy/sword/cyborg/saw using invalid icon_state, "esaw"
+2022-10-27T05:42:59.4096186Z 146 - /obj/item/tank/jetpack/improvised using invalid worn_icon_state, "jetpack-improvised"
+2022-10-27T05:42:59.4103014Z 147 - /obj/item/multitool using invalid icon_state, "multitool"
+2022-10-27T05:42:59.4106594Z 148 - /obj/item/multitool/cyborg using invalid icon_state, "multitool_cyborg"
+2022-10-27T05:42:59.4108989Z 149 - /obj/item/multitool/circuit using invalid icon_state, "multitool_circuit"
+2022-10-27T05:42:59.4112331Z 150 - /obj/item/storage/bag/trash using invalid icon_state, "trashbag"
+2022-10-27T05:42:59.4114785Z 151 - /obj/item/storage/bag/trash/bluespace using invalid icon_state, "bluetrashbag"
+2022-10-27T05:42:59.4117882Z 152 - /obj/item/cane using invalid icon_state, "cane"
+2022-10-27T05:42:59.4121455Z 153 - /obj/item/cane/white using invalid icon_state, "cane_white"
+2022-10-27T05:42:59.4123404Z 154 - /obj/item/megaphone/clown using invalid icon_state, "megaphone-clown"
+2022-10-27T05:42:59.4142890Z 155 - /obj/item/food/pie/cream using invalid icon_state, "pie"
+2022-10-27T05:42:59.4157129Z 156 - /obj/item/instrument/bikehorn using invalid icon_state, "bike_horn"
+2022-10-27T05:42:59.4160055Z 157 - /obj/item/reagent_containers/cup/soda_cans/canned_laughter using invalid icon_state, "laughter"
+2022-10-27T05:42:59.4172872Z 158 - /obj/item/grown/bananapeel using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4173955Z 159 - /obj/item/grown/bananapeel/bombanana using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4174824Z 160 - /obj/item/grown/bananapeel/mimanapeel using invalid icon_state, "mimana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4176072Z 161 - /obj/item/grown/bananapeel/bluespace using invalid icon_state, "bluenana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4177252Z 162 - /obj/item/grown/bananapeel/specialpeel using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4178650Z 163 - /obj/item/food/grown/banana using invalid icon_state, "banana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4179781Z 164 - /obj/item/food/grown/banana/bombanana using invalid icon_state, "banana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4180904Z 165 - /obj/item/food/grown/banana/mime using invalid icon_state, "mimana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4182029Z 166 - /obj/item/food/grown/banana/bluespace using invalid icon_state, "bluenana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4183368Z 167 - /obj/item/food/grown/banana/bunch using invalid icon_state, "banana_bunch" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-10-27T05:42:59.4184222Z 168 - /obj/item/stack/spacecash/c1 using invalid icon_state, "spacecash1"
+2022-10-27T05:42:59.4188146Z 169 - /obj/item/stack/spacecash/c10 using invalid icon_state, "spacecash10"
+2022-10-27T05:42:59.4191119Z 170 - /obj/item/stack/spacecash/c20 using invalid icon_state, "spacecash20"
+2022-10-27T05:42:59.4194008Z 171 - /obj/item/stack/spacecash/c50 using invalid icon_state, "spacecash50"
+2022-10-27T05:42:59.4196852Z 172 - /obj/item/stack/spacecash/c100 using invalid icon_state, "spacecash100"
+2022-10-27T05:42:59.4199667Z 173 - /obj/item/stack/spacecash/c200 using invalid icon_state, "spacecash200"
+2022-10-27T05:42:59.4202843Z 174 - /obj/item/stack/spacecash/c500 using invalid icon_state, "spacecash500"
+2022-10-27T05:42:59.4205536Z 175 - /obj/item/stack/spacecash/c1000 using invalid icon_state, "spacecash1000"
+2022-10-27T05:42:59.4208409Z 176 - /obj/item/stack/spacecash/c10000 using invalid icon_state, "spacecash10000"
+2022-10-27T05:42:59.4211295Z 177 - /obj/item/clothing/mask/facehugger/toy using invalid worn_icon_state, "facehugger"
+2022-10-27T05:42:59.4221553Z 178 - /obj/item/kitchen/fork using invalid icon_state, "fork"
+2022-10-27T05:42:59.4224344Z 179 - /obj/item/kitchen/fork/plastic using invalid icon_state, "plastic_fork"
+2022-10-27T05:42:59.4231841Z 180 - /obj/item/kitchen/spoon using invalid icon_state, "spoon"
+2022-10-27T05:42:59.4234746Z 181 - /obj/item/kitchen/spoon/plastic using invalid icon_state, "plastic_spoon"
+2022-10-27T05:42:59.4242352Z 182 - /obj/item/bonesetter using invalid icon_state, "bonesetter"
+2022-10-27T05:42:59.4244975Z 183 - /obj/item/cautery using invalid icon_state, "cautery"
+2022-10-27T05:42:59.4247875Z 184 - /obj/item/cautery/advanced using invalid icon_state, "e_cautery"
+2022-10-27T05:42:59.4250639Z 185 - /obj/item/hemostat using invalid icon_state, "hemostat"
+2022-10-27T05:42:59.4253571Z 186 - /obj/item/hemostat/supermatter using invalid icon_state, "supermatter_tongs"
+2022-10-27T05:42:59.4256376Z 187 - /obj/item/retractor using invalid icon_state, "retractor"
+2022-10-27T05:42:59.4259443Z 188 - /obj/item/retractor/advanced using invalid icon_state, "adv_retractor"
+2022-10-27T05:42:59.4262427Z 189 - /obj/item/scalpel using invalid icon_state, "scalpel"
+2022-10-27T05:42:59.4265163Z 190 - /obj/item/scalpel/supermatter using invalid icon_state, "supermatter_scalpel"
+2022-10-27T05:42:59.4268021Z 191 - /obj/item/scalpel/advanced using invalid icon_state, "e_scalpel"
+2022-10-27T05:42:59.4271061Z 192 - /obj/item/surgical_drapes using invalid icon_state, "surgical_drapes"
+2022-10-27T05:42:59.4277210Z 193 - /obj/item/stack/medical/bruise_pack using invalid icon_state, "brutepack"
+2022-10-27T05:42:59.4279201Z 194 - /obj/item/stack/medical/gauze using invalid icon_state, "gauze"
+2022-10-27T05:42:59.4283526Z 195 - /obj/item/stack/medical/suture using invalid icon_state, "suture"
+2022-10-27T05:42:59.4286019Z 196 - /obj/item/stack/medical/suture/medicated using invalid icon_state, "suture_purp"
+2022-10-27T05:42:59.4288604Z 197 - /obj/item/stack/medical/ointment using invalid icon_state, "ointment"
+2022-10-27T05:42:59.4291557Z 198 - /obj/item/stack/medical/mesh using invalid icon_state, "regen_mesh"
+2022-10-27T05:42:59.4294469Z 199 - /obj/item/stack/medical/mesh/advanced using invalid icon_state, "aloe_mesh"
+2022-10-27T05:42:59.4297194Z 200 - /obj/item/stack/medical/aloe using invalid icon_state, "aloe_paste"
+2022-10-27T05:42:59.4300231Z 201 - /obj/item/stack/medical/bone_gel using invalid icon_state, "bone-gel"
+2022-10-27T05:42:59.4303320Z 202 - /obj/item/stack/medical/poultice using invalid icon_state, "poultice"
+2022-10-27T05:42:59.4305972Z 203 - /obj/item/assembly/flash/handheld using invalid icon_state, "flash"
+2022-10-27T05:42:59.4309092Z 204 - /obj/item/clothing/mask/cigarette using invalid icon_state, "cigoff"
+2022-10-27T05:42:59.4313422Z 205 - /obj/item/clothing/mask/cigarette/rollie using invalid icon_state, "spliffoff"
+2022-10-27T05:42:59.4316203Z 206 - /obj/item/clothing/mask/cigarette/candy using invalid icon_state, "candyoff"
+2022-10-27T05:42:59.4319067Z 207 - /obj/item/clothing/mask/cigarette/cigar using invalid icon_state, "cigaroff"
+2022-10-27T05:42:59.4321949Z 208 - /obj/item/clothing/mask/cigarette/cigar/cohiba using invalid icon_state, "cigar2off"
+2022-10-27T05:42:59.4324829Z 209 - /obj/item/clothing/mask/cigarette/pipe using invalid icon_state, "pipeoff"
+2022-10-27T05:42:59.4327646Z 210 - /obj/item/clothing/mask/cigarette/pipe/cobpipe using invalid icon_state, "cobpipeoff"
+2022-10-27T05:42:59.4330391Z 211 - /obj/item/disk using invalid icon_state, "datadisk0"
+2022-10-27T05:42:59.4333368Z 212 - /obj/item/disk/holodisk using invalid icon_state, "holodisk"
+2022-10-27T05:42:59.4336344Z 213 - /obj/item/disk/nuclear using invalid icon_state, "nucleardisk"
+2022-10-27T05:42:59.4339645Z 214 - /obj/item/disk/surgery using invalid icon_state, "datadisk1"
+2022-10-27T05:42:59.4342883Z 215 - /obj/item/disk/cargo/bluespace_pod using invalid icon_state, "cargodisk"
+2022-10-27T05:42:59.4345896Z 216 - /obj/item/disk/tech_disk/major using invalid icon_state, "rndmajordisk"
+2022-10-27T05:42:59.4348806Z 217 - /obj/item/melee/powerfist using invalid icon_state, "powerfist"
+2022-10-27T05:42:59.4358739Z 218 - /obj/item/melee/skateboard using invalid icon_state, "skateboard"
+2022-10-27T05:42:59.4361970Z 219 - /obj/item/melee/skateboard/pro using invalid icon_state, "skateboard2"
+2022-10-27T05:42:59.4371577Z 220 - /obj/item/melee/skateboard/hoverboard using invalid icon_state, "hoverboard_red"
+2022-10-27T05:42:59.4372651Z 221 - /obj/item/melee/skateboard/hoverboard/admin using invalid icon_state, "hoverboard_nt"
+2022-10-27T05:42:59.4373753Z 222 - /obj/item/melee/baseball_bat using invalid icon_state, "baseball_bat"
+2022-10-27T05:42:59.4374699Z 223 - /obj/item/melee/baseball_bat/homerun using invalid icon_state, "baseball_bat_home"
+2022-10-27T05:42:59.4376875Z 224 - /obj/item/melee/baseball_bat/ablative using invalid icon_state, "baseball_bat_metal"
+2022-10-27T05:42:59.4379802Z 225 - /obj/item/melee/flyswatter using invalid icon_state, "flyswatter"
+2022-10-27T05:42:59.4386397Z 226 - /obj/item/melee/energy/axe using invalid icon_state, "axe"
+2022-10-27T05:42:59.4389295Z 227 - /obj/item/melee/energy/blade using invalid icon_state, "blade"
+2022-10-27T05:42:59.4392359Z 228 - /obj/item/melee/energy/blade/hardlight using invalid icon_state, "lightblade"
+2022-10-27T05:42:59.4396069Z 229 - /obj/item/melee/synthetic_arm_blade using invalid icon_state, "arm_blade"
+2022-10-27T05:42:59.4398671Z 230 - /obj/item/melee/sabre using invalid icon_state, "sabre"
+2022-10-27T05:42:59.4403118Z 231 - /obj/item/melee/beesword using invalid worn_icon_state, "stinger"
+2022-10-27T05:42:59.4404484Z 232 - /obj/item/melee/supermatter_sword using invalid icon_state, "supermatter_sword"
+2022-10-27T05:42:59.4413439Z 233 - /obj/item/melee/cleric_mace using invalid worn_icon_state, "default_worn"
+2022-10-27T05:42:59.4416300Z 234 - /obj/item/melee/rune_carver using invalid icon_state, "rune_carver"
+2022-10-27T05:42:59.4419326Z 235 - /obj/item/melee/ghost_sword using invalid icon_state, "spectral"
+2022-10-27T05:42:59.4422471Z 236 - /obj/item/reagent_containers/cup/glass/flask using invalid icon_state, "flask"
+2022-10-27T05:42:59.4425277Z 237 - /obj/item/reagent_containers/cup/glass/flask/gold using invalid icon_state, "flask_gold"
+2022-10-27T05:42:59.4428045Z 238 - /obj/item/reagent_containers/cup/glass/flask/det using invalid icon_state, "detflask"
+2022-10-27T05:42:59.4430826Z 239 - /obj/item/stamp using invalid icon_state, "stamp-ok"
+2022-10-27T05:42:59.4438099Z 240 - /obj/item/stamp/qm using invalid icon_state, "stamp-qm"
+2022-10-27T05:42:59.4438587Z 241 - /obj/item/stamp/law using invalid icon_state, "stamp-law"
+2022-10-27T05:42:59.4439459Z 242 - /obj/item/stamp/captain using invalid icon_state, "stamp-cap"
+2022-10-27T05:42:59.4443481Z 243 - /obj/item/stamp/hop using invalid icon_state, "stamp-hop"
+2022-10-27T05:42:59.4446324Z 244 - /obj/item/stamp/hos using invalid icon_state, "stamp-hos"
+2022-10-27T05:42:59.4448968Z 245 - /obj/item/stamp/ce using invalid icon_state, "stamp-ce"
+2022-10-27T05:42:59.4451579Z 246 - /obj/item/stamp/rd using invalid icon_state, "stamp-rd"
+2022-10-27T05:42:59.4454530Z 247 - /obj/item/stamp/cmo using invalid icon_state, "stamp-cmo"
+2022-10-27T05:42:59.4457121Z 248 - /obj/item/stamp/denied using invalid icon_state, "stamp-deny"
+2022-10-27T05:42:59.4460087Z 249 - /obj/item/stamp/void using invalid icon_state, "stamp-void"
+2022-10-27T05:42:59.4463223Z 250 - /obj/item/stamp/clown using invalid icon_state, "stamp-clown"
+2022-10-27T05:42:59.4465824Z 251 - /obj/item/stamp/mime using invalid icon_state, "stamp-mime"
+2022-10-27T05:42:59.4468654Z 252 - /obj/item/stamp/chap using invalid icon_state, "stamp-chap"
+2022-10-27T05:42:59.4471480Z 253 - /obj/item/stamp/centcom using invalid icon_state, "stamp-centcom"
+2022-10-27T05:42:59.4474941Z 254 - /obj/item/stamp/syndicate using invalid icon_state, "stamp-syndicate"
+2022-10-27T05:42:59.4479594Z 255 - /obj/item/storage/lockbox/medal using invalid icon_state, "medalbox+l"
+2022-10-27T05:42:59.4487494Z 256 - /obj/item/crowbar/red/caravan using invalid icon_state, "crowbar_caravan"
+2022-10-27T05:42:59.4509453Z 257 - /obj/item/crowbar/drone using invalid icon_state, "crowbar_cyborg"
+2022-10-27T05:42:59.4528797Z
+2022-10-27T05:42:59.4529293Z [1;32mPASS[0m /datum/unit_test/suit_storage_icons 2.1s
+2022-10-27T05:42:59.4529946Z ##[endgroup]
+2022-10-27T05:43:01.5221964Z ##[group]/datum/unit_test/amputation
+2022-10-27T05:43:01.5815196Z
+2022-10-27T05:43:01.5817573Z [1;32mPASS[0m /datum/unit_test/amputation 0s
+2022-10-27T05:43:01.5819941Z ##[endgroup]
+2022-10-27T05:43:01.6143865Z ##[group]/datum/unit_test/brain_surgery
+2022-10-27T05:43:01.6698394Z
+2022-10-27T05:43:01.6699379Z [1;32mPASS[0m /datum/unit_test/brain_surgery 0s
+2022-10-27T05:43:01.6700065Z ##[endgroup]
+2022-10-27T05:43:01.7064460Z ##[group]/datum/unit_test/head_transplant
+2022-10-27T05:43:01.7910615Z
+2022-10-27T05:43:01.7911507Z [1;32mPASS[0m /datum/unit_test/head_transplant 0s
+2022-10-27T05:43:01.7912215Z ##[endgroup]
+2022-10-27T05:43:01.8771339Z ##[group]/datum/unit_test/multiple_surgeries
+2022-10-27T05:43:01.9564190Z
+2022-10-27T05:43:01.9565672Z [1;32mPASS[0m /datum/unit_test/multiple_surgeries 0.1s
+2022-10-27T05:43:01.9566988Z ##[endgroup]
+2022-10-27T05:43:02.0451694Z ##[group]/datum/unit_test/start_tend_wounds
+2022-10-27T05:43:02.1021559Z
+2022-10-27T05:43:02.1023113Z [1;32mPASS[0m /datum/unit_test/start_tend_wounds 0.1s
+2022-10-27T05:43:02.1027806Z ##[endgroup]
+2022-10-27T05:43:02.1334702Z ##[group]/datum/unit_test/tend_wounds
+2022-10-27T05:43:02.2464864Z
+2022-10-27T05:43:02.2466455Z [1;32mPASS[0m /datum/unit_test/tend_wounds 0.1s
+2022-10-27T05:43:02.2471798Z ##[endgroup]
+2022-10-27T05:43:02.3971842Z ##[group]/datum/unit_test/auto_teleporter_linking
+2022-10-27T05:43:02.4364172Z
+2022-10-27T05:43:02.4365748Z [1;32mPASS[0m /datum/unit_test/auto_teleporter_linking 0.1s
+2022-10-27T05:43:02.4367360Z ##[endgroup]
+2022-10-27T05:43:02.4786335Z ##[group]/datum/unit_test/tgui_create_message
+2022-10-27T05:43:02.4787309Z
+2022-10-27T05:43:02.4792228Z [1;32mPASS[0m /datum/unit_test/tgui_create_message 0s
+2022-10-27T05:43:02.4793589Z ##[endgroup]
+2022-10-27T05:43:02.4990140Z ##[group]/datum/unit_test/timer_sanity
+2022-10-27T05:43:02.4990770Z
+2022-10-27T05:43:02.4993590Z [1;32mPASS[0m /datum/unit_test/timer_sanity 0s
+2022-10-27T05:43:02.4994358Z ##[endgroup]
+2022-10-27T05:43:02.5179295Z ##[group]/datum/unit_test/traitor
+2022-10-27T05:43:04.3257821Z
+2022-10-27T05:43:04.3259494Z [1;32mPASS[0m /datum/unit_test/traitor 1.8s
+2022-10-27T05:43:04.3309007Z ##[endgroup]
+2022-10-27T05:43:08.2246947Z ##[group]/datum/unit_test/verify_config_tags
+2022-10-27T05:43:08.2248054Z
+2022-10-27T05:43:08.2249419Z [1;32mPASS[0m /datum/unit_test/verify_config_tags 0s
+2022-10-27T05:43:08.2250078Z ##[endgroup]
+2022-10-27T05:43:08.2441208Z ##[group]/datum/unit_test/wizard_loadout
+2022-10-27T05:43:08.3578743Z
+2022-10-27T05:43:08.3580409Z [1;32mPASS[0m /datum/unit_test/wizard_loadout 0.1s
+2022-10-27T05:43:08.3585004Z ##[endgroup]
+2022-10-27T05:43:08.5073685Z ##[group]/datum/unit_test/find_reference_sanity
+2022-10-27T05:43:08.5075807Z
+2022-10-27T05:43:08.5076772Z [1;32mPASS[0m /datum/unit_test/find_reference_sanity 0s
+2022-10-27T05:43:08.5077672Z ##[endgroup]
+2022-10-27T05:43:08.5272155Z ##[group]/datum/unit_test/find_reference_baseline
+2022-10-27T05:43:08.5274693Z
+2022-10-27T05:43:08.5275872Z [1;32mPASS[0m /datum/unit_test/find_reference_baseline 0s
+2022-10-27T05:43:08.5276640Z ##[endgroup]
+2022-10-27T05:43:08.5468423Z ##[group]/datum/unit_test/find_reference_exotic
+2022-10-27T05:43:08.5470529Z
+2022-10-27T05:43:08.5474746Z [1;32mPASS[0m /datum/unit_test/find_reference_exotic 0s
+2022-10-27T05:43:08.5475293Z ##[endgroup]
+2022-10-27T05:43:08.5665386Z ##[group]/datum/unit_test/find_reference_esoteric
+2022-10-27T05:43:08.5669399Z
+2022-10-27T05:43:08.5676075Z [1;32mPASS[0m /datum/unit_test/find_reference_esoteric 0s
+2022-10-27T05:43:08.5677072Z ##[endgroup]
+2022-10-27T05:43:08.5866537Z ##[group]/datum/unit_test/find_reference_null_key_entry
+2022-10-27T05:43:08.5868456Z
+2022-10-27T05:43:08.5869492Z [1;32mPASS[0m /datum/unit_test/find_reference_null_key_entry 0s
+2022-10-27T05:43:08.5870146Z ##[endgroup]
+2022-10-27T05:43:08.6166348Z ##[group]/datum/unit_test/find_reference_assoc_investigation
+2022-10-27T05:43:08.6171705Z
+2022-10-27T05:43:08.6172220Z [1;32mPASS[0m /datum/unit_test/find_reference_assoc_investigation 0s
+2022-10-27T05:43:08.6172854Z ##[endgroup]
+2022-10-27T05:43:08.6356029Z ##[group]/datum/unit_test/find_reference_static_investigation
+2022-10-27T05:43:08.8684547Z
+2022-10-27T05:43:08.8685577Z [1;32mPASS[0m /datum/unit_test/find_reference_static_investigation 0.2s
+2022-10-27T05:43:08.8686517Z ##[endgroup]
+2022-10-27T05:43:09.0881655Z ##[group]/datum/unit_test/monkey_business
+2022-10-27T05:43:47.8646118Z
+2022-10-27T05:43:47.8647763Z [1;32mPASS[0m /datum/unit_test/monkey_business 38.8s
+2022-10-27T05:43:47.8739017Z ##[endgroup]
+2022-10-27T05:43:50.1651558Z ##[group]/datum/unit_test/create_and_destroy
+2022-10-27T05:49:19.8716381Z ## REF SEARCH Beginning search for references to a /datum/computer_file/program/chatclient.
+2022-10-27T05:49:20.0425000Z ## REF SEARCH Finished searching globals
+2022-10-27T05:49:20.3029611Z ## REF SEARCH Finished searching native globals
+2022-10-27T05:52:18.0382074Z ## REF SEARCH Finished searching atoms
+2022-10-27T05:52:33.0757341Z ## REF SEARCH Found /datum/computer_file/program/chatclient [0x2104dfc7] in /datum/ntnet_conversation's [0x2104dfc2] operator var. Datums -> /datum/ntnet_conversation
+2022-10-27T05:52:33.0758787Z ## REF SEARCH Found /datum/computer_file/program/chatclient [0x2104dfc7] in list Datums -> /datum/ntnet_conversation [0x2104dfc2] -> active_clients (list).
+2022-10-27T05:52:33.0760039Z ## REF SEARCH Found /datum/computer_file/program/chatclient [0x2104dfc7] in list Datums -> /datum/ntnet_conversation [0x2104dfc2] -> active_clients (list).
+2022-10-27T05:52:33.0761156Z ## REF SEARCH Found /datum/computer_file/program/chatclient [0x2104dfc7] in list Datums -> /datum/ntnet_conversation [0x2104dfc2] -> active_clients (list).
+2022-10-27T05:52:33.0814898Z ## REF SEARCH Found /datum/computer_file/program/chatclient [0x2104dfc7] in list Datums -> /datum/ntnet_conversation [0x2104dfc2] -> active_clients (list).
+2022-10-27T05:52:33.0816178Z ## REF SEARCH Found /datum/computer_file/program/chatclient [0x2104dfc7] in list Datums -> /datum/ntnet_conversation [0x2104dfc2] -> active_clients (list).
+2022-10-27T05:52:34.6185349Z ## REF SEARCH Finished searching datums
+2022-10-27T05:52:34.6185815Z ## REF SEARCH Finished searching clients
+2022-10-27T05:52:34.6186331Z ## REF SEARCH Completed search for references to a /datum/computer_file/program/chatclient.
+2022-10-27T05:52:34.6187365Z ## TESTING: GC: -- [0x2104dfc7] | /datum/computer_file/program/chatclient was unable to be GC'd --
+2022-10-27T05:52:50.6232674Z ##[error]/datum/computer_file/program/chatclient hard deleted 1 times out of a total del count of 13
+2022-10-27T05:52:50.6242137Z FAILURE #1: /datum/computer_file/program/chatclient hard deleted 1 times out of a total del count of 13 at code/modules/unit_tests/create_and_destroy.dm:173
+2022-10-27T05:52:50.6242890Z ##[endgroup]
+2022-10-27T05:52:50.6244173Z ##[error][1;31mFAIL[0m /datum/unit_test/create_and_destroy 540.5s
+2022-10-27T05:52:50.6611817Z Shutting down Chat subsystem...
+2022-10-27T05:52:50.6612177Z Shutting down Init Profiler subsystem...
+2022-10-27T05:52:50.6612511Z Shutting down Ban Cache subsystem...
+2022-10-27T05:52:50.6612837Z Shutting down Stat Panels subsystem...
+2022-10-27T05:52:50.6613185Z Shutting down Explosions subsystem...
+2022-10-27T05:52:50.6613516Z Shutting down Pathfinder subsystem...
+2022-10-27T05:52:50.6613840Z Shutting down Minor Mapping subsystem...
+2022-10-27T05:52:50.6614149Z Shutting down Shuttle subsystem...
+2022-10-27T05:52:50.6614455Z Shutting down Lighting subsystem...
+2022-10-27T05:52:50.6614770Z Shutting down XKeyScore subsystem...
+2022-10-27T05:52:50.6615076Z Shutting down PRISM subsystem...
+2022-10-27T05:52:50.6636820Z Shutting down Icon Smoothing subsystem...
+2022-10-27T05:52:50.6637164Z Shutting down Assets subsystem...
+2022-10-27T05:52:50.6637453Z Shutting down Vote subsystem...
+2022-10-27T05:52:50.6637800Z Shutting down Persistent Paintings subsystem...
+2022-10-27T05:52:50.6638150Z Shutting down Persistence subsystem...
+2022-10-27T05:52:50.6638478Z Shutting down Atmospherics subsystem...
+2022-10-27T05:52:50.6638848Z Shutting down Wiremod Composite Templates subsystem...
+2022-10-27T05:52:50.6639197Z Shutting down Wet floors subsystem...
+2022-10-27T05:52:50.6639504Z Shutting down Weather subsystem...
+2022-10-27T05:52:50.6639813Z Shutting down Wardrobe subsystem...
+2022-10-27T05:52:50.6640129Z Shutting down Verb Manager subsystem...
+2022-10-27T05:52:50.6640449Z Shutting down Tram Process subsystem...
+2022-10-27T05:52:50.6640764Z Shutting down Traitor subsystem...
+2022-10-27T05:52:50.6641059Z Shutting down Throwing subsystem...
+2022-10-27T05:52:50.6641363Z Shutting down tgui subsystem...
+2022-10-27T05:52:50.6641692Z Shutting down Supermatter Cascade subsystem...
+2022-10-27T05:52:50.6642010Z Shutting down Sun subsystem...
+2022-10-27T05:52:50.6642333Z Shutting down Speech Controller subsystem...
+2022-10-27T05:52:50.6642653Z Shutting down Space Drift subsystem...
+2022-10-27T05:52:50.6642962Z Shutting down Smoke subsystem...
+2022-10-27T05:52:50.6643271Z Shutting down Singularity subsystem...
+2022-10-27T05:52:50.6643578Z Shutting down Radio subsystem...
+2022-10-27T05:52:50.6643875Z Shutting down Radiation subsystem...
+2022-10-27T05:52:50.6644483Z Shutting down Projectiles subsystem...
+2022-10-27T05:52:50.6644819Z Shutting down Processing subsystem...
+2022-10-27T05:52:50.6645158Z Shutting down Points of Interest subsystem...
+2022-10-27T05:52:50.6645489Z Shutting down Plumbing subsystem...
+2022-10-27T05:52:50.6645780Z Shutting down Ping subsystem...
+2022-10-27T05:52:50.6646088Z Shutting down Parallax subsystem...
+2022-10-27T05:52:50.6646396Z Shutting down pAI subsystem...
+2022-10-27T05:52:50.6646701Z Shutting down Overlay subsystem...
+2022-10-27T05:52:50.9809746Z Shutting down Objects subsystem...
+2022-10-27T05:52:50.9810088Z Shutting down Obj Tab Items subsystem...
+2022-10-27T05:52:50.9810410Z Shutting down NPC Pool subsystem...
+2022-10-27T05:52:50.9811012Z Shutting down Night Shift subsystem...
+2022-10-27T05:52:50.9811331Z Shutting down Movement Loops subsystem...
+2022-10-27T05:52:50.9811653Z Shutting down Movement Handler subsystem...
+2022-10-27T05:52:50.9811975Z Shutting down MouseEntered subsystem...
+2022-10-27T05:52:50.9812266Z Shutting down Mood subsystem...
+2022-10-27T05:52:50.9812709Z Shutting down Mobs subsystem...
+2022-10-27T05:52:50.9813020Z Shutting down Materials subsystem...
+2022-10-27T05:52:50.9815026Z Shutting down Lua Scripting subsystem...
+2022-10-27T05:52:50.9975219Z Shutting down Library Loading subsystem...
+2022-10-27T05:52:50.9975575Z Shutting down Lag Switch subsystem...
+2022-10-27T05:52:50.9975912Z Shutting down Idling NPC Pool subsystem...
+2022-10-27T05:52:50.9976225Z Shutting down Foam subsystem...
+2022-10-27T05:52:50.9976518Z Shutting down Fluid subsystem...
+2022-10-27T05:52:50.9976823Z Shutting down Fire Burning subsystem...
+2022-10-27T05:52:50.9977153Z Shutting down Fast Processing subsystem...
+2022-10-27T05:52:50.9977478Z Shutting down Eigenstates subsystem...
+2022-10-27T05:52:50.9977787Z Shutting down Disease subsystem...
+2022-10-27T05:52:50.9978121Z Shutting down Datum Component System subsystem...
+2022-10-27T05:52:50.9978463Z Shutting down Conveyor Belts subsystem...
+2022-10-27T05:52:50.9978939Z Shutting down Communications subsystem...
+2022-10-27T05:52:50.9979257Z Shutting down Clock Component subsystem...
+2022-10-27T05:52:50.9979599Z Shutting down Circuit Components subsystem...
+2022-10-27T05:52:50.9979926Z Shutting down Blackmarket subsystem...
+2022-10-27T05:52:50.9980248Z Shutting down Basic Avoidance subsystem...
+2022-10-27T05:52:50.9980570Z Shutting down Aura Healing subsystem...
+2022-10-27T05:52:50.9980859Z Shutting down Augury subsystem...
+2022-10-27T05:52:50.9981169Z Shutting down Asset Loading subsystem...
+2022-10-27T05:52:50.9981483Z Shutting down Antag HUDs subsystem...
+2022-10-27T05:52:50.9981788Z Shutting down Ambience subsystem...
+2022-10-27T05:52:50.9982092Z Shutting down Addiction subsystem...
+2022-10-27T05:52:50.9982383Z Shutting down Acid subsystem...
+2022-10-27T05:52:50.9982673Z Shutting down Timer subsystem...
+2022-10-27T05:52:50.9982970Z Shutting down Sound Loops subsystem...
+2022-10-27T05:52:50.9983275Z Shutting down Runechat subsystem...
+2022-10-27T05:52:50.9983571Z Shutting down Skills subsystem...
+2022-10-27T05:52:50.9983871Z Shutting down Machines subsystem...
+2022-10-27T05:52:50.9984159Z Shutting down Language subsystem...
+2022-10-27T05:52:50.9984452Z Shutting down Atoms subsystem...
+2022-10-27T05:52:51.0026223Z Shutting down Restaurant subsystem...
+2022-10-27T05:52:51.0026577Z Shutting down Economy subsystem...
+2022-10-27T05:52:51.0026908Z Shutting down Spatial Grid subsystem...
+2022-10-27T05:52:51.0030451Z Shutting down Networks subsystem...
+2022-10-27T05:52:51.0030787Z Shutting down Time Tracking subsystem...
+2022-10-27T05:52:51.0031114Z Shutting down Research subsystem...
+2022-10-27T05:52:51.0031432Z Shutting down Early Assets subsystem...
+2022-10-27T05:52:51.0031759Z Shutting down Mapping subsystem...
+2022-10-27T05:52:51.0032092Z Shutting down Trading Card Game subsystem...
+2022-10-27T05:52:51.0032426Z Shutting down Ticker subsystem...
+2022-10-27T05:52:51.0039410Z Unable to locate admins backup file.
+2022-10-27T05:52:51.0051941Z Shutting down AI Controller Ticker subsystem...
+2022-10-27T05:52:51.0052530Z Shutting down AI Behavior Ticker subsystem...
+2022-10-27T05:52:51.0052855Z Shutting down AI movement subsystem...
+2022-10-27T05:52:51.0053132Z Shutting down Jobs subsystem...
+2022-10-27T05:52:51.0053429Z Shutting down IDs and Access subsystem...
+2022-10-27T05:52:51.0053728Z Shutting down Events subsystem...
+2022-10-27T05:52:51.0054019Z Shutting down Reagents subsystem...
+2022-10-27T05:52:51.0054311Z Shutting down Quirks subsystem...
+2022-10-27T05:52:51.0054584Z Shutting down Station subsystem...
+2022-10-27T05:52:51.0054886Z Shutting down Achievements subsystem...
+2022-10-27T05:52:51.0057375Z Shutting down Discord subsystem...
+2022-10-27T05:52:51.0057678Z Shutting down Security Level subsystem...
+2022-10-27T05:52:51.0058123Z Shutting down Vis contents overlays subsystem...
+2022-10-27T05:52:51.0058446Z Shutting down Greyscale subsystem...
+2022-10-27T05:52:51.0059042Z Shutting down Instruments subsystem...
+2022-10-27T05:52:51.0059340Z Shutting down Sounds subsystem...
+2022-10-27T05:52:51.0059631Z Shutting down Input subsystem...
+2022-10-27T05:52:51.0060822Z Shutting down Server Tasks subsystem...
+2022-10-27T05:52:51.0064456Z Shutting down Blackbox subsystem...
+2022-10-27T05:52:51.0064838Z Shutting down Database subsystem...
+2022-10-27T05:52:51.0065213Z Shutting down Garbage subsystem...
+2022-10-27T05:52:54.6306978Z Shutting down Title Screen subsystem...
+2022-10-27T05:52:54.6307928Z Shutting down Profiler subsystem...
+2022-10-27T05:52:54.6308337Z Shutdown complete
+2022-10-27T05:52:54.6308698Z Test run failed!
+2022-10-27T05:52:54.6309027Z Unit Tests failed!
+2022-10-27T05:52:58.2975208Z cat: ci_test/data/logs/ci/clean_run.lk: No such file or directory
+2022-10-27T05:52:58.2988425Z ##[error]Process completed with exit code 1.
+2022-10-27T05:52:58.3038084Z ##[group]Run actions/upload-artifact@v3
+2022-10-27T05:52:58.3038386Z with:
+2022-10-27T05:52:58.3038632Z name: test_artifacts_metastation
+2022-10-27T05:52:58.3038928Z path: data/screenshots_new/
+2022-10-27T05:52:58.3039208Z retention-days: 1
+2022-10-27T05:52:58.3039483Z if-no-files-found: warn
+2022-10-27T05:52:58.3039747Z ##[endgroup]
+2022-10-27T05:52:58.4273001Z With the provided path, there will be 85 files uploaded
+2022-10-27T05:52:58.4279080Z Starting artifact upload
+2022-10-27T05:52:58.4280271Z For more detailed logs during the artifact upload process, enable step-debugging: https://docs.github.com/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging
+2022-10-27T05:52:58.4280911Z Artifact name is valid!
+2022-10-27T05:52:58.4956400Z Container for artifact "test_artifacts_metastation" successfully created. Starting upload of file(s)
+2022-10-27T05:53:02.6649338Z Total size of all the files uploaded is 138917 bytes
+2022-10-27T05:53:02.6650349Z File upload process has finished. Finalizing the artifact upload
+2022-10-27T05:53:02.6917894Z Artifact has been finalized. All files have been successfully uploaded!
+2022-10-27T05:53:02.6918592Z
+2022-10-27T05:53:02.6919221Z The raw size of all the files that were specified for upload is 139272 bytes
+2022-10-27T05:53:02.6920199Z The size of all the files that were uploaded is 138917 bytes. This takes into account any gzip compression used to reduce the upload size, time and storage
+2022-10-27T05:53:02.6920771Z
+2022-10-27T05:53:02.6922015Z Note: The size of downloaded zips can differ significantly from the reported size. For more information see: https://github.com/actions/upload-artifact#zipped-artifact-downloads
+2022-10-27T05:53:02.6922715Z
+2022-10-27T05:53:02.6923052Z Artifact test_artifacts_metastation has been successfully uploaded!
+2022-10-27T05:53:02.7064563Z Post job cleanup.
+2022-10-27T05:53:02.8553446Z [command]/usr/bin/git version
+2022-10-27T05:53:02.8609457Z git version 2.38.1
+2022-10-27T05:53:02.8663423Z Temporarily overriding HOME='/home/runner/work/_temp/7f4c4ca9-c205-4fcf-92a4-cc2e0f6184cd' before making global git config changes
+2022-10-27T05:53:02.8664612Z Adding repository directory to the temporary git global config as a safe directory
+2022-10-27T05:53:02.8670010Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2022-10-27T05:53:02.8717327Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2022-10-27T05:53:02.8760496Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
+2022-10-27T05:53:02.9064609Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2022-10-27T05:53:02.9096473Z http.https://github.com/.extraheader
+2022-10-27T05:53:02.9110240Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
+2022-10-27T05:53:02.9151201Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
+2022-10-27T05:53:02.9632628Z Print service container logs: bdaac24feb7948af9ae1cfcb2f1e5f3f_mysqllatest_e0031a
+2022-10-27T05:53:02.9639053Z ##[command]/usr/bin/docker logs --details b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:53:02.9874689Z 2022-10-27T05:35:47.663982Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-10-27T05:53:02.9875440Z 2022-10-27T05:35:47.664088Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.31) initializing of server in progress as process 80
+2022-10-27T05:53:02.9875958Z 2022-10-27T05:35:47.671476Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-10-27T05:53:02.9876437Z 2022-10-27T05:35:48.066575Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-10-27T05:53:02.9877103Z 2022-10-27T05:35:49.266023Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
+2022-10-27T05:53:02.9877838Z 2022-10-27T05:35:52.334841Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-10-27T05:53:02.9878473Z 2022-10-27T05:35:52.337029Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 129
+2022-10-27T05:53:02.9878953Z 2022-10-27T05:35:52.352969Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-10-27T05:53:02.9879421Z 2022-10-27 05:35:47+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
+2022-10-27T05:53:02.9879903Z 2022-10-27T05:35:52.530865Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-10-27T05:53:02.9880369Z 2022-10-27T05:35:52.753777Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2022-10-27T05:53:02.9880921Z 2022-10-27T05:35:52.753818Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2022-10-27T05:53:02.9881648Z 2022-10-27T05:35:52.755449Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2022-10-27T05:53:02.9882321Z 2022-10-27T05:35:52.774412Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
+2022-10-27T05:53:02.9882951Z 2022-10-27T05:35:52.775158Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
+2022-10-27T05:53:02.9883542Z Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
+2022-10-27T05:53:02.9883992Z 2022-10-27 05:35:47+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
+2022-10-27T05:53:02.9884444Z 2022-10-27 05:35:47+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
+2022-10-27T05:53:02.9884874Z 2022-10-27 05:35:47+00:00 [Note] [Entrypoint]: Initializing database files
+2022-10-27T05:53:02.9885281Z 2022-10-27 05:35:52+00:00 [Note] [Entrypoint]: Database files initialized
+2022-10-27T05:53:02.9885682Z 2022-10-27 05:35:52+00:00 [Note] [Entrypoint]: Starting temporary server
+2022-10-27T05:53:02.9886079Z 2022-10-27 05:35:52+00:00 [Note] [Entrypoint]: Temporary server started.
+2022-10-27T05:53:02.9886471Z '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
+2022-10-27T05:53:02.9888624Z Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
+2022-10-27T05:53:02.9889273Z
+2022-10-27T05:53:02.9889568Z 2022-10-27 05:35:54+00:00 [Note] [Entrypoint]: Stopping temporary server
+2022-10-27T05:53:02.9889969Z 2022-10-27 05:35:57+00:00 [Note] [Entrypoint]: Temporary server stopped
+2022-10-27T05:53:02.9890280Z
+2022-10-27T05:53:02.9890742Z 2022-10-27 05:35:57+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
+2022-10-27T05:53:02.9891394Z Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
+2022-10-27T05:53:02.9891960Z Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
+2022-10-27T05:53:02.9892520Z Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
+2022-10-27T05:53:02.9893146Z 2022-10-27T05:35:54.998452Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.31).
+2022-10-27T05:53:02.9893808Z 2022-10-27T05:35:56.253546Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.31) MySQL Community Server - GPL.
+2022-10-27T05:53:02.9898747Z 2022-10-27T05:35:57.259394Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-10-27T05:53:02.9899246Z
+2022-10-27T05:53:02.9899947Z 2022-10-27T05:35:57.260761Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 1
+2022-10-27T05:53:02.9900440Z 2022-10-27T05:35:57.279827Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-10-27T05:53:02.9900902Z 2022-10-27T05:35:57.478844Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-10-27T05:53:02.9901365Z 2022-10-27T05:35:57.668028Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2022-10-27T05:53:02.9901912Z 2022-10-27T05:35:57.668071Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2022-10-27T05:53:02.9902638Z 2022-10-27T05:35:57.669759Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2022-10-27T05:53:02.9903367Z 2022-10-27T05:35:57.689543Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
+2022-10-27T05:53:02.9905472Z 2022-10-27T05:35:57.690193Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
+2022-10-27T05:53:02.9926340Z Stop and remove container: bdaac24feb7948af9ae1cfcb2f1e5f3f_mysqllatest_e0031a
+2022-10-27T05:53:02.9933347Z ##[command]/usr/bin/docker rm --force b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:53:03.2811799Z b9656fff5d6a67eae31451853c0bb709d922d192e7aabe77af579b15e2acedbc
+2022-10-27T05:53:03.2840549Z Remove container network: github_network_552f961a7b154fc6bdcc0db4d38d15af
+2022-10-27T05:53:03.2847326Z ##[command]/usr/bin/docker network rm github_network_552f961a7b154fc6bdcc0db4d38d15af
+2022-10-27T05:53:03.3874880Z github_network_552f961a7b154fc6bdcc0db4d38d15af
+2022-10-27T05:53:03.4050424Z Cleaning up orphan processes
diff --git a/tools/pull_request_hooks/flakyTestPayloads/invalid_timer.txt b/tools/pull_request_hooks/flakyTestPayloads/invalid_timer.txt
new file mode 100644
index 0000000000000..eea9b3774cac2
--- /dev/null
+++ b/tools/pull_request_hooks/flakyTestPayloads/invalid_timer.txt
@@ -0,0 +1,2389 @@
+2023-11-12T08:57:50.1971985Z Requested labels: ubuntu-latest
+2023-11-12T08:57:50.1972288Z Job defined at: tgstation/tgstation/.github/workflows/run_integration_tests.yml@refs/pull/79384/merge
+2023-11-12T08:57:50.1972523Z Reusable workflow chain:
+2023-11-12T08:57:50.1972632Z tgstation/tgstation/.github/workflows/ci_suite.yml@refs/pull/79384/merge (0f52a54577af8e336ee4407c83bc6d3bfedd1d11)
+2023-11-12T08:57:50.1972727Z -> tgstation/tgstation/.github/workflows/run_integration_tests.yml@refs/pull/79384/merge (0f52a54577af8e336ee4407c83bc6d3bfedd1d11)
+2023-11-12T08:57:50.1972819Z Waiting for a runner to pick up this job...
+2023-11-12T08:59:41.2590058Z Job is waiting for a hosted runner to come online.
+2023-11-12T08:59:44.1017042Z Job is about to start running on the hosted runner: GitHub Actions 11 (hosted)
+2023-11-12T08:59:46.1455792Z Current runner version: '2.311.0'
+2023-11-12T08:59:46.1479790Z ##[group]Operating System
+2023-11-12T08:59:46.1480441Z Ubuntu
+2023-11-12T08:59:46.1480899Z 22.04.3
+2023-11-12T08:59:46.1481734Z LTS
+2023-11-12T08:59:46.1482077Z ##[endgroup]
+2023-11-12T08:59:46.1482560Z ##[group]Runner Image
+2023-11-12T08:59:46.1482961Z Image: ubuntu-22.04
+2023-11-12T08:59:46.1483353Z Version: 20231030.2.0
+2023-11-12T08:59:46.1484421Z Included Software: https://github.com/actions/runner-images/blob/ubuntu22/20231030.2/images/linux/Ubuntu2204-Readme.md
+2023-11-12T08:59:46.1485799Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu22%2F20231030.2
+2023-11-12T08:59:46.1486650Z ##[endgroup]
+2023-11-12T08:59:46.1487161Z ##[group]Runner Image Provisioner
+2023-11-12T08:59:46.1487606Z 2.0.312.1
+2023-11-12T08:59:46.1487945Z ##[endgroup]
+2023-11-12T08:59:46.1490099Z ##[group]GITHUB_TOKEN Permissions
+2023-11-12T08:59:46.1491698Z Actions: read
+2023-11-12T08:59:46.1492248Z Checks: read
+2023-11-12T08:59:46.1492761Z Contents: read
+2023-11-12T08:59:46.1493311Z Deployments: read
+2023-11-12T08:59:46.1493676Z Discussions: read
+2023-11-12T08:59:46.1494123Z Issues: read
+2023-11-12T08:59:46.1494582Z Metadata: read
+2023-11-12T08:59:46.1494935Z Packages: read
+2023-11-12T08:59:46.1495330Z Pages: read
+2023-11-12T08:59:46.1495763Z PullRequests: read
+2023-11-12T08:59:46.1496142Z RepositoryProjects: read
+2023-11-12T08:59:46.1496603Z SecurityEvents: read
+2023-11-12T08:59:46.1497060Z Statuses: read
+2023-11-12T08:59:46.1497394Z ##[endgroup]
+2023-11-12T08:59:46.1500314Z Secret source: None
+2023-11-12T08:59:46.1501009Z Prepare workflow directory
+2023-11-12T08:59:46.2366322Z Prepare all required actions
+2023-11-12T08:59:46.2521312Z Getting action download info
+2023-11-12T08:59:46.4989409Z Download action repository 'actions/checkout@v3' (SHA:f43a0e5ff2bd294095638e18286ca9a3d1956744)
+2023-11-12T08:59:46.6372596Z Download action repository 'actions/cache@v3' (SHA:704facf57e6136b1bc63b828d79edcd491f0ee84)
+2023-11-12T08:59:46.7365405Z Download action repository 'actions/upload-artifact@v3' (SHA:a8a3f3ad30e3422c9c7b888a15615d19a852ae32)
+2023-11-12T08:59:46.7793243Z Download action repository 'tgstation/byond-client-compatibility-check@v3' (SHA:d9fac1c9713569fa6681906325ddce115bb53365)
+2023-11-12T08:59:47.0659791Z Uses: tgstation/tgstation/.github/workflows/run_integration_tests.yml@refs/pull/79384/merge (0f52a54577af8e336ee4407c83bc6d3bfedd1d11)
+2023-11-12T08:59:47.0662504Z ##[group] Inputs
+2023-11-12T08:59:47.0663016Z map: tramstation
+2023-11-12T08:59:47.0663530Z major:
+2023-11-12T08:59:47.0663853Z minor:
+2023-11-12T08:59:47.0664217Z max_required_byond_client: 514
+2023-11-12T08:59:47.0664786Z ##[endgroup]
+2023-11-12T08:59:47.0665727Z Complete job name: Integration Tests (tramstation) / run_integration_tests
+2023-11-12T08:59:47.1316890Z ##[group]Checking docker version
+2023-11-12T08:59:47.1331488Z ##[command]/usr/bin/docker version --format '{{.Server.APIVersion}}'
+2023-11-12T08:59:47.2035568Z '1.43'
+2023-11-12T08:59:47.2048856Z Docker daemon API version: '1.43'
+2023-11-12T08:59:47.2049704Z ##[command]/usr/bin/docker version --format '{{.Client.APIVersion}}'
+2023-11-12T08:59:47.2209793Z '1.43'
+2023-11-12T08:59:47.2229627Z Docker client API version: '1.43'
+2023-11-12T08:59:47.2235325Z ##[endgroup]
+2023-11-12T08:59:47.2239282Z ##[group]Clean up resources from previous jobs
+2023-11-12T08:59:47.2245596Z ##[command]/usr/bin/docker ps --all --quiet --no-trunc --filter "label=bae3f2"
+2023-11-12T08:59:47.2382764Z ##[command]/usr/bin/docker network prune --force --filter "label=bae3f2"
+2023-11-12T08:59:47.2513406Z ##[endgroup]
+2023-11-12T08:59:47.2513906Z ##[group]Create local container network
+2023-11-12T08:59:47.2524774Z ##[command]/usr/bin/docker network create --label bae3f2 github_network_bc2270e2d9644957ba98982ec5cf35f2
+2023-11-12T08:59:47.3421425Z 7e144ec3bd040fce7400908b83369d64424efaa98e355fff9ec0d703a41602b1
+2023-11-12T08:59:47.3441937Z ##[endgroup]
+2023-11-12T08:59:47.3517647Z ##[group]Starting mysql service container
+2023-11-12T08:59:47.3536963Z ##[command]/usr/bin/docker pull mysql:latest
+2023-11-12T08:59:47.5471538Z latest: Pulling from library/mysql
+2023-11-12T08:59:47.5925068Z 8e0176adc18c: Pulling fs layer
+2023-11-12T08:59:47.5926146Z 2d2c52718f65: Pulling fs layer
+2023-11-12T08:59:47.5926867Z d88d03ce139b: Pulling fs layer
+2023-11-12T08:59:47.5927652Z 4a7d7f11aa1e: Pulling fs layer
+2023-11-12T08:59:47.5928644Z ce5949193e4c: Pulling fs layer
+2023-11-12T08:59:47.5929143Z f7f024dfb329: Pulling fs layer
+2023-11-12T08:59:47.5929598Z 5fc3c840facc: Pulling fs layer
+2023-11-12T08:59:47.5930195Z 509068e49488: Pulling fs layer
+2023-11-12T08:59:47.5930586Z cbc847bab598: Pulling fs layer
+2023-11-12T08:59:47.5930994Z 942bef62a146: Pulling fs layer
+2023-11-12T08:59:47.5931450Z f7f024dfb329: Waiting
+2023-11-12T08:59:47.5931833Z 5fc3c840facc: Waiting
+2023-11-12T08:59:47.5932180Z 509068e49488: Waiting
+2023-11-12T08:59:47.5932601Z cbc847bab598: Waiting
+2023-11-12T08:59:47.5932952Z 942bef62a146: Waiting
+2023-11-12T08:59:47.5933295Z 4a7d7f11aa1e: Waiting
+2023-11-12T08:59:47.5933717Z ce5949193e4c: Waiting
+2023-11-12T08:59:47.6370843Z 2d2c52718f65: Verifying Checksum
+2023-11-12T08:59:47.6371886Z 2d2c52718f65: Download complete
+2023-11-12T08:59:47.6628390Z d88d03ce139b: Verifying Checksum
+2023-11-12T08:59:47.6630340Z d88d03ce139b: Download complete
+2023-11-12T08:59:47.7021669Z ce5949193e4c: Verifying Checksum
+2023-11-12T08:59:47.7022614Z ce5949193e4c: Download complete
+2023-11-12T08:59:47.7184829Z 4a7d7f11aa1e: Verifying Checksum
+2023-11-12T08:59:47.7185700Z 4a7d7f11aa1e: Download complete
+2023-11-12T08:59:47.7547210Z f7f024dfb329: Download complete
+2023-11-12T08:59:47.8055625Z 509068e49488: Verifying Checksum
+2023-11-12T08:59:47.8057291Z 509068e49488: Download complete
+2023-11-12T08:59:48.0054531Z 8e0176adc18c: Verifying Checksum
+2023-11-12T08:59:48.0055844Z 8e0176adc18c: Download complete
+2023-11-12T08:59:48.0721310Z 942bef62a146: Verifying Checksum
+2023-11-12T08:59:48.0723241Z 942bef62a146: Download complete
+2023-11-12T08:59:48.2055324Z 5fc3c840facc: Verifying Checksum
+2023-11-12T08:59:48.2056029Z 5fc3c840facc: Download complete
+2023-11-12T08:59:48.2822740Z cbc847bab598: Verifying Checksum
+2023-11-12T08:59:48.2824083Z cbc847bab598: Download complete
+2023-11-12T08:59:49.3079176Z 8e0176adc18c: Pull complete
+2023-11-12T08:59:49.6617199Z 2d2c52718f65: Pull complete
+2023-11-12T08:59:49.6872468Z d88d03ce139b: Pull complete
+2023-11-12T08:59:49.8872416Z 4a7d7f11aa1e: Pull complete
+2023-11-12T08:59:49.9014484Z ce5949193e4c: Pull complete
+2023-11-12T08:59:49.9174666Z f7f024dfb329: Pull complete
+2023-11-12T08:59:51.3130074Z 5fc3c840facc: Pull complete
+2023-11-12T08:59:51.3233267Z 509068e49488: Pull complete
+2023-11-12T08:59:56.1487617Z cbc847bab598: Pull complete
+2023-11-12T08:59:56.6779169Z 942bef62a146: Pull complete
+2023-11-12T08:59:56.6823169Z Digest: sha256:1773f3c7aa9522f0014d0ad2bbdaf597ea3b1643c64c8ccc2123c64afd8b82b1
+2023-11-12T08:59:56.6835281Z Status: Downloaded newer image for mysql:latest
+2023-11-12T08:59:56.6843575Z docker.io/library/mysql:latest
+2023-11-12T08:59:56.6952276Z ##[command]/usr/bin/docker create --name c43e2a4f7a0044eda3c3640d7583be1f_mysqllatest_210664 --label bae3f2 --network github_network_bc2270e2d9644957ba98982ec5cf35f2 --network-alias mysql -p 3306 --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 -e "MYSQL_ROOT_PASSWORD=root" -e GITHUB_ACTIONS=true -e CI=true mysql:latest
+2023-11-12T08:59:56.7205373Z 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T08:59:56.7226574Z ##[command]/usr/bin/docker start 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T08:59:57.0122389Z 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T08:59:57.0147762Z ##[command]/usr/bin/docker ps --all --filter id=37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
+2023-11-12T08:59:57.0270403Z 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded Up Less than a second (health: starting)
+2023-11-12T08:59:57.0292510Z ##[command]/usr/bin/docker port 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T08:59:57.0413612Z 3306/tcp -> 0.0.0.0:32768
+2023-11-12T08:59:57.0414454Z 3306/tcp -> [::]:32768
+2023-11-12T08:59:57.0511341Z ##[endgroup]
+2023-11-12T08:59:57.0545971Z ##[group]Waiting for all services to be ready
+2023-11-12T08:59:57.0594766Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T08:59:57.0736995Z starting
+2023-11-12T08:59:57.0767183Z mysql service is starting, waiting 2 seconds before checking again.
+2023-11-12T08:59:59.0767458Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T08:59:59.0896661Z starting
+2023-11-12T08:59:59.0908862Z mysql service is starting, waiting 4 seconds before checking again.
+2023-11-12T09:00:03.1488036Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T09:00:03.1606151Z starting
+2023-11-12T09:00:03.1617891Z mysql service is starting, waiting 8 seconds before checking again.
+2023-11-12T09:00:11.5749953Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T09:00:11.5876640Z healthy
+2023-11-12T09:00:11.5893980Z mysql service is healthy.
+2023-11-12T09:00:11.5894520Z ##[endgroup]
+2023-11-12T09:00:11.6253438Z ##[group]Run actions/checkout@v3
+2023-11-12T09:00:11.6253862Z with:
+2023-11-12T09:00:11.6254192Z repository: tgstation/tgstation
+2023-11-12T09:00:11.6254857Z token: ***
+2023-11-12T09:00:11.6255173Z ssh-strict: true
+2023-11-12T09:00:11.6255558Z persist-credentials: true
+2023-11-12T09:00:11.6256022Z clean: true
+2023-11-12T09:00:11.6256343Z sparse-checkout-cone-mode: true
+2023-11-12T09:00:11.6256740Z fetch-depth: 1
+2023-11-12T09:00:11.6257139Z fetch-tags: false
+2023-11-12T09:00:11.6257424Z lfs: false
+2023-11-12T09:00:11.6257739Z submodules: false
+2023-11-12T09:00:11.6258160Z set-safe-directory: true
+2023-11-12T09:00:11.6258498Z ##[endgroup]
+2023-11-12T09:00:11.7905131Z Syncing repository: tgstation/tgstation
+2023-11-12T09:00:11.7906924Z ##[group]Getting Git version info
+2023-11-12T09:00:11.7907608Z Working directory is '/home/runner/work/tgstation/tgstation'
+2023-11-12T09:00:11.7908545Z [command]/usr/bin/git version
+2023-11-12T09:00:11.7926430Z git version 2.42.0
+2023-11-12T09:00:11.7950009Z ##[endgroup]
+2023-11-12T09:00:11.7969428Z Temporarily overriding HOME='/home/runner/work/_temp/36501371-137a-461b-978e-be8cc4242865' before making global git config changes
+2023-11-12T09:00:11.7971339Z Adding repository directory to the temporary git global config as a safe directory
+2023-11-12T09:00:11.7973813Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2023-11-12T09:00:11.8018133Z Deleting the contents of '/home/runner/work/tgstation/tgstation'
+2023-11-12T09:00:11.8021715Z ##[group]Initializing the repository
+2023-11-12T09:00:11.8024938Z [command]/usr/bin/git init /home/runner/work/tgstation/tgstation
+2023-11-12T09:00:11.8167504Z hint: Using 'master' as the name for the initial branch. This default branch name
+2023-11-12T09:00:11.8168867Z hint: is subject to change. To configure the initial branch name to use in all
+2023-11-12T09:00:11.8170077Z hint: of your new repositories, which will suppress this warning, call:
+2023-11-12T09:00:11.8170644Z hint:
+2023-11-12T09:00:11.8171097Z hint: git config --global init.defaultBranch
+2023-11-12T09:00:11.8171661Z hint:
+2023-11-12T09:00:11.8172234Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
+2023-11-12T09:00:11.8173070Z hint: 'development'. The just-created branch can be renamed via this command:
+2023-11-12T09:00:11.8173978Z hint:
+2023-11-12T09:00:11.8174325Z hint: git branch -m
+2023-11-12T09:00:11.8177381Z Initialized empty Git repository in /home/runner/work/tgstation/tgstation/.git/
+2023-11-12T09:00:11.8185891Z [command]/usr/bin/git remote add origin https://github.com/tgstation/tgstation
+2023-11-12T09:00:11.8237650Z ##[endgroup]
+2023-11-12T09:00:11.8238368Z ##[group]Disabling automatic garbage collection
+2023-11-12T09:00:11.8241714Z [command]/usr/bin/git config --local gc.auto 0
+2023-11-12T09:00:11.8277184Z ##[endgroup]
+2023-11-12T09:00:11.8277752Z ##[group]Setting up auth
+2023-11-12T09:00:11.8283624Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2023-11-12T09:00:11.8319856Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
+2023-11-12T09:00:11.8657173Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2023-11-12T09:00:11.8696672Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
+2023-11-12T09:00:11.8934506Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
+2023-11-12T09:00:11.8975797Z ##[endgroup]
+2023-11-12T09:00:11.8976409Z ##[group]Fetching the repository
+2023-11-12T09:00:11.8984535Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +0f52a54577af8e336ee4407c83bc6d3bfedd1d11:refs/remotes/pull/79384/merge
+2023-11-12T09:00:12.3422502Z remote: Enumerating objects: 14728, done.
+2023-11-12T09:00:12.3435399Z remote: Counting objects: 0% (1/14728)
+2023-11-12T09:00:12.3437322Z remote: Counting objects: 1% (148/14728)
+2023-11-12T09:00:12.3438041Z remote: Counting objects: 2% (295/14728)
+2023-11-12T09:00:12.3438941Z remote: Counting objects: 3% (442/14728)
+2023-11-12T09:00:12.3440148Z remote: Counting objects: 4% (590/14728)
+2023-11-12T09:00:12.3442925Z remote: Counting objects: 5% (737/14728)
+2023-11-12T09:00:12.3445483Z remote: Counting objects: 6% (884/14728)
+2023-11-12T09:00:12.3447273Z remote: Counting objects: 7% (1031/14728)
+2023-11-12T09:00:12.3460133Z remote: Counting objects: 8% (1179/14728)
+2023-11-12T09:00:12.3461187Z remote: Counting objects: 9% (1326/14728)
+2023-11-12T09:00:12.3461949Z remote: Counting objects: 10% (1473/14728)
+2023-11-12T09:00:12.3462472Z remote: Counting objects: 11% (1621/14728)
+2023-11-12T09:00:12.3463038Z remote: Counting objects: 12% (1768/14728)
+2023-11-12T09:00:12.3463556Z remote: Counting objects: 13% (1915/14728)
+2023-11-12T09:00:12.3467828Z remote: Counting objects: 14% (2062/14728)
+2023-11-12T09:00:12.3483848Z remote: Counting objects: 15% (2210/14728)
+2023-11-12T09:00:12.3489421Z remote: Counting objects: 16% (2357/14728)
+2023-11-12T09:00:12.3489959Z remote: Counting objects: 17% (2504/14728)
+2023-11-12T09:00:12.3490601Z remote: Counting objects: 18% (2652/14728)
+2023-11-12T09:00:12.3491065Z remote: Counting objects: 19% (2799/14728)
+2023-11-12T09:00:12.3491549Z remote: Counting objects: 20% (2946/14728)
+2023-11-12T09:00:12.3492150Z remote: Counting objects: 21% (3093/14728)
+2023-11-12T09:00:12.3492599Z remote: Counting objects: 22% (3241/14728)
+2023-11-12T09:00:12.3497394Z remote: Counting objects: 23% (3388/14728)
+2023-11-12T09:00:12.3498533Z remote: Counting objects: 24% (3535/14728)
+2023-11-12T09:00:12.3499302Z remote: Counting objects: 25% (3682/14728)
+2023-11-12T09:00:12.3500231Z remote: Counting objects: 26% (3830/14728)
+2023-11-12T09:00:12.3500908Z remote: Counting objects: 27% (3977/14728)
+2023-11-12T09:00:12.3501885Z remote: Counting objects: 28% (4124/14728)
+2023-11-12T09:00:12.3502758Z remote: Counting objects: 29% (4272/14728)
+2023-11-12T09:00:12.3504000Z remote: Counting objects: 30% (4419/14728)
+2023-11-12T09:00:12.3508426Z remote: Counting objects: 31% (4566/14728)
+2023-11-12T09:00:12.3510860Z remote: Counting objects: 32% (4713/14728)
+2023-11-12T09:00:12.3513541Z remote: Counting objects: 33% (4861/14728)
+2023-11-12T09:00:12.3517241Z remote: Counting objects: 34% (5008/14728)
+2023-11-12T09:00:12.3518978Z remote: Counting objects: 35% (5155/14728)
+2023-11-12T09:00:12.3522056Z remote: Counting objects: 36% (5303/14728)
+2023-11-12T09:00:12.3522867Z remote: Counting objects: 37% (5450/14728)
+2023-11-12T09:00:12.3524352Z remote: Counting objects: 38% (5597/14728)
+2023-11-12T09:00:12.3525521Z remote: Counting objects: 39% (5744/14728)
+2023-11-12T09:00:12.3526808Z remote: Counting objects: 40% (5892/14728)
+2023-11-12T09:00:12.3528838Z remote: Counting objects: 41% (6039/14728)
+2023-11-12T09:00:12.3529652Z remote: Counting objects: 42% (6186/14728)
+2023-11-12T09:00:12.3531108Z remote: Counting objects: 43% (6334/14728)
+2023-11-12T09:00:12.3531942Z remote: Counting objects: 44% (6481/14728)
+2023-11-12T09:00:12.3535178Z remote: Counting objects: 45% (6628/14728)
+2023-11-12T09:00:12.3536185Z remote: Counting objects: 46% (6775/14728)
+2023-11-12T09:00:12.3537509Z remote: Counting objects: 47% (6923/14728)
+2023-11-12T09:00:12.3538838Z remote: Counting objects: 48% (7070/14728)
+2023-11-12T09:00:12.3539490Z remote: Counting objects: 49% (7217/14728)
+2023-11-12T09:00:12.3540416Z remote: Counting objects: 50% (7364/14728)
+2023-11-12T09:00:12.3542997Z remote: Counting objects: 51% (7512/14728)
+2023-11-12T09:00:12.3546735Z remote: Counting objects: 52% (7659/14728)
+2023-11-12T09:00:12.3547627Z remote: Counting objects: 53% (7806/14728)
+2023-11-12T09:00:12.3549945Z remote: Counting objects: 54% (7954/14728)
+2023-11-12T09:00:12.3551486Z remote: Counting objects: 55% (8101/14728)
+2023-11-12T09:00:12.3554841Z remote: Counting objects: 56% (8248/14728)
+2023-11-12T09:00:12.3558919Z remote: Counting objects: 57% (8395/14728)
+2023-11-12T09:00:12.3559895Z remote: Counting objects: 58% (8543/14728)
+2023-11-12T09:00:12.3561635Z remote: Counting objects: 59% (8690/14728)
+2023-11-12T09:00:12.3562509Z remote: Counting objects: 60% (8837/14728)
+2023-11-12T09:00:12.3565221Z remote: Counting objects: 61% (8985/14728)
+2023-11-12T09:00:12.3566377Z remote: Counting objects: 62% (9132/14728)
+2023-11-12T09:00:12.3567330Z remote: Counting objects: 63% (9279/14728)
+2023-11-12T09:00:12.3568404Z remote: Counting objects: 64% (9426/14728)
+2023-11-12T09:00:12.3569399Z remote: Counting objects: 65% (9574/14728)
+2023-11-12T09:00:12.3570508Z remote: Counting objects: 66% (9721/14728)
+2023-11-12T09:00:12.3573805Z remote: Counting objects: 67% (9868/14728)
+2023-11-12T09:00:12.3574713Z remote: Counting objects: 68% (10016/14728)
+2023-11-12T09:00:12.3575852Z remote: Counting objects: 69% (10163/14728)
+2023-11-12T09:00:12.3576870Z remote: Counting objects: 70% (10310/14728)
+2023-11-12T09:00:12.3577724Z remote: Counting objects: 71% (10457/14728)
+2023-11-12T09:00:12.3578357Z remote: Counting objects: 72% (10605/14728)
+2023-11-12T09:00:12.3578886Z remote: Counting objects: 73% (10752/14728)
+2023-11-12T09:00:12.3579497Z remote: Counting objects: 74% (10899/14728)
+2023-11-12T09:00:12.3580417Z remote: Counting objects: 75% (11046/14728)
+2023-11-12T09:00:12.3581097Z remote: Counting objects: 76% (11194/14728)
+2023-11-12T09:00:12.3581574Z remote: Counting objects: 77% (11341/14728)
+2023-11-12T09:00:12.3582409Z remote: Counting objects: 78% (11488/14728)
+2023-11-12T09:00:12.3582915Z remote: Counting objects: 79% (11636/14728)
+2023-11-12T09:00:12.3583405Z remote: Counting objects: 80% (11783/14728)
+2023-11-12T09:00:12.3583954Z remote: Counting objects: 81% (11930/14728)
+2023-11-12T09:00:12.3586461Z remote: Counting objects: 82% (12077/14728)
+2023-11-12T09:00:12.3587052Z remote: Counting objects: 83% (12225/14728)
+2023-11-12T09:00:12.3587941Z remote: Counting objects: 84% (12372/14728)
+2023-11-12T09:00:12.3588988Z remote: Counting objects: 85% (12519/14728)
+2023-11-12T09:00:12.3591543Z remote: Counting objects: 86% (12667/14728)
+2023-11-12T09:00:12.3594301Z remote: Counting objects: 87% (12814/14728)
+2023-11-12T09:00:12.3597908Z remote: Counting objects: 88% (12961/14728)
+2023-11-12T09:00:12.3601958Z remote: Counting objects: 89% (13108/14728)
+2023-11-12T09:00:12.3605574Z remote: Counting objects: 90% (13256/14728)
+2023-11-12T09:00:12.3610280Z remote: Counting objects: 91% (13403/14728)
+2023-11-12T09:00:12.3612894Z remote: Counting objects: 92% (13550/14728)
+2023-11-12T09:00:12.3615660Z remote: Counting objects: 93% (13698/14728)
+2023-11-12T09:00:12.3619462Z remote: Counting objects: 94% (13845/14728)
+2023-11-12T09:00:12.3623758Z remote: Counting objects: 95% (13992/14728)
+2023-11-12T09:00:12.3628748Z remote: Counting objects: 96% (14139/14728)
+2023-11-12T09:00:12.3636487Z remote: Counting objects: 97% (14287/14728)
+2023-11-12T09:00:12.3641426Z remote: Counting objects: 98% (14434/14728)
+2023-11-12T09:00:12.3646422Z remote: Counting objects: 99% (14581/14728)
+2023-11-12T09:00:12.3649144Z remote: Counting objects: 100% (14728/14728)
+2023-11-12T09:00:12.3649919Z remote: Counting objects: 100% (14728/14728), done.
+2023-11-12T09:00:12.3825128Z remote: Compressing objects: 0% (1/13137)
+2023-11-12T09:00:12.3961841Z remote: Compressing objects: 1% (132/13137)
+2023-11-12T09:00:12.4112502Z remote: Compressing objects: 2% (263/13137)
+2023-11-12T09:00:12.4227069Z remote: Compressing objects: 3% (395/13137)
+2023-11-12T09:00:12.4228313Z remote: Compressing objects: 4% (526/13137)
+2023-11-12T09:00:12.4228983Z remote: Compressing objects: 5% (657/13137)
+2023-11-12T09:00:12.4229643Z remote: Compressing objects: 6% (789/13137)
+2023-11-12T09:00:12.4271804Z remote: Compressing objects: 7% (920/13137)
+2023-11-12T09:00:12.4360389Z remote: Compressing objects: 8% (1051/13137)
+2023-11-12T09:00:12.4466461Z remote: Compressing objects: 9% (1183/13137)
+2023-11-12T09:00:12.4646998Z remote: Compressing objects: 10% (1314/13137)
+2023-11-12T09:00:12.5428669Z remote: Compressing objects: 11% (1446/13137)
+2023-11-12T09:00:12.8296153Z remote: Compressing objects: 12% (1577/13137)
+2023-11-12T09:00:12.9213149Z remote: Compressing objects: 13% (1708/13137)
+2023-11-12T09:00:13.0041408Z remote: Compressing objects: 14% (1840/13137)
+2023-11-12T09:00:13.1340856Z remote: Compressing objects: 15% (1971/13137)
+2023-11-12T09:00:13.1645036Z remote: Compressing objects: 16% (2102/13137)
+2023-11-12T09:00:13.1904768Z remote: Compressing objects: 17% (2234/13137)
+2023-11-12T09:00:13.2018494Z remote: Compressing objects: 18% (2365/13137)
+2023-11-12T09:00:13.2019779Z remote: Compressing objects: 19% (2497/13137)
+2023-11-12T09:00:13.2134073Z remote: Compressing objects: 20% (2628/13137)
+2023-11-12T09:00:13.2199911Z remote: Compressing objects: 21% (2759/13137)
+2023-11-12T09:00:13.2260920Z remote: Compressing objects: 22% (2891/13137)
+2023-11-12T09:00:13.2343043Z remote: Compressing objects: 23% (3022/13137)
+2023-11-12T09:00:13.2821833Z remote: Compressing objects: 24% (3153/13137)
+2023-11-12T09:00:13.3039708Z remote: Compressing objects: 25% (3285/13137)
+2023-11-12T09:00:13.3255129Z remote: Compressing objects: 26% (3416/13137)
+2023-11-12T09:00:13.3405305Z remote: Compressing objects: 27% (3547/13137)
+2023-11-12T09:00:13.3571381Z remote: Compressing objects: 28% (3679/13137)
+2023-11-12T09:00:13.3670018Z remote: Compressing objects: 29% (3810/13137)
+2023-11-12T09:00:13.4040877Z remote: Compressing objects: 29% (3868/13137)
+2023-11-12T09:00:13.4251871Z remote: Compressing objects: 30% (3942/13137)
+2023-11-12T09:00:13.4457155Z remote: Compressing objects: 31% (4073/13137)
+2023-11-12T09:00:13.4780533Z remote: Compressing objects: 32% (4204/13137)
+2023-11-12T09:00:13.4983464Z remote: Compressing objects: 33% (4336/13137)
+2023-11-12T09:00:13.5295246Z remote: Compressing objects: 34% (4467/13137)
+2023-11-12T09:00:13.5719629Z remote: Compressing objects: 35% (4598/13137)
+2023-11-12T09:00:13.6054442Z remote: Compressing objects: 36% (4730/13137)
+2023-11-12T09:00:13.6350098Z remote: Compressing objects: 37% (4861/13137)
+2023-11-12T09:00:13.6626461Z remote: Compressing objects: 38% (4993/13137)
+2023-11-12T09:00:13.6916464Z remote: Compressing objects: 39% (5124/13137)
+2023-11-12T09:00:13.7302124Z remote: Compressing objects: 40% (5255/13137)
+2023-11-12T09:00:13.7576240Z remote: Compressing objects: 41% (5387/13137)
+2023-11-12T09:00:13.7850663Z remote: Compressing objects: 42% (5518/13137)
+2023-11-12T09:00:13.8125191Z remote: Compressing objects: 43% (5649/13137)
+2023-11-12T09:00:13.8344430Z remote: Compressing objects: 44% (5781/13137)
+2023-11-12T09:00:13.8648361Z remote: Compressing objects: 45% (5912/13137)
+2023-11-12T09:00:13.8890504Z remote: Compressing objects: 46% (6044/13137)
+2023-11-12T09:00:13.9134975Z remote: Compressing objects: 47% (6175/13137)
+2023-11-12T09:00:13.9382739Z remote: Compressing objects: 48% (6306/13137)
+2023-11-12T09:00:13.9574317Z remote: Compressing objects: 49% (6438/13137)
+2023-11-12T09:00:13.9764171Z remote: Compressing objects: 50% (6569/13137)
+2023-11-12T09:00:13.9965671Z remote: Compressing objects: 51% (6700/13137)
+2023-11-12T09:00:14.0240257Z remote: Compressing objects: 52% (6832/13137)
+2023-11-12T09:00:14.0468725Z remote: Compressing objects: 53% (6963/13137)
+2023-11-12T09:00:14.0669881Z remote: Compressing objects: 54% (7094/13137)
+2023-11-12T09:00:14.0895124Z remote: Compressing objects: 55% (7226/13137)
+2023-11-12T09:00:14.1141069Z remote: Compressing objects: 56% (7357/13137)
+2023-11-12T09:00:14.1354395Z remote: Compressing objects: 57% (7489/13137)
+2023-11-12T09:00:14.1570266Z remote: Compressing objects: 58% (7620/13137)
+2023-11-12T09:00:14.1754980Z remote: Compressing objects: 59% (7751/13137)
+2023-11-12T09:00:14.2084676Z remote: Compressing objects: 60% (7883/13137)
+2023-11-12T09:00:14.2310657Z remote: Compressing objects: 61% (8014/13137)
+2023-11-12T09:00:14.2625166Z remote: Compressing objects: 62% (8145/13137)
+2023-11-12T09:00:14.2909864Z remote: Compressing objects: 63% (8277/13137)
+2023-11-12T09:00:14.3192565Z remote: Compressing objects: 64% (8408/13137)
+2023-11-12T09:00:14.3424597Z remote: Compressing objects: 65% (8540/13137)
+2023-11-12T09:00:14.3648230Z remote: Compressing objects: 66% (8671/13137)
+2023-11-12T09:00:14.3654208Z remote: Compressing objects: 67% (8802/13137)
+2023-11-12T09:00:14.3852572Z remote: Compressing objects: 67% (8803/13137)
+2023-11-12T09:00:14.4083890Z remote: Compressing objects: 68% (8934/13137)
+2023-11-12T09:00:14.4346236Z remote: Compressing objects: 69% (9065/13137)
+2023-11-12T09:00:14.4412610Z remote: Compressing objects: 70% (9196/13137)
+2023-11-12T09:00:14.4438826Z remote: Compressing objects: 71% (9328/13137)
+2023-11-12T09:00:14.4557338Z remote: Compressing objects: 72% (9459/13137)
+2023-11-12T09:00:14.4560053Z remote: Compressing objects: 73% (9591/13137)
+2023-11-12T09:00:14.4561406Z remote: Compressing objects: 74% (9722/13137)
+2023-11-12T09:00:14.4562102Z remote: Compressing objects: 75% (9853/13137)
+2023-11-12T09:00:14.4598003Z remote: Compressing objects: 76% (9985/13137)
+2023-11-12T09:00:14.4599196Z remote: Compressing objects: 77% (10116/13137)
+2023-11-12T09:00:14.4600027Z remote: Compressing objects: 78% (10247/13137)
+2023-11-12T09:00:14.4610318Z remote: Compressing objects: 79% (10379/13137)
+2023-11-12T09:00:14.4610882Z remote: Compressing objects: 80% (10510/13137)
+2023-11-12T09:00:14.4625739Z remote: Compressing objects: 81% (10641/13137)
+2023-11-12T09:00:14.4627218Z remote: Compressing objects: 82% (10773/13137)
+2023-11-12T09:00:14.4628087Z remote: Compressing objects: 83% (10904/13137)
+2023-11-12T09:00:14.4628755Z remote: Compressing objects: 84% (11036/13137)
+2023-11-12T09:00:14.4641964Z remote: Compressing objects: 85% (11167/13137)
+2023-11-12T09:00:14.4643000Z remote: Compressing objects: 86% (11298/13137)
+2023-11-12T09:00:14.4643588Z remote: Compressing objects: 87% (11430/13137)
+2023-11-12T09:00:14.4644263Z remote: Compressing objects: 88% (11561/13137)
+2023-11-12T09:00:14.4644780Z remote: Compressing objects: 89% (11692/13137)
+2023-11-12T09:00:14.4667702Z remote: Compressing objects: 90% (11824/13137)
+2023-11-12T09:00:14.4763174Z remote: Compressing objects: 91% (11955/13137)
+2023-11-12T09:00:14.4790967Z remote: Compressing objects: 92% (12087/13137)
+2023-11-12T09:00:14.4805225Z remote: Compressing objects: 93% (12218/13137)
+2023-11-12T09:00:14.4826093Z remote: Compressing objects: 94% (12349/13137)
+2023-11-12T09:00:14.4845748Z remote: Compressing objects: 95% (12481/13137)
+2023-11-12T09:00:14.4852480Z remote: Compressing objects: 96% (12612/13137)
+2023-11-12T09:00:14.4863608Z remote: Compressing objects: 97% (12743/13137)
+2023-11-12T09:00:14.4890566Z remote: Compressing objects: 98% (12875/13137)
+2023-11-12T09:00:14.4901499Z remote: Compressing objects: 99% (13006/13137)
+2023-11-12T09:00:14.4905499Z remote: Compressing objects: 100% (13137/13137)
+2023-11-12T09:00:14.4906263Z remote: Compressing objects: 100% (13137/13137), done.
+2023-11-12T09:00:14.5298519Z Receiving objects: 0% (1/14728)
+2023-11-12T09:00:14.7511556Z Receiving objects: 1% (148/14728)
+2023-11-12T09:00:15.0383718Z Receiving objects: 2% (295/14728)
+2023-11-12T09:00:15.0790920Z Receiving objects: 3% (442/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.1841924Z Receiving objects: 4% (590/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.1886539Z Receiving objects: 5% (737/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.1946135Z Receiving objects: 6% (884/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2129478Z Receiving objects: 7% (1031/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2298890Z Receiving objects: 8% (1179/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2441190Z Receiving objects: 9% (1326/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2535883Z Receiving objects: 10% (1473/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2682741Z Receiving objects: 11% (1621/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2854458Z Receiving objects: 12% (1768/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2953047Z Receiving objects: 13% (1915/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.2998284Z Receiving objects: 14% (2062/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.3017511Z Receiving objects: 15% (2210/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.3161978Z Receiving objects: 16% (2357/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.3233106Z Receiving objects: 17% (2504/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.3483968Z Receiving objects: 18% (2652/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.3784019Z Receiving objects: 19% (2799/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.3954481Z Receiving objects: 20% (2946/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.4245221Z Receiving objects: 21% (3093/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.4470709Z Receiving objects: 22% (3241/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.4723098Z Receiving objects: 23% (3388/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.4937347Z Receiving objects: 24% (3535/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.4944940Z Receiving objects: 24% (3669/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.5175139Z Receiving objects: 25% (3682/14728), 2.91 MiB | 5.72 MiB/s
+2023-11-12T09:00:15.5292638Z Receiving objects: 26% (3830/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.5497254Z Receiving objects: 27% (3977/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.5672343Z Receiving objects: 28% (4124/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.5843576Z Receiving objects: 29% (4272/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.5937090Z Receiving objects: 30% (4419/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6094771Z Receiving objects: 31% (4566/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6238194Z Receiving objects: 32% (4713/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6342923Z Receiving objects: 33% (4861/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6565056Z Receiving objects: 34% (5008/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6729745Z Receiving objects: 35% (5155/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6807225Z Receiving objects: 36% (5303/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.6932642Z Receiving objects: 37% (5450/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.7116778Z Receiving objects: 38% (5597/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.7226855Z Receiving objects: 39% (5744/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.7368698Z Receiving objects: 40% (5892/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.7722704Z Receiving objects: 41% (6039/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.8013149Z Receiving objects: 42% (6186/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.8245559Z Receiving objects: 43% (6334/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.8412984Z Receiving objects: 44% (6481/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.8809019Z Receiving objects: 45% (6628/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9077444Z Receiving objects: 46% (6775/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9198076Z Receiving objects: 47% (6923/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9335440Z Receiving objects: 48% (7070/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9409235Z Receiving objects: 49% (7217/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9475966Z Receiving objects: 50% (7364/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9632751Z Receiving objects: 51% (7512/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9710761Z Receiving objects: 52% (7659/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:15.9997665Z Receiving objects: 53% (7806/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:16.1754062Z Receiving objects: 54% (7954/14728), 8.94 MiB | 8.86 MiB/s
+2023-11-12T09:00:16.4937069Z Receiving objects: 55% (8101/14728), 16.55 MiB | 10.97 MiB/s
+2023-11-12T09:00:16.4977595Z Receiving objects: 55% (8228/14728), 16.55 MiB | 10.97 MiB/s
+2023-11-12T09:00:16.5335682Z Receiving objects: 56% (8248/14728), 16.55 MiB | 10.97 MiB/s
+2023-11-12T09:00:16.5529510Z Receiving objects: 57% (8395/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.6298834Z Receiving objects: 58% (8543/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.6477417Z Receiving objects: 59% (8690/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.6877035Z Receiving objects: 60% (8837/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.7190945Z Receiving objects: 61% (8985/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.7421126Z Receiving objects: 62% (9132/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.7678021Z Receiving objects: 63% (9279/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:16.8523998Z Receiving objects: 64% (9426/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:17.1043001Z Receiving objects: 65% (9574/14728), 40.02 MiB | 19.93 MiB/s
+2023-11-12T09:00:17.3854775Z Receiving objects: 66% (9721/14728), 71.27 MiB | 28.42 MiB/s
+2023-11-12T09:00:17.4325550Z Receiving objects: 67% (9868/14728), 71.27 MiB | 28.42 MiB/s
+2023-11-12T09:00:17.4843860Z Receiving objects: 68% (10016/14728), 71.27 MiB | 28.42 MiB/s
+2023-11-12T09:00:17.4974216Z Receiving objects: 69% (10163/14728), 71.27 MiB | 28.42 MiB/s
+2023-11-12T09:00:17.5355293Z Receiving objects: 69% (10174/14728), 71.27 MiB | 28.42 MiB/s
+2023-11-12T09:00:17.6035052Z Receiving objects: 70% (10310/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.6662170Z Receiving objects: 71% (10457/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.7426342Z Receiving objects: 72% (10605/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.7732421Z Receiving objects: 73% (10752/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.7890371Z Receiving objects: 74% (10899/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.8003342Z Receiving objects: 75% (11046/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.8123812Z Receiving objects: 76% (11194/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.8868154Z Receiving objects: 77% (11341/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.9248750Z Receiving objects: 78% (11488/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.9430493Z Receiving objects: 79% (11636/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.9815619Z Receiving objects: 80% (11783/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:17.9897797Z Receiving objects: 81% (11930/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:18.0004021Z Receiving objects: 82% (12077/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:18.0065635Z Receiving objects: 83% (12225/14728), 104.98 MiB | 34.90 MiB/s
+2023-11-12T09:00:18.0133099Z Receiving objects: 84% (12372/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.0212448Z Receiving objects: 85% (12519/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.0292270Z Receiving objects: 86% (12667/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.0477194Z Receiving objects: 87% (12814/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1050651Z Receiving objects: 88% (12961/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1401134Z Receiving objects: 89% (13108/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1440829Z Receiving objects: 90% (13256/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1503769Z Receiving objects: 91% (13403/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1562677Z Receiving objects: 92% (13550/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1618314Z Receiving objects: 93% (13698/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1655496Z Receiving objects: 94% (13845/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1708799Z Receiving objects: 95% (13992/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1779590Z Receiving objects: 96% (14139/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1850924Z Receiving objects: 97% (14287/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1887710Z Receiving objects: 98% (14434/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1982209Z Receiving objects: 99% (14581/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1983900Z remote: Total 14728 (delta 1648), reused 9457 (delta 1437), pack-reused 0
+2023-11-12T09:00:18.1993200Z Receiving objects: 100% (14728/14728), 137.62 MiB | 39.23 MiB/s
+2023-11-12T09:00:18.1994500Z Receiving objects: 100% (14728/14728), 147.84 MiB | 39.90 MiB/s, done.
+2023-11-12T09:00:18.2019068Z Resolving deltas: 0% (0/1648)
+2023-11-12T09:00:18.2023348Z Resolving deltas: 1% (17/1648)
+2023-11-12T09:00:18.2032679Z Resolving deltas: 2% (33/1648)
+2023-11-12T09:00:18.2057515Z Resolving deltas: 3% (50/1648)
+2023-11-12T09:00:18.2067595Z Resolving deltas: 4% (66/1648)
+2023-11-12T09:00:18.2311083Z Resolving deltas: 5% (83/1648)
+2023-11-12T09:00:18.2318508Z Resolving deltas: 6% (99/1648)
+2023-11-12T09:00:18.2326847Z Resolving deltas: 7% (116/1648)
+2023-11-12T09:00:18.2335304Z Resolving deltas: 8% (132/1648)
+2023-11-12T09:00:18.2348077Z Resolving deltas: 9% (149/1648)
+2023-11-12T09:00:18.2360740Z Resolving deltas: 10% (165/1648)
+2023-11-12T09:00:18.2369574Z Resolving deltas: 11% (182/1648)
+2023-11-12T09:00:18.2383691Z Resolving deltas: 12% (198/1648)
+2023-11-12T09:00:18.2394926Z Resolving deltas: 13% (215/1648)
+2023-11-12T09:00:18.2398748Z Resolving deltas: 14% (231/1648)
+2023-11-12T09:00:18.2404491Z Resolving deltas: 15% (248/1648)
+2023-11-12T09:00:18.2406714Z Resolving deltas: 16% (264/1648)
+2023-11-12T09:00:18.2407998Z Resolving deltas: 17% (281/1648)
+2023-11-12T09:00:18.2409292Z Resolving deltas: 18% (297/1648)
+2023-11-12T09:00:18.2411513Z Resolving deltas: 19% (315/1648)
+2023-11-12T09:00:18.2413614Z Resolving deltas: 20% (330/1648)
+2023-11-12T09:00:18.2414462Z Resolving deltas: 21% (347/1648)
+2023-11-12T09:00:18.2418247Z Resolving deltas: 22% (363/1648)
+2023-11-12T09:00:18.2418936Z Resolving deltas: 23% (380/1648)
+2023-11-12T09:00:18.2419539Z Resolving deltas: 24% (396/1648)
+2023-11-12T09:00:18.2427604Z Resolving deltas: 25% (412/1648)
+2023-11-12T09:00:18.2432866Z Resolving deltas: 26% (429/1648)
+2023-11-12T09:00:18.2441981Z Resolving deltas: 27% (445/1648)
+2023-11-12T09:00:18.2447582Z Resolving deltas: 28% (462/1648)
+2023-11-12T09:00:18.2466027Z Resolving deltas: 29% (478/1648)
+2023-11-12T09:00:18.2471796Z Resolving deltas: 30% (495/1648)
+2023-11-12T09:00:18.2480036Z Resolving deltas: 31% (511/1648)
+2023-11-12T09:00:18.2490887Z Resolving deltas: 32% (528/1648)
+2023-11-12T09:00:18.2494739Z Resolving deltas: 33% (544/1648)
+2023-11-12T09:00:18.2502376Z Resolving deltas: 34% (561/1648)
+2023-11-12T09:00:18.2508410Z Resolving deltas: 35% (577/1648)
+2023-11-12T09:00:18.2513823Z Resolving deltas: 36% (594/1648)
+2023-11-12T09:00:18.2527222Z Resolving deltas: 37% (610/1648)
+2023-11-12T09:00:18.2537398Z Resolving deltas: 38% (627/1648)
+2023-11-12T09:00:18.2549132Z Resolving deltas: 39% (643/1648)
+2023-11-12T09:00:18.2554784Z Resolving deltas: 40% (660/1648)
+2023-11-12T09:00:18.2556656Z Resolving deltas: 41% (676/1648)
+2023-11-12T09:00:18.2557507Z Resolving deltas: 42% (693/1648)
+2023-11-12T09:00:18.2558588Z Resolving deltas: 43% (709/1648)
+2023-11-12T09:00:18.2559455Z Resolving deltas: 44% (727/1648)
+2023-11-12T09:00:18.2561210Z Resolving deltas: 45% (742/1648)
+2023-11-12T09:00:18.2562565Z Resolving deltas: 46% (760/1648)
+2023-11-12T09:00:18.2563347Z Resolving deltas: 47% (775/1648)
+2023-11-12T09:00:18.2564389Z Resolving deltas: 48% (792/1648)
+2023-11-12T09:00:18.2565291Z Resolving deltas: 49% (808/1648)
+2023-11-12T09:00:18.2566382Z Resolving deltas: 50% (824/1648)
+2023-11-12T09:00:18.2567240Z Resolving deltas: 51% (841/1648)
+2023-11-12T09:00:18.2568283Z Resolving deltas: 52% (857/1648)
+2023-11-12T09:00:18.2573986Z Resolving deltas: 53% (874/1648)
+2023-11-12T09:00:18.2578038Z Resolving deltas: 54% (890/1648)
+2023-11-12T09:00:18.2579766Z Resolving deltas: 55% (907/1648)
+2023-11-12T09:00:18.2583389Z Resolving deltas: 56% (923/1648)
+2023-11-12T09:00:18.2587856Z Resolving deltas: 57% (940/1648)
+2023-11-12T09:00:18.2589664Z Resolving deltas: 58% (956/1648)
+2023-11-12T09:00:18.2591411Z Resolving deltas: 59% (973/1648)
+2023-11-12T09:00:18.2594574Z Resolving deltas: 60% (989/1648)
+2023-11-12T09:00:18.2597339Z Resolving deltas: 61% (1006/1648)
+2023-11-12T09:00:18.2599661Z Resolving deltas: 62% (1022/1648)
+2023-11-12T09:00:18.2605805Z Resolving deltas: 63% (1039/1648)
+2023-11-12T09:00:18.2606445Z Resolving deltas: 64% (1055/1648)
+2023-11-12T09:00:18.2608833Z Resolving deltas: 65% (1072/1648)
+2023-11-12T09:00:18.2612033Z Resolving deltas: 66% (1088/1648)
+2023-11-12T09:00:18.2614253Z Resolving deltas: 67% (1105/1648)
+2023-11-12T09:00:18.2618118Z Resolving deltas: 68% (1121/1648)
+2023-11-12T09:00:18.2619827Z Resolving deltas: 69% (1138/1648)
+2023-11-12T09:00:18.2621203Z Resolving deltas: 70% (1154/1648)
+2023-11-12T09:00:18.2624401Z Resolving deltas: 71% (1171/1648)
+2023-11-12T09:00:18.2627592Z Resolving deltas: 72% (1187/1648)
+2023-11-12T09:00:18.2630703Z Resolving deltas: 73% (1204/1648)
+2023-11-12T09:00:18.2633542Z Resolving deltas: 74% (1220/1648)
+2023-11-12T09:00:18.2636165Z Resolving deltas: 75% (1236/1648)
+2023-11-12T09:00:18.2638056Z Resolving deltas: 76% (1253/1648)
+2023-11-12T09:00:18.2642611Z Resolving deltas: 77% (1269/1648)
+2023-11-12T09:00:18.2645574Z Resolving deltas: 78% (1286/1648)
+2023-11-12T09:00:18.2650111Z Resolving deltas: 79% (1302/1648)
+2023-11-12T09:00:18.2653615Z Resolving deltas: 80% (1319/1648)
+2023-11-12T09:00:18.2657080Z Resolving deltas: 81% (1335/1648)
+2023-11-12T09:00:18.2661192Z Resolving deltas: 82% (1352/1648)
+2023-11-12T09:00:18.2666443Z Resolving deltas: 83% (1368/1648)
+2023-11-12T09:00:18.2671066Z Resolving deltas: 84% (1385/1648)
+2023-11-12T09:00:18.2675875Z Resolving deltas: 85% (1401/1648)
+2023-11-12T09:00:18.2680749Z Resolving deltas: 86% (1418/1648)
+2023-11-12T09:00:18.2685418Z Resolving deltas: 87% (1434/1648)
+2023-11-12T09:00:18.2691672Z Resolving deltas: 88% (1451/1648)
+2023-11-12T09:00:18.2696947Z Resolving deltas: 89% (1467/1648)
+2023-11-12T09:00:18.2704268Z Resolving deltas: 90% (1484/1648)
+2023-11-12T09:00:18.2714966Z Resolving deltas: 91% (1500/1648)
+2023-11-12T09:00:18.2724238Z Resolving deltas: 92% (1518/1648)
+2023-11-12T09:00:18.2727054Z Resolving deltas: 93% (1533/1648)
+2023-11-12T09:00:18.2732989Z Resolving deltas: 94% (1550/1648)
+2023-11-12T09:00:18.2738406Z Resolving deltas: 95% (1567/1648)
+2023-11-12T09:00:18.2743401Z Resolving deltas: 96% (1583/1648)
+2023-11-12T09:00:18.2748306Z Resolving deltas: 97% (1599/1648)
+2023-11-12T09:00:18.2752079Z Resolving deltas: 98% (1616/1648)
+2023-11-12T09:00:18.2774732Z Resolving deltas: 99% (1632/1648)
+2023-11-12T09:00:18.2776965Z Resolving deltas: 100% (1648/1648)
+2023-11-12T09:00:18.2777617Z Resolving deltas: 100% (1648/1648), done.
+2023-11-12T09:00:18.4151233Z From https://github.com/tgstation/tgstation
+2023-11-12T09:00:18.4152324Z * [new ref] 0f52a54577af8e336ee4407c83bc6d3bfedd1d11 -> pull/79384/merge
+2023-11-12T09:00:18.4174692Z ##[endgroup]
+2023-11-12T09:00:18.4175546Z ##[group]Determining the checkout info
+2023-11-12T09:00:18.4177292Z ##[endgroup]
+2023-11-12T09:00:18.4178077Z ##[group]Checking out the ref
+2023-11-12T09:00:18.4182006Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/79384/merge
+2023-11-12T09:00:19.4499153Z Updating files: 65% (8853/13535)
+2023-11-12T09:00:19.4677754Z Updating files: 66% (8934/13535)
+2023-11-12T09:00:19.4881367Z Updating files: 67% (9069/13535)
+2023-11-12T09:00:19.5117589Z Updating files: 68% (9204/13535)
+2023-11-12T09:00:19.5393100Z Updating files: 69% (9340/13535)
+2023-11-12T09:00:19.5649915Z Updating files: 70% (9475/13535)
+2023-11-12T09:00:19.5885545Z Updating files: 71% (9610/13535)
+2023-11-12T09:00:19.6092470Z Updating files: 72% (9746/13535)
+2023-11-12T09:00:19.6193070Z Updating files: 73% (9881/13535)
+2023-11-12T09:00:19.6275200Z Updating files: 74% (10016/13535)
+2023-11-12T09:00:19.6366161Z Updating files: 75% (10152/13535)
+2023-11-12T09:00:19.6497650Z Updating files: 76% (10287/13535)
+2023-11-12T09:00:19.6864064Z Updating files: 77% (10422/13535)
+2023-11-12T09:00:19.6905958Z Updating files: 78% (10558/13535)
+2023-11-12T09:00:19.7095469Z Updating files: 79% (10693/13535)
+2023-11-12T09:00:19.7217904Z Updating files: 80% (10828/13535)
+2023-11-12T09:00:19.7299066Z Updating files: 81% (10964/13535)
+2023-11-12T09:00:19.7371348Z Updating files: 82% (11099/13535)
+2023-11-12T09:00:19.7439098Z Updating files: 83% (11235/13535)
+2023-11-12T09:00:19.7509681Z Updating files: 84% (11370/13535)
+2023-11-12T09:00:19.7583669Z Updating files: 85% (11505/13535)
+2023-11-12T09:00:19.7654399Z Updating files: 86% (11641/13535)
+2023-11-12T09:00:19.7761508Z Updating files: 87% (11776/13535)
+2023-11-12T09:00:19.7996111Z Updating files: 88% (11911/13535)
+2023-11-12T09:00:19.8212241Z Updating files: 89% (12047/13535)
+2023-11-12T09:00:19.8280038Z Updating files: 90% (12182/13535)
+2023-11-12T09:00:19.8351398Z Updating files: 91% (12317/13535)
+2023-11-12T09:00:19.8428752Z Updating files: 92% (12453/13535)
+2023-11-12T09:00:19.8508292Z Updating files: 93% (12588/13535)
+2023-11-12T09:00:19.8572225Z Updating files: 94% (12723/13535)
+2023-11-12T09:00:19.8650650Z Updating files: 95% (12859/13535)
+2023-11-12T09:00:19.8729362Z Updating files: 96% (12994/13535)
+2023-11-12T09:00:19.8829435Z Updating files: 97% (13129/13535)
+2023-11-12T09:00:19.8894699Z Updating files: 98% (13265/13535)
+2023-11-12T09:00:19.8994866Z Updating files: 99% (13400/13535)
+2023-11-12T09:00:19.8995690Z Updating files: 100% (13535/13535)
+2023-11-12T09:00:19.8996705Z Updating files: 100% (13535/13535), done.
+2023-11-12T09:00:19.9124545Z Note: switching to 'refs/remotes/pull/79384/merge'.
+2023-11-12T09:00:19.9125161Z
+2023-11-12T09:00:19.9125767Z You are in 'detached HEAD' state. You can look around, make experimental
+2023-11-12T09:00:19.9127145Z changes and commit them, and you can discard any commits you make in this
+2023-11-12T09:00:19.9128712Z state without impacting any branches by switching back to a branch.
+2023-11-12T09:00:19.9129440Z
+2023-11-12T09:00:19.9129888Z If you want to create a new branch to retain commits you create, you may
+2023-11-12T09:00:19.9131250Z do so (now or later) by using -c with the switch command. Example:
+2023-11-12T09:00:19.9131887Z
+2023-11-12T09:00:19.9132223Z git switch -c
+2023-11-12T09:00:19.9132633Z
+2023-11-12T09:00:19.9133095Z Or undo this operation with:
+2023-11-12T09:00:19.9133655Z
+2023-11-12T09:00:19.9133848Z git switch -
+2023-11-12T09:00:19.9134127Z
+2023-11-12T09:00:19.9134677Z Turn off this advice by setting config variable advice.detachedHead to false
+2023-11-12T09:00:19.9135426Z
+2023-11-12T09:00:19.9136195Z HEAD is now at 0f52a54 Merge 2104248ba951649225e5c5cb8168346f0220bdb7 into 1eb94ba2286812853f5c65b2557bf2f8f5e46d4f
+2023-11-12T09:00:19.9215939Z ##[endgroup]
+2023-11-12T09:00:19.9261644Z [command]/usr/bin/git log -1 --format='%H'
+2023-11-12T09:00:19.9293509Z '0f52a54577af8e336ee4407c83bc6d3bfedd1d11'
+2023-11-12T09:00:19.9616124Z ##[group]Run actions/cache@v3
+2023-11-12T09:00:19.9616601Z with:
+2023-11-12T09:00:19.9616946Z path: ~/BYOND
+2023-11-12T09:00:19.9617286Z key: Linux-byond-
+2023-11-12T09:00:19.9617686Z enableCrossOsArchive: false
+2023-11-12T09:00:19.9618092Z fail-on-cache-miss: false
+2023-11-12T09:00:19.9618460Z lookup-only: false
+2023-11-12T09:00:19.9618822Z ##[endgroup]
+2023-11-12T09:00:20.2859595Z Cache Size: ~4 MB (4090426 B)
+2023-11-12T09:00:20.2888527Z [command]/usr/bin/tar -xf /home/runner/work/_temp/edb2b23d-361f-4c19-b676-33998159e0b8/cache.tzst -P -C /home/runner/work/tgstation/tgstation --use-compress-program unzstd
+2023-11-12T09:00:20.3193378Z Cache restored successfully
+2023-11-12T09:00:20.3317264Z Cache restored from key: Linux-byond-
+2023-11-12T09:00:20.3451434Z ##[group]Run sudo systemctl start mysql
+2023-11-12T09:00:20.3452154Z [36;1msudo systemctl start mysql[0m
+2023-11-12T09:00:20.3452715Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci;'[0m
+2023-11-12T09:00:20.3453355Z [36;1mmysql -u root -proot tg_ci < SQL/tgstation_schema.sql[0m
+2023-11-12T09:00:20.3454118Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;'[0m
+2023-11-12T09:00:20.3454828Z [36;1mmysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql[0m
+2023-11-12T09:00:20.3513329Z shell: /usr/bin/bash -e {0}
+2023-11-12T09:00:20.3513775Z ##[endgroup]
+2023-11-12T09:00:23.5982676Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2023-11-12T09:00:23.6362129Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2023-11-12T09:00:24.0220158Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2023-11-12T09:00:24.0302175Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2023-11-12T09:00:24.3266576Z ##[group]Run bash tools/ci/install_rust_g.sh
+2023-11-12T09:00:24.3267216Z [36;1mbash tools/ci/install_rust_g.sh[0m
+2023-11-12T09:00:24.3311615Z shell: /usr/bin/bash -e {0}
+2023-11-12T09:00:24.3311996Z ##[endgroup]
+2023-11-12T09:00:24.6018389Z 2023-11-12 09:00:24 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/127494547/aea9a209-14bc-4b8b-b98c-1ba32c0aaf86?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20231112%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231112T085850Z&X-Amz-Expires=300&X-Amz-Signature=c3e69a55ec6f839925bb9729c6b2e6b4d5b76b4855bfd64b96933c73f95a6734&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=127494547&response-content-disposition=attachment%3B%20filename%3Dlibrust_g.so&response-content-type=application%2Foctet-stream [66491316/66491316] -> "/home/runner/.byond/bin/librust_g.so" [1]
+2023-11-12T09:00:24.6320307Z linux-gate.so.1 (0xf7f74000)
+2023-11-12T09:00:24.6321993Z libz.so.1 => /lib32/libz.so.1 (0xf7f45000)
+2023-11-12T09:00:24.6322879Z libgcc_s.so.1 => /lib32/libgcc_s.so.1 (0xf7f1e000)
+2023-11-12T09:00:24.6323651Z libm.so.6 => /lib32/libm.so.6 (0xf7e16000)
+2023-11-12T09:00:24.6324533Z libc.so.6 => /lib32/libc.so.6 (0xf7400000)
+2023-11-12T09:00:24.6326012Z /lib/ld-linux.so.2 (0xf7f76000)
+2023-11-12T09:00:24.6368501Z ##[group]Run bash tools/ci/install_auxlua.sh
+2023-11-12T09:00:24.6369036Z [36;1mbash tools/ci/install_auxlua.sh[0m
+2023-11-12T09:00:24.6417060Z shell: /usr/bin/bash -e {0}
+2023-11-12T09:00:24.6417480Z ##[endgroup]
+2023-11-12T09:00:24.7086755Z 2023-11-12 09:00:24 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/473295481/ec517e6d-2695-477e-ae92-7645fee5b7ce?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20231112%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231112T085916Z&X-Amz-Expires=300&X-Amz-Signature=e13d49b79e73a573dc4a351e5e9575d601b7f51fc16f9d3f03f959884cdf8941&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=473295481&response-content-disposition=attachment%3B%20filename%3Dlibauxlua.so&response-content-type=application%2Foctet-stream [6045340/6045340] -> "/home/runner/.byond/bin/libauxlua.so" [1]
+2023-11-12T09:00:24.7172511Z linux-gate.so.1 (0xf7f77000)
+2023-11-12T09:00:24.7173643Z libstdc++.so.6 => /lib32/libstdc++.so.6 (0xf7800000)
+2023-11-12T09:00:24.7174378Z libgcc_s.so.1 => /lib32/libgcc_s.so.1 (0xf7f3e000)
+2023-11-12T09:00:24.7175045Z libpthread.so.0 => /lib32/libpthread.so.0 (0xf7f39000)
+2023-11-12T09:00:24.7176413Z libm.so.6 => /lib32/libm.so.6 (0xf7e31000)
+2023-11-12T09:00:24.7177209Z libdl.so.2 => /lib32/libdl.so.2 (0xf7e2c000)
+2023-11-12T09:00:24.7177918Z libc.so.6 => /lib32/libc.so.6 (0xf7400000)
+2023-11-12T09:00:24.7178575Z /lib/ld-linux.so.2 (0xf7f79000)
+2023-11-12T09:00:24.7231003Z ##[group]Run bash tools/ci/install_byond.sh
+2023-11-12T09:00:24.7231555Z [36;1mbash tools/ci/install_byond.sh[0m
+2023-11-12T09:00:24.7232077Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2023-11-12T09:00:24.7232805Z [36;1mtools/build/build --ci dm -DCIBUILDING -DANSICOLORS -WError -NWTG0001[0m
+2023-11-12T09:00:24.7274898Z shell: /usr/bin/bash -e {0}
+2023-11-12T09:00:24.7275297Z ##[endgroup]
+2023-11-12T09:00:24.7365575Z Setting up BYOND.
+2023-11-12T09:00:24.7497243Z % Total % Received % Xferd Average Speed Time Time Time Current
+2023-11-12T09:00:24.7498339Z Dload Upload Total Spent Left Speed
+2023-11-12T09:00:24.7499103Z
+2023-11-12T09:00:24.7733411Z 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
+2023-11-12T09:00:24.7884475Z 0 4021k 0 4979 0 0 203k 0 0:00:19 --:--:-- 0:00:19 202k
+2023-11-12T09:00:24.7885997Z 100 4021k 100 4021k 0 0 100M 0 --:--:-- --:--:-- --:--:-- 100M
+2023-11-12T09:00:24.8068033Z Archive: byond.zip
+2023-11-12T09:00:24.8069055Z creating: byond/
+2023-11-12T09:00:24.8069884Z creating: byond/key/
+2023-11-12T09:00:24.8071025Z creating: byond/web/
+2023-11-12T09:00:24.8073333Z inflating: byond/web/child.dms
+2023-11-12T09:00:24.8074283Z inflating: byond/web/button.dms
+2023-11-12T09:00:24.8076478Z inflating: byond/web/input.dms
+2023-11-12T09:00:24.8077391Z inflating: byond/web/text.dms
+2023-11-12T09:00:24.8176215Z inflating: byond/web/webclient.dart.js
+2023-11-12T09:00:24.8177154Z inflating: byond/web/verbmenu.dms
+2023-11-12T09:00:24.8178296Z inflating: byond/web/defaultSkin.dms
+2023-11-12T09:00:24.8179798Z inflating: byond/web/hotbar.dms
+2023-11-12T09:00:24.8180913Z inflating: byond/web/label.dms
+2023-11-12T09:00:24.8181973Z inflating: byond/web/alert.dms
+2023-11-12T09:00:24.8182843Z inflating: byond/web/message.dms
+2023-11-12T09:00:24.8183665Z inflating: byond/web/drag.png
+2023-11-12T09:00:24.8185004Z inflating: byond/web/map.dms
+2023-11-12T09:00:24.8186150Z inflating: byond/web/splashlogo.png
+2023-11-12T09:00:24.8186893Z inflating: byond/web/drop.png
+2023-11-12T09:00:24.8282279Z inflating: byond/web/ext.js
+2023-11-12T09:00:24.8283075Z inflating: byond/web/file.dms
+2023-11-12T09:00:24.8284575Z inflating: byond/web/grid.dms
+2023-11-12T09:00:24.8286207Z inflating: byond/web/bar.dms
+2023-11-12T09:00:24.8288946Z inflating: byond/web/dpad.dms
+2023-11-12T09:00:24.8289936Z inflating: byond/web/output.dms
+2023-11-12T09:00:24.8291365Z inflating: byond/web/tab.dms
+2023-11-12T09:00:24.8293155Z inflating: byond/web/info.dms
+2023-11-12T09:00:24.8294881Z inflating: byond/web/color.dms
+2023-11-12T09:00:24.8296103Z inflating: byond/web/gamepad.dms
+2023-11-12T09:00:24.8297532Z inflating: byond/web/browser.dms
+2023-11-12T09:00:24.8298158Z inflating: byond/web/status.dms
+2023-11-12T09:00:24.8299313Z inflating: byond/web/any.dms
+2023-11-12T09:00:24.8300438Z inflating: byond/web/pane.dms
+2023-11-12T09:00:24.8302172Z inflating: byond/web/pop.dms
+2023-11-12T09:00:24.8303255Z inflating: byond/license.txt
+2023-11-12T09:00:24.8303882Z inflating: byond/legal.txt
+2023-11-12T09:00:24.8305048Z inflating: byond/Makefile
+2023-11-12T09:00:24.8305748Z creating: byond/man/
+2023-11-12T09:00:24.8306319Z creating: byond/man/man6/
+2023-11-12T09:00:24.8307604Z inflating: byond/man/man6/DreamDaemon.6
+2023-11-12T09:00:24.8308434Z inflating: byond/man/man6/DreamMaker.6
+2023-11-12T09:00:24.8309437Z creating: byond/lib/
+2023-11-12T09:00:24.8310004Z creating: byond/host/
+2023-11-12T09:00:24.8311286Z inflating: byond/host/readme.html
+2023-11-12T09:00:24.8312492Z inflating: byond/host/readme-unix.txt
+2023-11-12T09:00:24.8313289Z creating: byond/host/home/
+2023-11-12T09:00:24.8314244Z creating: byond/host/home/root/
+2023-11-12T09:00:24.8315083Z creating: byond/host/home/root/byond/
+2023-11-12T09:00:24.8315883Z creating: byond/host/home/root/byond/tools/
+2023-11-12T09:00:24.8316724Z creating: byond/host/home/root/byond/tools/root/
+2023-11-12T09:00:24.8321401Z inflating: byond/host/home/root/byond/tools/root/root.dmb
+2023-11-12T09:00:24.8322363Z creating: byond/host/shared/
+2023-11-12T09:00:24.8323118Z creating: byond/host/shared/byond/
+2023-11-12T09:00:24.8323939Z creating: byond/host/shared/byond/tools/
+2023-11-12T09:00:24.8324697Z creating: byond/host/shared/byond/tools/ftp/
+2023-11-12T09:00:24.8326100Z inflating: byond/host/shared/byond/tools/ftp/ftp.dmb
+2023-11-12T09:00:24.8327214Z creating: byond/host/shared/byond/tools/admin/
+2023-11-12T09:00:24.8332506Z inflating: byond/host/shared/byond/tools/admin/admin.dmb
+2023-11-12T09:00:24.8333692Z creating: byond/host/shared-web/
+2023-11-12T09:00:24.8334536Z creating: byond/host/shared-web/web/
+2023-11-12T09:00:24.8335395Z creating: byond/host/shared-web/web/tools/
+2023-11-12T09:00:24.8336389Z creating: byond/host/shared-web/web/tools/admin/
+2023-11-12T09:00:24.8340610Z inflating: byond/host/shared-web/web/tools/admin/index.dmb
+2023-11-12T09:00:24.8347816Z inflating: byond/host/host.dmb
+2023-11-12T09:00:24.8348686Z inflating: byond/host/host.start
+2023-11-12T09:00:24.8349570Z inflating: byond/host/hostconf.orig
+2023-11-12T09:00:24.8350612Z inflating: byond/host/hostconf.txt
+2023-11-12T09:00:24.8351646Z inflating: byond/readme.txt
+2023-11-12T09:00:24.8352393Z creating: byond/bin/
+2023-11-12T09:00:24.8353203Z inflating: byond/bin/byondexec
+2023-11-12T09:00:24.8355525Z inflating: byond/bin/DreamDownload
+2023-11-12T09:00:24.8915164Z inflating: byond/bin/libbyond.so
+2023-11-12T09:00:24.9052390Z inflating: byond/bin/libext.so
+2023-11-12T09:00:24.9056691Z inflating: byond/bin/DreamDaemon
+2023-11-12T09:00:24.9060064Z inflating: byond/bin/DreamMaker
+2023-11-12T09:00:24.9060916Z creating: byond/cfg/
+2023-11-12T09:00:24.9061543Z inflating: byond/cfg/release.txt
+2023-11-12T09:00:24.9218525Z ***************************
+2023-11-12T09:00:24.9225188Z Now run the following command:
+2023-11-12T09:00:24.9233824Z
+2023-11-12T09:00:24.9243155Z source /home/runner/BYOND/byond/bin/byondsetup
+2023-11-12T09:00:24.9251769Z
+2023-11-12T09:00:24.9259232Z If it generates errors, your shell is not compatible with 'sh', so you will
+2023-11-12T09:00:24.9265751Z have to edit byondsetup and make it work with your shell. If the script works, you should be able to run DreamDaemon.
+2023-11-12T09:00:24.9273703Z
+2023-11-12T09:00:24.9280708Z IMPORTANT: once you have the script working, you must add the above line
+2023-11-12T09:00:24.9287739Z to your startup script. The name of your startup script depends on the
+2023-11-12T09:00:24.9294443Z shell you use. Typical ones are .profile or .bash_profile.
+2023-11-12T09:00:24.9302682Z
+2023-11-12T09:00:24.9309851Z Once everything is working, you can find out more about the software
+2023-11-12T09:00:24.9316763Z by doing 'man DreamDaemon'. A host server has also been included
+2023-11-12T09:00:24.9323620Z so edit host/hostconf.txt and boot up your world server!
+2023-11-12T09:00:24.9330177Z ***************************
+2023-11-12T09:00:24.9736645Z Using system-wide Node v18.18.2
+2023-11-12T09:00:25.1112864Z :: Juke Build version 0.8.1
+2023-11-12T09:00:25.3377241Z => Starting 'dm'
+2023-11-12T09:00:25.3385788Z :: Using defines: CBT, CIBUILDING, ANSICOLORS
+2023-11-12T09:00:25.6662719Z DM compiler version 514.1588
+2023-11-12T09:00:25.6663169Z loading tgstation.m.dme
+2023-11-12T09:00:25.9197564Z code/__DEFINES/qdel.dm:22:warning: #warn TG0001 qdel REFERENCE_TRACKING enabled
+2023-11-12T09:00:36.5749452Z loading interface/skin.dmf
+2023-11-12T09:01:29.5751892Z loading map_files/generic/CentCom.dmm
+2023-11-12T09:01:29.9653644Z saving tgstation.m.dmb (DEBUG mode)
+2023-11-12T09:01:30.6467137Z tgstation.m.dmb - 0 errors, 1 warning (11/12/23 9:01 am)
+2023-11-12T09:01:30.6468251Z Total time: 1:05
+2023-11-12T09:01:31.6898602Z => Finished 'dm' in 66.352s
+2023-11-12T09:01:31.6901009Z => Done in 66.578s
+2023-11-12T09:01:31.7007243Z ##[group]Run source $HOME/BYOND/byond/bin/byondsetup
+2023-11-12T09:01:31.7007981Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2023-11-12T09:01:31.7008503Z [36;1mbash tools/ci/run_server.sh tramstation[0m
+2023-11-12T09:01:31.7058146Z shell: /usr/bin/bash -e {0}
+2023-11-12T09:01:31.7058547Z ##[endgroup]
+2023-11-12T09:01:31.7139001Z Testing tramstation
+2023-11-12T09:01:32.0865721Z cp: cannot stat 'tgui/packages/tgfont/dist/*': No such file or directory
+2023-11-12T09:01:32.1025274Z Sun Nov 12 09:01:32 2023
+2023-11-12T09:01:32.1026062Z World opened on network port 34125.
+2023-11-12T09:01:32.1026759Z Welcome BYOND! (5.0 Public Version 514.1588)
+2023-11-12T09:01:54.2375415Z World loaded at 09:01:54!
+2023-11-12T09:01:54.2376123Z Running /tg/ revision:
+2023-11-12T09:01:54.2376721Z No commit information
+2023-11-12T09:01:54.2377340Z Running rust-g version 3.0.0
+2023-11-12T09:01:54.2445249Z Loading config file config.txt...
+2023-11-12T09:01:54.2449139Z Loading config file maps.txt...
+2023-11-12T09:01:54.2703464Z Unable to locate admins backup file.
+2023-11-12T09:01:55.2792475Z Initialized Title Screen subsystem within 0 seconds!
+2023-11-12T09:01:55.2793681Z Initialized Server Tasks subsystem within 0 seconds!
+2023-11-12T09:01:55.2795047Z Initialized Input subsystem within 0 seconds!
+2023-11-12T09:01:55.2858203Z Initialized Profiler subsystem within 0 seconds!
+2023-11-12T09:01:55.2859689Z Initialized Database subsystem within 0 seconds!
+2023-11-12T09:01:55.2862218Z Initialized Blackbox subsystem within 0 seconds!
+2023-11-12T09:01:55.2938165Z Initialized Sounds subsystem within 0.01 seconds!
+2023-11-12T09:01:55.3061210Z Initialized Instruments subsystem within 0.01 seconds!
+2023-11-12T09:01:55.8390630Z Initialized Greyscale subsystem within 0.53 seconds!
+2023-11-12T09:01:55.8391416Z Initialized Vis contents overlays subsystem within 0 seconds!
+2023-11-12T09:01:55.8392841Z Initialized Security Level subsystem within 0 seconds!
+2023-11-12T09:01:55.8412303Z Initialized Station subsystem within 0 seconds!
+2023-11-12T09:01:55.8426733Z Initialized Quirks subsystem within 0 seconds!
+2023-11-12T09:01:55.8553936Z Initialized Reagents subsystem within 0.01 seconds!
+2023-11-12T09:01:55.8563912Z Initialized Events subsystem within 0 seconds!
+2023-11-12T09:01:55.8612984Z Initialized IDs and Access subsystem within 0 seconds!
+2023-11-12T09:01:55.8616522Z Initialized Jobs subsystem within 0 seconds!
+2023-11-12T09:01:55.8618600Z Initialized AI movement subsystem within 0 seconds!
+2023-11-12T09:01:55.8637284Z Initialized Ticker subsystem within 0 seconds!
+2023-11-12T09:01:55.8693586Z Initialized AI Controller Ticker subsystem within 0.01 seconds!
+2023-11-12T09:01:55.8697702Z Initialized AI Behavior Ticker subsystem within 0 seconds!
+2023-11-12T09:01:55.8821358Z Initialized Trading Card Game subsystem within 0.01 seconds!
+2023-11-12T09:01:55.8968123Z Loading Tramstation...
+2023-11-12T09:01:57.4366548Z Loaded Station in 1.6s!
+2023-11-12T09:01:58.7018385Z Loaded Lavaland in 1.3s!
+2023-11-12T09:01:59.6958478Z All ruins being loaded for map testing.
+2023-11-12T09:01:59.6960551Z Ruin loader finished with 0 left to spend.
+2023-11-12T09:01:59.6963383Z All ruins being loaded for map testing.
+2023-11-12T09:01:59.6966951Z Ruin loader finished with 0 left to spend.
+2023-11-12T09:01:59.8030218Z Cave Generator terrain generation finished in 0.1s!
+2023-11-12T09:01:59.8242156Z Cave Generator terrain generation finished in 0s!
+2023-11-12T09:02:00.0123579Z Cave Generator terrain population finished in 0.1s!
+2023-11-12T09:02:00.0174657Z Cave Generator terrain population finished in 0s!
+2023-11-12T09:02:00.4204586Z Initialized Mapping subsystem within 4.54 seconds!
+2023-11-12T09:02:18.7137331Z Initialized Early Assets subsystem within 18.29 seconds!
+2023-11-12T09:02:18.7960177Z Initialized Research subsystem within 0.08 seconds!
+2023-11-12T09:02:18.7964943Z Initialized Time Tracking subsystem within 0 seconds!
+2023-11-12T09:02:18.8516125Z Initialized Spatial Grid subsystem within 0.05 seconds!
+2023-11-12T09:02:18.8519915Z Initialized Economy subsystem within 0 seconds!
+2023-11-12T09:02:18.8529046Z Initialized Restaurant subsystem within 0 seconds!
+2023-11-12T09:02:24.3564078Z The BYOND hub reports that port 34125 is not reachable.
+2023-11-12T09:03:00.5242715Z ## NOTICE: morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!
+2023-11-12T09:03:08.8938364Z Initialized Atoms subsystem within 50.04 seconds!
+2023-11-12T09:03:08.9459509Z Initialized Language subsystem within 0.01 seconds!
+2023-11-12T09:03:09.0602930Z Initialized Machines subsystem within 0.11 seconds!
+2023-11-12T09:03:09.0612163Z Initialized Skills subsystem within 0 seconds!
+2023-11-12T09:03:09.0615253Z Initialized Queue Links subsystem within 0 seconds!
+2023-11-12T09:03:09.0619204Z Initialized Addiction subsystem within 0 seconds!
+2023-11-12T09:03:09.0639408Z Initialized Blackmarket subsystem within 0 seconds!
+2023-11-12T09:03:09.0647224Z Initialized Disease subsystem within 0 seconds!
+2023-11-12T09:03:09.0650704Z Initialized Fluid subsystem within 0 seconds!
+2023-11-12T09:03:09.0654199Z Initialized Smoke subsystem within 0 seconds!
+2023-11-12T09:03:09.0657541Z Initialized Foam subsystem within 0 seconds!
+2023-11-12T09:03:09.0660882Z Initialized Lag Switch subsystem within 0 seconds!
+2023-11-12T09:03:09.0888582Z Initialized Library Loading subsystem within 0.02 seconds!
+2023-11-12T09:03:09.2645071Z Initialized Lua Scripting subsystem within 0.18 seconds!
+2023-11-12T09:03:09.2735036Z Initialized Modular Computers subsystem within 0.01 seconds!
+2023-11-12T09:03:09.2737635Z Initialized Night Shift subsystem within 0 seconds!
+2023-11-12T09:03:09.2741231Z Initialized Stock Market subsystem within 0 seconds!
+2023-11-12T09:03:09.2743761Z Initialized Sun subsystem within 0 seconds!
+2023-11-12T09:03:09.2792256Z Initialized Traitor subsystem within 0 seconds!
+2023-11-12T09:03:09.2795417Z Initialized Tutorials subsystem within 0 seconds!
+2023-11-12T09:03:09.3133961Z Initialized Wardrobe subsystem within 0.03 seconds!
+2023-11-12T09:03:09.3136967Z Initialized Weather subsystem within 0 seconds!
+2023-11-12T09:03:09.3140470Z Initialized Wiremod Composite Templates subsystem within 0 seconds!
+2023-11-12T09:03:14.7053894Z Initialized Atmospherics subsystem within 5.39 seconds!
+2023-11-12T09:03:14.7127034Z Initialized Persistence subsystem within 0.01 seconds!
+2023-11-12T09:03:14.7131026Z Initialized Persistent Paintings subsystem within 0 seconds!
+2023-11-12T09:03:14.7134716Z Initialized Vote subsystem within 0 seconds!
+2023-11-12T09:03:25.6600909Z Initialized Assets subsystem within 10.95 seconds!
+2023-11-12T09:03:29.1318017Z Initialized Icon Smoothing subsystem within 3.42 seconds!
+2023-11-12T09:03:29.1329352Z Initialized XKeyScore subsystem within 0 seconds!
+2023-11-12T09:03:29.1349808Z Initialized PRISM subsystem within 0 seconds!
+2023-11-12T09:03:39.5066635Z Initialized Lighting subsystem within 10.37 seconds!
+2023-11-12T09:03:42.0097538Z Initialized Shuttle subsystem within 2.5 seconds!
+2023-11-12T09:03:42.0100528Z Initialized Pathfinder subsystem within 0 seconds!
+2023-11-12T09:03:42.0112119Z Initialized Ban Cache subsystem within 0 seconds!
+2023-11-12T09:03:42.0114877Z Initialized Init Profiler subsystem within 0 seconds!
+2023-11-12T09:03:42.0117470Z Initialized Chat subsystem within 0 seconds!
+2023-11-12T09:03:42.0119918Z Initializations complete within 106.8 seconds!
+2023-11-12T09:03:42.0699329Z Game start took 0s
+2023-11-12T09:03:53.5395990Z ##[group]/datum/unit_test/log_mapping
+2023-11-12T09:03:53.5399338Z [1;32mPASS[0m /datum/unit_test/log_mapping 0s
+2023-11-12T09:03:53.5400530Z ##[endgroup]
+2023-11-12T09:03:53.5529741Z ##[group]/datum/unit_test/abductor_baton_spell
+2023-11-12T09:03:53.6248315Z [1;32mPASS[0m /datum/unit_test/abductor_baton_spell 0.1s
+2023-11-12T09:03:53.6250017Z ##[endgroup]
+2023-11-12T09:03:53.7293652Z ##[group]/datum/unit_test/ablative_hood_hud
+2023-11-12T09:03:53.7538980Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud 0s
+2023-11-12T09:03:53.7540945Z ##[endgroup]
+2023-11-12T09:03:53.8177940Z ##[group]/datum/unit_test/ablative_hood_hud_with_helmet
+2023-11-12T09:03:53.8373528Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud_with_helmet 0s
+2023-11-12T09:03:53.8375040Z ##[endgroup]
+2023-11-12T09:03:53.9037089Z ##[group]/datum/unit_test/achievements
+2023-11-12T09:03:53.9146939Z [1;32mPASS[0m /datum/unit_test/achievements 0s
+2023-11-12T09:03:53.9148600Z ##[endgroup]
+2023-11-12T09:03:53.9709749Z ##[group]/datum/unit_test/anchored_mobs
+2023-11-12T09:03:53.9714871Z [1;32mPASS[0m /datum/unit_test/anchored_mobs 0s
+2023-11-12T09:03:53.9717149Z ##[endgroup]
+2023-11-12T09:03:54.0290915Z ##[group]/datum/unit_test/anonymous_themes
+2023-11-12T09:03:54.1282674Z [1;32mPASS[0m /datum/unit_test/anonymous_themes 0.1s
+2023-11-12T09:03:54.1284602Z ##[endgroup]
+2023-11-12T09:03:54.2369870Z ##[group]/datum/unit_test/revolution_conversion
+2023-11-12T09:03:54.2811074Z [1;32mPASS[0m /datum/unit_test/revolution_conversion 0s
+2023-11-12T09:03:54.2812989Z ##[endgroup]
+2023-11-12T09:03:54.3619950Z ##[group]/datum/unit_test/cult_conversion
+2023-11-12T09:03:54.4185381Z [1;32mPASS[0m /datum/unit_test/cult_conversion 0.1s
+2023-11-12T09:03:54.4187014Z ##[endgroup]
+2023-11-12T09:03:54.5109339Z ##[group]/datum/unit_test/antag_moodlets
+2023-11-12T09:03:54.5391588Z [1;32mPASS[0m /datum/unit_test/antag_moodlets 0s
+2023-11-12T09:03:54.5393248Z ##[endgroup]
+2023-11-12T09:03:54.6099817Z ##[group]/datum/unit_test/armor_verification
+2023-11-12T09:03:54.6105398Z [1;32mPASS[0m /datum/unit_test/armor_verification 0s
+2023-11-12T09:03:54.6107086Z ##[endgroup]
+2023-11-12T09:03:54.6711998Z ##[group]/datum/unit_test/autowiki
+2023-11-12T09:03:56.4795605Z [1;32mPASS[0m /datum/unit_test/autowiki 1.8s
+2023-11-12T09:03:56.4797118Z ##[endgroup]
+2023-11-12T09:03:56.5376207Z ##[group]/datum/unit_test/autowiki_include_template
+2023-11-12T09:03:56.5378371Z [1;32mPASS[0m /datum/unit_test/autowiki_include_template 0s
+2023-11-12T09:03:56.5380504Z ##[endgroup]
+2023-11-12T09:03:56.6003986Z ##[group]/datum/unit_test/barsigns_icon
+2023-11-12T09:03:56.6303581Z [1;32mPASS[0m /datum/unit_test/barsigns_icon 0.1s
+2023-11-12T09:03:56.6305267Z ##[endgroup]
+2023-11-12T09:03:56.6912219Z ##[group]/datum/unit_test/barsigns_name
+2023-11-12T09:03:56.6914950Z [1;32mPASS[0m /datum/unit_test/barsigns_name 0s
+2023-11-12T09:03:56.6917244Z ##[endgroup]
+2023-11-12T09:03:56.7530053Z ##[group]/datum/unit_test/baseturfs_unmodified_scrape
+2023-11-12T09:03:56.7541656Z [1;32mPASS[0m /datum/unit_test/baseturfs_unmodified_scrape 0s
+2023-11-12T09:03:56.7543322Z ##[endgroup]
+2023-11-12T09:03:56.8163460Z ##[group]/datum/unit_test/baseturfs_placed_on_top
+2023-11-12T09:03:56.8173471Z [1;32mPASS[0m /datum/unit_test/baseturfs_placed_on_top 0s
+2023-11-12T09:03:56.8175579Z ##[endgroup]
+2023-11-12T09:03:56.8789484Z ##[group]/datum/unit_test/baseturfs_placed_on_bottom
+2023-11-12T09:03:56.8806366Z [1;32mPASS[0m /datum/unit_test/baseturfs_placed_on_bottom 0s
+2023-11-12T09:03:56.8808190Z ##[endgroup]
+2023-11-12T09:03:56.9420497Z ##[group]/datum/unit_test/bespoke_id
+2023-11-12T09:03:56.9422999Z [1;32mPASS[0m /datum/unit_test/bespoke_id 0s
+2023-11-12T09:03:56.9425227Z ##[endgroup]
+2023-11-12T09:03:57.1727331Z ##[group]/datum/unit_test/binary_insert
+2023-11-12T09:03:57.1728436Z [1;32mPASS[0m /datum/unit_test/binary_insert 0s
+2023-11-12T09:03:57.1730597Z ##[endgroup]
+2023-11-12T09:03:57.2270246Z ##[group]/datum/unit_test/bitrunner_vdom_settings
+2023-11-12T09:03:57.2368664Z [1;32mPASS[0m /datum/unit_test/bitrunner_vdom_settings 0s
+2023-11-12T09:03:57.2370507Z ##[endgroup]
+2023-11-12T09:03:57.2860471Z ##[group]/datum/unit_test/blindness
+2023-11-12T09:03:57.3060031Z [1;32mPASS[0m /datum/unit_test/blindness 0.1s
+2023-11-12T09:03:57.3061453Z ##[endgroup]
+2023-11-12T09:03:57.3685247Z ##[group]/datum/unit_test/nearsightedness
+2023-11-12T09:03:57.3856666Z [1;32mPASS[0m /datum/unit_test/nearsightedness 0s
+2023-11-12T09:03:57.3857831Z ##[endgroup]
+2023-11-12T09:03:57.4094606Z ##[group]/datum/unit_test/eye_damage
+2023-11-12T09:03:57.4266705Z [1;32mPASS[0m /datum/unit_test/eye_damage 0s
+2023-11-12T09:03:57.4268768Z ##[endgroup]
+2023-11-12T09:03:57.4514012Z ##[group]/datum/unit_test/bloody_footprints
+2023-11-12T09:03:57.4771474Z [1;32mPASS[0m /datum/unit_test/bloody_footprints 0s
+2023-11-12T09:03:57.4773523Z ##[endgroup]
+2023-11-12T09:03:57.5095312Z ##[group]/datum/unit_test/breath/breath_sanity
+2023-11-12T09:03:57.5793797Z [1;32mPASS[0m /datum/unit_test/breath/breath_sanity 0s
+2023-11-12T09:03:57.5795766Z ##[endgroup]
+2023-11-12T09:03:57.6356372Z ##[group]/datum/unit_test/breath/breath_sanity_plasmamen
+2023-11-12T09:03:57.6920259Z [1;32mPASS[0m /datum/unit_test/breath/breath_sanity_plasmamen 0s
+2023-11-12T09:03:57.6922126Z ##[endgroup]
+2023-11-12T09:03:57.7478880Z ##[group]/datum/unit_test/breath/breath_sanity_ashwalker
+2023-11-12T09:03:57.7793279Z [1;32mPASS[0m /datum/unit_test/breath/breath_sanity_ashwalker 0s
+2023-11-12T09:03:57.7794768Z ##[endgroup]
+2023-11-12T09:03:57.8063286Z ##[group]/datum/unit_test/burning
+2023-11-12T09:03:57.8235820Z [1;32mPASS[0m /datum/unit_test/burning 0s
+2023-11-12T09:03:57.8237580Z ##[endgroup]
+2023-11-12T09:03:57.8463809Z ##[group]/datum/unit_test/cable_powernets
+2023-11-12T09:03:57.8467369Z [1;32mPASS[0m /datum/unit_test/cable_powernets 0s
+2023-11-12T09:03:57.8468842Z ##[endgroup]
+2023-11-12T09:03:57.8681387Z ##[group]/datum/unit_test/card_mismatch
+2023-11-12T09:03:57.8715332Z [1;32mPASS[0m /datum/unit_test/card_mismatch 0s
+2023-11-12T09:03:57.8717822Z ##[endgroup]
+2023-11-12T09:03:57.8839316Z ##[group]/datum/unit_test/cardboard_cutouts
+2023-11-12T09:03:57.8847499Z cardboard_cutouts_normal_cutout was put in data/screenshots_new
+2023-11-12T09:03:58.1374772Z cardboard_cutouts_nukie_cutout was put in data/screenshots_new
+2023-11-12T09:03:58.1378574Z cardboard_cutouts_nukie_cutout_pushed was put in data/screenshots_new
+2023-11-12T09:03:58.1547388Z cardboard_cutouts_xenomorph_cutout was put in data/screenshots_new
+2023-11-12T09:03:58.1550933Z [1;32mPASS[0m /datum/unit_test/cardboard_cutouts 0.3s
+2023-11-12T09:03:58.1553499Z ##[endgroup]
+2023-11-12T09:03:58.2402466Z ##[group]/datum/unit_test/chain_pull_through_space
+2023-11-12T09:03:58.2453035Z [1;32mPASS[0m /datum/unit_test/chain_pull_through_space 0s
+2023-11-12T09:03:58.2454853Z ##[endgroup]
+2023-11-12T09:03:58.3033483Z ##[group]/datum/unit_test/transformation_sting
+2023-11-12T09:03:59.7549687Z transformation_sting_appearances was put in data/screenshots_new
+2023-11-12T09:03:59.7551965Z [1;32mPASS[0m /datum/unit_test/transformation_sting 1.4s
+2023-11-12T09:03:59.7553272Z ##[endgroup]
+2023-11-12T09:03:59.7969350Z ##[group]/datum/unit_test/chat_filter_sanity
+2023-11-12T09:03:59.7976589Z [1;32mPASS[0m /datum/unit_test/chat_filter_sanity 0s
+2023-11-12T09:03:59.7978237Z ##[endgroup]
+2023-11-12T09:03:59.8105892Z ##[group]/datum/unit_test/circuit_component_category
+2023-11-12T09:03:59.8107746Z [1;32mPASS[0m /datum/unit_test/circuit_component_category 0s
+2023-11-12T09:03:59.8109947Z ##[endgroup]
+2023-11-12T09:03:59.8879728Z ##[group]/datum/unit_test/client_colours
+2023-11-12T09:03:59.8889068Z [1;32mPASS[0m /datum/unit_test/client_colours 0s
+2023-11-12T09:03:59.8891665Z ##[endgroup]
+2023-11-12T09:03:59.9525316Z ##[group]/datum/unit_test/closets
+2023-11-12T09:04:01.8031965Z [1;32mPASS[0m /datum/unit_test/closets 1.9s
+2023-11-12T09:04:01.8033340Z ##[endgroup]
+2023-11-12T09:04:02.6399153Z ##[group]/datum/unit_test/clothing_under_armor_subtype_check
+2023-11-12T09:04:02.6403381Z [1;32mPASS[0m /datum/unit_test/clothing_under_armor_subtype_check 0s
+2023-11-12T09:04:02.6405014Z ##[endgroup]
+2023-11-12T09:04:02.7020573Z ##[group]/datum/unit_test/harm_punch
+2023-11-12T09:04:02.7364226Z [1;32mPASS[0m /datum/unit_test/harm_punch 0s
+2023-11-12T09:04:02.7366615Z ##[endgroup]
+2023-11-12T09:04:02.7919290Z ##[group]/datum/unit_test/harm_melee
+2023-11-12T09:04:02.8266028Z [1;32mPASS[0m /datum/unit_test/harm_melee 0.1s
+2023-11-12T09:04:02.8268574Z ##[endgroup]
+2023-11-12T09:04:02.8738136Z ##[group]/datum/unit_test/harm_different_damage
+2023-11-12T09:04:02.9125671Z [1;32mPASS[0m /datum/unit_test/harm_different_damage 0.1s
+2023-11-12T09:04:02.9127697Z ##[endgroup]
+2023-11-12T09:04:02.9510991Z ##[group]/datum/unit_test/attack_chain
+2023-11-12T09:04:02.9859497Z [1;32mPASS[0m /datum/unit_test/attack_chain 0s
+2023-11-12T09:04:02.9861383Z ##[endgroup]
+2023-11-12T09:04:03.0312671Z ##[group]/datum/unit_test/disarm
+2023-11-12T09:04:03.0675162Z [1;32mPASS[0m /datum/unit_test/disarm 0s
+2023-11-12T09:04:03.0677029Z ##[endgroup]
+2023-11-12T09:04:03.1122424Z ##[group]/datum/unit_test/self_punch
+2023-11-12T09:04:03.1297149Z [1;32mPASS[0m /datum/unit_test/self_punch 0s
+2023-11-12T09:04:03.1299012Z ##[endgroup]
+2023-11-12T09:04:03.1617839Z ##[group]/datum/unit_test/handcuff_punch
+2023-11-12T09:04:03.1949728Z [1;32mPASS[0m /datum/unit_test/handcuff_punch 0s
+2023-11-12T09:04:03.1950695Z ##[endgroup]
+2023-11-12T09:04:03.2665996Z ##[group]/datum/unit_test/handcuff_bite
+2023-11-12T09:04:03.3310134Z [1;32mPASS[0m /datum/unit_test/handcuff_bite 0.1s
+2023-11-12T09:04:03.3311967Z ##[endgroup]
+2023-11-12T09:04:03.3720567Z ##[group]/datum/unit_test/component_duping
+2023-11-12T09:04:03.3725700Z [1;32mPASS[0m /datum/unit_test/component_duping 0s
+2023-11-12T09:04:03.3728116Z ##[endgroup]
+2023-11-12T09:04:03.3854948Z ##[group]/datum/unit_test/confusion_symptom
+2023-11-12T09:04:03.4020935Z [1;32mPASS[0m /datum/unit_test/confusion_symptom 0.1s
+2023-11-12T09:04:03.4023437Z ##[endgroup]
+2023-11-12T09:04:03.4660129Z ##[group]/datum/unit_test/connect_loc_basic
+2023-11-12T09:04:03.4667486Z [1;32mPASS[0m /datum/unit_test/connect_loc_basic 0s
+2023-11-12T09:04:03.4669665Z ##[endgroup]
+2023-11-12T09:04:03.5206421Z ##[group]/datum/unit_test/connect_loc_change_turf
+2023-11-12T09:04:03.5219191Z [1;32mPASS[0m /datum/unit_test/connect_loc_change_turf 0s
+2023-11-12T09:04:03.5221198Z ##[endgroup]
+2023-11-12T09:04:03.5413589Z ##[group]/datum/unit_test/connect_loc_multiple_on_turf
+2023-11-12T09:04:03.5422679Z [1;32mPASS[0m /datum/unit_test/connect_loc_multiple_on_turf 0s
+2023-11-12T09:04:03.5424576Z ##[endgroup]
+2023-11-12T09:04:03.5552785Z ##[group]/datum/unit_test/reagent_container_sanity
+2023-11-12T09:04:03.8101359Z [1;32mPASS[0m /datum/unit_test/reagent_container_sanity 0.3s
+2023-11-12T09:04:03.8102486Z ##[endgroup]
+2023-11-12T09:04:03.9680842Z ##[group]/datum/unit_test/crayon_naming
+2023-11-12T09:04:03.9683784Z [1;32mPASS[0m /datum/unit_test/crayon_naming 0s
+2023-11-12T09:04:03.9686430Z ##[endgroup]
+2023-11-12T09:04:03.9815420Z ##[group]/datum/unit_test/dcs_get_id_from_arguments
+2023-11-12T09:04:03.9822614Z [1;32mPASS[0m /datum/unit_test/dcs_get_id_from_arguments 0s
+2023-11-12T09:04:03.9825219Z ##[endgroup]
+2023-11-12T09:04:03.9952914Z ##[group]/datum/unit_test/designs
+2023-11-12T09:04:04.0032294Z [1;32mPASS[0m /datum/unit_test/designs 0.1s
+2023-11-12T09:04:04.0034986Z ##[endgroup]
+2023-11-12T09:04:04.0184498Z ##[group]/datum/unit_test/dismemberment
+2023-11-12T09:04:04.0687805Z [1;32mPASS[0m /datum/unit_test/dismemberment 0s
+2023-11-12T09:04:04.0690374Z ##[endgroup]
+2023-11-12T09:04:04.1062552Z ##[group]/datum/unit_test/door_access_check
+2023-11-12T09:04:04.1315486Z [1;32mPASS[0m /datum/unit_test/door_access_check 0s
+2023-11-12T09:04:04.1318637Z ##[endgroup]
+2023-11-12T09:04:04.1659906Z ##[group]/datum/unit_test/contents_barfer
+2023-11-12T09:04:04.1881762Z [1;32mPASS[0m /datum/unit_test/contents_barfer 0s
+2023-11-12T09:04:04.1884275Z ##[endgroup]
+2023-11-12T09:04:04.2328534Z ##[group]/datum/unit_test/space_dragon_expiration
+2023-11-12T09:04:04.2672064Z [1;32mPASS[0m /datum/unit_test/space_dragon_expiration 0s
+2023-11-12T09:04:04.2674522Z ##[endgroup]
+2023-11-12T09:04:04.3282341Z ##[group]/datum/unit_test/glass_style_icons
+2023-11-12T09:04:04.3517947Z [1;32mPASS[0m /datum/unit_test/glass_style_icons 0s
+2023-11-12T09:04:04.3520368Z ##[endgroup]
+2023-11-12T09:04:04.3761901Z ##[group]/datum/unit_test/glass_style_functionality
+2023-11-12T09:04:04.3773186Z [1;32mPASS[0m /datum/unit_test/glass_style_functionality 0s
+2023-11-12T09:04:04.3775791Z ##[endgroup]
+2023-11-12T09:04:04.3908269Z ##[group]/datum/unit_test/drink_icons
+2023-11-12T09:04:04.4155215Z [1;32mPASS[0m /datum/unit_test/drink_icons 0.1s
+2023-11-12T09:04:04.4157609Z ##[endgroup]
+2023-11-12T09:04:04.4303228Z ##[group]/datum/unit_test/dummy_spawn_species
+2023-11-12T09:04:05.4828810Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_species 1s
+2023-11-12T09:04:05.4829704Z ##[endgroup]
+2023-11-12T09:04:05.5166735Z ##[group]/datum/unit_test/dummy_spawn_outfit
+2023-11-12T09:04:05.5400845Z Job type /datum/job/ai could not be retrieved from SSjob
+2023-11-12T09:04:06.0232636Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_outfit 0.5s
+2023-11-12T09:04:06.0234589Z ##[endgroup]
+2023-11-12T09:04:06.0505202Z ##[group]/datum/unit_test/dynamic_roundstart_ruleset_sanity
+2023-11-12T09:04:06.0508804Z [1;32mPASS[0m /datum/unit_test/dynamic_roundstart_ruleset_sanity 0s
+2023-11-12T09:04:06.0511050Z ##[endgroup]
+2023-11-12T09:04:06.0637233Z ##[group]/datum/unit_test/dynamic_unique_antag_flags
+2023-11-12T09:04:06.0640294Z [1;32mPASS[0m /datum/unit_test/dynamic_unique_antag_flags 0s
+2023-11-12T09:04:06.0642513Z ##[endgroup]
+2023-11-12T09:04:06.0770713Z ##[group]/datum/unit_test/egg_glands
+2023-11-12T09:04:06.1407083Z [1;32mPASS[0m /datum/unit_test/egg_glands 0.1s
+2023-11-12T09:04:06.1408405Z ##[endgroup]
+2023-11-12T09:04:06.1628261Z ##[group]/datum/unit_test/emoting
+2023-11-12T09:04:06.1818671Z [1;32mPASS[0m /datum/unit_test/emoting 0s
+2023-11-12T09:04:06.1821362Z ##[endgroup]
+2023-11-12T09:04:06.2077157Z ##[group]/datum/unit_test/ensure_subtree_operational_datum
+2023-11-12T09:04:08.1731821Z [1;32mPASS[0m /datum/unit_test/ensure_subtree_operational_datum 1.9s
+2023-11-12T09:04:08.1733285Z ##[endgroup]
+2023-11-12T09:04:08.7539706Z ##[group]/datum/unit_test/explosion_action
+2023-11-12T09:04:08.8465799Z [1;32mPASS[0m /datum/unit_test/explosion_action 0.1s
+2023-11-12T09:04:08.8468184Z ##[endgroup]
+2023-11-12T09:04:08.9010946Z ##[group]/datum/unit_test/fish_size_weight
+2023-11-12T09:04:08.9019514Z [1;32mPASS[0m /datum/unit_test/fish_size_weight 0s
+2023-11-12T09:04:08.9022220Z ##[endgroup]
+2023-11-12T09:04:08.9154882Z ##[group]/datum/unit_test/fish_breeding
+2023-11-12T09:04:08.9227664Z [1;32mPASS[0m /datum/unit_test/fish_breeding 0s
+2023-11-12T09:04:08.9230704Z ##[endgroup]
+2023-11-12T09:04:08.9389958Z ##[group]/datum/unit_test/fish_evolution
+2023-11-12T09:04:08.9418165Z [1;32mPASS[0m /datum/unit_test/fish_evolution 0s
+2023-11-12T09:04:08.9421366Z ##[endgroup]
+2023-11-12T09:04:08.9631338Z ##[group]/datum/unit_test/fish_scanning
+2023-11-12T09:04:08.9635076Z [1;32mPASS[0m /datum/unit_test/fish_scanning 0s
+2023-11-12T09:04:08.9638063Z ##[endgroup]
+2023-11-12T09:04:08.9772162Z ##[group]/datum/unit_test/font_awesome_icons
+2023-11-12T09:04:08.9779113Z CSS Actual: 96991
+2023-11-12T09:04:09.3976724Z [1;32mPASS[0m /datum/unit_test/font_awesome_icons 0.4s
+2023-11-12T09:04:09.3978084Z ##[endgroup]
+2023-11-12T09:04:09.4388919Z ##[group]/datum/unit_test/food_edibility_check
+2023-11-12T09:04:11.4659822Z [1;32mPASS[0m /datum/unit_test/food_edibility_check 2s
+2023-11-12T09:04:11.4661512Z ##[endgroup]
+2023-11-12T09:04:11.4957968Z ##[group]/datum/unit_test/full_heal_heals_organs
+2023-11-12T09:04:11.5147883Z [1;32mPASS[0m /datum/unit_test/full_heal_heals_organs 0.1s
+2023-11-12T09:04:11.5149360Z ##[endgroup]
+2023-11-12T09:04:11.5413116Z ##[group]/datum/unit_test/full_heal_regenerates_organs
+2023-11-12T09:04:11.5651258Z [1;32mPASS[0m /datum/unit_test/full_heal_regenerates_organs 0s
+2023-11-12T09:04:11.5653018Z ##[endgroup]
+2023-11-12T09:04:11.6325061Z ##[group]/datum/unit_test/full_heal_damage_types
+2023-11-12T09:04:11.6518216Z [1;32mPASS[0m /datum/unit_test/full_heal_damage_types 0s
+2023-11-12T09:04:11.6519698Z ##[endgroup]
+2023-11-12T09:04:11.7209709Z ##[group]/datum/unit_test/atmospheric_gas_transfer
+2023-11-12T09:04:11.7227226Z [1;32mPASS[0m /datum/unit_test/atmospheric_gas_transfer 0s
+2023-11-12T09:04:11.7228891Z ##[endgroup]
+2023-11-12T09:04:11.7822095Z ##[group]/datum/unit_test/get_turf_pixel
+2023-11-12T09:04:11.7849880Z [1;32mPASS[0m /datum/unit_test/get_turf_pixel 0s
+2023-11-12T09:04:11.7851756Z ##[endgroup]
+2023-11-12T09:04:11.8495917Z ##[group]/datum/unit_test/geyser
+2023-11-12T09:04:11.8516781Z [1;32mPASS[0m /datum/unit_test/geyser 0s
+2023-11-12T09:04:11.8518776Z ##[endgroup]
+2023-11-12T09:04:11.9115770Z ##[group]/datum/unit_test/greyscale_item_icon_states
+2023-11-12T09:04:11.9172841Z [1;32mPASS[0m /datum/unit_test/greyscale_item_icon_states 0s
+2023-11-12T09:04:11.9174524Z ##[endgroup]
+2023-11-12T09:04:11.9770664Z ##[group]/datum/unit_test/greyscale_color_count
+2023-11-12T09:04:11.9908294Z [1;32mPASS[0m /datum/unit_test/greyscale_color_count 0s
+2023-11-12T09:04:11.9910694Z ##[endgroup]
+2023-11-12T09:04:12.0513128Z ##[group]/datum/unit_test/hallucination_icons
+2023-11-12T09:04:12.2294786Z [1;32mPASS[0m /datum/unit_test/hallucination_icons 0.2s
+2023-11-12T09:04:12.2296061Z ##[endgroup]
+2023-11-12T09:04:12.2752905Z ##[group]/datum/unit_test/heretic_knowledge
+2023-11-12T09:04:12.2797900Z [1;32mPASS[0m /datum/unit_test/heretic_knowledge 0s
+2023-11-12T09:04:12.2800226Z ##[endgroup]
+2023-11-12T09:04:12.3526741Z ##[group]/datum/unit_test/heretic_main_paths
+2023-11-12T09:04:12.3530666Z [1;32mPASS[0m /datum/unit_test/heretic_main_paths 0s
+2023-11-12T09:04:12.3532858Z ##[endgroup]
+2023-11-12T09:04:12.3985035Z ##[group]/datum/unit_test/heretic_rituals
+2023-11-12T09:04:12.4878733Z [1;32mPASS[0m /datum/unit_test/heretic_rituals 0.1s
+2023-11-12T09:04:12.4880607Z ##[endgroup]
+2023-11-12T09:04:12.5120786Z ##[group]/datum/unit_test/high_five
+2023-11-12T09:04:12.5591361Z [1;32mPASS[0m /datum/unit_test/high_five 0s
+2023-11-12T09:04:12.5593593Z ##[endgroup]
+2023-11-12T09:04:12.6154998Z ##[group]/datum/unit_test/high_five_too_slow
+2023-11-12T09:04:12.6462178Z [1;32mPASS[0m /datum/unit_test/high_five_too_slow 0s
+2023-11-12T09:04:12.6464631Z ##[endgroup]
+2023-11-12T09:04:12.6825675Z ##[group]/datum/unit_test/high_five_walk_away
+2023-11-12T09:04:12.7302468Z [1;32mPASS[0m /datum/unit_test/high_five_walk_away 0.1s
+2023-11-12T09:04:12.7304078Z ##[endgroup]
+2023-11-12T09:04:12.7849321Z ##[group]/datum/unit_test/hanukkah_2123
+2023-11-12T09:04:12.7857129Z [1;32mPASS[0m /datum/unit_test/hanukkah_2123 0s
+2023-11-12T09:04:12.7859467Z ##[endgroup]
+2023-11-12T09:04:12.7985283Z ##[group]/datum/unit_test/ramadan_2165
+2023-11-12T09:04:12.7988232Z [1;32mPASS[0m /datum/unit_test/ramadan_2165 0s
+2023-11-12T09:04:12.7990308Z ##[endgroup]
+2023-11-12T09:04:12.8115461Z ##[group]/datum/unit_test/thanksgiving_2020
+2023-11-12T09:04:12.8118309Z [1;32mPASS[0m /datum/unit_test/thanksgiving_2020 0s
+2023-11-12T09:04:12.8120732Z ##[endgroup]
+2023-11-12T09:04:12.8276159Z ##[group]/datum/unit_test/mother_3683
+2023-11-12T09:04:12.8278795Z [1;32mPASS[0m /datum/unit_test/mother_3683 0s
+2023-11-12T09:04:12.8281149Z ##[endgroup]
+2023-11-12T09:04:12.8402992Z ##[group]/datum/unit_test/hello_2020
+2023-11-12T09:04:12.8405520Z [1;32mPASS[0m /datum/unit_test/hello_2020 0s
+2023-11-12T09:04:12.8408004Z ##[endgroup]
+2023-11-12T09:04:12.8529607Z ##[group]/datum/unit_test/new_year_1983
+2023-11-12T09:04:12.8531956Z [1;32mPASS[0m /datum/unit_test/new_year_1983 0s
+2023-11-12T09:04:12.8534286Z ##[endgroup]
+2023-11-12T09:04:12.8655830Z ##[group]/datum/unit_test/moth_week_2020
+2023-11-12T09:04:12.8735184Z [1;32mPASS[0m /datum/unit_test/moth_week_2020 0s
+2023-11-12T09:04:12.8737646Z ##[endgroup]
+2023-11-12T09:04:12.8963722Z ##[group]/datum/unit_test/hulk_attack
+2023-11-12T09:04:12.9298282Z [1;32mPASS[0m /datum/unit_test/hulk_attack 0.1s
+2023-11-12T09:04:12.9300378Z ##[endgroup]
+2023-11-12T09:04:12.9631065Z ##[group]/datum/unit_test/hulk_north_star
+2023-11-12T09:04:12.9971964Z [1;32mPASS[0m /datum/unit_test/hulk_north_star 0s
+2023-11-12T09:04:12.9974198Z ##[endgroup]
+2023-11-12T09:04:13.0684879Z ##[group]/datum/unit_test/human_through_recycler
+2023-11-12T09:04:13.1042839Z [1;32mPASS[0m /datum/unit_test/human_through_recycler 0.1s
+2023-11-12T09:04:13.1045346Z ##[endgroup]
+2023-11-12T09:04:13.1302366Z ##[group]/datum/unit_test/hunger_curse
+2023-11-12T09:04:13.1487751Z [1;32mPASS[0m /datum/unit_test/hunger_curse 0s
+2023-11-12T09:04:13.1490362Z ##[endgroup]
+2023-11-12T09:04:13.1724484Z ##[group]/datum/unit_test/hydroponics_extractor_storage
+2023-11-12T09:04:13.2045321Z [1;32mPASS[0m /datum/unit_test/hydroponics_extractor_storage 0.1s
+2023-11-12T09:04:13.2047744Z ##[endgroup]
+2023-11-12T09:04:13.2424994Z ##[group]/datum/unit_test/hydroponics_harvest
+2023-11-12T09:04:13.3172098Z [1;32mPASS[0m /datum/unit_test/hydroponics_harvest 0.1s
+2023-11-12T09:04:13.3173538Z ##[endgroup]
+2023-11-12T09:04:13.3896863Z ##[group]/datum/unit_test/hydroponics_self_mutation
+2023-11-12T09:04:13.4546321Z [1;32mPASS[0m /datum/unit_test/hydroponics_self_mutation 0.1s
+2023-11-12T09:04:13.4548349Z ##[endgroup]
+2023-11-12T09:04:13.5127280Z ##[group]/datum/unit_test/hydroponics_validate_genes
+2023-11-12T09:04:13.5761114Z [1;32mPASS[0m /datum/unit_test/hydroponics_validate_genes 0s
+2023-11-12T09:04:13.5765353Z ##[endgroup]
+2023-11-12T09:04:13.5897676Z ##[group]/datum/unit_test/defined_inhand_icon_states
+2023-11-12T09:04:14.5257265Z Notice - Possible inhand icon matches found. It is best to be explicit with inhand sprite values.
+2023-11-12T09:04:14.5260490Z /obj/item/clothing/head/costume/lizard does not have an inhand_icon_state value - Possible matching sprites for "lizard" found in: 'icons/mob/inhands/animal_item_lefthand.dmi' & 'icons/mob/inhands/animal_item_righthand.dmi'
+2023-11-12T09:04:14.5265334Z /obj/item/clothing/head/costume/paper_hat does not have an inhand_icon_state value - Possible matching sprites for "paper" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2023-11-12T09:04:14.5269130Z /obj/item/clothing/head/collectable/paper does not have an inhand_icon_state value - Possible matching sprites for "paper" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2023-11-12T09:04:14.5272911Z /obj/item/clothing/head/cowboy does not have an inhand_icon_state value - Possible matching sprites for "cowboy_hat_brown" found in: 'icons/mob/inhands/clothing/hats_lefthand.dmi' & 'icons/mob/inhands/clothing/hats_righthand.dmi'
+2023-11-12T09:04:14.5276899Z /obj/item/clothing/head/chaplain/habit_veil does not have an inhand_icon_state value - Possible matching sprites for "nun_hood_alt" found in: 'icons/mob/inhands/clothing/hats_lefthand.dmi' & 'icons/mob/inhands/clothing/hats_righthand.dmi'
+2023-11-12T09:04:14.5280655Z /obj/item/clothing/mask/animal/small/fox does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2023-11-12T09:04:14.5284605Z /obj/item/clothing/mask/animal/small/fox/cursed does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2023-11-12T09:04:14.5288384Z /obj/item/clothing/accessory/pride does not have an inhand_icon_state value - Possible matching sprites for "pride" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2023-11-12T09:04:14.5292328Z /obj/item/clothing/suit/apron/overalls does not have an inhand_icon_state value - Possible matching sprites for "overalls" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2023-11-12T09:04:14.5296324Z /obj/item/clothing/suit/caution does not have an inhand_icon_state value - Possible matching sprites for "caution" found in: 'icons/mob/inhands/equipment/custodial_righthand.dmi' & 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
+2023-11-12T09:04:14.5300339Z /obj/item/clothing/suit/chaplainsuit/habit does not have an inhand_icon_state value - Possible matching sprites for "habit" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2023-11-12T09:04:14.5305034Z /obj/item/clothing/glasses/hud/health/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudmed" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2023-11-12T09:04:14.5309450Z /obj/item/clothing/glasses/hud/security/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudsec" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2023-11-12T09:04:14.5313568Z /obj/item/mecha_parts/mecha_equipment/generator does not have an inhand_icon_state value - Possible matching sprites for "tesla" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2023-11-12T09:04:14.5317158Z /obj/item/food/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5320529Z /obj/item/food/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5324489Z /obj/item/storage/bag/ore does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_righthand.dmi' & 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
+2023-11-12T09:04:14.5328382Z /obj/item/storage/bag/ore/cyborg does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_righthand.dmi' & 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
+2023-11-12T09:04:14.5332211Z /obj/item/melee/energy/blade does not have an inhand_icon_state value - Possible matching sprites for "blade" found in: 'icons/mob/inhands/weapons/swords_righthand.dmi' & 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+2023-11-12T09:04:14.5335835Z /obj/item/fireaxe does not have an inhand_icon_state value - Possible matching sprites for "fireaxe0" found in: 'icons/mob/inhands/weapons/axes_lefthand.dmi' & 'icons/mob/inhands/weapons/axes_righthand.dmi'
+2023-11-12T09:04:14.5339617Z /obj/item/fireaxe/boneaxe does not have an inhand_icon_state value - Possible matching sprites for "bone_axe0" found in: 'icons/mob/inhands/weapons/axes_lefthand.dmi' & 'icons/mob/inhands/weapons/axes_righthand.dmi'
+2023-11-12T09:04:14.5343300Z /obj/item/fireaxe/metal_h2_axe does not have an inhand_icon_state value - Possible matching sprites for "metalh2_axe0" found in: 'icons/mob/inhands/weapons/axes_lefthand.dmi' & 'icons/mob/inhands/weapons/axes_righthand.dmi'
+2023-11-12T09:04:14.5347106Z /obj/item/crowbar/mechremoval does not have an inhand_icon_state value - Possible matching sprites for "mechremoval0" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5350901Z /obj/item/mod/module/medbeam does not have an inhand_icon_state value - Possible matching sprites for "chronogun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2023-11-12T09:04:14.5354609Z /obj/item/mod/module/welding does not have an inhand_icon_state value - Possible matching sprites for "welding" found in: 'icons/mob/inhands/clothing/masks_righthand.dmi' & 'icons/mob/inhands/clothing/masks_lefthand.dmi'
+2023-11-12T09:04:14.5358402Z /obj/item/mod/module/mister does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2023-11-12T09:04:14.5362405Z /obj/item/mod/module/mister/atmos does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2023-11-12T09:04:14.5366326Z /obj/item/mod/module/jetpack does not have an inhand_icon_state value - Possible matching sprites for "jetpack" found in: 'icons/mob/inhands/equipment/jetpacks_righthand.dmi' & 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi'
+2023-11-12T09:04:14.5370513Z /obj/item/mod/module/flashlight does not have an inhand_icon_state value - Possible matching sprites for "flashlight" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5374077Z /obj/item/mod/module/stamp does not have an inhand_icon_state value - Possible matching sprites for "stamp" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2023-11-12T09:04:14.5377613Z /obj/item/mod/module/holster does not have an inhand_icon_state value - Possible matching sprites for "holster" found in: 'icons/mob/inhands/equipment/belt_lefthand.dmi' & 'icons/mob/inhands/equipment/belt_righthand.dmi'
+2023-11-12T09:04:14.5381427Z /obj/item/mod/module/megaphone does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_righthand.dmi' & 'icons/mob/inhands/items/megaphone_lefthand.dmi'
+2023-11-12T09:04:14.5386246Z /obj/item/mod/module/drill does not have an inhand_icon_state value - Possible matching sprites for "drill" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5390973Z /obj/item/mod/module/tem does not have an inhand_icon_state value - Possible matching sprites for "chronogun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2023-11-12T09:04:14.5394601Z /obj/item/reagent_containers/cup/soda_cans does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5396934Z /obj/item/reagent_containers/cup/soda_cans/random does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5399759Z /obj/item/reagent_containers/cup/soda_cans/cola does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5402114Z /obj/item/reagent_containers/cup/soda_cans/tonic does not have an inhand_icon_state value - Possible matching sprites for "tonic" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5404446Z /obj/item/reagent_containers/cup/soda_cans/sodawater does not have an inhand_icon_state value - Possible matching sprites for "sodawater" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5406584Z /obj/item/reagent_containers/cup/soda_cans/lemon_lime does not have an inhand_icon_state value - Possible matching sprites for "lemon-lime" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5408970Z /obj/item/reagent_containers/cup/soda_cans/space_up does not have an inhand_icon_state value - Possible matching sprites for "space-up" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5411153Z /obj/item/reagent_containers/cup/soda_cans/starkist does not have an inhand_icon_state value - Possible matching sprites for "starkist" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5413351Z /obj/item/reagent_containers/cup/soda_cans/space_mountain_wind does not have an inhand_icon_state value - Possible matching sprites for "space_mountain_wind" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5415775Z /obj/item/reagent_containers/cup/soda_cans/thirteenloko does not have an inhand_icon_state value - Possible matching sprites for "thirteen_loko" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5417918Z /obj/item/reagent_containers/cup/soda_cans/dr_gibb does not have an inhand_icon_state value - Possible matching sprites for "dr_gibb" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5420047Z /obj/item/reagent_containers/cup/soda_cans/pwr_game does not have an inhand_icon_state value - Possible matching sprites for "purple_can" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5422176Z /obj/item/reagent_containers/cup/soda_cans/wellcheers does not have an inhand_icon_state value - Possible matching sprites for "wellcheers" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5424331Z /obj/item/reagent_containers/cup/soda_cans/volt_energy does not have an inhand_icon_state value - Possible matching sprites for "volt_energy" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5426605Z /obj/item/reagent_containers/cup/soda_cans/melon_soda does not have an inhand_icon_state value - Possible matching sprites for "melon_soda" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5428700Z /obj/item/reagent_containers/cup/soda_cans/beer does not have an inhand_icon_state value - Possible matching sprites for "space_beer" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5430842Z /obj/item/reagent_containers/cup/soda_cans/beer/rice does not have an inhand_icon_state value - Possible matching sprites for "ebisu" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5432971Z /obj/item/reagent_containers/cup/glass/coffee does not have an inhand_icon_state value - Possible matching sprites for "coffee" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5435080Z /obj/item/reagent_containers/chem_pack does not have an inhand_icon_state value - Possible matching sprites for "chempack" found in: 'icons/mob/inhands/equipment/backpack_righthand.dmi' & 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
+2023-11-12T09:04:14.5437143Z /obj/item/toy/talking/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2023-11-12T09:04:14.5439342Z /obj/item/toy/figure/chef does not have an inhand_icon_state value - Possible matching sprites for "chef" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2023-11-12T09:04:14.5441474Z /obj/item/toy/figure/clown does not have an inhand_icon_state value - Possible matching sprites for "clown" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2023-11-12T09:04:14.5443437Z /obj/item/toy/figure/janitor does not have an inhand_icon_state value - Possible matching sprites for "janitor" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2023-11-12T09:04:14.5445333Z /obj/item/toy/cards/cardhand does not have an inhand_icon_state value - Possible matching sprites for "nothing" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2023-11-12T09:04:14.5447188Z /obj/item/book/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2023-11-12T09:04:14.5449271Z /obj/item/pipe_dispenser does not have an inhand_icon_state value - Possible matching sprites for "rpd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5451184Z /obj/item/sbeacondrop does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5453081Z /obj/item/sbeacondrop/bomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5454974Z /obj/item/sbeacondrop/emp does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5456921Z /obj/item/sbeacondrop/powersink does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5459034Z /obj/item/sbeacondrop/clownbomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5460981Z /obj/item/sbeacondrop/horse does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5463020Z /obj/item/stack/medical/bruise_pack does not have an inhand_icon_state value - Possible matching sprites for "brutepack" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2023-11-12T09:04:14.5465143Z /obj/item/stack/medical/ointment does not have an inhand_icon_state value - Possible matching sprites for "ointment" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2023-11-12T09:04:14.5467227Z /obj/item/stack/tile/fairygrass does not have an inhand_icon_state value - Possible matching sprites for "tile_fairygrass" found in: 'icons/mob/inhands/items/tiles_righthand.dmi' & 'icons/mob/inhands/items/tiles_lefthand.dmi'
+2023-11-12T09:04:14.5469256Z /obj/item/organ/internal/heart/gland/blood does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5471272Z /obj/item/organ/internal/heart/gland/egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5473406Z /obj/item/organ/internal/heart/gland/quantum does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_lefthand.dmi' & 'icons/mob/inhands/equipment/security_righthand.dmi'
+2023-11-12T09:04:14.5475638Z /obj/item/organ/internal/heart/gland/trauma does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_lefthand.dmi' & 'icons/mob/inhands/equipment/security_righthand.dmi'
+2023-11-12T09:04:14.5477679Z /obj/item/minespawner does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5479615Z /obj/item/boxcutter does not have an inhand_icon_state value - Possible matching sprites for "boxcutter" found in: 'icons/mob/inhands/equipment/boxcutter_righthand.dmi' & 'icons/mob/inhands/equipment/boxcutter_lefthand.dmi'
+2023-11-12T09:04:14.5482091Z /obj/item/boxcutter/extended does not have an inhand_icon_state value - Possible matching sprites for "boxcutter" found in: 'icons/mob/inhands/equipment/boxcutter_righthand.dmi' & 'icons/mob/inhands/equipment/boxcutter_lefthand.dmi'
+2023-11-12T09:04:14.5484159Z /obj/item/pushbroom does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_righthand.dmi' & 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
+2023-11-12T09:04:14.5486168Z /obj/item/pushbroom/cyborg does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_righthand.dmi' & 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
+2023-11-12T09:04:14.5488176Z /obj/item/chainsaw does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
+2023-11-12T09:04:14.5490187Z /obj/item/chainsaw/doomslayer does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
+2023-11-12T09:04:14.5492367Z /obj/item/kitchen/fork does not have an inhand_icon_state value - Possible matching sprites for "fork" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2023-11-12T09:04:14.5494352Z /obj/item/kitchen/spoon does not have an inhand_icon_state value - Possible matching sprites for "spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2023-11-12T09:04:14.5496447Z /obj/item/kitchen/spoon/plastic does not have an inhand_icon_state value - Possible matching sprites for "plastic_spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2023-11-12T09:04:14.5498538Z /obj/item/pitchfork does not have an inhand_icon_state value - Possible matching sprites for "pitchfork0" found in: 'icons/mob/inhands/weapons/polearms_lefthand.dmi' & 'icons/mob/inhands/weapons/polearms_righthand.dmi'
+2023-11-12T09:04:14.5500478Z /obj/item/godstaff does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2023-11-12T09:04:14.5502414Z /obj/item/godstaff/red does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2023-11-12T09:04:14.5504543Z /obj/item/godstaff/blue does not have an inhand_icon_state value - Possible matching sprites for "godstaff-blue" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2023-11-12T09:04:14.5506586Z /obj/item/singularityhammer does not have an inhand_icon_state value - Possible matching sprites for "singularity_hammer0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2023-11-12T09:04:14.5508606Z /obj/item/mjollnir does not have an inhand_icon_state value - Possible matching sprites for "mjollnir0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2023-11-12T09:04:14.5510522Z /obj/item/spear does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_lefthand.dmi' & 'icons/mob/inhands/weapons/polearms_righthand.dmi'
+2023-11-12T09:04:14.5512535Z /obj/item/spear/explosive does not have an inhand_icon_state value - Possible matching sprites for "spearbomb0" found in: 'icons/mob/inhands/weapons/polearms_lefthand.dmi' & 'icons/mob/inhands/weapons/polearms_righthand.dmi'
+2023-11-12T09:04:14.5514725Z /obj/item/spear/grey_tide does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_lefthand.dmi' & 'icons/mob/inhands/weapons/polearms_righthand.dmi'
+2023-11-12T09:04:14.5516757Z /obj/item/spear/bonespear does not have an inhand_icon_state value - Possible matching sprites for "bone_spear0" found in: 'icons/mob/inhands/weapons/polearms_lefthand.dmi' & 'icons/mob/inhands/weapons/polearms_righthand.dmi'
+2023-11-12T09:04:14.5518804Z /obj/item/spear/bamboospear does not have an inhand_icon_state value - Possible matching sprites for "bamboo_spear0" found in: 'icons/mob/inhands/weapons/polearms_lefthand.dmi' & 'icons/mob/inhands/weapons/polearms_righthand.dmi'
+2023-11-12T09:04:14.5520748Z /obj/item/sticker/robot does not have an inhand_icon_state value - Possible matching sprites for "tile" found in: 'icons/mob/inhands/items/tiles_righthand.dmi' & 'icons/mob/inhands/items/tiles_lefthand.dmi'
+2023-11-12T09:04:14.5522828Z /obj/item/trash/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5524800Z /obj/item/trash/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5526598Z /obj/item/trash/can does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2023-11-12T09:04:14.5528508Z /obj/item/highfrequencyblade does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_righthand.dmi' & 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+2023-11-12T09:04:14.5530557Z /obj/item/highfrequencyblade/wizard does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_righthand.dmi' & 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+2023-11-12T09:04:14.5532581Z /obj/item/construction/rcd does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5534544Z /obj/item/construction/rcd/borg does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5536539Z /obj/item/construction/rcd/loaded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5538610Z /obj/item/construction/rcd/loaded/upgraded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5540806Z /obj/item/construction/rcd/ce does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5542811Z /obj/item/construction/rcd/internal does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5544792Z /obj/item/construction/rld does not have an inhand_icon_state value - Possible matching sprites for "rld" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5546898Z /obj/item/construction/rld/mini does not have an inhand_icon_state value - Possible matching sprites for "rld" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5548856Z /obj/item/construction/rtd does not have an inhand_icon_state value - Possible matching sprites for "rtd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5551347Z /obj/item/construction/rtd/loaded does not have an inhand_icon_state value - Possible matching sprites for "rtd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5553359Z /obj/item/construction/rtd/admin does not have an inhand_icon_state value - Possible matching sprites for "rtd" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5555307Z /obj/item/rcd_ammo does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5557368Z /obj/item/rcd_ammo/large does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_lefthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi'
+2023-11-12T09:04:14.5559329Z /obj/item/borg/sight/meson does not have an inhand_icon_state value - Possible matching sprites for "meson" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2023-11-12T09:04:14.5561639Z /obj/item/harmalarm does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_righthand.dmi' & 'icons/mob/inhands/items/megaphone_lefthand.dmi'
+2023-11-12T09:04:14.5564165Z /obj/item/abductor_machine_beacon does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5566370Z /obj/item/abductor_machine_beacon/chem_dispenser does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5568963Z /obj/item/grown/carbon_rose does not have an inhand_icon_state value - Possible matching sprites for "carbonrose" found in: 'icons/mob/inhands/weapons/plants_lefthand.dmi' & 'icons/mob/inhands/weapons/plants_righthand.dmi'
+2023-11-12T09:04:14.5571469Z /obj/item/paint_palette does not have an inhand_icon_state value - Possible matching sprites for "palette" found in: 'icons/mob/inhands/equipment/palette_lefthand.dmi' & 'icons/mob/inhands/equipment/palette_righthand.dmi'
+2023-11-12T09:04:14.5573366Z /obj/item/surprise_egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_righthand.dmi' & 'icons/mob/inhands/items/food_lefthand.dmi'
+2023-11-12T09:04:14.5575235Z /obj/item/experi_scanner does not have an inhand_icon_state value - Possible matching sprites for "experiscanner" found in: 'icons/mob/inhands/items/devices_righthand.dmi' & 'icons/mob/inhands/items/devices_lefthand.dmi'
+2023-11-12T09:04:14.5577115Z /obj/item/fishing_hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2023-11-12T09:04:14.5578938Z /obj/item/shovel/giant_wrench does not have an inhand_icon_state value - Possible matching sprites for "giant_wrench" found in: 'icons/mob/inhands/64x64_righthand.dmi' & 'icons/mob/inhands/64x64_lefthand.dmi'
+2023-11-12T09:04:14.5580822Z /obj/item/cursed_katana does not have an inhand_icon_state value - Possible matching sprites for "cursed_katana" found in: 'icons/mob/inhands/weapons/swords_righthand.dmi' & 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+2023-11-12T09:04:14.5583032Z /obj/item/guardian_creator/tech does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2023-11-12T09:04:14.5584953Z /obj/item/research_notes does not have an inhand_icon_state value - Possible matching sprites for "paper" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2023-11-12T09:04:14.5586814Z /obj/item/bonesetter does not have an inhand_icon_state value - Possible matching sprites for "bonesetter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2023-11-12T09:04:14.5588821Z /obj/item/blood_filter does not have an inhand_icon_state value - Possible matching sprites for "bloodfilter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2023-11-12T09:04:14.5590945Z /obj/item/mecha_ammo/flashbang does not have an inhand_icon_state value - Possible matching sprites for "flashbang" found in: 'icons/mob/inhands/equipment/security_lefthand.dmi' & 'icons/mob/inhands/equipment/security_righthand.dmi'
+2023-11-12T09:04:14.5592385Z [1;32mPASS[0m /datum/unit_test/defined_inhand_icon_states 1s
+2023-11-12T09:04:14.5593067Z ##[endgroup]
+2023-11-12T09:04:14.5593503Z ##[group]/datum/unit_test/json_savefiles
+2023-11-12T09:04:14.5593927Z [1;32mPASS[0m /datum/unit_test/json_savefiles 0s
+2023-11-12T09:04:14.5594439Z ##[endgroup]
+2023-11-12T09:04:14.5697545Z ##[group]/datum/unit_test/keybinding_init
+2023-11-12T09:04:14.5700044Z [1;32mPASS[0m /datum/unit_test/keybinding_init 0s
+2023-11-12T09:04:14.5702215Z ##[endgroup]
+2023-11-12T09:04:14.5828294Z ##[group]/datum/unit_test/knockoff_component
+2023-11-12T09:04:14.6242363Z [1;32mPASS[0m /datum/unit_test/knockoff_component 0.1s
+2023-11-12T09:04:14.6244697Z ##[endgroup]
+2023-11-12T09:04:14.6630391Z ##[group]/datum/unit_test/language_species_swap_simple
+2023-11-12T09:04:14.7587413Z [1;32mPASS[0m /datum/unit_test/language_species_swap_simple 0.1s
+2023-11-12T09:04:14.7588791Z ##[endgroup]
+2023-11-12T09:04:14.7909664Z ##[group]/datum/unit_test/language_species_swap_complex
+2023-11-12T09:04:14.8535770Z [1;32mPASS[0m /datum/unit_test/language_species_swap_complex 0.1s
+2023-11-12T09:04:14.8537437Z ##[endgroup]
+2023-11-12T09:04:14.8839470Z ##[group]/datum/unit_test/language_species_change_other_known
+2023-11-12T09:04:14.9795952Z [1;32mPASS[0m /datum/unit_test/language_species_change_other_known 0.1s
+2023-11-12T09:04:14.9797030Z ##[endgroup]
+2023-11-12T09:04:15.0435933Z ##[group]/datum/unit_test/language_mind_transfer
+2023-11-12T09:04:15.1107127Z [1;32mPASS[0m /datum/unit_test/language_mind_transfer 0.1s
+2023-11-12T09:04:15.1109587Z ##[endgroup]
+2023-11-12T09:04:15.2112030Z ##[group]/datum/unit_test/language_mind_swap
+2023-11-12T09:04:15.2925264Z [1;32mPASS[0m /datum/unit_test/language_mind_swap 0s
+2023-11-12T09:04:15.2927698Z ##[endgroup]
+2023-11-12T09:04:15.3795431Z ##[group]/datum/unit_test/book_of_babel
+2023-11-12T09:04:15.4462613Z [1;32mPASS[0m /datum/unit_test/book_of_babel 0.1s
+2023-11-12T09:04:15.4464636Z ##[endgroup]
+2023-11-12T09:04:15.4773421Z ##[group]/datum/unit_test/lesserform
+2023-11-12T09:04:15.6945571Z [1;32mPASS[0m /datum/unit_test/lesserform 0.2s
+2023-11-12T09:04:15.6948228Z ##[endgroup]
+2023-11-12T09:04:15.7353723Z ##[group]/datum/unit_test/limbsanity
+2023-11-12T09:04:15.7943636Z [1;32mPASS[0m /datum/unit_test/limbsanity 0s
+2023-11-12T09:04:15.7944637Z ##[endgroup]
+2023-11-12T09:04:15.8094514Z ##[group]/datum/unit_test/limb_height_adjustment
+2023-11-12T09:04:15.8922884Z [1;32mPASS[0m /datum/unit_test/limb_height_adjustment 0s
+2023-11-12T09:04:15.8924726Z ##[endgroup]
+2023-11-12T09:04:15.9430586Z ##[group]/datum/unit_test/ling_decap
+2023-11-12T09:04:15.9835506Z [1;32mPASS[0m /datum/unit_test/ling_decap 0s
+2023-11-12T09:04:15.9839509Z ##[endgroup]
+2023-11-12T09:04:16.0140352Z ##[group]/datum/unit_test/normal_decap
+2023-11-12T09:04:16.0424498Z [1;32mPASS[0m /datum/unit_test/normal_decap 0s
+2023-11-12T09:04:16.0426983Z ##[endgroup]
+2023-11-12T09:04:16.0805164Z ##[group]/datum/unit_test/liver/skeleton
+2023-11-12T09:04:16.1038545Z [1;32mPASS[0m /datum/unit_test/liver/skeleton 0.1s
+2023-11-12T09:04:16.1041112Z ##[endgroup]
+2023-11-12T09:04:16.1284821Z ##[group]/datum/unit_test/liver/plasmaman
+2023-11-12T09:04:16.1580562Z [1;32mPASS[0m /datum/unit_test/liver/plasmaman 0s
+2023-11-12T09:04:16.1583210Z ##[endgroup]
+2023-11-12T09:04:16.2153103Z ##[group]/datum/unit_test/load_map_security
+2023-11-12T09:04:16.2161683Z map directory not in whitelist: data/load_map_security_temp for map runtimestation
+2023-11-12T09:04:16.2164604Z [1;32mPASS[0m /datum/unit_test/load_map_security 0s
+2023-11-12T09:04:16.2167411Z ##[endgroup]
+2023-11-12T09:04:16.2305620Z ##[group]/datum/unit_test/lungs/lungs_sanity
+2023-11-12T09:04:16.2992950Z [1;32mPASS[0m /datum/unit_test/lungs/lungs_sanity 0s
+2023-11-12T09:04:16.2993961Z ##[endgroup]
+2023-11-12T09:04:16.3555743Z ##[group]/datum/unit_test/lungs/lungs_sanity_plasmaman
+2023-11-12T09:04:16.3893402Z [1;32mPASS[0m /datum/unit_test/lungs/lungs_sanity_plasmaman 0s
+2023-11-12T09:04:16.3896070Z ##[endgroup]
+2023-11-12T09:04:16.4363609Z ##[group]/datum/unit_test/lungs/lungs_sanity_ashwalker
+2023-11-12T09:04:16.4534765Z [1;32mPASS[0m /datum/unit_test/lungs/lungs_sanity_ashwalker 0s
+2023-11-12T09:04:16.4537484Z ##[endgroup]
+2023-11-12T09:04:16.5268598Z ##[group]/datum/unit_test/machine_disassembly
+2023-11-12T09:04:16.5331398Z [1;32mPASS[0m /datum/unit_test/machine_disassembly 0s
+2023-11-12T09:04:16.5334165Z ##[endgroup]
+2023-11-12T09:04:16.5965192Z ##[group]/datum/unit_test/mafia
+2023-11-12T09:04:16.9361333Z [1;32mPASS[0m /datum/unit_test/mafia 0.4s
+2023-11-12T09:04:16.9362885Z ##[endgroup]
+2023-11-12T09:04:17.0130362Z ##[group]/datum/unit_test/job_roundstart_spawnpoints
+2023-11-12T09:04:17.0143039Z [1;32mPASS[0m /datum/unit_test/job_roundstart_spawnpoints 0s
+2023-11-12T09:04:17.0145274Z ##[endgroup]
+2023-11-12T09:04:17.0659056Z ##[group]/datum/unit_test/mecha_damage
+2023-11-12T09:04:17.1110027Z [1;32mPASS[0m /datum/unit_test/mecha_damage 0.1s
+2023-11-12T09:04:17.1112178Z ##[endgroup]
+2023-11-12T09:04:17.2054159Z ##[group]/datum/unit_test/test_human_base
+2023-11-12T09:04:17.2287354Z [1;32mPASS[0m /datum/unit_test/test_human_base 0s
+2023-11-12T09:04:17.2289454Z ##[endgroup]
+2023-11-12T09:04:17.2929615Z ##[group]/datum/unit_test/test_human_bone
+2023-11-12T09:04:17.3157404Z [1;32mPASS[0m /datum/unit_test/test_human_bone 0.1s
+2023-11-12T09:04:17.3160356Z ##[endgroup]
+2023-11-12T09:04:17.3434694Z ##[group]/datum/unit_test/merge_type
+2023-11-12T09:04:17.3440046Z [1;32mPASS[0m /datum/unit_test/merge_type 0s
+2023-11-12T09:04:17.3442753Z ##[endgroup]
+2023-11-12T09:04:17.3573048Z ##[group]/datum/unit_test/metabolization
+2023-11-12T09:04:17.6960389Z [1;32mPASS[0m /datum/unit_test/metabolization 0.3s
+2023-11-12T09:04:17.6963225Z ##[endgroup]
+2023-11-12T09:04:17.7388896Z ##[group]/datum/unit_test/on_mob_end_metabolize
+2023-11-12T09:04:17.7590192Z [1;32mPASS[0m /datum/unit_test/on_mob_end_metabolize 0s
+2023-11-12T09:04:17.7592863Z ##[endgroup]
+2023-11-12T09:04:17.7841810Z ##[group]/datum/unit_test/addictions
+2023-11-12T09:04:17.8425631Z [1;32mPASS[0m /datum/unit_test/addictions 0.1s
+2023-11-12T09:04:17.8428724Z ##[endgroup]
+2023-11-12T09:04:17.9023556Z ##[group]/datum/unit_test/actions_moved_on_mind_transfer
+2023-11-12T09:04:17.9228877Z [1;32mPASS[0m /datum/unit_test/actions_moved_on_mind_transfer 0s
+2023-11-12T09:04:17.9231703Z ##[endgroup]
+2023-11-12T09:04:17.9679832Z ##[group]/datum/unit_test/missing_icons
+2023-11-12T09:04:24.5752532Z [1;32mPASS[0m /datum/unit_test/missing_icons 6.6s
+2023-11-12T09:04:24.5754181Z ##[endgroup]
+2023-11-12T09:04:24.6466600Z ##[group]/datum/unit_test/mob_chains
+2023-11-12T09:04:24.6632928Z [1;32mPASS[0m /datum/unit_test/mob_chains 0s
+2023-11-12T09:04:24.6635968Z ##[endgroup]
+2023-11-12T09:04:24.7913005Z ##[group]/datum/unit_test/mob_faction
+2023-11-12T09:04:28.5066463Z [1;32mPASS[0m /datum/unit_test/mob_faction 3.8s
+2023-11-12T09:04:28.5069188Z ##[endgroup]
+2023-11-12T09:04:31.6163193Z ##[group]/datum/unit_test/mob_spawn
+2023-11-12T09:04:31.6427245Z [1;32mPASS[0m /datum/unit_test/mob_spawn 0s
+2023-11-12T09:04:31.6431419Z ##[endgroup]
+2023-11-12T09:04:32.0058055Z ##[group]/datum/unit_test/modsuit_checks
+2023-11-12T09:04:32.2811166Z [1;32mPASS[0m /datum/unit_test/modsuit_checks 0.2s
+2023-11-12T09:04:32.2812528Z ##[endgroup]
+2023-11-12T09:04:32.3511926Z ##[group]/datum/unit_test/modular_map_loader
+2023-11-12T09:04:32.3521874Z [1;32mPASS[0m /datum/unit_test/modular_map_loader 0s
+2023-11-12T09:04:32.3523808Z ##[endgroup]
+2023-11-12T09:04:32.4142704Z ##[group]/datum/unit_test/mouse_bite_cable
+2023-11-12T09:04:32.4246879Z [1;32mPASS[0m /datum/unit_test/mouse_bite_cable 0s
+2023-11-12T09:04:32.4248567Z ##[endgroup]
+2023-11-12T09:04:32.4874261Z ##[group]/datum/unit_test/mutant_hands
+2023-11-12T09:04:32.5112259Z [1;32mPASS[0m /datum/unit_test/mutant_hands 0.1s
+2023-11-12T09:04:32.5113850Z ##[endgroup]
+2023-11-12T09:04:32.5849921Z ##[group]/datum/unit_test/mutant_hands_with_nodrop
+2023-11-12T09:04:32.6040138Z [1;32mPASS[0m /datum/unit_test/mutant_hands_with_nodrop 0.1s
+2023-11-12T09:04:32.6041689Z ##[endgroup]
+2023-11-12T09:04:32.6773675Z ##[group]/datum/unit_test/mutant_hands_carry
+2023-11-12T09:04:32.7131388Z [1;32mPASS[0m /datum/unit_test/mutant_hands_carry 0.1s
+2023-11-12T09:04:32.7133185Z ##[endgroup]
+2023-11-12T09:04:32.7786446Z ##[group]/datum/unit_test/mutant_organs
+2023-11-12T09:04:34.2934214Z [1;32mPASS[0m /datum/unit_test/mutant_organs 1.5s
+2023-11-12T09:04:34.2935313Z ##[endgroup]
+2023-11-12T09:04:34.6462244Z ##[group]/datum/unit_test/novaflower_burn
+2023-11-12T09:04:34.6850680Z [1;32mPASS[0m /datum/unit_test/novaflower_burn 0s
+2023-11-12T09:04:34.6852577Z ##[endgroup]
+2023-11-12T09:04:34.7556767Z ##[group]/datum/unit_test/nuke_cinematic
+2023-11-12T09:04:39.0321508Z [1;32mPASS[0m /datum/unit_test/nuke_cinematic 4.3s
+2023-11-12T09:04:39.0323281Z ##[endgroup]
+2023-11-12T09:04:39.0458593Z ##[group]/datum/unit_test/objectives_category
+2023-11-12T09:04:39.0479702Z [1;32mPASS[0m /datum/unit_test/objectives_category 0s
+2023-11-12T09:04:39.0482187Z ##[endgroup]
+2023-11-12T09:04:39.0633771Z ##[group]/datum/unit_test/operating_table
+2023-11-12T09:04:39.0971239Z [1;32mPASS[0m /datum/unit_test/operating_table 0s
+2023-11-12T09:04:39.0973601Z ##[endgroup]
+2023-11-12T09:04:39.1707308Z ##[group]/datum/unit_test/orderable_items
+2023-11-12T09:04:39.3304868Z [1;32mPASS[0m /datum/unit_test/orderable_items 0.2s
+2023-11-12T09:04:39.3307041Z ##[endgroup]
+2023-11-12T09:04:39.4628600Z ##[group]/datum/unit_test/organ_set_bonus_id
+2023-11-12T09:04:39.4631127Z [1;32mPASS[0m /datum/unit_test/organ_set_bonus_id 0s
+2023-11-12T09:04:39.4632993Z ##[endgroup]
+2023-11-12T09:04:39.4763602Z ##[group]/datum/unit_test/organ_set_bonus_sanity
+2023-11-12T09:04:39.7566200Z [1;32mPASS[0m /datum/unit_test/organ_set_bonus_sanity 0.3s
+2023-11-12T09:04:39.7567687Z ##[endgroup]
+2023-11-12T09:04:39.8948309Z ##[group]/datum/unit_test/organ_sanity
+2023-11-12T09:04:39.8957864Z [1;32mPASS[0m /datum/unit_test/organ_sanity 0s
+2023-11-12T09:04:39.8960612Z ##[endgroup]
+2023-11-12T09:04:39.9099785Z ##[group]/datum/unit_test/organ_damage
+2023-11-12T09:04:39.9663107Z [1;32mPASS[0m /datum/unit_test/organ_damage 0s
+2023-11-12T09:04:39.9665107Z ##[endgroup]
+2023-11-12T09:04:40.0023907Z ##[group]/datum/unit_test/outfit_sanity
+2023-11-12T09:04:52.5011539Z [1;32mPASS[0m /datum/unit_test/outfit_sanity 12.5s
+2023-11-12T09:04:52.5013136Z ##[endgroup]
+2023-11-12T09:04:52.5847995Z ##[group]/datum/unit_test/oxyloss_suffocation
+2023-11-12T09:04:52.6033624Z [1;32mPASS[0m /datum/unit_test/oxyloss_suffocation 0.1s
+2023-11-12T09:04:52.6035713Z ##[endgroup]
+2023-11-12T09:04:52.6523199Z ##[group]/datum/unit_test/paintings
+2023-11-12T09:04:52.6718185Z [1;32mPASS[0m /datum/unit_test/paintings 0s
+2023-11-12T09:04:52.6720334Z ##[endgroup]
+2023-11-12T09:04:52.6860350Z ##[group]/datum/unit_test/pills
+2023-11-12T09:04:52.7049829Z [1;32mPASS[0m /datum/unit_test/pills 0.1s
+2023-11-12T09:04:52.7051614Z ##[endgroup]
+2023-11-12T09:04:52.7284869Z ##[group]/datum/unit_test/plane_double_transform
+2023-11-12T09:04:52.7568954Z [1;32mPASS[0m /datum/unit_test/plane_double_transform 0s
+2023-11-12T09:04:52.7570947Z ##[endgroup]
+2023-11-12T09:04:52.8088783Z ##[group]/datum/unit_test/plane_dupe_detector
+2023-11-12T09:04:52.8092292Z [1;32mPASS[0m /datum/unit_test/plane_dupe_detector 0s
+2023-11-12T09:04:52.8094235Z ##[endgroup]
+2023-11-12T09:04:52.8223651Z ##[group]/datum/unit_test/plantgrowth
+2023-11-12T09:04:52.9104725Z [1;32mPASS[0m /datum/unit_test/plantgrowth 0.1s
+2023-11-12T09:04:52.9106537Z ##[endgroup]
+2023-11-12T09:04:52.9238426Z ##[group]/datum/unit_test/preference_species
+2023-11-12T09:04:52.9241982Z [1;32mPASS[0m /datum/unit_test/preference_species 0s
+2023-11-12T09:04:52.9243985Z ##[endgroup]
+2023-11-12T09:04:52.9366837Z ##[group]/datum/unit_test/preferences_implement_everything
+2023-11-12T09:04:52.9767879Z [1;32mPASS[0m /datum/unit_test/preferences_implement_everything 0s
+2023-11-12T09:04:52.9769887Z ##[endgroup]
+2023-11-12T09:04:53.0386005Z ##[group]/datum/unit_test/preferences_valid_savefile_key
+2023-11-12T09:04:53.0390164Z [1;32mPASS[0m /datum/unit_test/preferences_valid_savefile_key 0s
+2023-11-12T09:04:53.0392300Z ##[endgroup]
+2023-11-12T09:04:53.0533180Z ##[group]/datum/unit_test/preferences_valid_main_feature_name
+2023-11-12T09:04:53.0536519Z [1;32mPASS[0m /datum/unit_test/preferences_valid_main_feature_name 0s
+2023-11-12T09:04:53.0538733Z ##[endgroup]
+2023-11-12T09:04:53.0666858Z ##[group]/datum/unit_test/preferences_should_generate_icons_sanity
+2023-11-12T09:04:53.5932797Z [1;32mPASS[0m /datum/unit_test/preferences_should_generate_icons_sanity 0.5s
+2023-11-12T09:04:53.5934463Z ##[endgroup]
+2023-11-12T09:04:53.6200764Z ##[group]/datum/unit_test/projectile_movetypes
+2023-11-12T09:04:53.6204485Z [1;32mPASS[0m /datum/unit_test/projectile_movetypes 0s
+2023-11-12T09:04:53.6206834Z ##[endgroup]
+2023-11-12T09:04:53.6336940Z ##[group]/datum/unit_test/gun_go_bang
+2023-11-12T09:04:53.6829687Z [1;32mPASS[0m /datum/unit_test/gun_go_bang 0s
+2023-11-12T09:04:53.6830843Z ##[endgroup]
+2023-11-12T09:04:53.7230698Z ##[group]/datum/unit_test/quirk_icons
+2023-11-12T09:04:53.7234275Z [1;32mPASS[0m /datum/unit_test/quirk_icons 0s
+2023-11-12T09:04:53.7236777Z ##[endgroup]
+2023-11-12T09:04:53.7365585Z ##[group]/datum/unit_test/range_return
+2023-11-12T09:04:53.7369094Z [1;32mPASS[0m /datum/unit_test/range_return 0s
+2023-11-12T09:04:53.7371240Z ##[endgroup]
+2023-11-12T09:04:53.7500465Z ##[group]/datum/unit_test/frame_stacking
+2023-11-12T09:04:53.7979971Z [1;32mPASS[0m /datum/unit_test/frame_stacking 0s
+2023-11-12T09:04:53.7981883Z ##[endgroup]
+2023-11-12T09:04:53.8318167Z ##[group]/datum/unit_test/reagent_container_defaults
+2023-11-12T09:04:54.0941417Z [1;32mPASS[0m /datum/unit_test/reagent_container_defaults 0.2s
+2023-11-12T09:04:54.0943278Z ##[endgroup]
+2023-11-12T09:04:54.2270413Z ##[group]/datum/unit_test/reagent_id_typos
+2023-11-12T09:04:54.2286982Z [1;32mPASS[0m /datum/unit_test/reagent_id_typos 0s
+2023-11-12T09:04:54.2289435Z ##[endgroup]
+2023-11-12T09:04:54.2420053Z ##[group]/datum/unit_test/reagent_mob_expose
+2023-11-12T09:04:54.2723656Z [1;32mPASS[0m /datum/unit_test/reagent_mob_expose 0s
+2023-11-12T09:04:54.2726334Z ##[endgroup]
+2023-11-12T09:04:54.3099472Z ##[group]/datum/unit_test/reagent_mob_procs
+2023-11-12T09:04:54.3289033Z [1;32mPASS[0m /datum/unit_test/reagent_mob_procs 0s
+2023-11-12T09:04:54.3291717Z ##[endgroup]
+2023-11-12T09:04:54.3541628Z ##[group]/datum/unit_test/reagent_names
+2023-11-12T09:04:55.1766396Z [1;32mPASS[0m /datum/unit_test/reagent_names 0.8s
+2023-11-12T09:04:55.1768837Z ##[endgroup]
+2023-11-12T09:04:55.2029840Z ##[group]/datum/unit_test/reagent_recipe_collisions
+2023-11-12T09:04:56.8716958Z [1;32mPASS[0m /datum/unit_test/reagent_recipe_collisions 1.6s
+2023-11-12T09:04:56.8718508Z ##[endgroup]
+2023-11-12T09:04:56.8869144Z ##[group]/datum/unit_test/reagent_transfer
+2023-11-12T09:04:56.8878975Z [1;32mPASS[0m /datum/unit_test/reagent_transfer 0s
+2023-11-12T09:04:56.8880828Z ##[endgroup]
+2023-11-12T09:04:56.9011226Z ##[group]/datum/unit_test/required_map_items
+2023-11-12T09:04:56.9014244Z [1;32mPASS[0m /datum/unit_test/required_map_items 0s
+2023-11-12T09:04:56.9016215Z ##[endgroup]
+2023-11-12T09:04:56.9145903Z ##[group]/datum/unit_test/stop_drop_and_roll
+2023-11-12T09:04:56.9332587Z [1;32mPASS[0m /datum/unit_test/stop_drop_and_roll 0s
+2023-11-12T09:04:56.9334766Z ##[endgroup]
+2023-11-12T09:04:56.9894372Z ##[group]/datum/unit_test/container_resist
+2023-11-12T09:04:57.0133852Z [1;32mPASS[0m /datum/unit_test/container_resist 0.1s
+2023-11-12T09:04:57.0136482Z ##[endgroup]
+2023-11-12T09:04:57.0869981Z ##[group]/datum/unit_test/get_message_mods
+2023-11-12T09:04:57.1036296Z [1;32mPASS[0m /datum/unit_test/get_message_mods 0.1s
+2023-11-12T09:04:57.1038377Z ##[endgroup]
+2023-11-12T09:04:57.1761766Z ##[group]/datum/unit_test/say_signal
+2023-11-12T09:04:57.1785738Z [1;32mPASS[0m /datum/unit_test/say_signal 0s
+2023-11-12T09:04:57.1787867Z ##[endgroup]
+2023-11-12T09:04:57.2275108Z ##[group]/datum/unit_test/translate_language
+2023-11-12T09:04:57.2445118Z [1;32mPASS[0m /datum/unit_test/translate_language 0s
+2023-11-12T09:04:57.2447197Z ##[endgroup]
+2023-11-12T09:04:57.2776300Z ##[group]/datum/unit_test/speech
+2023-11-12T09:04:57.3273922Z [1;32mPASS[0m /datum/unit_test/speech 0.1s
+2023-11-12T09:04:57.3276048Z ##[endgroup]
+2023-11-12T09:04:57.3648311Z ##[group]/datum/unit_test/screenshot_antag_icons
+2023-11-12T09:04:57.3655596Z screenshot_antag_icons_cyberpolice was put in data/screenshots_new
+2023-11-12T09:04:57.3668195Z screenshot_antag_icons_fugitive was put in data/screenshots_new
+2023-11-12T09:04:57.3673743Z screenshot_antag_icons_loneoperative was put in data/screenshots_new
+2023-11-12T09:04:57.3918428Z screenshot_antag_icons_sentiencepotionspawn was put in data/screenshots_new
+2023-11-12T09:04:57.3925180Z screenshot_antag_icons_traitor was put in data/screenshots_new
+2023-11-12T09:04:57.4212360Z screenshot_antag_icons_malfai was put in data/screenshots_new
+2023-11-12T09:04:57.4244403Z screenshot_antag_icons_bloodbrother was put in data/screenshots_new
+2023-11-12T09:04:57.4250630Z screenshot_antag_icons_changeling was put in data/screenshots_new
+2023-11-12T09:04:57.4282149Z screenshot_antag_icons_heretic was put in data/screenshots_new
+2023-11-12T09:04:57.4292701Z screenshot_antag_icons_wizard was put in data/screenshots_new
+2023-11-12T09:04:57.4322992Z screenshot_antag_icons_cultist was put in data/screenshots_new
+2023-11-12T09:04:57.4335181Z screenshot_antag_icons_operative was put in data/screenshots_new
+2023-11-12T09:04:57.4347253Z screenshot_antag_icons_clownoperative was put in data/screenshots_new
+2023-11-12T09:04:57.4360316Z screenshot_antag_icons_headrevolutionary was put in data/screenshots_new
+2023-11-12T09:04:57.4362553Z screenshot_antag_icons_syndicateinfiltrator was put in data/screenshots_new
+2023-11-12T09:04:57.4364249Z screenshot_antag_icons_provocateur was put in data/screenshots_new
+2023-11-12T09:04:57.4365976Z screenshot_antag_icons_hereticsmuggler was put in data/screenshots_new
+2023-11-12T09:04:57.4367872Z screenshot_antag_icons_stowawaychangeling was put in data/screenshots_new
+2023-11-12T09:04:57.4369724Z screenshot_antag_icons_wizardmidround was put in data/screenshots_new
+2023-11-12T09:04:57.4371538Z screenshot_antag_icons_operativemidround was put in data/screenshots_new
+2023-11-12T09:04:57.4836255Z screenshot_antag_icons_blob was put in data/screenshots_new
+2023-11-12T09:04:57.4913104Z screenshot_antag_icons_xenomorph was put in data/screenshots_new
+2023-11-12T09:04:57.4918547Z screenshot_antag_icons_nightmare was put in data/screenshots_new
+2023-11-12T09:04:57.4972641Z screenshot_antag_icons_spacedragon was put in data/screenshots_new
+2023-11-12T09:04:57.4978863Z screenshot_antag_icons_abductor was put in data/screenshots_new
+2023-11-12T09:04:57.4984390Z screenshot_antag_icons_spaceninja was put in data/screenshots_new
+2023-11-12T09:04:57.5142179Z screenshot_antag_icons_revenant was put in data/screenshots_new
+2023-11-12T09:04:57.5158225Z screenshot_antag_icons_sentientdisease was put in data/screenshots_new
+2023-11-12T09:04:57.5164048Z screenshot_antag_icons_changelingmidround was put in data/screenshots_new
+2023-11-12T09:04:57.5175747Z screenshot_antag_icons_paradoxclone was put in data/screenshots_new
+2023-11-12T09:04:57.5177675Z screenshot_antag_icons_syndicatesleeperagent was put in data/screenshots_new
+2023-11-12T09:04:57.5295585Z screenshot_antag_icons_blobinfection was put in data/screenshots_new
+2023-11-12T09:04:57.5313285Z screenshot_antag_icons_obsessed was put in data/screenshots_new
+2023-11-12T09:04:57.5315517Z screenshot_antag_icons_malfaimidround was put in data/screenshots_new
+2023-11-12T09:04:57.5319787Z [1;32mPASS[0m /datum/unit_test/screenshot_antag_icons 0.2s
+2023-11-12T09:04:57.5322595Z ##[endgroup]
+2023-11-12T09:04:57.5541756Z ##[group]/datum/unit_test/screenshot_basic
+2023-11-12T09:04:57.5545037Z screenshot_basic_red was put in data/screenshots_new
+2023-11-12T09:04:57.5548126Z [1;32mPASS[0m /datum/unit_test/screenshot_basic 0s
+2023-11-12T09:04:57.5550758Z ##[endgroup]
+2023-11-12T09:04:57.5683479Z ##[group]/datum/unit_test/screenshot_dynamic_human_icons
+2023-11-12T09:04:57.8350756Z screenshot_dynamic_human_icons_syndicate_commando was put in data/screenshots_new
+2023-11-12T09:04:57.8354817Z [1;32mPASS[0m /datum/unit_test/screenshot_dynamic_human_icons 0.3s
+2023-11-12T09:04:57.8357024Z ##[endgroup]
+2023-11-12T09:04:57.8497778Z ##[group]/datum/unit_test/screenshot_humanoids
+2023-11-12T09:04:58.2541589Z screenshot_humanoids__datum_species_lizard was put in data/screenshots_new
+2023-11-12T09:04:58.8071729Z screenshot_humanoids__datum_species_moth was put in data/screenshots_new
+2023-11-12T09:04:59.0481483Z screenshot_humanoids__datum_species_shadow was put in data/screenshots_new
+2023-11-12T09:04:59.2204964Z screenshot_humanoids__datum_species_shadow_nightmare was put in data/screenshots_new
+2023-11-12T09:04:59.4446438Z screenshot_humanoids__datum_species_abductor was put in data/screenshots_new
+2023-11-12T09:04:59.9025529Z screenshot_humanoids__datum_species_human was put in data/screenshots_new
+2023-11-12T09:05:00.3720324Z screenshot_humanoids__datum_species_human_tallboy was put in data/screenshots_new
+2023-11-12T09:05:00.8410192Z screenshot_humanoids__datum_species_human_felinid was put in data/screenshots_new
+2023-11-12T09:05:01.3919326Z screenshot_humanoids__datum_species_human_krokodil_addict was put in data/screenshots_new
+2023-11-12T09:05:01.5050044Z screenshot_humanoids__datum_species_monkey was put in data/screenshots_new
+2023-11-12T09:05:01.6332131Z screenshot_humanoids__datum_species_monkey_human_legged was put in data/screenshots_new
+2023-11-12T09:05:01.8078163Z screenshot_humanoids__datum_species_monkey_monkey_freak was put in data/screenshots_new
+2023-11-12T09:05:01.9204604Z screenshot_humanoids__datum_species_monkey_holodeck was put in data/screenshots_new
+2023-11-12T09:05:02.2703729Z screenshot_humanoids__datum_species_android was put in data/screenshots_new
+2023-11-12T09:05:02.5066397Z screenshot_humanoids__datum_species_dullahan was put in data/screenshots_new
+2023-11-12T09:05:02.8821597Z screenshot_humanoids__datum_species_ethereal was put in data/screenshots_new
+2023-11-12T09:05:03.0618503Z screenshot_humanoids__datum_species_ethereal_lustrous was put in data/screenshots_new
+2023-11-12T09:05:03.6054858Z screenshot_humanoids__datum_species_fly was put in data/screenshots_new
+2023-11-12T09:05:03.7723456Z screenshot_humanoids__datum_species_golem was put in data/screenshots_new
+2023-11-12T09:05:04.2399263Z screenshot_humanoids__datum_species_jelly was put in data/screenshots_new
+2023-11-12T09:05:04.7039511Z screenshot_humanoids__datum_species_jelly_slime was put in data/screenshots_new
+2023-11-12T09:05:05.1607461Z screenshot_humanoids__datum_species_jelly_luminescent was put in data/screenshots_new
+2023-11-12T09:05:05.6194475Z screenshot_humanoids__datum_species_jelly_stargazer was put in data/screenshots_new
+2023-11-12T09:05:05.9809404Z screenshot_humanoids__datum_species_lizard_ashwalker was put in data/screenshots_new
+2023-11-12T09:05:06.3898218Z screenshot_humanoids__datum_species_lizard_silverscale was put in data/screenshots_new
+2023-11-12T09:05:06.6851305Z screenshot_humanoids__datum_species_mush was put in data/screenshots_new
+2023-11-12T09:05:07.0392950Z screenshot_humanoids__datum_species_plasmaman was put in data/screenshots_new
+2023-11-12T09:05:07.5136767Z screenshot_humanoids__datum_species_pod was put in data/screenshots_new
+2023-11-12T09:05:07.7567133Z screenshot_humanoids__datum_species_skeleton was put in data/screenshots_new
+2023-11-12T09:05:08.2342975Z screenshot_humanoids__datum_species_snail was put in data/screenshots_new
+2023-11-12T09:05:08.6975763Z screenshot_humanoids__datum_species_vampire was put in data/screenshots_new
+2023-11-12T09:05:09.2496544Z screenshot_humanoids__datum_species_zombie was put in data/screenshots_new
+2023-11-12T09:05:09.8588009Z screenshot_humanoids__datum_species_zombie_infectious was put in data/screenshots_new
+2023-11-12T09:05:09.8591473Z [1;32mPASS[0m /datum/unit_test/screenshot_humanoids 12s
+2023-11-12T09:05:09.8593884Z ##[endgroup]
+2023-11-12T09:05:10.3359233Z ##[group]/datum/unit_test/screenshot_husk
+2023-11-12T09:05:10.4814584Z screenshot_husk_body was put in data/screenshots_new
+2023-11-12T09:05:10.5100421Z screenshot_husk_body_missing_limbs was put in data/screenshots_new
+2023-11-12T09:05:10.5103760Z [1;32mPASS[0m /datum/unit_test/screenshot_husk 0.2s
+2023-11-12T09:05:10.5105844Z ##[endgroup]
+2023-11-12T09:05:10.5738946Z ##[group]/datum/unit_test/screenshot_saturnx
+2023-11-12T09:05:10.7302951Z screenshot_saturnx_invisibility was put in data/screenshots_new
+2023-11-12T09:05:10.7306714Z [1;32mPASS[0m /datum/unit_test/screenshot_saturnx 0.2s
+2023-11-12T09:05:10.7309565Z ##[endgroup]
+2023-11-12T09:05:10.7993117Z ##[group]/datum/unit_test/security_levels
+2023-11-12T09:05:10.7995233Z [1;32mPASS[0m /datum/unit_test/security_levels 0s
+2023-11-12T09:05:10.7997473Z ##[endgroup]
+2023-11-12T09:05:10.8718075Z ##[group]/datum/unit_test/security_officer_roundstart_distribution
+2023-11-12T09:05:10.9829621Z [1;32mPASS[0m /datum/unit_test/security_officer_roundstart_distribution 0.1s
+2023-11-12T09:05:10.9831233Z ##[endgroup]
+2023-11-12T09:05:11.0917739Z ##[group]/datum/unit_test/security_officer_latejoin_distribution
+2023-11-12T09:05:11.3756560Z [1;32mPASS[0m /datum/unit_test/security_officer_latejoin_distribution 0.3s
+2023-11-12T09:05:11.3757917Z ##[endgroup]
+2023-11-12T09:05:11.6159233Z ##[group]/datum/unit_test/servingtray
+2023-11-12T09:05:11.6420663Z [1;32mPASS[0m /datum/unit_test/servingtray 0s
+2023-11-12T09:05:11.6422707Z ##[endgroup]
+2023-11-12T09:05:11.6722939Z ##[group]/datum/unit_test/simple_animal_freeze
+2023-11-12T09:05:11.6727308Z [1;32mPASS[0m /datum/unit_test/simple_animal_freeze 0s
+2023-11-12T09:05:11.6729459Z ##[endgroup]
+2023-11-12T09:05:11.6858248Z ##[group]/datum/unit_test/siunit
+2023-11-12T09:05:11.6862565Z [1;32mPASS[0m /datum/unit_test/siunit 0s
+2023-11-12T09:05:11.6864627Z ##[endgroup]
+2023-11-12T09:05:11.6994032Z ##[group]/datum/unit_test/slime_mood
+2023-11-12T09:05:11.7086306Z [1;32mPASS[0m /datum/unit_test/slime_mood 0.1s
+2023-11-12T09:05:11.7089418Z ##[endgroup]
+2023-11-12T09:05:11.7646724Z ##[group]/datum/unit_test/slips
+2023-11-12T09:05:11.7998254Z [1;32mPASS[0m /datum/unit_test/slips 0s
+2023-11-12T09:05:11.7999914Z ##[endgroup]
+2023-11-12T09:05:11.8832258Z ##[group]/datum/unit_test/spawn_humans
+2023-11-12T09:05:16.9174068Z [1;32mPASS[0m /datum/unit_test/spawn_humans 5.1s
+2023-11-12T09:05:16.9175480Z ##[endgroup]
+2023-11-12T09:05:16.9826971Z ##[group]/datum/unit_test/human_default_traits
+2023-11-12T09:05:16.9992542Z [1;32mPASS[0m /datum/unit_test/human_default_traits 0s
+2023-11-12T09:05:16.9994648Z ##[endgroup]
+2023-11-12T09:05:17.0453589Z ##[group]/datum/unit_test/spawn_mobs
+2023-11-12T09:05:17.3110840Z [1;32mPASS[0m /datum/unit_test/spawn_mobs 0.3s
+2023-11-12T09:05:17.3113201Z ##[endgroup]
+2023-11-12T09:05:17.8604911Z ##[group]/datum/unit_test/species_change_clothing
+2023-11-12T09:05:18.0037169Z [1;32mPASS[0m /datum/unit_test/species_change_clothing 0.2s
+2023-11-12T09:05:18.0039927Z ##[endgroup]
+2023-11-12T09:05:18.0594811Z ##[group]/datum/unit_test/species_change_held_items
+2023-11-12T09:05:18.1241794Z [1;32mPASS[0m /datum/unit_test/species_change_held_items 0.1s
+2023-11-12T09:05:18.1244171Z ##[endgroup]
+2023-11-12T09:05:18.1531271Z ##[group]/datum/unit_test/species_change_organs
+2023-11-12T09:05:18.2175195Z [1;32mPASS[0m /datum/unit_test/species_change_organs 0.1s
+2023-11-12T09:05:18.2177564Z ##[endgroup]
+2023-11-12T09:05:18.2917259Z ##[group]/datum/unit_test/species_config_sanity
+2023-11-12T09:05:18.2920181Z [1;32mPASS[0m /datum/unit_test/species_config_sanity 0s
+2023-11-12T09:05:18.2922846Z ##[endgroup]
+2023-11-12T09:05:18.3062818Z ##[group]/datum/unit_test/species_unique_id
+2023-11-12T09:05:18.3065971Z [1;32mPASS[0m /datum/unit_test/species_unique_id 0s
+2023-11-12T09:05:18.3068171Z ##[endgroup]
+2023-11-12T09:05:18.3222639Z ##[group]/datum/unit_test/species_whitelist_check
+2023-11-12T09:05:18.3225988Z [1;32mPASS[0m /datum/unit_test/species_whitelist_check 0s
+2023-11-12T09:05:18.3228060Z ##[endgroup]
+2023-11-12T09:05:18.3393256Z ##[group]/datum/unit_test/spell_invocations
+2023-11-12T09:05:18.3397536Z [1;32mPASS[0m /datum/unit_test/spell_invocations 0s
+2023-11-12T09:05:18.3400085Z ##[endgroup]
+2023-11-12T09:05:18.3530030Z ##[group]/datum/unit_test/shadow_jaunt
+2023-11-12T09:05:18.3711590Z [1;32mPASS[0m /datum/unit_test/shadow_jaunt 0s
+2023-11-12T09:05:18.3713925Z ##[endgroup]
+2023-11-12T09:05:18.4080468Z ##[group]/datum/unit_test/mind_swap_spell
+2023-11-12T09:05:18.4445059Z [1;32mPASS[0m /datum/unit_test/mind_swap_spell 0s
+2023-11-12T09:05:18.4447973Z ##[endgroup]
+2023-11-12T09:05:18.4831097Z ##[group]/datum/unit_test/spell_names
+2023-11-12T09:05:18.4836690Z [1;32mPASS[0m /datum/unit_test/spell_names 0s
+2023-11-12T09:05:18.4839793Z ##[endgroup]
+2023-11-12T09:05:18.4973281Z ##[group]/datum/unit_test/shapeshift_spell_validity
+2023-11-12T09:05:18.4982346Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell_validity 0s
+2023-11-12T09:05:18.4985502Z ##[endgroup]
+2023-11-12T09:05:18.5118193Z ##[group]/datum/unit_test/shapeshift_spell
+2023-11-12T09:05:31.3590354Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell 12.8s
+2023-11-12T09:05:31.3593257Z ##[endgroup]
+2023-11-12T09:05:31.3839062Z ##[group]/datum/unit_test/shapeshift_holoparasites
+2023-11-12T09:05:31.4236915Z [1;32mPASS[0m /datum/unit_test/shapeshift_holoparasites 0.1s
+2023-11-12T09:05:31.4240548Z ##[endgroup]
+2023-11-12T09:05:31.4609174Z ##[group]/datum/unit_test/shapeshift_health
+2023-11-12T09:05:32.0958569Z [1;32mPASS[0m /datum/unit_test/shapeshift_health 0.6s
+2023-11-12T09:05:32.0961165Z ##[endgroup]
+2023-11-12T09:05:32.2270540Z ##[group]/datum/unit_test/spritesheets
+2023-11-12T09:05:32.2310129Z [1;32mPASS[0m /datum/unit_test/spritesheets 0s
+2023-11-12T09:05:32.2313287Z ##[endgroup]
+2023-11-12T09:05:32.2444065Z ##[group]/datum/unit_test/stack_singular_name
+2023-11-12T09:05:32.2449554Z [1;32mPASS[0m /datum/unit_test/stack_singular_name 0s
+2023-11-12T09:05:32.2452311Z ##[endgroup]
+2023-11-12T09:05:32.2582343Z ##[group]/datum/unit_test/station_traits
+2023-11-12T09:05:32.2586458Z [1;32mPASS[0m /datum/unit_test/station_traits 0s
+2023-11-12T09:05:32.2589532Z ##[endgroup]
+2023-11-12T09:05:32.3273087Z ##[group]/datum/unit_test/status_effect_ticks
+2023-11-12T09:05:32.3278478Z [1;32mPASS[0m /datum/unit_test/status_effect_ticks 0s
+2023-11-12T09:05:32.3282046Z ##[endgroup]
+2023-11-12T09:05:32.3883615Z ##[group]/datum/unit_test/stomach
+2023-11-12T09:05:32.4148653Z [1;32mPASS[0m /datum/unit_test/stomach 0.1s
+2023-11-12T09:05:32.4152041Z ##[endgroup]
+2023-11-12T09:05:32.4474665Z ##[group]/datum/unit_test/strip_menu_ui_status
+2023-11-12T09:05:32.4955743Z [1;32mPASS[0m /datum/unit_test/strip_menu_ui_status 0s
+2023-11-12T09:05:32.4959231Z ##[endgroup]
+2023-11-12T09:05:32.5763081Z ##[group]/datum/unit_test/stun
+2023-11-12T09:05:32.5938628Z [1;32mPASS[0m /datum/unit_test/stun 0s
+2023-11-12T09:05:32.5941798Z ##[endgroup]
+2023-11-12T09:05:32.6174955Z ##[group]/datum/unit_test/knockdown
+2023-11-12T09:05:32.6344357Z [1;32mPASS[0m /datum/unit_test/knockdown 0s
+2023-11-12T09:05:32.6347424Z ##[endgroup]
+2023-11-12T09:05:32.6656807Z ##[group]/datum/unit_test/paralyze
+2023-11-12T09:05:32.6830553Z [1;32mPASS[0m /datum/unit_test/paralyze 0s
+2023-11-12T09:05:32.6834151Z ##[endgroup]
+2023-11-12T09:05:32.7067888Z ##[group]/datum/unit_test/unconsciousness
+2023-11-12T09:05:32.7247146Z [1;32mPASS[0m /datum/unit_test/unconsciousness 0s
+2023-11-12T09:05:32.7250770Z ##[endgroup]
+2023-11-12T09:05:32.7494899Z ##[group]/datum/unit_test/stun_absorb
+2023-11-12T09:05:32.7661160Z [1;32mPASS[0m /datum/unit_test/stun_absorb 0s
+2023-11-12T09:05:32.7664703Z ##[endgroup]
+2023-11-12T09:05:32.7898786Z ##[group]/datum/unit_test/subsystem_init
+2023-11-12T09:05:32.7903149Z [1;32mPASS[0m /datum/unit_test/subsystem_init 0s
+2023-11-12T09:05:32.7906701Z ##[endgroup]
+2023-11-12T09:05:32.8135238Z ##[group]/datum/unit_test/suit_storage_icons
+2023-11-12T09:05:34.6162263Z 1 - /obj/item/gun/ballistic/shotgun/hook using invalid icon_state, "hookshotgun"
+2023-11-12T09:05:34.6285969Z 2 - /obj/item/gun/ballistic/automatic/surplus using invalid icon_state, "surplus"
+2023-11-12T09:05:34.6466661Z 3 - /obj/item/melee/baton/security/cattleprod/telecrystalprod using invalid icon_state, "telecrystalprod"
+2023-11-12T09:05:34.6533245Z 4 - /obj/item/melee/sickly_blade/void using invalid icon_state, "void_blade"
+2023-11-12T09:05:34.6538232Z 5 - /obj/item/melee/sickly_blade/cosmic using invalid icon_state, "cosmic_blade"
+2023-11-12T09:05:34.6541373Z 6 - /obj/item/melee/sickly_blade/lock using invalid icon_state, "key_blade"
+2023-11-12T09:05:34.6628237Z 7 - /obj/item/radio/headset/syndicate/alt using invalid worn_icon_state, "syndie_headset"
+2023-11-12T09:05:34.6633020Z 8 - /obj/item/radio/headset/headset_sec using invalid worn_icon_state, "sec_headset"
+2023-11-12T09:05:34.6636156Z 9 - /obj/item/radio/headset/headset_sec/alt using invalid worn_icon_state, "sec_headset_alt"
+2023-11-12T09:05:34.6639243Z 10 - /obj/item/radio/headset/headset_eng using invalid worn_icon_state, "eng_headset"
+2023-11-12T09:05:34.6642514Z 11 - /obj/item/radio/headset/headset_rob using invalid worn_icon_state, "rob_headset"
+2023-11-12T09:05:34.6645779Z 12 - /obj/item/radio/headset/headset_med using invalid worn_icon_state, "med_headset"
+2023-11-12T09:05:34.6649005Z 13 - /obj/item/radio/headset/headset_sci using invalid worn_icon_state, "sci_headset"
+2023-11-12T09:05:34.6652244Z 14 - /obj/item/radio/headset/headset_medsci using invalid worn_icon_state, "medsci_headset"
+2023-11-12T09:05:34.6655462Z 15 - /obj/item/radio/headset/headset_srvsec using invalid worn_icon_state, "srvsec_headset"
+2023-11-12T09:05:34.6658687Z 16 - /obj/item/radio/headset/headset_srvmed using invalid worn_icon_state, "srv_headset"
+2023-11-12T09:05:34.6661917Z 17 - /obj/item/radio/headset/headset_com using invalid worn_icon_state, "com_headset"
+2023-11-12T09:05:34.6667219Z 18 - /obj/item/radio/headset/heads/captain/alt using invalid worn_icon_state, "com_headset_alt"
+2023-11-12T09:05:34.6670732Z 19 - /obj/item/radio/headset/headset_cargo using invalid worn_icon_state, "cargo_headset"
+2023-11-12T09:05:34.6673230Z 20 - /obj/item/radio/headset/headset_cargo/mining using invalid worn_icon_state, "mine_headset"
+2023-11-12T09:05:34.6675625Z 21 - /obj/item/radio/headset/headset_cent using invalid worn_icon_state, "cent_headset"
+2023-11-12T09:05:34.6678128Z 22 - /obj/item/radio/headset/headset_cent/alt using invalid worn_icon_state, "cent_headset_alt"
+2023-11-12T09:05:34.6972394Z 23 - /obj/item/toy/foam_runic_scepter using invalid worn_icon_state, "vendor_staff"
+2023-11-12T09:05:34.7033817Z 24 - /obj/item/cultivator/rake using invalid icon_state, "rake"
+2023-11-12T09:05:34.7038164Z 25 - /obj/item/hatchet/wooden using invalid icon_state, "woodhatchet"
+2023-11-12T09:05:34.7039900Z 26 - /obj/item/hatchet/cutterblade using invalid icon_state, "cutterblade"
+2023-11-12T09:05:34.7408592Z 27 - /obj/item/access_key using invalid icon_state, "access_key"
+2023-11-12T09:05:34.7458044Z 28 - /obj/item/key/janitor using invalid icon_state, "keyjanitor"
+2023-11-12T09:05:34.8393427Z 29 - /obj/item/universal_scanner using invalid icon_state, "export scanner"
+2023-11-12T09:05:34.8476665Z 30 - /obj/item/nullrod/tribal_knife using invalid icon_state, "crysknife"
+2023-11-12T09:05:34.8491387Z 31 - /obj/item/organ/internal/monster_core using invalid icon_state, "hivelord_core"
+2023-11-12T09:05:34.8493709Z 32 - /obj/item/organ/internal/monster_core/brimdust_sac using invalid icon_state, "brim_sac"
+2023-11-12T09:05:34.8496411Z 33 - /obj/item/organ/internal/monster_core/regenerative_core/legion using invalid icon_state, "legion_core"
+2023-11-12T09:05:34.8498777Z 34 - /obj/item/organ/internal/monster_core/rush_gland using invalid icon_state, "lobster_gland"
+2023-11-12T09:05:34.8538527Z 35 - /obj/item/abductor/gizmo using invalid icon_state, "gizmo_scan"
+2023-11-12T09:05:34.8540751Z 36 - /obj/item/abductor/silencer using invalid icon_state, "silencer"
+2023-11-12T09:05:34.8543252Z 37 - /obj/item/abductor/mind_device using invalid icon_state, "mind_device_message"
+2023-11-12T09:05:34.8545406Z 38 - /obj/item/abductor/alien_omnitool using invalid icon_state, "omnitool"
+2023-11-12T09:05:34.8552089Z 39 - /obj/item/banner using invalid icon_state, "banner"
+2023-11-12T09:05:34.8554713Z 40 - /obj/item/banner/security using invalid icon_state, "banner_security"
+2023-11-12T09:05:34.8557066Z 41 - /obj/item/banner/medical using invalid icon_state, "banner_medical"
+2023-11-12T09:05:34.8559349Z 42 - /obj/item/banner/science using invalid icon_state, "banner_science"
+2023-11-12T09:05:34.8561592Z 43 - /obj/item/banner/cargo using invalid icon_state, "banner_cargo"
+2023-11-12T09:05:34.8564170Z 44 - /obj/item/banner/engineering using invalid icon_state, "banner_engineering"
+2023-11-12T09:05:34.8566536Z 45 - /obj/item/banner/red using invalid icon_state, "banner-red"
+2023-11-12T09:05:34.8568980Z 46 - /obj/item/banner/blue using invalid icon_state, "banner-blue"
+2023-11-12T09:05:34.8576281Z 47 - /obj/item/claymore/cutlass using invalid worn_icon_state, "cutlass"
+2023-11-12T09:05:34.8580270Z 48 - /obj/item/claymore/highlander/robot using invalid icon_state, "claymore_cyborg"
+2023-11-12T09:05:34.8582334Z 49 - /obj/item/pillow using invalid icon_state, "pillow_1_t"
+2023-11-12T09:05:34.8584899Z 50 - /obj/item/pillow/clown using invalid icon_state, "pillow_5_t"
+2023-11-12T09:05:34.8587221Z 51 - /obj/item/pillow/mime using invalid icon_state, "pillow_6_t"
+2023-11-12T09:05:34.8626613Z 52 - /obj/item/gun/magic/staff/chaos/true_wabbajack using invalid icon_state, "the_wabbajack"
+2023-11-12T09:05:34.8633965Z 53 - /obj/item/gun/magic/staff/locker using invalid worn_icon_state, "lockerstaff"
+2023-11-12T09:05:34.8636381Z 54 - /obj/item/gun/magic/staff/flying using invalid worn_icon_state, "flightstaff"
+2023-11-12T09:05:34.8657485Z 55 - /obj/item/melee/energy/sword/pirate using invalid icon_state, "e_cutlass"
+2023-11-12T09:05:34.8659958Z 56 - /obj/item/clothing/glasses/eyepatch using invalid icon_state, "eyepatch"
+2023-11-12T09:05:34.8662250Z 57 - /obj/item/clothing/glasses/eyepatch/medical using invalid icon_state, "eyepatch_medical"
+2023-11-12T09:05:34.8976969Z 58 - /obj/item/melee/energy/sword using invalid icon_state, "e_sword"
+2023-11-12T09:05:34.8979094Z 59 - /obj/item/melee/energy/sword/cyborg/saw using invalid icon_state, "esaw"
+2023-11-12T09:05:34.8988519Z 60 - /obj/item/tank/jetpack/improvised using invalid worn_icon_state, "jetpack-improvised"
+2023-11-12T09:05:34.8993419Z 61 - /obj/item/multitool using invalid icon_state, "multitool"
+2023-11-12T09:05:34.8996418Z 62 - /obj/item/multitool/cyborg using invalid icon_state, "multitool_cyborg"
+2023-11-12T09:05:34.8998725Z 63 - /obj/item/multitool/circuit using invalid icon_state, "multitool_circuit"
+2023-11-12T09:05:34.9001342Z 64 - /obj/item/assembly/flash/handheld using invalid icon_state, "flash"
+2023-11-12T09:05:34.9004166Z 65 - /obj/item/clothing/mask/cigarette using invalid icon_state, "cigoff"
+2023-11-12T09:05:34.9006481Z 66 - /obj/item/clothing/mask/cigarette/rollie using invalid icon_state, "spliffoff"
+2023-11-12T09:05:34.9008788Z 67 - /obj/item/clothing/mask/cigarette/candy using invalid icon_state, "candyoff"
+2023-11-12T09:05:34.9011087Z 68 - /obj/item/clothing/mask/cigarette/cigar using invalid icon_state, "cigaroff"
+2023-11-12T09:05:34.9013684Z 69 - /obj/item/clothing/mask/cigarette/cigar/cohiba using invalid icon_state, "cigar2off"
+2023-11-12T09:05:34.9016282Z 70 - /obj/item/clothing/mask/cigarette/pipe using invalid icon_state, "pipeoff"
+2023-11-12T09:05:34.9019334Z 71 - /obj/item/clothing/mask/cigarette/pipe/cobpipe using invalid icon_state, "cobpipeoff"
+2023-11-12T09:05:34.9021398Z 72 - /obj/item/disk using invalid icon_state, "datadisk0"
+2023-11-12T09:05:34.9023878Z 73 - /obj/item/disk/holodisk using invalid icon_state, "holodisk"
+2023-11-12T09:05:34.9026566Z 74 - /obj/item/disk/nuclear using invalid icon_state, "nucleardisk"
+2023-11-12T09:05:34.9029044Z 75 - /obj/item/disk/surgery using invalid icon_state, "datadisk1"
+2023-11-12T09:05:34.9031722Z 76 - /obj/item/disk/cargo/bluespace_pod using invalid icon_state, "cargodisk"
+2023-11-12T09:05:34.9034253Z 77 - /obj/item/disk/design_disk/bepis using invalid icon_state, "rndmajordisk"
+2023-11-12T09:05:34.9036755Z 78 - /obj/item/melee/powerfist using invalid icon_state, "powerfist"
+2023-11-12T09:05:34.9044549Z 79 - /obj/item/melee/skateboard using invalid icon_state, "skateboard_held"
+2023-11-12T09:05:34.9047217Z 80 - /obj/item/melee/skateboard/pro using invalid icon_state, "skateboard2_held"
+2023-11-12T09:05:34.9049673Z 81 - /obj/item/melee/skateboard/hoverboard using invalid icon_state, "hoverboard_red_held"
+2023-11-12T09:05:34.9052014Z 82 - /obj/item/melee/skateboard/hoverboard/admin using invalid icon_state, "hoverboard_nt_held"
+2023-11-12T09:05:34.9054102Z 83 - /obj/item/melee/baseball_bat using invalid icon_state, "baseball_bat"
+2023-11-12T09:05:34.9056494Z 84 - /obj/item/melee/baseball_bat/homerun using invalid icon_state, "baseball_bat_home"
+2023-11-12T09:05:34.9058758Z 85 - /obj/item/melee/baseball_bat/ablative using invalid icon_state, "baseball_bat_metal"
+2023-11-12T09:05:34.9061041Z 86 - /obj/item/melee/flyswatter using invalid icon_state, "flyswatter"
+2023-11-12T09:05:34.9065209Z 87 - /obj/item/melee/energy/axe using invalid icon_state, "axe"
+2023-11-12T09:05:34.9067917Z 88 - /obj/item/melee/energy/blade using invalid icon_state, "blade"
+2023-11-12T09:05:34.9070409Z 89 - /obj/item/melee/energy/blade/hardlight using invalid icon_state, "lightblade"
+2023-11-12T09:05:34.9072647Z 90 - /obj/item/melee/synthetic_arm_blade using invalid icon_state, "arm_blade"
+2023-11-12T09:05:34.9074881Z 91 - /obj/item/melee/sabre using invalid icon_state, "sabre"
+2023-11-12T09:05:34.9077162Z 92 - /obj/item/melee/beesword using invalid worn_icon_state, "stinger"
+2023-11-12T09:05:34.9079597Z 93 - /obj/item/melee/supermatter_sword using invalid icon_state, "supermatter_sword_balanced"
+2023-11-12T09:05:34.9085130Z 94 - /obj/item/melee/cleric_mace using invalid worn_icon_state, "default_worn"
+2023-11-12T09:05:34.9087426Z 95 - /obj/item/melee/rune_carver using invalid icon_state, "rune_carver"
+2023-11-12T09:05:34.9089642Z 96 - /obj/item/melee/ghost_sword using invalid icon_state, "spectral"
+2023-11-12T09:05:34.9099563Z 97 - /obj/item/storage/lockbox/medal using invalid icon_state, "medalbox+l"
+2023-11-12T09:05:34.9101839Z 98 - /obj/item/storage/bag/trash using invalid icon_state, "trashbag"
+2023-11-12T09:05:34.9104337Z 99 - /obj/item/storage/bag/trash/bluespace using invalid icon_state, "bluetrashbag"
+2023-11-12T09:05:34.9106526Z 100 - /obj/item/cane using invalid icon_state, "cane"
+2023-11-12T09:05:34.9109148Z 101 - /obj/item/cane/white using invalid icon_state, "cane_white"
+2023-11-12T09:05:34.9127968Z 102 - /obj/item/clothing/mask/facehugger/toy using invalid worn_icon_state, "facehugger"
+2023-11-12T09:05:34.9129996Z 103 - /obj/item/kitchen/fork using invalid icon_state, "fork"
+2023-11-12T09:05:34.9132741Z 104 - /obj/item/kitchen/fork/plastic using invalid icon_state, "plastic_fork"
+2023-11-12T09:05:34.9137903Z 105 - /obj/item/kitchen/spoon using invalid icon_state, "spoon"
+2023-11-12T09:05:34.9140308Z 106 - /obj/item/kitchen/spoon/plastic using invalid icon_state, "plastic_spoon"
+2023-11-12T09:05:34.9142537Z 107 - /obj/item/kitchen/spoon/soup_ladle using invalid icon_state, "ladle"
+2023-11-12T09:05:34.9144673Z 108 - /obj/item/kitchen/tongs using invalid icon_state, "tongs"
+2023-11-12T09:05:34.9192479Z 109 - /obj/item/bonesetter using invalid icon_state, "bonesetter"
+2023-11-12T09:05:34.9194966Z 110 - /obj/item/cautery using invalid icon_state, "cautery"
+2023-11-12T09:05:34.9197552Z 111 - /obj/item/cautery/advanced using invalid icon_state, "e_cautery"
+2023-11-12T09:05:34.9200017Z 112 - /obj/item/cautery/cruel using invalid icon_state, "cruelcautery"
+2023-11-12T09:05:34.9202572Z 113 - /obj/item/hemostat using invalid icon_state, "hemostat"
+2023-11-12T09:05:34.9205055Z 114 - /obj/item/hemostat/supermatter using invalid icon_state, "supermatter_tongs"
+2023-11-12T09:05:34.9207385Z 115 - /obj/item/hemostat/cruel using invalid icon_state, "cruelhemostat"
+2023-11-12T09:05:34.9209542Z 116 - /obj/item/retractor using invalid icon_state, "retractor"
+2023-11-12T09:05:34.9211950Z 117 - /obj/item/retractor/advanced using invalid icon_state, "adv_retractor"
+2023-11-12T09:05:34.9214520Z 118 - /obj/item/retractor/cruel using invalid icon_state, "cruelretractor"
+2023-11-12T09:05:34.9216984Z 119 - /obj/item/scalpel using invalid icon_state, "scalpel"
+2023-11-12T09:05:34.9219596Z 120 - /obj/item/scalpel/supermatter using invalid icon_state, "supermatter_scalpel"
+2023-11-12T09:05:34.9221828Z 121 - /obj/item/scalpel/advanced using invalid icon_state, "e_scalpel"
+2023-11-12T09:05:34.9224110Z 122 - /obj/item/scalpel/cruel using invalid icon_state, "cruelscalpel"
+2023-11-12T09:05:34.9226426Z 123 - /obj/item/surgical_drapes using invalid icon_state, "surgical_drapes"
+2023-11-12T09:05:34.9230490Z 124 - /obj/item/crowbar/mechremoval using invalid icon_state, "mechremoval0"
+2023-11-12T09:05:34.9245013Z 125 - /obj/item/crowbar/hammer using invalid icon_state, "clawhammer"
+2023-11-12T09:05:34.9274002Z [1;32mPASS[0m /datum/unit_test/suit_storage_icons 2.1s
+2023-11-12T09:05:34.9277303Z ##[endgroup]
+2023-11-12T09:05:35.0051949Z ##[group]/datum/unit_test/amputation
+2023-11-12T09:05:35.0418593Z [1;32mPASS[0m /datum/unit_test/amputation 0s
+2023-11-12T09:05:35.0421400Z ##[endgroup]
+2023-11-12T09:05:35.0919237Z ##[group]/datum/unit_test/brain_surgery
+2023-11-12T09:05:35.1251285Z [1;32mPASS[0m /datum/unit_test/brain_surgery 0.1s
+2023-11-12T09:05:35.1254329Z ##[endgroup]
+2023-11-12T09:05:35.1587969Z ##[group]/datum/unit_test/head_transplant
+2023-11-12T09:05:35.2257286Z [1;32mPASS[0m /datum/unit_test/head_transplant 0.1s
+2023-11-12T09:05:35.2260747Z ##[endgroup]
+2023-11-12T09:05:35.2834393Z ##[group]/datum/unit_test/multiple_surgeries
+2023-11-12T09:05:35.3338834Z [1;32mPASS[0m /datum/unit_test/multiple_surgeries 0.1s
+2023-11-12T09:05:35.3341725Z ##[endgroup]
+2023-11-12T09:05:35.4031367Z ##[group]/datum/unit_test/start_tend_wounds
+2023-11-12T09:05:35.4361296Z [1;32mPASS[0m /datum/unit_test/start_tend_wounds 0s
+2023-11-12T09:05:35.4364716Z ##[endgroup]
+2023-11-12T09:05:35.4772361Z ##[group]/datum/unit_test/tend_wounds
+2023-11-12T09:05:35.5590830Z [1;32mPASS[0m /datum/unit_test/tend_wounds 0.1s
+2023-11-12T09:05:35.5594252Z ##[endgroup]
+2023-11-12T09:05:35.6747135Z ##[group]/datum/unit_test/tail_wag
+2023-11-12T09:05:35.8571590Z [1;32mPASS[0m /datum/unit_test/tail_wag 0.2s
+2023-11-12T09:05:35.8574630Z ##[endgroup]
+2023-11-12T09:05:35.8824009Z ##[group]/datum/unit_test/teleporter
+2023-11-12T09:05:35.9106477Z [1;32mPASS[0m /datum/unit_test/teleporter 0.1s
+2023-11-12T09:05:35.9109891Z ##[endgroup]
+2023-11-12T09:05:35.9363555Z ##[group]/datum/unit_test/tgui_create_message
+2023-11-12T09:05:35.9367522Z [1;32mPASS[0m /datum/unit_test/tgui_create_message 0s
+2023-11-12T09:05:35.9370812Z ##[endgroup]
+2023-11-12T09:05:35.9501436Z ##[group]/datum/unit_test/timer_sanity
+2023-11-12T09:05:35.9504464Z [1;32mPASS[0m /datum/unit_test/timer_sanity 0s
+2023-11-12T09:05:35.9508070Z ##[endgroup]
+2023-11-12T09:05:35.9637540Z ##[group]/datum/unit_test/trait_addition_and_removal
+2023-11-12T09:05:35.9642216Z [1;32mPASS[0m /datum/unit_test/trait_addition_and_removal 0s
+2023-11-12T09:05:35.9645763Z ##[endgroup]
+2023-11-12T09:05:35.9828636Z ##[group]/datum/unit_test/traitor
+2023-11-12T09:05:37.5946953Z [1;32mPASS[0m /datum/unit_test/traitor 1.6s
+2023-11-12T09:05:37.5948067Z ##[endgroup]
+2023-11-12T09:05:38.4317615Z ##[group]/datum/unit_test/traitor_mail_content_check
+2023-11-12T09:05:38.4490029Z [1;32mPASS[0m /datum/unit_test/traitor_mail_content_check 0s
+2023-11-12T09:05:38.4491508Z ##[endgroup]
+2023-11-12T09:05:38.4962906Z ##[group]/datum/unit_test/trauma_granting
+2023-11-12T09:05:38.5450644Z [1;32mPASS[0m /datum/unit_test/trauma_granting 0.1s
+2023-11-12T09:05:38.5452259Z ##[endgroup]
+2023-11-12T09:05:38.5799327Z ##[group]/datum/unit_test/turf_icons
+2023-11-12T09:05:39.0838086Z [1;32mPASS[0m /datum/unit_test/turf_icons 0.5s
+2023-11-12T09:05:39.0839541Z ##[endgroup]
+2023-11-12T09:05:39.1032413Z ##[group]/datum/unit_test/tutorial_sanity
+2023-11-12T09:05:39.1035529Z [1;32mPASS[0m /datum/unit_test/tutorial_sanity 0s
+2023-11-12T09:05:39.1037920Z ##[endgroup]
+2023-11-12T09:05:39.1166898Z ##[group]/datum/unit_test/verify_config_tags
+2023-11-12T09:05:39.1172282Z [1;32mPASS[0m /datum/unit_test/verify_config_tags 0s
+2023-11-12T09:05:39.1174748Z ##[endgroup]
+2023-11-12T09:05:39.1303312Z ##[group]/datum/unit_test/verify_emoji_names
+2023-11-12T09:05:39.1306816Z [1;32mPASS[0m /datum/unit_test/verify_emoji_names 0s
+2023-11-12T09:05:39.1309155Z ##[endgroup]
+2023-11-12T09:05:39.1436423Z ##[group]/datum/unit_test/moth_food
+2023-11-12T09:05:39.1899509Z [1;32mPASS[0m /datum/unit_test/moth_food 0s
+2023-11-12T09:05:39.1901926Z ##[endgroup]
+2023-11-12T09:05:39.2373626Z ##[group]/datum/unit_test/golem_food
+2023-11-12T09:05:39.2647161Z [1;32mPASS[0m /datum/unit_test/golem_food 0s
+2023-11-12T09:05:39.2649458Z ##[endgroup]
+2023-11-12T09:05:39.2901012Z ##[group]/datum/unit_test/wizard_loadout
+2023-11-12T09:05:39.3687154Z [1;32mPASS[0m /datum/unit_test/wizard_loadout 0.1s
+2023-11-12T09:05:39.3689468Z ##[endgroup]
+2023-11-12T09:05:39.4375880Z ##[group]/datum/unit_test/worn_icons
+2023-11-12T09:05:40.0482290Z [1;32mPASS[0m /datum/unit_test/worn_icons 0.6s
+2023-11-12T09:05:40.0483826Z ##[endgroup]
+2023-11-12T09:05:40.0625703Z ##[group]/datum/unit_test/find_reference_sanity
+2023-11-12T09:05:40.0632296Z [1;32mPASS[0m /datum/unit_test/find_reference_sanity 0s
+2023-11-12T09:05:40.0634532Z ##[endgroup]
+2023-11-12T09:05:40.0765341Z ##[group]/datum/unit_test/find_reference_baseline
+2023-11-12T09:05:40.0771322Z [1;32mPASS[0m /datum/unit_test/find_reference_baseline 0s
+2023-11-12T09:05:40.0773723Z ##[endgroup]
+2023-11-12T09:05:40.0904726Z ##[group]/datum/unit_test/find_reference_exotic
+2023-11-12T09:05:40.0910664Z [1;32mPASS[0m /datum/unit_test/find_reference_exotic 0s
+2023-11-12T09:05:40.0913091Z ##[endgroup]
+2023-11-12T09:05:40.1081989Z ##[group]/datum/unit_test/find_reference_esoteric
+2023-11-12T09:05:40.1091594Z [1;32mPASS[0m /datum/unit_test/find_reference_esoteric 0s
+2023-11-12T09:05:40.1093910Z ##[endgroup]
+2023-11-12T09:05:40.1356236Z ##[group]/datum/unit_test/find_reference_null_key_entry
+2023-11-12T09:05:40.1361917Z [1;32mPASS[0m /datum/unit_test/find_reference_null_key_entry 0s
+2023-11-12T09:05:40.1364019Z ##[endgroup]
+2023-11-12T09:05:40.1495527Z ##[group]/datum/unit_test/find_reference_assoc_investigation
+2023-11-12T09:05:40.1501290Z [1;32mPASS[0m /datum/unit_test/find_reference_assoc_investigation 0s
+2023-11-12T09:05:40.1503468Z ##[endgroup]
+2023-11-12T09:05:40.1629204Z ##[group]/datum/unit_test/find_reference_static_investigation
+2023-11-12T09:05:40.4955432Z [1;32mPASS[0m /datum/unit_test/find_reference_static_investigation 0.3s
+2023-11-12T09:05:40.4956809Z ##[endgroup]
+2023-11-12T09:05:40.5106809Z ##[group]/datum/unit_test/area_contents
+2023-11-12T09:05:41.5891675Z [1;32mPASS[0m /datum/unit_test/area_contents 1s
+2023-11-12T09:05:41.5893012Z ##[endgroup]
+2023-11-12T09:05:41.6151445Z ##[group]/datum/unit_test/atmospherics_sanity
+2023-11-12T09:05:41.6152255Z No starting areas found, defaulting...
+2023-11-12T09:05:41.6155445Z Marking all station areas as goal areas due to marker at (2, 254, 2)
+2023-11-12T09:05:42.2832551Z [1;32mPASS[0m /datum/unit_test/atmospherics_sanity 0.6s
+2023-11-12T09:05:42.2834628Z ##[endgroup]
+2023-11-12T09:05:42.3215674Z ##[group]/datum/unit_test/fish_rescue_hook
+2023-11-12T09:05:49.5841266Z [1;32mPASS[0m /datum/unit_test/fish_rescue_hook 7.2s
+2023-11-12T09:05:49.5842563Z ##[endgroup]
+2023-11-12T09:05:49.6648561Z ##[group]/datum/unit_test/leash/no_teleport
+2023-11-12T09:05:49.7264798Z [1;32mPASS[0m /datum/unit_test/leash/no_teleport 0.1s
+2023-11-12T09:05:49.7267230Z ##[endgroup]
+2023-11-12T09:05:49.7411212Z ##[group]/datum/unit_test/leash/will_teleport
+2023-11-12T09:05:49.7421861Z [1;32mPASS[0m /datum/unit_test/leash/will_teleport 0s
+2023-11-12T09:05:49.7424432Z ##[endgroup]
+2023-11-12T09:05:49.7571233Z ##[group]/datum/unit_test/leash/limit_range
+2023-11-12T09:05:49.7577430Z [1;32mPASS[0m /datum/unit_test/leash/limit_range 0s
+2023-11-12T09:05:49.7579955Z ##[endgroup]
+2023-11-12T09:05:49.7749544Z ##[group]/datum/unit_test/mapload_space_verification
+2023-11-12T09:05:50.3597291Z [1;32mPASS[0m /datum/unit_test/mapload_space_verification 0.6s
+2023-11-12T09:05:50.3598841Z ##[endgroup]
+2023-11-12T09:05:50.3862628Z ##[group]/datum/unit_test/mob_damage
+2023-11-12T09:05:50.4877049Z [1;32mPASS[0m /datum/unit_test/mob_damage 0.1s
+2023-11-12T09:05:50.4878381Z ##[endgroup]
+2023-11-12T09:05:50.5135873Z ##[group]/datum/unit_test/mob_damage/basic
+2023-11-12T09:05:50.5174197Z [1;32mPASS[0m /datum/unit_test/mob_damage/basic 0s
+2023-11-12T09:05:50.5176179Z ##[endgroup]
+2023-11-12T09:05:50.5348335Z ##[group]/datum/unit_test/modify_fantasy_variable
+2023-11-12T09:06:17.8433778Z [1;32mPASS[0m /datum/unit_test/modify_fantasy_variable 27.3s
+2023-11-12T09:06:17.8434791Z ##[endgroup]
+2023-11-12T09:06:24.9200774Z ##[group]/datum/unit_test/monkey_business
+2023-11-12T09:06:44.1178950Z [09:06:44] Runtime in timer.dm,125: Invalid timer: Timer: Timer: 2433 ([0x2100859b]), TTR: 328041, wait:2 Flags: TIMER_CLIENT_TIME, TIMER_STOPPABLE, callBack: [0x2105a831], callBack.object: /datum/looping_sound/showering[0x210085b4](/datum/looping_sound/showering), callBack.delegate:/datum/looping_sound/proc/start_sound_loop(), source: code/datums/looping_sounds/_looping_sound.dm:220Prev: NULL, Next: NULL, SPENT(328041), QDELETED, NO CALLBACK world.time: 942.5, head_offset: 600, practical_offset: 686, REALTIMEOFDAY: 328041
+2023-11-12T09:06:44.1182762Z proc name: fire (/datum/controller/subsystem/timer/fire)
+2023-11-12T09:06:44.1191977Z src: Sound Loops (/datum/controller/subsystem/timer/sound_loops)
+2023-11-12T09:06:44.1192834Z call stack:
+2023-11-12T09:06:44.1193480Z Sound Loops (/datum/controller/subsystem/timer/sound_loops): fire(0)
+2023-11-12T09:06:44.1194547Z Sound Loops (/datum/controller/subsystem/timer/sound_loops): fire(0)
+2023-11-12T09:06:44.1195659Z Sound Loops (/datum/controller/subsystem/timer/sound_loops): ignite(0)
+2023-11-12T09:06:44.1196597Z Master (/datum/controller/master): RunQueue()
+2023-11-12T09:06:44.1201550Z Master (/datum/controller/master): Loop(2)
+2023-11-12T09:06:44.1202483Z Master (/datum/controller/master): StartProcessing(0)
+2023-11-12T09:07:03.3211396Z ##[error][09:06:44] Runtime in timer.dm,125: Invalid timer: Timer: Timer: 2433 ([0x2100859b]), TTR: 328041, wait:2 Flags: TIMER_CLIENT_TIME, TIMER_STOPPABLE, callBack: [0x2105a831], callBack.object: /datum/looping_sound/showering[0x210085b4](/datum/looping_sound/showering), callBack.delegate:/datum/looping_sound/proc/start_sound_loop(), source: code/datums/looping_sounds/_looping_sound.dm:220Prev: NULL, Next: NULL, SPENT(328041), QDELETED, NO CALLBACK world.time: 942.5, head_offset: 600, practical_offset: 686, REALTIMEOFDAY: 328041
+ proc name: fire (/datum/controller/subsystem/timer/fire)
+ src: Sound Loops (/datum/controller/subsystem/timer/sound_loops)
+ call stack:
+ Sound Loops (/datum/controller/subsystem/timer/sound_loops): fire(0)
+ Sound Loops (/datum/controller/subsystem/timer/sound_loops): fire(0)
+ Sound Loops (/datum/controller/subsystem/timer/sound_loops): ignite(0)
+ Master (/datum/controller/master): RunQueue()
+ Master (/datum/controller/master): Loop(2)
+ Master (/datum/controller/master): StartProcessing(0)
+2023-11-12T09:07:03.3224436Z FAILURE #1: [09:06:44] Runtime in timer.dm,125: Invalid timer: Timer: Timer: 2433 ([0x2100859b]), TTR: 328041, wait:2 Flags: TIMER_CLIENT_TIME, TIMER_STOPPABLE, callBack: [0x2105a831], callBack.object: /datum/looping_sound/showering[0x210085b4](/datum/looping_sound/showering), callBack.delegate:/datum/looping_sound/proc/start_sound_loop(), source: code/datums/looping_sounds/_looping_sound.dm:220Prev: NULL, Next: NULL, SPENT(328041), QDELETED, NO CALLBACK world.time: 942.5, head_offset: 600, practical_offset: 686, REALTIMEOFDAY: 328041
+2023-11-12T09:07:03.3226826Z proc name: fire (/datum/controller/subsystem/timer/fire)
+2023-11-12T09:07:03.3227626Z src: Sound Loops (/datum/controller/subsystem/timer/sound_loops)
+2023-11-12T09:07:03.3228077Z call stack:
+2023-11-12T09:07:03.3228462Z Sound Loops (/datum/controller/subsystem/timer/sound_loops): fire(0)
+2023-11-12T09:07:03.3229045Z Sound Loops (/datum/controller/subsystem/timer/sound_loops): fire(0)
+2023-11-12T09:07:03.3229619Z Sound Loops (/datum/controller/subsystem/timer/sound_loops): ignite(0)
+2023-11-12T09:07:03.3230129Z Master (/datum/controller/master): RunQueue()
+2023-11-12T09:07:03.3230524Z Master (/datum/controller/master): Loop(2)
+2023-11-12T09:07:03.3231037Z Master (/datum/controller/master): StartProcessing(0) at timer.dm:125
+2023-11-12T09:07:03.3231712Z ##[endgroup]
+2023-11-12T09:07:03.3232839Z ##[error][1;31mFAIL[0m /datum/unit_test/monkey_business 38.4s
+2023-11-12T09:07:05.4669397Z ##[group]/datum/unit_test/strange_reagent
+2023-11-12T09:07:09.1986629Z [1;32mPASS[0m /datum/unit_test/strange_reagent 3.7s
+2023-11-12T09:07:09.1988202Z ##[endgroup]
+2023-11-12T09:07:11.6843550Z ##[group]/datum/unit_test/create_and_destroy
+2023-11-12T09:07:36.2863567Z No elevator ID for elevator music provided at Test Room (126,126,14).
+2023-11-12T09:08:13.7560132Z [1;32mPASS[0m /datum/unit_test/create_and_destroy 62.1s
+2023-11-12T09:08:13.7561471Z ##[endgroup]
+2023-11-12T09:08:13.7852782Z ##[group]/datum/unit_test/dcs_check_list_arguments
+2023-11-12T09:08:13.7940678Z [1;32mPASS[0m /datum/unit_test/dcs_check_list_arguments 0s
+2023-11-12T09:08:13.7942424Z ##[endgroup]
+2023-11-12T09:08:15.2400236Z Shutting down Chat subsystem...
+2023-11-12T09:08:15.2402039Z Shutting down Init Profiler subsystem...
+2023-11-12T09:08:15.2404881Z Shutting down Ban Cache subsystem...
+2023-11-12T09:08:15.2407209Z Shutting down Stat Panels subsystem...
+2023-11-12T09:08:15.2409633Z Shutting down Explosions subsystem...
+2023-11-12T09:08:15.2412008Z Shutting down Pathfinder subsystem...
+2023-11-12T09:08:15.2414438Z Shutting down Minor Mapping subsystem...
+2023-11-12T09:08:15.2416820Z Shutting down Shuttle subsystem...
+2023-11-12T09:08:15.2420930Z Warning: Subsystem `Shuttle` slept 2 times.
+2023-11-12T09:08:15.2421633Z Shutting down Lighting subsystem...
+2023-11-12T09:08:15.2423743Z Shutting down XKeyScore subsystem...
+2023-11-12T09:08:15.2425667Z Shutting down PRISM subsystem...
+2023-11-12T09:08:15.2427615Z Shutting down Icon Smoothing subsystem...
+2023-11-12T09:08:15.2429451Z Shutting down Assets subsystem...
+2023-11-12T09:08:15.2431258Z Shutting down Vote subsystem...
+2023-11-12T09:08:15.2433223Z Shutting down Persistent Paintings subsystem...
+2023-11-12T09:08:15.2435113Z Shutting down Persistence subsystem...
+2023-11-12T09:08:15.2437033Z Shutting down Atmospherics subsystem...
+2023-11-12T09:08:15.2439009Z Shutting down Wiremod Composite Templates subsystem...
+2023-11-12T09:08:15.2440741Z Shutting down Wet floors subsystem...
+2023-11-12T09:08:15.2443279Z Shutting down Weather subsystem...
+2023-11-12T09:08:15.2445531Z Shutting down Wardrobe subsystem...
+2023-11-12T09:08:15.2447137Z Shutting down Verb Manager subsystem...
+2023-11-12T09:08:15.2448994Z Shutting down Tutorials subsystem...
+2023-11-12T09:08:15.2450888Z Shutting down Transport subsystem...
+2023-11-12T09:08:15.2452762Z Shutting down Traitor subsystem...
+2023-11-12T09:08:15.2454635Z Shutting down Throwing subsystem...
+2023-11-12T09:08:15.2456529Z Shutting down tgui subsystem...
+2023-11-12T09:08:15.2458543Z Shutting down Supermatter Cascade subsystem...
+2023-11-12T09:08:15.2460380Z Shutting down Sun subsystem...
+2023-11-12T09:08:15.2462254Z Shutting down Stock Market subsystem...
+2023-11-12T09:08:15.2464168Z Shutting down Speech Controller subsystem...
+2023-11-12T09:08:15.2466003Z Shutting down Space Drift subsystem...
+2023-11-12T09:08:15.2467944Z Shutting down Smoke subsystem...
+2023-11-12T09:08:15.2469878Z Shutting down Singularity subsystem...
+2023-11-12T09:08:15.2472104Z Shutting down Radioactive Nebula subsystem...
+2023-11-12T09:08:15.2473961Z Shutting down Radio subsystem...
+2023-11-12T09:08:15.2476202Z Shutting down Radiation subsystem...
+2023-11-12T09:08:15.2477898Z Shutting down Projectiles subsystem...
+2023-11-12T09:08:15.2479832Z Shutting down Processing subsystem...
+2023-11-12T09:08:15.2482409Z Shutting down Points of Interest subsystem...
+2023-11-12T09:08:15.2484346Z Shutting down Plumbing subsystem...
+2023-11-12T09:08:15.2486233Z Shutting down Ping subsystem...
+2023-11-12T09:08:15.2488172Z Shutting down Parallax subsystem...
+2023-11-12T09:08:15.2490092Z Shutting down pAI subsystem...
+2023-11-12T09:08:15.2492038Z Shutting down Overlay subsystem...
+2023-11-12T09:08:15.7359113Z Shutting down Objects subsystem...
+2023-11-12T09:08:15.7360449Z Shutting down Obj Tab Items subsystem...
+2023-11-12T09:08:15.7363590Z Shutting down NPC Pool subsystem...
+2023-11-12T09:08:15.7365241Z Shutting down Night Shift subsystem...
+2023-11-12T09:08:15.7367764Z Shutting down Movement Loops subsystem...
+2023-11-12T09:08:15.7369511Z Shutting down Movement Handler subsystem...
+2023-11-12T09:08:15.7371589Z Shutting down MouseEntered subsystem...
+2023-11-12T09:08:15.7373527Z Shutting down Mood subsystem...
+2023-11-12T09:08:15.7375649Z Shutting down Modular Computers subsystem...
+2023-11-12T09:08:15.7377558Z Shutting down Mobs subsystem...
+2023-11-12T09:08:15.7379600Z Shutting down Materials subsystem...
+2023-11-12T09:08:15.7381572Z Shutting down Lua Scripting subsystem...
+2023-11-12T09:08:15.7505514Z Shutting down Library Loading subsystem...
+2023-11-12T09:08:15.7507489Z Shutting down Lag Switch subsystem...
+2023-11-12T09:08:15.7509583Z Shutting down Idling NPC Pool subsystem...
+2023-11-12T09:08:15.7511671Z Shutting down Hyperspace Drift subsystem...
+2023-11-12T09:08:15.7513591Z Shutting down Foam subsystem...
+2023-11-12T09:08:15.7515516Z Shutting down Fluid subsystem...
+2023-11-12T09:08:15.7517494Z Shutting down Fishing subsystem...
+2023-11-12T09:08:15.7519635Z Shutting down Fast Processing subsystem...
+2023-11-12T09:08:15.7521688Z Shutting down Escape Menu subsystem...
+2023-11-12T09:08:15.7523697Z Shutting down Eigenstates subsystem...
+2023-11-12T09:08:15.7525621Z Shutting down Disease subsystem...
+2023-11-12T09:08:15.7527699Z Shutting down Digital Clocks subsystem...
+2023-11-12T09:08:15.7529722Z Shutting down Datum Component System subsystem...
+2023-11-12T09:08:15.7531714Z Shutting down Conveyor Belts subsystem...
+2023-11-12T09:08:15.7533950Z Shutting down Communications subsystem...
+2023-11-12T09:08:15.7536091Z Shutting down Clock Component subsystem...
+2023-11-12T09:08:15.7538058Z Shutting down Cliff Falling subsystem...
+2023-11-12T09:08:15.7540124Z Shutting down Circuit Components subsystem...
+2023-11-12T09:08:15.7542040Z Shutting down Burning subsystem...
+2023-11-12T09:08:15.7544007Z Shutting down Blackmarket subsystem...
+2023-11-12T09:08:15.7545998Z Shutting down Basic Avoidance subsystem...
+2023-11-12T09:08:15.7547937Z Shutting down Aura Healing subsystem...
+2023-11-12T09:08:15.7549860Z Shutting down Augury subsystem...
+2023-11-12T09:08:15.7552123Z Shutting down Asset Loading subsystem...
+2023-11-12T09:08:15.7553815Z Shutting down Area Contents subsystem...
+2023-11-12T09:08:15.7555740Z Shutting down Antag HUDs subsystem...
+2023-11-12T09:08:15.7557720Z Shutting down Ambience subsystem...
+2023-11-12T09:08:15.7559697Z Shutting down Addiction subsystem...
+2023-11-12T09:08:15.7562910Z Shutting down Acid subsystem...
+2023-11-12T09:08:15.7564740Z Shutting down Timer subsystem...
+2023-11-12T09:08:15.7566504Z Shutting down Sound Loops subsystem...
+2023-11-12T09:08:15.7568731Z Shutting down Runechat subsystem...
+2023-11-12T09:08:15.7570746Z Shutting down Queue Links subsystem...
+2023-11-12T09:08:15.7572695Z Shutting down Skills subsystem...
+2023-11-12T09:08:15.7574685Z Shutting down Machines subsystem...
+2023-11-12T09:08:15.7576634Z Shutting down Language subsystem...
+2023-11-12T09:08:15.7578608Z Shutting down Atoms subsystem...
+2023-11-12T09:08:15.7601367Z Shutting down Text To Speech subsystem...
+2023-11-12T09:08:15.7603675Z Shutting down Restaurant subsystem...
+2023-11-12T09:08:15.7605588Z Shutting down Economy subsystem...
+2023-11-12T09:08:15.7607616Z Shutting down Spatial Grid subsystem...
+2023-11-12T09:08:15.7609600Z Shutting down Time Tracking subsystem...
+2023-11-12T09:08:15.7611597Z Shutting down Research subsystem...
+2023-11-12T09:08:15.7613755Z Shutting down Early Assets subsystem...
+2023-11-12T09:08:15.7615768Z Shutting down Mapping subsystem...
+2023-11-12T09:08:15.7617822Z Shutting down Trading Card Game subsystem...
+2023-11-12T09:08:15.7619966Z Shutting down Ticker subsystem...
+2023-11-12T09:08:15.7622043Z Warning: Subsystem `Ticker` slept 1 times.
+2023-11-12T09:08:15.7644481Z Unable to locate admins backup file.
+2023-11-12T09:08:15.7654489Z Shutting down AI Controller Ticker subsystem...
+2023-11-12T09:08:15.7656545Z Shutting down AI Behavior Ticker subsystem...
+2023-11-12T09:08:15.7658539Z Shutting down AI movement subsystem...
+2023-11-12T09:08:15.7660519Z Shutting down Jobs subsystem...
+2023-11-12T09:08:15.7662633Z Shutting down IDs and Access subsystem...
+2023-11-12T09:08:15.7664623Z Shutting down Events subsystem...
+2023-11-12T09:08:15.7666630Z Shutting down Reagents subsystem...
+2023-11-12T09:08:15.7668611Z Shutting down Quirks subsystem...
+2023-11-12T09:08:15.7670631Z Shutting down Station subsystem...
+2023-11-12T09:08:15.7672688Z Shutting down Achievements subsystem...
+2023-11-12T09:08:15.7674715Z Shutting down Discord subsystem...
+2023-11-12T09:08:15.7676785Z Shutting down Security Level subsystem...
+2023-11-12T09:08:15.7678830Z Shutting down Vis contents overlays subsystem...
+2023-11-12T09:08:15.7680780Z Shutting down Greyscale subsystem...
+2023-11-12T09:08:15.7683265Z Shutting down Instruments subsystem...
+2023-11-12T09:08:15.7685284Z Shutting down Sounds subsystem...
+2023-11-12T09:08:15.7687269Z Shutting down Input subsystem...
+2023-11-12T09:08:15.7689286Z Shutting down Server Tasks subsystem...
+2023-11-12T09:08:15.7691440Z Shutting down Blackbox subsystem...
+2023-11-12T09:08:15.7700214Z Shutting down Database subsystem...
+2023-11-12T09:08:15.7709204Z Shutting down Garbage subsystem...
+2023-11-12T09:08:18.8763587Z Shutting down Title Screen subsystem...
+2023-11-12T09:08:18.8783727Z Shutting down Profiler subsystem...
+2023-11-12T09:08:18.8789879Z Shutdown complete
+2023-11-12T09:08:18.8797124Z Test run failed!
+2023-11-12T09:08:18.8797462Z Total runtimes: 1
+2023-11-12T09:08:18.8797716Z Unit Tests failed!
+2023-11-12T09:08:22.0106377Z cat: ci_test/data/logs/ci/clean_run.lk: No such file or directory
+2023-11-12T09:08:22.0116872Z ##[error]Process completed with exit code 1.
+2023-11-12T09:08:22.0170857Z ##[group]Run actions/upload-artifact@v3
+2023-11-12T09:08:22.0171222Z with:
+2023-11-12T09:08:22.0171467Z name: test_artifacts_tramstation
+2023-11-12T09:08:22.0171798Z path: data/screenshots_new/
+2023-11-12T09:08:22.0172089Z retention-days: 1
+2023-11-12T09:08:22.0172354Z if-no-files-found: warn
+2023-11-12T09:08:22.0172621Z ##[endgroup]
+2023-11-12T09:08:22.1010805Z With the provided path, there will be 77 files uploaded
+2023-11-12T09:08:22.1013040Z Starting artifact upload
+2023-11-12T09:08:22.1014930Z For more detailed logs during the artifact upload process, enable step-debugging: https://docs.github.com/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging
+2023-11-12T09:08:22.1016085Z Artifact name is valid!
+2023-11-12T09:08:22.1655325Z Container for artifact "test_artifacts_tramstation" successfully created. Starting upload of file(s)
+2023-11-12T09:08:25.4511686Z Total size of all the files uploaded is 104264 bytes
+2023-11-12T09:08:25.4513089Z File upload process has finished. Finalizing the artifact upload
+2023-11-12T09:08:25.4967864Z Artifact has been finalized. All files have been successfully uploaded!
+2023-11-12T09:08:25.4968795Z
+2023-11-12T09:08:25.4969438Z The raw size of all the files that were specified for upload is 104534 bytes
+2023-11-12T09:08:25.4995080Z The size of all the files that were uploaded is 104264 bytes. This takes into account any gzip compression used to reduce the upload size, time and storage
+2023-11-12T09:08:25.4996373Z
+2023-11-12T09:08:25.5000590Z Note: The size of downloaded zips can differ significantly from the reported size. For more information see: https://github.com/actions/upload-artifact#zipped-artifact-downloads
+2023-11-12T09:08:25.5002432Z
+2023-11-12T09:08:25.5002844Z Artifact test_artifacts_tramstation has been successfully uploaded!
+2023-11-12T09:08:25.5131976Z ##[group]Run tgstation/byond-client-compatibility-check@v3
+2023-11-12T09:08:25.5132416Z with:
+2023-11-12T09:08:25.5132646Z dmb-location: tgstation.dmb
+2023-11-12T09:08:25.5132971Z max-required-client-version: 514
+2023-11-12T09:08:25.5133284Z ##[endgroup]
+2023-11-12T09:08:25.5322365Z ##[group]Run (( 514 ))
+2023-11-12T09:08:25.5322641Z [36;1m(( 514 ))[0m
+2023-11-12T09:08:25.5367699Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
+2023-11-12T09:08:25.5368129Z ##[endgroup]
+2023-11-12T09:08:25.5463568Z ##[group]Run echo "required-client-version=$(( $( head -n2 tgstation.dmb | tail -n1 | cut -d " " -f 4 ) ))" >> $GITHUB_OUTPUT
+2023-11-12T09:08:25.5464593Z [36;1mecho "required-client-version=$(( $( head -n2 tgstation.dmb | tail -n1 | cut -d " " -f 4 ) ))" >> $GITHUB_OUTPUT[0m
+2023-11-12T09:08:25.5503899Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
+2023-11-12T09:08:25.5504317Z ##[endgroup]
+2023-11-12T09:08:25.5643709Z ##[group]Run (( 514 <= 514 ))
+2023-11-12T09:08:25.5644042Z [36;1m(( 514 <= 514 ))[0m
+2023-11-12T09:08:25.5682534Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
+2023-11-12T09:08:25.5682953Z ##[endgroup]
+2023-11-12T09:08:25.5835969Z Post job cleanup.
+2023-11-12T09:08:25.6654082Z [command]/usr/bin/git version
+2023-11-12T09:08:25.6698640Z git version 2.42.0
+2023-11-12T09:08:25.6737360Z Temporarily overriding HOME='/home/runner/work/_temp/8c7eca89-05a8-49f5-91d4-2ad2b8c1f35c' before making global git config changes
+2023-11-12T09:08:25.6738762Z Adding repository directory to the temporary git global config as a safe directory
+2023-11-12T09:08:25.6742986Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2023-11-12T09:08:25.6784154Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2023-11-12T09:08:25.6822086Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
+2023-11-12T09:08:25.7132368Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2023-11-12T09:08:25.7163927Z http.https://github.com/.extraheader
+2023-11-12T09:08:25.7175279Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
+2023-11-12T09:08:25.7216423Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
+2023-11-12T09:08:25.7590917Z Print service container logs: c43e2a4f7a0044eda3c3640d7583be1f_mysqllatest_210664
+2023-11-12T09:08:25.7595897Z ##[command]/usr/bin/docker logs --details 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T09:08:25.7722763Z 2023-11-12 08:59:57+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.2.0-1.el8 started.
+2023-11-12T09:08:25.7724170Z 2023-11-12 08:59:57+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
+2023-11-12T09:08:25.7726315Z 2023-11-12T08:59:57.323609Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
+2023-11-12T09:08:25.7728493Z 2023-11-12T08:59:57.324887Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2023-11-12T09:08:25.7730639Z 2023-11-12 08:59:57+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.2.0-1.el8 started.
+2023-11-12T09:08:25.7731931Z 2023-11-12 08:59:57+00:00 [Note] [Entrypoint]: Initializing database files
+2023-11-12T09:08:25.7733478Z 2023-11-12T08:59:57.324980Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.2.0) initializing of server in progress as process 80
+2023-11-12T09:08:25.7735422Z 2023-11-12T08:59:57.329733Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2023-11-12T09:08:25.7736806Z 2023-11-12T08:59:57.538012Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2023-11-12T09:08:25.7737953Z 2023-11-12 09:00:00+00:00 [Note] [Entrypoint]: Database files initialized
+2023-11-12T09:08:25.7738945Z 2023-11-12 09:00:00+00:00 [Note] [Entrypoint]: Starting temporary server
+2023-11-12T09:08:25.7739945Z 2023-11-12 09:00:00+00:00 [Note] [Entrypoint]: Temporary server started.
+2023-11-12T09:08:25.7740898Z '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
+2023-11-12T09:08:25.7741615Z
+2023-11-12T09:08:25.7742199Z 2023-11-12 09:00:02+00:00 [Note] [Entrypoint]: Stopping temporary server
+2023-11-12T09:08:25.7743236Z 2023-11-12 09:00:03+00:00 [Note] [Entrypoint]: Temporary server stopped
+2023-11-12T09:08:25.7744003Z
+2023-11-12T09:08:25.7744708Z 2023-11-12 09:00:03+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
+2023-11-12T09:08:25.7746704Z 2023-11-12T08:59:58.210653Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
+2023-11-12T09:08:25.7748648Z 2023-11-12T09:00:00.300732Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
+2023-11-12T09:08:25.7749899Z 2023-11-12T09:00:00.347787Z 0 [System] [MY-015015] [Server] MySQL Server - start.
+2023-11-12T09:08:25.7751901Z 2023-11-12T09:00:00.530321Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2023-11-12T09:08:25.7754106Z 2023-11-12T09:00:00.531123Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.2.0) starting as process 124
+2023-11-12T09:08:25.7756278Z 2023-11-12T09:00:00.541412Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2023-11-12T09:08:25.7757517Z 2023-11-12T09:00:00.630355Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2023-11-12T09:08:25.7758462Z 2023-11-12T09:00:00.815198Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2023-11-12T09:08:25.7759637Z 2023-11-12T09:00:00.815226Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2023-11-12T09:08:25.7761631Z 2023-11-12T09:00:00.816463Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2023-11-12T09:08:25.7763033Z 2023-11-12T09:00:00.828404Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
+2023-11-12T09:08:25.7764603Z 2023-11-12T09:00:00.828529Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.2.0' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
+2023-11-12T09:08:25.7765734Z 2023-11-12T09:00:00.829953Z 0 [System] [MY-015016] [Server] MySQL Server - end.
+2023-11-12T09:08:25.7766430Z Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
+2023-11-12T09:08:25.7767184Z Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
+2023-11-12T09:08:25.7767935Z Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
+2023-11-12T09:08:25.7768649Z Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
+2023-11-12T09:08:25.7769346Z Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
+2023-11-12T09:08:25.7770052Z Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
+2023-11-12T09:08:25.7770961Z 2023-11-12T09:00:02.470903Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.2.0).
+2023-11-12T09:08:25.7772265Z 2023-11-12T09:00:03.257971Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.2.0) MySQL Community Server - GPL.
+2023-11-12T09:08:25.7773173Z 2023-11-12T09:00:03.260270Z 0 [System] [MY-015016] [Server] MySQL Server - end.
+2023-11-12T09:08:25.7773836Z 2023-11-12T09:00:03.482460Z 0 [System] [MY-015015] [Server] MySQL Server - start.
+2023-11-12T09:08:25.7774963Z 2023-11-12T09:00:03.659729Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2023-11-12T09:08:25.7776201Z 2023-11-12T09:00:03.661194Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.2.0) starting as process 1
+2023-11-12T09:08:25.7777020Z 2023-11-12T09:00:03.666529Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2023-11-12T09:08:25.7777756Z 2023-11-12T09:00:03.752233Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2023-11-12T09:08:25.7778518Z 2023-11-12T09:00:03.907357Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2023-11-12T09:08:25.7779564Z 2023-11-12T09:00:03.907387Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2023-11-12T09:08:25.7781056Z 2023-11-12T09:00:03.908492Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2023-11-12T09:08:25.7782533Z 2023-11-12T09:00:03.922214Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
+2023-11-12T09:08:25.7783946Z 2023-11-12T09:00:03.922317Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.2.0' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
+2023-11-12T09:08:25.7784877Z
+2023-11-12T09:08:25.7790536Z Stop and remove container: c43e2a4f7a0044eda3c3640d7583be1f_mysqllatest_210664
+2023-11-12T09:08:25.7796028Z ##[command]/usr/bin/docker rm --force 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T09:08:26.0454956Z 37a3cfd21d3298b61164877b4eaf9717ee52eda64115ae9cd1aef5206d293ded
+2023-11-12T09:08:26.0480580Z Remove container network: github_network_bc2270e2d9644957ba98982ec5cf35f2
+2023-11-12T09:08:26.0487395Z ##[command]/usr/bin/docker network rm github_network_bc2270e2d9644957ba98982ec5cf35f2
+2023-11-12T09:08:26.3137535Z github_network_bc2270e2d9644957ba98982ec5cf35f2
+2023-11-12T09:08:26.3289510Z Cleaning up orphan processes
diff --git a/tools/pull_request_hooks/flakyTestPayloads/monkey_business.txt b/tools/pull_request_hooks/flakyTestPayloads/monkey_business.txt
new file mode 100644
index 0000000000000..a52375357a073
--- /dev/null
+++ b/tools/pull_request_hooks/flakyTestPayloads/monkey_business.txt
@@ -0,0 +1,2451 @@
+2022-11-01T15:22:09.7007979Z Requested labels: ubuntu-20.04
+2022-11-01T15:22:09.7008038Z Job defined at: tgstation/tgstation/.github/workflows/ci_suite.yml@refs/pull/70980/merge
+2022-11-01T15:22:09.7008063Z Waiting for a runner to pick up this job...
+2022-11-01T15:22:10.2221600Z Job is waiting for a hosted runner to come online.
+2022-11-01T15:22:14.3820892Z Job is about to start running on the hosted runner: GitHub Actions 16 (hosted)
+2022-11-01T15:22:17.2355862Z Current runner version: '2.298.2'
+2022-11-01T15:22:17.2393184Z ##[group]Operating System
+2022-11-01T15:22:17.2393885Z Ubuntu
+2022-11-01T15:22:17.2394168Z 20.04.5
+2022-11-01T15:22:17.2394933Z LTS
+2022-11-01T15:22:17.2395251Z ##[endgroup]
+2022-11-01T15:22:17.2395537Z ##[group]Runner Image
+2022-11-01T15:22:17.2395920Z Image: ubuntu-20.04
+2022-11-01T15:22:17.2396312Z Version: 20221027.1
+2022-11-01T15:22:17.2396868Z Included Software: https://github.com/actions/runner-images/blob/ubuntu20/20221027.1/images/linux/Ubuntu2004-Readme.md
+2022-11-01T15:22:17.2397529Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu20%2F20221027.1
+2022-11-01T15:22:17.2398002Z ##[endgroup]
+2022-11-01T15:22:17.2398309Z ##[group]Runner Image Provisioner
+2022-11-01T15:22:17.2398710Z 2.0.91.1
+2022-11-01T15:22:17.2399019Z ##[endgroup]
+2022-11-01T15:22:17.2399973Z ##[group]GITHUB_TOKEN Permissions
+2022-11-01T15:22:17.2400709Z Actions: read
+2022-11-01T15:22:17.2401056Z Checks: read
+2022-11-01T15:22:17.2401569Z Contents: read
+2022-11-01T15:22:17.2401976Z Deployments: read
+2022-11-01T15:22:17.2402321Z Discussions: read
+2022-11-01T15:22:17.2402709Z Issues: read
+2022-11-01T15:22:17.2402981Z Metadata: read
+2022-11-01T15:22:17.2403324Z Packages: read
+2022-11-01T15:22:17.2403646Z Pages: read
+2022-11-01T15:22:17.2403926Z PullRequests: read
+2022-11-01T15:22:17.2404338Z RepositoryProjects: read
+2022-11-01T15:22:17.2404945Z SecurityEvents: read
+2022-11-01T15:22:17.2405240Z Statuses: read
+2022-11-01T15:22:17.2405577Z ##[endgroup]
+2022-11-01T15:22:17.2410281Z Secret source: None
+2022-11-01T15:22:17.2410802Z Prepare workflow directory
+2022-11-01T15:22:17.3953802Z Prepare all required actions
+2022-11-01T15:22:17.4201039Z Getting action download info
+2022-11-01T15:22:17.6939075Z Download action repository 'actions/checkout@v3' (SHA:93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8)
+2022-11-01T15:22:18.9161379Z Download action repository 'actions/cache@v3' (SHA:1c73980b09e7aea7201f325a7aa3ad00beddcdda)
+2022-11-01T15:22:20.3064444Z Download action repository 'actions/upload-artifact@v3' (SHA:83fd05a356d7e2593de66fc9913b3002723633cb)
+2022-11-01T15:22:21.5263114Z ##[group]Checking docker version
+2022-11-01T15:22:21.5284545Z ##[command]/usr/bin/docker version --format '{{.Server.APIVersion}}'
+2022-11-01T15:22:21.7821858Z '1.41'
+2022-11-01T15:22:21.7840681Z Docker daemon API version: '1.41'
+2022-11-01T15:22:21.7841209Z ##[command]/usr/bin/docker version --format '{{.Client.APIVersion}}'
+2022-11-01T15:22:21.8152000Z '1.41'
+2022-11-01T15:22:21.8176781Z Docker client API version: '1.41'
+2022-11-01T15:22:21.8186583Z ##[endgroup]
+2022-11-01T15:22:21.8192234Z ##[group]Clean up resources from previous jobs
+2022-11-01T15:22:21.8200740Z ##[command]/usr/bin/docker ps --all --quiet --no-trunc --filter "label=8d5581"
+2022-11-01T15:22:21.8479497Z ##[command]/usr/bin/docker network prune --force --filter "label=8d5581"
+2022-11-01T15:22:21.8756254Z ##[endgroup]
+2022-11-01T15:22:21.8756617Z ##[group]Create local container network
+2022-11-01T15:22:21.8773847Z ##[command]/usr/bin/docker network create --label 8d5581 github_network_7d8483aa88b2460d91b946ac72079065
+2022-11-01T15:22:21.9692504Z e63735eb313884b0b3c2a30de089b7ac7f9db8f270d21a7e96d5dfa805d1dc67
+2022-11-01T15:22:21.9707619Z ##[endgroup]
+2022-11-01T15:22:21.9833163Z ##[group]Starting mysql service container
+2022-11-01T15:22:21.9860217Z ##[command]/usr/bin/docker pull mysql:latest
+2022-11-01T15:22:23.3081644Z latest: Pulling from library/mysql
+2022-11-01T15:22:23.6553709Z d67a603b911a: Pulling fs layer
+2022-11-01T15:22:23.6554244Z 0cf69c8f1492: Pulling fs layer
+2022-11-01T15:22:23.6554502Z a5ee239a0d3a: Pulling fs layer
+2022-11-01T15:22:23.6554752Z 0f166cb3e327: Pulling fs layer
+2022-11-01T15:22:23.6555140Z 882d294bf188: Pulling fs layer
+2022-11-01T15:22:23.6555590Z 2649fc7eb806: Pulling fs layer
+2022-11-01T15:22:23.6555993Z bddb3394e2e3: Pulling fs layer
+2022-11-01T15:22:23.6556266Z 93c83d9a2206: Pulling fs layer
+2022-11-01T15:22:23.6556762Z 99d7f45787c0: Pulling fs layer
+2022-11-01T15:22:23.6557007Z 234663a2e3ee: Pulling fs layer
+2022-11-01T15:22:23.6557699Z 74531487bb7b: Pulling fs layer
+2022-11-01T15:22:23.6557925Z 882d294bf188: Waiting
+2022-11-01T15:22:23.6558139Z 2649fc7eb806: Waiting
+2022-11-01T15:22:23.6558335Z bddb3394e2e3: Waiting
+2022-11-01T15:22:23.6558547Z 93c83d9a2206: Waiting
+2022-11-01T15:22:23.6558750Z 99d7f45787c0: Waiting
+2022-11-01T15:22:23.6558937Z 234663a2e3ee: Waiting
+2022-11-01T15:22:23.6559142Z 74531487bb7b: Waiting
+2022-11-01T15:22:23.6559540Z 0f166cb3e327: Waiting
+2022-11-01T15:22:23.9867293Z a5ee239a0d3a: Verifying Checksum
+2022-11-01T15:22:23.9867941Z a5ee239a0d3a: Download complete
+2022-11-01T15:22:24.0450086Z 0cf69c8f1492: Verifying Checksum
+2022-11-01T15:22:24.0453075Z 0cf69c8f1492: Download complete
+2022-11-01T15:22:24.3464913Z 0f166cb3e327: Verifying Checksum
+2022-11-01T15:22:24.3465310Z 0f166cb3e327: Download complete
+2022-11-01T15:22:24.3517047Z 882d294bf188: Verifying Checksum
+2022-11-01T15:22:24.3518202Z 882d294bf188: Download complete
+2022-11-01T15:22:24.6730495Z 2649fc7eb806: Verifying Checksum
+2022-11-01T15:22:24.6731468Z 2649fc7eb806: Download complete
+2022-11-01T15:22:25.0002710Z 93c83d9a2206: Verifying Checksum
+2022-11-01T15:22:25.0003976Z 93c83d9a2206: Download complete
+2022-11-01T15:22:25.1541923Z bddb3394e2e3: Verifying Checksum
+2022-11-01T15:22:25.1542827Z bddb3394e2e3: Download complete
+2022-11-01T15:22:25.4166178Z d67a603b911a: Verifying Checksum
+2022-11-01T15:22:25.4167080Z d67a603b911a: Download complete
+2022-11-01T15:22:25.4830760Z 234663a2e3ee: Verifying Checksum
+2022-11-01T15:22:25.4846538Z 234663a2e3ee: Download complete
+2022-11-01T15:22:25.7381703Z 74531487bb7b: Verifying Checksum
+2022-11-01T15:22:25.7382588Z 74531487bb7b: Download complete
+2022-11-01T15:22:25.8527402Z 99d7f45787c0: Verifying Checksum
+2022-11-01T15:22:25.8549349Z 99d7f45787c0: Download complete
+2022-11-01T15:22:27.1417789Z d67a603b911a: Pull complete
+2022-11-01T15:22:28.0615469Z 0cf69c8f1492: Pull complete
+2022-11-01T15:22:28.1630064Z a5ee239a0d3a: Pull complete
+2022-11-01T15:22:28.4630683Z 0f166cb3e327: Pull complete
+2022-11-01T15:22:28.5470127Z 882d294bf188: Pull complete
+2022-11-01T15:22:28.6222715Z 2649fc7eb806: Pull complete
+2022-11-01T15:22:30.8200860Z bddb3394e2e3: Pull complete
+2022-11-01T15:22:30.8846376Z 93c83d9a2206: Pull complete
+2022-11-01T15:22:36.7604768Z 99d7f45787c0: Pull complete
+2022-11-01T15:22:36.8357942Z 234663a2e3ee: Pull complete
+2022-11-01T15:22:36.9012415Z 74531487bb7b: Pull complete
+2022-11-01T15:22:36.9094455Z Digest: sha256:d4055451e7f42869e64089a60d1abc9e66eccde2910629f0dd666b53a5f230d8
+2022-11-01T15:22:36.9127968Z Status: Downloaded newer image for mysql:latest
+2022-11-01T15:22:36.9154819Z docker.io/library/mysql:latest
+2022-11-01T15:22:36.9298550Z ##[command]/usr/bin/docker create --name e281b5d836644f53b33d06a88663b086_mysqllatest_c6a68e --label 8d5581 --network github_network_7d8483aa88b2460d91b946ac72079065 --network-alias mysql -p 3306 --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 -e "MYSQL_ROOT_PASSWORD=root" -e GITHUB_ACTIONS=true -e CI=true mysql:latest
+2022-11-01T15:22:36.9879151Z cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:36.9911210Z ##[command]/usr/bin/docker start cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:37.4755521Z cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:37.4795933Z ##[command]/usr/bin/docker ps --all --filter id=cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1 --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
+2022-11-01T15:22:37.5113258Z cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1 Up Less than a second (health: starting)
+2022-11-01T15:22:37.5177404Z ##[command]/usr/bin/docker port cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:37.5462051Z 3306/tcp -> 0.0.0.0:49153
+2022-11-01T15:22:37.5464354Z 3306/tcp -> :::49153
+2022-11-01T15:22:37.5587024Z ##[endgroup]
+2022-11-01T15:22:37.5587360Z ##[group]Waiting for all services to be ready
+2022-11-01T15:22:37.5644998Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:37.5931031Z starting
+2022-11-01T15:22:37.5967460Z mysql service is starting, waiting 2 seconds before checking again.
+2022-11-01T15:22:39.5985654Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:39.6392920Z starting
+2022-11-01T15:22:39.6411834Z mysql service is starting, waiting 4 seconds before checking again.
+2022-11-01T15:22:43.7096918Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:43.7721367Z starting
+2022-11-01T15:22:43.7737289Z mysql service is starting, waiting 8 seconds before checking again.
+2022-11-01T15:22:51.9262367Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:22:51.9505260Z starting
+2022-11-01T15:22:51.9522218Z mysql service is starting, waiting 13 seconds before checking again.
+2022-11-01T15:23:05.2771619Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:23:05.3013771Z healthy
+2022-11-01T15:23:05.3024538Z mysql service is healthy.
+2022-11-01T15:23:05.3024986Z ##[endgroup]
+2022-11-01T15:23:05.3498117Z ##[group]Run actions/checkout@v3
+2022-11-01T15:23:05.3498404Z with:
+2022-11-01T15:23:05.3498607Z repository: tgstation/tgstation
+2022-11-01T15:23:05.3499131Z token: ***
+2022-11-01T15:23:05.3499336Z ssh-strict: true
+2022-11-01T15:23:05.3499566Z persist-credentials: true
+2022-11-01T15:23:05.3499930Z clean: true
+2022-11-01T15:23:05.3500134Z fetch-depth: 1
+2022-11-01T15:23:05.3500323Z lfs: false
+2022-11-01T15:23:05.3500668Z submodules: false
+2022-11-01T15:23:05.3500890Z set-safe-directory: true
+2022-11-01T15:23:05.3501110Z ##[endgroup]
+2022-11-01T15:23:05.7431946Z Syncing repository: tgstation/tgstation
+2022-11-01T15:23:05.7434241Z ##[group]Getting Git version info
+2022-11-01T15:23:05.7435150Z Working directory is '/home/runner/work/tgstation/tgstation'
+2022-11-01T15:23:05.7435653Z [command]/usr/bin/git version
+2022-11-01T15:23:05.7647982Z git version 2.38.1
+2022-11-01T15:23:05.7683915Z ##[endgroup]
+2022-11-01T15:23:05.7710794Z Temporarily overriding HOME='/home/runner/work/_temp/a63c17da-7308-4a9e-856a-69236f785151' before making global git config changes
+2022-11-01T15:23:05.7711429Z Adding repository directory to the temporary git global config as a safe directory
+2022-11-01T15:23:05.7718974Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2022-11-01T15:23:05.7791610Z Deleting the contents of '/home/runner/work/tgstation/tgstation'
+2022-11-01T15:23:05.7800753Z ##[group]Initializing the repository
+2022-11-01T15:23:05.7810526Z [command]/usr/bin/git init /home/runner/work/tgstation/tgstation
+2022-11-01T15:23:05.7999555Z hint: Using 'master' as the name for the initial branch. This default branch name
+2022-11-01T15:23:05.8000657Z hint: is subject to change. To configure the initial branch name to use in all
+2022-11-01T15:23:05.8001229Z hint: of your new repositories, which will suppress this warning, call:
+2022-11-01T15:23:05.8001635Z hint:
+2022-11-01T15:23:05.8002546Z hint: git config --global init.defaultBranch
+2022-11-01T15:23:05.8003017Z hint:
+2022-11-01T15:23:05.8003562Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
+2022-11-01T15:23:05.8004498Z hint: 'development'. The just-created branch can be renamed via this command:
+2022-11-01T15:23:05.8006177Z hint:
+2022-11-01T15:23:05.8006532Z hint: git branch -m
+2022-11-01T15:23:05.8016074Z Initialized empty Git repository in /home/runner/work/tgstation/tgstation/.git/
+2022-11-01T15:23:05.8029083Z [command]/usr/bin/git remote add origin https://github.com/tgstation/tgstation
+2022-11-01T15:23:05.8108132Z ##[endgroup]
+2022-11-01T15:23:05.8110681Z ##[group]Disabling automatic garbage collection
+2022-11-01T15:23:05.8113311Z [command]/usr/bin/git config --local gc.auto 0
+2022-11-01T15:23:05.8153161Z ##[endgroup]
+2022-11-01T15:23:05.8153891Z ##[group]Setting up auth
+2022-11-01T15:23:05.8163234Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2022-11-01T15:23:05.8203566Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
+2022-11-01T15:23:05.8796996Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2022-11-01T15:23:05.8820643Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
+2022-11-01T15:23:05.9097833Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
+2022-11-01T15:23:05.9154264Z ##[endgroup]
+2022-11-01T15:23:05.9155507Z ##[group]Fetching the repository
+2022-11-01T15:23:05.9167693Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +90d58213531368fd97e9955fe80b75ad69c20f24:refs/remotes/pull/70980/merge
+2022-11-01T15:23:06.8635625Z remote: Enumerating objects: 12567, done.
+2022-11-01T15:23:06.8636451Z remote: Counting objects: 0% (1/12567)
+2022-11-01T15:23:06.8650219Z remote: Counting objects: 1% (126/12567)
+2022-11-01T15:23:06.8660754Z remote: Counting objects: 2% (252/12567)
+2022-11-01T15:23:06.8672560Z remote: Counting objects: 3% (378/12567)
+2022-11-01T15:23:06.8672977Z remote: Counting objects: 4% (503/12567)
+2022-11-01T15:23:06.8673376Z remote: Counting objects: 5% (629/12567)
+2022-11-01T15:23:06.8675482Z remote: Counting objects: 6% (755/12567)
+2022-11-01T15:23:06.8675791Z remote: Counting objects: 7% (880/12567)
+2022-11-01T15:23:06.9160118Z remote: Counting objects: 8% (1006/12567)
+2022-11-01T15:23:06.9160767Z remote: Counting objects: 9% (1132/12567)
+2022-11-01T15:23:06.9161166Z remote: Counting objects: 10% (1257/12567)
+2022-11-01T15:23:06.9161566Z remote: Counting objects: 11% (1383/12567)
+2022-11-01T15:23:06.9161964Z remote: Counting objects: 12% (1509/12567)
+2022-11-01T15:23:06.9162324Z remote: Counting objects: 13% (1634/12567)
+2022-11-01T15:23:06.9162700Z remote: Counting objects: 14% (1760/12567)
+2022-11-01T15:23:06.9163069Z remote: Counting objects: 15% (1886/12567)
+2022-11-01T15:23:06.9163437Z remote: Counting objects: 16% (2011/12567)
+2022-11-01T15:23:06.9163808Z remote: Counting objects: 17% (2137/12567)
+2022-11-01T15:23:06.9164357Z remote: Counting objects: 18% (2263/12567)
+2022-11-01T15:23:06.9165066Z remote: Counting objects: 19% (2388/12567)
+2022-11-01T15:23:06.9165451Z remote: Counting objects: 20% (2514/12567)
+2022-11-01T15:23:06.9165800Z remote: Counting objects: 21% (2640/12567)
+2022-11-01T15:23:06.9166097Z remote: Counting objects: 22% (2765/12567)
+2022-11-01T15:23:06.9166459Z remote: Counting objects: 23% (2891/12567)
+2022-11-01T15:23:06.9166827Z remote: Counting objects: 24% (3017/12567)
+2022-11-01T15:23:06.9167178Z remote: Counting objects: 25% (3142/12567)
+2022-11-01T15:23:06.9167700Z remote: Counting objects: 26% (3268/12567)
+2022-11-01T15:23:06.9168060Z remote: Counting objects: 27% (3394/12567)
+2022-11-01T15:23:06.9168413Z remote: Counting objects: 28% (3519/12567)
+2022-11-01T15:23:06.9168685Z remote: Counting objects: 29% (3645/12567)
+2022-11-01T15:23:06.9169293Z remote: Counting objects: 30% (3771/12567)
+2022-11-01T15:23:06.9169550Z remote: Counting objects: 31% (3896/12567)
+2022-11-01T15:23:06.9169791Z remote: Counting objects: 32% (4022/12567)
+2022-11-01T15:23:06.9170049Z remote: Counting objects: 33% (4148/12567)
+2022-11-01T15:23:06.9170305Z remote: Counting objects: 34% (4273/12567)
+2022-11-01T15:23:06.9170563Z remote: Counting objects: 35% (4399/12567)
+2022-11-01T15:23:06.9170803Z remote: Counting objects: 36% (4525/12567)
+2022-11-01T15:23:06.9171062Z remote: Counting objects: 37% (4650/12567)
+2022-11-01T15:23:06.9171316Z remote: Counting objects: 38% (4776/12567)
+2022-11-01T15:23:06.9171714Z remote: Counting objects: 39% (4902/12567)
+2022-11-01T15:23:06.9171963Z remote: Counting objects: 40% (5027/12567)
+2022-11-01T15:23:06.9172211Z remote: Counting objects: 41% (5153/12567)
+2022-11-01T15:23:06.9172447Z remote: Counting objects: 42% (5279/12567)
+2022-11-01T15:23:06.9172868Z remote: Counting objects: 43% (5404/12567)
+2022-11-01T15:23:06.9173464Z remote: Counting objects: 44% (5530/12567)
+2022-11-01T15:23:06.9173834Z remote: Counting objects: 45% (5656/12567)
+2022-11-01T15:23:06.9174083Z remote: Counting objects: 46% (5781/12567)
+2022-11-01T15:23:06.9174458Z remote: Counting objects: 47% (5907/12567)
+2022-11-01T15:23:06.9174828Z remote: Counting objects: 48% (6033/12567)
+2022-11-01T15:23:06.9175193Z remote: Counting objects: 49% (6158/12567)
+2022-11-01T15:23:06.9175686Z remote: Counting objects: 50% (6284/12567)
+2022-11-01T15:23:06.9176096Z remote: Counting objects: 51% (6410/12567)
+2022-11-01T15:23:06.9176806Z remote: Counting objects: 52% (6535/12567)
+2022-11-01T15:23:06.9177226Z remote: Counting objects: 53% (6661/12567)
+2022-11-01T15:23:06.9383126Z remote: Counting objects: 54% (6787/12567)
+2022-11-01T15:23:06.9383471Z remote: Counting objects: 55% (6912/12567)
+2022-11-01T15:23:06.9383912Z remote: Counting objects: 56% (7038/12567)
+2022-11-01T15:23:06.9384205Z remote: Counting objects: 57% (7164/12567)
+2022-11-01T15:23:06.9384882Z remote: Counting objects: 58% (7289/12567)
+2022-11-01T15:23:06.9385322Z remote: Counting objects: 59% (7415/12567)
+2022-11-01T15:23:06.9385593Z remote: Counting objects: 60% (7541/12567)
+2022-11-01T15:23:06.9386047Z remote: Counting objects: 61% (7666/12567)
+2022-11-01T15:23:06.9386320Z remote: Counting objects: 62% (7792/12567)
+2022-11-01T15:23:06.9386602Z remote: Counting objects: 63% (7918/12567)
+2022-11-01T15:23:06.9387066Z remote: Counting objects: 64% (8043/12567)
+2022-11-01T15:23:06.9387318Z remote: Counting objects: 65% (8169/12567)
+2022-11-01T15:23:06.9387584Z remote: Counting objects: 66% (8295/12567)
+2022-11-01T15:23:06.9387858Z remote: Counting objects: 67% (8420/12567)
+2022-11-01T15:23:06.9388109Z remote: Counting objects: 68% (8546/12567)
+2022-11-01T15:23:06.9388374Z remote: Counting objects: 69% (8672/12567)
+2022-11-01T15:23:06.9388777Z remote: Counting objects: 70% (8797/12567)
+2022-11-01T15:23:06.9389026Z remote: Counting objects: 71% (8923/12567)
+2022-11-01T15:23:06.9389293Z remote: Counting objects: 72% (9049/12567)
+2022-11-01T15:23:06.9389558Z remote: Counting objects: 73% (9174/12567)
+2022-11-01T15:23:06.9389987Z remote: Counting objects: 74% (9300/12567)
+2022-11-01T15:23:06.9390230Z remote: Counting objects: 75% (9426/12567)
+2022-11-01T15:23:06.9390484Z remote: Counting objects: 76% (9551/12567)
+2022-11-01T15:23:06.9390738Z remote: Counting objects: 77% (9677/12567)
+2022-11-01T15:23:06.9390979Z remote: Counting objects: 78% (9803/12567)
+2022-11-01T15:23:06.9391235Z remote: Counting objects: 79% (9928/12567)
+2022-11-01T15:23:06.9391796Z remote: Counting objects: 80% (10054/12567)
+2022-11-01T15:23:06.9392047Z remote: Counting objects: 81% (10180/12567)
+2022-11-01T15:23:06.9392314Z remote: Counting objects: 82% (10305/12567)
+2022-11-01T15:23:06.9392577Z remote: Counting objects: 83% (10431/12567)
+2022-11-01T15:23:06.9392824Z remote: Counting objects: 84% (10557/12567)
+2022-11-01T15:23:06.9393085Z remote: Counting objects: 85% (10682/12567)
+2022-11-01T15:23:06.9394375Z remote: Counting objects: 86% (10808/12567)
+2022-11-01T15:23:06.9394631Z remote: Counting objects: 87% (10934/12567)
+2022-11-01T15:23:06.9394877Z remote: Counting objects: 88% (11059/12567)
+2022-11-01T15:23:06.9395134Z remote: Counting objects: 89% (11185/12567)
+2022-11-01T15:23:06.9395389Z remote: Counting objects: 90% (11311/12567)
+2022-11-01T15:23:06.9395622Z remote: Counting objects: 91% (11436/12567)
+2022-11-01T15:23:06.9395877Z remote: Counting objects: 92% (11562/12567)
+2022-11-01T15:23:06.9396132Z remote: Counting objects: 93% (11688/12567)
+2022-11-01T15:23:06.9396564Z remote: Counting objects: 94% (11813/12567)
+2022-11-01T15:23:06.9396804Z remote: Counting objects: 95% (11939/12567)
+2022-11-01T15:23:06.9397061Z remote: Counting objects: 96% (12065/12567)
+2022-11-01T15:23:06.9397319Z remote: Counting objects: 97% (12190/12567)
+2022-11-01T15:23:06.9397557Z remote: Counting objects: 98% (12316/12567)
+2022-11-01T15:23:06.9397810Z remote: Counting objects: 99% (12442/12567)
+2022-11-01T15:23:06.9398208Z remote: Counting objects: 100% (12567/12567)
+2022-11-01T15:23:06.9398661Z remote: Counting objects: 100% (12567/12567), done.
+2022-11-01T15:23:06.9398965Z remote: Compressing objects: 0% (1/10988)
+2022-11-01T15:23:06.9399257Z remote: Compressing objects: 1% (110/10988)
+2022-11-01T15:23:06.9439997Z remote: Compressing objects: 2% (220/10988)
+2022-11-01T15:23:06.9561627Z remote: Compressing objects: 3% (330/10988)
+2022-11-01T15:23:06.9680955Z remote: Compressing objects: 4% (440/10988)
+2022-11-01T15:23:06.9723040Z remote: Compressing objects: 5% (550/10988)
+2022-11-01T15:23:06.9876931Z remote: Compressing objects: 6% (660/10988)
+2022-11-01T15:23:07.0170815Z remote: Compressing objects: 7% (770/10988)
+2022-11-01T15:23:07.0504059Z remote: Compressing objects: 8% (880/10988)
+2022-11-01T15:23:07.0836116Z remote: Compressing objects: 9% (989/10988)
+2022-11-01T15:23:07.1460729Z remote: Compressing objects: 10% (1099/10988)
+2022-11-01T15:23:07.6608683Z remote: Compressing objects: 11% (1209/10988)
+2022-11-01T15:23:07.7588422Z remote: Compressing objects: 12% (1319/10988)
+2022-11-01T15:23:07.9494647Z remote: Compressing objects: 13% (1429/10988)
+2022-11-01T15:23:07.9527972Z remote: Compressing objects: 13% (1508/10988)
+2022-11-01T15:23:07.9668498Z remote: Compressing objects: 14% (1539/10988)
+2022-11-01T15:23:08.0219248Z remote: Compressing objects: 15% (1649/10988)
+2022-11-01T15:23:08.0283852Z remote: Compressing objects: 16% (1759/10988)
+2022-11-01T15:23:08.0452608Z remote: Compressing objects: 17% (1868/10988)
+2022-11-01T15:23:08.0618448Z remote: Compressing objects: 18% (1978/10988)
+2022-11-01T15:23:08.0889220Z remote: Compressing objects: 19% (2088/10988)
+2022-11-01T15:23:08.1162946Z remote: Compressing objects: 20% (2198/10988)
+2022-11-01T15:23:08.1247220Z remote: Compressing objects: 21% (2308/10988)
+2022-11-01T15:23:08.1520626Z remote: Compressing objects: 22% (2418/10988)
+2022-11-01T15:23:08.2139765Z remote: Compressing objects: 23% (2528/10988)
+2022-11-01T15:23:08.2412924Z remote: Compressing objects: 24% (2638/10988)
+2022-11-01T15:23:08.2597478Z remote: Compressing objects: 25% (2747/10988)
+2022-11-01T15:23:08.2752211Z remote: Compressing objects: 26% (2857/10988)
+2022-11-01T15:23:08.2966161Z remote: Compressing objects: 27% (2967/10988)
+2022-11-01T15:23:08.3926822Z remote: Compressing objects: 28% (3077/10988)
+2022-11-01T15:23:08.3927793Z remote: Compressing objects: 29% (3187/10988)
+2022-11-01T15:23:08.4094739Z remote: Compressing objects: 30% (3297/10988)
+2022-11-01T15:23:08.4338176Z remote: Compressing objects: 31% (3407/10988)
+2022-11-01T15:23:08.4632502Z remote: Compressing objects: 32% (3517/10988)
+2022-11-01T15:23:08.4940329Z remote: Compressing objects: 33% (3627/10988)
+2022-11-01T15:23:08.5404129Z remote: Compressing objects: 34% (3736/10988)
+2022-11-01T15:23:08.5814756Z remote: Compressing objects: 35% (3846/10988)
+2022-11-01T15:23:08.6091092Z remote: Compressing objects: 36% (3956/10988)
+2022-11-01T15:23:08.6446921Z remote: Compressing objects: 37% (4066/10988)
+2022-11-01T15:23:08.6900873Z remote: Compressing objects: 38% (4176/10988)
+2022-11-01T15:23:08.7213081Z remote: Compressing objects: 39% (4286/10988)
+2022-11-01T15:23:08.7502723Z remote: Compressing objects: 40% (4396/10988)
+2022-11-01T15:23:08.7869698Z remote: Compressing objects: 41% (4506/10988)
+2022-11-01T15:23:08.8103626Z remote: Compressing objects: 42% (4615/10988)
+2022-11-01T15:23:08.8451299Z remote: Compressing objects: 43% (4725/10988)
+2022-11-01T15:23:08.8774688Z remote: Compressing objects: 44% (4835/10988)
+2022-11-01T15:23:08.9003331Z remote: Compressing objects: 45% (4945/10988)
+2022-11-01T15:23:08.9070180Z remote: Compressing objects: 45% (5034/10988)
+2022-11-01T15:23:08.9344499Z remote: Compressing objects: 46% (5055/10988)
+2022-11-01T15:23:08.9568190Z remote: Compressing objects: 47% (5165/10988)
+2022-11-01T15:23:08.9805763Z remote: Compressing objects: 48% (5275/10988)
+2022-11-01T15:23:09.0037568Z remote: Compressing objects: 49% (5385/10988)
+2022-11-01T15:23:09.0301310Z remote: Compressing objects: 50% (5494/10988)
+2022-11-01T15:23:09.0582321Z remote: Compressing objects: 51% (5604/10988)
+2022-11-01T15:23:09.0808327Z remote: Compressing objects: 52% (5714/10988)
+2022-11-01T15:23:09.1124129Z remote: Compressing objects: 53% (5824/10988)
+2022-11-01T15:23:09.1387087Z remote: Compressing objects: 54% (5934/10988)
+2022-11-01T15:23:09.1647455Z remote: Compressing objects: 55% (6044/10988)
+2022-11-01T15:23:09.1915056Z remote: Compressing objects: 56% (6154/10988)
+2022-11-01T15:23:09.2255320Z remote: Compressing objects: 57% (6264/10988)
+2022-11-01T15:23:09.2457326Z remote: Compressing objects: 58% (6374/10988)
+2022-11-01T15:23:09.2755910Z remote: Compressing objects: 59% (6483/10988)
+2022-11-01T15:23:09.3017305Z remote: Compressing objects: 60% (6593/10988)
+2022-11-01T15:23:09.3325069Z remote: Compressing objects: 61% (6703/10988)
+2022-11-01T15:23:09.3546803Z remote: Compressing objects: 62% (6813/10988)
+2022-11-01T15:23:09.3801684Z remote: Compressing objects: 63% (6923/10988)
+2022-11-01T15:23:09.4067963Z remote: Compressing objects: 64% (7033/10988)
+2022-11-01T15:23:09.5472387Z remote: Compressing objects: 65% (7143/10988)
+2022-11-01T15:23:09.5473083Z remote: Compressing objects: 66% (7253/10988)
+2022-11-01T15:23:09.5473536Z remote: Compressing objects: 67% (7362/10988)
+2022-11-01T15:23:09.5473940Z remote: Compressing objects: 68% (7472/10988)
+2022-11-01T15:23:09.5474375Z remote: Compressing objects: 69% (7582/10988)
+2022-11-01T15:23:09.5474794Z remote: Compressing objects: 70% (7692/10988)
+2022-11-01T15:23:09.5475212Z remote: Compressing objects: 71% (7802/10988)
+2022-11-01T15:23:09.5475789Z remote: Compressing objects: 72% (7912/10988)
+2022-11-01T15:23:09.5476209Z remote: Compressing objects: 73% (8022/10988)
+2022-11-01T15:23:09.5477532Z remote: Compressing objects: 74% (8132/10988)
+2022-11-01T15:23:09.5478233Z remote: Compressing objects: 75% (8241/10988)
+2022-11-01T15:23:09.5478582Z remote: Compressing objects: 76% (8351/10988)
+2022-11-01T15:23:09.5479163Z remote: Compressing objects: 77% (8461/10988)
+2022-11-01T15:23:09.5479885Z remote: Compressing objects: 78% (8571/10988)
+2022-11-01T15:23:09.5480434Z remote: Compressing objects: 79% (8681/10988)
+2022-11-01T15:23:09.5480899Z remote: Compressing objects: 80% (8791/10988)
+2022-11-01T15:23:09.5481594Z remote: Compressing objects: 81% (8901/10988)
+2022-11-01T15:23:09.5482284Z remote: Compressing objects: 82% (9011/10988)
+2022-11-01T15:23:09.5482865Z remote: Compressing objects: 83% (9121/10988)
+2022-11-01T15:23:09.5483308Z remote: Compressing objects: 84% (9230/10988)
+2022-11-01T15:23:09.5483685Z remote: Compressing objects: 85% (9340/10988)
+2022-11-01T15:23:09.5484385Z remote: Compressing objects: 86% (9450/10988)
+2022-11-01T15:23:09.5485582Z remote: Compressing objects: 87% (9560/10988)
+2022-11-01T15:23:09.5486089Z remote: Compressing objects: 88% (9670/10988)
+2022-11-01T15:23:09.5486597Z remote: Compressing objects: 89% (9780/10988)
+2022-11-01T15:23:09.5487116Z remote: Compressing objects: 90% (9890/10988)
+2022-11-01T15:23:09.5487742Z remote: Compressing objects: 91% (10000/10988)
+2022-11-01T15:23:09.5488235Z remote: Compressing objects: 92% (10109/10988)
+2022-11-01T15:23:09.5488673Z remote: Compressing objects: 93% (10219/10988)
+2022-11-01T15:23:09.5489383Z remote: Compressing objects: 94% (10329/10988)
+2022-11-01T15:23:09.5489745Z remote: Compressing objects: 95% (10439/10988)
+2022-11-01T15:23:09.5490195Z remote: Compressing objects: 96% (10549/10988)
+2022-11-01T15:23:09.5490745Z remote: Compressing objects: 97% (10659/10988)
+2022-11-01T15:23:09.5491127Z remote: Compressing objects: 98% (10769/10988)
+2022-11-01T15:23:09.5491596Z remote: Compressing objects: 99% (10879/10988)
+2022-11-01T15:23:09.5492106Z remote: Compressing objects: 100% (10988/10988)
+2022-11-01T15:23:09.5492683Z remote: Compressing objects: 100% (10988/10988), done.
+2022-11-01T15:23:09.8456233Z Receiving objects: 0% (1/12567)
+2022-11-01T15:23:10.1991946Z Receiving objects: 1% (126/12567)
+2022-11-01T15:23:10.2129001Z Receiving objects: 2% (252/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.3381943Z Receiving objects: 3% (378/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.3419720Z Receiving objects: 4% (503/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.3481272Z Receiving objects: 5% (629/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.3610976Z Receiving objects: 6% (755/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4060459Z Receiving objects: 7% (880/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4152976Z Receiving objects: 8% (1006/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4214294Z Receiving objects: 9% (1132/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4443541Z Receiving objects: 10% (1257/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4585667Z Receiving objects: 11% (1383/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4664474Z Receiving objects: 12% (1509/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4672354Z Receiving objects: 13% (1634/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4765843Z Receiving objects: 14% (1760/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.4973914Z Receiving objects: 15% (1886/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.5317436Z Receiving objects: 16% (2011/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.5620851Z Receiving objects: 17% (2137/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.5694797Z Receiving objects: 17% (2211/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.5937016Z Receiving objects: 18% (2263/12567), 1.64 MiB | 3.13 MiB/s
+2022-11-01T15:23:10.6179150Z Receiving objects: 19% (2388/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.6422936Z Receiving objects: 20% (2514/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.6652610Z Receiving objects: 21% (2640/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.6945718Z Receiving objects: 22% (2765/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.7167238Z Receiving objects: 23% (2891/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.7332899Z Receiving objects: 24% (3017/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.7570968Z Receiving objects: 25% (3142/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.7722439Z Receiving objects: 26% (3268/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.7982867Z Receiving objects: 27% (3394/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.8201011Z Receiving objects: 28% (3519/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.8338369Z Receiving objects: 29% (3645/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.8455222Z Receiving objects: 30% (3771/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.8589882Z Receiving objects: 31% (3896/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.8671253Z Receiving objects: 32% (4022/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.8915567Z Receiving objects: 33% (4148/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.9033131Z Receiving objects: 34% (4273/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:10.9275337Z Receiving objects: 35% (4399/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:11.0474018Z Receiving objects: 36% (4525/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:11.0614229Z Receiving objects: 37% (4650/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:11.0725415Z Receiving objects: 38% (4776/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:11.0818490Z Receiving objects: 39% (4902/12567), 5.60 MiB | 5.45 MiB/s
+2022-11-01T15:23:11.0907264Z Receiving objects: 40% (5027/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.0974088Z Receiving objects: 41% (5153/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.1189127Z Receiving objects: 42% (5279/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.1576689Z Receiving objects: 43% (5404/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.1635112Z Receiving objects: 44% (5530/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.1783797Z Receiving objects: 45% (5656/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.1910308Z Receiving objects: 46% (5781/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.1973985Z Receiving objects: 47% (5907/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.2254839Z Receiving objects: 48% (6033/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.2318962Z Receiving objects: 49% (6158/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.2710865Z Receiving objects: 50% (6284/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.4267228Z Receiving objects: 51% (6410/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:11.5803346Z Receiving objects: 52% (6535/12567), 10.14 MiB | 6.64 MiB/s
+2022-11-01T15:23:12.2068025Z Receiving objects: 52% (6537/12567), 17.98 MiB | 8.87 MiB/s
+2022-11-01T15:23:12.5653011Z Receiving objects: 53% (6661/12567), 26.38 MiB | 10.44 MiB/s
+2022-11-01T15:23:12.6958322Z Receiving objects: 53% (6662/12567), 26.38 MiB | 10.44 MiB/s
+2022-11-01T15:23:12.7498019Z Receiving objects: 54% (6787/12567), 35.32 MiB | 11.67 MiB/s
+2022-11-01T15:23:12.9576078Z Receiving objects: 55% (6912/12567), 35.32 MiB | 11.67 MiB/s
+2022-11-01T15:23:13.0573630Z Receiving objects: 56% (7038/12567), 35.32 MiB | 11.67 MiB/s
+2022-11-01T15:23:13.1975640Z Receiving objects: 57% (7164/12567), 35.32 MiB | 11.67 MiB/s
+2022-11-01T15:23:13.2702208Z Receiving objects: 58% (7289/12567), 44.61 MiB | 12.65 MiB/s
+2022-11-01T15:23:13.3294275Z Receiving objects: 59% (7415/12567), 44.61 MiB | 12.65 MiB/s
+2022-11-01T15:23:13.3822287Z Receiving objects: 60% (7541/12567), 44.61 MiB | 12.65 MiB/s
+2022-11-01T15:23:13.5599681Z Receiving objects: 61% (7666/12567), 44.61 MiB | 12.65 MiB/s
+2022-11-01T15:23:13.5600309Z Receiving objects: 61% (7778/12567), 44.61 MiB | 12.65 MiB/s
+2022-11-01T15:23:13.7119127Z Receiving objects: 62% (7792/12567), 44.61 MiB | 12.65 MiB/s
+2022-11-01T15:23:14.4477813Z Receiving objects: 63% (7918/12567), 52.69 MiB | 13.08 MiB/s
+2022-11-01T15:23:14.5754767Z Receiving objects: 64% (8043/12567), 64.39 MiB | 14.22 MiB/s
+2022-11-01T15:23:15.3567308Z Receiving objects: 64% (8057/12567), 64.39 MiB | 14.22 MiB/s
+2022-11-01T15:23:15.4930170Z Receiving objects: 65% (8169/12567), 85.50 MiB | 17.69 MiB/s
+2022-11-01T15:23:15.5525805Z Receiving objects: 66% (8295/12567), 85.50 MiB | 17.69 MiB/s
+2022-11-01T15:23:15.6305131Z Receiving objects: 66% (8356/12567), 85.50 MiB | 17.69 MiB/s
+2022-11-01T15:23:15.7845146Z Receiving objects: 67% (8420/12567), 96.01 MiB | 18.97 MiB/s
+2022-11-01T15:23:15.8950904Z Receiving objects: 68% (8546/12567), 96.01 MiB | 18.97 MiB/s
+2022-11-01T15:23:16.1051375Z Receiving objects: 69% (8672/12567), 96.01 MiB | 18.97 MiB/s
+2022-11-01T15:23:16.3043168Z Receiving objects: 70% (8797/12567), 96.01 MiB | 18.97 MiB/s
+2022-11-01T15:23:16.6162611Z Receiving objects: 71% (8923/12567), 106.07 MiB | 19.39 MiB/s
+2022-11-01T15:23:16.6815447Z Receiving objects: 71% (9011/12567), 106.07 MiB | 19.39 MiB/s
+2022-11-01T15:23:16.7597143Z Receiving objects: 72% (9049/12567), 114.51 MiB | 19.40 MiB/s
+2022-11-01T15:23:16.7696552Z Receiving objects: 73% (9174/12567), 114.51 MiB | 19.40 MiB/s
+2022-11-01T15:23:16.8381002Z Receiving objects: 74% (9300/12567), 114.51 MiB | 19.40 MiB/s
+2022-11-01T15:23:16.8584430Z Receiving objects: 75% (9426/12567), 114.51 MiB | 19.40 MiB/s
+2022-11-01T15:23:16.9384015Z Receiving objects: 76% (9551/12567), 114.51 MiB | 19.40 MiB/s
+2022-11-01T15:23:17.3179210Z Receiving objects: 77% (9677/12567), 114.51 MiB | 19.40 MiB/s
+2022-11-01T15:23:17.3182197Z Receiving objects: 78% (9803/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.3869883Z Receiving objects: 79% (9928/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.5335850Z Receiving objects: 80% (10054/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.5428620Z Receiving objects: 81% (10180/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.5600130Z Receiving objects: 82% (10305/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.5640100Z Receiving objects: 82% (10382/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.6170093Z Receiving objects: 83% (10431/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.6260507Z Receiving objects: 84% (10557/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.6882844Z Receiving objects: 85% (10682/12567), 122.17 MiB | 19.07 MiB/s
+2022-11-01T15:23:17.6964863Z Receiving objects: 86% (10808/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:17.7033288Z Receiving objects: 87% (10934/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:17.7862769Z Receiving objects: 88% (11059/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:17.9968632Z Receiving objects: 89% (11185/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.0444402Z Receiving objects: 90% (11311/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.0775190Z Receiving objects: 91% (11436/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.0824539Z Receiving objects: 92% (11562/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.0890030Z Receiving objects: 93% (11688/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.0956337Z Receiving objects: 94% (11813/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1014935Z Receiving objects: 95% (11939/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1056183Z Receiving objects: 96% (12065/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1101897Z Receiving objects: 97% (12190/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1271902Z Receiving objects: 98% (12316/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1310792Z Receiving objects: 99% (12442/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1311930Z remote: Total 12567 (delta 1595), reused 7195 (delta 1446), pack-reused 0
+2022-11-01T15:23:18.1338739Z Receiving objects: 100% (12567/12567), 131.07 MiB | 18.99 MiB/s
+2022-11-01T15:23:18.1339954Z Receiving objects: 100% (12567/12567), 139.23 MiB | 16.22 MiB/s, done.
+2022-11-01T15:23:18.1385156Z Resolving deltas: 0% (0/1595)
+2022-11-01T15:23:18.1456938Z Resolving deltas: 1% (16/1595)
+2022-11-01T15:23:18.1468555Z Resolving deltas: 2% (32/1595)
+2022-11-01T15:23:18.1480623Z Resolving deltas: 3% (48/1595)
+2022-11-01T15:23:18.1510723Z Resolving deltas: 4% (64/1595)
+2022-11-01T15:23:18.1526135Z Resolving deltas: 5% (80/1595)
+2022-11-01T15:23:18.1537025Z Resolving deltas: 6% (96/1595)
+2022-11-01T15:23:18.1544963Z Resolving deltas: 7% (112/1595)
+2022-11-01T15:23:18.1556566Z Resolving deltas: 8% (128/1595)
+2022-11-01T15:23:18.1570240Z Resolving deltas: 9% (144/1595)
+2022-11-01T15:23:18.1582264Z Resolving deltas: 10% (160/1595)
+2022-11-01T15:23:18.1691779Z Resolving deltas: 11% (176/1595)
+2022-11-01T15:23:18.1715280Z Resolving deltas: 12% (192/1595)
+2022-11-01T15:23:18.1720797Z Resolving deltas: 13% (208/1595)
+2022-11-01T15:23:18.1728838Z Resolving deltas: 14% (224/1595)
+2022-11-01T15:23:18.1732276Z Resolving deltas: 15% (240/1595)
+2022-11-01T15:23:18.1735362Z Resolving deltas: 16% (256/1595)
+2022-11-01T15:23:18.1738747Z Resolving deltas: 17% (272/1595)
+2022-11-01T15:23:18.1743520Z Resolving deltas: 18% (288/1595)
+2022-11-01T15:23:18.1747596Z Resolving deltas: 19% (304/1595)
+2022-11-01T15:23:18.1751835Z Resolving deltas: 20% (319/1595)
+2022-11-01T15:23:18.1755707Z Resolving deltas: 21% (335/1595)
+2022-11-01T15:23:18.1762459Z Resolving deltas: 22% (351/1595)
+2022-11-01T15:23:18.1786752Z Resolving deltas: 23% (367/1595)
+2022-11-01T15:23:18.1800095Z Resolving deltas: 24% (383/1595)
+2022-11-01T15:23:18.1817527Z Resolving deltas: 25% (399/1595)
+2022-11-01T15:23:18.1845355Z Resolving deltas: 26% (415/1595)
+2022-11-01T15:23:18.1858445Z Resolving deltas: 27% (431/1595)
+2022-11-01T15:23:18.1866810Z Resolving deltas: 28% (447/1595)
+2022-11-01T15:23:18.1967962Z Resolving deltas: 29% (463/1595)
+2022-11-01T15:23:18.2006641Z Resolving deltas: 30% (479/1595)
+2022-11-01T15:23:18.2018922Z Resolving deltas: 31% (495/1595)
+2022-11-01T15:23:18.2033737Z Resolving deltas: 32% (511/1595)
+2022-11-01T15:23:18.2060821Z Resolving deltas: 33% (527/1595)
+2022-11-01T15:23:18.2080072Z Resolving deltas: 34% (543/1595)
+2022-11-01T15:23:18.2108427Z Resolving deltas: 35% (559/1595)
+2022-11-01T15:23:18.2126164Z Resolving deltas: 36% (575/1595)
+2022-11-01T15:23:18.2221258Z Resolving deltas: 37% (591/1595)
+2022-11-01T15:23:18.2238691Z Resolving deltas: 38% (607/1595)
+2022-11-01T15:23:18.2242266Z Resolving deltas: 39% (623/1595)
+2022-11-01T15:23:18.2242686Z Resolving deltas: 40% (638/1595)
+2022-11-01T15:23:18.2243401Z Resolving deltas: 41% (654/1595)
+2022-11-01T15:23:18.2247475Z Resolving deltas: 42% (670/1595)
+2022-11-01T15:23:18.2248012Z Resolving deltas: 43% (686/1595)
+2022-11-01T15:23:18.2250915Z Resolving deltas: 44% (702/1595)
+2022-11-01T15:23:18.2251757Z Resolving deltas: 45% (718/1595)
+2022-11-01T15:23:18.2255808Z Resolving deltas: 46% (734/1595)
+2022-11-01T15:23:18.2256261Z Resolving deltas: 47% (750/1595)
+2022-11-01T15:23:18.2257458Z Resolving deltas: 48% (766/1595)
+2022-11-01T15:23:18.2261205Z Resolving deltas: 49% (782/1595)
+2022-11-01T15:23:18.2261740Z Resolving deltas: 50% (798/1595)
+2022-11-01T15:23:18.2262498Z Resolving deltas: 51% (814/1595)
+2022-11-01T15:23:18.2271025Z Resolving deltas: 52% (830/1595)
+2022-11-01T15:23:18.2280763Z Resolving deltas: 53% (846/1595)
+2022-11-01T15:23:18.2286419Z Resolving deltas: 54% (862/1595)
+2022-11-01T15:23:18.2296969Z Resolving deltas: 55% (878/1595)
+2022-11-01T15:23:18.2303419Z Resolving deltas: 56% (894/1595)
+2022-11-01T15:23:18.2310028Z Resolving deltas: 57% (910/1595)
+2022-11-01T15:23:18.2314981Z Resolving deltas: 58% (926/1595)
+2022-11-01T15:23:18.2323520Z Resolving deltas: 59% (942/1595)
+2022-11-01T15:23:18.2328697Z Resolving deltas: 60% (957/1595)
+2022-11-01T15:23:18.2335792Z Resolving deltas: 61% (973/1595)
+2022-11-01T15:23:18.2342110Z Resolving deltas: 62% (989/1595)
+2022-11-01T15:23:18.2348324Z Resolving deltas: 63% (1005/1595)
+2022-11-01T15:23:18.2354457Z Resolving deltas: 64% (1021/1595)
+2022-11-01T15:23:18.2361497Z Resolving deltas: 65% (1037/1595)
+2022-11-01T15:23:18.2370639Z Resolving deltas: 66% (1053/1595)
+2022-11-01T15:23:18.2380549Z Resolving deltas: 67% (1069/1595)
+2022-11-01T15:23:18.2387136Z Resolving deltas: 68% (1085/1595)
+2022-11-01T15:23:18.2391989Z Resolving deltas: 69% (1101/1595)
+2022-11-01T15:23:18.2398784Z Resolving deltas: 70% (1117/1595)
+2022-11-01T15:23:18.2406442Z Resolving deltas: 71% (1133/1595)
+2022-11-01T15:23:18.2412673Z Resolving deltas: 72% (1149/1595)
+2022-11-01T15:23:18.2422301Z Resolving deltas: 73% (1165/1595)
+2022-11-01T15:23:18.2427825Z Resolving deltas: 74% (1181/1595)
+2022-11-01T15:23:18.2433572Z Resolving deltas: 75% (1197/1595)
+2022-11-01T15:23:18.2438704Z Resolving deltas: 76% (1213/1595)
+2022-11-01T15:23:18.2444857Z Resolving deltas: 77% (1229/1595)
+2022-11-01T15:23:18.2450379Z Resolving deltas: 78% (1245/1595)
+2022-11-01T15:23:18.2458830Z Resolving deltas: 79% (1261/1595)
+2022-11-01T15:23:18.2464822Z Resolving deltas: 80% (1276/1595)
+2022-11-01T15:23:18.2470368Z Resolving deltas: 81% (1292/1595)
+2022-11-01T15:23:18.2477092Z Resolving deltas: 82% (1308/1595)
+2022-11-01T15:23:18.2486290Z Resolving deltas: 83% (1324/1595)
+2022-11-01T15:23:18.2495293Z Resolving deltas: 84% (1340/1595)
+2022-11-01T15:23:18.2502703Z Resolving deltas: 85% (1356/1595)
+2022-11-01T15:23:18.2509757Z Resolving deltas: 86% (1372/1595)
+2022-11-01T15:23:18.2517689Z Resolving deltas: 87% (1388/1595)
+2022-11-01T15:23:18.2526971Z Resolving deltas: 88% (1404/1595)
+2022-11-01T15:23:18.2537951Z Resolving deltas: 89% (1420/1595)
+2022-11-01T15:23:18.2547316Z Resolving deltas: 90% (1436/1595)
+2022-11-01T15:23:18.2561578Z Resolving deltas: 91% (1452/1595)
+2022-11-01T15:23:18.2579990Z Resolving deltas: 92% (1468/1595)
+2022-11-01T15:23:18.2589743Z Resolving deltas: 93% (1484/1595)
+2022-11-01T15:23:18.2595230Z Resolving deltas: 94% (1500/1595)
+2022-11-01T15:23:18.2600818Z Resolving deltas: 95% (1516/1595)
+2022-11-01T15:23:18.2611569Z Resolving deltas: 96% (1532/1595)
+2022-11-01T15:23:18.2621438Z Resolving deltas: 97% (1548/1595)
+2022-11-01T15:23:18.2626207Z Resolving deltas: 98% (1564/1595)
+2022-11-01T15:23:18.2630366Z Resolving deltas: 99% (1580/1595)
+2022-11-01T15:23:18.2685571Z Resolving deltas: 100% (1595/1595)
+2022-11-01T15:23:18.2686158Z Resolving deltas: 100% (1595/1595), done.
+2022-11-01T15:23:18.7231893Z From https://github.com/tgstation/tgstation
+2022-11-01T15:23:18.7239390Z * [new ref] 90d58213531368fd97e9955fe80b75ad69c20f24 -> pull/70980/merge
+2022-11-01T15:23:18.7262520Z ##[endgroup]
+2022-11-01T15:23:18.7263398Z ##[group]Determining the checkout info
+2022-11-01T15:23:18.7264882Z ##[endgroup]
+2022-11-01T15:23:18.7274145Z ##[group]Checking out the ref
+2022-11-01T15:23:18.7275402Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/70980/merge
+2022-11-01T15:23:19.8646383Z Updating files: 63% (7322/11595)
+2022-11-01T15:23:19.8892263Z Updating files: 64% (7421/11595)
+2022-11-01T15:23:19.9117598Z Updating files: 65% (7537/11595)
+2022-11-01T15:23:19.9395000Z Updating files: 66% (7653/11595)
+2022-11-01T15:23:19.9581108Z Updating files: 67% (7769/11595)
+2022-11-01T15:23:19.9854108Z Updating files: 68% (7885/11595)
+2022-11-01T15:23:20.0092896Z Updating files: 69% (8001/11595)
+2022-11-01T15:23:20.0541265Z Updating files: 70% (8117/11595)
+2022-11-01T15:23:20.0650681Z Updating files: 71% (8233/11595)
+2022-11-01T15:23:20.0764955Z Updating files: 72% (8349/11595)
+2022-11-01T15:23:20.0853895Z Updating files: 73% (8465/11595)
+2022-11-01T15:23:20.0939233Z Updating files: 74% (8581/11595)
+2022-11-01T15:23:20.0992172Z Updating files: 75% (8697/11595)
+2022-11-01T15:23:20.1498757Z Updating files: 76% (8813/11595)
+2022-11-01T15:23:20.1610877Z Updating files: 77% (8929/11595)
+2022-11-01T15:23:20.1643521Z Updating files: 78% (9045/11595)
+2022-11-01T15:23:20.1892978Z Updating files: 79% (9161/11595)
+2022-11-01T15:23:20.1990867Z Updating files: 80% (9276/11595)
+2022-11-01T15:23:20.2065881Z Updating files: 81% (9392/11595)
+2022-11-01T15:23:20.2137892Z Updating files: 82% (9508/11595)
+2022-11-01T15:23:20.2198085Z Updating files: 83% (9624/11595)
+2022-11-01T15:23:20.2257645Z Updating files: 84% (9740/11595)
+2022-11-01T15:23:20.2323160Z Updating files: 85% (9856/11595)
+2022-11-01T15:23:20.2380577Z Updating files: 86% (9972/11595)
+2022-11-01T15:23:20.2444393Z Updating files: 87% (10088/11595)
+2022-11-01T15:23:20.2544182Z Updating files: 88% (10204/11595)
+2022-11-01T15:23:20.2807288Z Updating files: 89% (10320/11595)
+2022-11-01T15:23:20.2939799Z Updating files: 90% (10436/11595)
+2022-11-01T15:23:20.3191983Z Updating files: 91% (10552/11595)
+2022-11-01T15:23:20.3258456Z Updating files: 92% (10668/11595)
+2022-11-01T15:23:20.3340985Z Updating files: 93% (10784/11595)
+2022-11-01T15:23:20.3423637Z Updating files: 94% (10900/11595)
+2022-11-01T15:23:20.3500577Z Updating files: 95% (11016/11595)
+2022-11-01T15:23:20.3558683Z Updating files: 96% (11132/11595)
+2022-11-01T15:23:20.3634870Z Updating files: 97% (11248/11595)
+2022-11-01T15:23:20.3814012Z Updating files: 98% (11364/11595)
+2022-11-01T15:23:20.3892119Z Updating files: 99% (11480/11595)
+2022-11-01T15:23:20.3892548Z Updating files: 100% (11595/11595)
+2022-11-01T15:23:20.3892853Z Updating files: 100% (11595/11595), done.
+2022-11-01T15:23:20.4056043Z Note: switching to 'refs/remotes/pull/70980/merge'.
+2022-11-01T15:23:20.4056307Z
+2022-11-01T15:23:20.4056668Z You are in 'detached HEAD' state. You can look around, make experimental
+2022-11-01T15:23:20.4057485Z changes and commit them, and you can discard any commits you make in this
+2022-11-01T15:23:20.4058470Z state without impacting any branches by switching back to a branch.
+2022-11-01T15:23:20.4058838Z
+2022-11-01T15:23:20.4059084Z If you want to create a new branch to retain commits you create, you may
+2022-11-01T15:23:20.4060410Z do so (now or later) by using -c with the switch command. Example:
+2022-11-01T15:23:20.4060709Z
+2022-11-01T15:23:20.4061092Z git switch -c
+2022-11-01T15:23:20.4061268Z
+2022-11-01T15:23:20.4061433Z Or undo this operation with:
+2022-11-01T15:23:20.4061641Z
+2022-11-01T15:23:20.4061781Z git switch -
+2022-11-01T15:23:20.4061964Z
+2022-11-01T15:23:20.4062222Z Turn off this advice by setting config variable advice.detachedHead to false
+2022-11-01T15:23:20.4062504Z
+2022-11-01T15:23:20.4062736Z HEAD is now at 90d5821 Merge 1cb3ad143b2bd2b6467c31b7f52299c77448f1ee into 6ccb95a4ea337422d5d29cd85f5267e4c867ccff
+2022-11-01T15:23:20.4116386Z ##[endgroup]
+2022-11-01T15:23:20.4158288Z [command]/usr/bin/git log -1 --format='%H'
+2022-11-01T15:23:20.4192267Z '90d58213531368fd97e9955fe80b75ad69c20f24'
+2022-11-01T15:23:20.4605705Z ##[group]Run actions/cache@v3
+2022-11-01T15:23:20.4606069Z with:
+2022-11-01T15:23:20.4606290Z path: ~/BYOND
+2022-11-01T15:23:20.4606834Z key: Linux-byond-
+2022-11-01T15:23:20.4607271Z ##[endgroup]
+2022-11-01T15:23:22.1816608Z Received 0 of 4090426 (0.0%), 0.0 MBs/sec
+2022-11-01T15:23:22.2496035Z Received 4090426 of 4090426 (100.0%), 3.6 MBs/sec
+2022-11-01T15:23:22.2497318Z Cache Size: ~4 MB (4090426 B)
+2022-11-01T15:23:22.2526348Z [command]/usr/bin/tar --use-compress-program unzstd -xf /home/runner/work/_temp/6dd95125-b59e-4597-b8ee-6c3714735e91/cache.tzst -P -C /home/runner/work/tgstation/tgstation
+2022-11-01T15:23:22.3064448Z Cache restored successfully
+2022-11-01T15:23:22.4635256Z Cache restored from key: Linux-byond-
+2022-11-01T15:23:22.4810323Z ##[group]Run sudo systemctl start mysql
+2022-11-01T15:23:22.4810903Z [36;1msudo systemctl start mysql[0m
+2022-11-01T15:23:22.4811432Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci;'[0m
+2022-11-01T15:23:22.4811815Z [36;1mmysql -u root -proot tg_ci < SQL/tgstation_schema.sql[0m
+2022-11-01T15:23:22.4812211Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;'[0m
+2022-11-01T15:23:22.4812696Z [36;1mmysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql[0m
+2022-11-01T15:23:22.4876848Z shell: /usr/bin/bash -e {0}
+2022-11-01T15:23:22.4877477Z ##[endgroup]
+2022-11-01T15:23:27.2625132Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-01T15:23:27.3956584Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-01T15:23:28.2604742Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-01T15:23:28.2716557Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-01T15:23:29.0145539Z ##[group]Run sudo dpkg --add-architecture i386
+2022-11-01T15:23:29.0145924Z [36;1msudo dpkg --add-architecture i386[0m
+2022-11-01T15:23:29.0146204Z [36;1msudo apt update || true[0m
+2022-11-01T15:23:29.0146531Z [36;1msudo apt install -o APT::Immediate-Configure=false libssl1.1:i386[0m
+2022-11-01T15:23:29.0146860Z [36;1mbash tools/ci/install_rust_g.sh[0m
+2022-11-01T15:23:29.0208114Z shell: /usr/bin/bash -e {0}
+2022-11-01T15:23:29.0208371Z ##[endgroup]
+2022-11-01T15:23:29.3467028Z
+2022-11-01T15:23:29.3467957Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+2022-11-01T15:23:29.3470221Z
+2022-11-01T15:23:29.4665471Z Hit:1 http://azure.archive.ubuntu.com/ubuntu focal InRelease
+2022-11-01T15:23:29.4669512Z Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
+2022-11-01T15:23:29.4687773Z Get:3 http://azure.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
+2022-11-01T15:23:29.4702492Z Get:4 http://azure.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
+2022-11-01T15:23:29.4705529Z Get:5 https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease [10.5 kB]
+2022-11-01T15:23:29.7585400Z Get:6 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 Packages [745 kB]
+2022-11-01T15:23:29.7767685Z Get:7 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2196 kB]
+2022-11-01T15:23:29.8010173Z Get:8 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [972 kB]
+2022-11-01T15:23:29.8070363Z Hit:9 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal InRelease
+2022-11-01T15:23:29.8211172Z Get:10 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe i386 Packages [697 kB]
+2022-11-01T15:23:29.9292317Z Get:11 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe i386 Packages [13.5 kB]
+2022-11-01T15:23:29.9315932Z Get:12 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [24.0 kB]
+2022-11-01T15:23:29.9324114Z Get:13 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [864 B]
+2022-11-01T15:23:30.0626789Z Get:14 https://packages.microsoft.com/ubuntu/20.04/prod focal/main arm64 Packages [45.2 kB]
+2022-11-01T15:23:30.0677343Z Get:15 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages [204 kB]
+2022-11-01T15:23:30.2127695Z Get:16 http://azure.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [1821 kB]
+2022-11-01T15:23:30.2296608Z Get:17 http://azure.archive.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [11.2 kB]
+2022-11-01T15:23:30.2329110Z Get:18 http://azure.archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [743 kB]
+2022-11-01T15:23:30.2861057Z Get:19 http://azure.archive.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [15.3 kB]
+2022-11-01T15:23:30.6239298Z Get:20 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 Packages [15.2 kB]
+2022-11-01T15:23:46.7853764Z Fetched 7851 kB in 2s (4993 kB/s)
+2022-11-01T15:23:48.1966173Z Reading package lists...
+2022-11-01T15:23:48.4655905Z Building dependency tree...
+2022-11-01T15:23:48.4674811Z Reading state information...
+2022-11-01T15:23:48.6158045Z 30 packages can be upgraded. Run 'apt list --upgradable' to see them.
+2022-11-01T15:23:48.6289670Z
+2022-11-01T15:23:48.6290570Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+2022-11-01T15:23:48.6290875Z
+2022-11-01T15:23:48.7009344Z Reading package lists...
+2022-11-01T15:23:48.9786347Z Building dependency tree...
+2022-11-01T15:23:48.9806498Z Reading state information...
+2022-11-01T15:23:49.1908267Z The following additional packages will be installed:
+2022-11-01T15:23:49.1909169Z gcc-11-base:i386 libc6:i386 libcrypt1:i386 libgcc-s1 libgcc-s1:i386
+2022-11-01T15:23:49.1909925Z libidn2-0:i386 libunistring2:i386
+2022-11-01T15:23:49.1917188Z Suggested packages:
+2022-11-01T15:23:49.1918006Z glibc-doc:i386 locales:i386
+2022-11-01T15:23:49.2785536Z The following NEW packages will be installed:
+2022-11-01T15:23:49.2789401Z gcc-11-base:i386 libc6:i386 libcrypt1:i386 libgcc-s1:i386 libidn2-0:i386
+2022-11-01T15:23:49.2793380Z libssl1.1:i386 libunistring2:i386
+2022-11-01T15:23:49.2799841Z The following packages will be upgraded:
+2022-11-01T15:23:49.2804848Z libgcc-s1
+2022-11-01T15:23:49.3261093Z 1 upgraded, 7 newly installed, 0 to remove and 29 not upgraded.
+2022-11-01T15:23:49.4742625Z Need to get 4528 kB of archives.
+2022-11-01T15:23:49.4743198Z After this operation, 19.3 MB of additional disk space will be used.
+2022-11-01T15:23:49.4744237Z Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libcrypt1 i386 1:4.4.10-10ubuntu4 [90.9 kB]
+2022-11-01T15:23:49.6579955Z Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 libc6 i386 2.31-0ubuntu9.9 [2580 kB]
+2022-11-01T15:23:49.6658233Z Get:3 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 gcc-11-base i386 11.1.0-1ubuntu1~20.04 [19.0 kB]
+2022-11-01T15:23:50.0902580Z Get:4 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main amd64 libgcc-s1 amd64 11.1.0-1ubuntu1~20.04 [42.1 kB]
+2022-11-01T15:23:50.1227741Z Get:5 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libunistring2 i386 0.9.10-2 [377 kB]
+2022-11-01T15:23:50.2138856Z Get:6 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libidn2-0 i386 2.2.0-2 [51.4 kB]
+2022-11-01T15:23:50.2991668Z Get:7 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 libssl1.1 i386 1.1.1f-1ubuntu2.16 [1318 kB]
+2022-11-01T15:23:50.5116502Z Get:8 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 libgcc-s1 i386 11.1.0-1ubuntu1~20.04 [50.0 kB]
+2022-11-01T15:23:51.2386768Z Preconfiguring packages ...
+2022-11-01T15:23:51.3495462Z Fetched 4528 kB in 1s (3176 kB/s)
+2022-11-01T15:23:51.3919752Z Selecting previously unselected package gcc-11-base:i386.
+2022-11-01T15:23:51.4344862Z (Reading database ...
+2022-11-01T15:23:51.4345195Z (Reading database ... 5%
+2022-11-01T15:23:51.4345492Z (Reading database ... 10%
+2022-11-01T15:23:51.4346277Z (Reading database ... 15%
+2022-11-01T15:23:51.4346554Z (Reading database ... 20%
+2022-11-01T15:23:51.4346817Z (Reading database ... 25%
+2022-11-01T15:23:51.4347410Z (Reading database ... 30%
+2022-11-01T15:23:51.4347706Z (Reading database ... 35%
+2022-11-01T15:23:51.4348099Z (Reading database ... 40%
+2022-11-01T15:23:51.4348378Z (Reading database ... 45%
+2022-11-01T15:23:51.4348637Z (Reading database ... 50%
+2022-11-01T15:23:51.4934309Z (Reading database ... 55%
+2022-11-01T15:23:51.5685431Z (Reading database ... 60%
+2022-11-01T15:23:51.6482633Z (Reading database ... 65%
+2022-11-01T15:23:51.7528420Z (Reading database ... 70%
+2022-11-01T15:23:51.9010214Z (Reading database ... 75%
+2022-11-01T15:23:52.0151477Z (Reading database ... 80%
+2022-11-01T15:23:52.1096967Z (Reading database ... 85%
+2022-11-01T15:23:52.2608875Z (Reading database ... 90%
+2022-11-01T15:23:52.3661328Z (Reading database ... 95%
+2022-11-01T15:23:52.3661629Z (Reading database ... 100%
+2022-11-01T15:23:52.3661963Z (Reading database ... 242126 files and directories currently installed.)
+2022-11-01T15:23:52.3810032Z Preparing to unpack .../0-gcc-11-base_11.1.0-1ubuntu1~20.04_i386.deb ...
+2022-11-01T15:23:52.3842110Z Unpacking gcc-11-base:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-01T15:23:52.6152846Z Preparing to unpack .../1-libgcc-s1_11.1.0-1ubuntu1~20.04_amd64.deb ...
+2022-11-01T15:23:52.7192789Z Unpacking libgcc-s1:amd64 (11.1.0-1ubuntu1~20.04) over (10.3.0-1ubuntu1~20.04) ...
+2022-11-01T15:23:52.7808541Z Selecting previously unselected package libgcc-s1:i386.
+2022-11-01T15:23:52.8066352Z Preparing to unpack .../2-libgcc-s1_11.1.0-1ubuntu1~20.04_i386.deb ...
+2022-11-01T15:23:52.8100949Z Unpacking libgcc-s1:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-01T15:23:52.8534885Z Selecting previously unselected package libcrypt1:i386.
+2022-11-01T15:23:52.8817109Z Preparing to unpack .../3-libcrypt1_1%3a4.4.10-10ubuntu4_i386.deb ...
+2022-11-01T15:23:52.8847883Z Unpacking libcrypt1:i386 (1:4.4.10-10ubuntu4) ...
+2022-11-01T15:23:53.0566375Z Selecting previously unselected package libc6:i386.
+2022-11-01T15:23:53.0861196Z Preparing to unpack .../4-libc6_2.31-0ubuntu9.9_i386.deb ...
+2022-11-01T15:23:53.2571404Z Unpacking libc6:i386 (2.31-0ubuntu9.9) ...
+2022-11-01T15:23:53.7102365Z Replacing files in old package libc6-i386 (2.31-0ubuntu9.9) ...
+2022-11-01T15:23:53.8128077Z Selecting previously unselected package libunistring2:i386.
+2022-11-01T15:23:53.8390204Z Preparing to unpack .../5-libunistring2_0.9.10-2_i386.deb ...
+2022-11-01T15:23:53.8406925Z Unpacking libunistring2:i386 (0.9.10-2) ...
+2022-11-01T15:23:54.3087452Z Selecting previously unselected package libidn2-0:i386.
+2022-11-01T15:23:54.3331996Z Preparing to unpack .../6-libidn2-0_2.2.0-2_i386.deb ...
+2022-11-01T15:23:54.4067995Z Unpacking libidn2-0:i386 (2.2.0-2) ...
+2022-11-01T15:23:55.0668783Z Selecting previously unselected package libssl1.1:i386.
+2022-11-01T15:23:55.0979147Z Preparing to unpack .../7-libssl1.1_1.1.1f-1ubuntu2.16_i386.deb ...
+2022-11-01T15:23:55.1128241Z Unpacking libssl1.1:i386 (1.1.1f-1ubuntu2.16) ...
+2022-11-01T15:23:55.5915523Z Setting up gcc-11-base:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-01T15:23:55.6480293Z Setting up libgcc-s1:amd64 (11.1.0-1ubuntu1~20.04) ...
+2022-11-01T15:23:55.7536432Z Setting up libgcc-s1:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-01T15:23:55.8152741Z Setting up libcrypt1:i386 (1:4.4.10-10ubuntu4) ...
+2022-11-01T15:23:55.9483752Z Setting up libc6:i386 (2.31-0ubuntu9.9) ...
+2022-11-01T15:23:56.2906587Z Setting up libssl1.1:i386 (1.1.1f-1ubuntu2.16) ...
+2022-11-01T15:23:56.4402654Z Setting up libunistring2:i386 (0.9.10-2) ...
+2022-11-01T15:23:56.4473735Z Setting up libidn2-0:i386 (2.2.0-2) ...
+2022-11-01T15:23:56.4556493Z Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
+2022-11-01T15:24:19.5231907Z 2022-11-01 15:24:19 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/127494547/92c6bbfc-0d51-48ea-b586-9cd01c071d25?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221101T152419Z&X-Amz-Expires=300&X-Amz-Signature=096796f299665e0b83404bf48a3be6669d780d8bafabb5a18038d4e1de323277&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=127494547&response-content-disposition=attachment%3B%20filename%3Dlibrust_g.so&response-content-type=application%2Foctet-stream [72809008/72809008] -> "/home/runner/.byond/bin/librust_g.so" [1]
+2022-11-01T15:24:19.5331036Z linux-gate.so.1 (0xf7f93000)
+2022-11-01T15:24:19.5332151Z libssl.so.1.1 => /lib/i386-linux-gnu/libssl.so.1.1 (0xf77c5000)
+2022-11-01T15:24:19.5332758Z libcrypto.so.1.1 => /lib/i386-linux-gnu/libcrypto.so.1.1 (0xf750d000)
+2022-11-01T15:24:19.5335819Z libz.so.1 => /lib32/libz.so.1 (0xf74ef000)
+2022-11-01T15:24:19.5336449Z libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf74d0000)
+2022-11-01T15:24:19.5337053Z libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf74ad000)
+2022-11-01T15:24:19.5338254Z libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf73a8000)
+2022-11-01T15:24:19.5343540Z libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf73a2000)
+2022-11-01T15:24:19.5344153Z libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71b3000)
+2022-11-01T15:24:19.5344637Z /lib/ld-linux.so.2 (0xf7f95000)
+2022-11-01T15:24:19.5376954Z ##[group]Run bash tools/ci/install_auxlua.sh
+2022-11-01T15:24:19.5377389Z [36;1mbash tools/ci/install_auxlua.sh[0m
+2022-11-01T15:24:19.5438035Z shell: /usr/bin/bash -e {0}
+2022-11-01T15:24:19.5438277Z ##[endgroup]
+2022-11-01T15:24:20.0520918Z 2022-11-01 15:24:20 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/473295481/bb55dc2f-8248-4032-ad66-b80cb61a84f3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221101T152408Z&X-Amz-Expires=300&X-Amz-Signature=f0ea96a2ae5093c3051eb36ca625d0917a1cc9e11ecef63953f9837499a4b7be&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=473295481&response-content-disposition=attachment%3B%20filename%3Dlibauxlua.so&response-content-type=application%2Foctet-stream [5781068/5781068] -> "/home/runner/.byond/bin/libauxlua.so" [1]
+2022-11-01T15:24:20.0637194Z linux-gate.so.1 (0xf7ed0000)
+2022-11-01T15:24:20.0638001Z libstdc++.so.6 => /lib32/libstdc++.so.6 (0xf7ac9000)
+2022-11-01T15:24:20.0638990Z libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7aaa000)
+2022-11-01T15:24:20.0639537Z libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7a87000)
+2022-11-01T15:24:20.0640086Z libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7982000)
+2022-11-01T15:24:20.0640535Z libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf797c000)
+2022-11-01T15:24:20.0641053Z libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf778d000)
+2022-11-01T15:24:20.0641431Z /lib/ld-linux.so.2 (0xf7ed2000)
+2022-11-01T15:24:20.0687471Z ##[group]Run bash tools/ci/install_byond.sh
+2022-11-01T15:24:20.0691349Z [36;1mbash tools/ci/install_byond.sh[0m
+2022-11-01T15:24:20.0691690Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2022-11-01T15:24:20.0692049Z [36;1mtools/build/build --ci dm -DCIBUILDING -DANSICOLORS[0m
+2022-11-01T15:24:20.0788693Z shell: /usr/bin/bash -e {0}
+2022-11-01T15:24:20.0788944Z ##[endgroup]
+2022-11-01T15:24:20.0904985Z Setting up BYOND.
+2022-11-01T15:24:20.1285049Z % Total % Received % Xferd Average Speed Time Time Time Current
+2022-11-01T15:24:20.1288558Z Dload Upload Total Spent Left Speed
+2022-11-01T15:24:20.1289906Z
+2022-11-01T15:24:20.2648629Z 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
+2022-11-01T15:24:20.2651476Z 100 4021k 100 4021k 0 0 28.8M 0 --:--:-- --:--:-- --:--:-- 28.8M
+2022-11-01T15:24:20.2868719Z Archive: byond.zip
+2022-11-01T15:24:20.2869523Z creating: byond/
+2022-11-01T15:24:20.2872392Z creating: byond/key/
+2022-11-01T15:24:20.2872809Z creating: byond/web/
+2022-11-01T15:24:20.2873278Z inflating: byond/web/child.dms
+2022-11-01T15:24:20.2873868Z inflating: byond/web/button.dms
+2022-11-01T15:24:20.2874291Z inflating: byond/web/input.dms
+2022-11-01T15:24:20.2874708Z inflating: byond/web/text.dms
+2022-11-01T15:24:20.2990682Z inflating: byond/web/webclient.dart.js
+2022-11-01T15:24:20.2991338Z inflating: byond/web/verbmenu.dms
+2022-11-01T15:24:20.2992247Z inflating: byond/web/defaultSkin.dms
+2022-11-01T15:24:20.2994907Z inflating: byond/web/hotbar.dms
+2022-11-01T15:24:20.2995370Z inflating: byond/web/label.dms
+2022-11-01T15:24:20.2997432Z inflating: byond/web/alert.dms
+2022-11-01T15:24:20.3045767Z inflating: byond/web/message.dms
+2022-11-01T15:24:20.3046084Z inflating: byond/web/drag.png
+2022-11-01T15:24:20.3046357Z inflating: byond/web/map.dms
+2022-11-01T15:24:20.3046639Z inflating: byond/web/splashlogo.png
+2022-11-01T15:24:20.3046920Z inflating: byond/web/drop.png
+2022-11-01T15:24:20.3109752Z inflating: byond/web/ext.js
+2022-11-01T15:24:20.3110039Z inflating: byond/web/file.dms
+2022-11-01T15:24:20.3110743Z inflating: byond/web/grid.dms
+2022-11-01T15:24:20.3112568Z inflating: byond/web/bar.dms
+2022-11-01T15:24:20.3116279Z inflating: byond/web/dpad.dms
+2022-11-01T15:24:20.3117768Z inflating: byond/web/output.dms
+2022-11-01T15:24:20.3118380Z inflating: byond/web/tab.dms
+2022-11-01T15:24:20.3121184Z inflating: byond/web/info.dms
+2022-11-01T15:24:20.3125342Z inflating: byond/web/color.dms
+2022-11-01T15:24:20.3127736Z inflating: byond/web/gamepad.dms
+2022-11-01T15:24:20.3129918Z inflating: byond/web/browser.dms
+2022-11-01T15:24:20.3130867Z inflating: byond/web/status.dms
+2022-11-01T15:24:20.3131904Z inflating: byond/web/any.dms
+2022-11-01T15:24:20.3133198Z inflating: byond/web/pane.dms
+2022-11-01T15:24:20.3134980Z inflating: byond/web/pop.dms
+2022-11-01T15:24:20.3136094Z inflating: byond/license.txt
+2022-11-01T15:24:20.3136925Z inflating: byond/legal.txt
+2022-11-01T15:24:20.3138018Z inflating: byond/Makefile
+2022-11-01T15:24:20.3138748Z creating: byond/man/
+2022-11-01T15:24:20.3140374Z creating: byond/man/man6/
+2022-11-01T15:24:20.3140865Z inflating: byond/man/man6/DreamDaemon.6
+2022-11-01T15:24:20.3142127Z inflating: byond/man/man6/DreamMaker.6
+2022-11-01T15:24:20.3149532Z creating: byond/lib/
+2022-11-01T15:24:20.3149763Z creating: byond/host/
+2022-11-01T15:24:20.3150009Z inflating: byond/host/readme.html
+2022-11-01T15:24:20.3150561Z inflating: byond/host/readme-unix.txt
+2022-11-01T15:24:20.3150816Z creating: byond/host/home/
+2022-11-01T15:24:20.3151052Z creating: byond/host/home/root/
+2022-11-01T15:24:20.3151304Z creating: byond/host/home/root/byond/
+2022-11-01T15:24:20.3151781Z creating: byond/host/home/root/byond/tools/
+2022-11-01T15:24:20.3152089Z creating: byond/host/home/root/byond/tools/root/
+2022-11-01T15:24:20.3153050Z inflating: byond/host/home/root/byond/tools/root/root.dmb
+2022-11-01T15:24:20.3154330Z creating: byond/host/shared/
+2022-11-01T15:24:20.3155440Z creating: byond/host/shared/byond/
+2022-11-01T15:24:20.3156763Z creating: byond/host/shared/byond/tools/
+2022-11-01T15:24:20.3157942Z creating: byond/host/shared/byond/tools/ftp/
+2022-11-01T15:24:20.3159544Z inflating: byond/host/shared/byond/tools/ftp/ftp.dmb
+2022-11-01T15:24:20.3159981Z creating: byond/host/shared/byond/tools/admin/
+2022-11-01T15:24:20.3172339Z inflating: byond/host/shared/byond/tools/admin/admin.dmb
+2022-11-01T15:24:20.3172798Z creating: byond/host/shared-web/
+2022-11-01T15:24:20.3173421Z creating: byond/host/shared-web/web/
+2022-11-01T15:24:20.3173784Z creating: byond/host/shared-web/web/tools/
+2022-11-01T15:24:20.3174165Z creating: byond/host/shared-web/web/tools/admin/
+2022-11-01T15:24:20.3176681Z inflating: byond/host/shared-web/web/tools/admin/index.dmb
+2022-11-01T15:24:20.3186829Z inflating: byond/host/host.dmb
+2022-11-01T15:24:20.3187123Z inflating: byond/host/host.start
+2022-11-01T15:24:20.3188445Z inflating: byond/host/hostconf.orig
+2022-11-01T15:24:20.3189903Z inflating: byond/host/hostconf.txt
+2022-11-01T15:24:20.3191949Z inflating: byond/readme.txt
+2022-11-01T15:24:20.3192209Z creating: byond/bin/
+2022-11-01T15:24:20.3193769Z inflating: byond/bin/byondexec
+2022-11-01T15:24:20.3195439Z inflating: byond/bin/DreamDownload
+2022-11-01T15:24:20.3908232Z inflating: byond/bin/libbyond.so
+2022-11-01T15:24:20.4069319Z inflating: byond/bin/libext.so
+2022-11-01T15:24:20.4073220Z inflating: byond/bin/DreamDaemon
+2022-11-01T15:24:20.4080176Z inflating: byond/bin/DreamMaker
+2022-11-01T15:24:20.4080431Z creating: byond/cfg/
+2022-11-01T15:24:20.4080676Z inflating: byond/cfg/release.txt
+2022-11-01T15:24:20.4266638Z ***************************
+2022-11-01T15:24:20.4273089Z Now run the following command:
+2022-11-01T15:24:20.4285743Z
+2022-11-01T15:24:20.4296269Z source /home/runner/BYOND/byond/bin/byondsetup
+2022-11-01T15:24:20.4307061Z
+2022-11-01T15:24:20.4314771Z If it generates errors, your shell is not compatible with 'sh', so you will
+2022-11-01T15:24:20.4321421Z have to edit byondsetup and make it work with your shell. If the script works, you should be able to run DreamDaemon.
+2022-11-01T15:24:20.4332109Z
+2022-11-01T15:24:20.4340024Z IMPORTANT: once you have the script working, you must add the above line
+2022-11-01T15:24:20.4346843Z to your startup script. The name of your startup script depends on the
+2022-11-01T15:24:20.4352983Z shell you use. Typical ones are .profile or .bash_profile.
+2022-11-01T15:24:20.4363091Z
+2022-11-01T15:24:20.4371649Z Once everything is working, you can find out more about the software
+2022-11-01T15:24:20.4381742Z by doing 'man DreamDaemon'. A host server has also been included
+2022-11-01T15:24:20.4389897Z so edit host/hostconf.txt and boot up your world server!
+2022-11-01T15:24:20.4400150Z ***************************
+2022-11-01T15:24:21.3481300Z Using system-wide Node v16.18.0
+2022-11-01T15:24:22.7088337Z :: Juke Build version 0.8.1
+2022-11-01T15:24:23.2208661Z => Starting 'dm'
+2022-11-01T15:24:23.2218632Z :: Using defines: CBT, CIBUILDING, ANSICOLORS
+2022-11-01T15:24:23.6167555Z DM compiler version 514.1588
+2022-11-01T15:24:23.6168274Z loading tgstation.m.dme
+2022-11-01T15:24:34.0461685Z loading interface/skin.dmf
+2022-11-01T15:25:38.2374769Z loading map_files/generic/CentCom.dmm
+2022-11-01T15:25:39.2778196Z saving tgstation.m.dmb (DEBUG mode)
+2022-11-01T15:25:40.4869514Z tgstation.m.dmb - 0 errors, 0 warnings (11/1/22 3:25 pm)
+2022-11-01T15:25:40.4869848Z Total time: 1:17
+2022-11-01T15:25:41.7065548Z => Finished 'dm' in 78.486s
+2022-11-01T15:25:41.7070924Z => Done in 78.995s
+2022-11-01T15:25:41.7168392Z ##[group]Run source $HOME/BYOND/byond/bin/byondsetup
+2022-11-01T15:25:41.7168778Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2022-11-01T15:25:41.7169083Z [36;1mbash tools/ci/run_server.sh tramstation[0m
+2022-11-01T15:25:41.7233910Z shell: /usr/bin/bash -e {0}
+2022-11-01T15:25:41.7234485Z ##[endgroup]
+2022-11-01T15:25:41.7349856Z Testing tramstation
+2022-11-01T15:25:42.0259046Z cp: cannot stat 'tgui/packages/tgfont/dist/*': No such file or directory
+2022-11-01T15:25:42.0443276Z Tue Nov 1 15:25:42 2022
+2022-11-01T15:25:42.0444066Z World opened on network port 53835.
+2022-11-01T15:25:42.0446892Z Welcome BYOND! (5.0 Public Version 514.1588)
+2022-11-01T15:26:04.0921674Z 865 global variables
+2022-11-01T15:26:04.9224562Z World loaded at 15:26:04!
+2022-11-01T15:26:04.9749013Z Running /tg/ revision:
+2022-11-01T15:26:04.9749563Z No commit information
+2022-11-01T15:26:04.9837092Z Loading config file config.txt...
+2022-11-01T15:26:04.9841145Z Loading config file maps.txt...
+2022-11-01T15:26:04.9868634Z Unable to locate admins backup file.
+2022-11-01T15:26:06.0048294Z Initialized Title Screen subsystem within 0 seconds!
+2022-11-01T15:26:06.0049007Z Initialized Server Tasks subsystem within 0 seconds!
+2022-11-01T15:26:06.0049497Z Initialized Input subsystem within 0 seconds!
+2022-11-01T15:26:06.0125643Z Initialized Profiler subsystem within 0 seconds!
+2022-11-01T15:26:06.0126234Z Initialized Database subsystem within 0 seconds!
+2022-11-01T15:26:06.0126723Z Initialized Blackbox subsystem within 0 seconds!
+2022-11-01T15:26:06.0129042Z Initialized Sounds subsystem within 0 seconds!
+2022-11-01T15:26:06.0301324Z Initialized Instruments subsystem within 0.02 seconds!
+2022-11-01T15:26:06.4428754Z Initialized Greyscale subsystem within 0.41 seconds!
+2022-11-01T15:26:06.4429170Z Initialized Vis contents overlays subsystem within 0 seconds!
+2022-11-01T15:26:06.4429549Z Initialized Security Level subsystem within 0 seconds!
+2022-11-01T15:26:06.4465567Z Initialized Station subsystem within 0 seconds!
+2022-11-01T15:26:06.4465936Z Initialized Quirks subsystem within 0 seconds!
+2022-11-01T15:26:06.4599231Z Initialized Reagents subsystem within 0.01 seconds!
+2022-11-01T15:26:06.4603336Z Initialized Events subsystem within 0 seconds!
+2022-11-01T15:26:06.4668892Z Initialized IDs and Access subsystem within 0.01 seconds!
+2022-11-01T15:26:06.4669458Z Initialized Jobs subsystem within 0 seconds!
+2022-11-01T15:26:06.4670198Z Initialized AI movement subsystem within 0 seconds!
+2022-11-01T15:26:06.4693524Z Initialized Ticker subsystem within 0 seconds!
+2022-11-01T15:26:06.4698134Z Initialized AI Controller Ticker subsystem within 0 seconds!
+2022-11-01T15:26:06.4699769Z Initialized AI Behavior Ticker subsystem within 0 seconds!
+2022-11-01T15:26:06.4864335Z Initialized Trading Card Game subsystem within 0.02 seconds!
+2022-11-01T15:26:06.4867314Z Loading Tramstation...
+2022-11-01T15:26:09.0639832Z Loaded Station in 2.6s!
+2022-11-01T15:26:11.3030341Z Loaded Lavaland in 2.1s!
+2022-11-01T15:26:12.3779637Z Ruin loader finished with 0 left to spend.
+2022-11-01T15:26:12.4524433Z Ruin loader finished with 0 left to spend.
+2022-11-01T15:26:12.8605850Z Cave Generator finished in 0.4s!
+2022-11-01T15:26:12.9076303Z Cave Generator finished in 0.1s!
+2022-11-01T15:26:13.9109655Z Initialized Mapping subsystem within 7.42 seconds!
+2022-11-01T15:26:39.1717128Z The BYOND hub reports that port 53835 is not reachable.
+2022-11-01T15:26:42.3867216Z Initialized Early Assets subsystem within 28.47 seconds!
+2022-11-01T15:26:42.4328496Z Initialized Research subsystem within 0.05 seconds!
+2022-11-01T15:26:42.4331134Z Initialized Time Tracking subsystem within 0 seconds!
+2022-11-01T15:26:42.4436988Z Initialized Networks subsystem within 0.01 seconds!
+2022-11-01T15:26:42.4726624Z Initialized Spatial Grid subsystem within 0.03 seconds!
+2022-11-01T15:26:42.4728372Z Initialized Economy subsystem within 0 seconds!
+2022-11-01T15:26:42.4728944Z Initialized Restaurant subsystem within 0 seconds!
+2022-11-01T15:27:25.2172855Z ## NOTICE: morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!
+2022-11-01T15:27:25.7106020Z ## NOTICE: morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!
+2022-11-01T15:27:32.9578334Z Initialized Atoms subsystem within 50.48 seconds!
+2022-11-01T15:27:32.9805933Z Initialized Language subsystem within 0.01 seconds!
+2022-11-01T15:27:33.0740878Z Initialized Machines subsystem within 0.09 seconds!
+2022-11-01T15:27:33.0747270Z Initialized Skills subsystem within 0 seconds!
+2022-11-01T15:27:33.0750239Z Initialized Addiction subsystem within 0 seconds!
+2022-11-01T15:27:33.0763134Z Initialized Blackmarket subsystem within 0 seconds!
+2022-11-01T15:27:33.0772232Z Initialized Disease subsystem within 0 seconds!
+2022-11-01T15:27:33.0772589Z Initialized Fluid subsystem within 0 seconds!
+2022-11-01T15:27:33.0772923Z Initialized Smoke subsystem within 0 seconds!
+2022-11-01T15:27:33.0773294Z Initialized Foam subsystem within 0 seconds!
+2022-11-01T15:27:33.0773619Z Initialized Lag Switch subsystem within 0 seconds!
+2022-11-01T15:27:33.1054121Z Initialized Library Loading subsystem within 0.03 seconds!
+2022-11-01T15:27:33.4024857Z Initialized Lua Scripting subsystem within 0.3 seconds!
+2022-11-01T15:27:33.4027535Z Initialized Night Shift subsystem within 0 seconds!
+2022-11-01T15:27:33.4029596Z Initialized Sun subsystem within 0 seconds!
+2022-11-01T15:27:33.4063599Z Initialized Traitor subsystem within 0 seconds!
+2022-11-01T15:27:33.4335232Z Initialized Wardrobe subsystem within 0.03 seconds!
+2022-11-01T15:27:33.4336023Z Initialized Weather subsystem within 0 seconds!
+2022-11-01T15:27:33.4338457Z Initialized Wiremod Composite Templates subsystem within 0 seconds!
+2022-11-01T15:27:39.6841918Z Initialized Atmospherics subsystem within 6.25 seconds!
+2022-11-01T15:27:39.6858388Z Initialized Persistence subsystem within 0 seconds!
+2022-11-01T15:27:39.6861179Z Initialized Persistent Paintings subsystem within 0 seconds!
+2022-11-01T15:27:39.6864229Z Initialized Vote subsystem within 0 seconds!
+2022-11-01T15:27:53.6977895Z Initialized Assets subsystem within 14.01 seconds!
+2022-11-01T15:27:56.4493673Z Initialized Icon Smoothing subsystem within 2.75 seconds!
+2022-11-01T15:27:56.4505231Z Initialized XKeyScore subsystem within 0 seconds!
+2022-11-01T15:27:56.4524307Z Initialized PRISM subsystem within 0 seconds!
+2022-11-01T15:28:04.6339924Z Initialized Lighting subsystem within 8.18 seconds!
+2022-11-01T15:28:07.7698313Z Initialized Shuttle subsystem within 3.14 seconds!
+2022-11-01T15:28:07.7749093Z Initialized Pathfinder subsystem within 0 seconds!
+2022-11-01T15:28:07.7749434Z Initialized Ban Cache subsystem within 0 seconds!
+2022-11-01T15:28:07.7749744Z Initialized Init Profiler subsystem within 0 seconds!
+2022-11-01T15:28:07.7750061Z Initialized Chat subsystem within 0 seconds!
+2022-11-01T15:28:07.7750369Z Initializations complete within 121.7 seconds!
+2022-11-01T15:28:07.7824332Z Game start took 0s
+2022-11-01T15:28:18.9688166Z ##[group]/datum/unit_test/log_mapping
+2022-11-01T15:28:18.9688840Z
+2022-11-01T15:28:18.9691942Z [1;32mPASS[0m /datum/unit_test/log_mapping 0s
+2022-11-01T15:28:18.9692629Z ##[endgroup]
+2022-11-01T15:28:19.0858950Z ##[group]/datum/unit_test/ablative_hood_hud
+2022-11-01T15:28:19.1163124Z
+2022-11-01T15:28:19.1164826Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud 0.1s
+2022-11-01T15:28:19.1165814Z ##[endgroup]
+2022-11-01T15:28:19.1391399Z ##[group]/datum/unit_test/ablative_hood_hud_with_helmet
+2022-11-01T15:28:19.1679738Z
+2022-11-01T15:28:19.1680798Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud_with_helmet 0s
+2022-11-01T15:28:19.1684214Z ##[endgroup]
+2022-11-01T15:28:19.1915312Z ##[group]/datum/unit_test/achievements
+2022-11-01T15:28:19.2020908Z
+2022-11-01T15:28:19.2021795Z [1;32mPASS[0m /datum/unit_test/achievements 0.1s
+2022-11-01T15:28:19.2022783Z ##[endgroup]
+2022-11-01T15:28:19.2454845Z ##[group]/datum/unit_test/anchored_mobs
+2022-11-01T15:28:19.2456383Z
+2022-11-01T15:28:19.2457685Z [1;32mPASS[0m /datum/unit_test/anchored_mobs 0s
+2022-11-01T15:28:19.2458601Z ##[endgroup]
+2022-11-01T15:28:19.2632595Z ##[group]/datum/unit_test/anonymous_themes
+2022-11-01T15:28:19.4123645Z
+2022-11-01T15:28:19.4125365Z [1;32mPASS[0m /datum/unit_test/anonymous_themes 0.2s
+2022-11-01T15:28:19.4128592Z ##[endgroup]
+2022-11-01T15:28:19.6372545Z ##[group]/datum/unit_test/autowiki
+2022-11-01T15:28:21.1559221Z
+2022-11-01T15:28:21.1560055Z [1;32mPASS[0m /datum/unit_test/autowiki 1.5s
+2022-11-01T15:28:21.1560742Z ##[endgroup]
+2022-11-01T15:28:22.6418059Z ##[group]/datum/unit_test/autowiki_include_template
+2022-11-01T15:28:22.6418298Z
+2022-11-01T15:28:22.6419112Z [1;32mPASS[0m /datum/unit_test/autowiki_include_template 0s
+2022-11-01T15:28:22.6419629Z ##[endgroup]
+2022-11-01T15:28:22.6592281Z ##[group]/datum/unit_test/barsigns_icon
+2022-11-01T15:28:22.6850472Z
+2022-11-01T15:28:22.6851042Z [1;32mPASS[0m /datum/unit_test/barsigns_icon 0s
+2022-11-01T15:28:22.6851783Z ##[endgroup]
+2022-11-01T15:28:22.7025607Z ##[group]/datum/unit_test/barsigns_name
+2022-11-01T15:28:22.7025827Z
+2022-11-01T15:28:22.7026411Z [1;32mPASS[0m /datum/unit_test/barsigns_name 0s
+2022-11-01T15:28:22.7026869Z ##[endgroup]
+2022-11-01T15:28:22.7196300Z ##[group]/datum/unit_test/bespoke_id
+2022-11-01T15:28:22.7196495Z
+2022-11-01T15:28:22.7196933Z [1;32mPASS[0m /datum/unit_test/bespoke_id 0s
+2022-11-01T15:28:22.7197373Z ##[endgroup]
+2022-11-01T15:28:22.7528217Z ##[group]/datum/unit_test/binary_insert
+2022-11-01T15:28:22.7528455Z
+2022-11-01T15:28:22.7528943Z [1;32mPASS[0m /datum/unit_test/binary_insert 0s
+2022-11-01T15:28:22.7529444Z ##[endgroup]
+2022-11-01T15:28:22.7720960Z ##[group]/datum/unit_test/bloody_footprints
+2022-11-01T15:28:22.8157307Z
+2022-11-01T15:28:22.8158188Z [1;32mPASS[0m /datum/unit_test/bloody_footprints 0.1s
+2022-11-01T15:28:22.8158909Z ##[endgroup]
+2022-11-01T15:28:22.9653160Z ##[group]/datum/unit_test/breath_sanity
+2022-11-01T15:28:23.0154449Z
+2022-11-01T15:28:23.0155311Z [1;32mPASS[0m /datum/unit_test/breath_sanity 0.1s
+2022-11-01T15:28:23.0155975Z ##[endgroup]
+2022-11-01T15:28:23.0421572Z ##[group]/datum/unit_test/breath_sanity_plasmamen
+2022-11-01T15:28:23.0966156Z
+2022-11-01T15:28:23.0966990Z [1;32mPASS[0m /datum/unit_test/breath_sanity_plasmamen 0s
+2022-11-01T15:28:23.0967848Z ##[endgroup]
+2022-11-01T15:28:23.1238973Z ##[group]/datum/unit_test/breath_sanity_ashwalker
+2022-11-01T15:28:23.1864867Z
+2022-11-01T15:28:23.1865526Z [1;32mPASS[0m /datum/unit_test/breath_sanity_ashwalker 0s
+2022-11-01T15:28:23.1866107Z ##[endgroup]
+2022-11-01T15:28:23.2143094Z ##[group]/datum/unit_test/cable_powernets
+2022-11-01T15:28:23.2143293Z
+2022-11-01T15:28:23.2143753Z [1;32mPASS[0m /datum/unit_test/cable_powernets 0s
+2022-11-01T15:28:23.2144353Z ##[endgroup]
+2022-11-01T15:28:23.2296359Z ##[group]/datum/unit_test/card_mismatch
+2022-11-01T15:28:23.2339244Z
+2022-11-01T15:28:23.2339785Z [1;32mPASS[0m /datum/unit_test/card_mismatch 0s
+2022-11-01T15:28:23.2340711Z ##[endgroup]
+2022-11-01T15:28:23.3389441Z ##[group]/datum/unit_test/chain_pull_through_space
+2022-11-01T15:28:23.3417372Z
+2022-11-01T15:28:23.3428322Z [1;32mPASS[0m /datum/unit_test/chain_pull_through_space 0s
+2022-11-01T15:28:23.3429414Z ##[endgroup]
+2022-11-01T15:28:23.4797614Z ##[group]/datum/unit_test/chat_filter_sanity
+2022-11-01T15:28:23.4802389Z
+2022-11-01T15:28:23.4803303Z [1;32mPASS[0m /datum/unit_test/chat_filter_sanity 0s
+2022-11-01T15:28:23.4803804Z ##[endgroup]
+2022-11-01T15:28:23.4985708Z ##[group]/datum/unit_test/circuit_component_category
+2022-11-01T15:28:23.4985973Z
+2022-11-01T15:28:23.4986498Z [1;32mPASS[0m /datum/unit_test/circuit_component_category 0s
+2022-11-01T15:28:23.4987054Z ##[endgroup]
+2022-11-01T15:28:23.5170927Z ##[group]/datum/unit_test/closets
+2022-11-01T15:28:25.4385541Z
+2022-11-01T15:28:25.4386681Z [1;32mPASS[0m /datum/unit_test/closets 1.9s
+2022-11-01T15:28:25.4387368Z ##[endgroup]
+2022-11-01T15:28:28.6598884Z ##[group]/datum/unit_test/harm_punch
+2022-11-01T15:28:28.7131885Z
+2022-11-01T15:28:28.7132943Z [1;32mPASS[0m /datum/unit_test/harm_punch 0.1s
+2022-11-01T15:28:28.7134837Z ##[endgroup]
+2022-11-01T15:28:28.7421766Z ##[group]/datum/unit_test/harm_melee
+2022-11-01T15:28:28.7933680Z
+2022-11-01T15:28:28.7934808Z [1;32mPASS[0m /datum/unit_test/harm_melee 0s
+2022-11-01T15:28:28.7935540Z ##[endgroup]
+2022-11-01T15:28:28.8380921Z ##[group]/datum/unit_test/harm_different_damage
+2022-11-01T15:28:28.8975633Z
+2022-11-01T15:28:28.8976869Z [1;32mPASS[0m /datum/unit_test/harm_different_damage 0s
+2022-11-01T15:28:28.8977671Z ##[endgroup]
+2022-11-01T15:28:28.9761803Z ##[group]/datum/unit_test/attack_chain
+2022-11-01T15:28:29.0318227Z
+2022-11-01T15:28:29.0319454Z [1;32mPASS[0m /datum/unit_test/attack_chain 0.1s
+2022-11-01T15:28:29.0320200Z ##[endgroup]
+2022-11-01T15:28:29.0662718Z ##[group]/datum/unit_test/disarm
+2022-11-01T15:28:29.1273517Z
+2022-11-01T15:28:29.1275850Z [1;32mPASS[0m /datum/unit_test/disarm 0.1s
+2022-11-01T15:28:29.1276795Z ##[endgroup]
+2022-11-01T15:28:29.1606515Z ##[group]/datum/unit_test/component_duping
+2022-11-01T15:28:29.1606753Z
+2022-11-01T15:28:29.1607266Z [1;32mPASS[0m /datum/unit_test/component_duping 0s
+2022-11-01T15:28:29.1607745Z ##[endgroup]
+2022-11-01T15:28:29.1774627Z ##[group]/datum/unit_test/confusion_symptom
+2022-11-01T15:28:29.2032018Z
+2022-11-01T15:28:29.2033145Z [1;32mPASS[0m /datum/unit_test/confusion_symptom 0.1s
+2022-11-01T15:28:29.2033987Z ##[endgroup]
+2022-11-01T15:28:29.2246157Z ##[group]/datum/unit_test/connect_loc_basic
+2022-11-01T15:28:29.2248367Z
+2022-11-01T15:28:29.2249487Z [1;32mPASS[0m /datum/unit_test/connect_loc_basic 0s
+2022-11-01T15:28:29.2250109Z ##[endgroup]
+2022-11-01T15:28:29.2416396Z ##[group]/datum/unit_test/connect_loc_change_turf
+2022-11-01T15:28:29.2424538Z
+2022-11-01T15:28:29.2425333Z [1;32mPASS[0m /datum/unit_test/connect_loc_change_turf 0s
+2022-11-01T15:28:29.2425972Z ##[endgroup]
+2022-11-01T15:28:29.2592394Z ##[group]/datum/unit_test/connect_loc_multiple_on_turf
+2022-11-01T15:28:29.2599395Z
+2022-11-01T15:28:29.2599862Z [1;32mPASS[0m /datum/unit_test/connect_loc_multiple_on_turf 0s
+2022-11-01T15:28:29.2600716Z ##[endgroup]
+2022-11-01T15:28:29.2917858Z ##[group]/datum/unit_test/crayon_naming
+2022-11-01T15:28:29.2996631Z
+2022-11-01T15:28:29.2997310Z [1;32mPASS[0m /datum/unit_test/crayon_naming 0s
+2022-11-01T15:28:29.2997930Z ##[endgroup]
+2022-11-01T15:28:29.3177352Z ##[group]/datum/unit_test/dcs_get_id_from_arguments
+2022-11-01T15:28:29.3178559Z
+2022-11-01T15:28:29.3182903Z [1;32mPASS[0m /datum/unit_test/dcs_get_id_from_arguments 0s
+2022-11-01T15:28:29.3183682Z ##[endgroup]
+2022-11-01T15:28:29.3371899Z ##[group]/datum/unit_test/designs
+2022-11-01T15:28:29.3438160Z
+2022-11-01T15:28:29.3438713Z [1;32mPASS[0m /datum/unit_test/designs 0s
+2022-11-01T15:28:29.3439280Z ##[endgroup]
+2022-11-01T15:28:29.3630774Z ##[group]/datum/unit_test/dummy_spawn_species
+2022-11-01T15:28:29.7865710Z
+2022-11-01T15:28:29.7866984Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_species 0.4s
+2022-11-01T15:28:29.7868408Z ##[endgroup]
+2022-11-01T15:28:30.2064941Z ##[group]/datum/unit_test/dummy_spawn_outfit
+2022-11-01T15:28:30.2287943Z Job type /datum/job/ai could not be retrieved from SSjob
+2022-11-01T15:28:30.5729399Z
+2022-11-01T15:28:30.5730637Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_outfit 0.3s
+2022-11-01T15:28:30.5731452Z ##[endgroup]
+2022-11-01T15:28:30.8929561Z ##[group]/datum/unit_test/dynamic_roundstart_ruleset_sanity
+2022-11-01T15:28:30.8930214Z
+2022-11-01T15:28:30.8933249Z [1;32mPASS[0m /datum/unit_test/dynamic_roundstart_ruleset_sanity 0s
+2022-11-01T15:28:30.8933929Z ##[endgroup]
+2022-11-01T15:28:30.9093619Z ##[group]/datum/unit_test/dynamic_unique_antag_flags
+2022-11-01T15:28:30.9094243Z
+2022-11-01T15:28:30.9097412Z [1;32mPASS[0m /datum/unit_test/dynamic_unique_antag_flags 0s
+2022-11-01T15:28:30.9098086Z ##[endgroup]
+2022-11-01T15:28:30.9259102Z ##[group]/datum/unit_test/egg_glands
+2022-11-01T15:28:30.9738261Z
+2022-11-01T15:28:30.9739529Z [1;32mPASS[0m /datum/unit_test/egg_glands 0s
+2022-11-01T15:28:30.9742814Z ##[endgroup]
+2022-11-01T15:28:30.9910488Z ##[group]/datum/unit_test/emoting
+2022-11-01T15:28:31.0191020Z
+2022-11-01T15:28:31.0192873Z [1;32mPASS[0m /datum/unit_test/emoting 0.1s
+2022-11-01T15:28:31.0196009Z ##[endgroup]
+2022-11-01T15:28:31.0470998Z ##[group]/datum/unit_test/food_edibility_check
+2022-11-01T15:28:32.3907505Z
+2022-11-01T15:28:32.3908587Z [1;32mPASS[0m /datum/unit_test/food_edibility_check 1.3s
+2022-11-01T15:28:32.3909262Z ##[endgroup]
+2022-11-01T15:28:33.7158865Z ##[group]/datum/unit_test/atmospheric_gas_transfer
+2022-11-01T15:28:33.7169071Z
+2022-11-01T15:28:33.7171453Z [1;32mPASS[0m /datum/unit_test/atmospheric_gas_transfer 0s
+2022-11-01T15:28:33.7173553Z ##[endgroup]
+2022-11-01T15:28:33.7346695Z ##[group]/datum/unit_test/get_turf_pixel
+2022-11-01T15:28:33.7367134Z
+2022-11-01T15:28:33.7368982Z [1;32mPASS[0m /datum/unit_test/get_turf_pixel 0s
+2022-11-01T15:28:33.7371248Z ##[endgroup]
+2022-11-01T15:28:33.7556559Z ##[group]/datum/unit_test/greyscale_item_icon_states
+2022-11-01T15:28:33.7624830Z
+2022-11-01T15:28:33.7626511Z [1;32mPASS[0m /datum/unit_test/greyscale_item_icon_states 0s
+2022-11-01T15:28:33.7628685Z ##[endgroup]
+2022-11-01T15:28:33.7811590Z ##[group]/datum/unit_test/greyscale_color_count
+2022-11-01T15:28:33.7978824Z
+2022-11-01T15:28:33.7981042Z [1;32mPASS[0m /datum/unit_test/greyscale_color_count 0s
+2022-11-01T15:28:33.7981873Z ##[endgroup]
+2022-11-01T15:28:33.8551069Z ##[group]/datum/unit_test/hallucination_icons
+2022-11-01T15:28:34.1090174Z
+2022-11-01T15:28:34.1096431Z [1;32mPASS[0m /datum/unit_test/hallucination_icons 0.3s
+2022-11-01T15:28:34.1099789Z ##[endgroup]
+2022-11-01T15:28:34.3281283Z ##[group]/datum/unit_test/heretic_knowledge
+2022-11-01T15:28:34.3305016Z
+2022-11-01T15:28:34.3306029Z [1;32mPASS[0m /datum/unit_test/heretic_knowledge 0s
+2022-11-01T15:28:34.3306904Z ##[endgroup]
+2022-11-01T15:28:34.3483924Z ##[group]/datum/unit_test/heretic_main_paths
+2022-11-01T15:28:34.3484902Z
+2022-11-01T15:28:34.3487952Z [1;32mPASS[0m /datum/unit_test/heretic_main_paths 0s
+2022-11-01T15:28:34.3491126Z ##[endgroup]
+2022-11-01T15:28:34.3668321Z ##[group]/datum/unit_test/heretic_rituals
+2022-11-01T15:28:34.4513883Z
+2022-11-01T15:28:34.4515231Z [1;32mPASS[0m /datum/unit_test/heretic_rituals 0.1s
+2022-11-01T15:28:34.4518615Z ##[endgroup]
+2022-11-01T15:28:34.5255676Z ##[group]/datum/unit_test/hanukkah_2123
+2022-11-01T15:28:34.5256380Z
+2022-11-01T15:28:34.5258696Z [1;32mPASS[0m /datum/unit_test/hanukkah_2123 0s
+2022-11-01T15:28:34.5306060Z ##[endgroup]
+2022-11-01T15:28:34.5435626Z ##[group]/datum/unit_test/ramadan_2165
+2022-11-01T15:28:34.5435839Z
+2022-11-01T15:28:34.5436316Z [1;32mPASS[0m /datum/unit_test/ramadan_2165 0s
+2022-11-01T15:28:34.5436790Z ##[endgroup]
+2022-11-01T15:28:34.5758281Z ##[group]/datum/unit_test/thanksgiving_2020
+2022-11-01T15:28:34.5758510Z
+2022-11-01T15:28:34.5759790Z [1;32mPASS[0m /datum/unit_test/thanksgiving_2020 0s
+2022-11-01T15:28:34.5760323Z ##[endgroup]
+2022-11-01T15:28:34.5922636Z ##[group]/datum/unit_test/mother_3683
+2022-11-01T15:28:34.5923203Z
+2022-11-01T15:28:34.5923668Z [1;32mPASS[0m /datum/unit_test/mother_3683 0s
+2022-11-01T15:28:34.5924152Z ##[endgroup]
+2022-11-01T15:28:34.6258731Z ##[group]/datum/unit_test/hello_2020
+2022-11-01T15:28:34.6258967Z
+2022-11-01T15:28:34.6259461Z [1;32mPASS[0m /datum/unit_test/hello_2020 0s
+2022-11-01T15:28:34.6260389Z ##[endgroup]
+2022-11-01T15:28:34.6425516Z ##[group]/datum/unit_test/new_year_1983
+2022-11-01T15:28:34.6425720Z
+2022-11-01T15:28:34.6426174Z [1;32mPASS[0m /datum/unit_test/new_year_1983 0s
+2022-11-01T15:28:34.6426620Z ##[endgroup]
+2022-11-01T15:28:34.6759224Z ##[group]/datum/unit_test/moth_week_2020
+2022-11-01T15:28:34.6792170Z
+2022-11-01T15:28:34.6792723Z [1;32mPASS[0m /datum/unit_test/moth_week_2020 0s
+2022-11-01T15:28:34.6793240Z ##[endgroup]
+2022-11-01T15:28:34.6958289Z ##[group]/datum/unit_test/human_through_recycler
+2022-11-01T15:28:34.7370291Z
+2022-11-01T15:28:34.7371226Z [1;32mPASS[0m /datum/unit_test/human_through_recycler 0.1s
+2022-11-01T15:28:34.7372112Z ##[endgroup]
+2022-11-01T15:28:34.8623820Z ##[group]/datum/unit_test/hydroponics_extractor_storage
+2022-11-01T15:28:34.8996006Z
+2022-11-01T15:28:34.8996940Z [1;32mPASS[0m /datum/unit_test/hydroponics_extractor_storage 0s
+2022-11-01T15:28:34.8997589Z ##[endgroup]
+2022-11-01T15:28:34.9278188Z ##[group]/datum/unit_test/hydroponics_harvest
+2022-11-01T15:28:35.0009791Z
+2022-11-01T15:28:35.0010716Z [1;32mPASS[0m /datum/unit_test/hydroponics_harvest 0.1s
+2022-11-01T15:28:35.0012013Z ##[endgroup]
+2022-11-01T15:28:35.0747162Z ##[group]/datum/unit_test/hydroponics_self_mutation
+2022-11-01T15:28:35.1406271Z
+2022-11-01T15:28:35.1407332Z [1;32mPASS[0m /datum/unit_test/hydroponics_self_mutation 0.1s
+2022-11-01T15:28:35.1408057Z ##[endgroup]
+2022-11-01T15:28:35.2102485Z ##[group]/datum/unit_test/hydroponics_validate_genes
+2022-11-01T15:28:35.2762621Z
+2022-11-01T15:28:35.2763561Z [1;32mPASS[0m /datum/unit_test/hydroponics_validate_genes 0s
+2022-11-01T15:28:35.2764288Z ##[endgroup]
+2022-11-01T15:28:35.3749912Z ##[group]/datum/unit_test/defined_inhand_icon_states
+2022-11-01T15:28:36.6110328Z Notice - Possible inhand icon matches found. It is best to be explicit with inhand sprite values.
+2022-11-01T15:28:36.6111369Z /obj/item/clothing/accessory/pride does not have an inhand_icon_state value - Possible matching sprites for "pride" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-11-01T15:28:36.6112643Z /obj/item/clothing/suit/caution does not have an inhand_icon_state value - Possible matching sprites for "caution" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-11-01T15:28:36.6113827Z /obj/item/clothing/under/suit/sl does not have an inhand_icon_state value - Possible matching sprites for "sl_suit" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-01T15:28:36.6114809Z /obj/item/clothing/head/collectable/paper does not have an inhand_icon_state value - Possible matching sprites for "paper" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2022-11-01T15:28:36.6115778Z /obj/item/clothing/head/mod does not have an inhand_icon_state value - Possible matching sprites for "helmet" found in: 'icons/mob/inhands/clothing/hats_lefthand.dmi' & 'icons/mob/inhands/clothing/hats_righthand.dmi'
+2022-11-01T15:28:36.6117382Z /obj/item/clothing/mask/animal/small/fox does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2022-11-01T15:28:36.6118311Z /obj/item/clothing/mask/animal/small/fox/cursed does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2022-11-01T15:28:36.6119323Z /obj/item/clothing/glasses/hud/health/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudmed" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-11-01T15:28:36.6120787Z /obj/item/clothing/glasses/hud/security/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudsec" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-11-01T15:28:36.6121863Z /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun does not have an inhand_icon_state value - Possible matching sprites for "syringegun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-11-01T15:28:36.6122899Z /obj/item/mecha_parts/mecha_equipment/generator does not have an inhand_icon_state value - Possible matching sprites for "tesla" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-11-01T15:28:36.6124088Z /obj/item/storage/bag/ore does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-11-01T15:28:36.6125547Z /obj/item/storage/bag/ore/cyborg does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-11-01T15:28:36.6126550Z /obj/item/implant/emp does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-01T15:28:36.6127486Z /obj/item/implant/uplink does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6128467Z /obj/item/implant/uplink/precharged does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6129445Z /obj/item/implant/uplink/starting does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6130403Z /obj/item/melee/energy/blade does not have an inhand_icon_state value - Possible matching sprites for "blade" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-01T15:28:36.6131355Z /obj/item/fireaxe does not have an inhand_icon_state value - Possible matching sprites for "fireaxe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-11-01T15:28:36.6132532Z /obj/item/fireaxe/boneaxe does not have an inhand_icon_state value - Possible matching sprites for "bone_axe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-11-01T15:28:36.6133828Z /obj/item/fireaxe/metal_h2_axe does not have an inhand_icon_state value - Possible matching sprites for "metalh2_axe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-11-01T15:28:36.6134950Z /obj/item/reagent_containers/cup/soda_cans/cola does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6135967Z /obj/item/reagent_containers/cup/soda_cans/tonic does not have an inhand_icon_state value - Possible matching sprites for "tonic" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6137013Z /obj/item/reagent_containers/cup/soda_cans/sodawater does not have an inhand_icon_state value - Possible matching sprites for "sodawater" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6138306Z /obj/item/reagent_containers/cup/soda_cans/lemon_lime does not have an inhand_icon_state value - Possible matching sprites for "lemon-lime" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6139346Z /obj/item/reagent_containers/cup/soda_cans/space_up does not have an inhand_icon_state value - Possible matching sprites for "space-up" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6140663Z /obj/item/reagent_containers/cup/soda_cans/starkist does not have an inhand_icon_state value - Possible matching sprites for "starkist" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6142092Z /obj/item/reagent_containers/cup/soda_cans/space_mountain_wind does not have an inhand_icon_state value - Possible matching sprites for "space_mountain_wind" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6143256Z /obj/item/reagent_containers/cup/soda_cans/thirteenloko does not have an inhand_icon_state value - Possible matching sprites for "thirteen_loko" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6144724Z /obj/item/reagent_containers/cup/soda_cans/dr_gibb does not have an inhand_icon_state value - Possible matching sprites for "dr_gibb" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6146202Z /obj/item/reagent_containers/cup/soda_cans/pwr_game does not have an inhand_icon_state value - Possible matching sprites for "purple_can" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6147210Z /obj/item/reagent_containers/cup/glass/coffee does not have an inhand_icon_state value - Possible matching sprites for "coffee" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6148208Z /obj/item/reagent_containers/chem_pack does not have an inhand_icon_state value - Possible matching sprites for "chempack" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-11-01T15:28:36.6149458Z /obj/item/sbeacondrop does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6150700Z /obj/item/sbeacondrop/bomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6152025Z /obj/item/sbeacondrop/emp does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6153053Z /obj/item/sbeacondrop/powersink does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6154086Z /obj/item/sbeacondrop/clownbomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6155452Z /obj/item/stack/medical/bruise_pack does not have an inhand_icon_state value - Possible matching sprites for "brutepack" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6156679Z /obj/item/stack/medical/ointment does not have an inhand_icon_state value - Possible matching sprites for "ointment" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6157638Z /obj/item/minespawner does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6158596Z /obj/item/organ/internal/heart/gland/blood does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6159550Z /obj/item/organ/internal/heart/gland/egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6160683Z /obj/item/organ/internal/heart/gland/quantum does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-01T15:28:36.6161755Z /obj/item/organ/internal/heart/gland/trauma does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-01T15:28:36.6162756Z /obj/item/boxcutter does not have an inhand_icon_state value - Possible matching sprites for "boxcutter" found in: 'icons/mob/inhands/equipment/boxcutter_lefthand.dmi' & 'icons/mob/inhands/equipment/boxcutter_righthand.dmi'
+2022-11-01T15:28:36.6163727Z /obj/item/pushbroom does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-11-01T15:28:36.6164922Z /obj/item/pushbroom/cyborg does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-11-01T15:28:36.6165928Z /obj/item/chainsaw does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
+2022-11-01T15:28:36.6166916Z /obj/item/chainsaw/doomslayer does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
+2022-11-01T15:28:36.6167902Z /obj/item/toy/talking/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2022-11-01T15:28:36.6169082Z /obj/item/toy/figure/chef does not have an inhand_icon_state value - Possible matching sprites for "chef" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-01T15:28:36.6170034Z /obj/item/toy/figure/clown does not have an inhand_icon_state value - Possible matching sprites for "clown" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-01T15:28:36.6171029Z /obj/item/toy/figure/janitor does not have an inhand_icon_state value - Possible matching sprites for "janitor" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-01T15:28:36.6172150Z /obj/item/food/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6173251Z /obj/item/food/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6174826Z /obj/item/kitchen/fork does not have an inhand_icon_state value - Possible matching sprites for "fork" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-11-01T15:28:36.6175832Z /obj/item/kitchen/spoon does not have an inhand_icon_state value - Possible matching sprites for "spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-11-01T15:28:36.6176836Z /obj/item/kitchen/spoon/plastic does not have an inhand_icon_state value - Possible matching sprites for "plastic_spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-11-01T15:28:36.6178144Z /obj/item/book/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2022-11-01T15:28:36.6179305Z /obj/item/pitchfork does not have an inhand_icon_state value - Possible matching sprites for "pitchfork0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-01T15:28:36.6180738Z /obj/item/construction/rcd does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6181781Z /obj/item/construction/rcd/borg does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6182846Z /obj/item/construction/rcd/loaded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6184070Z /obj/item/construction/rcd/loaded/upgraded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6185254Z /obj/item/construction/rcd/internal does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6186373Z /obj/item/construction/rld does not have an inhand_icon_state value - Possible matching sprites for "rld-5" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6187326Z /obj/item/construction/rld/mini does not have an inhand_icon_state value - Possible matching sprites for "rld-5" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6188731Z /obj/item/rcd_ammo does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6190038Z /obj/item/rcd_ammo/large does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6191075Z /obj/item/godstaff does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-11-01T15:28:36.6192277Z /obj/item/godstaff/red does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-11-01T15:28:36.6193619Z /obj/item/godstaff/blue does not have an inhand_icon_state value - Possible matching sprites for "godstaff-blue" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-11-01T15:28:36.6194578Z /obj/item/pipe_dispenser does not have an inhand_icon_state value - Possible matching sprites for "rpd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6195584Z /obj/item/singularityhammer does not have an inhand_icon_state value - Possible matching sprites for "singularity_hammer0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-11-01T15:28:36.6196678Z /obj/item/mjollnir does not have an inhand_icon_state value - Possible matching sprites for "mjollnir0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-11-01T15:28:36.6198710Z /obj/item/spear does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-01T15:28:36.6199875Z /obj/item/spear/explosive does not have an inhand_icon_state value - Possible matching sprites for "spearbomb0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-01T15:28:36.6202418Z /obj/item/spear/grey_tide does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-01T15:28:36.6203520Z /obj/item/spear/bonespear does not have an inhand_icon_state value - Possible matching sprites for "bone_spear0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-01T15:28:36.6204533Z /obj/item/spear/bamboospear does not have an inhand_icon_state value - Possible matching sprites for "bamboo_spear0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-01T15:28:36.6205666Z /obj/item/trash/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6206576Z /obj/item/trash/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6207473Z /obj/item/trash/can does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6208487Z /obj/item/trash/can/food does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-01T15:28:36.6209479Z /obj/item/highfrequencyblade does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-01T15:28:36.6210481Z /obj/item/highfrequencyblade/wizard does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-01T15:28:36.6211474Z /obj/item/borg/sight/meson does not have an inhand_icon_state value - Possible matching sprites for "meson" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-11-01T15:28:36.6212716Z /obj/item/ammo_casing/magic/hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-11-01T15:28:36.6213695Z /obj/item/ammo_casing/magic/hook/bounty does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-11-01T15:28:36.6214670Z /obj/item/harmalarm does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_lefthand.dmi' & 'icons/mob/inhands/items/megaphone_righthand.dmi'
+2022-11-01T15:28:36.6215804Z /obj/item/abductor_machine_beacon does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6216917Z /obj/item/abductor_machine_beacon/chem_dispenser does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6217923Z /obj/item/grown/carbon_rose does not have an inhand_icon_state value - Possible matching sprites for "carbonrose" found in: 'icons/mob/inhands/weapons/plants_righthand.dmi' & 'icons/mob/inhands/weapons/plants_lefthand.dmi'
+2022-11-01T15:28:36.6219079Z /obj/item/paint_palette does not have an inhand_icon_state value - Possible matching sprites for "palette" found in: 'icons/mob/inhands/equipment/palette_righthand.dmi' & 'icons/mob/inhands/equipment/palette_lefthand.dmi'
+2022-11-01T15:28:36.6220238Z /obj/item/surprise_egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-01T15:28:36.6221390Z /obj/item/experi_scanner does not have an inhand_icon_state value - Possible matching sprites for "experiscanner" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6222338Z /obj/item/fishing_hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-11-01T15:28:36.6223438Z /obj/item/cursed_katana does not have an inhand_icon_state value - Possible matching sprites for "cursed_katana" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-01T15:28:36.6224409Z /obj/item/guardiancreator/tech does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6225422Z /obj/item/guardiancreator/tech/choose does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6226453Z /obj/item/guardiancreator/tech/choose/traitor does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6227485Z /obj/item/guardiancreator/tech/choose/dextrous does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6228666Z /obj/item/mod/module/welding does not have an inhand_icon_state value - Possible matching sprites for "welding" found in: 'icons/mob/inhands/clothing/masks_lefthand.dmi' & 'icons/mob/inhands/clothing/masks_righthand.dmi'
+2022-11-01T15:28:36.6229814Z /obj/item/mod/module/mister does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2022-11-01T15:28:36.6230969Z /obj/item/mod/module/mister/atmos does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2022-11-01T15:28:36.6232420Z /obj/item/mod/module/jetpack does not have an inhand_icon_state value - Possible matching sprites for "jetpack" found in: 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi' & 'icons/mob/inhands/equipment/jetpacks_righthand.dmi'
+2022-11-01T15:28:36.6234473Z /obj/item/mod/module/flashlight does not have an inhand_icon_state value - Possible matching sprites for "flashlight" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-01T15:28:36.6235798Z /obj/item/mod/module/stamp does not have an inhand_icon_state value - Possible matching sprites for "stamp" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2022-11-01T15:28:36.6236873Z /obj/item/mod/module/holster does not have an inhand_icon_state value - Possible matching sprites for "holster" found in: 'icons/mob/inhands/equipment/belt_lefthand.dmi' & 'icons/mob/inhands/equipment/belt_righthand.dmi'
+2022-11-01T15:28:36.6237940Z /obj/item/mod/module/megaphone does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_lefthand.dmi' & 'icons/mob/inhands/items/megaphone_righthand.dmi'
+2022-11-01T15:28:36.6239527Z /obj/item/mod/module/drill does not have an inhand_icon_state value - Possible matching sprites for "drill" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-01T15:28:36.6240615Z /obj/item/mod/module/tem does not have an inhand_icon_state value - Possible matching sprites for "chronogun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-11-01T15:28:36.6241586Z /obj/item/bonesetter does not have an inhand_icon_state value - Possible matching sprites for "bonesetter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6242563Z /obj/item/blood_filter does not have an inhand_icon_state value - Possible matching sprites for "bloodfilter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-01T15:28:36.6243567Z /obj/item/mecha_ammo/flashbang does not have an inhand_icon_state value - Possible matching sprites for "flashbang" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-01T15:28:36.6243984Z
+2022-11-01T15:28:36.6244251Z [1;32mPASS[0m /datum/unit_test/defined_inhand_icon_states 1.3s
+2022-11-01T15:28:36.6245107Z ##[endgroup]
+2022-11-01T15:28:38.3781123Z ##[group]/datum/unit_test/keybinding_init
+2022-11-01T15:28:38.3781642Z
+2022-11-01T15:28:38.3782256Z [1;32mPASS[0m /datum/unit_test/keybinding_init 0s
+2022-11-01T15:28:38.3782848Z ##[endgroup]
+2022-11-01T15:28:38.3952800Z ##[group]/datum/unit_test/knockoff_component
+2022-11-01T15:28:38.4583090Z
+2022-11-01T15:28:38.4584605Z [1;32mPASS[0m /datum/unit_test/knockoff_component 0.1s
+2022-11-01T15:28:38.4585463Z ##[endgroup]
+2022-11-01T15:28:38.5388034Z ##[group]/datum/unit_test/limbsanity
+2022-11-01T15:28:38.6201426Z
+2022-11-01T15:28:38.6202784Z [1;32mPASS[0m /datum/unit_test/limbsanity 0.1s
+2022-11-01T15:28:38.6203543Z ##[endgroup]
+2022-11-01T15:28:38.6375016Z ##[group]/datum/unit_test/load_map_security
+2022-11-01T15:28:38.6378905Z map directory not in whitelist: data/load_map_security_temp for map runtimestation
+2022-11-01T15:28:38.6380282Z
+2022-11-01T15:28:38.6381773Z [1;32mPASS[0m /datum/unit_test/load_map_security 0s
+2022-11-01T15:28:38.6382439Z ##[endgroup]
+2022-11-01T15:28:38.6552883Z ##[group]/datum/unit_test/machine_disassembly
+2022-11-01T15:28:38.6594171Z
+2022-11-01T15:28:38.6595097Z [1;32mPASS[0m /datum/unit_test/machine_disassembly 0s
+2022-11-01T15:28:38.6595719Z ##[endgroup]
+2022-11-01T15:28:38.6872178Z ##[group]/datum/unit_test/mecha_damage
+2022-11-01T15:28:38.7397615Z
+2022-11-01T15:28:38.7398654Z [1;32mPASS[0m /datum/unit_test/mecha_damage 0.1s
+2022-11-01T15:28:38.7399283Z ##[endgroup]
+2022-11-01T15:28:38.7754903Z ##[group]/datum/unit_test/test_human_base
+2022-11-01T15:28:38.8529341Z
+2022-11-01T15:28:38.8530478Z [1;32mPASS[0m /datum/unit_test/test_human_base 0.1s
+2022-11-01T15:28:38.8531256Z ##[endgroup]
+2022-11-01T15:28:38.9752946Z ##[group]/datum/unit_test/test_human_bone
+2022-11-01T15:28:39.0547873Z
+2022-11-01T15:28:39.0550271Z [1;32mPASS[0m /datum/unit_test/test_human_bone 0.1s
+2022-11-01T15:28:39.0551284Z ##[endgroup]
+2022-11-01T15:28:39.1298729Z ##[group]/datum/unit_test/merge_type
+2022-11-01T15:28:39.1300463Z
+2022-11-01T15:28:39.1301413Z [1;32mPASS[0m /datum/unit_test/merge_type 0s
+2022-11-01T15:28:39.1302403Z ##[endgroup]
+2022-11-01T15:28:39.1477365Z ##[group]/datum/unit_test/metabolization
+2022-11-01T15:28:39.3901954Z
+2022-11-01T15:28:39.3903433Z [1;32mPASS[0m /datum/unit_test/metabolization 0.2s
+2022-11-01T15:28:39.3906497Z ##[endgroup]
+2022-11-01T15:28:39.7294447Z ##[group]/datum/unit_test/on_mob_end_metabolize
+2022-11-01T15:28:39.7598821Z
+2022-11-01T15:28:39.7600420Z [1;32mPASS[0m /datum/unit_test/on_mob_end_metabolize 0s
+2022-11-01T15:28:39.7649553Z ##[endgroup]
+2022-11-01T15:28:39.7835943Z ##[group]/datum/unit_test/addictions
+2022-11-01T15:28:39.8761920Z
+2022-11-01T15:28:39.8763025Z [1;32mPASS[0m /datum/unit_test/addictions 0.1s
+2022-11-01T15:28:39.8764090Z ##[endgroup]
+2022-11-01T15:28:39.9657360Z ##[group]/datum/unit_test/actions_moved_on_mind_transfer
+2022-11-01T15:28:39.9971522Z
+2022-11-01T15:28:39.9972744Z [1;32mPASS[0m /datum/unit_test/actions_moved_on_mind_transfer 0s
+2022-11-01T15:28:39.9974074Z ##[endgroup]
+2022-11-01T15:28:40.0547546Z ##[group]/datum/unit_test/mob_faction
+2022-11-01T15:28:44.4337194Z
+2022-11-01T15:28:44.4338995Z [1;32mPASS[0m /datum/unit_test/mob_faction 4.4s
+2022-11-01T15:28:44.4343946Z ##[endgroup]
+2022-11-01T15:28:50.4570438Z ##[group]/datum/unit_test/mob_spawn
+2022-11-01T15:28:50.4788560Z
+2022-11-01T15:28:50.4789841Z [1;32mPASS[0m /datum/unit_test/mob_spawn 0s
+2022-11-01T15:28:50.4791361Z ##[endgroup]
+2022-11-01T15:28:50.6427929Z ##[group]/datum/unit_test/modsuit_checks
+2022-11-01T15:28:50.8774698Z
+2022-11-01T15:28:50.8776366Z [1;32mPASS[0m /datum/unit_test/modsuit_checks 0.2s
+2022-11-01T15:28:50.8777936Z ##[endgroup]
+2022-11-01T15:28:51.1124046Z ##[group]/datum/unit_test/modular_map_loader
+2022-11-01T15:28:51.1141260Z
+2022-11-01T15:28:51.1142098Z [1;32mPASS[0m /datum/unit_test/modular_map_loader 0s
+2022-11-01T15:28:51.1142848Z ##[endgroup]
+2022-11-01T15:28:51.1326741Z ##[group]/datum/unit_test/mouse_bite_cable
+2022-11-01T15:28:51.1380480Z
+2022-11-01T15:28:51.1381073Z [1;32mPASS[0m /datum/unit_test/mouse_bite_cable 0s
+2022-11-01T15:28:51.1381752Z ##[endgroup]
+2022-11-01T15:28:51.1577018Z ##[group]/datum/unit_test/novaflower_burn
+2022-11-01T15:28:51.2169264Z
+2022-11-01T15:28:51.2170162Z [1;32mPASS[0m /datum/unit_test/novaflower_burn 0.1s
+2022-11-01T15:28:51.2170901Z ##[endgroup]
+2022-11-01T15:28:51.2996852Z ##[group]/datum/unit_test/ntnetwork
+2022-11-01T15:28:51.3019053Z
+2022-11-01T15:28:51.3019857Z [1;32mPASS[0m /datum/unit_test/ntnetwork 0.1s
+2022-11-01T15:28:51.3020531Z ##[endgroup]
+2022-11-01T15:28:51.3196087Z ##[group]/datum/unit_test/nuke_cinematic
+2022-11-01T15:28:56.0755977Z
+2022-11-01T15:28:56.0763029Z [1;32mPASS[0m /datum/unit_test/nuke_cinematic 4.7s
+2022-11-01T15:28:56.0764783Z ##[endgroup]
+2022-11-01T15:28:56.3446321Z ##[group]/datum/unit_test/objectives_category
+2022-11-01T15:28:56.3446835Z
+2022-11-01T15:28:56.3447470Z [1;32mPASS[0m /datum/unit_test/objectives_category 0s
+2022-11-01T15:28:56.3448136Z ##[endgroup]
+2022-11-01T15:28:56.3614737Z ##[group]/datum/unit_test/operating_table
+2022-11-01T15:28:56.4176620Z
+2022-11-01T15:28:56.4177598Z [1;32mPASS[0m /datum/unit_test/operating_table 0.1s
+2022-11-01T15:28:56.4178689Z ##[endgroup]
+2022-11-01T15:28:56.4981266Z ##[group]/datum/unit_test/outfit_sanity
+2022-11-01T15:29:06.6657414Z
+2022-11-01T15:29:06.6658439Z [1;32mPASS[0m /datum/unit_test/outfit_sanity 10.2s
+2022-11-01T15:29:06.6659196Z ##[endgroup]
+2022-11-01T15:29:16.7908070Z ##[group]/datum/unit_test/paintings
+2022-11-01T15:29:16.8212273Z
+2022-11-01T15:29:16.8213346Z [1;32mPASS[0m /datum/unit_test/paintings 0.1s
+2022-11-01T15:29:16.8214069Z ##[endgroup]
+2022-11-01T15:29:16.8389425Z ##[group]/datum/unit_test/pills
+2022-11-01T15:29:16.8676028Z
+2022-11-01T15:29:16.8677434Z [1;32mPASS[0m /datum/unit_test/pills 0s
+2022-11-01T15:29:16.8678165Z ##[endgroup]
+2022-11-01T15:29:16.9417567Z ##[group]/datum/unit_test/plane_double_transform
+2022-11-01T15:29:16.9735002Z
+2022-11-01T15:29:16.9735721Z [1;32mPASS[0m /datum/unit_test/plane_double_transform 0s
+2022-11-01T15:29:16.9736359Z ##[endgroup]
+2022-11-01T15:29:17.0062562Z ##[group]/datum/unit_test/plane_dupe_detector
+2022-11-01T15:29:17.0065142Z
+2022-11-01T15:29:17.0067978Z [1;32mPASS[0m /datum/unit_test/plane_dupe_detector 0s
+2022-11-01T15:29:17.0071640Z ##[endgroup]
+2022-11-01T15:29:17.0244509Z ##[group]/datum/unit_test/plantgrowth
+2022-11-01T15:29:17.0776528Z
+2022-11-01T15:29:17.0779718Z [1;32mPASS[0m /datum/unit_test/plantgrowth 0s
+2022-11-01T15:29:17.0781279Z ##[endgroup]
+2022-11-01T15:29:17.0965505Z ##[group]/datum/unit_test/preference_species
+2022-11-01T15:29:17.0966443Z
+2022-11-01T15:29:17.0969864Z [1;32mPASS[0m /datum/unit_test/preference_species 0s
+2022-11-01T15:29:17.0973093Z ##[endgroup]
+2022-11-01T15:29:17.1152354Z ##[group]/datum/unit_test/preferences_implement_everything
+2022-11-01T15:29:23.4577951Z
+2022-11-01T15:29:23.4578850Z [1;32mPASS[0m /datum/unit_test/preferences_implement_everything 6.3s
+2022-11-01T15:29:23.4579521Z ##[endgroup]
+2022-11-01T15:29:29.7830207Z ##[group]/datum/unit_test/preferences_valid_savefile_key
+2022-11-01T15:29:29.7830930Z
+2022-11-01T15:29:29.7833510Z [1;32mPASS[0m /datum/unit_test/preferences_valid_savefile_key 0s
+2022-11-01T15:29:29.7834275Z ##[endgroup]
+2022-11-01T15:29:29.8033816Z ##[group]/datum/unit_test/preferences_valid_main_feature_name
+2022-11-01T15:29:29.8034550Z
+2022-11-01T15:29:29.8035744Z [1;32mPASS[0m /datum/unit_test/preferences_valid_main_feature_name 0s
+2022-11-01T15:29:29.8089387Z ##[endgroup]
+2022-11-01T15:29:29.8234720Z ##[group]/datum/unit_test/projectile_movetypes
+2022-11-01T15:29:29.8234940Z
+2022-11-01T15:29:29.8235533Z [1;32mPASS[0m /datum/unit_test/projectile_movetypes 0s
+2022-11-01T15:29:29.8236221Z ##[endgroup]
+2022-11-01T15:29:29.8415787Z ##[group]/datum/unit_test/gun_go_bang
+2022-11-01T15:29:29.9160628Z
+2022-11-01T15:29:29.9161545Z [1;32mPASS[0m /datum/unit_test/gun_go_bang 0.1s
+2022-11-01T15:29:29.9162229Z ##[endgroup]
+2022-11-01T15:29:30.0035502Z ##[group]/datum/unit_test/quirk_icons
+2022-11-01T15:29:30.0035718Z
+2022-11-01T15:29:30.0036645Z [1;32mPASS[0m /datum/unit_test/quirk_icons 0s
+2022-11-01T15:29:30.0037121Z ##[endgroup]
+2022-11-01T15:29:30.0231538Z ##[group]/datum/unit_test/range_return
+2022-11-01T15:29:30.0231750Z
+2022-11-01T15:29:30.0232212Z [1;32mPASS[0m /datum/unit_test/range_return 0s
+2022-11-01T15:29:30.0232658Z ##[endgroup]
+2022-11-01T15:29:30.0427797Z ##[group]/datum/unit_test/frame_stacking
+2022-11-01T15:29:30.1020458Z
+2022-11-01T15:29:30.1021324Z [1;32mPASS[0m /datum/unit_test/frame_stacking 0.1s
+2022-11-01T15:29:30.1022036Z ##[endgroup]
+2022-11-01T15:29:30.1824738Z ##[group]/datum/unit_test/reagent_id_typos
+2022-11-01T15:29:30.1842378Z
+2022-11-01T15:29:30.1842930Z [1;32mPASS[0m /datum/unit_test/reagent_id_typos 0s
+2022-11-01T15:29:30.1843838Z ##[endgroup]
+2022-11-01T15:29:30.2065945Z ##[group]/datum/unit_test/reagent_mob_expose
+2022-11-01T15:29:30.2431485Z
+2022-11-01T15:29:30.2432396Z [1;32mPASS[0m /datum/unit_test/reagent_mob_expose 0s
+2022-11-01T15:29:30.2433748Z ##[endgroup]
+2022-11-01T15:29:30.2736664Z ##[group]/datum/unit_test/reagent_mob_procs
+2022-11-01T15:29:30.3087817Z
+2022-11-01T15:29:30.3088677Z [1;32mPASS[0m /datum/unit_test/reagent_mob_procs 0.1s
+2022-11-01T15:29:30.3089382Z ##[endgroup]
+2022-11-01T15:29:30.3347974Z ##[group]/datum/unit_test/reagent_names
+2022-11-01T15:29:31.2354819Z
+2022-11-01T15:29:31.2355678Z [1;32mPASS[0m /datum/unit_test/reagent_names 0.9s
+2022-11-01T15:29:31.2356318Z ##[endgroup]
+2022-11-01T15:29:32.1042828Z ##[group]/datum/unit_test/reagent_recipe_collisions
+2022-11-01T15:29:32.5727294Z
+2022-11-01T15:29:32.5728917Z [1;32mPASS[0m /datum/unit_test/reagent_recipe_collisions 0.4s
+2022-11-01T15:29:32.5730155Z ##[endgroup]
+2022-11-01T15:29:32.9927755Z ##[group]/datum/unit_test/reagent_transfer
+2022-11-01T15:29:32.9934109Z
+2022-11-01T15:29:32.9935981Z [1;32mPASS[0m /datum/unit_test/reagent_transfer 0s
+2022-11-01T15:29:32.9936895Z ##[endgroup]
+2022-11-01T15:29:33.0126783Z ##[group]/datum/unit_test/stop_drop_and_roll
+2022-11-01T15:29:33.0390175Z
+2022-11-01T15:29:33.0391562Z [1;32mPASS[0m /datum/unit_test/stop_drop_and_roll 0s
+2022-11-01T15:29:33.0394218Z ##[endgroup]
+2022-11-01T15:29:33.0646804Z ##[group]/datum/unit_test/container_resist
+2022-11-01T15:29:33.1054797Z
+2022-11-01T15:29:33.1056167Z [1;32mPASS[0m /datum/unit_test/container_resist 0.1s
+2022-11-01T15:29:33.1057687Z ##[endgroup]
+2022-11-01T15:29:33.1496944Z ##[group]/datum/unit_test/get_message_mods
+2022-11-01T15:29:33.1778888Z
+2022-11-01T15:29:33.1780246Z [1;32mPASS[0m /datum/unit_test/get_message_mods 0s
+2022-11-01T15:29:33.1781311Z ##[endgroup]
+2022-11-01T15:29:33.2061026Z ##[group]/datum/unit_test/say_signal
+2022-11-01T15:29:33.2078006Z
+2022-11-01T15:29:33.2079823Z [1;32mPASS[0m /datum/unit_test/say_signal 0s
+2022-11-01T15:29:33.2083007Z ##[endgroup]
+2022-11-01T15:29:33.2288010Z ##[group]/datum/unit_test/screenshot_antag_icons
+2022-11-01T15:29:33.2307183Z screenshot_antag_icons_fugitive was put in data/screenshots_new
+2022-11-01T15:29:33.2317601Z screenshot_antag_icons_loneoperative was put in data/screenshots_new
+2022-11-01T15:29:33.2741726Z screenshot_antag_icons_sentiencepotionspawn was put in data/screenshots_new
+2022-11-01T15:29:33.2757069Z screenshot_antag_icons_traitor was put in data/screenshots_new
+2022-11-01T15:29:33.3311410Z screenshot_antag_icons_malfai was put in data/screenshots_new
+2022-11-01T15:29:33.3356755Z screenshot_antag_icons_bloodbrother was put in data/screenshots_new
+2022-11-01T15:29:33.3365772Z screenshot_antag_icons_changeling was put in data/screenshots_new
+2022-11-01T15:29:33.3430251Z screenshot_antag_icons_heretic was put in data/screenshots_new
+2022-11-01T15:29:33.3445326Z screenshot_antag_icons_wizard was put in data/screenshots_new
+2022-11-01T15:29:33.3487169Z screenshot_antag_icons_cultist was put in data/screenshots_new
+2022-11-01T15:29:33.3511130Z screenshot_antag_icons_operative was put in data/screenshots_new
+2022-11-01T15:29:33.3528654Z screenshot_antag_icons_clownoperative was put in data/screenshots_new
+2022-11-01T15:29:33.3549119Z screenshot_antag_icons_headrevolutionary was put in data/screenshots_new
+2022-11-01T15:29:33.3549976Z screenshot_antag_icons_syndicateinfiltrator was put in data/screenshots_new
+2022-11-01T15:29:33.3550439Z screenshot_antag_icons_provocateur was put in data/screenshots_new
+2022-11-01T15:29:33.3557417Z screenshot_antag_icons_hereticsmuggler was put in data/screenshots_new
+2022-11-01T15:29:33.3557858Z screenshot_antag_icons_wizardmidround was put in data/screenshots_new
+2022-11-01T15:29:33.3558296Z screenshot_antag_icons_operativemidround was put in data/screenshots_new
+2022-11-01T15:29:33.4364141Z screenshot_antag_icons_blob was put in data/screenshots_new
+2022-11-01T15:29:33.4501951Z screenshot_antag_icons_xenomorph was put in data/screenshots_new
+2022-11-01T15:29:33.4510297Z screenshot_antag_icons_nightmare was put in data/screenshots_new
+2022-11-01T15:29:33.4593244Z screenshot_antag_icons_spacedragon was put in data/screenshots_new
+2022-11-01T15:29:33.4602657Z screenshot_antag_icons_abductor was put in data/screenshots_new
+2022-11-01T15:29:33.4610909Z screenshot_antag_icons_spaceninja was put in data/screenshots_new
+2022-11-01T15:29:33.4905469Z screenshot_antag_icons_revenant was put in data/screenshots_new
+2022-11-01T15:29:33.4932248Z screenshot_antag_icons_sentientdisease was put in data/screenshots_new
+2022-11-01T15:29:33.4934049Z screenshot_antag_icons_syndicatesleeperagent was put in data/screenshots_new
+2022-11-01T15:29:33.5122130Z screenshot_antag_icons_blobinfection was put in data/screenshots_new
+2022-11-01T15:29:33.5146398Z screenshot_antag_icons_obsessed was put in data/screenshots_new
+2022-11-01T15:29:33.5153740Z screenshot_antag_icons_malfaimidround was put in data/screenshots_new
+2022-11-01T15:29:33.5154025Z
+2022-11-01T15:29:33.5154740Z [1;32mPASS[0m /datum/unit_test/screenshot_antag_icons 0.3s
+2022-11-01T15:29:33.5155554Z ##[endgroup]
+2022-11-01T15:29:33.7840161Z ##[group]/datum/unit_test/screenshot_basic
+2022-11-01T15:29:33.7846135Z screenshot_basic_red was put in data/screenshots_new
+2022-11-01T15:29:33.7850103Z
+2022-11-01T15:29:33.7851242Z [1;32mPASS[0m /datum/unit_test/screenshot_basic 0s
+2022-11-01T15:29:33.7851736Z ##[endgroup]
+2022-11-01T15:29:33.8047719Z ##[group]/datum/unit_test/screenshot_humanoids
+2022-11-01T15:29:34.5128170Z screenshot_humanoids__datum_species_lizard was put in data/screenshots_new
+2022-11-01T15:29:35.3887159Z screenshot_humanoids__datum_species_moth was put in data/screenshots_new
+2022-11-01T15:29:36.0866727Z screenshot_humanoids__datum_species_shadow was put in data/screenshots_new
+2022-11-01T15:29:36.3285479Z screenshot_humanoids__datum_species_shadow_nightmare was put in data/screenshots_new
+2022-11-01T15:29:37.0085075Z screenshot_humanoids__datum_species_abductor was put in data/screenshots_new
+2022-11-01T15:29:37.6062780Z screenshot_humanoids__datum_species_android was put in data/screenshots_new
+2022-11-01T15:29:38.2188199Z screenshot_humanoids__datum_species_dullahan was put in data/screenshots_new
+2022-11-01T15:29:38.8612302Z screenshot_humanoids__datum_species_ethereal was put in data/screenshots_new
+2022-11-01T15:29:39.5803701Z screenshot_humanoids__datum_species_human was put in data/screenshots_new
+2022-11-01T15:29:40.3407635Z screenshot_humanoids__datum_species_human_felinid was put in data/screenshots_new
+2022-11-01T15:29:41.1214653Z screenshot_humanoids__datum_species_human_krokodil_addict was put in data/screenshots_new
+2022-11-01T15:29:41.9521982Z screenshot_humanoids__datum_species_fly was put in data/screenshots_new
+2022-11-01T15:29:42.6006415Z screenshot_humanoids__datum_species_golem was put in data/screenshots_new
+2022-11-01T15:29:43.2088729Z screenshot_humanoids__datum_species_golem_adamantine was put in data/screenshots_new
+2022-11-01T15:29:43.8190470Z screenshot_humanoids__datum_species_golem_plasma was put in data/screenshots_new
+2022-11-01T15:29:44.4370361Z screenshot_humanoids__datum_species_golem_diamond was put in data/screenshots_new
+2022-11-01T15:29:45.0207260Z screenshot_humanoids__datum_species_golem_gold was put in data/screenshots_new
+2022-11-01T15:29:45.6198968Z screenshot_humanoids__datum_species_golem_silver was put in data/screenshots_new
+2022-11-01T15:29:46.2210457Z screenshot_humanoids__datum_species_golem_plasteel was put in data/screenshots_new
+2022-11-01T15:29:46.7870537Z screenshot_humanoids__datum_species_golem_titanium was put in data/screenshots_new
+2022-11-01T15:29:47.3882868Z screenshot_humanoids__datum_species_golem_plastitanium was put in data/screenshots_new
+2022-11-01T15:29:47.9960089Z screenshot_humanoids__datum_species_golem_alloy was put in data/screenshots_new
+2022-11-01T15:29:48.6148861Z screenshot_humanoids__datum_species_golem_wood was put in data/screenshots_new
+2022-11-01T15:29:49.2815897Z screenshot_humanoids__datum_species_golem_uranium was put in data/screenshots_new
+2022-11-01T15:29:49.9589760Z screenshot_humanoids__datum_species_golem_sand was put in data/screenshots_new
+2022-11-01T15:29:50.5992504Z screenshot_humanoids__datum_species_golem_glass was put in data/screenshots_new
+2022-11-01T15:29:51.2503187Z screenshot_humanoids__datum_species_golem_bluespace was put in data/screenshots_new
+2022-11-01T15:29:51.8848719Z screenshot_humanoids__datum_species_golem_bananium was put in data/screenshots_new
+2022-11-01T15:29:52.3852904Z screenshot_humanoids__datum_species_golem_runic was put in data/screenshots_new
+2022-11-01T15:29:53.0469173Z screenshot_humanoids__datum_species_golem_cloth was put in data/screenshots_new
+2022-11-01T15:29:53.6444155Z screenshot_humanoids__datum_species_golem_plastic was put in data/screenshots_new
+2022-11-01T15:29:54.3098057Z screenshot_humanoids__datum_species_golem_bronze was put in data/screenshots_new
+2022-11-01T15:29:54.8535540Z screenshot_humanoids__datum_species_golem_cardboard was put in data/screenshots_new
+2022-11-01T15:29:55.5735108Z screenshot_humanoids__datum_species_golem_leather was put in data/screenshots_new
+2022-11-01T15:29:56.0717640Z screenshot_humanoids__datum_species_golem_durathread was put in data/screenshots_new
+2022-11-01T15:29:56.5432741Z screenshot_humanoids__datum_species_golem_bone was put in data/screenshots_new
+2022-11-01T15:29:57.0369874Z screenshot_humanoids__datum_species_golem_snow was put in data/screenshots_new
+2022-11-01T15:29:57.7216313Z screenshot_humanoids__datum_species_golem_mhydrogen was put in data/screenshots_new
+2022-11-01T15:29:58.4794694Z screenshot_humanoids__datum_species_jelly was put in data/screenshots_new
+2022-11-01T15:29:59.2634596Z screenshot_humanoids__datum_species_jelly_slime was put in data/screenshots_new
+2022-11-01T15:30:00.0372590Z screenshot_humanoids__datum_species_jelly_luminescent was put in data/screenshots_new
+2022-11-01T15:30:00.7908231Z screenshot_humanoids__datum_species_jelly_stargazer was put in data/screenshots_new
+2022-11-01T15:30:01.4923254Z screenshot_humanoids__datum_species_lizard_ashwalker was put in data/screenshots_new
+2022-11-01T15:30:02.2186441Z screenshot_humanoids__datum_species_lizard_silverscale was put in data/screenshots_new
+2022-11-01T15:30:02.4149008Z screenshot_humanoids__datum_species_monkey was put in data/screenshots_new
+2022-11-01T15:30:03.0255568Z screenshot_humanoids__datum_species_mush was put in data/screenshots_new
+2022-11-01T15:30:03.6777755Z screenshot_humanoids__datum_species_plasmaman was put in data/screenshots_new
+2022-11-01T15:30:04.4788826Z screenshot_humanoids__datum_species_pod was put in data/screenshots_new
+2022-11-01T15:30:05.2174595Z screenshot_humanoids__datum_species_skeleton was put in data/screenshots_new
+2022-11-01T15:30:05.9909000Z screenshot_humanoids__datum_species_snail was put in data/screenshots_new
+2022-11-01T15:30:06.7544848Z screenshot_humanoids__datum_species_vampire was put in data/screenshots_new
+2022-11-01T15:30:07.6424794Z screenshot_humanoids__datum_species_zombie was put in data/screenshots_new
+2022-11-01T15:30:08.5972035Z screenshot_humanoids__datum_species_zombie_infectious was put in data/screenshots_new
+2022-11-01T15:30:08.5972336Z
+2022-11-01T15:30:08.5972854Z [1;32mPASS[0m /datum/unit_test/screenshot_humanoids 34.7s
+2022-11-01T15:30:08.5973526Z ##[endgroup]
+2022-11-01T15:30:44.2099567Z ##[group]/datum/unit_test/screenshot_saturnx
+2022-11-01T15:30:44.5011065Z screenshot_saturnx_invisibility was put in data/screenshots_new
+2022-11-01T15:30:44.5011333Z
+2022-11-01T15:30:44.5012180Z [1;32mPASS[0m /datum/unit_test/screenshot_saturnx 0.3s
+2022-11-01T15:30:44.5012769Z ##[endgroup]
+2022-11-01T15:30:44.7785909Z ##[group]/datum/unit_test/security_officer_roundstart_distribution
+2022-11-01T15:30:44.9017426Z
+2022-11-01T15:30:44.9018614Z [1;32mPASS[0m /datum/unit_test/security_officer_roundstart_distribution 0.2s
+2022-11-01T15:30:44.9019313Z ##[endgroup]
+2022-11-01T15:30:45.0427506Z ##[group]/datum/unit_test/security_officer_latejoin_distribution
+2022-11-01T15:30:45.5391742Z
+2022-11-01T15:30:45.5392426Z [1;32mPASS[0m /datum/unit_test/security_officer_latejoin_distribution 0.5s
+2022-11-01T15:30:45.5393125Z ##[endgroup]
+2022-11-01T15:30:46.2210379Z ##[group]/datum/unit_test/security_levels
+2022-11-01T15:30:46.2210589Z
+2022-11-01T15:30:46.2216058Z [1;32mPASS[0m /datum/unit_test/security_levels 0s
+2022-11-01T15:30:46.2216555Z ##[endgroup]
+2022-11-01T15:30:46.2399271Z ##[group]/datum/unit_test/servingtray
+2022-11-01T15:30:46.2779259Z
+2022-11-01T15:30:46.2780125Z [1;32mPASS[0m /datum/unit_test/servingtray 0s
+2022-11-01T15:30:46.2780972Z ##[endgroup]
+2022-11-01T15:30:46.3048093Z ##[group]/datum/unit_test/simple_animal_freeze
+2022-11-01T15:30:46.3059709Z
+2022-11-01T15:30:46.3060267Z [1;32mPASS[0m /datum/unit_test/simple_animal_freeze 0s
+2022-11-01T15:30:46.3060938Z ##[endgroup]
+2022-11-01T15:30:46.3241320Z ##[group]/datum/unit_test/siunit
+2022-11-01T15:30:46.3241508Z
+2022-11-01T15:30:46.3241961Z [1;32mPASS[0m /datum/unit_test/siunit 0s
+2022-11-01T15:30:46.3242362Z ##[endgroup]
+2022-11-01T15:30:46.3753674Z ##[group]/datum/unit_test/slips
+2022-11-01T15:30:46.4300467Z
+2022-11-01T15:30:46.4301480Z [1;32mPASS[0m /datum/unit_test/slips 0.1s
+2022-11-01T15:30:46.4302301Z ##[endgroup]
+2022-11-01T15:30:46.5100922Z ##[group]/datum/unit_test/spawn_humans
+2022-11-01T15:30:51.5880046Z
+2022-11-01T15:30:51.5881071Z [1;32mPASS[0m /datum/unit_test/spawn_humans 5s
+2022-11-01T15:30:51.5881789Z ##[endgroup]
+2022-11-01T15:30:51.6350612Z ##[group]/datum/unit_test/spawn_mobs
+2022-11-01T15:30:51.7210346Z
+2022-11-01T15:30:51.7211375Z [1;32mPASS[0m /datum/unit_test/spawn_mobs 0.1s
+2022-11-01T15:30:51.7212072Z ##[endgroup]
+2022-11-01T15:30:51.8820435Z ##[group]/datum/unit_test/species_change_clothing
+2022-11-01T15:30:51.9839314Z
+2022-11-01T15:30:51.9840163Z [1;32mPASS[0m /datum/unit_test/species_change_clothing 0.1s
+2022-11-01T15:30:51.9840797Z ##[endgroup]
+2022-11-01T15:30:52.0595249Z ##[group]/datum/unit_test/species_change_organs
+2022-11-01T15:30:52.1312087Z
+2022-11-01T15:30:52.1313114Z [1;32mPASS[0m /datum/unit_test/species_change_organs 0.1s
+2022-11-01T15:30:52.1313735Z ##[endgroup]
+2022-11-01T15:30:52.2788548Z ##[group]/datum/unit_test/species_config_sanity
+2022-11-01T15:30:52.2788764Z
+2022-11-01T15:30:52.2789218Z [1;32mPASS[0m /datum/unit_test/species_config_sanity 0s
+2022-11-01T15:30:52.2789672Z ##[endgroup]
+2022-11-01T15:30:52.2965591Z ##[group]/datum/unit_test/species_unique_id
+2022-11-01T15:30:52.2965794Z
+2022-11-01T15:30:52.2966648Z [1;32mPASS[0m /datum/unit_test/species_unique_id 0s
+2022-11-01T15:30:52.2967087Z ##[endgroup]
+2022-11-01T15:30:52.3145296Z ##[group]/datum/unit_test/species_whitelist_check
+2022-11-01T15:30:52.3145500Z
+2022-11-01T15:30:52.3145979Z [1;32mPASS[0m /datum/unit_test/species_whitelist_check 0s
+2022-11-01T15:30:52.3146421Z ##[endgroup]
+2022-11-01T15:30:52.3319686Z ##[group]/datum/unit_test/spell_invocations
+2022-11-01T15:30:52.3320202Z
+2022-11-01T15:30:52.3320653Z [1;32mPASS[0m /datum/unit_test/spell_invocations 0s
+2022-11-01T15:30:52.3321098Z ##[endgroup]
+2022-11-01T15:30:52.3490883Z ##[group]/datum/unit_test/mind_swap_spell
+2022-11-01T15:30:52.4036851Z
+2022-11-01T15:30:52.4037676Z [1;32mPASS[0m /datum/unit_test/mind_swap_spell 0.1s
+2022-11-01T15:30:52.4038275Z ##[endgroup]
+2022-11-01T15:30:52.4828774Z ##[group]/datum/unit_test/spell_names
+2022-11-01T15:30:52.4828988Z
+2022-11-01T15:30:52.4829550Z [1;32mPASS[0m /datum/unit_test/spell_names 0s
+2022-11-01T15:30:52.4829982Z ##[endgroup]
+2022-11-01T15:30:52.5000265Z ##[group]/datum/unit_test/shapeshift_spell_validity
+2022-11-01T15:30:52.5004478Z
+2022-11-01T15:30:52.5005145Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell_validity 0.1s
+2022-11-01T15:30:52.5005621Z ##[endgroup]
+2022-11-01T15:30:52.5165907Z ##[group]/datum/unit_test/shapeshift_spell
+2022-11-01T15:30:52.8039754Z
+2022-11-01T15:30:52.8040573Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell 0.3s
+2022-11-01T15:30:52.8041200Z ##[endgroup]
+2022-11-01T15:30:53.0783548Z ##[group]/datum/unit_test/shapeshift_holoparasites
+2022-11-01T15:30:53.1126288Z
+2022-11-01T15:30:53.1127333Z [1;32mPASS[0m /datum/unit_test/shapeshift_holoparasites 0.1s
+2022-11-01T15:30:53.1128391Z ##[endgroup]
+2022-11-01T15:30:53.1559214Z ##[group]/datum/unit_test/spritesheets
+2022-11-01T15:30:53.1593744Z
+2022-11-01T15:30:53.1596242Z [1;32mPASS[0m /datum/unit_test/spritesheets 0s
+2022-11-01T15:30:53.1599434Z ##[endgroup]
+2022-11-01T15:30:53.1775369Z ##[group]/datum/unit_test/stack_singular_name
+2022-11-01T15:30:53.1777955Z
+2022-11-01T15:30:53.1780282Z [1;32mPASS[0m /datum/unit_test/stack_singular_name 0s
+2022-11-01T15:30:53.1781032Z ##[endgroup]
+2022-11-01T15:30:53.1978111Z ##[group]/datum/unit_test/stomach
+2022-11-01T15:30:53.2306019Z
+2022-11-01T15:30:53.2308397Z [1;32mPASS[0m /datum/unit_test/stomach 0.1s
+2022-11-01T15:30:53.2311132Z ##[endgroup]
+2022-11-01T15:30:53.2563959Z ##[group]/datum/unit_test/strip_menu_ui_status
+2022-11-01T15:30:53.3090477Z
+2022-11-01T15:30:53.3091739Z [1;32mPASS[0m /datum/unit_test/strip_menu_ui_status 0.1s
+2022-11-01T15:30:53.3094850Z ##[endgroup]
+2022-11-01T15:30:53.3492514Z ##[group]/datum/unit_test/subsystem_init
+2022-11-01T15:30:53.3493184Z
+2022-11-01T15:30:53.3495636Z [1;32mPASS[0m /datum/unit_test/subsystem_init 0s
+2022-11-01T15:30:53.3498157Z ##[endgroup]
+2022-11-01T15:30:53.3664175Z ##[group]/datum/unit_test/suit_storage_icons
+2022-11-01T15:30:55.3207063Z 1 - /obj/item/ammo_casing/shotgun using invalid worn_icon_state, "shell"
+2022-11-01T15:30:55.3382821Z 2 - /obj/item/gun/ballistic/shotgun/hook using invalid icon_state, "hookshotgun"
+2022-11-01T15:30:55.3567861Z 3 - /obj/item/gun/ballistic/automatic/surplus using invalid icon_state, "surplus"
+2022-11-01T15:30:55.3745473Z 4 - /obj/item/gun/energy/beam_rifle using invalid icon_state, "esniper"
+2022-11-01T15:30:55.3772721Z 5 - /obj/item/gun/energy/lasercannon using invalid icon_state, "lasercannon"
+2022-11-01T15:30:55.3812025Z 6 - /obj/item/gun/energy/ionrifle using invalid icon_state, "ionrifle"
+2022-11-01T15:30:55.3814794Z 7 - /obj/item/gun/energy/ionrifle/carbine using invalid icon_state, "ioncarbine"
+2022-11-01T15:30:55.3984674Z 8 - /obj/item/tome using invalid icon_state, "tome"
+2022-11-01T15:30:55.4027757Z 9 - /obj/item/melee/sickly_blade/void using invalid icon_state, "void_blade"
+2022-11-01T15:30:55.4043373Z 10 - /obj/item/nullrod/staff using invalid icon_state, "godstaff-red"
+2022-11-01T15:30:55.4048073Z 11 - /obj/item/nullrod/staff/blue using invalid icon_state, "godstaff-blue"
+2022-11-01T15:30:55.4136802Z 12 - /obj/item/nullrod/tribal_knife using invalid icon_state, "crysknife"
+2022-11-01T15:30:55.4148858Z 13 - /obj/item/nullrod/spear using invalid icon_state, "ratvarian_spear"
+2022-11-01T15:30:55.4161026Z 14 - /obj/item/candle using invalid icon_state, "candle1"
+2022-11-01T15:30:55.4710008Z 15 - /obj/item/toy/eightball using invalid icon_state, "eightball"
+2022-11-01T15:30:55.4712397Z 16 - /obj/item/toy/mecha using invalid icon_state, "fivestarstoy"
+2022-11-01T15:30:55.4717528Z 17 - /obj/item/toy/mecha/ripley using invalid icon_state, "ripleytoy"
+2022-11-01T15:30:55.4720640Z 18 - /obj/item/toy/mecha/ripleymkii using invalid icon_state, "ripleymkiitoy"
+2022-11-01T15:30:55.4725923Z 19 - /obj/item/toy/mecha/hauler using invalid icon_state, "haulertoy"
+2022-11-01T15:30:55.4728709Z 20 - /obj/item/toy/mecha/clarke using invalid icon_state, "clarketoy"
+2022-11-01T15:30:55.4732862Z 21 - /obj/item/toy/mecha/odysseus using invalid icon_state, "odysseustoy"
+2022-11-01T15:30:55.4736959Z 22 - /obj/item/toy/mecha/gygax using invalid icon_state, "gygaxtoy"
+2022-11-01T15:30:55.4741521Z 23 - /obj/item/toy/mecha/durand using invalid icon_state, "durandtoy"
+2022-11-01T15:30:55.4745193Z 24 - /obj/item/toy/mecha/savannahivanov using invalid icon_state, "savannahivanovtoy"
+2022-11-01T15:30:55.4748259Z 25 - /obj/item/toy/mecha/phazon using invalid icon_state, "phazontoy"
+2022-11-01T15:30:55.4752835Z 26 - /obj/item/toy/mecha/honk using invalid icon_state, "honktoy"
+2022-11-01T15:30:55.4755743Z 27 - /obj/item/toy/mecha/darkgygax using invalid icon_state, "darkgygaxtoy"
+2022-11-01T15:30:55.4760291Z 28 - /obj/item/toy/mecha/mauler using invalid icon_state, "maulertoy"
+2022-11-01T15:30:55.4763840Z 29 - /obj/item/toy/mecha/darkhonk using invalid icon_state, "darkhonktoy"
+2022-11-01T15:30:55.4768684Z 30 - /obj/item/toy/mecha/deathripley using invalid icon_state, "deathripleytoy"
+2022-11-01T15:30:55.4772115Z 31 - /obj/item/toy/mecha/reticence using invalid icon_state, "reticencetoy"
+2022-11-01T15:30:55.4774925Z 32 - /obj/item/toy/mecha/marauder using invalid icon_state, "maraudertoy"
+2022-11-01T15:30:55.4779221Z 33 - /obj/item/toy/mecha/seraph using invalid icon_state, "seraphtoy"
+2022-11-01T15:30:55.4783197Z 34 - /obj/item/toy/mecha/firefighter using invalid icon_state, "firefightertoy"
+2022-11-01T15:30:55.4786820Z 35 - /obj/item/toy/waterballoon using invalid icon_state, "waterballoon-e"
+2022-11-01T15:30:55.4790265Z 36 - /obj/item/toy/balloon using invalid icon_state, "balloon"
+2022-11-01T15:30:55.4794733Z 37 - /obj/item/toy/balloon/corgi using invalid icon_state, "corgi"
+2022-11-01T15:30:55.4798121Z 38 - /obj/item/toy/balloon/syndicate using invalid icon_state, "syndballoon"
+2022-11-01T15:30:55.4800642Z 39 - /obj/item/toy/balloon/arrest using invalid icon_state, "arrestballoon"
+2022-11-01T15:30:55.4805597Z 40 - /obj/item/toy/captainsaid using invalid icon_state, "captainsaid_off"
+2022-11-01T15:30:55.4810625Z 41 - /obj/item/toy/spinningtoy using invalid icon_state, "singularity_s1"
+2022-11-01T15:30:55.4819042Z 42 - /obj/item/toy/ammo/gun using invalid icon_state, "357OLD-7"
+2022-11-01T15:30:55.4821247Z 43 - /obj/item/toy/sword using invalid icon_state, "e_sword"
+2022-11-01T15:30:55.4826674Z 44 - /obj/item/toy/foamblade using invalid icon_state, "foamblade"
+2022-11-01T15:30:55.4906032Z 45 - /obj/item/toy/windup_toolbox using invalid icon_state, "green"
+2022-11-01T15:30:55.4915446Z 46 - /obj/item/toy/snappop using invalid icon_state, "snappop"
+2022-11-01T15:30:55.4918336Z 47 - /obj/item/toy/talking using invalid icon_state, "owlprize"
+2022-11-01T15:30:55.4923506Z 48 - /obj/item/toy/talking/ai using invalid icon_state, "AI"
+2022-11-01T15:30:55.4927158Z 49 - /obj/item/toy/talking/codex_gigas using invalid icon_state, "demonomicon"
+2022-11-01T15:30:55.4931629Z 50 - /obj/item/toy/talking/griffin using invalid icon_state, "griffinprize"
+2022-11-01T15:30:55.4935255Z 51 - /obj/item/toy/nuke using invalid icon_state, "nuketoyidle"
+2022-11-01T15:30:55.4941687Z 52 - /obj/item/toy/minimeteor using invalid icon_state, "minimeteor"
+2022-11-01T15:30:55.4950575Z 53 - /obj/item/toy/redbutton using invalid icon_state, "bigred"
+2022-11-01T15:30:55.4951244Z 54 - /obj/item/toy/snowball using invalid icon_state, "snowball"
+2022-11-01T15:30:55.4954561Z 55 - /obj/item/toy/beach_ball using invalid icon_state, "ball"
+2022-11-01T15:30:55.4958662Z 56 - /obj/item/toy/beach_ball/baseball using invalid icon_state, "baseball"
+2022-11-01T15:30:55.4963000Z 57 - /obj/item/toy/beach_ball/holoball using invalid icon_state, "basketball"
+2022-11-01T15:30:55.4966965Z 58 - /obj/item/toy/beach_ball/holoball/dodgeball using invalid icon_state, "dodgeball"
+2022-11-01T15:30:55.4977748Z 59 - /obj/item/toy/toy_xeno using invalid icon_state, "toy_xeno"
+2022-11-01T15:30:55.4980250Z 60 - /obj/item/toy/cattoy using invalid icon_state, "toy_mouse"
+2022-11-01T15:30:55.4983618Z 61 - /obj/item/toy/figure using invalid icon_state, "nuketoy"
+2022-11-01T15:30:55.4987315Z 62 - /obj/item/toy/figure/cmo using invalid icon_state, "cmo"
+2022-11-01T15:30:55.4997139Z 63 - /obj/item/toy/figure/assistant using invalid icon_state, "assistant"
+2022-11-01T15:30:55.4997624Z 64 - /obj/item/toy/figure/atmos using invalid icon_state, "atmos"
+2022-11-01T15:30:55.4998070Z 65 - /obj/item/toy/figure/bartender using invalid icon_state, "bartender"
+2022-11-01T15:30:55.5000037Z 66 - /obj/item/toy/figure/borg using invalid icon_state, "borg"
+2022-11-01T15:30:55.5005726Z 67 - /obj/item/toy/figure/botanist using invalid icon_state, "botanist"
+2022-11-01T15:30:55.5009351Z 68 - /obj/item/toy/figure/captain using invalid icon_state, "captain"
+2022-11-01T15:30:55.5013740Z 69 - /obj/item/toy/figure/cargotech using invalid icon_state, "cargotech"
+2022-11-01T15:30:55.5017249Z 70 - /obj/item/toy/figure/ce using invalid icon_state, "ce"
+2022-11-01T15:30:55.5020387Z 71 - /obj/item/toy/figure/chaplain using invalid icon_state, "chaplain"
+2022-11-01T15:30:55.5024141Z 72 - /obj/item/toy/figure/chef using invalid icon_state, "chef"
+2022-11-01T15:30:55.5028293Z 73 - /obj/item/toy/figure/chemist using invalid icon_state, "chemist"
+2022-11-01T15:30:55.5031085Z 74 - /obj/item/toy/figure/clown using invalid icon_state, "clown"
+2022-11-01T15:30:55.5034369Z 75 - /obj/item/toy/figure/ian using invalid icon_state, "ian"
+2022-11-01T15:30:55.5038425Z 76 - /obj/item/toy/figure/detective using invalid icon_state, "detective"
+2022-11-01T15:30:55.5042175Z 77 - /obj/item/toy/figure/dsquad using invalid icon_state, "dsquad"
+2022-11-01T15:30:55.5046297Z 78 - /obj/item/toy/figure/engineer using invalid icon_state, "engineer"
+2022-11-01T15:30:55.5050167Z 79 - /obj/item/toy/figure/geneticist using invalid icon_state, "geneticist"
+2022-11-01T15:30:55.5053342Z 80 - /obj/item/toy/figure/hop using invalid icon_state, "hop"
+2022-11-01T15:30:55.5056872Z 81 - /obj/item/toy/figure/hos using invalid icon_state, "hos"
+2022-11-01T15:30:55.5060399Z 82 - /obj/item/toy/figure/qm using invalid icon_state, "qm"
+2022-11-01T15:30:55.5063872Z 83 - /obj/item/toy/figure/janitor using invalid icon_state, "janitor"
+2022-11-01T15:30:55.5067662Z 84 - /obj/item/toy/figure/lawyer using invalid icon_state, "lawyer"
+2022-11-01T15:30:55.5070895Z 85 - /obj/item/toy/figure/curator using invalid icon_state, "curator"
+2022-11-01T15:30:55.5074298Z 86 - /obj/item/toy/figure/md using invalid icon_state, "md"
+2022-11-01T15:30:55.5077555Z 87 - /obj/item/toy/figure/paramedic using invalid icon_state, "paramedic"
+2022-11-01T15:30:55.5080888Z 88 - /obj/item/toy/figure/psychologist using invalid icon_state, "psychologist"
+2022-11-01T15:30:55.5084180Z 89 - /obj/item/toy/figure/prisoner using invalid icon_state, "prisoner"
+2022-11-01T15:30:55.5087759Z 90 - /obj/item/toy/figure/mime using invalid icon_state, "mime"
+2022-11-01T15:30:55.5091521Z 91 - /obj/item/toy/figure/miner using invalid icon_state, "miner"
+2022-11-01T15:30:55.5094739Z 92 - /obj/item/toy/figure/ninja using invalid icon_state, "ninja"
+2022-11-01T15:30:55.5098467Z 93 - /obj/item/toy/figure/wizard using invalid icon_state, "wizard"
+2022-11-01T15:30:55.5101717Z 94 - /obj/item/toy/figure/rd using invalid icon_state, "rd"
+2022-11-01T15:30:55.5105157Z 95 - /obj/item/toy/figure/roboticist using invalid icon_state, "roboticist"
+2022-11-01T15:30:55.5108497Z 96 - /obj/item/toy/figure/scientist using invalid icon_state, "scientist"
+2022-11-01T15:30:55.5111745Z 97 - /obj/item/toy/figure/syndie using invalid icon_state, "syndie"
+2022-11-01T15:30:55.5115064Z 98 - /obj/item/toy/figure/secofficer using invalid icon_state, "secofficer"
+2022-11-01T15:30:55.5120612Z 99 - /obj/item/toy/figure/virologist using invalid icon_state, "virologist"
+2022-11-01T15:30:55.5123956Z 100 - /obj/item/toy/figure/warden using invalid icon_state, "warden"
+2022-11-01T15:30:55.5128284Z 101 - /obj/item/toy/dummy using invalid icon_state, "puppet"
+2022-11-01T15:30:55.5131152Z 102 - /obj/item/toy/seashell using invalid icon_state, "shell1"
+2022-11-01T15:30:55.5134593Z 103 - /obj/item/toy/brokenradio using invalid icon_state, "broken_radio"
+2022-11-01T15:30:55.5137892Z 104 - /obj/item/toy/braintoy using invalid icon_state, "brain-old"
+2022-11-01T15:30:55.5144558Z 105 - /obj/item/toy/reality_pierce using invalid icon_state, "pierced_illusion"
+2022-11-01T15:30:55.5147190Z 106 - /obj/item/toy/foamfinger using invalid icon_state, "foamfinger"
+2022-11-01T15:30:55.5150535Z 107 - /obj/item/toy/intento using invalid icon_state, "blank"
+2022-11-01T15:30:55.5198041Z 108 - /obj/item/toy/sprayoncan using invalid icon_state, "sprayoncan"
+2022-11-01T15:30:55.5200657Z 109 - /obj/item/toy/xmas_cracker using invalid icon_state, "cracker"
+2022-11-01T15:30:55.5207230Z 110 - /obj/item/cultivator/rake using invalid icon_state, "rake"
+2022-11-01T15:30:55.5214896Z 111 - /obj/item/hatchet/wooden using invalid icon_state, "woodhatchet"
+2022-11-01T15:30:55.5218699Z 112 - /obj/item/hatchet/cutterblade using invalid icon_state, "cutterblade"
+2022-11-01T15:30:55.6152861Z 113 - /obj/item/reagent_containers/hypospray/medipen using invalid worn_icon_state, "medipen"
+2022-11-01T15:30:55.6332977Z 114 - /obj/item/storage/pill_bottle using invalid icon_state, "pill_canister"
+2022-11-01T15:30:55.6344463Z 115 - /obj/item/analyzer/ranged using invalid icon_state, "analyzerranged"
+2022-11-01T15:30:55.6996164Z 116 - /obj/item/organ/internal/monster_core using invalid icon_state, "hivelord_core"
+2022-11-01T15:30:55.6996812Z 117 - /obj/item/organ/internal/monster_core/brimdust_sac using invalid icon_state, "brim_sac"
+2022-11-01T15:30:55.7000924Z 118 - /obj/item/organ/internal/monster_core/regenerative_core/legion using invalid icon_state, "legion_core"
+2022-11-01T15:30:55.7004434Z 119 - /obj/item/organ/internal/monster_core/rush_gland using invalid icon_state, "lobster_gland"
+2022-11-01T15:30:55.7019240Z 120 - /obj/item/spear/bamboospear using invalid icon_state, "bamboo_spear0"
+2022-11-01T15:30:55.7066737Z 121 - /obj/item/abductor/gizmo using invalid icon_state, "gizmo_scan"
+2022-11-01T15:30:55.7071949Z 122 - /obj/item/abductor/silencer using invalid icon_state, "silencer"
+2022-11-01T15:30:55.7074703Z 123 - /obj/item/abductor/mind_device using invalid icon_state, "mind_device_message"
+2022-11-01T15:30:55.7093947Z 124 - /obj/item/claymore/cutlass using invalid worn_icon_state, "cutlass"
+2022-11-01T15:30:55.7100530Z 125 - /obj/item/claymore/highlander/robot using invalid icon_state, "claymore_cyborg"
+2022-11-01T15:30:55.7103494Z 126 - /obj/item/banner using invalid icon_state, "banner"
+2022-11-01T15:30:55.7106179Z 127 - /obj/item/banner/security using invalid icon_state, "banner_security"
+2022-11-01T15:30:55.7109205Z 128 - /obj/item/banner/medical using invalid icon_state, "banner_medical"
+2022-11-01T15:30:55.7112253Z 129 - /obj/item/banner/science using invalid icon_state, "banner_science"
+2022-11-01T15:30:55.7115489Z 130 - /obj/item/banner/cargo using invalid icon_state, "banner_cargo"
+2022-11-01T15:30:55.7118625Z 131 - /obj/item/banner/engineering using invalid icon_state, "banner_engineering"
+2022-11-01T15:30:55.7121768Z 132 - /obj/item/banner/red using invalid icon_state, "banner-red"
+2022-11-01T15:30:55.7125528Z 133 - /obj/item/banner/blue using invalid icon_state, "banner-blue"
+2022-11-01T15:30:55.7173275Z 134 - /obj/item/gun/magic/staff using invalid icon_state, "staff"
+2022-11-01T15:30:55.7176309Z 135 - /obj/item/gun/magic/staff/change using invalid icon_state, "staffofchange"
+2022-11-01T15:30:55.7179814Z 136 - /obj/item/gun/magic/staff/animate using invalid icon_state, "staffofanimation"
+2022-11-01T15:30:55.7183703Z 137 - /obj/item/gun/magic/staff/healing using invalid icon_state, "staffofhealing"
+2022-11-01T15:30:55.7187827Z 138 - /obj/item/gun/magic/staff/chaos using invalid icon_state, "staffofchaos"
+2022-11-01T15:30:55.7191418Z 139 - /obj/item/gun/magic/staff/door using invalid icon_state, "staffofdoor"
+2022-11-01T15:30:55.7194614Z 140 - /obj/item/gun/magic/staff/honk using invalid icon_state, "honker"
+2022-11-01T15:30:55.7201412Z 141 - /obj/item/gun/magic/staff/locker using invalid worn_icon_state, "lockerstaff"
+2022-11-01T15:30:55.7204043Z 142 - /obj/item/gun/magic/staff/flying using invalid worn_icon_state, "flightstaff"
+2022-11-01T15:30:55.7207467Z 143 - /obj/item/gun/magic/staff/babel using invalid worn_icon_state, "babelstaff"
+2022-11-01T15:30:55.7211147Z 144 - /obj/item/gun/magic/staff/necropotence using invalid worn_icon_state, "necrostaff"
+2022-11-01T15:30:55.7215407Z 145 - /obj/item/gun/magic/staff/wipe using invalid worn_icon_state, "wipestaff"
+2022-11-01T15:30:55.7241733Z 146 - /obj/item/melee/energy/sword/pirate using invalid icon_state, "e_cutlass"
+2022-11-01T15:30:55.7244715Z 147 - /obj/item/clothing/glasses/eyepatch using invalid icon_state, "eyepatch"
+2022-11-01T15:30:55.7252484Z 148 - /obj/item/melee/energy/sword/cyborg/saw using invalid icon_state, "esaw"
+2022-11-01T15:30:55.7266561Z 149 - /obj/item/tank/jetpack/improvised using invalid worn_icon_state, "jetpack-improvised"
+2022-11-01T15:30:55.7274060Z 150 - /obj/item/multitool using invalid icon_state, "multitool"
+2022-11-01T15:30:55.7276378Z 151 - /obj/item/multitool/cyborg using invalid icon_state, "multitool_cyborg"
+2022-11-01T15:30:55.7280858Z 152 - /obj/item/multitool/circuit using invalid icon_state, "multitool_circuit"
+2022-11-01T15:30:55.7284308Z 153 - /obj/item/storage/bag/trash using invalid icon_state, "trashbag"
+2022-11-01T15:30:55.7287840Z 154 - /obj/item/storage/bag/trash/bluespace using invalid icon_state, "bluetrashbag"
+2022-11-01T15:30:55.7290759Z 155 - /obj/item/cane using invalid icon_state, "cane"
+2022-11-01T15:30:55.7294298Z 156 - /obj/item/cane/white using invalid icon_state, "cane_white"
+2022-11-01T15:30:55.7297184Z 157 - /obj/item/megaphone/clown using invalid icon_state, "megaphone-clown"
+2022-11-01T15:30:55.7318542Z 158 - /obj/item/food/pie/cream using invalid icon_state, "pie"
+2022-11-01T15:30:55.7334187Z 159 - /obj/item/instrument/bikehorn using invalid icon_state, "bike_horn"
+2022-11-01T15:30:55.7337088Z 160 - /obj/item/reagent_containers/cup/soda_cans/canned_laughter using invalid icon_state, "laughter"
+2022-11-01T15:30:55.7358710Z 161 - /obj/item/grown/bananapeel using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7362056Z 162 - /obj/item/grown/bananapeel/bombanana using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7363000Z 163 - /obj/item/grown/bananapeel/mimanapeel using invalid icon_state, "mimana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7367080Z 164 - /obj/item/grown/bananapeel/bluespace using invalid icon_state, "bluenana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7368175Z 165 - /obj/item/grown/bananapeel/specialpeel using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7369395Z 166 - /obj/item/food/grown/banana using invalid icon_state, "banana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7372848Z 167 - /obj/item/food/grown/banana/bombanana using invalid icon_state, "banana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7373761Z 168 - /obj/item/food/grown/banana/mime using invalid icon_state, "mimana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7377078Z 169 - /obj/item/food/grown/banana/bluespace using invalid icon_state, "bluenana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7377931Z 170 - /obj/item/food/grown/banana/bunch using invalid icon_state, "banana_bunch" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-01T15:30:55.7380762Z 171 - /obj/item/stack/spacecash/c1 using invalid icon_state, "spacecash1"
+2022-11-01T15:30:55.7381375Z 172 - /obj/item/stack/spacecash/c10 using invalid icon_state, "spacecash10"
+2022-11-01T15:30:55.7381845Z 173 - /obj/item/stack/spacecash/c20 using invalid icon_state, "spacecash20"
+2022-11-01T15:30:55.7384576Z 174 - /obj/item/stack/spacecash/c50 using invalid icon_state, "spacecash50"
+2022-11-01T15:30:55.7385391Z 175 - /obj/item/stack/spacecash/c100 using invalid icon_state, "spacecash100"
+2022-11-01T15:30:55.7386850Z 176 - /obj/item/stack/spacecash/c200 using invalid icon_state, "spacecash200"
+2022-11-01T15:30:55.7389337Z 177 - /obj/item/stack/spacecash/c500 using invalid icon_state, "spacecash500"
+2022-11-01T15:30:55.7394435Z 178 - /obj/item/stack/spacecash/c1000 using invalid icon_state, "spacecash1000"
+2022-11-01T15:30:55.7397872Z 179 - /obj/item/stack/spacecash/c10000 using invalid icon_state, "spacecash10000"
+2022-11-01T15:30:55.7401273Z 180 - /obj/item/clothing/mask/facehugger/toy using invalid worn_icon_state, "facehugger"
+2022-11-01T15:30:55.7415134Z 181 - /obj/item/kitchen/fork using invalid icon_state, "fork"
+2022-11-01T15:30:55.7417371Z 182 - /obj/item/kitchen/fork/plastic using invalid icon_state, "plastic_fork"
+2022-11-01T15:30:55.7428215Z 183 - /obj/item/kitchen/spoon using invalid icon_state, "spoon"
+2022-11-01T15:30:55.7429945Z 184 - /obj/item/kitchen/spoon/plastic using invalid icon_state, "plastic_spoon"
+2022-11-01T15:30:55.7442913Z 185 - /obj/item/bonesetter using invalid icon_state, "bonesetter"
+2022-11-01T15:30:55.7446497Z 186 - /obj/item/cautery using invalid icon_state, "cautery"
+2022-11-01T15:30:55.7450823Z 187 - /obj/item/cautery/advanced using invalid icon_state, "e_cautery"
+2022-11-01T15:30:55.7453942Z 188 - /obj/item/hemostat using invalid icon_state, "hemostat"
+2022-11-01T15:30:55.7457254Z 189 - /obj/item/hemostat/supermatter using invalid icon_state, "supermatter_tongs"
+2022-11-01T15:30:55.7459972Z 190 - /obj/item/retractor using invalid icon_state, "retractor"
+2022-11-01T15:30:55.7463122Z 191 - /obj/item/retractor/advanced using invalid icon_state, "adv_retractor"
+2022-11-01T15:30:55.7466265Z 192 - /obj/item/scalpel using invalid icon_state, "scalpel"
+2022-11-01T15:30:55.7469369Z 193 - /obj/item/scalpel/supermatter using invalid icon_state, "supermatter_scalpel"
+2022-11-01T15:30:55.7472302Z 194 - /obj/item/scalpel/advanced using invalid icon_state, "e_scalpel"
+2022-11-01T15:30:55.7475283Z 195 - /obj/item/surgical_drapes using invalid icon_state, "surgical_drapes"
+2022-11-01T15:30:55.7481626Z 196 - /obj/item/stack/medical/bruise_pack using invalid icon_state, "brutepack"
+2022-11-01T15:30:55.7483890Z 197 - /obj/item/stack/medical/gauze using invalid icon_state, "gauze"
+2022-11-01T15:30:55.7488309Z 198 - /obj/item/stack/medical/suture using invalid icon_state, "suture"
+2022-11-01T15:30:55.7491279Z 199 - /obj/item/stack/medical/suture/medicated using invalid icon_state, "suture_purp"
+2022-11-01T15:30:55.7494706Z 200 - /obj/item/stack/medical/ointment using invalid icon_state, "ointment"
+2022-11-01T15:30:55.7498204Z 201 - /obj/item/stack/medical/mesh using invalid icon_state, "regen_mesh"
+2022-11-01T15:30:55.7501745Z 202 - /obj/item/stack/medical/mesh/advanced using invalid icon_state, "aloe_mesh"
+2022-11-01T15:30:55.7505332Z 203 - /obj/item/stack/medical/aloe using invalid icon_state, "aloe_paste"
+2022-11-01T15:30:55.7508511Z 204 - /obj/item/stack/medical/bone_gel using invalid icon_state, "bone-gel"
+2022-11-01T15:30:55.7511537Z 205 - /obj/item/stack/medical/poultice using invalid icon_state, "poultice"
+2022-11-01T15:30:55.7514762Z 206 - /obj/item/assembly/flash/handheld using invalid icon_state, "flash"
+2022-11-01T15:30:55.7518179Z 207 - /obj/item/clothing/mask/cigarette using invalid icon_state, "cigoff"
+2022-11-01T15:30:55.7521263Z 208 - /obj/item/clothing/mask/cigarette/rollie using invalid icon_state, "spliffoff"
+2022-11-01T15:30:55.7525138Z 209 - /obj/item/clothing/mask/cigarette/candy using invalid icon_state, "candyoff"
+2022-11-01T15:30:55.7529005Z 210 - /obj/item/clothing/mask/cigarette/cigar using invalid icon_state, "cigaroff"
+2022-11-01T15:30:55.7532227Z 211 - /obj/item/clothing/mask/cigarette/cigar/cohiba using invalid icon_state, "cigar2off"
+2022-11-01T15:30:55.7535378Z 212 - /obj/item/clothing/mask/cigarette/pipe using invalid icon_state, "pipeoff"
+2022-11-01T15:30:55.7538704Z 213 - /obj/item/clothing/mask/cigarette/pipe/cobpipe using invalid icon_state, "cobpipeoff"
+2022-11-01T15:30:55.7541822Z 214 - /obj/item/disk using invalid icon_state, "datadisk0"
+2022-11-01T15:30:55.7547750Z 215 - /obj/item/disk/holodisk using invalid icon_state, "holodisk"
+2022-11-01T15:30:55.7551232Z 216 - /obj/item/disk/nuclear using invalid icon_state, "nucleardisk"
+2022-11-01T15:30:55.7554426Z 217 - /obj/item/disk/surgery using invalid icon_state, "datadisk1"
+2022-11-01T15:30:55.7558238Z 218 - /obj/item/disk/cargo/bluespace_pod using invalid icon_state, "cargodisk"
+2022-11-01T15:30:55.7561786Z 219 - /obj/item/disk/tech_disk/major using invalid icon_state, "rndmajordisk"
+2022-11-01T15:30:55.7566298Z 220 - /obj/item/melee/powerfist using invalid icon_state, "powerfist"
+2022-11-01T15:30:55.7579366Z 221 - /obj/item/melee/skateboard using invalid icon_state, "skateboard"
+2022-11-01T15:30:55.7581695Z 222 - /obj/item/melee/skateboard/pro using invalid icon_state, "skateboard2"
+2022-11-01T15:30:55.7586449Z 223 - /obj/item/melee/skateboard/hoverboard using invalid icon_state, "hoverboard_red"
+2022-11-01T15:30:55.7589798Z 224 - /obj/item/melee/skateboard/hoverboard/admin using invalid icon_state, "hoverboard_nt"
+2022-11-01T15:30:55.7593858Z 225 - /obj/item/melee/baseball_bat using invalid icon_state, "baseball_bat"
+2022-11-01T15:30:55.7597594Z 226 - /obj/item/melee/baseball_bat/homerun using invalid icon_state, "baseball_bat_home"
+2022-11-01T15:30:55.7600520Z 227 - /obj/item/melee/baseball_bat/ablative using invalid icon_state, "baseball_bat_metal"
+2022-11-01T15:30:55.7604782Z 228 - /obj/item/melee/flyswatter using invalid icon_state, "flyswatter"
+2022-11-01T15:30:55.7611481Z 229 - /obj/item/melee/energy/axe using invalid icon_state, "axe"
+2022-11-01T15:30:55.7613484Z 230 - /obj/item/melee/energy/blade using invalid icon_state, "blade"
+2022-11-01T15:30:55.7618410Z 231 - /obj/item/melee/energy/blade/hardlight using invalid icon_state, "lightblade"
+2022-11-01T15:30:55.7620400Z 232 - /obj/item/melee/synthetic_arm_blade using invalid icon_state, "arm_blade"
+2022-11-01T15:30:55.7624742Z 233 - /obj/item/melee/sabre using invalid icon_state, "sabre"
+2022-11-01T15:30:55.7628282Z 234 - /obj/item/melee/beesword using invalid worn_icon_state, "stinger"
+2022-11-01T15:30:55.7631104Z 235 - /obj/item/melee/supermatter_sword using invalid icon_state, "supermatter_sword"
+2022-11-01T15:30:55.7640059Z 236 - /obj/item/melee/cleric_mace using invalid worn_icon_state, "default_worn"
+2022-11-01T15:30:55.7642519Z 237 - /obj/item/melee/rune_carver using invalid icon_state, "rune_carver"
+2022-11-01T15:30:55.7649015Z 238 - /obj/item/melee/ghost_sword using invalid icon_state, "spectral"
+2022-11-01T15:30:55.7652669Z 239 - /obj/item/reagent_containers/cup/glass/flask using invalid icon_state, "flask"
+2022-11-01T15:30:55.7656181Z 240 - /obj/item/reagent_containers/cup/glass/flask/gold using invalid icon_state, "flask_gold"
+2022-11-01T15:30:55.7659386Z 241 - /obj/item/reagent_containers/cup/glass/flask/det using invalid icon_state, "detflask"
+2022-11-01T15:30:55.7661823Z 242 - /obj/item/stamp using invalid icon_state, "stamp-ok"
+2022-11-01T15:30:55.7665189Z 243 - /obj/item/stamp/qm using invalid icon_state, "stamp-qm"
+2022-11-01T15:30:55.7668223Z 244 - /obj/item/stamp/law using invalid icon_state, "stamp-law"
+2022-11-01T15:30:55.7671146Z 245 - /obj/item/stamp/captain using invalid icon_state, "stamp-cap"
+2022-11-01T15:30:55.7674101Z 246 - /obj/item/stamp/hop using invalid icon_state, "stamp-hop"
+2022-11-01T15:30:55.7677062Z 247 - /obj/item/stamp/hos using invalid icon_state, "stamp-hos"
+2022-11-01T15:30:55.7679998Z 248 - /obj/item/stamp/ce using invalid icon_state, "stamp-ce"
+2022-11-01T15:30:55.7684534Z 249 - /obj/item/stamp/rd using invalid icon_state, "stamp-rd"
+2022-11-01T15:30:55.7688688Z 250 - /obj/item/stamp/cmo using invalid icon_state, "stamp-cmo"
+2022-11-01T15:30:55.7691562Z 251 - /obj/item/stamp/denied using invalid icon_state, "stamp-deny"
+2022-11-01T15:30:55.7694516Z 252 - /obj/item/stamp/void using invalid icon_state, "stamp-void"
+2022-11-01T15:30:55.7697505Z 253 - /obj/item/stamp/clown using invalid icon_state, "stamp-clown"
+2022-11-01T15:30:55.7708237Z 254 - /obj/item/stamp/mime using invalid icon_state, "stamp-mime"
+2022-11-01T15:30:55.7708827Z 255 - /obj/item/stamp/chap using invalid icon_state, "stamp-chap"
+2022-11-01T15:30:55.7709256Z 256 - /obj/item/stamp/centcom using invalid icon_state, "stamp-centcom"
+2022-11-01T15:30:55.7751313Z 257 - /obj/item/stamp/syndicate using invalid icon_state, "stamp-syndicate"
+2022-11-01T15:30:55.7752422Z 258 - /obj/item/storage/lockbox/medal using invalid icon_state, "medalbox+l"
+2022-11-01T15:30:55.7752898Z 259 - /obj/item/crowbar/red/caravan using invalid icon_state, "crowbar_caravan"
+2022-11-01T15:30:55.7757058Z 260 - /obj/item/crowbar/drone using invalid icon_state, "crowbar_cyborg"
+2022-11-01T15:30:55.7784906Z
+2022-11-01T15:30:55.7785304Z [1;32mPASS[0m /datum/unit_test/suit_storage_icons 2.4s
+2022-11-01T15:30:55.7786128Z ##[endgroup]
+2022-11-01T15:30:58.1989647Z ##[group]/datum/unit_test/amputation
+2022-11-01T15:30:58.2542620Z
+2022-11-01T15:30:58.2543982Z [1;32mPASS[0m /datum/unit_test/amputation 0.1s
+2022-11-01T15:30:58.2545007Z ##[endgroup]
+2022-11-01T15:30:58.2861052Z ##[group]/datum/unit_test/brain_surgery
+2022-11-01T15:30:58.3393398Z
+2022-11-01T15:30:58.3395072Z [1;32mPASS[0m /datum/unit_test/brain_surgery 0.1s
+2022-11-01T15:30:58.3396351Z ##[endgroup]
+2022-11-01T15:30:58.3713295Z ##[group]/datum/unit_test/head_transplant
+2022-11-01T15:30:58.4648885Z
+2022-11-01T15:30:58.4650964Z [1;32mPASS[0m /datum/unit_test/head_transplant 0.1s
+2022-11-01T15:30:58.4652113Z ##[endgroup]
+2022-11-01T15:30:58.5529908Z ##[group]/datum/unit_test/multiple_surgeries
+2022-11-01T15:30:58.6322272Z
+2022-11-01T15:30:58.6323733Z [1;32mPASS[0m /datum/unit_test/multiple_surgeries 0.1s
+2022-11-01T15:30:58.6324863Z ##[endgroup]
+2022-11-01T15:30:58.7192842Z ##[group]/datum/unit_test/start_tend_wounds
+2022-11-01T15:30:58.7696686Z
+2022-11-01T15:30:58.7697933Z [1;32mPASS[0m /datum/unit_test/start_tend_wounds 0s
+2022-11-01T15:30:58.7699007Z ##[endgroup]
+2022-11-01T15:30:58.8006481Z ##[group]/datum/unit_test/tend_wounds
+2022-11-01T15:30:58.9098267Z
+2022-11-01T15:30:58.9099817Z [1;32mPASS[0m /datum/unit_test/tend_wounds 0.1s
+2022-11-01T15:30:58.9100900Z ##[endgroup]
+2022-11-01T15:30:59.0574781Z ##[group]/datum/unit_test/auto_teleporter_linking
+2022-11-01T15:30:59.0986969Z
+2022-11-01T15:30:59.0988029Z [1;32mPASS[0m /datum/unit_test/auto_teleporter_linking 0s
+2022-11-01T15:30:59.0989210Z ##[endgroup]
+2022-11-01T15:30:59.1397849Z ##[group]/datum/unit_test/tgui_create_message
+2022-11-01T15:30:59.1398053Z
+2022-11-01T15:30:59.1398515Z [1;32mPASS[0m /datum/unit_test/tgui_create_message 0s
+2022-11-01T15:30:59.1398931Z ##[endgroup]
+2022-11-01T15:30:59.1585159Z ##[group]/datum/unit_test/timer_sanity
+2022-11-01T15:30:59.1585371Z
+2022-11-01T15:30:59.1585837Z [1;32mPASS[0m /datum/unit_test/timer_sanity 0s
+2022-11-01T15:30:59.1586293Z ##[endgroup]
+2022-11-01T15:30:59.1763570Z ##[group]/datum/unit_test/traitor
+2022-11-01T15:31:01.0798012Z
+2022-11-01T15:31:01.0799101Z [1;32mPASS[0m /datum/unit_test/traitor 1.9s
+2022-11-01T15:31:01.0799858Z ##[endgroup]
+2022-11-01T15:31:05.2187120Z ##[group]/datum/unit_test/verify_config_tags
+2022-11-01T15:31:05.2190123Z
+2022-11-01T15:31:05.2191991Z [1;32mPASS[0m /datum/unit_test/verify_config_tags 0s
+2022-11-01T15:31:05.2193777Z ##[endgroup]
+2022-11-01T15:31:05.2366479Z ##[group]/datum/unit_test/wizard_loadout
+2022-11-01T15:31:05.3463154Z
+2022-11-01T15:31:05.3463988Z [1;32mPASS[0m /datum/unit_test/wizard_loadout 0.1s
+2022-11-01T15:31:05.3465519Z ##[endgroup]
+2022-11-01T15:31:05.4918147Z ##[group]/datum/unit_test/find_reference_sanity
+2022-11-01T15:31:05.4922156Z
+2022-11-01T15:31:05.4923183Z [1;32mPASS[0m /datum/unit_test/find_reference_sanity 0s
+2022-11-01T15:31:05.4924120Z ##[endgroup]
+2022-11-01T15:31:05.5122652Z ##[group]/datum/unit_test/find_reference_baseline
+2022-11-01T15:31:05.5126059Z
+2022-11-01T15:31:05.5126875Z [1;32mPASS[0m /datum/unit_test/find_reference_baseline 0s
+2022-11-01T15:31:05.5127655Z ##[endgroup]
+2022-11-01T15:31:05.5361446Z ##[group]/datum/unit_test/find_reference_exotic
+2022-11-01T15:31:05.5367626Z
+2022-11-01T15:31:05.5369228Z [1;32mPASS[0m /datum/unit_test/find_reference_exotic 0s
+2022-11-01T15:31:05.5369940Z ##[endgroup]
+2022-11-01T15:31:05.5551795Z ##[group]/datum/unit_test/find_reference_esoteric
+2022-11-01T15:31:05.5558725Z
+2022-11-01T15:31:05.5559583Z [1;32mPASS[0m /datum/unit_test/find_reference_esoteric 0s
+2022-11-01T15:31:05.5560670Z ##[endgroup]
+2022-11-01T15:31:05.5737466Z ##[group]/datum/unit_test/find_reference_null_key_entry
+2022-11-01T15:31:05.5741407Z
+2022-11-01T15:31:05.5742596Z [1;32mPASS[0m /datum/unit_test/find_reference_null_key_entry 0s
+2022-11-01T15:31:05.5743489Z ##[endgroup]
+2022-11-01T15:31:05.6053804Z ##[group]/datum/unit_test/find_reference_assoc_investigation
+2022-11-01T15:31:05.6057935Z
+2022-11-01T15:31:05.6058863Z [1;32mPASS[0m /datum/unit_test/find_reference_assoc_investigation 0s
+2022-11-01T15:31:05.6060051Z ##[endgroup]
+2022-11-01T15:31:05.6233030Z ##[group]/datum/unit_test/find_reference_static_investigation
+2022-11-01T15:31:05.8520469Z
+2022-11-01T15:31:05.8521954Z [1;32mPASS[0m /datum/unit_test/find_reference_static_investigation 0.2s
+2022-11-01T15:31:05.8523118Z ##[endgroup]
+2022-11-01T15:31:06.0724951Z ##[group]/datum/unit_test/monkey_business
+2022-11-01T15:31:23.2321441Z [15:31:23] Runtime in _forensics.dm,232: Cannot execute null.resolve().
+2022-11-01T15:31:23.2322464Z proc name: check blood (/datum/forensics/proc/check_blood)
+2022-11-01T15:31:23.2323531Z src: /datum/forensics (/datum/forensics)
+2022-11-01T15:31:23.2323854Z call stack:
+2022-11-01T15:31:23.2324155Z /datum/forensics (/datum/forensics): check blood()
+2022-11-01T15:31:23.2325062Z /datum/forensics (/datum/forensics): New(the blood splatter (/obj/effect/decal/cleanable/blood/hitsplatter), null, null, /list (/list), null)
+2022-11-01T15:31:23.2325582Z the blood splatter (/obj/effect/decal/cleanable/blood/hitsplatter): add blood DNA(/list (/list))
+2022-11-01T15:31:23.2326006Z Anthony Hayhurst (461) (/mob/living/carbon/human): spray blood(2, 1)
+2022-11-01T15:31:23.2326395Z Rough Abrasion (/datum/wound/slash/flesh/moderate): wound injury(null, 2)
+2022-11-01T15:31:23.2327172Z Rough Abrasion (/datum/wound/slash/flesh/moderate): apply wound(the monkey left leg (/obj/item/bodypart/l_leg/monkey), 0, null, 0, 2)
+2022-11-01T15:31:23.2327747Z the monkey left leg (/obj/item/bodypart/l_leg/monkey): check wounding(2, 8, 5, 15, 2)
+2022-11-01T15:31:23.2328155Z the monkey left leg (/obj/item/bodypart/l_leg/monkey): receive damage(8, 0, 0, 0, 1, null, 5, 15, 1, 2)
+2022-11-01T15:31:23.2328594Z Monkey (/datum/species/monkey): apply damage(8, "brute", "l_leg", 0, Anthony Hayhurst (461) (/mob/living/carbon/human), 0, 0, 5, 15, 1, 2)
+2022-11-01T15:31:23.2329362Z Monkey (/datum/species/monkey): spec attacked by(the glass shiv (/obj/item/knife/shiv), Abigail Schmidt (295) (/mob/living/carbon/human), the monkey left leg (/obj/item/bodypart/l_leg/monkey), Anthony Hayhurst (461) (/mob/living/carbon/human))
+2022-11-01T15:31:23.2329835Z ...
+2022-11-01T15:31:23.2330578Z Anthony Hayhurst (461) (/mob/living/carbon/human): attackby(the glass shiv (/obj/item/knife/shiv), Abigail Schmidt (295) (/mob/living/carbon/human), null)
+2022-11-01T15:31:23.2331348Z the glass shiv (/obj/item/knife/shiv): melee attack chain(Abigail Schmidt (295) (/mob/living/carbon/human), Anthony Hayhurst (461) (/mob/living/carbon/human), null)
+2022-11-01T15:31:23.2332042Z /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob): monkey attack(/datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry), Anthony Hayhurst (461) (/mob/living/carbon/human), 0.8, 0)
+2022-11-01T15:31:23.2332773Z /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob): perform(0.8, /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry), "BB_monkey_current_attack_targe...")
+2022-11-01T15:31:23.2333442Z /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry): ProcessBehavior(0.8, /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob))
+2022-11-01T15:31:23.2333980Z /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry): process(0.1)
+2022-11-01T15:31:23.2334424Z AI Behavior Ticker (/datum/controller/subsystem/processing/ai_behaviors): fire(0)
+2022-11-01T15:31:23.2334875Z AI Behavior Ticker (/datum/controller/subsystem/processing/ai_behaviors): ignite(0)
+2022-11-01T15:31:23.2335885Z Master (/datum/controller/master): Loop(2)
+2022-11-01T15:31:23.2336391Z Master (/datum/controller/master): StartProcessing(0)
+2022-11-01T15:31:44.6315657Z ##[error][15:31:23] Runtime in _forensics.dm,232: Cannot execute null.resolve().
+ proc name: check blood (/datum/forensics/proc/check_blood)
+ src: /datum/forensics (/datum/forensics)
+ call stack:
+ /datum/forensics (/datum/forensics): check blood()
+ /datum/forensics (/datum/forensics): New(the blood splatter (/obj/effect/decal/cleanable/blood/hitsplatter), null, null, /list (/list), null)
+ the blood splatter (/obj/effect/decal/cleanable/blood/hitsplatter): add blood DNA(/list (/list))
+ Anthony Hayhurst (461) (/mob/living/carbon/human): spray blood(2, 1)
+ Rough Abrasion (/datum/wound/slash/flesh/moderate): wound injury(null, 2)
+ Rough Abrasion (/datum/wound/slash/flesh/moderate): apply wound(the monkey left leg (/obj/item/bodypart/l_leg/monkey), 0, null, 0, 2)
+ the monkey left leg (/obj/item/bodypart/l_leg/monkey): check wounding(2, 8, 5, 15, 2)
+ the monkey left leg (/obj/item/bodypart/l_leg/monkey): receive damage(8, 0, 0, 0, 1, null, 5, 15, 1, 2)
+ Monkey (/datum/species/monkey): apply damage(8, "brute", "l_leg", 0, Anthony Hayhurst (461) (/mob/living/carbon/human), 0, 0, 5, 15, 1, 2)
+ Monkey (/datum/species/monkey): spec attacked by(the glass shiv (/obj/item/knife/shiv), Abigail Schmidt (295) (/mob/living/carbon/human), the monkey left leg (/obj/item/bodypart/l_leg/monkey), Anthony Hayhurst (461) (/mob/living/carbon/human))
+ ...
+ Anthony Hayhurst (461) (/mob/living/carbon/human): attackby(the glass shiv (/obj/item/knife/shiv), Abigail Schmidt (295) (/mob/living/carbon/human), null)
+ the glass shiv (/obj/item/knife/shiv): melee attack chain(Abigail Schmidt (295) (/mob/living/carbon/human), Anthony Hayhurst (461) (/mob/living/carbon/human), null)
+ /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob): monkey attack(/datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry), Anthony Hayhurst (461) (/mob/living/carbon/human), 0.8, 0)
+ /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob): perform(0.8, /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry), "BB_monkey_current_attack_targe...")
+ /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry): ProcessBehavior(0.8, /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob))
+ /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry): process(0.1)
+ AI Behavior Ticker (/datum/controller/subsystem/processing/ai_behaviors): fire(0)
+ AI Behavior Ticker (/datum/controller/subsystem/processing/ai_behaviors): ignite(0)
+ Master (/datum/controller/master): Loop(2)
+ Master (/datum/controller/master): StartProcessing(0)
+2022-11-01T15:31:44.6330863Z ##[error]Monkey Business caused 1 runtimes
+2022-11-01T15:31:44.6331536Z FAILURE #1: [15:31:23] Runtime in _forensics.dm,232: Cannot execute null.resolve().
+2022-11-01T15:31:44.6331910Z proc name: check blood (/datum/forensics/proc/check_blood)
+2022-11-01T15:31:44.6332223Z src: /datum/forensics (/datum/forensics)
+2022-11-01T15:31:44.6332475Z call stack:
+2022-11-01T15:31:44.6332738Z /datum/forensics (/datum/forensics): check blood()
+2022-11-01T15:31:44.6333171Z /datum/forensics (/datum/forensics): New(the blood splatter (/obj/effect/decal/cleanable/blood/hitsplatter), null, null, /list (/list), null)
+2022-11-01T15:31:44.6333653Z the blood splatter (/obj/effect/decal/cleanable/blood/hitsplatter): add blood DNA(/list (/list))
+2022-11-01T15:31:44.6334238Z Anthony Hayhurst (461) (/mob/living/carbon/human): spray blood(2, 1)
+2022-11-01T15:31:44.6334605Z Rough Abrasion (/datum/wound/slash/flesh/moderate): wound injury(null, 2)
+2022-11-01T15:31:44.6335055Z Rough Abrasion (/datum/wound/slash/flesh/moderate): apply wound(the monkey left leg (/obj/item/bodypart/l_leg/monkey), 0, null, 0, 2)
+2022-11-01T15:31:44.6335679Z the monkey left leg (/obj/item/bodypart/l_leg/monkey): check wounding(2, 8, 5, 15, 2)
+2022-11-01T15:31:44.6336429Z the monkey left leg (/obj/item/bodypart/l_leg/monkey): receive damage(8, 0, 0, 0, 1, null, 5, 15, 1, 2)
+2022-11-01T15:31:44.6336913Z Monkey (/datum/species/monkey): apply damage(8, "brute", "l_leg", 0, Anthony Hayhurst (461) (/mob/living/carbon/human), 0, 0, 5, 15, 1, 2)
+2022-11-01T15:31:44.6337727Z Monkey (/datum/species/monkey): spec attacked by(the glass shiv (/obj/item/knife/shiv), Abigail Schmidt (295) (/mob/living/carbon/human), the monkey left leg (/obj/item/bodypart/l_leg/monkey), Anthony Hayhurst (461) (/mob/living/carbon/human))
+2022-11-01T15:31:44.6338196Z ...
+2022-11-01T15:31:44.6338557Z Anthony Hayhurst (461) (/mob/living/carbon/human): attackby(the glass shiv (/obj/item/knife/shiv), Abigail Schmidt (295) (/mob/living/carbon/human), null)
+2022-11-01T15:31:44.6339113Z the glass shiv (/obj/item/knife/shiv): melee attack chain(Abigail Schmidt (295) (/mob/living/carbon/human), Anthony Hayhurst (461) (/mob/living/carbon/human), null)
+2022-11-01T15:31:44.6339859Z /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob): monkey attack(/datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry), Anthony Hayhurst (461) (/mob/living/carbon/human), 0.8, 0)
+2022-11-01T15:31:44.6340560Z /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob): perform(0.8, /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry), "BB_monkey_current_attack_targe...")
+2022-11-01T15:31:44.6341189Z /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry): ProcessBehavior(0.8, /datum/ai_behavior/monkey_atta... (/datum/ai_behavior/monkey_attack_mob))
+2022-11-01T15:31:44.6341689Z /datum/ai_controller/monkey/an... (/datum/ai_controller/monkey/angry): process(0.1)
+2022-11-01T15:31:44.6342103Z AI Behavior Ticker (/datum/controller/subsystem/processing/ai_behaviors): fire(0)
+2022-11-01T15:31:44.6342523Z AI Behavior Ticker (/datum/controller/subsystem/processing/ai_behaviors): ignite(0)
+2022-11-01T15:31:44.6342869Z Master (/datum/controller/master): Loop(2)
+2022-11-01T15:31:44.6343234Z Master (/datum/controller/master): StartProcessing(0) at _forensics.dm:232
+2022-11-01T15:31:44.6345243Z ##[error][1;31mFAIL[0m /datum/unit_test/monkey_business 38.6s
+2022-11-01T15:31:46.9833542Z ##[group]/datum/unit_test/create_and_destroy
+2022-11-01T15:37:15.1785471Z
+2022-11-01T15:37:15.1787041Z [1;32mPASS[0m /datum/unit_test/create_and_destroy 328.2s
+2022-11-01T15:37:15.1788074Z ##[endgroup]
+2022-11-01T15:37:15.2115771Z Shutting down Chat subsystem...
+2022-11-01T15:37:15.2116567Z Shutting down Init Profiler subsystem...
+2022-11-01T15:37:15.2208167Z Shutting down Ban Cache subsystem...
+2022-11-01T15:37:15.2208478Z Shutting down Stat Panels subsystem...
+2022-11-01T15:37:15.2208750Z Shutting down Explosions subsystem...
+2022-11-01T15:37:15.2209680Z Shutting down Pathfinder subsystem...
+2022-11-01T15:37:15.2210086Z Shutting down Minor Mapping subsystem...
+2022-11-01T15:37:15.2210409Z Shutting down Shuttle subsystem...
+2022-11-01T15:37:15.2210690Z Shutting down Lighting subsystem...
+2022-11-01T15:37:15.2210997Z Shutting down XKeyScore subsystem...
+2022-11-01T15:37:15.2211299Z Shutting down PRISM subsystem...
+2022-11-01T15:37:15.2211603Z Shutting down Icon Smoothing subsystem...
+2022-11-01T15:37:15.2211910Z Shutting down Assets subsystem...
+2022-11-01T15:37:15.2212179Z Shutting down Vote subsystem...
+2022-11-01T15:37:15.2212502Z Shutting down Persistent Paintings subsystem...
+2022-11-01T15:37:15.2212991Z Shutting down Persistence subsystem...
+2022-11-01T15:37:15.2213473Z Shutting down Atmospherics subsystem...
+2022-11-01T15:37:15.2213821Z Shutting down Wiremod Composite Templates subsystem...
+2022-11-01T15:37:15.2214138Z Shutting down Wet floors subsystem...
+2022-11-01T15:37:15.2214441Z Shutting down Weather subsystem...
+2022-11-01T15:37:15.2214736Z Shutting down Wardrobe subsystem...
+2022-11-01T15:37:15.2215362Z Shutting down Verb Manager subsystem...
+2022-11-01T15:37:15.2215678Z Shutting down Tram Process subsystem...
+2022-11-01T15:37:15.2215965Z Shutting down Traitor subsystem...
+2022-11-01T15:37:15.2216263Z Shutting down Throwing subsystem...
+2022-11-01T15:37:15.2216556Z Shutting down tgui subsystem...
+2022-11-01T15:37:15.2216873Z Shutting down Supermatter Cascade subsystem...
+2022-11-01T15:37:15.2217334Z Shutting down Sun subsystem...
+2022-11-01T15:37:15.2217957Z Shutting down Speech Controller subsystem...
+2022-11-01T15:37:15.2218246Z Shutting down Space Drift subsystem...
+2022-11-01T15:37:15.2218517Z Shutting down Smoke subsystem...
+2022-11-01T15:37:15.2218784Z Shutting down Singularity subsystem...
+2022-11-01T15:37:15.2219050Z Shutting down Radio subsystem...
+2022-11-01T15:37:15.2219464Z Shutting down Radiation subsystem...
+2022-11-01T15:37:15.2219884Z Shutting down Projectiles subsystem...
+2022-11-01T15:37:15.2220146Z Shutting down Processing subsystem...
+2022-11-01T15:37:15.2220418Z Shutting down Points of Interest subsystem...
+2022-11-01T15:37:15.2220689Z Shutting down Plumbing subsystem...
+2022-11-01T15:37:15.2221061Z Shutting down Ping subsystem...
+2022-11-01T15:37:15.2221313Z Shutting down Parallax subsystem...
+2022-11-01T15:37:15.2221568Z Shutting down pAI subsystem...
+2022-11-01T15:37:15.2221814Z Shutting down Overlay subsystem...
+2022-11-01T15:37:15.5486394Z Shutting down Objects subsystem...
+2022-11-01T15:37:15.5489952Z Shutting down Obj Tab Items subsystem...
+2022-11-01T15:37:15.5493560Z Shutting down NPC Pool subsystem...
+2022-11-01T15:37:15.5496794Z Shutting down Night Shift subsystem...
+2022-11-01T15:37:15.5500936Z Shutting down Movement Loops subsystem...
+2022-11-01T15:37:15.5503981Z Shutting down Movement Handler subsystem...
+2022-11-01T15:37:15.5507931Z Shutting down MouseEntered subsystem...
+2022-11-01T15:37:15.5511418Z Shutting down Mood subsystem...
+2022-11-01T15:37:15.5514382Z Shutting down Mobs subsystem...
+2022-11-01T15:37:15.5517620Z Shutting down Materials subsystem...
+2022-11-01T15:37:15.5520737Z Shutting down Lua Scripting subsystem...
+2022-11-01T15:37:15.5698324Z Shutting down Library Loading subsystem...
+2022-11-01T15:37:15.5702028Z Shutting down Lag Switch subsystem...
+2022-11-01T15:37:15.5705452Z Shutting down Idling NPC Pool subsystem...
+2022-11-01T15:37:15.5708861Z Shutting down Foam subsystem...
+2022-11-01T15:37:15.5711826Z Shutting down Fluid subsystem...
+2022-11-01T15:37:15.5714787Z Shutting down Fire Burning subsystem...
+2022-11-01T15:37:15.5717774Z Shutting down Fast Processing subsystem...
+2022-11-01T15:37:15.5720765Z Shutting down Eigenstates subsystem...
+2022-11-01T15:37:15.5724720Z Shutting down Disease subsystem...
+2022-11-01T15:37:15.5728367Z Shutting down Datum Component System subsystem...
+2022-11-01T15:37:15.5731629Z Shutting down Conveyor Belts subsystem...
+2022-11-01T15:37:15.5735561Z Shutting down Communications subsystem...
+2022-11-01T15:37:15.5741612Z Shutting down Clock Component subsystem...
+2022-11-01T15:37:15.5741985Z Shutting down Circuit Components subsystem...
+2022-11-01T15:37:15.5744678Z Shutting down Blackmarket subsystem...
+2022-11-01T15:37:15.5746962Z Shutting down Basic Avoidance subsystem...
+2022-11-01T15:37:15.5747274Z Shutting down Aura Healing subsystem...
+2022-11-01T15:37:15.5747561Z Shutting down Augury subsystem...
+2022-11-01T15:37:15.5749911Z Shutting down Asset Loading subsystem...
+2022-11-01T15:37:15.5754181Z Shutting down Antag HUDs subsystem...
+2022-11-01T15:37:15.5758062Z Shutting down Ambience subsystem...
+2022-11-01T15:37:15.5761140Z Shutting down Addiction subsystem...
+2022-11-01T15:37:15.5765437Z Shutting down Acid subsystem...
+2022-11-01T15:37:15.5766113Z Shutting down Timer subsystem...
+2022-11-01T15:37:15.5767908Z Shutting down Sound Loops subsystem...
+2022-11-01T15:37:15.5769204Z Shutting down Runechat subsystem...
+2022-11-01T15:37:15.5770456Z Shutting down Skills subsystem...
+2022-11-01T15:37:15.5771990Z Shutting down Machines subsystem...
+2022-11-01T15:37:15.5772983Z Shutting down Language subsystem...
+2022-11-01T15:37:15.5774580Z Shutting down Atoms subsystem...
+2022-11-01T15:37:15.5841490Z Shutting down Restaurant subsystem...
+2022-11-01T15:37:15.5842179Z Shutting down Economy subsystem...
+2022-11-01T15:37:15.5843973Z Shutting down Spatial Grid subsystem...
+2022-11-01T15:37:15.5846087Z Shutting down Networks subsystem...
+2022-11-01T15:37:15.5847879Z Shutting down Time Tracking subsystem...
+2022-11-01T15:37:15.5849604Z Shutting down Research subsystem...
+2022-11-01T15:37:15.5850285Z Shutting down Early Assets subsystem...
+2022-11-01T15:37:15.5850811Z Shutting down Mapping subsystem...
+2022-11-01T15:37:15.5852025Z Shutting down Trading Card Game subsystem...
+2022-11-01T15:37:15.5852482Z Shutting down Ticker subsystem...
+2022-11-01T15:37:15.5872565Z Unable to locate admins backup file.
+2022-11-01T15:37:15.5885253Z Shutting down AI Controller Ticker subsystem...
+2022-11-01T15:37:15.5885786Z Shutting down AI Behavior Ticker subsystem...
+2022-11-01T15:37:15.5886089Z Shutting down AI movement subsystem...
+2022-11-01T15:37:15.5886382Z Shutting down Jobs subsystem...
+2022-11-01T15:37:15.5886664Z Shutting down IDs and Access subsystem...
+2022-11-01T15:37:15.5887205Z Shutting down Events subsystem...
+2022-11-01T15:37:15.5887507Z Shutting down Reagents subsystem...
+2022-11-01T15:37:15.5887770Z Shutting down Quirks subsystem...
+2022-11-01T15:37:15.5888040Z Shutting down Station subsystem...
+2022-11-01T15:37:15.5888322Z Shutting down Achievements subsystem...
+2022-11-01T15:37:15.5888724Z Shutting down Discord subsystem...
+2022-11-01T15:37:15.5889010Z Shutting down Security Level subsystem...
+2022-11-01T15:37:15.5889306Z Shutting down Vis contents overlays subsystem...
+2022-11-01T15:37:15.5889608Z Shutting down Greyscale subsystem...
+2022-11-01T15:37:15.5889894Z Shutting down Instruments subsystem...
+2022-11-01T15:37:15.5890172Z Shutting down Sounds subsystem...
+2022-11-01T15:37:15.5893120Z Shutting down Input subsystem...
+2022-11-01T15:37:15.5893553Z Shutting down Server Tasks subsystem...
+2022-11-01T15:37:15.5893838Z Shutting down Blackbox subsystem...
+2022-11-01T15:37:15.5894135Z Shutting down Database subsystem...
+2022-11-01T15:37:15.5898881Z Shutting down Garbage subsystem...
+2022-11-01T15:37:19.6680958Z Shutting down Title Screen subsystem...
+2022-11-01T15:37:19.6687147Z Shutting down Profiler subsystem...
+2022-11-01T15:37:19.6687404Z Shutdown complete
+2022-11-01T15:37:19.6691132Z Test run failed!
+2022-11-01T15:37:19.6691327Z Total runtimes: 1
+2022-11-01T15:37:19.6691534Z Unit Tests failed!
+2022-11-01T15:37:23.9554639Z cat: ci_test/data/logs/ci/clean_run.lk: No such file or directory
+2022-11-01T15:37:23.9572826Z ##[error]Process completed with exit code 1.
+2022-11-01T15:37:23.9632357Z ##[group]Run actions/upload-artifact@v3
+2022-11-01T15:37:23.9632655Z with:
+2022-11-01T15:37:23.9632880Z name: test_artifacts_tramstation
+2022-11-01T15:37:23.9633150Z path: data/screenshots_new/
+2022-11-01T15:37:23.9633405Z retention-days: 1
+2022-11-01T15:37:23.9633657Z if-no-files-found: warn
+2022-11-01T15:37:23.9633904Z ##[endgroup]
+2022-11-01T15:37:24.0862474Z With the provided path, there will be 85 files uploaded
+2022-11-01T15:37:24.0868892Z Starting artifact upload
+2022-11-01T15:37:24.0869932Z For more detailed logs during the artifact upload process, enable step-debugging: https://docs.github.com/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging
+2022-11-01T15:37:24.0872765Z Artifact name is valid!
+2022-11-01T15:37:24.2152427Z Container for artifact "test_artifacts_tramstation" successfully created. Starting upload of file(s)
+2022-11-01T15:37:31.3325316Z Total size of all the files uploaded is 138917 bytes
+2022-11-01T15:37:31.3326061Z File upload process has finished. Finalizing the artifact upload
+2022-11-01T15:37:31.4289346Z Artifact has been finalized. All files have been successfully uploaded!
+2022-11-01T15:37:31.4291368Z
+2022-11-01T15:37:31.4293992Z The raw size of all the files that were specified for upload is 139272 bytes
+2022-11-01T15:37:31.4298141Z The size of all the files that were uploaded is 138917 bytes. This takes into account any gzip compression used to reduce the upload size, time and storage
+2022-11-01T15:37:31.4301961Z
+2022-11-01T15:37:31.4303707Z Note: The size of downloaded zips can differ significantly from the reported size. For more information see: https://github.com/actions/upload-artifact#zipped-artifact-downloads
+2022-11-01T15:37:31.4304326Z
+2022-11-01T15:37:31.4305332Z Artifact test_artifacts_tramstation has been successfully uploaded!
+2022-11-01T15:37:31.4451625Z Post job cleanup.
+2022-11-01T15:37:31.5950708Z [command]/usr/bin/git version
+2022-11-01T15:37:31.6017097Z git version 2.38.1
+2022-11-01T15:37:31.6089966Z Temporarily overriding HOME='/home/runner/work/_temp/b4760186-42be-4069-aaa5-837bedeee4b8' before making global git config changes
+2022-11-01T15:37:31.6092488Z Adding repository directory to the temporary git global config as a safe directory
+2022-11-01T15:37:31.6100037Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2022-11-01T15:37:31.6160949Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2022-11-01T15:37:31.6210420Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
+2022-11-01T15:37:31.6542403Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2022-11-01T15:37:31.6580227Z http.https://github.com/.extraheader
+2022-11-01T15:37:31.6595477Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
+2022-11-01T15:37:31.6646421Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
+2022-11-01T15:37:31.7192910Z Print service container logs: e281b5d836644f53b33d06a88663b086_mysqllatest_c6a68e
+2022-11-01T15:37:31.7200768Z ##[command]/usr/bin/docker logs --details cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:37:31.7459373Z 2022-11-01T15:22:37.911886Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-11-01T15:37:31.7460001Z 2022-11-01 15:22:37+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
+2022-11-01T15:37:31.7461115Z 2022-11-01T15:22:37.912008Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.31) initializing of server in progress as process 79
+2022-11-01T15:37:31.7461587Z 2022-11-01T15:22:37.920633Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-11-01T15:37:31.7462180Z 2022-11-01T15:22:38.395422Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-11-01T15:37:31.7462662Z 2022-11-01T15:22:39.587998Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
+2022-11-01T15:37:31.7463283Z 2022-11-01T15:22:42.870247Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-11-01T15:37:31.7463804Z 2022-11-01T15:22:42.873029Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 128
+2022-11-01T15:37:31.7464196Z 2022-11-01T15:22:42.887863Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-11-01T15:37:31.7464742Z 2022-11-01T15:22:43.221367Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-11-01T15:37:31.7465133Z 2022-11-01T15:22:43.520686Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2022-11-01T15:37:31.7465779Z 2022-11-01T15:22:43.520748Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2022-11-01T15:37:31.7466727Z 2022-11-01T15:22:43.522020Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2022-11-01T15:37:31.7467384Z 2022-11-01T15:22:43.546149Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
+2022-11-01T15:37:31.7468097Z 2022-11-01T15:22:43.546223Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
+2022-11-01T15:37:31.7468696Z Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
+2022-11-01T15:37:31.7576656Z Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
+2022-11-01T15:37:31.7577123Z 2022-11-01 15:22:37+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
+2022-11-01T15:37:31.7579077Z Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
+2022-11-01T15:37:31.7579519Z Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
+2022-11-01T15:37:31.7582066Z Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
+2022-11-01T15:37:31.7582539Z 2022-11-01T15:22:46.179932Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.31).
+2022-11-01T15:37:31.7583335Z 2022-11-01T15:22:47.016783Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.31) MySQL Community Server - GPL.
+2022-11-01T15:37:31.7583954Z 2022-11-01T15:22:47.446654Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-11-01T15:37:31.7584942Z 2022-11-01T15:22:47.448502Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 1
+2022-11-01T15:37:31.7585376Z 2022-11-01T15:22:47.455938Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-11-01T15:37:31.7585762Z 2022-11-01T15:22:47.684708Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-11-01T15:37:31.7586149Z 2022-11-01T15:22:47.881879Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2022-11-01T15:37:31.7586624Z 2022-11-01T15:22:47.881923Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2022-11-01T15:37:31.7587101Z 2022-11-01 15:22:37+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
+2022-11-01T15:37:31.7587663Z 2022-11-01T15:22:47.883353Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2022-11-01T15:37:31.7588411Z 2022-11-01T15:22:47.904354Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
+2022-11-01T15:37:31.7588952Z 2022-11-01T15:22:47.904482Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
+2022-11-01T15:37:31.7589414Z 2022-11-01 15:22:37+00:00 [Note] [Entrypoint]: Initializing database files
+2022-11-01T15:37:31.7589752Z 2022-11-01 15:22:42+00:00 [Note] [Entrypoint]: Database files initialized
+2022-11-01T15:37:31.7590084Z 2022-11-01 15:22:42+00:00 [Note] [Entrypoint]: Starting temporary server
+2022-11-01T15:37:31.7590409Z 2022-11-01 15:22:43+00:00 [Note] [Entrypoint]: Temporary server started.
+2022-11-01T15:37:31.7590742Z '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
+2022-11-01T15:37:31.7590984Z
+2022-11-01T15:37:31.7591244Z 2022-11-01 15:22:46+00:00 [Note] [Entrypoint]: Stopping temporary server
+2022-11-01T15:37:31.7591577Z 2022-11-01 15:22:47+00:00 [Note] [Entrypoint]: Temporary server stopped
+2022-11-01T15:37:31.7592516Z
+2022-11-01T15:37:31.7592791Z 2022-11-01 15:22:47+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
+2022-11-01T15:37:31.7593063Z
+2022-11-01T15:37:31.7608136Z Stop and remove container: e281b5d836644f53b33d06a88663b086_mysqllatest_c6a68e
+2022-11-01T15:37:31.7616365Z ##[command]/usr/bin/docker rm --force cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:37:32.0241098Z cd1d0f20f8f882176c274fb882d88cea0d4e9a7b2aebc33f1123c02f7b908aa1
+2022-11-01T15:37:32.0279431Z Remove container network: github_network_7d8483aa88b2460d91b946ac72079065
+2022-11-01T15:37:32.0288111Z ##[command]/usr/bin/docker network rm github_network_7d8483aa88b2460d91b946ac72079065
+2022-11-01T15:37:32.1478643Z github_network_7d8483aa88b2460d91b946ac72079065
+2022-11-01T15:37:32.1688580Z Cleaning up orphan processes
diff --git a/tools/pull_request_hooks/flakyTestPayloads/multiple_failures.txt b/tools/pull_request_hooks/flakyTestPayloads/multiple_failures.txt
new file mode 100644
index 0000000000000..a1a52cdb1a3f5
--- /dev/null
+++ b/tools/pull_request_hooks/flakyTestPayloads/multiple_failures.txt
@@ -0,0 +1,8 @@
+2022-11-22T05:59:45.2618397Z ##[group]/datum/unit_test/shapeshift_spell
+2022-11-22T05:59:45.4118582Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape Juggernaut. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4119786Z FAILURE #1: Shapeshift spell: Dragon Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.2618397Z ##[endgroup]
+2022-11-22T05:59:45.2618397Z ##[group]/datum/unit_test/more_shapeshift_spell
+2022-11-22T05:59:45.4118582Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape Juggernaut. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4119786Z FAILURE #1: Shapeshift spell: Dragon Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.2618397Z ##[endgroup]
diff --git a/tools/pull_request_hooks/flakyTestPayloads/shapeshift.txt b/tools/pull_request_hooks/flakyTestPayloads/shapeshift.txt
new file mode 100644
index 0000000000000..b151f1888e13d
--- /dev/null
+++ b/tools/pull_request_hooks/flakyTestPayloads/shapeshift.txt
@@ -0,0 +1,2466 @@
+2022-11-22T05:53:38.0374888Z Requested labels: ubuntu-20.04
+2022-11-22T05:53:38.0374935Z Job defined at: tgstation/tgstation/.github/workflows/run_integration_tests.yml@refs/pull/71181/merge
+2022-11-22T05:53:38.0374956Z Waiting for a runner to pick up this job...
+2022-11-22T05:53:38.4265982Z Job is waiting for a hosted runner to come online.
+2022-11-22T05:53:41.3842133Z Job is about to start running on the hosted runner: GitHub Actions 11 (hosted)
+2022-11-22T05:53:43.5319684Z Current runner version: '2.299.1'
+2022-11-22T05:53:43.5346147Z ##[group]Operating System
+2022-11-22T05:53:43.5346780Z Ubuntu
+2022-11-22T05:53:43.5347041Z 20.04.5
+2022-11-22T05:53:43.5347353Z LTS
+2022-11-22T05:53:43.5347672Z ##[endgroup]
+2022-11-22T05:53:43.5347952Z ##[group]Runner Image
+2022-11-22T05:53:43.5348342Z Image: ubuntu-20.04
+2022-11-22T05:53:43.5348676Z Version: 20221027.1
+2022-11-22T05:53:43.5349164Z Included Software: https://github.com/actions/runner-images/blob/ubuntu20/20221027.1/images/linux/Ubuntu2004-Readme.md
+2022-11-22T05:53:43.5349811Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu20%2F20221027.1
+2022-11-22T05:53:43.5350263Z ##[endgroup]
+2022-11-22T05:53:43.5350646Z ##[group]Runner Image Provisioner
+2022-11-22T05:53:43.5350944Z 2.0.91.1
+2022-11-22T05:53:43.5351255Z ##[endgroup]
+2022-11-22T05:53:43.5352178Z ##[group]GITHUB_TOKEN Permissions
+2022-11-22T05:53:43.5352874Z Actions: read
+2022-11-22T05:53:43.5353161Z Checks: read
+2022-11-22T05:53:43.5353647Z Contents: read
+2022-11-22T05:53:43.5353978Z Deployments: read
+2022-11-22T05:53:43.5354356Z Discussions: read
+2022-11-22T05:53:43.5354705Z Issues: read
+2022-11-22T05:53:43.5354973Z Metadata: read
+2022-11-22T05:53:43.5355295Z Packages: read
+2022-11-22T05:53:43.5355637Z Pages: read
+2022-11-22T05:53:43.5356005Z PullRequests: read
+2022-11-22T05:53:43.5356320Z RepositoryProjects: read
+2022-11-22T05:53:43.5356684Z SecurityEvents: read
+2022-11-22T05:53:43.5357015Z Statuses: read
+2022-11-22T05:53:43.5357311Z ##[endgroup]
+2022-11-22T05:53:43.5360971Z Secret source: None
+2022-11-22T05:53:43.5361464Z Prepare workflow directory
+2022-11-22T05:53:43.6494787Z Prepare all required actions
+2022-11-22T05:53:43.6676576Z Getting action download info
+2022-11-22T05:53:43.8661995Z Download action repository 'actions/checkout@v3' (SHA:93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8)
+2022-11-22T05:53:44.2330502Z Download action repository 'actions/cache@v3' (SHA:9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7)
+2022-11-22T05:53:44.4868016Z Download action repository 'actions/upload-artifact@v3' (SHA:83fd05a356d7e2593de66fc9913b3002723633cb)
+2022-11-22T05:53:44.7641359Z Uses: tgstation/tgstation/.github/workflows/run_integration_tests.yml
+2022-11-22T05:53:44.7643311Z ##[group] Inputs
+2022-11-22T05:53:44.7643604Z map: metastation
+2022-11-22T05:53:44.7643819Z major:
+2022-11-22T05:53:44.7643991Z minor:
+2022-11-22T05:53:44.7644186Z ##[endgroup]
+2022-11-22T05:53:44.7644691Z Complete job name: Integration Tests (metastation) / run_integration_tests
+2022-11-22T05:53:44.8338079Z ##[group]Checking docker version
+2022-11-22T05:53:44.8354483Z ##[command]/usr/bin/docker version --format '{{.Server.APIVersion}}'
+2022-11-22T05:53:45.0506135Z '1.41'
+2022-11-22T05:53:45.0515561Z Docker daemon API version: '1.41'
+2022-11-22T05:53:45.0515967Z ##[command]/usr/bin/docker version --format '{{.Client.APIVersion}}'
+2022-11-22T05:53:45.0778446Z '1.41'
+2022-11-22T05:53:45.0797454Z Docker client API version: '1.41'
+2022-11-22T05:53:45.0803406Z ##[endgroup]
+2022-11-22T05:53:45.0807033Z ##[group]Clean up resources from previous jobs
+2022-11-22T05:53:45.0813032Z ##[command]/usr/bin/docker ps --all --quiet --no-trunc --filter "label=290506"
+2022-11-22T05:53:45.1033571Z ##[command]/usr/bin/docker network prune --force --filter "label=290506"
+2022-11-22T05:53:45.1259718Z ##[endgroup]
+2022-11-22T05:53:45.1260017Z ##[group]Create local container network
+2022-11-22T05:53:45.1270797Z ##[command]/usr/bin/docker network create --label 290506 github_network_7853d588c20f407bba7b04c3e70db729
+2022-11-22T05:53:45.1987626Z 71dabce427017ea3bab6d7ce48f6c7aaee980f9942b9d66f36e69e74f5fd921f
+2022-11-22T05:53:45.2004385Z ##[endgroup]
+2022-11-22T05:53:45.2093406Z ##[group]Starting mysql service container
+2022-11-22T05:53:45.2113754Z ##[command]/usr/bin/docker pull mysql:latest
+2022-11-22T05:53:45.4670300Z latest: Pulling from library/mysql
+2022-11-22T05:53:45.5358977Z 0bb5c0c24818: Pulling fs layer
+2022-11-22T05:53:45.5359400Z cbb3106fbb5a: Pulling fs layer
+2022-11-22T05:53:45.5359691Z 550536ae1d5e: Pulling fs layer
+2022-11-22T05:53:45.5360232Z 33f98928796e: Pulling fs layer
+2022-11-22T05:53:45.5360486Z a341087cff11: Pulling fs layer
+2022-11-22T05:53:45.5360746Z 0e26ac5b33f6: Pulling fs layer
+2022-11-22T05:53:45.5360985Z c883b83a7112: Pulling fs layer
+2022-11-22T05:53:45.5361246Z 873af5c876c6: Pulling fs layer
+2022-11-22T05:53:45.5361483Z 33f98928796e: Waiting
+2022-11-22T05:53:45.5361701Z a341087cff11: Waiting
+2022-11-22T05:53:45.5361926Z 0e26ac5b33f6: Waiting
+2022-11-22T05:53:45.5362161Z c883b83a7112: Waiting
+2022-11-22T05:53:45.5362390Z 8fe8ebd061d5: Pulling fs layer
+2022-11-22T05:53:45.5362660Z 7ac2553cf6b4: Pulling fs layer
+2022-11-22T05:53:45.5362912Z ad655e218e12: Pulling fs layer
+2022-11-22T05:53:45.5363152Z 8fe8ebd061d5: Waiting
+2022-11-22T05:53:45.5363368Z 7ac2553cf6b4: Waiting
+2022-11-22T05:53:45.5363591Z ad655e218e12: Waiting
+2022-11-22T05:53:45.5364183Z 873af5c876c6: Waiting
+2022-11-22T05:53:45.6234256Z cbb3106fbb5a: Download complete
+2022-11-22T05:53:45.6623068Z 550536ae1d5e: Verifying Checksum
+2022-11-22T05:53:45.6623379Z 550536ae1d5e: Download complete
+2022-11-22T05:53:45.7431784Z a341087cff11: Verifying Checksum
+2022-11-22T05:53:45.7432683Z a341087cff11: Download complete
+2022-11-22T05:53:45.8330384Z 0e26ac5b33f6: Verifying Checksum
+2022-11-22T05:53:45.8331535Z 0e26ac5b33f6: Download complete
+2022-11-22T05:53:45.8722359Z 0bb5c0c24818: Verifying Checksum
+2022-11-22T05:53:45.8722993Z 0bb5c0c24818: Download complete
+2022-11-22T05:53:45.8885518Z 33f98928796e: Verifying Checksum
+2022-11-22T05:53:45.8886144Z 33f98928796e: Download complete
+2022-11-22T05:53:45.9620666Z 873af5c876c6: Verifying Checksum
+2022-11-22T05:53:45.9624337Z 873af5c876c6: Download complete
+2022-11-22T05:53:46.0723260Z 7ac2553cf6b4: Verifying Checksum
+2022-11-22T05:53:46.0729266Z 7ac2553cf6b4: Download complete
+2022-11-22T05:53:46.1847787Z ad655e218e12: Verifying Checksum
+2022-11-22T05:53:46.1852352Z ad655e218e12: Download complete
+2022-11-22T05:53:46.4992758Z 8fe8ebd061d5: Verifying Checksum
+2022-11-22T05:53:46.4993194Z 8fe8ebd061d5: Download complete
+2022-11-22T05:53:46.6873819Z c883b83a7112: Verifying Checksum
+2022-11-22T05:53:46.6894121Z c883b83a7112: Download complete
+2022-11-22T05:53:47.4927005Z 0bb5c0c24818: Pull complete
+2022-11-22T05:53:48.3726655Z cbb3106fbb5a: Pull complete
+2022-11-22T05:53:48.4410442Z 550536ae1d5e: Pull complete
+2022-11-22T05:53:48.6472190Z 33f98928796e: Pull complete
+2022-11-22T05:53:48.7065871Z a341087cff11: Pull complete
+2022-11-22T05:53:48.7593552Z 0e26ac5b33f6: Pull complete
+2022-11-22T05:53:50.6234832Z c883b83a7112: Pull complete
+2022-11-22T05:53:50.6783015Z 873af5c876c6: Pull complete
+2022-11-22T05:53:55.9655421Z 8fe8ebd061d5: Pull complete
+2022-11-22T05:53:56.0172449Z 7ac2553cf6b4: Pull complete
+2022-11-22T05:53:56.0721706Z ad655e218e12: Pull complete
+2022-11-22T05:53:56.0770468Z Digest: sha256:96439dd0d8d085cd90c8001be2c9dde07b8a68b472bd20efcbe3df78cff66492
+2022-11-22T05:53:56.0780303Z Status: Downloaded newer image for mysql:latest
+2022-11-22T05:53:56.0800496Z docker.io/library/mysql:latest
+2022-11-22T05:53:56.0907615Z ##[command]/usr/bin/docker create --name 57e9ed27eab042ee8653063f2a3e4b8e_mysqllatest_56fbdc --label 290506 --network github_network_7853d588c20f407bba7b04c3e70db729 --network-alias mysql -p 3306 --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 -e "MYSQL_ROOT_PASSWORD=root" -e GITHUB_ACTIONS=true -e CI=true mysql:latest
+2022-11-22T05:53:56.1330409Z 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:53:56.1355904Z ##[command]/usr/bin/docker start 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:53:56.5058287Z 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:53:56.5093538Z ##[command]/usr/bin/docker ps --all --filter id=46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
+2022-11-22T05:53:56.5325566Z 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df Up Less than a second (health: starting)
+2022-11-22T05:53:56.5337249Z ##[command]/usr/bin/docker port 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:53:56.5611482Z 3306/tcp -> 0.0.0.0:49153
+2022-11-22T05:53:56.5612227Z 3306/tcp -> :::49153
+2022-11-22T05:53:56.5704537Z ##[endgroup]
+2022-11-22T05:53:56.5734437Z ##[group]Waiting for all services to be ready
+2022-11-22T05:53:56.5780170Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:53:56.6025583Z starting
+2022-11-22T05:53:56.6049671Z mysql service is starting, waiting 2 seconds before checking again.
+2022-11-22T05:53:58.6031859Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:53:58.6340318Z starting
+2022-11-22T05:53:58.6357312Z mysql service is starting, waiting 3 seconds before checking again.
+2022-11-22T05:54:02.3718080Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:54:02.4089096Z starting
+2022-11-22T05:54:02.4104252Z mysql service is starting, waiting 8 seconds before checking again.
+2022-11-22T05:54:10.5021256Z ##[command]/usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T05:54:10.5229049Z healthy
+2022-11-22T05:54:10.5246329Z mysql service is healthy.
+2022-11-22T05:54:10.5246744Z ##[endgroup]
+2022-11-22T05:54:10.5622212Z ##[group]Run actions/checkout@v3
+2022-11-22T05:54:10.5622478Z with:
+2022-11-22T05:54:10.5622701Z repository: tgstation/tgstation
+2022-11-22T05:54:10.5623165Z token: ***
+2022-11-22T05:54:10.5623358Z ssh-strict: true
+2022-11-22T05:54:10.5623595Z persist-credentials: true
+2022-11-22T05:54:10.5623831Z clean: true
+2022-11-22T05:54:10.5624017Z fetch-depth: 1
+2022-11-22T05:54:10.5624216Z lfs: false
+2022-11-22T05:54:10.5624410Z submodules: false
+2022-11-22T05:54:10.5624622Z set-safe-directory: true
+2022-11-22T05:54:10.5624849Z ##[endgroup]
+2022-11-22T05:54:10.8769664Z Syncing repository: tgstation/tgstation
+2022-11-22T05:54:10.8771464Z ##[group]Getting Git version info
+2022-11-22T05:54:10.8771995Z Working directory is '/home/runner/work/tgstation/tgstation'
+2022-11-22T05:54:10.8772502Z [command]/usr/bin/git version
+2022-11-22T05:54:10.8934189Z git version 2.38.1
+2022-11-22T05:54:10.8936302Z ##[endgroup]
+2022-11-22T05:54:10.8957434Z Temporarily overriding HOME='/home/runner/work/_temp/98913b85-f6f6-46e0-b153-ead562301846' before making global git config changes
+2022-11-22T05:54:10.8957893Z Adding repository directory to the temporary git global config as a safe directory
+2022-11-22T05:54:10.8958437Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2022-11-22T05:54:10.9000496Z Deleting the contents of '/home/runner/work/tgstation/tgstation'
+2022-11-22T05:54:10.9006615Z ##[group]Initializing the repository
+2022-11-22T05:54:10.9011194Z [command]/usr/bin/git init /home/runner/work/tgstation/tgstation
+2022-11-22T05:54:10.9106800Z hint: Using 'master' as the name for the initial branch. This default branch name
+2022-11-22T05:54:10.9107434Z hint: is subject to change. To configure the initial branch name to use in all
+2022-11-22T05:54:10.9108265Z hint: of your new repositories, which will suppress this warning, call:
+2022-11-22T05:54:10.9108574Z hint:
+2022-11-22T05:54:10.9109084Z hint: git config --global init.defaultBranch
+2022-11-22T05:54:10.9109349Z hint:
+2022-11-22T05:54:10.9109712Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
+2022-11-22T05:54:10.9110192Z hint: 'development'. The just-created branch can be renamed via this command:
+2022-11-22T05:54:10.9110453Z hint:
+2022-11-22T05:54:10.9110705Z hint: git branch -m
+2022-11-22T05:54:10.9123730Z Initialized empty Git repository in /home/runner/work/tgstation/tgstation/.git/
+2022-11-22T05:54:10.9133692Z [command]/usr/bin/git remote add origin https://github.com/tgstation/tgstation
+2022-11-22T05:54:10.9191164Z ##[endgroup]
+2022-11-22T05:54:10.9191935Z ##[group]Disabling automatic garbage collection
+2022-11-22T05:54:10.9196662Z [command]/usr/bin/git config --local gc.auto 0
+2022-11-22T05:54:10.9229900Z ##[endgroup]
+2022-11-22T05:54:10.9231230Z ##[group]Setting up auth
+2022-11-22T05:54:10.9239946Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2022-11-22T05:54:10.9275132Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
+2022-11-22T05:54:10.9691507Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2022-11-22T05:54:10.9715174Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
+2022-11-22T05:54:10.9955394Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
+2022-11-22T05:54:10.9987844Z ##[endgroup]
+2022-11-22T05:54:10.9988301Z ##[group]Fetching the repository
+2022-11-22T05:54:10.9999455Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +806eced1b6aa2166e665748be44c5c519833b2e2:refs/remotes/pull/71181/merge
+2022-11-22T05:54:11.4745200Z remote: Enumerating objects: 12670, done.
+2022-11-22T05:54:11.4781948Z remote: Counting objects: 0% (1/12670)
+2022-11-22T05:54:11.4788862Z remote: Counting objects: 1% (127/12670)
+2022-11-22T05:54:11.4791723Z remote: Counting objects: 2% (254/12670)
+2022-11-22T05:54:11.4795385Z remote: Counting objects: 3% (381/12670)
+2022-11-22T05:54:11.4798193Z remote: Counting objects: 4% (507/12670)
+2022-11-22T05:54:11.4812287Z remote: Counting objects: 5% (634/12670)
+2022-11-22T05:54:11.4813111Z remote: Counting objects: 6% (761/12670)
+2022-11-22T05:54:11.4816606Z remote: Counting objects: 7% (887/12670)
+2022-11-22T05:54:11.4816922Z remote: Counting objects: 8% (1014/12670)
+2022-11-22T05:54:11.4820085Z remote: Counting objects: 9% (1141/12670)
+2022-11-22T05:54:11.4820719Z remote: Counting objects: 10% (1267/12670)
+2022-11-22T05:54:11.4825610Z remote: Counting objects: 11% (1394/12670)
+2022-11-22T05:54:11.4833209Z remote: Counting objects: 12% (1521/12670)
+2022-11-22T05:54:11.4834855Z remote: Counting objects: 13% (1648/12670)
+2022-11-22T05:54:11.4836592Z remote: Counting objects: 14% (1774/12670)
+2022-11-22T05:54:11.4841147Z remote: Counting objects: 15% (1901/12670)
+2022-11-22T05:54:11.4842686Z remote: Counting objects: 16% (2028/12670)
+2022-11-22T05:54:11.4845844Z remote: Counting objects: 17% (2154/12670)
+2022-11-22T05:54:11.4850655Z remote: Counting objects: 18% (2281/12670)
+2022-11-22T05:54:11.4856457Z remote: Counting objects: 19% (2408/12670)
+2022-11-22T05:54:11.4860749Z remote: Counting objects: 20% (2534/12670)
+2022-11-22T05:54:11.4866335Z remote: Counting objects: 21% (2661/12670)
+2022-11-22T05:54:11.4868281Z remote: Counting objects: 22% (2788/12670)
+2022-11-22T05:54:11.4875422Z remote: Counting objects: 23% (2915/12670)
+2022-11-22T05:54:11.4878698Z remote: Counting objects: 24% (3041/12670)
+2022-11-22T05:54:11.4881887Z remote: Counting objects: 25% (3168/12670)
+2022-11-22T05:54:11.4885601Z remote: Counting objects: 26% (3295/12670)
+2022-11-22T05:54:11.4885891Z remote: Counting objects: 27% (3421/12670)
+2022-11-22T05:54:11.4895978Z remote: Counting objects: 28% (3548/12670)
+2022-11-22T05:54:11.4899479Z remote: Counting objects: 29% (3675/12670)
+2022-11-22T05:54:11.4900702Z remote: Counting objects: 30% (3801/12670)
+2022-11-22T05:54:11.4905007Z remote: Counting objects: 31% (3928/12670)
+2022-11-22T05:54:11.4913601Z remote: Counting objects: 32% (4055/12670)
+2022-11-22T05:54:11.4913882Z remote: Counting objects: 33% (4182/12670)
+2022-11-22T05:54:11.4929604Z remote: Counting objects: 34% (4308/12670)
+2022-11-22T05:54:11.4929903Z remote: Counting objects: 35% (4435/12670)
+2022-11-22T05:54:11.5015998Z remote: Counting objects: 36% (4562/12670)
+2022-11-22T05:54:11.5016343Z remote: Counting objects: 37% (4688/12670)
+2022-11-22T05:54:11.5016621Z remote: Counting objects: 38% (4815/12670)
+2022-11-22T05:54:11.5016894Z remote: Counting objects: 39% (4942/12670)
+2022-11-22T05:54:11.5017152Z remote: Counting objects: 40% (5068/12670)
+2022-11-22T05:54:11.5017647Z remote: Counting objects: 41% (5195/12670)
+2022-11-22T05:54:11.5017996Z remote: Counting objects: 42% (5322/12670)
+2022-11-22T05:54:11.5018305Z remote: Counting objects: 43% (5449/12670)
+2022-11-22T05:54:11.5018644Z remote: Counting objects: 44% (5575/12670)
+2022-11-22T05:54:11.5018982Z remote: Counting objects: 45% (5702/12670)
+2022-11-22T05:54:11.5019303Z remote: Counting objects: 46% (5829/12670)
+2022-11-22T05:54:11.5019637Z remote: Counting objects: 47% (5955/12670)
+2022-11-22T05:54:11.5019982Z remote: Counting objects: 48% (6082/12670)
+2022-11-22T05:54:11.5020319Z remote: Counting objects: 49% (6209/12670)
+2022-11-22T05:54:11.5020778Z remote: Counting objects: 50% (6335/12670)
+2022-11-22T05:54:11.5021186Z remote: Counting objects: 51% (6462/12670)
+2022-11-22T05:54:11.5021532Z remote: Counting objects: 52% (6589/12670)
+2022-11-22T05:54:11.5021820Z remote: Counting objects: 53% (6716/12670)
+2022-11-22T05:54:11.5022178Z remote: Counting objects: 54% (6842/12670)
+2022-11-22T05:54:11.5022546Z remote: Counting objects: 55% (6969/12670)
+2022-11-22T05:54:11.5022845Z remote: Counting objects: 56% (7096/12670)
+2022-11-22T05:54:11.5023177Z remote: Counting objects: 57% (7222/12670)
+2022-11-22T05:54:11.5023513Z remote: Counting objects: 58% (7349/12670)
+2022-11-22T05:54:11.5023845Z remote: Counting objects: 59% (7476/12670)
+2022-11-22T05:54:11.5074038Z remote: Counting objects: 60% (7602/12670)
+2022-11-22T05:54:11.5074496Z remote: Counting objects: 61% (7729/12670)
+2022-11-22T05:54:11.5074840Z remote: Counting objects: 62% (7856/12670)
+2022-11-22T05:54:11.5077738Z remote: Counting objects: 63% (7983/12670)
+2022-11-22T05:54:11.5078154Z remote: Counting objects: 64% (8109/12670)
+2022-11-22T05:54:11.5080069Z remote: Counting objects: 65% (8236/12670)
+2022-11-22T05:54:11.5080464Z remote: Counting objects: 66% (8363/12670)
+2022-11-22T05:54:11.5080767Z remote: Counting objects: 67% (8489/12670)
+2022-11-22T05:54:11.5081113Z remote: Counting objects: 68% (8616/12670)
+2022-11-22T05:54:11.5081547Z remote: Counting objects: 69% (8743/12670)
+2022-11-22T05:54:11.5083609Z remote: Counting objects: 70% (8869/12670)
+2022-11-22T05:54:11.5084045Z remote: Counting objects: 71% (8996/12670)
+2022-11-22T05:54:11.5084412Z remote: Counting objects: 72% (9123/12670)
+2022-11-22T05:54:11.5086279Z remote: Counting objects: 73% (9250/12670)
+2022-11-22T05:54:11.5086641Z remote: Counting objects: 74% (9376/12670)
+2022-11-22T05:54:11.5087027Z remote: Counting objects: 75% (9503/12670)
+2022-11-22T05:54:11.5087358Z remote: Counting objects: 76% (9630/12670)
+2022-11-22T05:54:11.5087661Z remote: Counting objects: 77% (9756/12670)
+2022-11-22T05:54:11.5088036Z remote: Counting objects: 78% (9883/12670)
+2022-11-22T05:54:11.5088378Z remote: Counting objects: 79% (10010/12670)
+2022-11-22T05:54:11.5088856Z remote: Counting objects: 80% (10136/12670)
+2022-11-22T05:54:11.5089215Z remote: Counting objects: 81% (10263/12670)
+2022-11-22T05:54:11.5089563Z remote: Counting objects: 82% (10390/12670)
+2022-11-22T05:54:11.5089941Z remote: Counting objects: 83% (10517/12670)
+2022-11-22T05:54:11.5090397Z remote: Counting objects: 84% (10643/12670)
+2022-11-22T05:54:11.5090737Z remote: Counting objects: 85% (10770/12670)
+2022-11-22T05:54:11.5091087Z remote: Counting objects: 86% (10897/12670)
+2022-11-22T05:54:11.5091375Z remote: Counting objects: 87% (11023/12670)
+2022-11-22T05:54:11.5091895Z remote: Counting objects: 88% (11150/12670)
+2022-11-22T05:54:11.5092268Z remote: Counting objects: 89% (11277/12670)
+2022-11-22T05:54:11.5092621Z remote: Counting objects: 90% (11403/12670)
+2022-11-22T05:54:11.5092910Z remote: Counting objects: 91% (11530/12670)
+2022-11-22T05:54:11.5093293Z remote: Counting objects: 92% (11657/12670)
+2022-11-22T05:54:11.5093629Z remote: Counting objects: 93% (11784/12670)
+2022-11-22T05:54:11.5093976Z remote: Counting objects: 94% (11910/12670)
+2022-11-22T05:54:11.5094262Z remote: Counting objects: 95% (12037/12670)
+2022-11-22T05:54:11.5094599Z remote: Counting objects: 96% (12164/12670)
+2022-11-22T05:54:11.5099944Z remote: Counting objects: 97% (12290/12670)
+2022-11-22T05:54:11.5108887Z remote: Counting objects: 98% (12417/12670)
+2022-11-22T05:54:11.5114474Z remote: Counting objects: 99% (12544/12670)
+2022-11-22T05:54:11.5114975Z remote: Counting objects: 100% (12670/12670)
+2022-11-22T05:54:11.5115371Z remote: Counting objects: 100% (12670/12670), done.
+2022-11-22T05:54:11.5294385Z remote: Compressing objects: 0% (1/11138)
+2022-11-22T05:54:11.5455556Z remote: Compressing objects: 1% (112/11138)
+2022-11-22T05:54:11.5603717Z remote: Compressing objects: 2% (223/11138)
+2022-11-22T05:54:11.5715131Z remote: Compressing objects: 3% (335/11138)
+2022-11-22T05:54:11.5791988Z remote: Compressing objects: 4% (446/11138)
+2022-11-22T05:54:11.5875970Z remote: Compressing objects: 5% (557/11138)
+2022-11-22T05:54:11.5992597Z remote: Compressing objects: 6% (669/11138)
+2022-11-22T05:54:11.6261135Z remote: Compressing objects: 7% (780/11138)
+2022-11-22T05:54:11.6614165Z remote: Compressing objects: 8% (892/11138)
+2022-11-22T05:54:11.6929090Z remote: Compressing objects: 9% (1003/11138)
+2022-11-22T05:54:11.7520585Z remote: Compressing objects: 10% (1114/11138)
+2022-11-22T05:54:11.8656642Z remote: Compressing objects: 11% (1226/11138)
+2022-11-22T05:54:12.3621233Z remote: Compressing objects: 12% (1337/11138)
+2022-11-22T05:54:12.4278664Z remote: Compressing objects: 13% (1448/11138)
+2022-11-22T05:54:12.5681269Z remote: Compressing objects: 14% (1560/11138)
+2022-11-22T05:54:12.5742648Z remote: Compressing objects: 14% (1564/11138)
+2022-11-22T05:54:12.6042588Z remote: Compressing objects: 15% (1671/11138)
+2022-11-22T05:54:12.6277778Z remote: Compressing objects: 16% (1783/11138)
+2022-11-22T05:54:12.6502958Z remote: Compressing objects: 17% (1894/11138)
+2022-11-22T05:54:12.6639889Z remote: Compressing objects: 18% (2005/11138)
+2022-11-22T05:54:12.6825168Z remote: Compressing objects: 19% (2117/11138)
+2022-11-22T05:54:12.7061189Z remote: Compressing objects: 20% (2228/11138)
+2022-11-22T05:54:12.7163241Z remote: Compressing objects: 21% (2339/11138)
+2022-11-22T05:54:12.7229844Z remote: Compressing objects: 22% (2451/11138)
+2022-11-22T05:54:12.7963458Z remote: Compressing objects: 23% (2562/11138)
+2022-11-22T05:54:12.8191300Z remote: Compressing objects: 24% (2674/11138)
+2022-11-22T05:54:12.8429274Z remote: Compressing objects: 25% (2785/11138)
+2022-11-22T05:54:12.8590322Z remote: Compressing objects: 26% (2896/11138)
+2022-11-22T05:54:12.8794121Z remote: Compressing objects: 27% (3008/11138)
+2022-11-22T05:54:12.9360005Z remote: Compressing objects: 28% (3119/11138)
+2022-11-22T05:54:12.9509115Z remote: Compressing objects: 29% (3231/11138)
+2022-11-22T05:54:12.9789410Z remote: Compressing objects: 30% (3342/11138)
+2022-11-22T05:54:13.0109912Z remote: Compressing objects: 31% (3453/11138)
+2022-11-22T05:54:13.0315139Z remote: Compressing objects: 32% (3565/11138)
+2022-11-22T05:54:13.0679208Z remote: Compressing objects: 33% (3676/11138)
+2022-11-22T05:54:13.1106278Z remote: Compressing objects: 34% (3787/11138)
+2022-11-22T05:54:13.1559648Z remote: Compressing objects: 35% (3899/11138)
+2022-11-22T05:54:13.1815080Z remote: Compressing objects: 36% (4010/11138)
+2022-11-22T05:54:13.2032125Z remote: Compressing objects: 37% (4122/11138)
+2022-11-22T05:54:13.2508874Z remote: Compressing objects: 38% (4233/11138)
+2022-11-22T05:54:13.2873404Z remote: Compressing objects: 39% (4344/11138)
+2022-11-22T05:54:13.3141434Z remote: Compressing objects: 40% (4456/11138)
+2022-11-22T05:54:13.3472418Z remote: Compressing objects: 41% (4567/11138)
+2022-11-22T05:54:13.3689876Z remote: Compressing objects: 42% (4678/11138)
+2022-11-22T05:54:13.4026125Z remote: Compressing objects: 43% (4790/11138)
+2022-11-22T05:54:13.4351768Z remote: Compressing objects: 44% (4901/11138)
+2022-11-22T05:54:13.4635455Z remote: Compressing objects: 45% (5013/11138)
+2022-11-22T05:54:13.4913930Z remote: Compressing objects: 46% (5124/11138)
+2022-11-22T05:54:13.5126550Z remote: Compressing objects: 47% (5235/11138)
+2022-11-22T05:54:13.5178454Z remote: Compressing objects: 47% (5330/11138)
+2022-11-22T05:54:13.5387150Z remote: Compressing objects: 48% (5347/11138)
+2022-11-22T05:54:13.5667572Z remote: Compressing objects: 49% (5458/11138)
+2022-11-22T05:54:13.5885095Z remote: Compressing objects: 50% (5569/11138)
+2022-11-22T05:54:13.6141160Z remote: Compressing objects: 51% (5681/11138)
+2022-11-22T05:54:13.6409490Z remote: Compressing objects: 52% (5792/11138)
+2022-11-22T05:54:13.6653623Z remote: Compressing objects: 53% (5904/11138)
+2022-11-22T05:54:13.6948366Z remote: Compressing objects: 54% (6015/11138)
+2022-11-22T05:54:13.7220019Z remote: Compressing objects: 55% (6126/11138)
+2022-11-22T05:54:13.7483195Z remote: Compressing objects: 56% (6238/11138)
+2022-11-22T05:54:13.7731314Z remote: Compressing objects: 57% (6349/11138)
+2022-11-22T05:54:13.8003867Z remote: Compressing objects: 58% (6461/11138)
+2022-11-22T05:54:13.8256482Z remote: Compressing objects: 59% (6572/11138)
+2022-11-22T05:54:13.8642960Z remote: Compressing objects: 60% (6683/11138)
+2022-11-22T05:54:13.8869630Z remote: Compressing objects: 61% (6795/11138)
+2022-11-22T05:54:13.9178442Z remote: Compressing objects: 62% (6906/11138)
+2022-11-22T05:54:13.9401919Z remote: Compressing objects: 63% (7017/11138)
+2022-11-22T05:54:13.9693523Z remote: Compressing objects: 64% (7129/11138)
+2022-11-22T05:54:13.9916641Z remote: Compressing objects: 65% (7240/11138)
+2022-11-22T05:54:14.0243553Z remote: Compressing objects: 66% (7352/11138)
+2022-11-22T05:54:14.0431165Z remote: Compressing objects: 67% (7463/11138)
+2022-11-22T05:54:14.0432887Z remote: Compressing objects: 68% (7574/11138)
+2022-11-22T05:54:14.0475569Z remote: Compressing objects: 69% (7686/11138)
+2022-11-22T05:54:14.0480770Z remote: Compressing objects: 70% (7797/11138)
+2022-11-22T05:54:14.0481393Z remote: Compressing objects: 71% (7908/11138)
+2022-11-22T05:54:14.0481820Z remote: Compressing objects: 72% (8020/11138)
+2022-11-22T05:54:14.0482177Z remote: Compressing objects: 73% (8131/11138)
+2022-11-22T05:54:14.0482859Z remote: Compressing objects: 74% (8243/11138)
+2022-11-22T05:54:14.0488239Z remote: Compressing objects: 75% (8354/11138)
+2022-11-22T05:54:14.0488623Z remote: Compressing objects: 76% (8465/11138)
+2022-11-22T05:54:14.0522233Z remote: Compressing objects: 77% (8577/11138)
+2022-11-22T05:54:14.0522712Z remote: Compressing objects: 78% (8688/11138)
+2022-11-22T05:54:14.0523143Z remote: Compressing objects: 79% (8800/11138)
+2022-11-22T05:54:14.0553594Z remote: Compressing objects: 80% (8911/11138)
+2022-11-22T05:54:14.0592171Z remote: Compressing objects: 81% (9022/11138)
+2022-11-22T05:54:14.0592578Z remote: Compressing objects: 82% (9134/11138)
+2022-11-22T05:54:14.0689423Z remote: Compressing objects: 83% (9245/11138)
+2022-11-22T05:54:14.0774112Z remote: Compressing objects: 84% (9356/11138)
+2022-11-22T05:54:14.0774568Z remote: Compressing objects: 85% (9468/11138)
+2022-11-22T05:54:14.0775008Z remote: Compressing objects: 86% (9579/11138)
+2022-11-22T05:54:14.0775359Z remote: Compressing objects: 87% (9691/11138)
+2022-11-22T05:54:14.0775775Z remote: Compressing objects: 88% (9802/11138)
+2022-11-22T05:54:14.0776226Z remote: Compressing objects: 89% (9913/11138)
+2022-11-22T05:54:14.0778641Z remote: Compressing objects: 90% (10025/11138)
+2022-11-22T05:54:14.0956337Z remote: Compressing objects: 91% (10136/11138)
+2022-11-22T05:54:14.0978087Z remote: Compressing objects: 92% (10247/11138)
+2022-11-22T05:54:14.0990638Z remote: Compressing objects: 93% (10359/11138)
+2022-11-22T05:54:14.1012960Z remote: Compressing objects: 94% (10470/11138)
+2022-11-22T05:54:14.1037619Z remote: Compressing objects: 95% (10582/11138)
+2022-11-22T05:54:14.1050702Z remote: Compressing objects: 96% (10693/11138)
+2022-11-22T05:54:14.1063360Z remote: Compressing objects: 97% (10804/11138)
+2022-11-22T05:54:14.1081312Z remote: Compressing objects: 98% (10916/11138)
+2022-11-22T05:54:14.1113135Z remote: Compressing objects: 99% (11027/11138)
+2022-11-22T05:54:14.1113531Z remote: Compressing objects: 100% (11138/11138)
+2022-11-22T05:54:14.1113923Z remote: Compressing objects: 100% (11138/11138), done.
+2022-11-22T05:54:14.1437731Z Receiving objects: 0% (1/12670)
+2022-11-22T05:54:14.7969071Z Receiving objects: 1% (127/12670)
+2022-11-22T05:54:14.8098924Z Receiving objects: 2% (254/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:14.9436264Z Receiving objects: 3% (381/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:14.9491670Z Receiving objects: 4% (507/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:14.9541674Z Receiving objects: 5% (634/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:14.9697968Z Receiving objects: 6% (761/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:14.9906135Z Receiving objects: 7% (887/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0124892Z Receiving objects: 8% (1014/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0247894Z Receiving objects: 9% (1141/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0464602Z Receiving objects: 10% (1267/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0642253Z Receiving objects: 11% (1394/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0749336Z Receiving objects: 12% (1521/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0761823Z Receiving objects: 13% (1648/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.0886767Z Receiving objects: 14% (1774/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.1085477Z Receiving objects: 15% (1901/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.1165503Z Receiving objects: 16% (2028/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.1466407Z Receiving objects: 16% (2071/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.1775614Z Receiving objects: 17% (2154/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.2046679Z Receiving objects: 18% (2281/12670), 1.64 MiB | 2.91 MiB/s
+2022-11-22T05:54:15.2350074Z Receiving objects: 19% (2408/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.2648667Z Receiving objects: 20% (2534/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.2950136Z Receiving objects: 21% (2661/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.3229118Z Receiving objects: 22% (2788/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.3508301Z Receiving objects: 23% (2915/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.3736900Z Receiving objects: 24% (3041/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.3928328Z Receiving objects: 25% (3168/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.4102878Z Receiving objects: 26% (3295/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.4387561Z Receiving objects: 27% (3421/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.4581868Z Receiving objects: 28% (3548/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.4720691Z Receiving objects: 29% (3675/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.4949914Z Receiving objects: 30% (3801/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.5088093Z Receiving objects: 31% (3928/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.5251105Z Receiving objects: 32% (4055/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.5419154Z Receiving objects: 33% (4182/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.5562173Z Receiving objects: 34% (4308/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.5822789Z Receiving objects: 35% (4435/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.6098583Z Receiving objects: 36% (4562/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.6486705Z Receiving objects: 37% (4688/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.6836221Z Receiving objects: 38% (4815/12670), 5.54 MiB | 5.20 MiB/s
+2022-11-22T05:54:15.7184372Z Receiving objects: 39% (4942/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.7304334Z Receiving objects: 40% (5068/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.7558967Z Receiving objects: 41% (5195/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.7948469Z Receiving objects: 42% (5322/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.8261068Z Receiving objects: 43% (5449/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.8392502Z Receiving objects: 44% (5575/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.8543246Z Receiving objects: 45% (5702/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.8682415Z Receiving objects: 46% (5829/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.8784329Z Receiving objects: 47% (5955/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.8925819Z Receiving objects: 48% (6082/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.9001936Z Receiving objects: 49% (6209/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:15.9514165Z Receiving objects: 50% (6335/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:16.0360562Z Receiving objects: 51% (6462/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:16.1833774Z Receiving objects: 52% (6589/12670), 10.06 MiB | 6.41 MiB/s
+2022-11-22T05:54:16.6045841Z Receiving objects: 52% (6598/12670), 17.71 MiB | 8.56 MiB/s
+2022-11-22T05:54:16.8791679Z Receiving objects: 53% (6716/12670), 17.71 MiB | 8.56 MiB/s
+2022-11-22T05:54:16.9124702Z Receiving objects: 54% (6842/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.0161642Z Receiving objects: 55% (6969/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.0595048Z Receiving objects: 56% (7096/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.0975600Z Receiving objects: 57% (7222/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.1141406Z Receiving objects: 58% (7349/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.1405634Z Receiving objects: 58% (7401/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.1720210Z Receiving objects: 59% (7476/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.2015621Z Receiving objects: 60% (7602/12670), 31.08 MiB | 12.10 MiB/s
+2022-11-22T05:54:17.2421975Z Receiving objects: 61% (7729/12670), 49.89 MiB | 16.26 MiB/s
+2022-11-22T05:54:17.2500420Z Receiving objects: 62% (7856/12670), 49.89 MiB | 16.26 MiB/s
+2022-11-22T05:54:17.5988832Z Receiving objects: 63% (7983/12670), 49.89 MiB | 16.26 MiB/s
+2022-11-22T05:54:17.9560268Z Receiving objects: 64% (8109/12670), 49.89 MiB | 16.26 MiB/s
+2022-11-22T05:54:18.0169362Z Receiving objects: 65% (8236/12670), 74.38 MiB | 20.85 MiB/s
+2022-11-22T05:54:18.0610635Z Receiving objects: 66% (8363/12670), 74.38 MiB | 20.85 MiB/s
+2022-11-22T05:54:18.1142278Z Receiving objects: 67% (8489/12670), 74.38 MiB | 20.85 MiB/s
+2022-11-22T05:54:18.1185495Z Receiving objects: 67% (8604/12670), 74.38 MiB | 20.85 MiB/s
+2022-11-22T05:54:18.1538486Z Receiving objects: 68% (8616/12670), 74.38 MiB | 20.85 MiB/s
+2022-11-22T05:54:18.2062287Z Receiving objects: 69% (8743/12670), 74.38 MiB | 20.85 MiB/s
+2022-11-22T05:54:18.2545599Z Receiving objects: 70% (8869/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.3571596Z Receiving objects: 71% (8996/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.3758401Z Receiving objects: 72% (9123/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.3859281Z Receiving objects: 73% (9250/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.3976873Z Receiving objects: 74% (9376/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.4120242Z Receiving objects: 75% (9503/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.4306434Z Receiving objects: 76% (9630/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.5319302Z Receiving objects: 77% (9756/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.5320722Z Receiving objects: 78% (9883/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.5526871Z Receiving objects: 79% (10010/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.5891167Z Receiving objects: 80% (10136/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.5967265Z Receiving objects: 81% (10263/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6052595Z Receiving objects: 82% (10390/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6120029Z Receiving objects: 83% (10517/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6174493Z Receiving objects: 84% (10643/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6234676Z Receiving objects: 85% (10770/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6299547Z Receiving objects: 86% (10897/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6365696Z Receiving objects: 87% (11023/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.6532983Z Receiving objects: 88% (11150/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.7047669Z Receiving objects: 89% (11277/12670), 104.45 MiB | 25.68 MiB/s
+2022-11-22T05:54:18.7436095Z Receiving objects: 90% (11403/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7478331Z Receiving objects: 91% (11530/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7516826Z Receiving objects: 92% (11657/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7572212Z Receiving objects: 93% (11784/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7627489Z Receiving objects: 94% (11910/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7680868Z Receiving objects: 95% (12037/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7719714Z Receiving objects: 96% (12164/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7750985Z Receiving objects: 97% (12290/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7895759Z Receiving objects: 98% (12417/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7934049Z Receiving objects: 99% (12544/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7934871Z remote: Total 12670 (delta 1563), reused 7049 (delta 1400), pack-reused 0
+2022-11-22T05:54:18.7957233Z Receiving objects: 100% (12670/12670), 135.69 MiB | 29.71 MiB/s
+2022-11-22T05:54:18.7957672Z Receiving objects: 100% (12670/12670), 139.64 MiB | 29.83 MiB/s, done.
+2022-11-22T05:54:18.7991376Z Resolving deltas: 0% (0/1563)
+2022-11-22T05:54:18.8007713Z Resolving deltas: 1% (16/1563)
+2022-11-22T05:54:18.8018232Z Resolving deltas: 2% (32/1563)
+2022-11-22T05:54:18.8025488Z Resolving deltas: 3% (47/1563)
+2022-11-22T05:54:18.8083114Z Resolving deltas: 4% (63/1563)
+2022-11-22T05:54:18.8129512Z Resolving deltas: 5% (79/1563)
+2022-11-22T05:54:18.8137107Z Resolving deltas: 6% (94/1563)
+2022-11-22T05:54:18.8145420Z Resolving deltas: 7% (110/1563)
+2022-11-22T05:54:18.8197932Z Resolving deltas: 8% (126/1563)
+2022-11-22T05:54:18.8224181Z Resolving deltas: 9% (141/1563)
+2022-11-22T05:54:18.8237686Z Resolving deltas: 10% (157/1563)
+2022-11-22T05:54:18.8264690Z Resolving deltas: 11% (172/1563)
+2022-11-22T05:54:18.8270115Z Resolving deltas: 12% (188/1563)
+2022-11-22T05:54:18.8278891Z Resolving deltas: 13% (204/1563)
+2022-11-22T05:54:18.8282387Z Resolving deltas: 14% (219/1563)
+2022-11-22T05:54:18.8286062Z Resolving deltas: 15% (235/1563)
+2022-11-22T05:54:18.8289540Z Resolving deltas: 16% (251/1563)
+2022-11-22T05:54:18.8293460Z Resolving deltas: 17% (266/1563)
+2022-11-22T05:54:18.8296655Z Resolving deltas: 18% (282/1563)
+2022-11-22T05:54:18.8300378Z Resolving deltas: 19% (297/1563)
+2022-11-22T05:54:18.8303678Z Resolving deltas: 20% (313/1563)
+2022-11-22T05:54:18.8306940Z Resolving deltas: 21% (329/1563)
+2022-11-22T05:54:18.8321902Z Resolving deltas: 22% (344/1563)
+2022-11-22T05:54:18.8337564Z Resolving deltas: 23% (360/1563)
+2022-11-22T05:54:18.8351461Z Resolving deltas: 24% (376/1563)
+2022-11-22T05:54:18.8376364Z Resolving deltas: 25% (391/1563)
+2022-11-22T05:54:18.8447413Z Resolving deltas: 26% (407/1563)
+2022-11-22T05:54:18.8455814Z Resolving deltas: 27% (423/1563)
+2022-11-22T05:54:18.8519899Z Resolving deltas: 28% (438/1563)
+2022-11-22T05:54:18.8528664Z Resolving deltas: 29% (454/1563)
+2022-11-22T05:54:18.8546501Z Resolving deltas: 30% (469/1563)
+2022-11-22T05:54:18.8556266Z Resolving deltas: 31% (485/1563)
+2022-11-22T05:54:18.8583895Z Resolving deltas: 32% (501/1563)
+2022-11-22T05:54:18.8597665Z Resolving deltas: 33% (516/1563)
+2022-11-22T05:54:18.8667049Z Resolving deltas: 34% (532/1563)
+2022-11-22T05:54:18.8690494Z Resolving deltas: 35% (548/1563)
+2022-11-22T05:54:18.8719328Z Resolving deltas: 36% (563/1563)
+2022-11-22T05:54:18.8733653Z Resolving deltas: 37% (579/1563)
+2022-11-22T05:54:18.8737567Z Resolving deltas: 38% (594/1563)
+2022-11-22T05:54:18.8741272Z Resolving deltas: 39% (610/1563)
+2022-11-22T05:54:18.8745180Z Resolving deltas: 40% (626/1563)
+2022-11-22T05:54:18.8749043Z Resolving deltas: 41% (641/1563)
+2022-11-22T05:54:18.8752838Z Resolving deltas: 42% (657/1563)
+2022-11-22T05:54:18.8756750Z Resolving deltas: 43% (673/1563)
+2022-11-22T05:54:18.8760570Z Resolving deltas: 44% (688/1563)
+2022-11-22T05:54:18.8764977Z Resolving deltas: 45% (704/1563)
+2022-11-22T05:54:18.8768748Z Resolving deltas: 46% (719/1563)
+2022-11-22T05:54:18.8774098Z Resolving deltas: 47% (735/1563)
+2022-11-22T05:54:18.8775178Z Resolving deltas: 48% (751/1563)
+2022-11-22T05:54:18.8775461Z Resolving deltas: 49% (766/1563)
+2022-11-22T05:54:18.8778107Z Resolving deltas: 50% (782/1563)
+2022-11-22T05:54:18.8783837Z Resolving deltas: 51% (798/1563)
+2022-11-22T05:54:18.8788309Z Resolving deltas: 52% (813/1563)
+2022-11-22T05:54:18.8793942Z Resolving deltas: 53% (829/1563)
+2022-11-22T05:54:18.8800371Z Resolving deltas: 54% (845/1563)
+2022-11-22T05:54:18.8804490Z Resolving deltas: 55% (860/1563)
+2022-11-22T05:54:18.8807918Z Resolving deltas: 56% (876/1563)
+2022-11-22T05:54:18.8811794Z Resolving deltas: 57% (891/1563)
+2022-11-22T05:54:18.8816897Z Resolving deltas: 58% (907/1563)
+2022-11-22T05:54:18.8820531Z Resolving deltas: 59% (923/1563)
+2022-11-22T05:54:18.8826617Z Resolving deltas: 60% (938/1563)
+2022-11-22T05:54:18.8830227Z Resolving deltas: 61% (954/1563)
+2022-11-22T05:54:18.8833639Z Resolving deltas: 62% (970/1563)
+2022-11-22T05:54:18.8837198Z Resolving deltas: 63% (985/1563)
+2022-11-22T05:54:18.8841013Z Resolving deltas: 64% (1001/1563)
+2022-11-22T05:54:18.8847335Z Resolving deltas: 65% (1016/1563)
+2022-11-22T05:54:18.8852046Z Resolving deltas: 66% (1032/1563)
+2022-11-22T05:54:18.8856289Z Resolving deltas: 67% (1048/1563)
+2022-11-22T05:54:18.8861881Z Resolving deltas: 68% (1063/1563)
+2022-11-22T05:54:18.8865510Z Resolving deltas: 69% (1079/1563)
+2022-11-22T05:54:18.8870298Z Resolving deltas: 70% (1095/1563)
+2022-11-22T05:54:18.8873958Z Resolving deltas: 71% (1110/1563)
+2022-11-22T05:54:18.8879331Z Resolving deltas: 72% (1126/1563)
+2022-11-22T05:54:18.8884282Z Resolving deltas: 73% (1141/1563)
+2022-11-22T05:54:18.8887555Z Resolving deltas: 74% (1157/1563)
+2022-11-22T05:54:18.8893031Z Resolving deltas: 75% (1173/1563)
+2022-11-22T05:54:18.8897133Z Resolving deltas: 76% (1188/1563)
+2022-11-22T05:54:18.8902745Z Resolving deltas: 77% (1204/1563)
+2022-11-22T05:54:18.8907760Z Resolving deltas: 78% (1220/1563)
+2022-11-22T05:54:18.8915339Z Resolving deltas: 79% (1235/1563)
+2022-11-22T05:54:18.8919747Z Resolving deltas: 80% (1251/1563)
+2022-11-22T05:54:18.8925282Z Resolving deltas: 81% (1267/1563)
+2022-11-22T05:54:18.8930887Z Resolving deltas: 82% (1282/1563)
+2022-11-22T05:54:18.8939494Z Resolving deltas: 83% (1298/1563)
+2022-11-22T05:54:18.8943800Z Resolving deltas: 84% (1313/1563)
+2022-11-22T05:54:18.8952847Z Resolving deltas: 85% (1329/1563)
+2022-11-22T05:54:18.8957233Z Resolving deltas: 86% (1345/1563)
+2022-11-22T05:54:18.8964897Z Resolving deltas: 87% (1360/1563)
+2022-11-22T05:54:18.8974626Z Resolving deltas: 88% (1376/1563)
+2022-11-22T05:54:18.8981120Z Resolving deltas: 89% (1392/1563)
+2022-11-22T05:54:18.8991169Z Resolving deltas: 90% (1407/1563)
+2022-11-22T05:54:18.9004223Z Resolving deltas: 91% (1423/1563)
+2022-11-22T05:54:18.9017738Z Resolving deltas: 92% (1438/1563)
+2022-11-22T05:54:18.9022799Z Resolving deltas: 93% (1454/1563)
+2022-11-22T05:54:18.9029380Z Resolving deltas: 94% (1470/1563)
+2022-11-22T05:54:18.9033633Z Resolving deltas: 95% (1485/1563)
+2022-11-22T05:54:18.9044646Z Resolving deltas: 96% (1501/1563)
+2022-11-22T05:54:18.9053816Z Resolving deltas: 97% (1517/1563)
+2022-11-22T05:54:18.9057259Z Resolving deltas: 98% (1532/1563)
+2022-11-22T05:54:18.9061864Z Resolving deltas: 99% (1548/1563)
+2022-11-22T05:54:18.9069074Z Resolving deltas: 100% (1563/1563)
+2022-11-22T05:54:18.9069513Z Resolving deltas: 100% (1563/1563), done.
+2022-11-22T05:54:19.3818094Z From https://github.com/tgstation/tgstation
+2022-11-22T05:54:19.3819106Z * [new ref] 806eced1b6aa2166e665748be44c5c519833b2e2 -> pull/71181/merge
+2022-11-22T05:54:19.3843465Z ##[endgroup]
+2022-11-22T05:54:19.3844157Z ##[group]Determining the checkout info
+2022-11-22T05:54:19.3845757Z ##[endgroup]
+2022-11-22T05:54:19.3854920Z ##[group]Checking out the ref
+2022-11-22T05:54:19.3855731Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/71181/merge
+2022-11-22T05:54:20.4063926Z Updating files: 68% (8032/11696)
+2022-11-22T05:54:20.4275321Z Updating files: 69% (8071/11696)
+2022-11-22T05:54:20.4667553Z Updating files: 70% (8188/11696)
+2022-11-22T05:54:20.4748863Z Updating files: 71% (8305/11696)
+2022-11-22T05:54:20.4839310Z Updating files: 72% (8422/11696)
+2022-11-22T05:54:20.4912300Z Updating files: 73% (8539/11696)
+2022-11-22T05:54:20.4973377Z Updating files: 74% (8656/11696)
+2022-11-22T05:54:20.5018309Z Updating files: 75% (8772/11696)
+2022-11-22T05:54:20.5413696Z Updating files: 76% (8889/11696)
+2022-11-22T05:54:20.5531187Z Updating files: 77% (9006/11696)
+2022-11-22T05:54:20.5555866Z Updating files: 78% (9123/11696)
+2022-11-22T05:54:20.5753360Z Updating files: 79% (9240/11696)
+2022-11-22T05:54:20.5835545Z Updating files: 80% (9357/11696)
+2022-11-22T05:54:20.5898136Z Updating files: 81% (9474/11696)
+2022-11-22T05:54:20.5952825Z Updating files: 82% (9591/11696)
+2022-11-22T05:54:20.5998934Z Updating files: 83% (9708/11696)
+2022-11-22T05:54:20.6049707Z Updating files: 84% (9825/11696)
+2022-11-22T05:54:20.6100460Z Updating files: 85% (9942/11696)
+2022-11-22T05:54:20.6152185Z Updating files: 86% (10059/11696)
+2022-11-22T05:54:20.6202834Z Updating files: 87% (10176/11696)
+2022-11-22T05:54:20.6283782Z Updating files: 88% (10293/11696)
+2022-11-22T05:54:20.6506593Z Updating files: 89% (10410/11696)
+2022-11-22T05:54:20.6736171Z Updating files: 90% (10527/11696)
+2022-11-22T05:54:20.6788889Z Updating files: 91% (10644/11696)
+2022-11-22T05:54:20.6838906Z Updating files: 92% (10761/11696)
+2022-11-22T05:54:20.6898626Z Updating files: 93% (10878/11696)
+2022-11-22T05:54:20.6956323Z Updating files: 94% (10995/11696)
+2022-11-22T05:54:20.7015640Z Updating files: 95% (11112/11696)
+2022-11-22T05:54:20.7064247Z Updating files: 96% (11229/11696)
+2022-11-22T05:54:20.7113161Z Updating files: 97% (11346/11696)
+2022-11-22T05:54:20.7209831Z Updating files: 98% (11463/11696)
+2022-11-22T05:54:20.7272887Z Updating files: 99% (11580/11696)
+2022-11-22T05:54:20.7273303Z Updating files: 100% (11696/11696)
+2022-11-22T05:54:20.7275554Z Updating files: 100% (11696/11696), done.
+2022-11-22T05:54:20.7421345Z Note: switching to 'refs/remotes/pull/71181/merge'.
+2022-11-22T05:54:20.7421551Z
+2022-11-22T05:54:20.7421839Z You are in 'detached HEAD' state. You can look around, make experimental
+2022-11-22T05:54:20.7422215Z changes and commit them, and you can discard any commits you make in this
+2022-11-22T05:54:20.7422574Z state without impacting any branches by switching back to a branch.
+2022-11-22T05:54:20.7422770Z
+2022-11-22T05:54:20.7422934Z If you want to create a new branch to retain commits you create, you may
+2022-11-22T05:54:20.7423364Z do so (now or later) by using -c with the switch command. Example:
+2022-11-22T05:54:20.7423551Z
+2022-11-22T05:54:20.7423727Z git switch -c
+2022-11-22T05:54:20.7423871Z
+2022-11-22T05:54:20.7423975Z Or undo this operation with:
+2022-11-22T05:54:20.7424120Z
+2022-11-22T05:54:20.7424204Z git switch -
+2022-11-22T05:54:20.7424328Z
+2022-11-22T05:54:20.7424684Z Turn off this advice by setting config variable advice.detachedHead to false
+2022-11-22T05:54:20.7424902Z
+2022-11-22T05:54:20.7425103Z HEAD is now at 806eced Merge 417e724a9b957bc5b5f40526ff328526f1efe7f3 into 08a748704bfd2d68598c4c036723717421983145
+2022-11-22T05:54:20.7465533Z ##[endgroup]
+2022-11-22T05:54:20.7511808Z [command]/usr/bin/git log -1 --format='%H'
+2022-11-22T05:54:20.7544816Z '806eced1b6aa2166e665748be44c5c519833b2e2'
+2022-11-22T05:54:20.7875252Z ##[group]Run actions/cache@v3
+2022-11-22T05:54:20.7875497Z with:
+2022-11-22T05:54:20.7875691Z path: ~/BYOND
+2022-11-22T05:54:20.7875891Z key: Linux-byond-
+2022-11-22T05:54:20.7876098Z ##[endgroup]
+2022-11-22T05:54:21.3195522Z Received 4090426 of 4090426 (100.0%), 24.5 MBs/sec
+2022-11-22T05:54:21.3196161Z Cache Size: ~4 MB (4090426 B)
+2022-11-22T05:54:21.3216111Z [command]/usr/bin/tar --use-compress-program unzstd -xf /home/runner/work/_temp/b2d9ae3f-43dc-4494-a10d-0913d9199ba9/cache.tzst -P -C /home/runner/work/tgstation/tgstation
+2022-11-22T05:54:21.3633267Z Cache restored successfully
+2022-11-22T05:54:21.3869456Z Cache restored from key: Linux-byond-
+2022-11-22T05:54:21.4011996Z ##[group]Run sudo systemctl start mysql
+2022-11-22T05:54:21.4012363Z [36;1msudo systemctl start mysql[0m
+2022-11-22T05:54:21.4012678Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci;'[0m
+2022-11-22T05:54:21.4013012Z [36;1mmysql -u root -proot tg_ci < SQL/tgstation_schema.sql[0m
+2022-11-22T05:54:21.4013358Z [36;1mmysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;'[0m
+2022-11-22T05:54:21.4013736Z [36;1mmysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql[0m
+2022-11-22T05:54:21.4068798Z shell: /usr/bin/bash -e {0}
+2022-11-22T05:54:21.4069059Z ##[endgroup]
+2022-11-22T05:54:26.1328031Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-22T05:54:26.1632489Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-22T05:54:26.7713121Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-22T05:54:26.7789364Z mysql: [Warning] Using a password on the command line interface can be insecure.
+2022-11-22T05:54:27.1574220Z ##[group]Run sudo dpkg --add-architecture i386
+2022-11-22T05:54:27.1574565Z [36;1msudo dpkg --add-architecture i386[0m
+2022-11-22T05:54:27.1574835Z [36;1msudo apt update || true[0m
+2022-11-22T05:54:27.1575275Z [36;1msudo apt install -o APT::Immediate-Configure=false libssl1.1:i386[0m
+2022-11-22T05:54:27.1575591Z [36;1mbash tools/ci/install_rust_g.sh[0m
+2022-11-22T05:54:27.1627061Z shell: /usr/bin/bash -e {0}
+2022-11-22T05:54:27.1627322Z ##[endgroup]
+2022-11-22T05:54:27.3375235Z
+2022-11-22T05:54:27.3375988Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+2022-11-22T05:54:27.3376493Z
+2022-11-22T05:54:27.4285840Z Hit:1 http://azure.archive.ubuntu.com/ubuntu focal InRelease
+2022-11-22T05:54:27.4289676Z Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
+2022-11-22T05:54:27.4297956Z Get:3 http://azure.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
+2022-11-22T05:54:27.4307795Z Get:4 http://azure.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
+2022-11-22T05:54:27.4622061Z Get:5 https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease [10.5 kB]
+2022-11-22T05:54:27.6682767Z Hit:6 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal InRelease
+2022-11-22T05:54:27.6820644Z Get:7 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2242 kB]
+2022-11-22T05:54:27.7080253Z Get:8 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 Packages [756 kB]
+2022-11-22T05:54:27.7153659Z Get:9 http://azure.archive.ubuntu.com/ubuntu focal-updates/main Translation-en [391 kB]
+2022-11-22T05:54:27.7199273Z Get:10 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [16.1 kB]
+2022-11-22T05:54:27.7222773Z Get:11 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted i386 Packages [27.8 kB]
+2022-11-22T05:54:27.7303676Z Get:12 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [1424 kB]
+2022-11-22T05:54:27.7515018Z Get:13 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted Translation-en [202 kB]
+2022-11-22T05:54:27.7544674Z Get:14 http://azure.archive.ubuntu.com/ubuntu focal-updates/restricted amd64 c-n-f Metadata [636 B]
+2022-11-22T05:54:27.7574161Z Get:15 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1003 kB]
+2022-11-22T05:54:27.7673252Z Get:16 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe i386 Packages [704 kB]
+2022-11-22T05:54:27.8208601Z Get:17 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [233 kB]
+2022-11-22T05:54:27.8216256Z Get:18 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [23.1 kB]
+2022-11-22T05:54:27.8232910Z Get:19 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [24.4 kB]
+2022-11-22T05:54:27.8249854Z Get:20 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse i386 Packages [8448 B]
+2022-11-22T05:54:27.8266458Z Get:21 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse Translation-en [7316 B]
+2022-11-22T05:54:27.8273359Z Get:22 http://azure.archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 c-n-f Metadata [592 B]
+2022-11-22T05:54:27.8430731Z Get:23 http://azure.archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [45.7 kB]
+2022-11-22T05:54:27.8448045Z Get:24 http://azure.archive.ubuntu.com/ubuntu focal-backports/main i386 Packages [36.1 kB]
+2022-11-22T05:54:27.8455777Z Get:25 http://azure.archive.ubuntu.com/ubuntu focal-backports/main amd64 c-n-f Metadata [1420 B]
+2022-11-22T05:54:27.8474467Z Get:26 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [24.0 kB]
+2022-11-22T05:54:27.8487869Z Get:27 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe i386 Packages [13.5 kB]
+2022-11-22T05:54:27.8504387Z Get:28 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe Translation-en [16.0 kB]
+2022-11-22T05:54:27.8546555Z Get:29 http://azure.archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [860 B]
+2022-11-22T05:54:27.9493534Z Get:30 http://azure.archive.ubuntu.com/ubuntu focal-security/main i386 Packages [523 kB]
+2022-11-22T05:54:27.9983671Z Get:31 http://azure.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [1860 kB]
+2022-11-22T05:54:28.0182794Z Get:32 http://azure.archive.ubuntu.com/ubuntu focal-security/main Translation-en [305 kB]
+2022-11-22T05:54:28.0222410Z Get:33 http://azure.archive.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [11.2 kB]
+2022-11-22T05:54:28.0233838Z Get:34 http://azure.archive.ubuntu.com/ubuntu focal-security/restricted i386 Packages [26.5 kB]
+2022-11-22T05:54:28.0249393Z Get:35 http://azure.archive.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1332 kB]
+2022-11-22T05:54:28.0380967Z Get:36 http://azure.archive.ubuntu.com/ubuntu focal-security/restricted Translation-en [188 kB]
+2022-11-22T05:54:28.0408349Z Get:37 http://azure.archive.ubuntu.com/ubuntu focal-security/restricted amd64 c-n-f Metadata [640 B]
+2022-11-22T05:54:28.0444696Z Get:38 http://azure.archive.ubuntu.com/ubuntu focal-security/universe i386 Packages [572 kB]
+2022-11-22T05:54:28.0502119Z Get:39 http://azure.archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [772 kB]
+2022-11-22T05:54:28.0585971Z Get:40 http://azure.archive.ubuntu.com/ubuntu focal-security/universe Translation-en [148 kB]
+2022-11-22T05:54:28.0636831Z Get:41 http://azure.archive.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [16.7 kB]
+2022-11-22T05:54:28.0654711Z Get:42 http://azure.archive.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [22.2 kB]
+2022-11-22T05:54:28.0669089Z Get:43 http://azure.archive.ubuntu.com/ubuntu focal-security/multiverse i386 Packages [7204 B]
+2022-11-22T05:54:28.0683649Z Get:44 http://azure.archive.ubuntu.com/ubuntu focal-security/multiverse Translation-en [5400 B]
+2022-11-22T05:54:28.1105332Z Get:45 http://azure.archive.ubuntu.com/ubuntu focal-security/multiverse amd64 c-n-f Metadata [516 B]
+2022-11-22T05:54:28.1142074Z Get:46 https://packages.microsoft.com/ubuntu/20.04/prod focal/main armhf Packages [29.1 kB]
+2022-11-22T05:54:28.1209782Z Get:47 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages [212 kB]
+2022-11-22T05:54:28.1419050Z Get:48 https://packages.microsoft.com/ubuntu/20.04/prod focal/main arm64 Packages [46.2 kB]
+2022-11-22T05:54:28.3678597Z Get:49 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 Packages [15.2 kB]
+2022-11-22T05:54:38.6427399Z Fetched 13.6 MB in 2s (5935 kB/s)
+2022-11-22T05:54:39.7808627Z Reading package lists...
+2022-11-22T05:54:40.0112436Z Building dependency tree...
+2022-11-22T05:54:40.0125566Z Reading state information...
+2022-11-22T05:54:40.1053352Z 85 packages can be upgraded. Run 'apt list --upgradable' to see them.
+2022-11-22T05:54:40.1155226Z
+2022-11-22T05:54:40.1156119Z WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+2022-11-22T05:54:40.1156379Z
+2022-11-22T05:54:40.1697963Z Reading package lists...
+2022-11-22T05:54:40.3785154Z Building dependency tree...
+2022-11-22T05:54:40.3851341Z Reading state information...
+2022-11-22T05:54:40.5578517Z The following additional packages will be installed:
+2022-11-22T05:54:40.5579769Z gcc-11-base:i386 libc6:i386 libcrypt1:i386 libgcc-s1 libgcc-s1:i386
+2022-11-22T05:54:40.5582977Z libidn2-0:i386 libunistring2:i386
+2022-11-22T05:54:40.5590112Z Suggested packages:
+2022-11-22T05:54:40.5590688Z glibc-doc:i386 locales:i386
+2022-11-22T05:54:40.6255739Z The following NEW packages will be installed:
+2022-11-22T05:54:40.6261367Z gcc-11-base:i386 libc6:i386 libcrypt1:i386 libgcc-s1:i386 libidn2-0:i386
+2022-11-22T05:54:40.6266998Z libssl1.1:i386 libunistring2:i386
+2022-11-22T05:54:40.6273154Z The following packages will be upgraded:
+2022-11-22T05:54:40.6279277Z libgcc-s1
+2022-11-22T05:54:40.6671578Z 1 upgraded, 7 newly installed, 0 to remove and 84 not upgraded.
+2022-11-22T05:54:40.7568259Z Need to get 4528 kB of archives.
+2022-11-22T05:54:40.7569656Z After this operation, 19.3 MB of additional disk space will be used.
+2022-11-22T05:54:40.7571172Z Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libcrypt1 i386 1:4.4.10-10ubuntu4 [90.9 kB]
+2022-11-22T05:54:40.8228146Z Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 libc6 i386 2.31-0ubuntu9.9 [2580 kB]
+2022-11-22T05:54:40.8872245Z Get:3 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 gcc-11-base i386 11.1.0-1ubuntu1~20.04 [19.0 kB]
+2022-11-22T05:54:40.9288307Z Get:4 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libunistring2 i386 0.9.10-2 [377 kB]
+2022-11-22T05:54:40.9540992Z Get:5 http://azure.archive.ubuntu.com/ubuntu focal/main i386 libidn2-0 i386 2.2.0-2 [51.4 kB]
+2022-11-22T05:54:40.9732163Z Get:6 http://azure.archive.ubuntu.com/ubuntu focal-updates/main i386 libssl1.1 i386 1.1.1f-1ubuntu2.16 [1318 kB]
+2022-11-22T05:54:41.1393577Z Get:7 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main amd64 libgcc-s1 amd64 11.1.0-1ubuntu1~20.04 [42.1 kB]
+2022-11-22T05:54:41.3919926Z Get:8 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main i386 libgcc-s1 i386 11.1.0-1ubuntu1~20.04 [50.0 kB]
+2022-11-22T05:54:41.9330770Z Preconfiguring packages ...
+2022-11-22T05:54:42.0223529Z Fetched 4528 kB in 1s (5289 kB/s)
+2022-11-22T05:54:42.0557174Z Selecting previously unselected package gcc-11-base:i386.
+2022-11-22T05:54:42.0854631Z (Reading database ...
+2022-11-22T05:54:42.0856650Z (Reading database ... 5%
+2022-11-22T05:54:42.0857135Z (Reading database ... 10%
+2022-11-22T05:54:42.0857616Z (Reading database ... 15%
+2022-11-22T05:54:42.0858054Z (Reading database ... 20%
+2022-11-22T05:54:42.0858479Z (Reading database ... 25%
+2022-11-22T05:54:42.0858956Z (Reading database ... 30%
+2022-11-22T05:54:42.0859370Z (Reading database ... 35%
+2022-11-22T05:54:42.0861988Z (Reading database ... 40%
+2022-11-22T05:54:42.0862367Z (Reading database ... 45%
+2022-11-22T05:54:42.0868447Z (Reading database ... 50%
+2022-11-22T05:54:42.1200369Z (Reading database ... 55%
+2022-11-22T05:54:42.1600440Z (Reading database ... 60%
+2022-11-22T05:54:42.2011877Z (Reading database ... 65%
+2022-11-22T05:54:42.2691087Z (Reading database ... 70%
+2022-11-22T05:54:42.3704401Z (Reading database ... 75%
+2022-11-22T05:54:42.4279826Z (Reading database ... 80%
+2022-11-22T05:54:42.5026921Z (Reading database ... 85%
+2022-11-22T05:54:42.6241054Z (Reading database ... 90%
+2022-11-22T05:54:42.6851914Z (Reading database ... 95%
+2022-11-22T05:54:42.6852580Z (Reading database ... 100%
+2022-11-22T05:54:42.6853325Z (Reading database ... 242126 files and directories currently installed.)
+2022-11-22T05:54:42.6940933Z Preparing to unpack .../0-gcc-11-base_11.1.0-1ubuntu1~20.04_i386.deb ...
+2022-11-22T05:54:42.7004541Z Unpacking gcc-11-base:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-22T05:54:42.8039338Z Preparing to unpack .../1-libgcc-s1_11.1.0-1ubuntu1~20.04_amd64.deb ...
+2022-11-22T05:54:42.8690745Z Unpacking libgcc-s1:amd64 (11.1.0-1ubuntu1~20.04) over (10.3.0-1ubuntu1~20.04) ...
+2022-11-22T05:54:42.9070629Z Selecting previously unselected package libgcc-s1:i386.
+2022-11-22T05:54:42.9298797Z Preparing to unpack .../2-libgcc-s1_11.1.0-1ubuntu1~20.04_i386.deb ...
+2022-11-22T05:54:42.9315714Z Unpacking libgcc-s1:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-22T05:54:42.9648689Z Selecting previously unselected package libcrypt1:i386.
+2022-11-22T05:54:42.9852885Z Preparing to unpack .../3-libcrypt1_1%3a4.4.10-10ubuntu4_i386.deb ...
+2022-11-22T05:54:42.9856149Z Unpacking libcrypt1:i386 (1:4.4.10-10ubuntu4) ...
+2022-11-22T05:54:43.0771392Z Selecting previously unselected package libc6:i386.
+2022-11-22T05:54:43.1007419Z Preparing to unpack .../4-libc6_2.31-0ubuntu9.9_i386.deb ...
+2022-11-22T05:54:43.2242069Z Unpacking libc6:i386 (2.31-0ubuntu9.9) ...
+2022-11-22T05:54:43.5298133Z Replacing files in old package libc6-i386 (2.31-0ubuntu9.9) ...
+2022-11-22T05:54:43.5688011Z Selecting previously unselected package libunistring2:i386.
+2022-11-22T05:54:43.5908746Z Preparing to unpack .../5-libunistring2_0.9.10-2_i386.deb ...
+2022-11-22T05:54:43.5926527Z Unpacking libunistring2:i386 (0.9.10-2) ...
+2022-11-22T05:54:43.7011902Z Selecting previously unselected package libidn2-0:i386.
+2022-11-22T05:54:43.7250698Z Preparing to unpack .../6-libidn2-0_2.2.0-2_i386.deb ...
+2022-11-22T05:54:43.7260936Z Unpacking libidn2-0:i386 (2.2.0-2) ...
+2022-11-22T05:54:43.8011769Z Selecting previously unselected package libssl1.1:i386.
+2022-11-22T05:54:43.8231978Z Preparing to unpack .../7-libssl1.1_1.1.1f-1ubuntu2.16_i386.deb ...
+2022-11-22T05:54:43.8249767Z Unpacking libssl1.1:i386 (1.1.1f-1ubuntu2.16) ...
+2022-11-22T05:54:43.9966260Z Setting up gcc-11-base:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-22T05:54:44.0023499Z Setting up libgcc-s1:amd64 (11.1.0-1ubuntu1~20.04) ...
+2022-11-22T05:54:44.0074843Z Setting up libgcc-s1:i386 (11.1.0-1ubuntu1~20.04) ...
+2022-11-22T05:54:44.0147311Z Setting up libcrypt1:i386 (1:4.4.10-10ubuntu4) ...
+2022-11-22T05:54:44.0207900Z Setting up libc6:i386 (2.31-0ubuntu9.9) ...
+2022-11-22T05:54:44.2245544Z Setting up libssl1.1:i386 (1.1.1f-1ubuntu2.16) ...
+2022-11-22T05:54:44.3413101Z Setting up libunistring2:i386 (0.9.10-2) ...
+2022-11-22T05:54:44.3480700Z Setting up libidn2-0:i386 (2.2.0-2) ...
+2022-11-22T05:54:44.3526066Z Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
+2022-11-22T05:54:47.9184710Z 2022-11-22 05:54:47 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/127494547/92c6bbfc-0d51-48ea-b586-9cd01c071d25?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221122%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221122T055447Z&X-Amz-Expires=300&X-Amz-Signature=a32f997c627b97bfd5d0adc58e9308d7ad18409d943ce16b7a351e9c3ed708ae&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=127494547&response-content-disposition=attachment%3B%20filename%3Dlibrust_g.so&response-content-type=application%2Foctet-stream [72809008/72809008] -> "/home/runner/.byond/bin/librust_g.so" [1]
+2022-11-22T05:54:47.9588206Z linux-gate.so.1 (0xf7f26000)
+2022-11-22T05:54:47.9589002Z libssl.so.1.1 => /lib/i386-linux-gnu/libssl.so.1.1 (0xf7758000)
+2022-11-22T05:54:47.9589713Z libcrypto.so.1.1 => /lib/i386-linux-gnu/libcrypto.so.1.1 (0xf74a0000)
+2022-11-22T05:54:47.9590427Z libz.so.1 => /lib32/libz.so.1 (0xf7482000)
+2022-11-22T05:54:47.9591034Z libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7463000)
+2022-11-22T05:54:47.9603888Z libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7440000)
+2022-11-22T05:54:47.9604548Z libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf733b000)
+2022-11-22T05:54:47.9605162Z libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7335000)
+2022-11-22T05:54:47.9607450Z libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7146000)
+2022-11-22T05:54:47.9608010Z /lib/ld-linux.so.2 (0xf7f28000)
+2022-11-22T05:54:47.9651599Z ##[group]Run bash tools/ci/install_auxlua.sh
+2022-11-22T05:54:47.9651916Z [36;1mbash tools/ci/install_auxlua.sh[0m
+2022-11-22T05:54:47.9705175Z shell: /usr/bin/bash -e {0}
+2022-11-22T05:54:47.9705424Z ##[endgroup]
+2022-11-22T05:54:48.2148819Z 2022-11-22 05:54:48 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/473295481/bb55dc2f-8248-4032-ad66-b80cb61a84f3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221122%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221122T055448Z&X-Amz-Expires=300&X-Amz-Signature=a48846f5bb1d413d7d97402cc3c1d0f7f80f6a04583d898bce2ff6a0bdfd469a&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=473295481&response-content-disposition=attachment%3B%20filename%3Dlibauxlua.so&response-content-type=application%2Foctet-stream [5781068/5781068] -> "/home/runner/.byond/bin/libauxlua.so" [1]
+2022-11-22T05:54:48.2431263Z linux-gate.so.1 (0xf7ee6000)
+2022-11-22T05:54:48.2431996Z libstdc++.so.6 => /lib32/libstdc++.so.6 (0xf7adf000)
+2022-11-22T05:54:48.2436279Z libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7ac0000)
+2022-11-22T05:54:48.2436997Z libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7a9d000)
+2022-11-22T05:54:48.2437658Z libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7998000)
+2022-11-22T05:54:48.2439621Z libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7992000)
+2022-11-22T05:54:48.2440822Z libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf77a3000)
+2022-11-22T05:54:48.2441586Z /lib/ld-linux.so.2 (0xf7ee8000)
+2022-11-22T05:54:48.2494794Z ##[group]Run bash tools/ci/install_byond.sh
+2022-11-22T05:54:48.2495106Z [36;1mbash tools/ci/install_byond.sh[0m
+2022-11-22T05:54:48.2495386Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2022-11-22T05:54:48.2495706Z [36;1mtools/build/build --ci dm -DCIBUILDING -DANSICOLORS[0m
+2022-11-22T05:54:48.2545744Z shell: /usr/bin/bash -e {0}
+2022-11-22T05:54:48.2545971Z ##[endgroup]
+2022-11-22T05:54:48.2653351Z Setting up BYOND.
+2022-11-22T05:54:48.2793431Z % Total % Received % Xferd Average Speed Time Time Time Current
+2022-11-22T05:54:48.2797236Z Dload Upload Total Spent Left Speed
+2022-11-22T05:54:48.2797554Z
+2022-11-22T05:54:48.3941092Z 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
+2022-11-22T05:54:48.3943148Z 100 4021k 100 4021k 0 0 34.1M 0 --:--:-- --:--:-- --:--:-- 34.1M
+2022-11-22T05:54:48.3983451Z Archive: byond.zip
+2022-11-22T05:54:48.3983864Z creating: byond/
+2022-11-22T05:54:48.3984237Z creating: byond/key/
+2022-11-22T05:54:48.3984563Z creating: byond/web/
+2022-11-22T05:54:48.3985833Z inflating: byond/web/child.dms
+2022-11-22T05:54:48.3986928Z inflating: byond/web/button.dms
+2022-11-22T05:54:48.3988496Z inflating: byond/web/input.dms
+2022-11-22T05:54:48.3989251Z inflating: byond/web/text.dms
+2022-11-22T05:54:48.4097340Z inflating: byond/web/webclient.dart.js
+2022-11-22T05:54:48.4098200Z inflating: byond/web/verbmenu.dms
+2022-11-22T05:54:48.4099001Z inflating: byond/web/defaultSkin.dms
+2022-11-22T05:54:48.4100540Z inflating: byond/web/hotbar.dms
+2022-11-22T05:54:48.4101414Z inflating: byond/web/label.dms
+2022-11-22T05:54:48.4102162Z inflating: byond/web/alert.dms
+2022-11-22T05:54:48.4102953Z inflating: byond/web/message.dms
+2022-11-22T05:54:48.4103516Z inflating: byond/web/drag.png
+2022-11-22T05:54:48.4104351Z inflating: byond/web/map.dms
+2022-11-22T05:54:48.4105580Z inflating: byond/web/splashlogo.png
+2022-11-22T05:54:48.4106166Z inflating: byond/web/drop.png
+2022-11-22T05:54:48.4211884Z inflating: byond/web/ext.js
+2022-11-22T05:54:48.4212354Z inflating: byond/web/file.dms
+2022-11-22T05:54:48.4213426Z inflating: byond/web/grid.dms
+2022-11-22T05:54:48.4214990Z inflating: byond/web/bar.dms
+2022-11-22T05:54:48.4218521Z inflating: byond/web/dpad.dms
+2022-11-22T05:54:48.4218793Z inflating: byond/web/output.dms
+2022-11-22T05:54:48.4220119Z inflating: byond/web/tab.dms
+2022-11-22T05:54:48.4221829Z inflating: byond/web/info.dms
+2022-11-22T05:54:48.4223462Z inflating: byond/web/color.dms
+2022-11-22T05:54:48.4224634Z inflating: byond/web/gamepad.dms
+2022-11-22T05:54:48.4226063Z inflating: byond/web/browser.dms
+2022-11-22T05:54:48.4226672Z inflating: byond/web/status.dms
+2022-11-22T05:54:48.4227640Z inflating: byond/web/any.dms
+2022-11-22T05:54:48.4228616Z inflating: byond/web/pane.dms
+2022-11-22T05:54:48.4230037Z inflating: byond/web/pop.dms
+2022-11-22T05:54:48.4231031Z inflating: byond/license.txt
+2022-11-22T05:54:48.4231783Z inflating: byond/legal.txt
+2022-11-22T05:54:48.4232778Z inflating: byond/Makefile
+2022-11-22T05:54:48.4233180Z creating: byond/man/
+2022-11-22T05:54:48.4233524Z creating: byond/man/man6/
+2022-11-22T05:54:48.4234935Z inflating: byond/man/man6/DreamDaemon.6
+2022-11-22T05:54:48.4235672Z inflating: byond/man/man6/DreamMaker.6
+2022-11-22T05:54:48.4235940Z creating: byond/lib/
+2022-11-22T05:54:48.4236255Z creating: byond/host/
+2022-11-22T05:54:48.4237956Z inflating: byond/host/readme.html
+2022-11-22T05:54:48.4238971Z inflating: byond/host/readme-unix.txt
+2022-11-22T05:54:48.4239365Z creating: byond/host/home/
+2022-11-22T05:54:48.4239866Z creating: byond/host/home/root/
+2022-11-22T05:54:48.4240241Z creating: byond/host/home/root/byond/
+2022-11-22T05:54:48.4240880Z creating: byond/host/home/root/byond/tools/
+2022-11-22T05:54:48.4241382Z creating: byond/host/home/root/byond/tools/root/
+2022-11-22T05:54:48.4247309Z inflating: byond/host/home/root/byond/tools/root/root.dmb
+2022-11-22T05:54:48.4247605Z creating: byond/host/shared/
+2022-11-22T05:54:48.4247857Z creating: byond/host/shared/byond/
+2022-11-22T05:54:48.4248438Z creating: byond/host/shared/byond/tools/
+2022-11-22T05:54:48.4248723Z creating: byond/host/shared/byond/tools/ftp/
+2022-11-22T05:54:48.4251228Z inflating: byond/host/shared/byond/tools/ftp/ftp.dmb
+2022-11-22T05:54:48.4251558Z creating: byond/host/shared/byond/tools/admin/
+2022-11-22T05:54:48.4257787Z inflating: byond/host/shared/byond/tools/admin/admin.dmb
+2022-11-22T05:54:48.4258223Z creating: byond/host/shared-web/
+2022-11-22T05:54:48.4258547Z creating: byond/host/shared-web/web/
+2022-11-22T05:54:48.4259004Z creating: byond/host/shared-web/web/tools/
+2022-11-22T05:54:48.4259439Z creating: byond/host/shared-web/web/tools/admin/
+2022-11-22T05:54:48.4265239Z inflating: byond/host/shared-web/web/tools/admin/index.dmb
+2022-11-22T05:54:48.4272736Z inflating: byond/host/host.dmb
+2022-11-22T05:54:48.4273011Z inflating: byond/host/host.start
+2022-11-22T05:54:48.4273659Z inflating: byond/host/hostconf.orig
+2022-11-22T05:54:48.4274617Z inflating: byond/host/hostconf.txt
+2022-11-22T05:54:48.4275402Z inflating: byond/readme.txt
+2022-11-22T05:54:48.4275717Z creating: byond/bin/
+2022-11-22T05:54:48.4276299Z inflating: byond/bin/byondexec
+2022-11-22T05:54:48.4278446Z inflating: byond/bin/DreamDownload
+2022-11-22T05:54:48.4922483Z inflating: byond/bin/libbyond.so
+2022-11-22T05:54:48.5068123Z inflating: byond/bin/libext.so
+2022-11-22T05:54:48.5070046Z inflating: byond/bin/DreamDaemon
+2022-11-22T05:54:48.5074232Z inflating: byond/bin/DreamMaker
+2022-11-22T05:54:48.5074521Z creating: byond/cfg/
+2022-11-22T05:54:48.5074946Z inflating: byond/cfg/release.txt
+2022-11-22T05:54:48.5230052Z ***************************
+2022-11-22T05:54:48.5237614Z Now run the following command:
+2022-11-22T05:54:48.5248736Z
+2022-11-22T05:54:48.5259947Z source /home/runner/BYOND/byond/bin/byondsetup
+2022-11-22T05:54:48.5270619Z
+2022-11-22T05:54:48.5278255Z If it generates errors, your shell is not compatible with 'sh', so you will
+2022-11-22T05:54:48.5285604Z have to edit byondsetup and make it work with your shell. If the script works, you should be able to run DreamDaemon.
+2022-11-22T05:54:48.5297083Z
+2022-11-22T05:54:48.5304283Z IMPORTANT: once you have the script working, you must add the above line
+2022-11-22T05:54:48.5311617Z to your startup script. The name of your startup script depends on the
+2022-11-22T05:54:48.5318799Z shell you use. Typical ones are .profile or .bash_profile.
+2022-11-22T05:54:48.5329607Z
+2022-11-22T05:54:48.5335539Z Once everything is working, you can find out more about the software
+2022-11-22T05:54:48.5340846Z by doing 'man DreamDaemon'. A host server has also been included
+2022-11-22T05:54:48.5345719Z so edit host/hostconf.txt and boot up your world server!
+2022-11-22T05:54:48.5350723Z ***************************
+2022-11-22T05:54:48.6078889Z Using system-wide Node v16.18.0
+2022-11-22T05:54:48.7660550Z :: Juke Build version 0.8.1
+2022-11-22T05:54:49.0224910Z => Starting 'dm'
+2022-11-22T05:54:49.0233013Z :: Using defines: CBT, CIBUILDING, ANSICOLORS
+2022-11-22T05:54:49.2134158Z DM compiler version 514.1588
+2022-11-22T05:54:49.2134485Z loading tgstation.m.dme
+2022-11-22T05:54:57.6255000Z loading interface/skin.dmf
+2022-11-22T05:55:47.8603172Z loading map_files/generic/CentCom.dmm
+2022-11-22T05:55:48.8009123Z saving tgstation.m.dmb (DEBUG mode)
+2022-11-22T05:55:49.8362884Z tgstation.m.dmb - 0 errors, 0 warnings (11/22/22 5:55 am)
+2022-11-22T05:55:49.8414352Z Total time: 1:00
+2022-11-22T05:55:50.7626726Z => Finished 'dm' in 61.74s
+2022-11-22T05:55:50.7630781Z => Done in 61.996s
+2022-11-22T05:55:50.7723825Z ##[group]Run source $HOME/BYOND/byond/bin/byondsetup
+2022-11-22T05:55:50.7724384Z [36;1msource $HOME/BYOND/byond/bin/byondsetup[0m
+2022-11-22T05:55:50.7725050Z [36;1mbash tools/ci/run_server.sh metastation[0m
+2022-11-22T05:55:50.7801355Z shell: /usr/bin/bash -e {0}
+2022-11-22T05:55:50.7801587Z ##[endgroup]
+2022-11-22T05:55:50.7892704Z Testing metastation
+2022-11-22T05:55:51.0035586Z cp: cannot stat 'tgui/packages/tgfont/dist/*': No such file or directory
+2022-11-22T05:55:51.0189960Z Tue Nov 22 05:55:51 2022
+2022-11-22T05:55:51.0190868Z World opened on network port 58409.
+2022-11-22T05:55:51.0191359Z Welcome BYOND! (5.0 Public Version 514.1588)
+2022-11-22T05:56:10.1077799Z 868 global variables
+2022-11-22T05:56:10.7927422Z World loaded at 05:56:10!
+2022-11-22T05:56:10.8379706Z Running /tg/ revision:
+2022-11-22T05:56:10.8380020Z No commit information
+2022-11-22T05:56:10.8454815Z Loading config file config.txt...
+2022-11-22T05:56:10.8458259Z Loading config file maps.txt...
+2022-11-22T05:56:10.8479868Z Unable to locate admins backup file.
+2022-11-22T05:56:11.8631460Z Initialized Title Screen subsystem within 0 seconds!
+2022-11-22T05:56:11.8631891Z Initialized Server Tasks subsystem within 0 seconds!
+2022-11-22T05:56:11.8632565Z Initialized Input subsystem within 0 seconds!
+2022-11-22T05:56:11.8690820Z Initialized Profiler subsystem within 0 seconds!
+2022-11-22T05:56:11.8691168Z Initialized Database subsystem within 0 seconds!
+2022-11-22T05:56:11.8691814Z Initialized Blackbox subsystem within 0 seconds!
+2022-11-22T05:56:11.8692797Z Initialized Sounds subsystem within 0 seconds!
+2022-11-22T05:56:11.8828615Z Initialized Instruments subsystem within 0.01 seconds!
+2022-11-22T05:56:12.2167428Z Initialized Greyscale subsystem within 0.33 seconds!
+2022-11-22T05:56:12.2167879Z Initialized Vis contents overlays subsystem within 0 seconds!
+2022-11-22T05:56:12.2168267Z Initialized Security Level subsystem within 0 seconds!
+2022-11-22T05:56:12.2189261Z Initialized Station subsystem within 0 seconds!
+2022-11-22T05:56:12.2202098Z Initialized Quirks subsystem within 0 seconds!
+2022-11-22T05:56:12.2320897Z Initialized Reagents subsystem within 0.01 seconds!
+2022-11-22T05:56:12.2325541Z Initialized Events subsystem within 0 seconds!
+2022-11-22T05:56:12.2377703Z Initialized IDs and Access subsystem within 0.01 seconds!
+2022-11-22T05:56:12.2378499Z Initialized Jobs subsystem within 0 seconds!
+2022-11-22T05:56:12.2379505Z Initialized AI movement subsystem within 0 seconds!
+2022-11-22T05:56:12.2399099Z Initialized Ticker subsystem within 0 seconds!
+2022-11-22T05:56:12.2401506Z Initialized AI Controller Ticker subsystem within 0 seconds!
+2022-11-22T05:56:12.2402756Z Initialized AI Behavior Ticker subsystem within 0 seconds!
+2022-11-22T05:56:12.2534901Z Initialized Trading Card Game subsystem within 0.01 seconds!
+2022-11-22T05:56:12.2695227Z Loading MetaStation...
+2022-11-22T05:56:13.6007721Z Loaded Station in 1.4s!
+2022-11-22T05:56:14.3263930Z Loaded Lavaland in 0.6s!
+2022-11-22T05:56:15.0849457Z Ruin loader finished with 0 left to spend.
+2022-11-22T05:56:15.1862835Z Ruin loader finished with 0 left to spend.
+2022-11-22T05:56:15.4246125Z Cave Generator finished in 0.3s!
+2022-11-22T05:56:15.4560459Z Cave Generator finished in 0s!
+2022-11-22T05:56:16.0885613Z Initialized Mapping subsystem within 3.83 seconds!
+2022-11-22T05:56:38.2726128Z Initialized Early Assets subsystem within 22.18 seconds!
+2022-11-22T05:56:38.3071167Z Initialized Research subsystem within 0.03 seconds!
+2022-11-22T05:56:38.3073379Z Initialized Time Tracking subsystem within 0 seconds!
+2022-11-22T05:56:38.3169516Z Initialized Networks subsystem within 0.01 seconds!
+2022-11-22T05:56:38.3386821Z Initialized Spatial Grid subsystem within 0.02 seconds!
+2022-11-22T05:56:38.3387426Z Initialized Economy subsystem within 0 seconds!
+2022-11-22T05:56:38.3396301Z Initialized Restaurant subsystem within 0 seconds!
+2022-11-22T05:56:40.9885406Z The BYOND hub reports that port 58409 is not reachable.
+2022-11-22T05:57:05.1172204Z ## NOTICE: morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!
+2022-11-22T05:57:06.7858739Z Initialized Atoms subsystem within 28.45 seconds!
+2022-11-22T05:57:06.7975404Z Initialized Language subsystem within 0.01 seconds!
+2022-11-22T05:57:06.8745273Z Initialized Machines subsystem within 0.08 seconds!
+2022-11-22T05:57:06.8746886Z Initialized Skills subsystem within 0 seconds!
+2022-11-22T05:57:06.8748827Z Initialized Addiction subsystem within 0 seconds!
+2022-11-22T05:57:06.8758560Z Initialized Blackmarket subsystem within 0 seconds!
+2022-11-22T05:57:06.8761410Z Initialized Disease subsystem within 0 seconds!
+2022-11-22T05:57:06.8761834Z Initialized Fluid subsystem within 0 seconds!
+2022-11-22T05:57:06.8762760Z Initialized Smoke subsystem within 0 seconds!
+2022-11-22T05:57:06.8763545Z Initialized Foam subsystem within 0 seconds!
+2022-11-22T05:57:06.8764349Z Initialized Lag Switch subsystem within 0 seconds!
+2022-11-22T05:57:06.8940474Z Initialized Library Loading subsystem within 0.02 seconds!
+2022-11-22T05:57:07.2408456Z Initialized Lua Scripting subsystem within 0.35 seconds!
+2022-11-22T05:57:07.2409327Z Initialized Night Shift subsystem within 0 seconds!
+2022-11-22T05:57:07.2410361Z Initialized Sun subsystem within 0 seconds!
+2022-11-22T05:57:07.2435844Z Initialized Traitor subsystem within 0 seconds!
+2022-11-22T05:57:07.2632292Z Initialized Wardrobe subsystem within 0.02 seconds!
+2022-11-22T05:57:07.2633023Z Initialized Weather subsystem within 0 seconds!
+2022-11-22T05:57:07.2633877Z Initialized Wiremod Composite Templates subsystem within 0 seconds!
+2022-11-22T05:57:10.9882289Z Initialized Atmospherics subsystem within 3.72 seconds!
+2022-11-22T05:57:10.9894873Z Initialized Persistence subsystem within 0 seconds!
+2022-11-22T05:57:10.9899148Z Initialized Persistent Paintings subsystem within 0 seconds!
+2022-11-22T05:57:10.9903351Z Initialized Vote subsystem within 0 seconds!
+2022-11-22T05:57:22.4988698Z Initialized Assets subsystem within 11.51 seconds!
+2022-11-22T05:57:24.3487800Z Initialized Icon Smoothing subsystem within 1.85 seconds!
+2022-11-22T05:57:24.3495654Z Initialized XKeyScore subsystem within 0 seconds!
+2022-11-22T05:57:24.3511340Z Initialized PRISM subsystem within 0 seconds!
+2022-11-22T05:57:29.2181327Z Initialized Lighting subsystem within 4.87 seconds!
+2022-11-22T05:57:31.3719906Z Initialized Shuttle subsystem within 2.15 seconds!
+2022-11-22T05:57:31.3720568Z Initialized Pathfinder subsystem within 0 seconds!
+2022-11-22T05:57:31.3728738Z Initialized Ban Cache subsystem within 0 seconds!
+2022-11-22T05:57:31.3729264Z Initialized Init Profiler subsystem within 0 seconds!
+2022-11-22T05:57:31.3729723Z Initialized Chat subsystem within 0 seconds!
+2022-11-22T05:57:31.3730281Z Initializations complete within 79.5 seconds!
+2022-11-22T05:57:31.3830937Z Game start took 0s
+2022-11-22T05:57:42.0634964Z ##[group]/datum/unit_test/log_mapping
+2022-11-22T05:57:42.0635672Z
+2022-11-22T05:57:42.0636846Z [1;32mPASS[0m /datum/unit_test/log_mapping 0s
+2022-11-22T05:57:42.0637417Z ##[endgroup]
+2022-11-22T05:57:42.1282731Z ##[group]/datum/unit_test/ablative_hood_hud
+2022-11-22T05:57:42.1532576Z
+2022-11-22T05:57:42.1533762Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud 0s
+2022-11-22T05:57:42.1534764Z ##[endgroup]
+2022-11-22T05:57:42.1781522Z ##[group]/datum/unit_test/ablative_hood_hud_with_helmet
+2022-11-22T05:57:42.2004168Z
+2022-11-22T05:57:42.2005116Z [1;32mPASS[0m /datum/unit_test/ablative_hood_hud_with_helmet 0.1s
+2022-11-22T05:57:42.2011130Z ##[endgroup]
+2022-11-22T05:57:42.2281431Z ##[group]/datum/unit_test/achievements
+2022-11-22T05:57:42.2391582Z
+2022-11-22T05:57:42.2392386Z [1;32mPASS[0m /datum/unit_test/achievements 0s
+2022-11-22T05:57:42.2393271Z ##[endgroup]
+2022-11-22T05:57:42.2781664Z ##[group]/datum/unit_test/anchored_mobs
+2022-11-22T05:57:42.2783035Z
+2022-11-22T05:57:42.2783769Z [1;32mPASS[0m /datum/unit_test/anchored_mobs 0s
+2022-11-22T05:57:42.2784572Z ##[endgroup]
+2022-11-22T05:57:42.2936672Z ##[group]/datum/unit_test/anonymous_themes
+2022-11-22T05:57:42.4235721Z
+2022-11-22T05:57:42.4237433Z [1;32mPASS[0m /datum/unit_test/anonymous_themes 0.2s
+2022-11-22T05:57:42.4238500Z ##[endgroup]
+2022-11-22T05:57:42.6392895Z ##[group]/datum/unit_test/autowiki
+2022-11-22T05:57:43.8278371Z
+2022-11-22T05:57:43.8280173Z [1;32mPASS[0m /datum/unit_test/autowiki 1.2s
+2022-11-22T05:57:43.8281239Z ##[endgroup]
+2022-11-22T05:57:44.9926595Z ##[group]/datum/unit_test/autowiki_include_template
+2022-11-22T05:57:44.9929132Z
+2022-11-22T05:57:44.9931384Z [1;32mPASS[0m /datum/unit_test/autowiki_include_template 0s
+2022-11-22T05:57:44.9933262Z ##[endgroup]
+2022-11-22T05:57:45.0087357Z ##[group]/datum/unit_test/barsigns_icon
+2022-11-22T05:57:45.0294182Z
+2022-11-22T05:57:45.0295837Z [1;32mPASS[0m /datum/unit_test/barsigns_icon 0s
+2022-11-22T05:57:45.0298739Z ##[endgroup]
+2022-11-22T05:57:45.0940696Z ##[group]/datum/unit_test/barsigns_name
+2022-11-22T05:57:45.0941383Z
+2022-11-22T05:57:45.0944198Z [1;32mPASS[0m /datum/unit_test/barsigns_name 0s
+2022-11-22T05:57:45.0946955Z ##[endgroup]
+2022-11-22T05:57:45.1096461Z ##[group]/datum/unit_test/bespoke_id
+2022-11-22T05:57:45.1096937Z
+2022-11-22T05:57:45.1099174Z [1;32mPASS[0m /datum/unit_test/bespoke_id 0s
+2022-11-22T05:57:45.1100742Z ##[endgroup]
+2022-11-22T05:57:45.1439539Z ##[group]/datum/unit_test/binary_insert
+2022-11-22T05:57:45.1442012Z
+2022-11-22T05:57:45.1443259Z [1;32mPASS[0m /datum/unit_test/binary_insert 0s
+2022-11-22T05:57:45.1444013Z ##[endgroup]
+2022-11-22T05:57:45.1594465Z ##[group]/datum/unit_test/bloody_footprints
+2022-11-22T05:57:45.1861559Z
+2022-11-22T05:57:45.1862509Z [1;32mPASS[0m /datum/unit_test/bloody_footprints 0s
+2022-11-22T05:57:45.1863678Z ##[endgroup]
+2022-11-22T05:57:45.2757269Z ##[group]/datum/unit_test/breath_sanity
+2022-11-22T05:57:45.3154911Z
+2022-11-22T05:57:45.3155918Z [1;32mPASS[0m /datum/unit_test/breath_sanity 0.1s
+2022-11-22T05:57:45.3157085Z ##[endgroup]
+2022-11-22T05:57:45.3851583Z ##[group]/datum/unit_test/breath_sanity_plasmamen
+2022-11-22T05:57:45.4259844Z
+2022-11-22T05:57:45.4260721Z [1;32mPASS[0m /datum/unit_test/breath_sanity_plasmamen 0.1s
+2022-11-22T05:57:45.4261835Z ##[endgroup]
+2022-11-22T05:57:45.4970449Z ##[group]/datum/unit_test/breath_sanity_ashwalker
+2022-11-22T05:57:45.5458718Z
+2022-11-22T05:57:45.5459726Z [1;32mPASS[0m /datum/unit_test/breath_sanity_ashwalker 0.1s
+2022-11-22T05:57:45.5460898Z ##[endgroup]
+2022-11-22T05:57:45.6672536Z ##[group]/datum/unit_test/cable_powernets
+2022-11-22T05:57:45.6673181Z
+2022-11-22T05:57:45.6674204Z [1;32mPASS[0m /datum/unit_test/cable_powernets 0s
+2022-11-22T05:57:45.6674983Z ##[endgroup]
+2022-11-22T05:57:45.6813975Z ##[group]/datum/unit_test/card_mismatch
+2022-11-22T05:57:45.6847490Z
+2022-11-22T05:57:45.6848203Z [1;32mPASS[0m /datum/unit_test/card_mismatch 0s
+2022-11-22T05:57:45.6849278Z ##[endgroup]
+2022-11-22T05:57:45.7667452Z ##[group]/datum/unit_test/chain_pull_through_space
+2022-11-22T05:57:45.7691182Z
+2022-11-22T05:57:45.7692013Z [1;32mPASS[0m /datum/unit_test/chain_pull_through_space 0s
+2022-11-22T05:57:45.7693138Z ##[endgroup]
+2022-11-22T05:57:45.9995429Z ##[group]/datum/unit_test/chat_filter_sanity
+2022-11-22T05:57:46.0000038Z
+2022-11-22T05:57:46.0000532Z [1;32mPASS[0m /datum/unit_test/chat_filter_sanity 0s
+2022-11-22T05:57:46.0001077Z ##[endgroup]
+2022-11-22T05:57:46.0139755Z ##[group]/datum/unit_test/circuit_component_category
+2022-11-22T05:57:46.0139979Z
+2022-11-22T05:57:46.0140376Z [1;32mPASS[0m /datum/unit_test/circuit_component_category 0s
+2022-11-22T05:57:46.0140890Z ##[endgroup]
+2022-11-22T05:57:46.0280886Z ##[group]/datum/unit_test/closets
+2022-11-22T05:57:47.4931763Z
+2022-11-22T05:57:47.4932352Z [1;32mPASS[0m /datum/unit_test/closets 1.4s
+2022-11-22T05:57:47.4932981Z ##[endgroup]
+2022-11-22T05:57:50.1800201Z ##[group]/datum/unit_test/harm_punch
+2022-11-22T05:57:50.2237522Z
+2022-11-22T05:57:50.2238465Z [1;32mPASS[0m /datum/unit_test/harm_punch 0.1s
+2022-11-22T05:57:50.2239270Z ##[endgroup]
+2022-11-22T05:57:50.2470659Z ##[group]/datum/unit_test/harm_melee
+2022-11-22T05:57:50.2990417Z
+2022-11-22T05:57:50.2991838Z [1;32mPASS[0m /datum/unit_test/harm_melee 0s
+2022-11-22T05:57:50.2994899Z ##[endgroup]
+2022-11-22T05:57:50.3439298Z ##[group]/datum/unit_test/harm_different_damage
+2022-11-22T05:57:50.3918437Z
+2022-11-22T05:57:50.3919330Z [1;32mPASS[0m /datum/unit_test/harm_different_damage 0s
+2022-11-22T05:57:50.4008259Z ##[endgroup]
+2022-11-22T05:57:50.4167399Z ##[group]/datum/unit_test/attack_chain
+2022-11-22T05:57:50.4632392Z
+2022-11-22T05:57:50.4633058Z [1;32mPASS[0m /datum/unit_test/attack_chain 0s
+2022-11-22T05:57:50.4633745Z ##[endgroup]
+2022-11-22T05:57:50.4904110Z ##[group]/datum/unit_test/disarm
+2022-11-22T05:57:50.5347143Z
+2022-11-22T05:57:50.5347804Z [1;32mPASS[0m /datum/unit_test/disarm 0.1s
+2022-11-22T05:57:50.5348427Z ##[endgroup]
+2022-11-22T05:57:50.5595669Z ##[group]/datum/unit_test/component_duping
+2022-11-22T05:57:50.5595898Z
+2022-11-22T05:57:50.5596342Z [1;32mPASS[0m /datum/unit_test/component_duping 0s
+2022-11-22T05:57:50.5596852Z ##[endgroup]
+2022-11-22T05:57:50.5739602Z ##[group]/datum/unit_test/confusion_symptom
+2022-11-22T05:57:50.5945849Z
+2022-11-22T05:57:50.5946402Z [1;32mPASS[0m /datum/unit_test/confusion_symptom 0s
+2022-11-22T05:57:50.5947016Z ##[endgroup]
+2022-11-22T05:57:50.6143700Z ##[group]/datum/unit_test/connect_loc_basic
+2022-11-22T05:57:50.6143916Z
+2022-11-22T05:57:50.6144283Z [1;32mPASS[0m /datum/unit_test/connect_loc_basic 0s
+2022-11-22T05:57:50.6144785Z ##[endgroup]
+2022-11-22T05:57:50.6284913Z ##[group]/datum/unit_test/connect_loc_change_turf
+2022-11-22T05:57:50.6292634Z
+2022-11-22T05:57:50.6293007Z [1;32mPASS[0m /datum/unit_test/connect_loc_change_turf 0s
+2022-11-22T05:57:50.6293533Z ##[endgroup]
+2022-11-22T05:57:50.6434958Z ##[group]/datum/unit_test/connect_loc_multiple_on_turf
+2022-11-22T05:57:50.6440347Z
+2022-11-22T05:57:50.6440682Z [1;32mPASS[0m /datum/unit_test/connect_loc_multiple_on_turf 0s
+2022-11-22T05:57:50.6441134Z ##[endgroup]
+2022-11-22T05:57:50.6579913Z ##[group]/datum/unit_test/reagent_container_sanity
+2022-11-22T05:57:50.7818215Z
+2022-11-22T05:57:50.7818993Z [1;32mPASS[0m /datum/unit_test/reagent_container_sanity 0.1s
+2022-11-22T05:57:50.7819687Z ##[endgroup]
+2022-11-22T05:57:51.0092450Z ##[group]/datum/unit_test/crayon_naming
+2022-11-22T05:57:51.0150514Z
+2022-11-22T05:57:51.0151055Z [1;32mPASS[0m /datum/unit_test/crayon_naming 0s
+2022-11-22T05:57:51.0151629Z ##[endgroup]
+2022-11-22T05:57:51.0291644Z ##[group]/datum/unit_test/dcs_get_id_from_arguments
+2022-11-22T05:57:51.0295148Z
+2022-11-22T05:57:51.0295468Z [1;32mPASS[0m /datum/unit_test/dcs_get_id_from_arguments 0s
+2022-11-22T05:57:51.0295906Z ##[endgroup]
+2022-11-22T05:57:51.0436006Z ##[group]/datum/unit_test/designs
+2022-11-22T05:57:51.0482298Z
+2022-11-22T05:57:51.0482663Z [1;32mPASS[0m /datum/unit_test/designs 0s
+2022-11-22T05:57:51.0483175Z ##[endgroup]
+2022-11-22T05:57:51.0620982Z ##[group]/datum/unit_test/dummy_spawn_species
+2022-11-22T05:57:51.4128167Z
+2022-11-22T05:57:51.4128925Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_species 0.4s
+2022-11-22T05:57:51.4129626Z ##[endgroup]
+2022-11-22T05:57:51.7309194Z ##[group]/datum/unit_test/dummy_spawn_outfit
+2022-11-22T05:57:51.7520497Z Job type /datum/job/ai could not be retrieved from SSjob
+2022-11-22T05:57:52.0337175Z
+2022-11-22T05:57:52.0338303Z [1;32mPASS[0m /datum/unit_test/dummy_spawn_outfit 0.3s
+2022-11-22T05:57:52.0339259Z ##[endgroup]
+2022-11-22T05:57:52.3010961Z ##[group]/datum/unit_test/dynamic_roundstart_ruleset_sanity
+2022-11-22T05:57:52.3011803Z
+2022-11-22T05:57:52.3012594Z [1;32mPASS[0m /datum/unit_test/dynamic_roundstart_ruleset_sanity 0s
+2022-11-22T05:57:52.3013299Z ##[endgroup]
+2022-11-22T05:57:52.3164698Z ##[group]/datum/unit_test/dynamic_unique_antag_flags
+2022-11-22T05:57:52.3165134Z
+2022-11-22T05:57:52.3165719Z [1;32mPASS[0m /datum/unit_test/dynamic_unique_antag_flags 0s
+2022-11-22T05:57:52.3166684Z ##[endgroup]
+2022-11-22T05:57:52.3307956Z ##[group]/datum/unit_test/egg_glands
+2022-11-22T05:57:52.3727674Z
+2022-11-22T05:57:52.3728398Z [1;32mPASS[0m /datum/unit_test/egg_glands 0s
+2022-11-22T05:57:52.3729449Z ##[endgroup]
+2022-11-22T05:57:52.3876533Z ##[group]/datum/unit_test/emoting
+2022-11-22T05:57:52.4097216Z
+2022-11-22T05:57:52.4097697Z [1;32mPASS[0m /datum/unit_test/emoting 0.1s
+2022-11-22T05:57:52.4098176Z ##[endgroup]
+2022-11-22T05:57:52.7391670Z ##[group]/datum/unit_test/food_edibility_check
+2022-11-22T05:57:53.8611412Z
+2022-11-22T05:57:53.8612472Z [1;32mPASS[0m /datum/unit_test/food_edibility_check 1.1s
+2022-11-22T05:57:53.8613293Z ##[endgroup]
+2022-11-22T05:57:54.9307669Z ##[group]/datum/unit_test/atmospheric_gas_transfer
+2022-11-22T05:57:54.9314807Z
+2022-11-22T05:57:54.9315632Z [1;32mPASS[0m /datum/unit_test/atmospheric_gas_transfer 0s
+2022-11-22T05:57:54.9316476Z ##[endgroup]
+2022-11-22T05:57:54.9470739Z ##[group]/datum/unit_test/get_turf_pixel
+2022-11-22T05:57:54.9485851Z
+2022-11-22T05:57:54.9486504Z [1;32mPASS[0m /datum/unit_test/get_turf_pixel 0s
+2022-11-22T05:57:54.9487302Z ##[endgroup]
+2022-11-22T05:57:54.9638937Z ##[group]/datum/unit_test/greyscale_item_icon_states
+2022-11-22T05:57:54.9698181Z
+2022-11-22T05:57:54.9698921Z [1;32mPASS[0m /datum/unit_test/greyscale_item_icon_states 0s
+2022-11-22T05:57:54.9699816Z ##[endgroup]
+2022-11-22T05:57:54.9841288Z ##[group]/datum/unit_test/greyscale_color_count
+2022-11-22T05:57:54.9971884Z
+2022-11-22T05:57:54.9972668Z [1;32mPASS[0m /datum/unit_test/greyscale_color_count 0s
+2022-11-22T05:57:54.9973372Z ##[endgroup]
+2022-11-22T05:57:55.0566622Z ##[group]/datum/unit_test/hallucination_icons
+2022-11-22T05:57:55.2636405Z
+2022-11-22T05:57:55.2637180Z [1;32mPASS[0m /datum/unit_test/hallucination_icons 0.2s
+2022-11-22T05:57:55.2637869Z ##[endgroup]
+2022-11-22T05:57:55.4281623Z ##[group]/datum/unit_test/heretic_knowledge
+2022-11-22T05:57:55.4312752Z
+2022-11-22T05:57:55.4313343Z [1;32mPASS[0m /datum/unit_test/heretic_knowledge 0s
+2022-11-22T05:57:55.4313933Z ##[endgroup]
+2022-11-22T05:57:55.4464795Z ##[group]/datum/unit_test/heretic_main_paths
+2022-11-22T05:57:55.4465364Z
+2022-11-22T05:57:55.4465818Z [1;32mPASS[0m /datum/unit_test/heretic_main_paths 0s
+2022-11-22T05:57:55.4466260Z ##[endgroup]
+2022-11-22T05:57:55.4606916Z ##[group]/datum/unit_test/heretic_rituals
+2022-11-22T05:57:55.5247753Z
+2022-11-22T05:57:55.5248512Z [1;32mPASS[0m /datum/unit_test/heretic_rituals 0.1s
+2022-11-22T05:57:55.5249184Z ##[endgroup]
+2022-11-22T05:57:55.5940368Z ##[group]/datum/unit_test/hanukkah_2123
+2022-11-22T05:57:55.5940592Z
+2022-11-22T05:57:55.5941492Z [1;32mPASS[0m /datum/unit_test/hanukkah_2123 0s
+2022-11-22T05:57:55.5942009Z ##[endgroup]
+2022-11-22T05:57:55.6091512Z ##[group]/datum/unit_test/ramadan_2165
+2022-11-22T05:57:55.6091717Z
+2022-11-22T05:57:55.6092048Z [1;32mPASS[0m /datum/unit_test/ramadan_2165 0s
+2022-11-22T05:57:55.6092523Z ##[endgroup]
+2022-11-22T05:57:55.6442352Z ##[group]/datum/unit_test/thanksgiving_2020
+2022-11-22T05:57:55.6442890Z
+2022-11-22T05:57:55.6443757Z [1;32mPASS[0m /datum/unit_test/thanksgiving_2020 0s
+2022-11-22T05:57:55.6444979Z ##[endgroup]
+2022-11-22T05:57:55.6598675Z ##[group]/datum/unit_test/mother_3683
+2022-11-22T05:57:55.6598889Z
+2022-11-22T05:57:55.6599297Z [1;32mPASS[0m /datum/unit_test/mother_3683 0s
+2022-11-22T05:57:55.6599751Z ##[endgroup]
+2022-11-22T05:57:55.6738486Z ##[group]/datum/unit_test/hello_2020
+2022-11-22T05:57:55.6738688Z
+2022-11-22T05:57:55.6739014Z [1;32mPASS[0m /datum/unit_test/hello_2020 0s
+2022-11-22T05:57:55.6739488Z ##[endgroup]
+2022-11-22T05:57:55.6878688Z ##[group]/datum/unit_test/new_year_1983
+2022-11-22T05:57:55.6878886Z
+2022-11-22T05:57:55.6879201Z [1;32mPASS[0m /datum/unit_test/new_year_1983 0s
+2022-11-22T05:57:55.6879685Z ##[endgroup]
+2022-11-22T05:57:55.7020176Z ##[group]/datum/unit_test/moth_week_2020
+2022-11-22T05:57:55.7046044Z
+2022-11-22T05:57:55.7046466Z [1;32mPASS[0m /datum/unit_test/moth_week_2020 0s
+2022-11-22T05:57:55.7047027Z ##[endgroup]
+2022-11-22T05:57:55.7187159Z ##[group]/datum/unit_test/human_through_recycler
+2022-11-22T05:57:55.7514671Z
+2022-11-22T05:57:55.7515299Z [1;32mPASS[0m /datum/unit_test/human_through_recycler 0s
+2022-11-22T05:57:55.7516283Z ##[endgroup]
+2022-11-22T05:57:55.7919867Z ##[group]/datum/unit_test/hydroponics_extractor_storage
+2022-11-22T05:57:55.8186193Z
+2022-11-22T05:57:55.8186944Z [1;32mPASS[0m /datum/unit_test/hydroponics_extractor_storage 0.1s
+2022-11-22T05:57:55.8187599Z ##[endgroup]
+2022-11-22T05:57:55.8398289Z ##[group]/datum/unit_test/hydroponics_harvest
+2022-11-22T05:57:55.8939596Z
+2022-11-22T05:57:55.8940352Z [1;32mPASS[0m /datum/unit_test/hydroponics_harvest 0s
+2022-11-22T05:57:55.8941013Z ##[endgroup]
+2022-11-22T05:57:56.0137178Z ##[group]/datum/unit_test/hydroponics_self_mutation
+2022-11-22T05:57:56.0571748Z
+2022-11-22T05:57:56.0572297Z [1;32mPASS[0m /datum/unit_test/hydroponics_self_mutation 0s
+2022-11-22T05:57:56.0572944Z ##[endgroup]
+2022-11-22T05:57:56.0712557Z ##[group]/datum/unit_test/hydroponics_validate_genes
+2022-11-22T05:57:56.1145858Z
+2022-11-22T05:57:56.1146632Z [1;32mPASS[0m /datum/unit_test/hydroponics_validate_genes 0.1s
+2022-11-22T05:57:56.1147317Z ##[endgroup]
+2022-11-22T05:57:56.1288831Z ##[group]/datum/unit_test/defined_inhand_icon_states
+2022-11-22T05:57:56.9990761Z Notice - Possible inhand icon matches found. It is best to be explicit with inhand sprite values.
+2022-11-22T05:57:56.9991785Z /obj/item/clothing/accessory/pride does not have an inhand_icon_state value - Possible matching sprites for "pride" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-11-22T05:57:56.9992933Z /obj/item/clothing/suit/caution does not have an inhand_icon_state value - Possible matching sprites for "caution" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-11-22T05:57:56.9994021Z /obj/item/clothing/under/suit/sl does not have an inhand_icon_state value - Possible matching sprites for "sl_suit" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-22T05:57:56.9995081Z /obj/item/clothing/head/collectable/paper does not have an inhand_icon_state value - Possible matching sprites for "paper" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2022-11-22T05:57:56.9996131Z /obj/item/clothing/head/mod does not have an inhand_icon_state value - Possible matching sprites for "helmet" found in: 'icons/mob/inhands/clothing/hats_lefthand.dmi' & 'icons/mob/inhands/clothing/hats_righthand.dmi'
+2022-11-22T05:57:56.9997136Z /obj/item/clothing/mask/animal/small/fox does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2022-11-22T05:57:56.9998121Z /obj/item/clothing/mask/animal/small/fox/cursed does not have an inhand_icon_state value - Possible matching sprites for "fox" found in: 'icons/mob/inhands/pets_held_rh.dmi' & 'icons/mob/inhands/pets_held_lh.dmi'
+2022-11-22T05:57:56.9999214Z /obj/item/clothing/glasses/hud/health/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudmed" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-11-22T05:57:57.0000419Z /obj/item/clothing/glasses/hud/security/sunglasses does not have an inhand_icon_state value - Possible matching sprites for "sunhudsec" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-11-22T05:57:57.0001582Z /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun does not have an inhand_icon_state value - Possible matching sprites for "syringegun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-11-22T05:57:57.0002710Z /obj/item/mecha_parts/mecha_equipment/generator does not have an inhand_icon_state value - Possible matching sprites for "tesla" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-11-22T05:57:57.0004089Z /obj/item/storage/bag/ore does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-11-22T05:57:57.0005300Z /obj/item/storage/bag/ore/cyborg does not have an inhand_icon_state value - Possible matching sprites for "satchel" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-11-22T05:57:57.0006371Z /obj/item/implant/emp does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-22T05:57:57.0007395Z /obj/item/implant/uplink does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0008445Z /obj/item/implant/uplink/precharged does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0009494Z /obj/item/implant/uplink/starting does not have an inhand_icon_state value - Possible matching sprites for "radio" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0010726Z /obj/item/melee/energy/blade does not have an inhand_icon_state value - Possible matching sprites for "blade" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-22T05:57:57.0011749Z /obj/item/fireaxe does not have an inhand_icon_state value - Possible matching sprites for "fireaxe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-11-22T05:57:57.0012773Z /obj/item/fireaxe/boneaxe does not have an inhand_icon_state value - Possible matching sprites for "bone_axe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-11-22T05:57:57.0013837Z /obj/item/fireaxe/metal_h2_axe does not have an inhand_icon_state value - Possible matching sprites for "metalh2_axe0" found in: 'icons/mob/inhands/weapons/axes_righthand.dmi' & 'icons/mob/inhands/weapons/axes_lefthand.dmi'
+2022-11-22T05:57:57.0014905Z /obj/item/reagent_containers/cup/soda_cans/cola does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0016006Z /obj/item/reagent_containers/cup/soda_cans/tonic does not have an inhand_icon_state value - Possible matching sprites for "tonic" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0017128Z /obj/item/reagent_containers/cup/soda_cans/sodawater does not have an inhand_icon_state value - Possible matching sprites for "sodawater" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0018271Z /obj/item/reagent_containers/cup/soda_cans/lemon_lime does not have an inhand_icon_state value - Possible matching sprites for "lemon-lime" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0019407Z /obj/item/reagent_containers/cup/soda_cans/space_up does not have an inhand_icon_state value - Possible matching sprites for "space-up" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0020513Z /obj/item/reagent_containers/cup/soda_cans/starkist does not have an inhand_icon_state value - Possible matching sprites for "starkist" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0021776Z /obj/item/reagent_containers/cup/soda_cans/space_mountain_wind does not have an inhand_icon_state value - Possible matching sprites for "space_mountain_wind" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0023030Z /obj/item/reagent_containers/cup/soda_cans/thirteenloko does not have an inhand_icon_state value - Possible matching sprites for "thirteen_loko" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0024156Z /obj/item/reagent_containers/cup/soda_cans/dr_gibb does not have an inhand_icon_state value - Possible matching sprites for "dr_gibb" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0025284Z /obj/item/reagent_containers/cup/soda_cans/pwr_game does not have an inhand_icon_state value - Possible matching sprites for "purple_can" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0026401Z /obj/item/reagent_containers/cup/glass/coffee does not have an inhand_icon_state value - Possible matching sprites for "coffee" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0027532Z /obj/item/reagent_containers/chem_pack does not have an inhand_icon_state value - Possible matching sprites for "chempack" found in: 'icons/mob/inhands/equipment/backpack_lefthand.dmi' & 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+2022-11-22T05:57:57.0028593Z /obj/item/sbeacondrop does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0029625Z /obj/item/sbeacondrop/bomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0030654Z /obj/item/sbeacondrop/emp does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0031702Z /obj/item/sbeacondrop/powersink does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0032748Z /obj/item/sbeacondrop/clownbomb does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0033834Z /obj/item/stack/medical/bruise_pack does not have an inhand_icon_state value - Possible matching sprites for "brutepack" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0034933Z /obj/item/stack/medical/ointment does not have an inhand_icon_state value - Possible matching sprites for "ointment" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0035979Z /obj/item/minespawner does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0037019Z /obj/item/organ/internal/heart/gland/blood does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0038119Z /obj/item/organ/internal/heart/gland/egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0039221Z /obj/item/organ/internal/heart/gland/quantum does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-22T05:57:57.0040406Z /obj/item/organ/internal/heart/gland/trauma does not have an inhand_icon_state value - Possible matching sprites for "emp" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-22T05:57:57.0041502Z /obj/item/boxcutter does not have an inhand_icon_state value - Possible matching sprites for "boxcutter" found in: 'icons/mob/inhands/equipment/boxcutter_lefthand.dmi' & 'icons/mob/inhands/equipment/boxcutter_righthand.dmi'
+2022-11-22T05:57:57.0042546Z /obj/item/pushbroom does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-11-22T05:57:57.0043620Z /obj/item/pushbroom/cyborg does not have an inhand_icon_state value - Possible matching sprites for "broom0" found in: 'icons/mob/inhands/equipment/custodial_lefthand.dmi' & 'icons/mob/inhands/equipment/custodial_righthand.dmi'
+2022-11-22T05:57:57.0044677Z /obj/item/chainsaw does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
+2022-11-22T05:57:57.0045751Z /obj/item/chainsaw/doomslayer does not have an inhand_icon_state value - Possible matching sprites for "chainsaw_off" found in: 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' & 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
+2022-11-22T05:57:57.0047360Z /obj/item/toy/talking/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2022-11-22T05:57:57.0048399Z /obj/item/toy/figure/chef does not have an inhand_icon_state value - Possible matching sprites for "chef" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-22T05:57:57.0049430Z /obj/item/toy/figure/clown does not have an inhand_icon_state value - Possible matching sprites for "clown" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-22T05:57:57.0050554Z /obj/item/toy/figure/janitor does not have an inhand_icon_state value - Possible matching sprites for "janitor" found in: 'icons/mob/inhands/clothing/suits_righthand.dmi' & 'icons/mob/inhands/clothing/suits_lefthand.dmi'
+2022-11-22T05:57:57.0051561Z /obj/item/food/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0052539Z /obj/item/food/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0053552Z /obj/item/kitchen/fork does not have an inhand_icon_state value - Possible matching sprites for "fork" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-11-22T05:57:57.0054597Z /obj/item/kitchen/spoon does not have an inhand_icon_state value - Possible matching sprites for "spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-11-22T05:57:57.0055672Z /obj/item/kitchen/spoon/plastic does not have an inhand_icon_state value - Possible matching sprites for "plastic_spoon" found in: 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' & 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+2022-11-22T05:57:57.0056849Z /obj/item/book/codex_gigas does not have an inhand_icon_state value - Possible matching sprites for "demonomicon" found in: 'icons/mob/inhands/items/books_righthand.dmi' & 'icons/mob/inhands/items/books_lefthand.dmi'
+2022-11-22T05:57:57.0057975Z /obj/item/pitchfork does not have an inhand_icon_state value - Possible matching sprites for "pitchfork0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-22T05:57:57.0059026Z /obj/item/construction/rcd does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0060072Z /obj/item/construction/rcd/borg does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0061125Z /obj/item/construction/rcd/loaded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0062218Z /obj/item/construction/rcd/loaded/upgraded does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0063307Z /obj/item/construction/rcd/internal does not have an inhand_icon_state value - Possible matching sprites for "rcd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0064355Z /obj/item/construction/rld does not have an inhand_icon_state value - Possible matching sprites for "rld-5" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0065418Z /obj/item/construction/rld/mini does not have an inhand_icon_state value - Possible matching sprites for "rld-5" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0066456Z /obj/item/rcd_ammo does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0067491Z /obj/item/rcd_ammo/large does not have an inhand_icon_state value - Possible matching sprites for "rcdammo" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0068534Z /obj/item/godstaff does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-11-22T05:57:57.0069585Z /obj/item/godstaff/red does not have an inhand_icon_state value - Possible matching sprites for "godstaff-red" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-11-22T05:57:57.0070654Z /obj/item/godstaff/blue does not have an inhand_icon_state value - Possible matching sprites for "godstaff-blue" found in: 'icons/mob/inhands/weapons/staves_lefthand.dmi' & 'icons/mob/inhands/weapons/staves_righthand.dmi'
+2022-11-22T05:57:57.0071702Z /obj/item/pipe_dispenser does not have an inhand_icon_state value - Possible matching sprites for "rpd" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0073144Z /obj/item/singularityhammer does not have an inhand_icon_state value - Possible matching sprites for "singularity_hammer0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-11-22T05:57:57.0074330Z /obj/item/mjollnir does not have an inhand_icon_state value - Possible matching sprites for "mjollnir0" found in: 'icons/mob/inhands/weapons/hammers_lefthand.dmi' & 'icons/mob/inhands/weapons/hammers_righthand.dmi'
+2022-11-22T05:57:57.0075441Z /obj/item/spear does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-22T05:57:57.0076509Z /obj/item/spear/explosive does not have an inhand_icon_state value - Possible matching sprites for "spearbomb0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-22T05:57:57.0077599Z /obj/item/spear/grey_tide does not have an inhand_icon_state value - Possible matching sprites for "spearglass0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-22T05:57:57.0078680Z /obj/item/spear/bonespear does not have an inhand_icon_state value - Possible matching sprites for "bone_spear0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-22T05:57:57.0079765Z /obj/item/spear/bamboospear does not have an inhand_icon_state value - Possible matching sprites for "bamboo_spear0" found in: 'icons/mob/inhands/weapons/polearms_righthand.dmi' & 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
+2022-11-22T05:57:57.0080775Z /obj/item/trash/candy does not have an inhand_icon_state value - Possible matching sprites for "candy" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0082023Z /obj/item/trash/chips does not have an inhand_icon_state value - Possible matching sprites for "chips" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0083017Z /obj/item/trash/can does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0084019Z /obj/item/trash/can/food does not have an inhand_icon_state value - Possible matching sprites for "cola" found in: 'icons/mob/inhands/items/drinks_righthand.dmi' & 'icons/mob/inhands/items/drinks_lefthand.dmi'
+2022-11-22T05:57:57.0085071Z /obj/item/highfrequencyblade does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-22T05:57:57.0086187Z /obj/item/highfrequencyblade/wizard does not have an inhand_icon_state value - Possible matching sprites for "hfrequency0" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-22T05:57:57.0087262Z /obj/item/borg/sight/meson does not have an inhand_icon_state value - Possible matching sprites for "meson" found in: 'icons/mob/inhands/clothing/glasses_righthand.dmi' & 'icons/mob/inhands/clothing/glasses_lefthand.dmi'
+2022-11-22T05:57:57.0088347Z /obj/item/ammo_casing/magic/hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-11-22T05:57:57.0089259Z /obj/item/ammo_casing/magic/hook/bounty does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-11-22T05:57:57.0090243Z /obj/item/harmalarm does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_lefthand.dmi' & 'icons/mob/inhands/items/megaphone_righthand.dmi'
+2022-11-22T05:57:57.0091252Z /obj/item/crowbar/mechremoval does not have an inhand_icon_state value - Possible matching sprites for "mechremoval0" found in: 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0092194Z /obj/item/abductor_machine_beacon does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0093224Z /obj/item/abductor_machine_beacon/chem_dispenser does not have an inhand_icon_state value - Possible matching sprites for "beacon" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0094166Z /obj/item/grown/carbon_rose does not have an inhand_icon_state value - Possible matching sprites for "carbonrose" found in: 'icons/mob/inhands/weapons/plants_righthand.dmi' & 'icons/mob/inhands/weapons/plants_lefthand.dmi'
+2022-11-22T05:57:57.0095086Z /obj/item/paint_palette does not have an inhand_icon_state value - Possible matching sprites for "palette" found in: 'icons/mob/inhands/equipment/palette_righthand.dmi' & 'icons/mob/inhands/equipment/palette_lefthand.dmi'
+2022-11-22T05:57:57.0095973Z /obj/item/surprise_egg does not have an inhand_icon_state value - Possible matching sprites for "egg" found in: 'icons/mob/inhands/items/food_lefthand.dmi' & 'icons/mob/inhands/items/food_righthand.dmi'
+2022-11-22T05:57:57.0096871Z /obj/item/experi_scanner does not have an inhand_icon_state value - Possible matching sprites for "experiscanner" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0097746Z /obj/item/fishing_hook does not have an inhand_icon_state value - Possible matching sprites for "hook" found in: 'icons/mob/inhands/weapons/melee_righthand.dmi' & 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+2022-11-22T05:57:57.0098649Z /obj/item/cursed_katana does not have an inhand_icon_state value - Possible matching sprites for "cursed_katana" found in: 'icons/mob/inhands/weapons/swords_lefthand.dmi' & 'icons/mob/inhands/weapons/swords_righthand.dmi'
+2022-11-22T05:57:57.0099593Z /obj/item/guardiancreator/tech does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0100605Z /obj/item/guardiancreator/tech/choose does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0101605Z /obj/item/guardiancreator/tech/choose/traitor does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0102626Z /obj/item/guardiancreator/tech/choose/dextrous does not have an inhand_icon_state value - Possible matching sprites for "combat_hypo" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0103578Z /obj/item/mod/module/welding does not have an inhand_icon_state value - Possible matching sprites for "welding" found in: 'icons/mob/inhands/clothing/masks_lefthand.dmi' & 'icons/mob/inhands/clothing/masks_righthand.dmi'
+2022-11-22T05:57:57.0104491Z /obj/item/mod/module/mister does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2022-11-22T05:57:57.0105414Z /obj/item/mod/module/mister/atmos does not have an inhand_icon_state value - Possible matching sprites for "mister" found in: 'icons/mob/inhands/equipment/mister_righthand.dmi' & 'icons/mob/inhands/equipment/mister_lefthand.dmi'
+2022-11-22T05:57:57.0106415Z /obj/item/mod/module/jetpack does not have an inhand_icon_state value - Possible matching sprites for "jetpack" found in: 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi' & 'icons/mob/inhands/equipment/jetpacks_righthand.dmi'
+2022-11-22T05:57:57.0107402Z /obj/item/mod/module/flashlight does not have an inhand_icon_state value - Possible matching sprites for "flashlight" found in: 'icons/mob/inhands/items/devices_lefthand.dmi' & 'icons/mob/inhands/items/devices_righthand.dmi'
+2022-11-22T05:57:57.0108273Z /obj/item/mod/module/stamp does not have an inhand_icon_state value - Possible matching sprites for "stamp" found in: 'icons/mob/inhands/items_lefthand.dmi' & 'icons/mob/inhands/items_righthand.dmi'
+2022-11-22T05:57:57.0109157Z /obj/item/mod/module/holster does not have an inhand_icon_state value - Possible matching sprites for "holster" found in: 'icons/mob/inhands/equipment/belt_lefthand.dmi' & 'icons/mob/inhands/equipment/belt_righthand.dmi'
+2022-11-22T05:57:57.0110093Z /obj/item/mod/module/megaphone does not have an inhand_icon_state value - Possible matching sprites for "megaphone" found in: 'icons/mob/inhands/items/megaphone_lefthand.dmi' & 'icons/mob/inhands/items/megaphone_righthand.dmi'
+2022-11-22T05:57:57.0111228Z /obj/item/mod/module/drill does not have an inhand_icon_state value - Possible matching sprites for "drill" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi' & 'icons/mob/inhands/equipment/tools_righthand.dmi' & 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+2022-11-22T05:57:57.0112255Z /obj/item/mod/module/tem does not have an inhand_icon_state value - Possible matching sprites for "chronogun" found in: 'icons/mob/inhands/weapons/guns_righthand.dmi' & 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+2022-11-22T05:57:57.0113170Z /obj/item/bonesetter does not have an inhand_icon_state value - Possible matching sprites for "bonesetter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0114103Z /obj/item/blood_filter does not have an inhand_icon_state value - Possible matching sprites for "bloodfilter" found in: 'icons/mob/inhands/equipment/medical_lefthand.dmi' & 'icons/mob/inhands/equipment/medical_righthand.dmi'
+2022-11-22T05:57:57.0115057Z /obj/item/mecha_ammo/flashbang does not have an inhand_icon_state value - Possible matching sprites for "flashbang" found in: 'icons/mob/inhands/equipment/security_righthand.dmi' & 'icons/mob/inhands/equipment/security_lefthand.dmi'
+2022-11-22T05:57:57.0115440Z
+2022-11-22T05:57:57.0115677Z [1;32mPASS[0m /datum/unit_test/defined_inhand_icon_states 0.8s
+2022-11-22T05:57:57.0116249Z ##[endgroup]
+2022-11-22T05:57:57.8132217Z ##[group]/datum/unit_test/json_savefiles
+2022-11-22T05:57:57.8161427Z
+2022-11-22T05:57:57.8163650Z [1;32mPASS[0m /datum/unit_test/json_savefiles 0s
+2022-11-22T05:57:57.8165166Z ##[endgroup]
+2022-11-22T05:57:57.8317025Z ##[group]/datum/unit_test/keybinding_init
+2022-11-22T05:57:57.8317555Z
+2022-11-22T05:57:57.8318129Z [1;32mPASS[0m /datum/unit_test/keybinding_init 0s
+2022-11-22T05:57:57.8318715Z ##[endgroup]
+2022-11-22T05:57:57.8457921Z ##[group]/datum/unit_test/key_prefixes
+2022-11-22T05:57:57.8458449Z
+2022-11-22T05:57:57.8459042Z [1;32mPASS[0m /datum/unit_test/key_prefixes 0s
+2022-11-22T05:57:57.8462361Z ##[endgroup]
+2022-11-22T05:57:57.8599650Z ##[group]/datum/unit_test/knockoff_component
+2022-11-22T05:57:57.9089397Z
+2022-11-22T05:57:57.9090717Z [1;32mPASS[0m /datum/unit_test/knockoff_component 0.1s
+2022-11-22T05:57:57.9091840Z ##[endgroup]
+2022-11-22T05:57:57.9827579Z ##[group]/datum/unit_test/limbsanity
+2022-11-22T05:57:58.0484756Z
+2022-11-22T05:57:58.0485892Z [1;32mPASS[0m /datum/unit_test/limbsanity 0.1s
+2022-11-22T05:57:58.0486834Z ##[endgroup]
+2022-11-22T05:57:58.0629221Z ##[group]/datum/unit_test/load_map_security
+2022-11-22T05:57:58.0631540Z map directory not in whitelist: data/load_map_security_temp for map runtimestation
+2022-11-22T05:57:58.0632494Z
+2022-11-22T05:57:58.0634849Z [1;32mPASS[0m /datum/unit_test/load_map_security 0s
+2022-11-22T05:57:58.0635457Z ##[endgroup]
+2022-11-22T05:57:58.0781973Z ##[group]/datum/unit_test/machine_disassembly
+2022-11-22T05:57:58.0810119Z
+2022-11-22T05:57:58.0811067Z [1;32mPASS[0m /datum/unit_test/machine_disassembly 0s
+2022-11-22T05:57:58.0813933Z ##[endgroup]
+2022-11-22T05:57:58.1127230Z ##[group]/datum/unit_test/mecha_damage
+2022-11-22T05:57:58.1567386Z
+2022-11-22T05:57:58.1568502Z [1;32mPASS[0m /datum/unit_test/mecha_damage 0s
+2022-11-22T05:57:58.1569451Z ##[endgroup]
+2022-11-22T05:57:58.1825660Z ##[group]/datum/unit_test/test_human_base
+2022-11-22T05:57:58.2244474Z
+2022-11-22T05:57:58.2245632Z [1;32mPASS[0m /datum/unit_test/test_human_base 0.1s
+2022-11-22T05:57:58.2246699Z ##[endgroup]
+2022-11-22T05:57:58.2704857Z ##[group]/datum/unit_test/test_human_bone
+2022-11-22T05:57:58.3113306Z
+2022-11-22T05:57:58.3114010Z [1;32mPASS[0m /datum/unit_test/test_human_bone 0.1s
+2022-11-22T05:57:58.3114667Z ##[endgroup]
+2022-11-22T05:57:58.3301107Z ##[group]/datum/unit_test/merge_type
+2022-11-22T05:57:58.3302955Z
+2022-11-22T05:57:58.3303622Z [1;32mPASS[0m /datum/unit_test/merge_type 0s
+2022-11-22T05:57:58.3304293Z ##[endgroup]
+2022-11-22T05:57:58.3450988Z ##[group]/datum/unit_test/metabolization
+2022-11-22T05:57:58.5454349Z
+2022-11-22T05:57:58.5455483Z [1;32mPASS[0m /datum/unit_test/metabolization 0.2s
+2022-11-22T05:57:58.5456119Z ##[endgroup]
+2022-11-22T05:57:58.7181588Z ##[group]/datum/unit_test/on_mob_end_metabolize
+2022-11-22T05:57:58.7436989Z
+2022-11-22T05:57:58.7438144Z [1;32mPASS[0m /datum/unit_test/on_mob_end_metabolize 0s
+2022-11-22T05:57:58.7438781Z ##[endgroup]
+2022-11-22T05:57:58.7634355Z ##[group]/datum/unit_test/addictions
+2022-11-22T05:57:58.8327697Z
+2022-11-22T05:57:58.8328724Z [1;32mPASS[0m /datum/unit_test/addictions 0.1s
+2022-11-22T05:57:58.8329396Z ##[endgroup]
+2022-11-22T05:57:58.9646352Z ##[group]/datum/unit_test/actions_moved_on_mind_transfer
+2022-11-22T05:57:58.9894685Z
+2022-11-22T05:57:58.9895899Z [1;32mPASS[0m /datum/unit_test/actions_moved_on_mind_transfer 0s
+2022-11-22T05:57:58.9899018Z ##[endgroup]
+2022-11-22T05:57:59.0145385Z ##[group]/datum/unit_test/mob_faction
+2022-11-22T05:58:02.3668071Z
+2022-11-22T05:58:02.3669027Z [1;32mPASS[0m /datum/unit_test/mob_faction 3.3s
+2022-11-22T05:58:02.3669939Z ##[endgroup]
+2022-11-22T05:58:07.7854295Z ##[group]/datum/unit_test/mob_spawn
+2022-11-22T05:58:07.7991138Z
+2022-11-22T05:58:07.7991742Z [1;32mPASS[0m /datum/unit_test/mob_spawn 0s
+2022-11-22T05:58:07.7992334Z ##[endgroup]
+2022-11-22T05:58:07.9421769Z ##[group]/datum/unit_test/modsuit_checks
+2022-11-22T05:58:08.1300462Z
+2022-11-22T05:58:08.1301703Z [1;32mPASS[0m /datum/unit_test/modsuit_checks 0.2s
+2022-11-22T05:58:08.1302808Z ##[endgroup]
+2022-11-22T05:58:08.2981112Z ##[group]/datum/unit_test/modular_map_loader
+2022-11-22T05:58:08.2993538Z
+2022-11-22T05:58:08.2994017Z [1;32mPASS[0m /datum/unit_test/modular_map_loader 0s
+2022-11-22T05:58:08.2994490Z ##[endgroup]
+2022-11-22T05:58:08.3152720Z ##[group]/datum/unit_test/mouse_bite_cable
+2022-11-22T05:58:08.3194795Z
+2022-11-22T05:58:08.3195300Z [1;32mPASS[0m /datum/unit_test/mouse_bite_cable 0s
+2022-11-22T05:58:08.3195915Z ##[endgroup]
+2022-11-22T05:58:08.3481029Z ##[group]/datum/unit_test/novaflower_burn
+2022-11-22T05:58:08.3949558Z
+2022-11-22T05:58:08.3950307Z [1;32mPASS[0m /datum/unit_test/novaflower_burn 0s
+2022-11-22T05:58:08.3950994Z ##[endgroup]
+2022-11-22T05:58:08.4260753Z ##[group]/datum/unit_test/ntnetwork
+2022-11-22T05:58:08.4260950Z
+2022-11-22T05:58:08.4261366Z [1;32mPASS[0m /datum/unit_test/ntnetwork 0s
+2022-11-22T05:58:08.4261791Z ##[endgroup]
+2022-11-22T05:58:08.4438911Z ##[group]/datum/unit_test/nuke_cinematic
+2022-11-22T05:58:12.2927681Z
+2022-11-22T05:58:12.2928809Z [1;32mPASS[0m /datum/unit_test/nuke_cinematic 3.8s
+2022-11-22T05:58:12.2929427Z ##[endgroup]
+2022-11-22T05:58:12.5093172Z ##[group]/datum/unit_test/objectives_category
+2022-11-22T05:58:12.5093989Z
+2022-11-22T05:58:12.5095122Z [1;32mPASS[0m /datum/unit_test/objectives_category 0s
+2022-11-22T05:58:12.5096774Z ##[endgroup]
+2022-11-22T05:58:12.5256872Z ##[group]/datum/unit_test/orderable_item_descriptions
+2022-11-22T05:58:12.5771407Z
+2022-11-22T05:58:12.5772577Z [1;32mPASS[0m /datum/unit_test/orderable_item_descriptions 0s
+2022-11-22T05:58:12.5773724Z ##[endgroup]
+2022-11-22T05:58:12.5931358Z ##[group]/datum/unit_test/operating_table
+2022-11-22T05:58:12.6369527Z
+2022-11-22T05:58:12.6370760Z [1;32mPASS[0m /datum/unit_test/operating_table 0.1s
+2022-11-22T05:58:12.6371649Z ##[endgroup]
+2022-11-22T05:58:12.6652645Z ##[group]/datum/unit_test/outfit_sanity
+2022-11-22T05:58:20.4025368Z
+2022-11-22T05:58:20.4026450Z [1;32mPASS[0m /datum/unit_test/outfit_sanity 7.8s
+2022-11-22T05:58:20.4027358Z ##[endgroup]
+2022-11-22T05:58:28.1332042Z ##[group]/datum/unit_test/paintings
+2022-11-22T05:58:28.1602466Z
+2022-11-22T05:58:28.1603414Z [1;32mPASS[0m /datum/unit_test/paintings 0s
+2022-11-22T05:58:28.1604319Z ##[endgroup]
+2022-11-22T05:58:28.1760460Z ##[group]/datum/unit_test/pills
+2022-11-22T05:58:28.1992533Z
+2022-11-22T05:58:28.1993343Z [1;32mPASS[0m /datum/unit_test/pills 0s
+2022-11-22T05:58:28.1994038Z ##[endgroup]
+2022-11-22T05:58:28.2194261Z ##[group]/datum/unit_test/plane_double_transform
+2022-11-22T05:58:28.2430543Z
+2022-11-22T05:58:28.2431815Z [1;32mPASS[0m /datum/unit_test/plane_double_transform 0s
+2022-11-22T05:58:28.2434784Z ##[endgroup]
+2022-11-22T05:58:28.2932472Z ##[group]/datum/unit_test/plane_dupe_detector
+2022-11-22T05:58:28.2933160Z
+2022-11-22T05:58:28.2935921Z [1;32mPASS[0m /datum/unit_test/plane_dupe_detector 0s
+2022-11-22T05:58:28.2938654Z ##[endgroup]
+2022-11-22T05:58:28.3090410Z ##[group]/datum/unit_test/plantgrowth
+2022-11-22T05:58:28.3481022Z
+2022-11-22T05:58:28.3482119Z [1;32mPASS[0m /datum/unit_test/plantgrowth 0s
+2022-11-22T05:58:28.3483278Z ##[endgroup]
+2022-11-22T05:58:28.3644306Z ##[group]/datum/unit_test/preference_species
+2022-11-22T05:58:28.3644848Z
+2022-11-22T05:58:28.3645467Z [1;32mPASS[0m /datum/unit_test/preference_species 0s
+2022-11-22T05:58:28.3648326Z ##[endgroup]
+2022-11-22T05:58:28.3800065Z ##[group]/datum/unit_test/preferences_implement_everything
+2022-11-22T05:58:33.0443739Z
+2022-11-22T05:58:33.0446214Z [1;32mPASS[0m /datum/unit_test/preferences_implement_everything 4.7s
+2022-11-22T05:58:33.0447293Z ##[endgroup]
+2022-11-22T05:58:37.7153022Z ##[group]/datum/unit_test/preferences_valid_savefile_key
+2022-11-22T05:58:37.7155101Z
+2022-11-22T05:58:37.7157164Z [1;32mPASS[0m /datum/unit_test/preferences_valid_savefile_key 0s
+2022-11-22T05:58:37.7158100Z ##[endgroup]
+2022-11-22T05:58:37.7323713Z ##[group]/datum/unit_test/preferences_valid_main_feature_name
+2022-11-22T05:58:37.7329320Z
+2022-11-22T05:58:37.7330388Z [1;32mPASS[0m /datum/unit_test/preferences_valid_main_feature_name 0s
+2022-11-22T05:58:37.7330952Z ##[endgroup]
+2022-11-22T05:58:37.7489830Z ##[group]/datum/unit_test/projectile_movetypes
+2022-11-22T05:58:37.7490689Z
+2022-11-22T05:58:37.7491455Z [1;32mPASS[0m /datum/unit_test/projectile_movetypes 0s
+2022-11-22T05:58:37.7491963Z ##[endgroup]
+2022-11-22T05:58:37.7649766Z ##[group]/datum/unit_test/gun_go_bang
+2022-11-22T05:58:37.8209519Z
+2022-11-22T05:58:37.8210665Z [1;32mPASS[0m /datum/unit_test/gun_go_bang 0.1s
+2022-11-22T05:58:37.8211545Z ##[endgroup]
+2022-11-22T05:58:37.8502284Z ##[group]/datum/unit_test/quirk_icons
+2022-11-22T05:58:37.8502850Z
+2022-11-22T05:58:37.8503567Z [1;32mPASS[0m /datum/unit_test/quirk_icons 0s
+2022-11-22T05:58:37.8504117Z ##[endgroup]
+2022-11-22T05:58:37.8657773Z ##[group]/datum/unit_test/range_return
+2022-11-22T05:58:37.8658306Z
+2022-11-22T05:58:37.8658926Z [1;32mPASS[0m /datum/unit_test/range_return 0s
+2022-11-22T05:58:37.8659408Z ##[endgroup]
+2022-11-22T05:58:37.8813805Z ##[group]/datum/unit_test/frame_stacking
+2022-11-22T05:58:37.9259992Z
+2022-11-22T05:58:37.9261883Z [1;32mPASS[0m /datum/unit_test/frame_stacking 0.1s
+2022-11-22T05:58:37.9264250Z ##[endgroup]
+2022-11-22T05:58:37.9487864Z ##[group]/datum/unit_test/reagent_id_typos
+2022-11-22T05:58:37.9501045Z
+2022-11-22T05:58:37.9502744Z [1;32mPASS[0m /datum/unit_test/reagent_id_typos 0s
+2022-11-22T05:58:37.9504577Z ##[endgroup]
+2022-11-22T05:58:37.9652919Z ##[group]/datum/unit_test/reagent_mob_expose
+2022-11-22T05:58:37.9929781Z
+2022-11-22T05:58:37.9930884Z [1;32mPASS[0m /datum/unit_test/reagent_mob_expose 0s
+2022-11-22T05:58:37.9932053Z ##[endgroup]
+2022-11-22T05:58:38.0197685Z ##[group]/datum/unit_test/reagent_mob_procs
+2022-11-22T05:58:38.0416951Z
+2022-11-22T05:58:38.0417978Z [1;32mPASS[0m /datum/unit_test/reagent_mob_procs 0s
+2022-11-22T05:58:38.0420890Z ##[endgroup]
+2022-11-22T05:58:38.0622397Z ##[group]/datum/unit_test/reagent_names
+2022-11-22T05:58:38.8276671Z
+2022-11-22T05:58:38.8277981Z [1;32mPASS[0m /datum/unit_test/reagent_names 0.8s
+2022-11-22T05:58:38.8278989Z ##[endgroup]
+2022-11-22T05:58:39.5940322Z ##[group]/datum/unit_test/reagent_recipe_collisions
+2022-11-22T05:58:39.9910847Z
+2022-11-22T05:58:39.9911887Z [1;32mPASS[0m /datum/unit_test/reagent_recipe_collisions 0.4s
+2022-11-22T05:58:39.9912840Z ##[endgroup]
+2022-11-22T05:58:40.3577765Z ##[group]/datum/unit_test/reagent_transfer
+2022-11-22T05:58:40.3582341Z
+2022-11-22T05:58:40.3583185Z [1;32mPASS[0m /datum/unit_test/reagent_transfer 0s
+2022-11-22T05:58:40.3584011Z ##[endgroup]
+2022-11-22T05:58:40.3745578Z ##[group]/datum/unit_test/stop_drop_and_roll
+2022-11-22T05:58:40.3962558Z
+2022-11-22T05:58:40.3963493Z [1;32mPASS[0m /datum/unit_test/stop_drop_and_roll 0s
+2022-11-22T05:58:40.3965748Z ##[endgroup]
+2022-11-22T05:58:40.4169199Z ##[group]/datum/unit_test/container_resist
+2022-11-22T05:58:40.4450945Z
+2022-11-22T05:58:40.4452010Z [1;32mPASS[0m /datum/unit_test/container_resist 0s
+2022-11-22T05:58:40.4452942Z ##[endgroup]
+2022-11-22T05:58:40.4681974Z ##[group]/datum/unit_test/get_message_mods
+2022-11-22T05:58:40.4890976Z
+2022-11-22T05:58:40.4891902Z [1;32mPASS[0m /datum/unit_test/get_message_mods 0s
+2022-11-22T05:58:40.4938745Z ##[endgroup]
+2022-11-22T05:58:40.5092622Z ##[group]/datum/unit_test/say_signal
+2022-11-22T05:58:40.5109636Z
+2022-11-22T05:58:40.5110057Z [1;32mPASS[0m /datum/unit_test/say_signal 0s
+2022-11-22T05:58:40.5110529Z ##[endgroup]
+2022-11-22T05:58:40.5273081Z ##[group]/datum/unit_test/screenshot_antag_icons
+2022-11-22T05:58:40.5292264Z screenshot_antag_icons_fugitive was put in data/screenshots_new
+2022-11-22T05:58:40.5297917Z screenshot_antag_icons_loneoperative was put in data/screenshots_new
+2022-11-22T05:58:40.5648778Z screenshot_antag_icons_sentiencepotionspawn was put in data/screenshots_new
+2022-11-22T05:58:40.5657229Z screenshot_antag_icons_traitor was put in data/screenshots_new
+2022-11-22T05:58:40.6056549Z screenshot_antag_icons_malfai was put in data/screenshots_new
+2022-11-22T05:58:40.6093403Z screenshot_antag_icons_bloodbrother was put in data/screenshots_new
+2022-11-22T05:58:40.6099494Z screenshot_antag_icons_changeling was put in data/screenshots_new
+2022-11-22T05:58:40.6141861Z screenshot_antag_icons_heretic was put in data/screenshots_new
+2022-11-22T05:58:40.6152817Z screenshot_antag_icons_wizard was put in data/screenshots_new
+2022-11-22T05:58:40.6187229Z screenshot_antag_icons_cultist was put in data/screenshots_new
+2022-11-22T05:58:40.6199509Z screenshot_antag_icons_operative was put in data/screenshots_new
+2022-11-22T05:58:40.6212847Z screenshot_antag_icons_clownoperative was put in data/screenshots_new
+2022-11-22T05:58:40.6234689Z screenshot_antag_icons_headrevolutionary was put in data/screenshots_new
+2022-11-22T05:58:40.6235113Z screenshot_antag_icons_syndicateinfiltrator was put in data/screenshots_new
+2022-11-22T05:58:40.6235503Z screenshot_antag_icons_provocateur was put in data/screenshots_new
+2022-11-22T05:58:40.6235874Z screenshot_antag_icons_hereticsmuggler was put in data/screenshots_new
+2022-11-22T05:58:40.6236247Z screenshot_antag_icons_wizardmidround was put in data/screenshots_new
+2022-11-22T05:58:40.6236614Z screenshot_antag_icons_operativemidround was put in data/screenshots_new
+2022-11-22T05:58:40.6888373Z screenshot_antag_icons_blob was put in data/screenshots_new
+2022-11-22T05:58:40.6981477Z screenshot_antag_icons_xenomorph was put in data/screenshots_new
+2022-11-22T05:58:40.6987596Z screenshot_antag_icons_nightmare was put in data/screenshots_new
+2022-11-22T05:58:40.7057997Z screenshot_antag_icons_spacedragon was put in data/screenshots_new
+2022-11-22T05:58:40.7064121Z screenshot_antag_icons_abductor was put in data/screenshots_new
+2022-11-22T05:58:40.7069837Z screenshot_antag_icons_spaceninja was put in data/screenshots_new
+2022-11-22T05:58:40.7301887Z screenshot_antag_icons_revenant was put in data/screenshots_new
+2022-11-22T05:58:40.7320268Z screenshot_antag_icons_sentientdisease was put in data/screenshots_new
+2022-11-22T05:58:40.7321448Z screenshot_antag_icons_syndicatesleeperagent was put in data/screenshots_new
+2022-11-22T05:58:40.7464714Z screenshot_antag_icons_blobinfection was put in data/screenshots_new
+2022-11-22T05:58:40.7484344Z screenshot_antag_icons_obsessed was put in data/screenshots_new
+2022-11-22T05:58:40.7485272Z screenshot_antag_icons_malfaimidround was put in data/screenshots_new
+2022-11-22T05:58:40.7485491Z
+2022-11-22T05:58:40.7486250Z [1;32mPASS[0m /datum/unit_test/screenshot_antag_icons 0.2s
+2022-11-22T05:58:40.7487461Z ##[endgroup]
+2022-11-22T05:58:40.9148897Z ##[group]/datum/unit_test/screenshot_basic
+2022-11-22T05:58:40.9152865Z screenshot_basic_red was put in data/screenshots_new
+2022-11-22T05:58:40.9153089Z
+2022-11-22T05:58:40.9153840Z [1;32mPASS[0m /datum/unit_test/screenshot_basic 0s
+2022-11-22T05:58:40.9154358Z ##[endgroup]
+2022-11-22T05:58:40.9323137Z ##[group]/datum/unit_test/screenshot_humanoids
+2022-11-22T05:58:41.4860399Z screenshot_humanoids__datum_species_lizard was put in data/screenshots_new
+2022-11-22T05:58:42.1812125Z screenshot_humanoids__datum_species_moth was put in data/screenshots_new
+2022-11-22T05:58:42.7396430Z screenshot_humanoids__datum_species_shadow was put in data/screenshots_new
+2022-11-22T05:58:42.9412448Z screenshot_humanoids__datum_species_shadow_nightmare was put in data/screenshots_new
+2022-11-22T05:58:43.4856493Z screenshot_humanoids__datum_species_abductor was put in data/screenshots_new
+2022-11-22T05:58:43.9790579Z screenshot_humanoids__datum_species_android was put in data/screenshots_new
+2022-11-22T05:58:44.4705884Z screenshot_humanoids__datum_species_dullahan was put in data/screenshots_new
+2022-11-22T05:58:44.9659470Z screenshot_humanoids__datum_species_ethereal was put in data/screenshots_new
+2022-11-22T05:58:45.5314689Z screenshot_humanoids__datum_species_human was put in data/screenshots_new
+2022-11-22T05:58:46.1537771Z screenshot_humanoids__datum_species_human_felinid was put in data/screenshots_new
+2022-11-22T05:58:46.8079860Z screenshot_humanoids__datum_species_human_krokodil_addict was put in data/screenshots_new
+2022-11-22T05:58:47.4445783Z screenshot_humanoids__datum_species_fly was put in data/screenshots_new
+2022-11-22T05:58:47.9686077Z screenshot_humanoids__datum_species_golem was put in data/screenshots_new
+2022-11-22T05:58:48.4853290Z screenshot_humanoids__datum_species_golem_adamantine was put in data/screenshots_new
+2022-11-22T05:58:49.0233415Z screenshot_humanoids__datum_species_golem_plasma was put in data/screenshots_new
+2022-11-22T05:58:49.5402611Z screenshot_humanoids__datum_species_golem_diamond was put in data/screenshots_new
+2022-11-22T05:58:50.0619605Z screenshot_humanoids__datum_species_golem_gold was put in data/screenshots_new
+2022-11-22T05:58:50.5960700Z screenshot_humanoids__datum_species_golem_silver was put in data/screenshots_new
+2022-11-22T05:58:51.1268001Z screenshot_humanoids__datum_species_golem_plasteel was put in data/screenshots_new
+2022-11-22T05:58:51.6041410Z screenshot_humanoids__datum_species_golem_titanium was put in data/screenshots_new
+2022-11-22T05:58:52.1421369Z screenshot_humanoids__datum_species_golem_plastitanium was put in data/screenshots_new
+2022-11-22T05:58:52.6646881Z screenshot_humanoids__datum_species_golem_alloy was put in data/screenshots_new
+2022-11-22T05:58:53.1822437Z screenshot_humanoids__datum_species_golem_wood was put in data/screenshots_new
+2022-11-22T05:58:53.7093546Z screenshot_humanoids__datum_species_golem_uranium was put in data/screenshots_new
+2022-11-22T05:58:54.2289778Z screenshot_humanoids__datum_species_golem_sand was put in data/screenshots_new
+2022-11-22T05:58:54.7551132Z screenshot_humanoids__datum_species_golem_glass was put in data/screenshots_new
+2022-11-22T05:58:55.2923350Z screenshot_humanoids__datum_species_golem_bluespace was put in data/screenshots_new
+2022-11-22T05:58:55.8209063Z screenshot_humanoids__datum_species_golem_bananium was put in data/screenshots_new
+2022-11-22T05:58:56.2556562Z screenshot_humanoids__datum_species_golem_runic was put in data/screenshots_new
+2022-11-22T05:58:56.8660417Z screenshot_humanoids__datum_species_golem_cloth was put in data/screenshots_new
+2022-11-22T05:58:57.3592195Z screenshot_humanoids__datum_species_golem_plastic was put in data/screenshots_new
+2022-11-22T05:58:57.9036879Z screenshot_humanoids__datum_species_golem_bronze was put in data/screenshots_new
+2022-11-22T05:58:58.3538566Z screenshot_humanoids__datum_species_golem_cardboard was put in data/screenshots_new
+2022-11-22T05:58:58.9038125Z screenshot_humanoids__datum_species_golem_leather was put in data/screenshots_new
+2022-11-22T05:58:59.3259282Z screenshot_humanoids__datum_species_golem_durathread was put in data/screenshots_new
+2022-11-22T05:58:59.7415514Z screenshot_humanoids__datum_species_golem_bone was put in data/screenshots_new
+2022-11-22T05:59:00.1624246Z screenshot_humanoids__datum_species_golem_snow was put in data/screenshots_new
+2022-11-22T05:59:00.7017097Z screenshot_humanoids__datum_species_golem_mhydrogen was put in data/screenshots_new
+2022-11-22T05:59:01.2962128Z screenshot_humanoids__datum_species_jelly was put in data/screenshots_new
+2022-11-22T05:59:01.8914644Z screenshot_humanoids__datum_species_jelly_slime was put in data/screenshots_new
+2022-11-22T05:59:02.4944760Z screenshot_humanoids__datum_species_jelly_luminescent was put in data/screenshots_new
+2022-11-22T05:59:03.1051896Z screenshot_humanoids__datum_species_jelly_stargazer was put in data/screenshots_new
+2022-11-22T05:59:03.6316289Z screenshot_humanoids__datum_species_lizard_ashwalker was put in data/screenshots_new
+2022-11-22T05:59:04.1732683Z screenshot_humanoids__datum_species_lizard_silverscale was put in data/screenshots_new
+2022-11-22T05:59:04.3219378Z screenshot_humanoids__datum_species_monkey was put in data/screenshots_new
+2022-11-22T05:59:04.7808061Z screenshot_humanoids__datum_species_mush was put in data/screenshots_new
+2022-11-22T05:59:05.2791916Z screenshot_humanoids__datum_species_plasmaman was put in data/screenshots_new
+2022-11-22T05:59:05.8726674Z screenshot_humanoids__datum_species_pod was put in data/screenshots_new
+2022-11-22T05:59:06.4421620Z screenshot_humanoids__datum_species_skeleton was put in data/screenshots_new
+2022-11-22T05:59:07.0386329Z screenshot_humanoids__datum_species_snail was put in data/screenshots_new
+2022-11-22T05:59:07.6272099Z screenshot_humanoids__datum_species_vampire was put in data/screenshots_new
+2022-11-22T05:59:08.2909176Z screenshot_humanoids__datum_species_zombie was put in data/screenshots_new
+2022-11-22T05:59:09.0366652Z screenshot_humanoids__datum_species_zombie_infectious was put in data/screenshots_new
+2022-11-22T05:59:09.0367022Z
+2022-11-22T05:59:09.0367523Z [1;32mPASS[0m /datum/unit_test/screenshot_humanoids 28.1s
+2022-11-22T05:59:09.0368166Z ##[endgroup]
+2022-11-22T05:59:37.6866607Z ##[group]/datum/unit_test/screenshot_saturnx
+2022-11-22T05:59:37.9124865Z screenshot_saturnx_invisibility was put in data/screenshots_new
+2022-11-22T05:59:37.9125745Z
+2022-11-22T05:59:37.9127093Z [1;32mPASS[0m /datum/unit_test/screenshot_saturnx 0.3s
+2022-11-22T05:59:37.9127697Z ##[endgroup]
+2022-11-22T05:59:38.0853482Z ##[group]/datum/unit_test/security_officer_roundstart_distribution
+2022-11-22T05:59:38.2014087Z
+2022-11-22T05:59:38.2015341Z [1;32mPASS[0m /datum/unit_test/security_officer_roundstart_distribution 0.2s
+2022-11-22T05:59:38.2015989Z ##[endgroup]
+2022-11-22T05:59:38.3357446Z ##[group]/datum/unit_test/security_officer_latejoin_distribution
+2022-11-22T05:59:38.7057220Z
+2022-11-22T05:59:38.7058863Z [1;32mPASS[0m /datum/unit_test/security_officer_latejoin_distribution 0.4s
+2022-11-22T05:59:38.7060729Z ##[endgroup]
+2022-11-22T05:59:39.2017954Z ##[group]/datum/unit_test/security_levels
+2022-11-22T05:59:39.2018640Z
+2022-11-22T05:59:39.2021443Z [1;32mPASS[0m /datum/unit_test/security_levels 0s
+2022-11-22T05:59:39.2024185Z ##[endgroup]
+2022-11-22T05:59:39.2192675Z ##[group]/datum/unit_test/servingtray
+2022-11-22T05:59:39.2471606Z
+2022-11-22T05:59:39.2472412Z [1;32mPASS[0m /datum/unit_test/servingtray 0s
+2022-11-22T05:59:39.2475270Z ##[endgroup]
+2022-11-22T05:59:39.2694155Z ##[group]/datum/unit_test/simple_animal_freeze
+2022-11-22T05:59:39.2703215Z
+2022-11-22T05:59:39.2703882Z [1;32mPASS[0m /datum/unit_test/simple_animal_freeze 0s
+2022-11-22T05:59:39.2704730Z ##[endgroup]
+2022-11-22T05:59:39.2859664Z ##[group]/datum/unit_test/siunit
+2022-11-22T05:59:39.2860192Z
+2022-11-22T05:59:39.2905239Z [1;32mPASS[0m /datum/unit_test/siunit 0s
+2022-11-22T05:59:39.2905758Z ##[endgroup]
+2022-11-22T05:59:39.3380495Z ##[group]/datum/unit_test/slips
+2022-11-22T05:59:39.3816463Z
+2022-11-22T05:59:39.3817092Z [1;32mPASS[0m /datum/unit_test/slips 0s
+2022-11-22T05:59:39.3817715Z ##[endgroup]
+2022-11-22T05:59:39.4069986Z ##[group]/datum/unit_test/spawn_humans
+2022-11-22T05:59:44.4570883Z
+2022-11-22T05:59:44.4573502Z [1;32mPASS[0m /datum/unit_test/spawn_humans 5s
+2022-11-22T05:59:44.4574683Z ##[endgroup]
+2022-11-22T05:59:44.4963535Z ##[group]/datum/unit_test/spawn_mobs
+2022-11-22T05:59:44.5574109Z
+2022-11-22T05:59:44.5575293Z [1;32mPASS[0m /datum/unit_test/spawn_mobs 0.1s
+2022-11-22T05:59:44.5575900Z ##[endgroup]
+2022-11-22T05:59:44.6565999Z ##[group]/datum/unit_test/species_change_clothing
+2022-11-22T05:59:44.7330373Z
+2022-11-22T05:59:44.7331058Z [1;32mPASS[0m /datum/unit_test/species_change_clothing 0.1s
+2022-11-22T05:59:44.7331700Z ##[endgroup]
+2022-11-22T05:59:44.7549387Z ##[group]/datum/unit_test/species_change_organs
+2022-11-22T05:59:44.8048767Z
+2022-11-22T05:59:44.8049950Z [1;32mPASS[0m /datum/unit_test/species_change_organs 0.1s
+2022-11-22T05:59:44.8051289Z ##[endgroup]
+2022-11-22T05:59:44.8279792Z ##[group]/datum/unit_test/species_config_sanity
+2022-11-22T05:59:44.8280594Z
+2022-11-22T05:59:44.8283317Z [1;32mPASS[0m /datum/unit_test/species_config_sanity 0s
+2022-11-22T05:59:44.8284090Z ##[endgroup]
+2022-11-22T05:59:44.8437473Z ##[group]/datum/unit_test/species_unique_id
+2022-11-22T05:59:44.8438066Z
+2022-11-22T05:59:44.8438608Z [1;32mPASS[0m /datum/unit_test/species_unique_id 0s
+2022-11-22T05:59:44.8439291Z ##[endgroup]
+2022-11-22T05:59:44.8779329Z ##[group]/datum/unit_test/species_whitelist_check
+2022-11-22T05:59:44.8779795Z
+2022-11-22T05:59:44.8782619Z [1;32mPASS[0m /datum/unit_test/species_whitelist_check 0s
+2022-11-22T05:59:44.8783319Z ##[endgroup]
+2022-11-22T05:59:44.8936699Z ##[group]/datum/unit_test/spell_invocations
+2022-11-22T05:59:44.8937279Z
+2022-11-22T05:59:44.8939987Z [1;32mPASS[0m /datum/unit_test/spell_invocations 0s
+2022-11-22T05:59:44.8940786Z ##[endgroup]
+2022-11-22T05:59:45.0281600Z ##[group]/datum/unit_test/mind_swap_spell
+2022-11-22T05:59:45.0736031Z
+2022-11-22T05:59:45.0737123Z [1;32mPASS[0m /datum/unit_test/mind_swap_spell 0s
+2022-11-22T05:59:45.0738202Z ##[endgroup]
+2022-11-22T05:59:45.2297228Z ##[group]/datum/unit_test/spell_names
+2022-11-22T05:59:45.2298287Z
+2022-11-22T05:59:45.2299157Z [1;32mPASS[0m /datum/unit_test/spell_names 0s
+2022-11-22T05:59:45.2299995Z ##[endgroup]
+2022-11-22T05:59:45.2458199Z ##[group]/datum/unit_test/shapeshift_spell_validity
+2022-11-22T05:59:45.2460243Z
+2022-11-22T05:59:45.2460928Z [1;32mPASS[0m /datum/unit_test/shapeshift_spell_validity 0s
+2022-11-22T05:59:45.2461604Z ##[endgroup]
+2022-11-22T05:59:45.2618397Z ##[group]/datum/unit_test/shapeshift_spell
+2022-11-22T05:59:45.4081241Z ##[error]Shapeshift spell: Dragon Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4091958Z ##[error]Shapeshift spell: Dragon Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4093892Z ##[error]Shapeshift spell: Polar Bear Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4095548Z ##[error]Shapeshift spell: Polar Bear Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4097222Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape mouse. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4098881Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape corgi. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4100589Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape chaos magicarp. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4102710Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape ED-209 Security Robot. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4104442Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape viper spider. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4106168Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape Juggernaut. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4107958Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape mouse. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4110135Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape corgi. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4112154Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape chaos magicarp. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4114456Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape ED-209 Security Robot. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4116528Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape viper spider. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4118582Z ##[error]Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape Juggernaut. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron).
+2022-11-22T05:59:45.4119786Z FAILURE #1: Shapeshift spell: Dragon Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4120672Z FAILURE #2: Shapeshift spell: Dragon Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4121597Z FAILURE #3: Shapeshift spell: Polar Bear Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4122479Z FAILURE #4: Shapeshift spell: Polar Bear Form failed to transform the dummy into the shape . (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4123517Z FAILURE #5: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape mouse. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4124518Z FAILURE #6: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape corgi. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4125489Z FAILURE #7: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape chaos magicarp. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4126570Z FAILURE #8: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape ED-209 Security Robot. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4127396Z FAILURE #9: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape viper spider. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4128221Z FAILURE #10: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape Juggernaut. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4129047Z FAILURE #11: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape mouse. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4129842Z FAILURE #12: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape corgi. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4130862Z FAILURE #13: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape chaos magicarp. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4131926Z FAILURE #14: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape ED-209 Security Robot. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4132782Z FAILURE #15: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape viper spider. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4133589Z FAILURE #16: Shapeshift spell: Wild Shapeshift failed to transform the dummy into the shape Juggernaut. (Pablo Pfeifer was located within the floor, which is a /turf/open/floor/iron). at code/modules/unit_tests/spell_shapeshift.dm:65
+2022-11-22T05:59:45.4134297Z ##[endgroup]
+2022-11-22T05:59:45.4135321Z ##[error][1;31mFAIL[0m /datum/unit_test/shapeshift_spell 0.2s
+2022-11-22T05:59:45.5762391Z ##[group]/datum/unit_test/shapeshift_holoparasites
+2022-11-22T05:59:45.6070063Z
+2022-11-22T05:59:45.6070794Z [1;32mPASS[0m /datum/unit_test/shapeshift_holoparasites 0.1s
+2022-11-22T05:59:45.6071835Z ##[endgroup]
+2022-11-22T05:59:45.6299960Z ##[group]/datum/unit_test/spritesheets
+2022-11-22T05:59:45.6328891Z
+2022-11-22T05:59:45.6329636Z [1;32mPASS[0m /datum/unit_test/spritesheets 0s
+2022-11-22T05:59:45.6330450Z ##[endgroup]
+2022-11-22T05:59:45.6504395Z ##[group]/datum/unit_test/stack_singular_name
+2022-11-22T05:59:45.6504677Z
+2022-11-22T05:59:45.6505199Z [1;32mPASS[0m /datum/unit_test/stack_singular_name 0s
+2022-11-22T05:59:45.6506428Z ##[endgroup]
+2022-11-22T05:59:45.6810947Z ##[group]/datum/unit_test/station_traits
+2022-11-22T05:59:45.6811136Z
+2022-11-22T05:59:45.6811839Z [1;32mPASS[0m /datum/unit_test/station_traits 0s
+2022-11-22T05:59:45.6812628Z ##[endgroup]
+2022-11-22T05:59:45.6968300Z ##[group]/datum/unit_test/stomach
+2022-11-22T05:59:45.7241514Z
+2022-11-22T05:59:45.7242199Z [1;32mPASS[0m /datum/unit_test/stomach 0.1s
+2022-11-22T05:59:45.7242846Z ##[endgroup]
+2022-11-22T05:59:45.7453036Z ##[group]/datum/unit_test/strip_menu_ui_status
+2022-11-22T05:59:45.7868616Z
+2022-11-22T05:59:45.7869391Z [1;32mPASS[0m /datum/unit_test/strip_menu_ui_status 0s
+2022-11-22T05:59:45.7870070Z ##[endgroup]
+2022-11-22T05:59:45.8340124Z ##[group]/datum/unit_test/subsystem_init
+2022-11-22T05:59:45.8340353Z
+2022-11-22T05:59:45.8340796Z [1;32mPASS[0m /datum/unit_test/subsystem_init 0s
+2022-11-22T05:59:45.8341746Z ##[endgroup]
+2022-11-22T05:59:45.8497480Z ##[group]/datum/unit_test/suit_storage_icons
+2022-11-22T05:59:47.2782798Z 1 - /obj/item/ammo_casing/shotgun using invalid worn_icon_state, "shell"
+2022-11-22T05:59:47.2904416Z 2 - /obj/item/gun/ballistic/shotgun/hook using invalid icon_state, "hookshotgun"
+2022-11-22T05:59:47.3032597Z 3 - /obj/item/gun/ballistic/automatic/surplus using invalid icon_state, "surplus"
+2022-11-22T05:59:47.3160623Z 4 - /obj/item/gun/energy/beam_rifle using invalid icon_state, "esniper"
+2022-11-22T05:59:47.3179488Z 5 - /obj/item/gun/energy/lasercannon using invalid icon_state, "lasercannon"
+2022-11-22T05:59:47.3204942Z 6 - /obj/item/gun/energy/ionrifle using invalid icon_state, "ionrifle"
+2022-11-22T05:59:47.3205749Z 7 - /obj/item/gun/energy/ionrifle/carbine using invalid icon_state, "ioncarbine"
+2022-11-22T05:59:47.3333663Z 8 - /obj/item/tome using invalid icon_state, "tome"
+2022-11-22T05:59:47.3367736Z 9 - /obj/item/melee/sickly_blade/void using invalid icon_state, "void_blade"
+2022-11-22T05:59:47.3379696Z 10 - /obj/item/nullrod/staff using invalid icon_state, "godstaff-red"
+2022-11-22T05:59:47.3382004Z 11 - /obj/item/nullrod/staff/blue using invalid icon_state, "godstaff-blue"
+2022-11-22T05:59:47.3455165Z 12 - /obj/item/nullrod/tribal_knife using invalid icon_state, "crysknife"
+2022-11-22T05:59:47.3462398Z 13 - /obj/item/nullrod/spear using invalid icon_state, "ratvarian_spear"
+2022-11-22T05:59:47.3471005Z 14 - /obj/item/candle using invalid icon_state, "candle1"
+2022-11-22T05:59:47.3818626Z 15 - /obj/item/toy/eightball using invalid icon_state, "eightball"
+2022-11-22T05:59:47.3819882Z 16 - /obj/item/toy/mecha using invalid icon_state, "fivestarstoy"
+2022-11-22T05:59:47.3822376Z 17 - /obj/item/toy/mecha/ripley using invalid icon_state, "ripleytoy"
+2022-11-22T05:59:47.3824854Z 18 - /obj/item/toy/mecha/ripleymkii using invalid icon_state, "ripleymkiitoy"
+2022-11-22T05:59:47.3827367Z 19 - /obj/item/toy/mecha/hauler using invalid icon_state, "haulertoy"
+2022-11-22T05:59:47.3829817Z 20 - /obj/item/toy/mecha/clarke using invalid icon_state, "clarketoy"
+2022-11-22T05:59:47.3832329Z 21 - /obj/item/toy/mecha/odysseus using invalid icon_state, "odysseustoy"
+2022-11-22T05:59:47.3834765Z 22 - /obj/item/toy/mecha/gygax using invalid icon_state, "gygaxtoy"
+2022-11-22T05:59:47.3837259Z 23 - /obj/item/toy/mecha/durand using invalid icon_state, "durandtoy"
+2022-11-22T05:59:47.3839922Z 24 - /obj/item/toy/mecha/savannahivanov using invalid icon_state, "savannahivanovtoy"
+2022-11-22T05:59:47.3842813Z 25 - /obj/item/toy/mecha/phazon using invalid icon_state, "phazontoy"
+2022-11-22T05:59:47.3845150Z 26 - /obj/item/toy/mecha/honk using invalid icon_state, "honktoy"
+2022-11-22T05:59:47.3847669Z 27 - /obj/item/toy/mecha/darkgygax using invalid icon_state, "darkgygaxtoy"
+2022-11-22T05:59:47.3850308Z 28 - /obj/item/toy/mecha/mauler using invalid icon_state, "maulertoy"
+2022-11-22T05:59:47.3852869Z 29 - /obj/item/toy/mecha/darkhonk using invalid icon_state, "darkhonktoy"
+2022-11-22T05:59:47.3855423Z 30 - /obj/item/toy/mecha/deathripley using invalid icon_state, "deathripleytoy"
+2022-11-22T05:59:47.3857917Z 31 - /obj/item/toy/mecha/reticence using invalid icon_state, "reticencetoy"
+2022-11-22T05:59:47.3860420Z 32 - /obj/item/toy/mecha/marauder using invalid icon_state, "maraudertoy"
+2022-11-22T05:59:47.3863149Z 33 - /obj/item/toy/mecha/seraph using invalid icon_state, "seraphtoy"
+2022-11-22T05:59:47.3865478Z 34 - /obj/item/toy/mecha/firefighter using invalid icon_state, "firefightertoy"
+2022-11-22T05:59:47.3867946Z 35 - /obj/item/toy/waterballoon using invalid icon_state, "waterballoon-e"
+2022-11-22T05:59:47.3870341Z 36 - /obj/item/toy/balloon using invalid icon_state, "balloon"
+2022-11-22T05:59:47.3872883Z 37 - /obj/item/toy/balloon/corgi using invalid icon_state, "corgi"
+2022-11-22T05:59:47.3875334Z 38 - /obj/item/toy/balloon/syndicate using invalid icon_state, "syndballoon"
+2022-11-22T05:59:47.3877875Z 39 - /obj/item/toy/balloon/arrest using invalid icon_state, "arrestballoon"
+2022-11-22T05:59:47.3881362Z 40 - /obj/item/toy/captainsaid using invalid icon_state, "captainsaid_off"
+2022-11-22T05:59:47.3882960Z 41 - /obj/item/toy/spinningtoy using invalid icon_state, "singularity_s1"
+2022-11-22T05:59:47.3887746Z 42 - /obj/item/toy/ammo/gun using invalid icon_state, "357OLD-7"
+2022-11-22T05:59:47.3890028Z 43 - /obj/item/toy/sword using invalid icon_state, "e_sword"
+2022-11-22T05:59:47.3892708Z 44 - /obj/item/toy/foamblade using invalid icon_state, "foamblade"
+2022-11-22T05:59:47.3895134Z 45 - /obj/item/toy/windup_toolbox using invalid icon_state, "green"
+2022-11-22T05:59:47.3899921Z 46 - /obj/item/toy/snappop using invalid icon_state, "snappop"
+2022-11-22T05:59:47.3902685Z 47 - /obj/item/toy/talking using invalid icon_state, "owlprize"
+2022-11-22T05:59:47.3904842Z 48 - /obj/item/toy/talking/ai using invalid icon_state, "AI"
+2022-11-22T05:59:47.3907306Z 49 - /obj/item/toy/talking/codex_gigas using invalid icon_state, "demonomicon"
+2022-11-22T05:59:47.3909825Z 50 - /obj/item/toy/talking/griffin using invalid icon_state, "griffinprize"
+2022-11-22T05:59:47.3912295Z 51 - /obj/item/toy/nuke using invalid icon_state, "nuketoyidle"
+2022-11-22T05:59:47.3914956Z 52 - /obj/item/toy/minimeteor using invalid icon_state, "minimeteor"
+2022-11-22T05:59:47.3917314Z 53 - /obj/item/toy/redbutton using invalid icon_state, "bigred"
+2022-11-22T05:59:47.3919850Z 54 - /obj/item/toy/snowball using invalid icon_state, "snowball"
+2022-11-22T05:59:47.3922324Z 55 - /obj/item/toy/beach_ball using invalid icon_state, "ball"
+2022-11-22T05:59:47.3924942Z 56 - /obj/item/toy/beach_ball/baseball using invalid icon_state, "baseball"
+2022-11-22T05:59:47.3927403Z 57 - /obj/item/toy/beach_ball/holoball using invalid icon_state, "basketball"
+2022-11-22T05:59:47.3930060Z 58 - /obj/item/toy/beach_ball/holoball/dodgeball using invalid icon_state, "dodgeball"
+2022-11-22T05:59:47.3937167Z 59 - /obj/item/toy/toy_xeno using invalid icon_state, "toy_xeno"
+2022-11-22T05:59:47.3939549Z 60 - /obj/item/toy/cattoy using invalid icon_state, "toy_mouse"
+2022-11-22T05:59:47.3942078Z 61 - /obj/item/toy/figure using invalid icon_state, "nuketoy"
+2022-11-22T05:59:47.3944589Z 62 - /obj/item/toy/figure/cmo using invalid icon_state, "cmo"
+2022-11-22T05:59:47.3947155Z 63 - /obj/item/toy/figure/assistant using invalid icon_state, "assistant"
+2022-11-22T05:59:47.3949638Z 64 - /obj/item/toy/figure/atmos using invalid icon_state, "atmos"
+2022-11-22T05:59:47.3952141Z 65 - /obj/item/toy/figure/bartender using invalid icon_state, "bartender"
+2022-11-22T05:59:47.3954628Z 66 - /obj/item/toy/figure/borg using invalid icon_state, "borg"
+2022-11-22T05:59:47.3957148Z 67 - /obj/item/toy/figure/botanist using invalid icon_state, "botanist"
+2022-11-22T05:59:47.3959629Z 68 - /obj/item/toy/figure/captain using invalid icon_state, "captain"
+2022-11-22T05:59:47.3962149Z 69 - /obj/item/toy/figure/cargotech using invalid icon_state, "cargotech"
+2022-11-22T05:59:47.3964605Z 70 - /obj/item/toy/figure/ce using invalid icon_state, "ce"
+2022-11-22T05:59:47.3967148Z 71 - /obj/item/toy/figure/chaplain using invalid icon_state, "chaplain"
+2022-11-22T05:59:47.3969647Z 72 - /obj/item/toy/figure/chef using invalid icon_state, "chef"
+2022-11-22T05:59:47.3972328Z 73 - /obj/item/toy/figure/chemist using invalid icon_state, "chemist"
+2022-11-22T05:59:47.3975052Z 74 - /obj/item/toy/figure/clown using invalid icon_state, "clown"
+2022-11-22T05:59:47.3977375Z 75 - /obj/item/toy/figure/ian using invalid icon_state, "ian"
+2022-11-22T05:59:47.3979914Z 76 - /obj/item/toy/figure/detective using invalid icon_state, "detective"
+2022-11-22T05:59:47.3982376Z 77 - /obj/item/toy/figure/dsquad using invalid icon_state, "dsquad"
+2022-11-22T05:59:47.3984915Z 78 - /obj/item/toy/figure/engineer using invalid icon_state, "engineer"
+2022-11-22T05:59:47.3987388Z 79 - /obj/item/toy/figure/geneticist using invalid icon_state, "geneticist"
+2022-11-22T05:59:47.3989933Z 80 - /obj/item/toy/figure/hop using invalid icon_state, "hop"
+2022-11-22T05:59:47.3992345Z 81 - /obj/item/toy/figure/hos using invalid icon_state, "hos"
+2022-11-22T05:59:47.3994832Z 82 - /obj/item/toy/figure/qm using invalid icon_state, "qm"
+2022-11-22T05:59:47.3997314Z 83 - /obj/item/toy/figure/janitor using invalid icon_state, "janitor"
+2022-11-22T05:59:47.3999822Z 84 - /obj/item/toy/figure/lawyer using invalid icon_state, "lawyer"
+2022-11-22T05:59:47.4002303Z 85 - /obj/item/toy/figure/curator using invalid icon_state, "curator"
+2022-11-22T05:59:47.4004824Z 86 - /obj/item/toy/figure/md using invalid icon_state, "md"
+2022-11-22T05:59:47.4007316Z 87 - /obj/item/toy/figure/paramedic using invalid icon_state, "paramedic"
+2022-11-22T05:59:47.4009871Z 88 - /obj/item/toy/figure/psychologist using invalid icon_state, "psychologist"
+2022-11-22T05:59:47.4012455Z 89 - /obj/item/toy/figure/prisoner using invalid icon_state, "prisoner"
+2022-11-22T05:59:47.4015072Z 90 - /obj/item/toy/figure/mime using invalid icon_state, "mime"
+2022-11-22T05:59:47.4017416Z 91 - /obj/item/toy/figure/miner using invalid icon_state, "miner"
+2022-11-22T05:59:47.4019976Z 92 - /obj/item/toy/figure/ninja using invalid icon_state, "ninja"
+2022-11-22T05:59:47.4022438Z 93 - /obj/item/toy/figure/wizard using invalid icon_state, "wizard"
+2022-11-22T05:59:47.4024907Z 94 - /obj/item/toy/figure/rd using invalid icon_state, "rd"
+2022-11-22T05:59:47.4027464Z 95 - /obj/item/toy/figure/roboticist using invalid icon_state, "roboticist"
+2022-11-22T05:59:47.4029958Z 96 - /obj/item/toy/figure/scientist using invalid icon_state, "scientist"
+2022-11-22T05:59:47.4032492Z 97 - /obj/item/toy/figure/syndie using invalid icon_state, "syndie"
+2022-11-22T05:59:47.4035062Z 98 - /obj/item/toy/figure/secofficer using invalid icon_state, "secofficer"
+2022-11-22T05:59:47.4037516Z 99 - /obj/item/toy/figure/virologist using invalid icon_state, "virologist"
+2022-11-22T05:59:47.4040034Z 100 - /obj/item/toy/figure/warden using invalid icon_state, "warden"
+2022-11-22T05:59:47.4042570Z 101 - /obj/item/toy/dummy using invalid icon_state, "puppet"
+2022-11-22T05:59:47.4045132Z 102 - /obj/item/toy/seashell using invalid icon_state, "shell1"
+2022-11-22T05:59:47.4047654Z 103 - /obj/item/toy/brokenradio using invalid icon_state, "broken_radio"
+2022-11-22T05:59:47.4050253Z 104 - /obj/item/toy/braintoy using invalid icon_state, "brain-old"
+2022-11-22T05:59:47.4055251Z 105 - /obj/item/toy/reality_pierce using invalid icon_state, "pierced_illusion"
+2022-11-22T05:59:47.4057520Z 106 - /obj/item/toy/foamfinger using invalid icon_state, "foamfinger"
+2022-11-22T05:59:47.4060004Z 107 - /obj/item/toy/intento using invalid icon_state, "blank"
+2022-11-22T05:59:47.4092596Z 108 - /obj/item/toy/sprayoncan using invalid icon_state, "sprayoncan"
+2022-11-22T05:59:47.4093827Z 109 - /obj/item/toy/xmas_cracker using invalid icon_state, "cracker"
+2022-11-22T05:59:47.4098242Z 110 - /obj/item/cultivator/rake using invalid icon_state, "rake"
+2022-11-22T05:59:47.4104109Z 111 - /obj/item/hatchet/wooden using invalid icon_state, "woodhatchet"
+2022-11-22T05:59:47.4106239Z 112 - /obj/item/hatchet/cutterblade using invalid icon_state, "cutterblade"
+2022-11-22T05:59:47.4792952Z 113 - /obj/item/reagent_containers/hypospray/medipen using invalid worn_icon_state, "medipen"
+2022-11-22T05:59:47.4928931Z 114 - /obj/item/storage/pill_bottle using invalid icon_state, "pill_canister"
+2022-11-22T05:59:47.4937506Z 115 - /obj/item/analyzer/ranged using invalid icon_state, "analyzerranged"
+2022-11-22T05:59:47.5463999Z 116 - /obj/item/organ/internal/monster_core using invalid icon_state, "hivelord_core"
+2022-11-22T05:59:47.5466585Z 117 - /obj/item/organ/internal/monster_core/brimdust_sac using invalid icon_state, "brim_sac"
+2022-11-22T05:59:47.5467229Z 118 - /obj/item/organ/internal/monster_core/regenerative_core/legion using invalid icon_state, "legion_core"
+2022-11-22T05:59:47.5469256Z 119 - /obj/item/organ/internal/monster_core/rush_gland using invalid icon_state, "lobster_gland"
+2022-11-22T05:59:47.5479181Z 120 - /obj/item/spear/bamboospear using invalid icon_state, "bamboo_spear0"
+2022-11-22T05:59:47.5517467Z 121 - /obj/item/abductor/gizmo using invalid icon_state, "gizmo_scan"
+2022-11-22T05:59:47.5518755Z 122 - /obj/item/abductor/silencer using invalid icon_state, "silencer"
+2022-11-22T05:59:47.5521102Z 123 - /obj/item/abductor/mind_device using invalid icon_state, "mind_device_message"
+2022-11-22T05:59:47.5536484Z 124 - /obj/item/claymore/cutlass using invalid worn_icon_state, "cutlass"
+2022-11-22T05:59:47.5540915Z 125 - /obj/item/claymore/highlander/robot using invalid icon_state, "claymore_cyborg"
+2022-11-22T05:59:47.5543262Z 126 - /obj/item/banner using invalid icon_state, "banner"
+2022-11-22T05:59:47.5545809Z 127 - /obj/item/banner/security using invalid icon_state, "banner_security"
+2022-11-22T05:59:47.5548315Z 128 - /obj/item/banner/medical using invalid icon_state, "banner_medical"
+2022-11-22T05:59:47.5550843Z 129 - /obj/item/banner/science using invalid icon_state, "banner_science"
+2022-11-22T05:59:47.5553341Z 130 - /obj/item/banner/cargo using invalid icon_state, "banner_cargo"
+2022-11-22T05:59:47.5555871Z 131 - /obj/item/banner/engineering using invalid icon_state, "banner_engineering"
+2022-11-22T05:59:47.5558379Z 132 - /obj/item/banner/red using invalid icon_state, "banner-red"
+2022-11-22T05:59:47.5560854Z 133 - /obj/item/banner/blue using invalid icon_state, "banner-blue"
+2022-11-22T05:59:47.5597308Z 134 - /obj/item/gun/magic/staff using invalid icon_state, "staff"
+2022-11-22T05:59:47.5598624Z 135 - /obj/item/gun/magic/staff/change using invalid icon_state, "staffofchange"
+2022-11-22T05:59:47.5601122Z 136 - /obj/item/gun/magic/staff/animate using invalid icon_state, "staffofanimation"
+2022-11-22T05:59:47.5603650Z 137 - /obj/item/gun/magic/staff/healing using invalid icon_state, "staffofhealing"
+2022-11-22T05:59:47.5606162Z 138 - /obj/item/gun/magic/staff/chaos using invalid icon_state, "staffofchaos"
+2022-11-22T05:59:47.5608674Z 139 - /obj/item/gun/magic/staff/door using invalid icon_state, "staffofdoor"
+2022-11-22T05:59:47.5611329Z 140 - /obj/item/gun/magic/staff/honk using invalid icon_state, "honker"
+2022-11-22T05:59:47.5616211Z 141 - /obj/item/gun/magic/staff/locker using invalid worn_icon_state, "lockerstaff"
+2022-11-22T05:59:47.5618590Z 142 - /obj/item/gun/magic/staff/flying using invalid worn_icon_state, "flightstaff"
+2022-11-22T05:59:47.5621083Z 143 - /obj/item/gun/magic/staff/babel using invalid worn_icon_state, "babelstaff"
+2022-11-22T05:59:47.5623626Z 144 - /obj/item/gun/magic/staff/necropotence using invalid worn_icon_state, "necrostaff"
+2022-11-22T05:59:47.5626131Z 145 - /obj/item/gun/magic/staff/wipe using invalid worn_icon_state, "wipestaff"
+2022-11-22T05:59:47.5643345Z 146 - /obj/item/melee/energy/sword/pirate using invalid icon_state, "e_cutlass"
+2022-11-22T05:59:47.5645538Z 147 - /obj/item/clothing/glasses/eyepatch using invalid icon_state, "eyepatch"
+2022-11-22T05:59:47.5650375Z 148 - /obj/item/melee/energy/sword/cyborg/saw using invalid icon_state, "esaw"
+2022-11-22T05:59:47.5661667Z 149 - /obj/item/tank/jetpack/improvised using invalid worn_icon_state, "jetpack-improvised"
+2022-11-22T05:59:47.5667402Z 150 - /obj/item/multitool using invalid icon_state, "multitool"
+2022-11-22T05:59:47.5669936Z 151 - /obj/item/multitool/cyborg using invalid icon_state, "multitool_cyborg"
+2022-11-22T05:59:47.5672485Z 152 - /obj/item/multitool/circuit using invalid icon_state, "multitool_circuit"
+2022-11-22T05:59:47.5675177Z 153 - /obj/item/pillow using invalid icon_state, "pillow_1_t"
+2022-11-22T05:59:47.5677618Z 154 - /obj/item/pillow/clown using invalid icon_state, "pillow_5_t"
+2022-11-22T05:59:47.5680084Z 155 - /obj/item/pillow/mime using invalid icon_state, "pillow_6_t"
+2022-11-22T05:59:47.5682788Z 156 - /obj/item/storage/bag/trash using invalid icon_state, "trashbag"
+2022-11-22T05:59:47.5685228Z 157 - /obj/item/storage/bag/trash/bluespace using invalid icon_state, "bluetrashbag"
+2022-11-22T05:59:47.5687673Z 158 - /obj/item/cane using invalid icon_state, "cane"
+2022-11-22T05:59:47.5690323Z 159 - /obj/item/cane/white using invalid icon_state, "cane_white"
+2022-11-22T05:59:47.5692922Z 160 - /obj/item/megaphone/clown using invalid icon_state, "megaphone-clown"
+2022-11-22T05:59:47.5711035Z 161 - /obj/item/food/pie/cream using invalid icon_state, "pie"
+2022-11-22T05:59:47.5722637Z 162 - /obj/item/instrument/bikehorn using invalid icon_state, "bike_horn"
+2022-11-22T05:59:47.5724979Z 163 - /obj/item/reagent_containers/cup/soda_cans/canned_laughter using invalid icon_state, "laughter"
+2022-11-22T05:59:47.5740550Z 164 - /obj/item/grown/bananapeel using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5741267Z 165 - /obj/item/grown/bananapeel/bombanana using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5741975Z 166 - /obj/item/grown/bananapeel/mimanapeel using invalid icon_state, "mimana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5742678Z 167 - /obj/item/grown/bananapeel/bluespace using invalid icon_state, "bluenana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5743387Z 168 - /obj/item/grown/bananapeel/specialpeel using invalid icon_state, "banana_peel" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5744054Z 169 - /obj/item/food/grown/banana using invalid icon_state, "banana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5744727Z 170 - /obj/item/food/grown/banana/bombanana using invalid icon_state, "banana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5745395Z 171 - /obj/item/food/grown/banana/mime using invalid icon_state, "mimana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5746068Z 172 - /obj/item/food/grown/banana/bluespace using invalid icon_state, "bluenana" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5746753Z 173 - /obj/item/food/grown/banana/bunch using invalid icon_state, "banana_bunch" in worn_icon override file, 'icons/mob/clothing/head/hydroponics.dmi'
+2022-11-22T05:59:47.5748235Z 174 - /obj/item/stack/spacecash/c1 using invalid icon_state, "spacecash1"
+2022-11-22T05:59:47.5749552Z 175 - /obj/item/stack/spacecash/c10 using invalid icon_state, "spacecash10"
+2022-11-22T05:59:47.5750858Z 176 - /obj/item/stack/spacecash/c20 using invalid icon_state, "spacecash20"
+2022-11-22T05:59:47.5752155Z 177 - /obj/item/stack/spacecash/c50 using invalid icon_state, "spacecash50"
+2022-11-22T05:59:47.5754575Z 178 - /obj/item/stack/spacecash/c100 using invalid icon_state, "spacecash100"
+2022-11-22T05:59:47.5758018Z 179 - /obj/item/stack/spacecash/c200 using invalid icon_state, "spacecash200"
+2022-11-22T05:59:47.5759981Z 180 - /obj/item/stack/spacecash/c500 using invalid icon_state, "spacecash500"
+2022-11-22T05:59:47.5763153Z 181 - /obj/item/stack/spacecash/c1000 using invalid icon_state, "spacecash1000"
+2022-11-22T05:59:47.5765191Z 182 - /obj/item/stack/spacecash/c10000 using invalid icon_state, "spacecash10000"
+2022-11-22T05:59:47.5768449Z 183 - /obj/item/clothing/mask/facehugger/toy using invalid worn_icon_state, "facehugger"
+2022-11-22T05:59:47.5777399Z 184 - /obj/item/kitchen/fork using invalid icon_state, "fork"
+2022-11-22T05:59:47.5779609Z 185 - /obj/item/kitchen/fork/plastic using invalid icon_state, "plastic_fork"
+2022-11-22T05:59:47.5786931Z 186 - /obj/item/kitchen/spoon using invalid icon_state, "spoon"
+2022-11-22T05:59:47.5788816Z 187 - /obj/item/kitchen/spoon/plastic using invalid icon_state, "plastic_spoon"
+2022-11-22T05:59:47.5796132Z 188 - /obj/item/bonesetter using invalid icon_state, "bonesetter"
+2022-11-22T05:59:47.5798117Z 189 - /obj/item/cautery using invalid icon_state, "cautery"
+2022-11-22T05:59:47.5801358Z 190 - /obj/item/cautery/advanced using invalid icon_state, "e_cautery"
+2022-11-22T05:59:47.5803355Z 191 - /obj/item/hemostat using invalid icon_state, "hemostat"
+2022-11-22T05:59:47.5806562Z 192 - /obj/item/hemostat/supermatter using invalid icon_state, "supermatter_tongs"
+2022-11-22T05:59:47.5808614Z 193 - /obj/item/retractor using invalid icon_state, "retractor"
+2022-11-22T05:59:47.5811999Z 194 - /obj/item/retractor/advanced using invalid icon_state, "adv_retractor"
+2022-11-22T05:59:47.5814490Z 195 - /obj/item/scalpel using invalid icon_state, "scalpel"
+2022-11-22T05:59:47.5817072Z 196 - /obj/item/scalpel/supermatter using invalid icon_state, "supermatter_scalpel"
+2022-11-22T05:59:47.5820120Z 197 - /obj/item/scalpel/advanced using invalid icon_state, "e_scalpel"
+2022-11-22T05:59:47.5822112Z 198 - /obj/item/surgical_drapes using invalid icon_state, "surgical_drapes"
+2022-11-22T05:59:47.5826686Z 199 - /obj/item/stack/medical/bruise_pack using invalid icon_state, "brutepack"
+2022-11-22T05:59:47.5829169Z 200 - /obj/item/stack/medical/gauze using invalid icon_state, "gauze"
+2022-11-22T05:59:47.5831713Z 201 - /obj/item/stack/medical/suture using invalid icon_state, "suture"
+2022-11-22T05:59:47.5834293Z 202 - /obj/item/stack/medical/suture/medicated using invalid icon_state, "suture_purp"
+2022-11-22T05:59:47.5836945Z 203 - /obj/item/stack/medical/ointment using invalid icon_state, "ointment"
+2022-11-22T05:59:47.5839365Z 204 - /obj/item/stack/medical/mesh using invalid icon_state, "regen_mesh"
+2022-11-22T05:59:47.5841890Z 205 - /obj/item/stack/medical/mesh/advanced using invalid icon_state, "aloe_mesh"
+2022-11-22T05:59:47.5844397Z 206 - /obj/item/stack/medical/aloe using invalid icon_state, "aloe_paste"
+2022-11-22T05:59:47.5846906Z 207 - /obj/item/stack/medical/bone_gel using invalid icon_state, "bone-gel"
+2022-11-22T05:59:47.5849452Z 208 - /obj/item/stack/medical/poultice using invalid icon_state, "poultice"
+2022-11-22T05:59:47.5852140Z 209 - /obj/item/assembly/flash/handheld using invalid icon_state, "flash"
+2022-11-22T05:59:47.5854699Z 210 - /obj/item/clothing/mask/cigarette using invalid icon_state, "cigoff"
+2022-11-22T05:59:47.5857377Z 211 - /obj/item/clothing/mask/cigarette/rollie using invalid icon_state, "spliffoff"
+2022-11-22T05:59:47.5859944Z 212 - /obj/item/clothing/mask/cigarette/candy using invalid icon_state, "candyoff"
+2022-11-22T05:59:47.5862552Z 213 - /obj/item/clothing/mask/cigarette/cigar using invalid icon_state, "cigaroff"
+2022-11-22T05:59:47.5865143Z 214 - /obj/item/clothing/mask/cigarette/cigar/cohiba using invalid icon_state, "cigar2off"
+2022-11-22T05:59:47.5867644Z 215 - /obj/item/clothing/mask/cigarette/pipe using invalid icon_state, "pipeoff"
+2022-11-22T05:59:47.5870191Z 216 - /obj/item/clothing/mask/cigarette/pipe/cobpipe using invalid icon_state, "cobpipeoff"
+2022-11-22T05:59:47.5872621Z 217 - /obj/item/disk using invalid icon_state, "datadisk0"
+2022-11-22T05:59:47.5875148Z 218 - /obj/item/disk/holodisk using invalid icon_state, "holodisk"
+2022-11-22T05:59:47.5877898Z 219 - /obj/item/disk/nuclear using invalid icon_state, "nucleardisk"
+2022-11-22T05:59:47.5880496Z 220 - /obj/item/disk/surgery using invalid icon_state, "datadisk1"
+2022-11-22T05:59:47.5883119Z 221 - /obj/item/disk/cargo/bluespace_pod using invalid icon_state, "cargodisk"
+2022-11-22T05:59:47.5885955Z 222 - /obj/item/disk/tech_disk/major using invalid icon_state, "rndmajordisk"
+2022-11-22T05:59:47.5888500Z 223 - /obj/item/melee/powerfist using invalid icon_state, "powerfist"
+2022-11-22T05:59:47.5897706Z 224 - /obj/item/melee/skateboard using invalid icon_state, "skateboard"
+2022-11-22T05:59:47.5899984Z 225 - /obj/item/melee/skateboard/pro using invalid icon_state, "skateboard2"
+2022-11-22T05:59:47.5902460Z 226 - /obj/item/melee/skateboard/hoverboard using invalid icon_state, "hoverboard_red"
+2022-11-22T05:59:47.5904690Z 227 - /obj/item/melee/skateboard/hoverboard/admin using invalid icon_state, "hoverboard_nt"
+2022-11-22T05:59:47.5907845Z 228 - /obj/item/melee/baseball_bat using invalid icon_state, "baseball_bat"
+2022-11-22T05:59:47.5910306Z 229 - /obj/item/melee/baseball_bat/homerun using invalid icon_state, "baseball_bat_home"
+2022-11-22T05:59:47.5912836Z 230 - /obj/item/melee/baseball_bat/ablative using invalid icon_state, "baseball_bat_metal"
+2022-11-22T05:59:47.5915302Z 231 - /obj/item/melee/flyswatter using invalid icon_state, "flyswatter"
+2022-11-22T05:59:47.5919886Z 232 - /obj/item/melee/energy/axe using invalid icon_state, "axe"
+2022-11-22T05:59:47.5922388Z 233 - /obj/item/melee/energy/blade using invalid icon_state, "blade"
+2022-11-22T05:59:47.5924922Z 234 - /obj/item/melee/energy/blade/hardlight using invalid icon_state, "lightblade"
+2022-11-22T05:59:47.5927400Z 235 - /obj/item/melee/synthetic_arm_blade using invalid icon_state, "arm_blade"
+2022-11-22T05:59:47.5929855Z 236 - /obj/item/melee/sabre using invalid icon_state, "sabre"
+2022-11-22T05:59:47.5932585Z 237 - /obj/item/melee/beesword using invalid worn_icon_state, "stinger"
+2022-11-22T05:59:47.5935177Z 238 - /obj/item/melee/supermatter_sword using invalid icon_state, "supermatter_sword"
+2022-11-22T05:59:47.5941969Z 239 - /obj/item/melee/cleric_mace using invalid worn_icon_state, "default_worn"
+2022-11-22T05:59:47.5944403Z 240 - /obj/item/melee/rune_carver using invalid icon_state, "rune_carver"
+2022-11-22T05:59:47.5946893Z 241 - /obj/item/melee/ghost_sword using invalid icon_state, "spectral"
+2022-11-22T05:59:47.5949437Z 242 - /obj/item/reagent_containers/cup/glass/flask using invalid icon_state, "flask"
+2022-11-22T05:59:47.5951947Z 243 - /obj/item/reagent_containers/cup/glass/flask/gold using invalid icon_state, "flask_gold"
+2022-11-22T05:59:47.5954470Z 244 - /obj/item/reagent_containers/cup/glass/flask/det using invalid icon_state, "detflask"
+2022-11-22T05:59:47.5956926Z 245 - /obj/item/stamp using invalid icon_state, "stamp-ok"
+2022-11-22T05:59:47.5959499Z 246 - /obj/item/stamp/qm using invalid icon_state, "stamp-qm"
+2022-11-22T05:59:47.5962007Z 247 - /obj/item/stamp/law using invalid icon_state, "stamp-law"
+2022-11-22T05:59:47.5964537Z 248 - /obj/item/stamp/captain using invalid icon_state, "stamp-cap"
+2022-11-22T05:59:47.5967023Z 249 - /obj/item/stamp/hop using invalid icon_state, "stamp-hop"
+2022-11-22T05:59:47.5969512Z 250 - /obj/item/stamp/hos using invalid icon_state, "stamp-hos"
+2022-11-22T05:59:47.5972211Z 251 - /obj/item/stamp/ce using invalid icon_state, "stamp-ce"
+2022-11-22T05:59:47.5974735Z 252 - /obj/item/stamp/rd using invalid icon_state, "stamp-rd"
+2022-11-22T05:59:47.5977316Z 253 - /obj/item/stamp/cmo using invalid icon_state, "stamp-cmo"
+2022-11-22T05:59:47.5979863Z 254 - /obj/item/stamp/denied using invalid icon_state, "stamp-deny"
+2022-11-22T05:59:47.5982340Z 255 - /obj/item/stamp/void using invalid icon_state, "stamp-void"
+2022-11-22T05:59:47.5984839Z 256 - /obj/item/stamp/clown using invalid icon_state, "stamp-clown"
+2022-11-22T05:59:47.5987328Z 257 - /obj/item/stamp/mime using invalid icon_state, "stamp-mime"
+2022-11-22T05:59:47.5989790Z 258 - /obj/item/stamp/chap using invalid icon_state, "stamp-chap"
+2022-11-22T05:59:47.5992332Z 259 - /obj/item/stamp/centcom using invalid icon_state, "stamp-centcom"
+2022-11-22T05:59:47.5994835Z 260 - /obj/item/stamp/syndicate using invalid icon_state, "stamp-syndicate"
+2022-11-22T05:59:47.5999537Z 261 - /obj/item/storage/lockbox/medal using invalid icon_state, "medalbox+l"
+2022-11-22T05:59:47.6006307Z 262 - /obj/item/crowbar/red/caravan using invalid icon_state, "crowbar_caravan"
+2022-11-22T05:59:47.6026916Z 263 - /obj/item/crowbar/mechremoval using invalid icon_state, "mechremoval0"
+2022-11-22T05:59:47.6027464Z 264 - /obj/item/crowbar/drone using invalid icon_state, "crowbar_cyborg"
+2022-11-22T05:59:47.6045435Z
+2022-11-22T05:59:47.6045723Z [1;32mPASS[0m /datum/unit_test/suit_storage_icons 1.8s
+2022-11-22T05:59:47.6046285Z ##[endgroup]
+2022-11-22T05:59:49.3705818Z ##[group]/datum/unit_test/amputation
+2022-11-22T05:59:49.4134911Z
+2022-11-22T05:59:49.4135822Z [1;32mPASS[0m /datum/unit_test/amputation 0.1s
+2022-11-22T05:59:49.4136599Z ##[endgroup]
+2022-11-22T05:59:49.4382113Z ##[group]/datum/unit_test/brain_surgery
+2022-11-22T05:59:49.4804850Z
+2022-11-22T05:59:49.4805763Z [1;32mPASS[0m /datum/unit_test/brain_surgery 0s
+2022-11-22T05:59:49.4806504Z ##[endgroup]
+2022-11-22T05:59:49.5219202Z ##[group]/datum/unit_test/head_transplant
+2022-11-22T05:59:49.5928104Z
+2022-11-22T05:59:49.5929815Z [1;32mPASS[0m /datum/unit_test/head_transplant 0s
+2022-11-22T05:59:49.5933029Z ##[endgroup]
+2022-11-22T05:59:49.6712586Z ##[group]/datum/unit_test/multiple_surgeries
+2022-11-22T05:59:49.7356777Z
+2022-11-22T05:59:49.7357986Z [1;32mPASS[0m /datum/unit_test/multiple_surgeries 0.1s
+2022-11-22T05:59:49.7359539Z ##[endgroup]
+2022-11-22T05:59:49.7649974Z ##[group]/datum/unit_test/start_tend_wounds
+2022-11-22T05:59:49.8066946Z
+2022-11-22T05:59:49.8067917Z [1;32mPASS[0m /datum/unit_test/start_tend_wounds 0.1s
+2022-11-22T05:59:49.8068876Z ##[endgroup]
+2022-11-22T05:59:49.8487591Z ##[group]/datum/unit_test/tend_wounds
+2022-11-22T05:59:49.9400599Z
+2022-11-22T05:59:49.9401319Z [1;32mPASS[0m /datum/unit_test/tend_wounds 0.1s
+2022-11-22T05:59:49.9402005Z ##[endgroup]
+2022-11-22T05:59:50.0310912Z ##[group]/datum/unit_test/auto_teleporter_linking
+2022-11-22T05:59:50.0641967Z
+2022-11-22T05:59:50.0643714Z [1;32mPASS[0m /datum/unit_test/auto_teleporter_linking 0s
+2022-11-22T05:59:50.0647032Z ##[endgroup]
+2022-11-22T05:59:50.0823643Z ##[group]/datum/unit_test/tgui_create_message
+2022-11-22T05:59:50.0824184Z
+2022-11-22T05:59:50.0826702Z [1;32mPASS[0m /datum/unit_test/tgui_create_message 0s
+2022-11-22T05:59:50.0827332Z ##[endgroup]
+2022-11-22T05:59:50.0980740Z ##[group]/datum/unit_test/timer_sanity
+2022-11-22T05:59:50.0981184Z
+2022-11-22T05:59:50.0983576Z [1;32mPASS[0m /datum/unit_test/timer_sanity 0s
+2022-11-22T05:59:50.0984274Z ##[endgroup]
+2022-11-22T05:59:50.1136569Z ##[group]/datum/unit_test/traitor
+2022-11-22T05:59:51.5476276Z
+2022-11-22T05:59:51.5477028Z [1;32mPASS[0m /datum/unit_test/traitor 1.4s
+2022-11-22T05:59:51.5477682Z ##[endgroup]
+2022-11-22T05:59:53.7711821Z ##[group]/datum/unit_test/verify_config_tags
+2022-11-22T05:59:53.7714663Z
+2022-11-22T05:59:53.7716722Z [1;32mPASS[0m /datum/unit_test/verify_config_tags 0s
+2022-11-22T05:59:53.7718585Z ##[endgroup]
+2022-11-22T05:59:53.7880948Z ##[group]/datum/unit_test/verify_emoji_names
+2022-11-22T05:59:53.7883956Z
+2022-11-22T05:59:53.7885900Z [1;32mPASS[0m /datum/unit_test/verify_emoji_names 0s
+2022-11-22T05:59:53.7886813Z ##[endgroup]
+2022-11-22T05:59:53.8042437Z ##[group]/datum/unit_test/wizard_loadout
+2022-11-22T05:59:53.8966549Z
+2022-11-22T05:59:53.8967690Z [1;32mPASS[0m /datum/unit_test/wizard_loadout 0s
+2022-11-22T05:59:53.8971302Z ##[endgroup]
+2022-11-22T05:59:54.0341360Z ##[group]/datum/unit_test/find_reference_sanity
+2022-11-22T05:59:54.0343250Z
+2022-11-22T05:59:54.0344168Z [1;32mPASS[0m /datum/unit_test/find_reference_sanity 0s
+2022-11-22T05:59:54.0344973Z ##[endgroup]
+2022-11-22T05:59:54.0508234Z ##[group]/datum/unit_test/find_reference_baseline
+2022-11-22T05:59:54.0509845Z
+2022-11-22T05:59:54.0510616Z [1;32mPASS[0m /datum/unit_test/find_reference_baseline 0s
+2022-11-22T05:59:54.0511376Z ##[endgroup]
+2022-11-22T05:59:54.0666075Z ##[group]/datum/unit_test/find_reference_exotic
+2022-11-22T05:59:54.0667801Z
+2022-11-22T05:59:54.0668446Z [1;32mPASS[0m /datum/unit_test/find_reference_exotic 0s
+2022-11-22T05:59:54.0669104Z ##[endgroup]
+2022-11-22T05:59:54.0824375Z ##[group]/datum/unit_test/find_reference_esoteric
+2022-11-22T05:59:54.0827948Z
+2022-11-22T05:59:54.0828897Z [1;32mPASS[0m /datum/unit_test/find_reference_esoteric 0s
+2022-11-22T05:59:54.0831682Z ##[endgroup]
+2022-11-22T05:59:54.0985304Z ##[group]/datum/unit_test/find_reference_null_key_entry
+2022-11-22T05:59:54.0986412Z
+2022-11-22T05:59:54.0989135Z [1;32mPASS[0m /datum/unit_test/find_reference_null_key_entry 0s
+2022-11-22T05:59:54.0989794Z ##[endgroup]
+2022-11-22T05:59:54.1142690Z ##[group]/datum/unit_test/find_reference_assoc_investigation
+2022-11-22T05:59:54.1144882Z
+2022-11-22T05:59:54.1145600Z [1;32mPASS[0m /datum/unit_test/find_reference_assoc_investigation 0s
+2022-11-22T05:59:54.1146288Z ##[endgroup]
+2022-11-22T05:59:54.1488133Z ##[group]/datum/unit_test/find_reference_static_investigation
+2022-11-22T05:59:54.3399002Z
+2022-11-22T05:59:54.3403994Z [1;32mPASS[0m /datum/unit_test/find_reference_static_investigation 0.2s
+2022-11-22T05:59:54.3407766Z ##[endgroup]
+2022-11-22T05:59:54.5076371Z ##[group]/datum/unit_test/area_contents
+2022-11-22T05:59:55.8000804Z
+2022-11-22T05:59:55.8001526Z [1;32mPASS[0m /datum/unit_test/area_contents 1.2s
+2022-11-22T05:59:55.8002197Z ##[endgroup]
+2022-11-22T05:59:57.0666199Z ##[group]/datum/unit_test/mapload_space_verification
+2022-11-22T05:59:57.6160655Z
+2022-11-22T05:59:57.6161803Z [1;32mPASS[0m /datum/unit_test/mapload_space_verification 0.6s
+2022-11-22T05:59:57.6162718Z ##[endgroup]
+2022-11-22T05:59:58.1323397Z ##[group]/datum/unit_test/monkey_business
+2022-11-22T06:00:35.7184860Z
+2022-11-22T06:00:35.7185899Z [1;32mPASS[0m /datum/unit_test/monkey_business 37.6s
+2022-11-22T06:00:35.7186595Z ##[endgroup]
+2022-11-22T06:00:37.5877549Z ##[group]/datum/unit_test/create_and_destroy
+2022-11-22T06:05:59.0302461Z
+2022-11-22T06:05:59.0303736Z [1;32mPASS[0m /datum/unit_test/create_and_destroy 321.5s
+2022-11-22T06:05:59.0304705Z ##[endgroup]
+2022-11-22T06:05:59.0560174Z Shutting down Chat subsystem...
+2022-11-22T06:05:59.0560975Z Shutting down Init Profiler subsystem...
+2022-11-22T06:05:59.0561903Z Shutting down Ban Cache subsystem...
+2022-11-22T06:05:59.0562231Z Shutting down Stat Panels subsystem...
+2022-11-22T06:05:59.0562518Z Shutting down Explosions subsystem...
+2022-11-22T06:05:59.0562810Z Shutting down Pathfinder subsystem...
+2022-11-22T06:05:59.0563088Z Shutting down Minor Mapping subsystem...
+2022-11-22T06:05:59.0563534Z Shutting down Shuttle subsystem...
+2022-11-22T06:05:59.0565078Z Shutting down Lighting subsystem...
+2022-11-22T06:05:59.0566480Z Shutting down XKeyScore subsystem...
+2022-11-22T06:05:59.0567870Z Shutting down PRISM subsystem...
+2022-11-22T06:05:59.0569247Z Shutting down Icon Smoothing subsystem...
+2022-11-22T06:05:59.0570863Z Shutting down Assets subsystem...
+2022-11-22T06:05:59.0572220Z Shutting down Vote subsystem...
+2022-11-22T06:05:59.0573617Z Shutting down Persistent Paintings subsystem...
+2022-11-22T06:05:59.0575023Z Shutting down Persistence subsystem...
+2022-11-22T06:05:59.0576420Z Shutting down Atmospherics subsystem...
+2022-11-22T06:05:59.0577826Z Shutting down Wiremod Composite Templates subsystem...
+2022-11-22T06:05:59.0579235Z Shutting down Wet floors subsystem...
+2022-11-22T06:05:59.0580595Z Shutting down Weather subsystem...
+2022-11-22T06:05:59.0581983Z Shutting down Wardrobe subsystem...
+2022-11-22T06:05:59.0583357Z Shutting down Verb Manager subsystem...
+2022-11-22T06:05:59.0584713Z Shutting down Tram Process subsystem...
+2022-11-22T06:05:59.0586074Z Shutting down Traitor subsystem...
+2022-11-22T06:05:59.0587442Z Shutting down Throwing subsystem...
+2022-11-22T06:05:59.0588806Z Shutting down tgui subsystem...
+2022-11-22T06:05:59.0590275Z Shutting down Supermatter Cascade subsystem...
+2022-11-22T06:05:59.0591689Z Shutting down Sun subsystem...
+2022-11-22T06:05:59.0593206Z Shutting down Speech Controller subsystem...
+2022-11-22T06:05:59.0594635Z Shutting down Space Drift subsystem...
+2022-11-22T06:05:59.0596040Z Shutting down Smoke subsystem...
+2022-11-22T06:05:59.0597460Z Shutting down Singularity subsystem...
+2022-11-22T06:05:59.0598856Z Shutting down Radio subsystem...
+2022-11-22T06:05:59.0600239Z Shutting down Radiation subsystem...
+2022-11-22T06:05:59.0601840Z Shutting down Projectiles subsystem...
+2022-11-22T06:05:59.0603292Z Shutting down Processing subsystem...
+2022-11-22T06:05:59.0604868Z Shutting down Points of Interest subsystem...
+2022-11-22T06:05:59.0606290Z Shutting down Plumbing subsystem...
+2022-11-22T06:05:59.0607708Z Shutting down Ping subsystem...
+2022-11-22T06:05:59.0609094Z Shutting down Parallax subsystem...
+2022-11-22T06:05:59.0611351Z Shutting down pAI subsystem...
+2022-11-22T06:05:59.0611677Z Shutting down Overlay subsystem...
+2022-11-22T06:05:59.3302992Z Shutting down Objects subsystem...
+2022-11-22T06:05:59.3303354Z Shutting down Obj Tab Items subsystem...
+2022-11-22T06:05:59.3303683Z Shutting down NPC Pool subsystem...
+2022-11-22T06:05:59.3303994Z Shutting down Night Shift subsystem...
+2022-11-22T06:05:59.3304320Z Shutting down Movement Loops subsystem...
+2022-11-22T06:05:59.3304653Z Shutting down Movement Handler subsystem...
+2022-11-22T06:05:59.3304967Z Shutting down MouseEntered subsystem...
+2022-11-22T06:05:59.3305289Z Shutting down Mood subsystem...
+2022-11-22T06:05:59.3305578Z Shutting down Mobs subsystem...
+2022-11-22T06:05:59.3305883Z Shutting down Materials subsystem...
+2022-11-22T06:05:59.3306202Z Shutting down Lua Scripting subsystem...
+2022-11-22T06:05:59.3460713Z Shutting down Library Loading subsystem...
+2022-11-22T06:05:59.3461033Z Shutting down Lag Switch subsystem...
+2022-11-22T06:05:59.3461327Z Shutting down Idling NPC Pool subsystem...
+2022-11-22T06:05:59.3461603Z Shutting down Foam subsystem...
+2022-11-22T06:05:59.3461857Z Shutting down Fluid subsystem...
+2022-11-22T06:05:59.3462121Z Shutting down Fire Burning subsystem...
+2022-11-22T06:05:59.3462392Z Shutting down Fast Processing subsystem...
+2022-11-22T06:05:59.3462673Z Shutting down Eigenstates subsystem...
+2022-11-22T06:05:59.3462939Z Shutting down Disease subsystem...
+2022-11-22T06:05:59.3463226Z Shutting down Datum Component System subsystem...
+2022-11-22T06:05:59.3463522Z Shutting down Conveyor Belts subsystem...
+2022-11-22T06:05:59.3463807Z Shutting down Communications subsystem...
+2022-11-22T06:05:59.3464096Z Shutting down Clock Component subsystem...
+2022-11-22T06:05:59.3464398Z Shutting down Circuit Components subsystem...
+2022-11-22T06:05:59.3464683Z Shutting down Blackmarket subsystem...
+2022-11-22T06:05:59.3464965Z Shutting down Basic Avoidance subsystem...
+2022-11-22T06:05:59.3465243Z Shutting down Aura Healing subsystem...
+2022-11-22T06:05:59.3465499Z Shutting down Augury subsystem...
+2022-11-22T06:05:59.3465766Z Shutting down Asset Loading subsystem...
+2022-11-22T06:05:59.3466047Z Shutting down Area Contents subsystem...
+2022-11-22T06:05:59.3466317Z Shutting down Antag HUDs subsystem...
+2022-11-22T06:05:59.3466583Z Shutting down Ambience subsystem...
+2022-11-22T06:05:59.3466879Z Shutting down Addiction subsystem...
+2022-11-22T06:05:59.3467142Z Shutting down Acid subsystem...
+2022-11-22T06:05:59.3467393Z Shutting down Timer subsystem...
+2022-11-22T06:05:59.3467655Z Shutting down Sound Loops subsystem...
+2022-11-22T06:05:59.3467925Z Shutting down Runechat subsystem...
+2022-11-22T06:05:59.3468169Z Shutting down Skills subsystem...
+2022-11-22T06:05:59.3468430Z Shutting down Machines subsystem...
+2022-11-22T06:05:59.3468688Z Shutting down Language subsystem...
+2022-11-22T06:05:59.3468945Z Shutting down Atoms subsystem...
+2022-11-22T06:05:59.3498456Z Shutting down Restaurant subsystem...
+2022-11-22T06:05:59.3498741Z Shutting down Economy subsystem...
+2022-11-22T06:05:59.3499019Z Shutting down Spatial Grid subsystem...
+2022-11-22T06:05:59.3499293Z Shutting down Networks subsystem...
+2022-11-22T06:05:59.3499567Z Shutting down Time Tracking subsystem...
+2022-11-22T06:05:59.3499837Z Shutting down Research subsystem...
+2022-11-22T06:05:59.3500105Z Shutting down Early Assets subsystem...
+2022-11-22T06:05:59.3500360Z Shutting down Mapping subsystem...
+2022-11-22T06:05:59.3500639Z Shutting down Trading Card Game subsystem...
+2022-11-22T06:05:59.3500911Z Shutting down Ticker subsystem...
+2022-11-22T06:05:59.3510965Z Unable to locate admins backup file.
+2022-11-22T06:05:59.3520958Z Shutting down AI Controller Ticker subsystem...
+2022-11-22T06:05:59.3521311Z Shutting down AI Behavior Ticker subsystem...
+2022-11-22T06:05:59.3521671Z Shutting down AI movement subsystem...
+2022-11-22T06:05:59.3521947Z Shutting down Jobs subsystem...
+2022-11-22T06:05:59.3522221Z Shutting down IDs and Access subsystem...
+2022-11-22T06:05:59.3522494Z Shutting down Events subsystem...
+2022-11-22T06:05:59.3522763Z Shutting down Reagents subsystem...
+2022-11-22T06:05:59.3523011Z Shutting down Quirks subsystem...
+2022-11-22T06:05:59.3523274Z Shutting down Station subsystem...
+2022-11-22T06:05:59.3523543Z Shutting down Achievements subsystem...
+2022-11-22T06:05:59.3523814Z Shutting down Discord subsystem...
+2022-11-22T06:05:59.3524084Z Shutting down Security Level subsystem...
+2022-11-22T06:05:59.3524367Z Shutting down Vis contents overlays subsystem...
+2022-11-22T06:05:59.3524654Z Shutting down Greyscale subsystem...
+2022-11-22T06:05:59.3524926Z Shutting down Instruments subsystem...
+2022-11-22T06:05:59.3525192Z Shutting down Sounds subsystem...
+2022-11-22T06:05:59.3525449Z Shutting down Input subsystem...
+2022-11-22T06:05:59.3525704Z Shutting down Server Tasks subsystem...
+2022-11-22T06:05:59.3525973Z Shutting down Blackbox subsystem...
+2022-11-22T06:05:59.3532540Z Shutting down Database subsystem...
+2022-11-22T06:05:59.3536259Z Shutting down Garbage subsystem...
+2022-11-22T06:06:02.5929884Z Shutting down Title Screen subsystem...
+2022-11-22T06:06:02.5938646Z Shutting down Profiler subsystem...
+2022-11-22T06:06:02.5938959Z Shutdown complete
+2022-11-22T06:06:02.5939212Z Test run failed!
+2022-11-22T06:06:02.5939464Z Unit Tests failed!
+2022-11-22T06:06:05.8501499Z cat: ci_test/data/logs/ci/clean_run.lk: No such file or directory
+2022-11-22T06:06:05.8510694Z ##[error]Process completed with exit code 1.
+2022-11-22T06:06:05.8571091Z ##[group]Run actions/upload-artifact@v3
+2022-11-22T06:06:05.8571371Z with:
+2022-11-22T06:06:05.8571578Z name: test_artifacts_metastation
+2022-11-22T06:06:05.8571829Z path: data/screenshots_new/
+2022-11-22T06:06:05.8572069Z retention-days: 1
+2022-11-22T06:06:05.8572302Z if-no-files-found: warn
+2022-11-22T06:06:05.8572537Z ##[endgroup]
+2022-11-22T06:06:05.9542976Z With the provided path, there will be 85 files uploaded
+2022-11-22T06:06:05.9547799Z Starting artifact upload
+2022-11-22T06:06:05.9548728Z For more detailed logs during the artifact upload process, enable step-debugging: https://docs.github.com/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging
+2022-11-22T06:06:05.9549251Z Artifact name is valid!
+2022-11-22T06:06:06.0022749Z Container for artifact "test_artifacts_metastation" successfully created. Starting upload of file(s)
+2022-11-22T06:06:09.2441638Z Total size of all the files uploaded is 138917 bytes
+2022-11-22T06:06:09.2447148Z File upload process has finished. Finalizing the artifact upload
+2022-11-22T06:06:09.2805430Z Artifact has been finalized. All files have been successfully uploaded!
+2022-11-22T06:06:09.2806662Z
+2022-11-22T06:06:09.2807159Z The raw size of all the files that were specified for upload is 139272 bytes
+2022-11-22T06:06:09.2807708Z The size of all the files that were uploaded is 138917 bytes. This takes into account any gzip compression used to reduce the upload size, time and storage
+2022-11-22T06:06:09.2808041Z
+2022-11-22T06:06:09.2808979Z Note: The size of downloaded zips can differ significantly from the reported size. For more information see: https://github.com/actions/upload-artifact#zipped-artifact-downloads
+2022-11-22T06:06:09.2809397Z
+2022-11-22T06:06:09.2812047Z Artifact test_artifacts_metastation has been successfully uploaded!
+2022-11-22T06:06:09.2918500Z Post job cleanup.
+2022-11-22T06:06:09.4177546Z [command]/usr/bin/git version
+2022-11-22T06:06:09.4226862Z git version 2.38.1
+2022-11-22T06:06:09.4272386Z Temporarily overriding HOME='/home/runner/work/_temp/3651e392-e3ad-4441-afa8-7ee48fcb17c5' before making global git config changes
+2022-11-22T06:06:09.4273477Z Adding repository directory to the temporary git global config as a safe directory
+2022-11-22T06:06:09.4278058Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/tgstation/tgstation
+2022-11-22T06:06:09.4318612Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
+2022-11-22T06:06:09.4355928Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
+2022-11-22T06:06:09.4604637Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
+2022-11-22T06:06:09.4633829Z http.https://github.com/.extraheader
+2022-11-22T06:06:09.4644074Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
+2022-11-22T06:06:09.4679820Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
+2022-11-22T06:06:09.5065985Z Print service container logs: 57e9ed27eab042ee8653063f2a3e4b8e_mysqllatest_56fbdc
+2022-11-22T06:06:09.5071674Z ##[command]/usr/bin/docker logs --details 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T06:06:09.5286568Z 2022-11-22T05:53:56.868118Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-11-22T06:06:09.5287137Z 2022-11-22 05:53:56+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
+2022-11-22T06:06:09.5287504Z 2022-11-22 05:53:56+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
+2022-11-22T06:06:09.5287896Z 2022-11-22 05:53:56+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
+2022-11-22T06:06:09.5288258Z 2022-11-22 05:53:56+00:00 [Note] [Entrypoint]: Initializing database files
+2022-11-22T06:06:09.5289019Z 2022-11-22T05:53:56.868208Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.31) initializing of server in progress as process 81
+2022-11-22T06:06:09.5289439Z 2022-11-22 05:54:00+00:00 [Note] [Entrypoint]: Database files initialized
+2022-11-22T06:06:09.5289930Z 2022-11-22T05:53:56.874552Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-11-22T06:06:09.5290557Z 2022-11-22 05:54:00+00:00 [Note] [Entrypoint]: Starting temporary server
+2022-11-22T06:06:09.5291047Z 2022-11-22T05:53:57.197629Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-11-22T06:06:09.5291408Z 2022-11-22 05:54:00+00:00 [Note] [Entrypoint]: Temporary server started.
+2022-11-22T06:06:09.5291988Z 2022-11-22T05:53:58.200181Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
+2022-11-22T06:06:09.5292452Z '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
+2022-11-22T06:06:09.5293070Z 2022-11-22T05:54:00.332994Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-11-22T06:06:09.5293480Z
+2022-11-22T06:06:09.5293901Z 2022-11-22T05:54:00.334950Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 130
+2022-11-22T06:06:09.5294357Z 2022-11-22 05:54:02+00:00 [Note] [Entrypoint]: Stopping temporary server
+2022-11-22T06:06:09.5294846Z 2022-11-22T05:54:00.346343Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-11-22T06:06:09.5295201Z 2022-11-22 05:54:03+00:00 [Note] [Entrypoint]: Temporary server stopped
+2022-11-22T06:06:09.5295682Z 2022-11-22T05:54:00.487954Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-11-22T06:06:09.5295962Z
+2022-11-22T06:06:09.5296368Z 2022-11-22T05:54:00.674850Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2022-11-22T06:06:09.5296761Z 2022-11-22 05:54:03+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
+2022-11-22T06:06:09.5297625Z 2022-11-22T05:54:00.674889Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2022-11-22T06:06:09.5297989Z
+2022-11-22T06:06:09.5298506Z 2022-11-22T05:54:00.677758Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2022-11-22T06:06:09.5299158Z 2022-11-22T05:54:00.693697Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
+2022-11-22T06:06:09.5299767Z 2022-11-22T05:54:00.694297Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
+2022-11-22T06:06:09.5300346Z Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
+2022-11-22T06:06:09.5300968Z Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
+2022-11-22T06:06:09.5301453Z Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
+2022-11-22T06:06:09.5301932Z Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
+2022-11-22T06:06:09.5302399Z Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
+2022-11-22T06:06:09.5302918Z 2022-11-22T05:54:02.435269Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.31).
+2022-11-22T06:06:09.5303480Z 2022-11-22T05:54:03.189926Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.31) MySQL Community Server - GPL.
+2022-11-22T06:06:09.5304121Z 2022-11-22T05:54:03.676610Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
+2022-11-22T06:06:09.5304722Z 2022-11-22T05:54:03.678566Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 1
+2022-11-22T06:06:09.5305204Z 2022-11-22T05:54:03.685173Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
+2022-11-22T06:06:09.5305655Z 2022-11-22T05:54:03.828263Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
+2022-11-22T06:06:09.5306116Z 2022-11-22T05:54:03.993458Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
+2022-11-22T06:06:09.5306666Z 2022-11-22T05:54:03.993495Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
+2022-11-22T06:06:09.5307354Z 2022-11-22T05:54:03.994531Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
+2022-11-22T06:06:09.5308031Z 2022-11-22T05:54:04.011801Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
+2022-11-22T06:06:09.5308675Z 2022-11-22T05:54:04.011928Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
+2022-11-22T06:06:09.5341028Z Stop and remove container: 57e9ed27eab042ee8653063f2a3e4b8e_mysqllatest_56fbdc
+2022-11-22T06:06:09.5349945Z ##[command]/usr/bin/docker rm --force 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T06:06:09.7815354Z 46227faa62763969a068baae79fb2a9335a09ba7482aae30a49c8fed2bf356df
+2022-11-22T06:06:09.7841366Z Remove container network: github_network_7853d588c20f407bba7b04c3e70db729
+2022-11-22T06:06:09.7846737Z ##[command]/usr/bin/docker network rm github_network_7853d588c20f407bba7b04c3e70db729
+2022-11-22T06:06:09.8812686Z github_network_7853d588c20f407bba7b04c3e70db729
+2022-11-22T06:06:09.8962630Z Cleaning up orphan processes
diff --git a/tools/pull_request_hooks/package.json b/tools/pull_request_hooks/package.json
new file mode 100644
index 0000000000000..bedb411a91243
--- /dev/null
+++ b/tools/pull_request_hooks/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/tools/pull_request_hooks/rerunFlakyTests.js b/tools/pull_request_hooks/rerunFlakyTests.js
new file mode 100644
index 0000000000000..080b83dc4d1a7
--- /dev/null
+++ b/tools/pull_request_hooks/rerunFlakyTests.js
@@ -0,0 +1,299 @@
+const LABEL = "🤖 Flaky Test Report";
+const TITLE_BOT_HEADER = "title: ";
+
+// Only check jobs that start with these.
+// Helps make sure we don't restart something like screenshot tests or linters, which are not known to be flaky.
+const CONSIDERED_JOBS = [
+ "Integration Tests",
+];
+
+async function getFailedJobsForRun(github, context, workflowRunId, runAttempt) {
+ const jobs = await github.paginate(
+ github.rest.actions.listJobsForWorkflowRunAttempt,
+ {
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: workflowRunId,
+ attempt_number: runAttempt
+ },
+ response => {
+ return response.data;
+ });
+
+ return jobs
+ .filter((job) => job.conclusion === "failure");
+}
+
+export async function rerunFlakyTests({ github, context }) {
+ console.log("Flakey Test Checker")
+ const failingJobs = await getFailedJobsForRun(
+ github,
+ context,
+ context.payload.workflow_run.id,
+ context.payload.workflow_run.run_attempt
+ );
+
+ const filteredFailingJobs = failingJobs.filter((job) => {
+ console.log(`Failing job: ${job.name}`)
+ return CONSIDERED_JOBS.some((title) => job.name.startsWith(title));
+ });
+ if (filteredFailingJobs.length === 0) {
+ console.log("Failing jobs are NOT designated flaky. Not rerunning.");
+ return;
+ }
+
+ console.log(`Rerunning job: ${filteredFailingJobs[0].name}`);
+
+ github.rest.actions.reRunWorkflowFailedJobs({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: context.payload.workflow_run.id,
+ });
+}
+
+// Tries its best to extract a useful error title and message for the given log
+export function extractDetails(log) {
+ // Strip off timestamp
+ const lines = log.split(/^[0-9.:T\-]*?Z /gm);
+
+ const failureRegex = /^\t?FAILURE #(?[0-9]+): (?.+)/;
+ const groupRegex = /^##\[group\](?.+)/;
+
+ const failures = [];
+ let lastGroup = "root";
+ let loggingFailure;
+
+ const newFailure = (failureMatch) => {
+ const { headline } = failureMatch.groups;
+
+ loggingFailure = {
+ headline,
+ group: lastGroup.replace("/datum/unit_test/", ""),
+ details: [],
+ };
+ };
+
+ for (const line of lines) {
+ const groupMatch = line.match(groupRegex);
+ if (groupMatch) {
+ lastGroup = groupMatch.groups.group.trim();
+ continue;
+ }
+
+ const failureMatch = line.match(failureRegex);
+
+ if (loggingFailure === undefined) {
+ if (!failureMatch) {
+ continue;
+ }
+
+ newFailure(failureMatch);
+ } else if (failureMatch || line.startsWith("##")) {
+ failures.push(loggingFailure);
+ loggingFailure = undefined;
+
+ if (failureMatch) {
+ newFailure(failureMatch);
+ }
+ } else {
+ loggingFailure.details.push(line.trim());
+ }
+ }
+
+ // We had no logged failures, there's not really anything we can do here
+ if (failures.length === 0) {
+ return {
+ title: "Flaky test failure with no obvious source",
+ failures,
+ };
+ }
+
+ // We *could* create multiple failures for multiple groups.
+ // This would be important if we had multiple flaky tests at the same time.
+ // I'm choosing not to because it complicates this logic a bit, has the ability to go terribly wrong,
+ // and also because there's something funny to me about that increasing the urgency of fixing
+ // flaky tests. If it becomes a serious issue though, I would not mind this being fixed.
+ const uniqueGroups = new Set(failures.map((failure) => failure.group));
+
+ if (uniqueGroups.size > 1) {
+ return {
+ title: `Multiple flaky test failures in ${Array.from(uniqueGroups)
+ .sort()
+ .join(", ")}`,
+ failures,
+ };
+ }
+
+ const failGroup = failures[0].group;
+
+ if (failures.length > 1) {
+ return {
+ title: `Multiple errors in flaky test ${failGroup}`,
+ failures,
+ };
+ }
+
+ const failure = failures[0];
+
+ // Common patterns where we can always get a detailed title
+ const runtimeMatch = failure.headline.match(/Runtime in .+?: (?.+)/);
+ if (runtimeMatch) {
+ const runtime = runtimeMatch.groups.error.trim();
+
+ const invalidTimerMatch = runtime.match(/^Invalid timer:.+object:(?